prism_terminate.F90
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 subroutine prism_terminate ( ierror )
00014
00015
00016
00017 use PRISM, dummy_interface => prism_terminate
00018
00019 use PSMILe
00020
00021 use psmile_timer, only : psmile_timer_stop, psmile_timer_print
00022
00023 implicit none
00024
00025
00026
00027 integer, intent (out) :: ierror
00028
00029
00030
00031
00032
00033
00034
00035 integer, parameter :: nerrp = 1
00036
00037 logical :: flag
00038 integer :: ierrp (nerrp)
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068 Character(len=len_cvs_string), save :: mycvs =
00069 '$Id: prism_terminate.F90 2849 2011-01-05 08:14:13Z hanke $'
00070
00071
00072 #ifdef VERBOSE
00073 print *, trim(ch_id), ': prism_terminate: start'
00074 call psmile_flushstd
00075 #endif /* VERBOSE */
00076
00077 ierror = 0
00078 #ifdef __PSMILE_WITH_IO
00079
00080
00081
00082 call psmile_io_finalize (ierror)
00083 #endif
00084
00085
00086
00087 #ifdef PROFILE
00088 call psmile_timer_stop(1)
00089 call psmile_timer_print
00090 #endif
00091
00092
00093
00094 #ifdef PRISM_with_MPI1
00095 #ifdef VERBOSE
00096 print *, trim(ch_id), ': prism_terminate: PRISM_with_MPI1'
00097 call psmile_flushstd
00098 #endif /* VERBOSE */
00099 flag = .false.
00100 #else
00101 #ifdef VERBOSE
00102 print *, trim(ch_id), ': prism_terminate: not PRISM_with_MPI1'
00103 call psmile_flushstd
00104 #endif /* VERBOSE */
00105 call MPI_Finalized ( flag, ierror )
00106 #endif
00107
00108 if ( ierror /= MPI_SUCCESS ) then
00109 ierrp (1) = ierror
00110 ierror = PRISM_Error_Initialized
00111
00112 call psmile_error ( ierror, 'MPI_Finalized', &
00113 ierrp, nerrp, __FILE__, __LINE__ )
00114 return
00115 endif
00116
00117 if ( .not. flag ) then
00118 if ( MPI_was_initialized ) then
00119
00120 call MPI_Barrier(Appl%comm, ierror)
00121
00122 if (.not. Appl%stand_alone) call psmile_trs_finalize(PRISMdrv_root, ierror)
00123
00124 call MPI_Finalize ( ierror )
00125
00126 if ( ierror /= MPI_SUCCESS ) then
00127 ierrp (1) = ierror
00128 ierror = PRISM_Error_MPI
00129 call psmile_error ( ierror, 'MPI_Finalize', &
00130 ierrp, nerrp, __FILE__, __LINE__ )
00131 return
00132 endif
00133
00134 print *, trim(ch_id), ': -------------------------------------'
00135 print *, trim(ch_id), ': --- Note: MPI_Finalize was called ---'
00136 print *, trim(ch_id), ': --- from prism_terminate. ---'
00137 print *, trim(ch_id), ': -------------------------------------'
00138 call psmile_flushstd
00139
00140 else
00141
00142 print *, trim(ch_id), ': --------------------------------------------'
00143 print *, trim(ch_id), ': --- Warning: MPI_Finalize is expected to ---'
00144 print *, trim(ch_id), ': --- be called from application. ---'
00145 print *, trim(ch_id), ': --------------------------------------------'
00146 call psmile_flushstd
00147
00148 endif
00149 endif
00150
00151
00152
00153 call psmile_deallocate ( ierror )
00154
00155 PRISM_is_terminated = .true.
00156
00157 end subroutine prism_terminate