| 1 | ! $Id: $ | 
|---|
| 2 |       SUBROUTINE abort_physic(modname, message, ierr) | 
|---|
| 3 |       | 
|---|
| 4 | #ifdef CPP_IOIPSL | 
|---|
| 5 |       USE IOIPSL | 
|---|
| 6 | #else | 
|---|
| 7 | ! if not using IOIPSL, we still need to use (a local version of) getin_dump | 
|---|
| 8 |       USE ioipsl_getincom | 
|---|
| 9 | #endif | 
|---|
| 10 |       USE mod_phys_lmdz_para | 
|---|
| 11 |       USE print_control_mod, ONLY: lunout | 
|---|
| 12 |       IMPLICIT NONE | 
|---|
| 13 | ! | 
|---|
| 14 | ! Stops the simulation cleanly, closing files and printing various | 
|---|
| 15 | ! comments | 
|---|
| 16 | ! | 
|---|
| 17 | !  Input: modname = name of calling program | 
|---|
| 18 | !         message = stuff to print | 
|---|
| 19 | !         ierr    = severity of situation ( = 0 normal ) | 
|---|
| 20 |  | 
|---|
| 21 |       character(len=*), intent(in):: modname | 
|---|
| 22 |       integer ierr, ierror_mpi | 
|---|
| 23 |       character(len=*), intent(in):: message | 
|---|
| 24 |  | 
|---|
| 25 |       write(lunout,*) 'in abort_physic' | 
|---|
| 26 | #ifdef CPP_IOIPSL | 
|---|
| 27 | !$OMP MASTER | 
|---|
| 28 |       call histclo | 
|---|
| 29 |       call restclo | 
|---|
| 30 |       if (mpi_rank .eq. 0) then | 
|---|
| 31 |          call getin_dump | 
|---|
| 32 |       endif | 
|---|
| 33 | !$OMP END MASTER | 
|---|
| 34 | #endif | 
|---|
| 35 |  | 
|---|
| 36 |       write(lunout,*) 'Stopping in ', modname | 
|---|
| 37 |       write(lunout,*) 'Reason = ',message | 
|---|
| 38 |       if (ierr .eq. 0) then | 
|---|
| 39 |         write(lunout,*) 'Everything is cool' | 
|---|
| 40 |       else | 
|---|
| 41 |         write(lunout,*) 'Houston, we have a problem, ierr = ', ierr | 
|---|
| 42 | #ifdef CPP_MPI | 
|---|
| 43 | !$OMP CRITICAL (MPI_ABORT_PHYSIC) | 
|---|
| 44 |         call MPI_ABORT(COMM_LMDZ_PHY, 1, ierror_mpi) | 
|---|
| 45 | !$OMP END CRITICAL (MPI_ABORT_PHYSIC) | 
|---|
| 46 | #else | 
|---|
| 47 |         stop 1 | 
|---|
| 48 | #endif           | 
|---|
| 49 |       endif | 
|---|
| 50 |       END | 
|---|