00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 subroutine prismdrv_init(id_err)
00011
00012
00013
00014
00015 USE PRISMDrv, dummy_interface => PRISMDrv_Init
00016
00017
00018 IMPLICIT NONE
00019
00020
00021
00022
00023
00024
00025
00026 INTEGER, INTENT (Out) :: id_err
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 CHARACTER(LEN=len_cvs_string), SAVE :: mycvs =
00046 '$Id: prismdrv_init.F90 2791 2010-12-01 16:37:57Z hanke $'
00047
00048 LOGICAL :: ll_flag
00049
00050 INTEGER, PARAMETER :: nerrp=2
00051 INTEGER :: ierrp(nerrp)
00052
00053 INTEGER :: il_length, il_ndibuf
00054 INTEGER, DIMENSION(:), ALLOCATABLE :: ila_ibuf
00055
00056 INTEGER :: il_pos = 0
00057
00058
00059
00060
00061
00062
00063 real_pi = atan (1.0) * 4.0
00064 real_pi2 = 2.0 * real_pi
00065 real_pih = real_pi * 0.5
00066 real_deg2rad = real_pi / 180.0
00067
00068 dble_pi = atan (1.0d0) * 4.0d0
00069 dble_pi2 = 2.0d0 * dble_pi
00070 dble_pih = dble_pi * 0.5d0
00071 dble_deg2rad = dble_pi / 180.0d0
00072
00073
00074
00075 ig_nbtot_ranksets = 0
00076 sga_experiment_start_date%second = 0.0d0
00077 sga_experiment_start_date%minute = 0
00078 sga_experiment_start_date%hour = 0
00079 sga_experiment_start_date%day = 0
00080 sga_experiment_start_date%month = 0
00081 sga_experiment_start_date%year = 0
00082 sga_experiment_end_date%second = 0.0d0
00083 sga_experiment_end_date%minute = 0
00084 sga_experiment_end_date%hour = 0
00085 sga_experiment_end_date%day = 0
00086 sga_experiment_end_date%month = 0
00087 sga_experiment_end_date%year = 0
00088 sga_run_start_date%second = 0.0d0
00089 sga_run_start_date%minute = 0
00090 sga_run_start_date%hour = 0
00091 sga_run_start_date%day = 0
00092 sga_run_start_date%month = 0
00093 sga_run_start_date%year = 0
00094 sga_run_end_date%second = 0.0d0
00095 sga_run_end_date%minute = 0
00096 sga_run_end_date%hour = 0
00097 sga_run_end_date%day = 0
00098 sga_run_end_date%month = 0
00099 sga_run_end_date%year = 0
00100
00101 ig_driver_nb_pes = 0
00102 ig_nb_appl = 0
00103 ig_nb_tot_pes = 0
00104 ig_nb_tot_hosts = 0
00105 ig_nb_tot_comps = 0
00106 ig_nb_tot_args = 0
00107
00108 ig_nb_tot_unitsets= 0
00109 ig_nb_tot_grids = 0
00110 ig_nb_tot_transi = 0
00111 ig_nb_tot_persis = 0
00112
00113 ig_MPI = 0
00114 comm_drv_global = 0
00115 comm_drv_local = 0
00116 comm_drv_psmile = 0
00117 driver_rank = -1
00118 comm_drv_trans = 0
00119
00120 Number_of_Grids_drv = 0
00121 Number_of_Epios_allocated = 0
00122 Number_of_comms = 0
00123 Number_of_Interps = 0
00124 Number_of_Transfs = 0
00125 Number_of_Exchanges = 0
00126
00127
00128
00129
00130 CALL MPI_Initialized ( ll_flag, id_err )
00131
00132 IF (.NOT. ll_flag) THEN
00133
00134 CALL MPI_Init (id_err)
00135
00136 IF ( id_err /= MPI_SUCCESS ) THEN
00137 ierrp (1) = id_err
00138
00139
00140 RETURN
00141 ENDIF
00142
00143 ENDIF
00144
00145 Appl%name = 'driver'
00146
00147 CALL MPI_COMM_RANK ( MPI_COMM_WORLD, Appl%rank, id_err )
00148
00149 IF ( id_err /= MPI_SUCCESS ) THEN
00150 ierrp (1) = id_err
00151 call psmile_error_common ( PRISM_Error_MPI, 'MPI_Comm_rank', &
00152 ierrp, 1, __FILE__, __LINE__ )
00153 RETURN
00154 ENDIF
00155
00156
00157 CALL MPI_ALLREDUCE(Appl%rank, PRISMdrv_root, 1, MPI_Integer, MPI_MIN, MPI_COMM_WORLD, id_err)
00158
00159 IF ( id_err /= MPI_SUCCESS ) THEN
00160 ierrp (1) = id_err
00161 call psmile_error_common ( PRISM_Error_MPI, 'MPI_Allreduce', &
00162 ierrp, 1, __FILE__, __LINE__ )
00163 RETURN
00164 ENDIF
00165
00166
00167
00168
00169 il_length = 6
00170 length_of_integer = BIT_SIZE (datatypes2mpi (1)) / 8
00171 il_ndibuf = il_length / length_of_integer + 1
00172
00173 ALLOCATE (ila_ibuf(1:il_ndibuf), STAT = id_err)
00174 IF ( id_err > 0 ) THEN
00175 ierrp (1) = id_err
00176 ierrp (2) = il_ndibuf
00177 call psmile_error_common ( PRISM_Error_Alloc, 'ila_ibuf', &
00178 ierrp, 2, __FILE__, __LINE__ )
00179 RETURN
00180 ENDIF
00181
00182 #ifdef NAG_COMPILER
00183 call psmile_redirstdout ( 'driver', il_length, &
00184 1, Appl%rank, Appl%size, id_err)
00185 #else
00186 call psmile_char2buf(ila_ibuf, il_ndibuf, il_pos, 'driver')
00187 call psmile_redirstdout(ila_ibuf, il_length, 1, Appl%rank, Appl%size, id_err)
00188 #endif
00189
00190 #ifdef VERBOSE
00191 PRINT *, '|'
00192 PRINT *, '| Enter PRISMDrv_Init'
00193
00194 PRINT *, '| Quit PRISMDrv_Init'
00195 PRINT *, '|'
00196 call psmile_flushstd
00197 #endif
00198 END SUBROUTINE PRISMDrv_Init
00199
00200