00001
00002
00003
00004
00005
00006
00007
00008
00009 SUBROUTINE PRISMDrv_Init_smioc_struct(id_err)
00010
00011
00012
00013
00014 USE PRISMDrv, dummy_interface => PRISMDrv_Init_smioc_struct
00015 USE PSMILE_smioc
00016 USE PSMILE_smioc_interface
00017
00018 IMPLICIT NONE
00019
00020
00021
00022
00023
00024
00025
00026
00027 INTEGER, INTENT (Out) :: id_err
00028
00029
00030 INTEGER :: sasa_c_read_file, sasa_c_close
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 CHARACTER(LEN=80), SAVE :: mycvs =
00052 '$Id'
00053
00054
00055
00056 INTEGER, DIMENSION(:), ALLOCATABLE :: ila_comp_nb_stand_name
00057 INTEGER, DIMENSION(:), ALLOCATABLE :: ila_comp_nb_transi_in
00058 INTEGER, DIMENSION(:), ALLOCATABLE :: ila_comp_nb_transi_out
00059
00060
00061
00062
00063
00064
00065
00066 INTEGER, DIMENSION(:,:), ALLOCATABLE :: ila_driver_unitsets
00067
00068
00069 TYPE(smioc_grid), DIMENSION(:), ALLOCATABLE :: sla_driver_grids
00070
00071
00072 TYPE(transient), DIMENSION(:), ALLOCATABLE, TARGET :: sla_driver_transi
00073
00074
00075 TYPE(persistent), DIMENSION(:), ALLOCATABLE :: sla_driver_persis
00076
00077
00078 INTEGER :: ib_c, ib_nt, ib_a, ib_g, ib_ntt, ib_ntt2, ib_nin, ib, ib_nout
00079
00080
00081 INTEGER :: il_nu, il_ng, il_ntr, il_npe, ib_p, il_combi, il_source
00082 INTEGER :: il_npartinid, il_npartoutid, il_index1, il_index2
00083 INTEGER :: il_ntr_xml
00084
00085
00086 LOGICAL :: ll_combi, ll_source
00087
00088
00089 INTEGER :: il_smioc_send_size_i, il_smioc_send_size_c, il_smioc_send_size_d
00090 INTEGER :: il_index_i, il_index_c, il_index_d
00091
00092 INTEGER :: il_nb_int_i_fix, il_nb_int_i_in, il_nb_int_i_out
00093 INTEGER :: il_nb_int_d_fix, il_nb_int_d_in, il_nb_int_d_out
00094 INTEGER :: il_nb_int_c_fix, il_nb_int_c_in, il_nb_int_c_out
00095
00096 CHARACTER(LEN=max_name) :: cla_file_name
00097 CHARACTER(LEN=max_name) :: cla_appli_name
00098 CHARACTER(LEN=max_name) :: cla_comp_name
00099
00100 CHARACTER(LEN=max_name), DIMENSION(:), ALLOCATABLE :: cla_smioc_send
00101 INTEGER, DIMENSION(:), ALLOCATABLE :: ila_smioc_send
00102 INTEGER, DIMENSION(ig_nb_tot_pes) :: ila_tgt_proc
00103 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: dla_smioc_send
00104 REAL, DIMENSION(:), ALLOCATABLE :: rla_smioc_send
00105
00106 INTEGER :: il_index, ib_bis, ib_ter, il_nb_comp_pes
00107 INTEGER :: il_length
00108
00109 LOGICAL :: ll_userdef_details
00110
00111
00112 INTEGER, PARAMETER :: nerrp = 2
00113 INTEGER :: ierrp (nerrp)
00114
00115
00116
00117 INTEGER, DIMENSION(7) :: ila_dim_size
00118 INTEGER :: il_orig_index, il_dest_index, il_loc_index
00119 INTEGER :: il_trans_orig_index, il_trans_dest_index
00120 INTEGER :: il_cpl_rst_file_index, il_trans_interp_index
00121
00122 INTEGER, DIMENSION(:,:), ALLOCATABLE :: ila_orig_comp_id
00123 INTEGER, DIMENSION(:,:), ALLOCATABLE :: ila_dest_comp_id
00124 INTEGER, DIMENSION(:,:), ALLOCATABLE :: ila_combi_loc
00125 INTEGER, DIMENSION(:,:), ALLOCATABLE :: ila_trans_orig_id
00126 INTEGER, DIMENSION(:,:), ALLOCATABLE :: ila_trans_dest_id
00127
00128 INTEGER, DIMENSION(:,:), ALLOCATABLE :: ila_cpl_rst_file
00129 DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: dla_cpl_rst_file
00130 CHARACTER(len=max_name), DIMENSION(:,:), ALLOCATABLE :: cla_cpl_rst_file
00131
00132 INTEGER, DIMENSION(:,:), ALLOCATABLE :: ila_trans_interp
00133 DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: dla_trans_interp
00134 CHARACTER(len=max_name), DIMENSION(:,:), ALLOCATABLE :: cla_trans_interp
00135
00136
00137
00138
00139
00140 #ifdef VERBOSE
00141 PRINT *, '| | Enter PRISMDrv_init_smioc_struct'
00142 call psmile_flushstd
00143 #endif
00144
00145 nullify (sga_smioc_comp)
00146
00147
00148
00149
00150
00151 #ifdef VERBOSE
00152 PRINT *, '| | | '
00153 PRINT *, '| | | Get the dimensionning numbers : first pass for transients'
00154 PRINT *, '| | | Count the number of user-defined interpolations, if any'
00155 call psmile_flushstd
00156 #endif
00157
00158 ig_nb_tot_unitsets = 0
00159 ig_nb_tot_grids = 0
00160 ig_nb_tot_xml_grids = 0
00161 ig_nb_tot_transi = 0
00162 ig_nb_tot_xml_transi = 0
00163 ig_nb_tot_persis = 0
00164
00165
00166 ALLOCATE( iga_comp_id_doc_XML(ig_nb_tot_comps), stat=id_err )
00167 IF (id_err > 0) THEN
00168 ierrp (1) = id_err
00169 ierrp (2) = ig_nb_tot_comps
00170 id_err = 13
00171
00172 call psmile_error_common ( id_err, 'iga_comp_id_doc_XML', &
00173 ierrp, 2, __FILE__, __LINE__ )
00174 RETURN
00175 ENDIF
00176
00177
00178
00179
00180 ALLOCATE( iga_comp_nb_grids(ig_nb_tot_comps), stat=id_err )
00181 IF (id_err > 0) THEN
00182 ierrp (1) = id_err
00183 ierrp (2) = ig_nb_tot_comps
00184 id_err = 13
00185
00186 call psmile_error_common ( id_err, 'iga_comp_nb_grids', &
00187 ierrp, 2, __FILE__, __LINE__ )
00188 RETURN
00189 ENDIF
00190
00191 ALLOCATE( iga_xml_comp_nb_grids(ig_nb_tot_comps), stat=id_err )
00192 IF (id_err > 0) THEN
00193 ierrp (1) = id_err
00194 ierrp (2) = ig_nb_tot_comps
00195 id_err = 13
00196
00197 call psmile_error_common ( id_err, 'iga_xml_comp_nb_grids', &
00198 ierrp, 2, __FILE__, __LINE__ )
00199 RETURN
00200 ENDIF
00201
00202
00203 ALLOCATE( iga_comp_nb_transi(ig_nb_tot_comps), stat=id_err )
00204 IF (id_err > 0) THEN
00205 ierrp (1) = id_err
00206 ierrp (2) = ig_nb_tot_comps
00207 id_err = 13
00208
00209 call psmile_error_common ( id_err, 'iga_comp_nb_transi', &
00210 ierrp, 2, __FILE__, __LINE__ )
00211 RETURN
00212 ENDIF
00213
00214 ALLOCATE( iga_xml_comp_nb_transi(ig_nb_tot_comps), stat=id_err )
00215 IF (id_err > 0) THEN
00216 ierrp (1) = id_err
00217 ierrp (2) = ig_nb_tot_comps
00218 id_err = 13
00219
00220 call psmile_error_common ( id_err, 'iga_xml_comp_nb_transi', &
00221 ierrp, 2, __FILE__, __LINE__ )
00222 RETURN
00223 ENDIF
00224
00225
00226 ALLOCATE( iga_comp_nb_udef(ig_nb_tot_comps), stat=id_err )
00227 IF (id_err > 0) THEN
00228 ierrp (1) = id_err
00229 ierrp (2) = ig_nb_tot_comps
00230 id_err = 13
00231
00232 call psmile_error_common ( id_err, 'iga_comp_nb_udef', &
00233 ierrp, 2, __FILE__, __LINE__ )
00234 RETURN
00235 ENDIF
00236
00237
00238 ALLOCATE( iga_comp_nb_persis(ig_nb_tot_comps), stat=id_err )
00239 IF (id_err > 0) THEN
00240 ierrp (1) = id_err
00241 ierrp (2) = ig_nb_tot_comps
00242 id_err = 13
00243
00244 call psmile_error_common ( id_err, 'iga_comp_nb_persis', &
00245 ierrp, 2, __FILE__, __LINE__ )
00246 RETURN
00247 ENDIF
00248
00249
00250 ALLOCATE( iga_comp_nb_unitsets(ig_nb_tot_comps), stat=id_err )
00251 IF (id_err > 0) THEN
00252 ierrp (1) = id_err
00253 ierrp (2) = ig_nb_tot_comps
00254 id_err = 13
00255
00256 call psmile_error_common ( id_err, 'iga_comp_nb_unitsets', &
00257 ierrp, 2, __FILE__, __LINE__ )
00258 RETURN
00259 ENDIF
00260
00261
00262 ALLOCATE( sga_comp_udef_idx(ig_nb_tot_comps), stat=id_err )
00263 IF (id_err > 0) THEN
00264 ierrp (1) = id_err
00265 ierrp (2) = ig_nb_tot_comps
00266 id_err = 13
00267
00268 call psmile_error_common ( id_err, 'sga_comp_udef_idx', &
00269 ierrp, 2, __FILE__, __LINE__ )
00270 RETURN
00271 ENDIF
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284 iga_comp_nb_udef(:) = 0
00285
00286 iga_xml_comp_nb_transi(:) = 0
00287 iga_xml_comp_nb_grids(:) = 0
00288
00289 #ifdef CIM
00290
00291 if (ig_nb_tot_comps .ge. 1) then
00292
00293 iga_comp_id_doc_XML(1) = sasa_c_read_file ("cim.xml", 7)
00294 endif
00295
00296 DO ib_c = 2, ig_nb_tot_comps
00297 iga_comp_id_doc_XML(ib_c) = iga_comp_id_doc_XML(1)
00298 END DO
00299 #else
00300
00301 DO ib_c = 1, ig_nb_tot_comps
00302 call prismdrv_get_comp_names(ib_c, cla_appli_name, cla_comp_name, id_err)
00303 cla_file_name = TRIM(cla_appli_name)// &
00304 "_"// &
00305 TRIM(cla_comp_name)// &
00306 "_smioc.xml"
00307 il_length = LEN_TRIM(cla_file_name)
00308 #ifdef VERBOSE
00309 PRINT *, '| | | Get the cla_file_name ', TRIM(cla_file_name)
00310 call psmile_flushstd
00311 #endif
00312 iga_comp_id_doc_XML(ib_c) = sasa_c_read_file (cla_file_name, il_length)
00313 END DO
00314 #endif
00315
00316
00317
00318
00319
00320
00321 call prismdrv_get_udef_transients ( id_err )
00322
00323
00324
00325
00326
00327 DO ib_c = 1, ig_nb_tot_comps
00328
00329
00330 ll_userdef_details = .true.
00331 call prismdrv_get_comp_names(ib_c, cla_appli_name, cla_comp_name, id_err)
00332 call get_smioc_numbers ( iga_comp_id_doc_XML(ib_c), &
00333 iga_comp_nb_unitsets(ib_c), &
00334 iga_comp_nb_grids(ib_c), &
00335 iga_comp_nb_transi(ib_c), &
00336 iga_comp_nb_persis(ib_c), &
00337 ib_c, &
00338 cla_appli_name, &
00339 cla_comp_name, &
00340 ll_userdef_details, &
00341 id_err )
00342 IF (id_err .ne. 0) THEN
00343 PRINT *, '| | |WARNING: Pb in get_smioc_numbers'
00344 ENDIF
00345 #ifdef VERBOSE
00346 PRINT *, '| | | Component index: ', ib_c,' flag: ',ll_userdef_details
00347 PRINT *, '| | | Nb of Fortran unit sets ', iga_comp_nb_unitsets(ib_c)
00348 PRINT *, '| | | Nb of grids (+u_gl)', iga_comp_nb_grids(ib_c)
00349 PRINT *, '| | | Nb of transients (+u_gl)', iga_comp_nb_transi(ib_c)
00350 PRINT *, '| | | Nb of persistents ', iga_comp_nb_persis(ib_c)
00351 PRINT *, '| | | * * * Second pass for this Component * * * '
00352 PRINT *, '| | | '
00353 #endif
00354
00355 ig_nb_tot_unitsets = ig_nb_tot_unitsets + iga_comp_nb_unitsets(ib_c)
00356
00357 ig_nb_tot_grids = ig_nb_tot_grids + iga_comp_nb_grids(ib_c)
00358
00359 ig_nb_tot_transi = ig_nb_tot_transi + iga_comp_nb_transi(ib_c)
00360 ig_nb_tot_persis = ig_nb_tot_persis + iga_comp_nb_persis(ib_c)
00361
00362
00363 ALLOCATE(ila_smioc_send(4), stat=id_err)
00364 IF (id_err > 0) THEN
00365 ierrp (1) = id_err
00366 ierrp (2) = 4
00367 id_err = 13
00368
00369 call psmile_error_common ( id_err, 'ila_smioc_send', &
00370 ierrp, 2, __FILE__, __LINE__ )
00371 RETURN
00372 ENDIF
00373
00374 ila_smioc_send(1) = iga_comp_nb_unitsets(ib_c)
00375 ila_smioc_send(2) = iga_comp_nb_grids(ib_c)
00376 ila_smioc_send(3) = iga_comp_nb_transi(ib_c)
00377 ila_smioc_send(4) = iga_comp_nb_persis(ib_c)
00378
00379 ila_tgt_proc(:) = -1
00380 il_nb_comp_pes = 0
00381
00382 DO ib = 0, ig_nb_tot_pes + (ig_driver_nb_pes-1)
00383 IF ((ib < PRISMdrv_root) .OR. ((PRISMdrv_root + ig_driver_nb_pes) <= ib)) THEN
00384 DO ib_ter = 1, Drv_Procs(ib+1)%comps_per_rank
00385 IF (Drv_Procs(ib+1)%global_comp_id(ib_ter) .eq. ib_c) THEN
00386 il_nb_comp_pes = il_nb_comp_pes + 1
00387 ila_tgt_proc(il_nb_comp_pes) = Drv_Procs(ib+1)%global_rank(ib_ter)
00388 END IF
00389 END DO
00390 END IF
00391 END DO
00392
00393 IF (il_nb_comp_pes .eq. 0) THEN
00394 call prismdrv_get_comp_names(ib_c, cla_appli_name, cla_comp_name, id_err)
00395 cla_file_name = TRIM(cla_appli_name)// &
00396 "_"// &
00397 TRIM(cla_comp_name)// &
00398 "_smioc.xml"
00399 PRINT *, '| | | The smioc information for file ', TRIM(cla_file_name),&
00400 ' has not been sent'
00401 ierrp(1) = il_nb_comp_pes
00402 ierrp(2) = Drv_Procs(ib)%comps_per_rank
00403 call psmile_error_common ( id_err, 'prismdrv_init_smioc_struct', &
00404 ierrp, 2, __FILE__, __LINE__ )
00405 END IF
00406
00407 DO ib = 1, il_nb_comp_pes
00408
00409 CALL MPI_Send (ila_smioc_send, 4, MPI_Integer, &
00410 ila_tgt_proc(ib), 1, comm_drv_trans, id_err)
00411 #ifdef VERBOSE
00412 PRINT *, '| | | The transfer of smioc information from file ', &
00413 TRIM(cla_file_name), ' to process rank ', ila_tgt_proc(ib), ' begins.'
00414 PRINT *, '| | | '
00415 #endif
00416 END DO
00417
00418 DEALLOCATE(ila_smioc_send, stat=id_err)
00419 IF (id_err > 0) THEN
00420 ierrp (1) = id_err
00421 id_err = 14
00422
00423 call psmile_error_common ( id_err, 'ila_smioc_send', &
00424 ierrp, 1, __FILE__, __LINE__ )
00425 RETURN
00426 ENDIF
00427
00428 END DO
00429 #ifdef DEBUG
00430 PRINT *, '| | |Nb of unitsets total : ', ig_nb_tot_unitsets
00431 PRINT *, '| | |Nb of grids total : ', ig_nb_tot_grids
00432 PRINT *, '| | |Nb of transients total : ', ig_nb_tot_transi
00433 PRINT *, '| | |Nb of persistents total : ', ig_nb_tot_persis
00434 #endif
00435
00436 Number_of_Grids_drv = ig_nb_tot_grids
00437
00438 #ifdef DEBUG
00439 PRINT *, '| | | '
00440 PRINT *, '| | | Got the dimensionning numbers - End of Second Pass '
00441 call psmile_flushstd
00442 #endif
00443
00444 IF ( .not. ASSOCIATED(sga_smioc_comp) ) &
00445 ALLOCATE(sga_smioc_comp(1), stat=id_err )
00446 IF (id_err > 0) THEN
00447 ierrp (1) = id_err
00448 ierrp (2) = 1
00449 id_err = 13
00450 call psmile_error_common ( id_err, 'sga_smioc_comp', &
00451 ierrp, 2, __FILE__, __LINE__ )
00452 RETURN
00453 ENDIF
00454 NULLIFY(sga_smioc_comp(1)%iga_smioc_unitsets)
00455 NULLIFY(sga_smioc_comp(1)%sga_smioc_grids)
00456 NULLIFY(sga_smioc_comp(1)%sga_smioc_transi)
00457 NULLIFY(sga_smioc_comp(1)%sga_smioc_persis)
00458
00459 iga_smioc_unitsets => sga_smioc_comp(1)%iga_smioc_unitsets
00460 sga_smioc_grids => sga_smioc_comp(1)%sga_smioc_grids
00461 sga_smioc_transi => sga_smioc_comp(1)%sga_smioc_transi
00462 sga_smioc_persis => sga_smioc_comp(1)%sga_smioc_persis
00463
00464 ALLOCATE ( iga_smioc_unitsets (ig_nb_tot_unitsets, 3), stat=id_err )
00465 IF (id_err > 0) THEN
00466 ierrp (1) = id_err
00467 ierrp (2) = ig_nb_tot_unitsets
00468 id_err = 13
00469
00470 call psmile_error_common ( id_err, 'iga_smioc_unitsets', &
00471 ierrp, 2, __FILE__, __LINE__ )
00472 RETURN
00473 ENDIF
00474
00475 ALLOCATE ( sga_smioc_grids (ig_nb_tot_grids), stat=id_err )
00476 IF (id_err > 0) THEN
00477 ierrp (1) = id_err
00478 ierrp (2) = ig_nb_tot_grids
00479 id_err = 13
00480
00481 call psmile_error_common ( id_err, 'sga_smioc_grids', &
00482 ierrp, 2, __FILE__, __LINE__ )
00483 RETURN
00484 ENDIF
00485
00486 ALLOCATE ( sga_smioc_transi (ig_nb_tot_transi), stat=id_err )
00487 IF (id_err > 0) THEN
00488 ierrp (1) = id_err
00489 ierrp (2) = ig_nb_tot_transi
00490 id_err = 13
00491
00492 call psmile_error_common ( id_err, 'sga_smioc_transi', &
00493 ierrp, 2, __FILE__, __LINE__ )
00494 RETURN
00495 ENDIF
00496
00497 ALLOCATE ( sga_smioc_persis (ig_nb_tot_persis), stat=id_err )
00498 IF (id_err > 0) THEN
00499 ierrp (1) = id_err
00500 ierrp (2) = ig_nb_tot_persis
00501 id_err = 13
00502
00503 call psmile_error_common ( id_err, 'sga_smioc_persis', &
00504 ierrp, 2, __FILE__, __LINE__ )
00505 RETURN
00506 ENDIF
00507
00508 #ifdef VERBOSE
00509 PRINT *, '| | | '
00510 PRINT *, '| | | Global structures allocated'
00511 call psmile_flushstd
00512 #endif
00513
00514
00515
00516
00517
00518 #ifdef VERBOSE
00519 PRINT *, '| | | '
00520 PRINT *, '| | | Get the Fortran unit sets component per component'
00521 #endif
00522 il_nu = 0
00523
00524 DO ib_c = 1, ig_nb_tot_comps
00525
00526 IF (iga_comp_nb_unitsets(ib_c) .gt. 0) THEN
00527
00528
00529 ALLOCATE ( ila_driver_unitsets(iga_comp_nb_unitsets(ib_c),3), &
00530 stat=id_err )
00531 IF (id_err > 0) THEN
00532 ierrp (1) = id_err
00533 ierrp (2) = iga_comp_nb_unitsets(ib_c)*3
00534 id_err = 13
00535
00536 call psmile_error_common ( id_err, 'ila_driver_unitsets', &
00537 ierrp, 2, __FILE__, __LINE__ )
00538 RETURN
00539 ENDIF
00540
00541
00542 #ifdef CIM
00543 iga_comp_nb_unitsets(ib_c) = 0
00544 #else
00545 CALL get_unitsets_details ( iga_comp_id_doc_XML(ib_c), &
00546 iga_comp_nb_unitsets(ib_c), &
00547 ila_driver_unitsets , &
00548 id_err )
00549 IF (id_err .ne. 0) PRINT *, '| | |WARNING: Pb in get_unitsets_details'
00550 #endif
00551
00552
00553 iga_smioc_unitsets (il_nu+1:il_nu+iga_comp_nb_unitsets(ib_c),:) = &
00554 ila_driver_unitsets (:,:)
00555
00556 il_nu = il_nu + iga_comp_nb_unitsets(ib_c)
00557
00558
00559 ALLOCATE(ila_smioc_send(iga_comp_nb_unitsets(ib_c)*3), stat=id_err)
00560 IF (id_err > 0) THEN
00561 ierrp (1) = id_err
00562 ierrp (2) = iga_comp_nb_unitsets(ib_c)*3
00563 id_err = 13
00564
00565 call psmile_error_common ( id_err, 'ila_smioc_send', &
00566 ierrp, 2, __FILE__, __LINE__ )
00567 RETURN
00568 ENDIF
00569
00570 il_index = 1
00571 DO ib= 1, iga_comp_nb_unitsets(ib_c)
00572
00573 ila_smioc_send(il_index) = ila_driver_unitsets(ib,1)
00574 ila_smioc_send(il_index+1) = ila_driver_unitsets(ib,2)
00575 ila_smioc_send(il_index+2) = ila_driver_unitsets(ib,3)
00576
00577 il_index = il_index + 3
00578
00579 END DO
00580
00581 ila_tgt_proc(:) = -1
00582 il_nb_comp_pes = 0
00583
00584 DO ib = 0, ig_nb_tot_pes + (ig_driver_nb_pes-1)
00585 IF ((ib < PRISMdrv_root) .OR. ((PRISMdrv_root + ig_driver_nb_pes) <= ib)) THEN
00586 DO ib_ter = 1, Drv_Procs(ib+1)%comps_per_rank
00587 IF (Drv_Procs(ib+1)%global_comp_id(ib_ter) .eq. ib_c) THEN
00588 il_nb_comp_pes = il_nb_comp_pes + 1
00589 ila_tgt_proc(il_nb_comp_pes) = Drv_Procs(ib+1)%global_rank(ib_ter)
00590 END IF
00591 END DO
00592 END IF
00593 END DO
00594
00595 DO ib = 1, il_nb_comp_pes
00596
00597 CALL MPI_Send (ila_smioc_send, iga_comp_nb_unitsets(ib_c)*3, &
00598 MPI_Integer, ila_tgt_proc(ib), 2, comm_drv_trans, id_err)
00599
00600 END DO
00601
00602 DEALLOCATE(ila_smioc_send, stat=id_err)
00603 IF (id_err > 0) THEN
00604 ierrp (1) = id_err
00605 id_err = 14
00606
00607 call psmile_error_common ( id_err, 'ila_smioc_send', &
00608 ierrp, 1, __FILE__, __LINE__ )
00609 RETURN
00610 ENDIF
00611
00612
00613 DEALLOCATE ( ila_driver_unitsets, stat=id_err)
00614 IF (id_err > 0) THEN
00615 ierrp (1) = id_err
00616 id_err = 14
00617
00618 call psmile_error_common ( id_err, 'ila_driver_unitsets', &
00619 ierrp, 1, __FILE__, __LINE__ )
00620 RETURN
00621 ENDIF
00622
00623 END IF
00624
00625 END DO
00626 #ifdef VERBOSE
00627 PRINT *, '| | | '
00628 PRINT *, '| | | Got the Fortran unit sets component per component'
00629 call psmile_flushstd
00630 #endif
00631
00632
00633
00634
00635
00636 #ifdef VERBOSE
00637 PRINT *, '| | | '
00638 PRINT *, '| | | Get the grids details component per component'
00639 call psmile_flushstd
00640 #endif
00641
00642 CALL init_grids (ig_nb_tot_grids, sga_smioc_grids, id_err )
00643 IF (id_err .ne. 0) PRINT *, '| | |WARNING: Pb in init_grids'
00644
00645 il_ng = 0
00646 DO ib_c = 1, ig_nb_tot_comps
00647
00648 IF (iga_comp_nb_grids(ib_c) .gt. 0) THEN
00649
00650
00651 ALLOCATE ( sla_driver_grids(iga_comp_nb_grids(ib_c)) )
00652 IF (id_err > 0) THEN
00653 ierrp (1) = id_err
00654 ierrp (2) = iga_comp_nb_grids(ib_c)
00655 id_err = 13
00656
00657 call psmile_error_common ( id_err, 'sla_driver_grids', &
00658 ierrp, 2, __FILE__, __LINE__ )
00659 RETURN
00660 ENDIF
00661
00662
00663 CALL init_grids (iga_comp_nb_grids(ib_c), sla_driver_grids, id_err )
00664 IF (id_err .ne. 0) PRINT *, '| | |WARNING: Pb in init_grids'
00665
00666 call prismdrv_get_comp_names(ib_c, cla_appli_name, cla_comp_name, id_err)
00667 CALL get_grids_details ( iga_comp_id_doc_XML(ib_c), &
00668 iga_xml_comp_nb_grids(ib_c), &
00669 cla_appli_name, &
00670 cla_comp_name, &
00671 sla_driver_grids, &
00672 id_err )
00673 IF (id_err .ne. 0) PRINT *, '| | |WARNING: Pb in get_grids_details'
00674
00675 CALL prismdrv_get_all_grids ( iga_comp_nb_grids(ib_c), &
00676 iga_xml_comp_nb_grids(ib_c), &
00677 sla_driver_grids(:), &
00678 ib_c, &
00679 id_err )
00680 IF (id_err .ne. 0) PRINT *, '| | |WARNING: Pb in get_all_grids'
00681
00682
00683 sla_driver_grids(:)%ig_comp_id = ib_c
00684 DO ib = 1, iga_comp_nb_grids(ib_c)
00685 sla_driver_grids(ib)%ig_grid_id = il_ng+ib
00686 ENDDO
00687
00688
00689 sga_smioc_grids (il_ng+1:il_ng+iga_comp_nb_grids(ib_c)) = &
00690 sla_driver_grids
00691
00692 il_ng = il_ng + iga_comp_nb_grids(ib_c)
00693
00694
00695 ALLOCATE(ila_smioc_send(5*iga_comp_nb_grids(ib_c)), stat=id_err)
00696 IF (id_err > 0) THEN
00697 ierrp (1) = id_err
00698 ierrp (2) = 3*iga_comp_nb_grids(ib_c)
00699 id_err = 13
00700
00701 call psmile_error_common ( id_err, 'ila_smioc_send', &
00702 ierrp, 2, __FILE__, __LINE__ )
00703 RETURN
00704 ENDIF
00705 ALLOCATE(cla_smioc_send(iga_comp_nb_grids(ib_c)), stat=id_err)
00706 IF (id_err > 0) THEN
00707 ierrp (1) = id_err
00708 ierrp (2) = iga_comp_nb_grids(ib_c)
00709 id_err = 13
00710
00711 call psmile_error_common ( id_err, 'cla_smioc_send', &
00712 ierrp, 2, __FILE__, __LINE__ )
00713 RETURN
00714 ENDIF
00715 DO ib = 1, iga_comp_nb_grids(ib_c)
00716
00717 ila_smioc_send(1 + (ib-1)*5) = sla_driver_grids(ib)%ig_grid_id
00718 ila_smioc_send(2 + (ib-1)*5) = sla_driver_grids(ib)%ig_comp_id
00719 DO ib_bis = 1, 3
00720 ila_smioc_send(2 + ib_bis + (ib-1)*5) = &
00721 sla_driver_grids(ib)%iga_periodic(ib_bis)
00722 END DO
00723
00724 cla_smioc_send(ib) = &
00725 sla_driver_grids(ib)%cg_grid_name
00726
00727 END DO
00728
00729 ila_tgt_proc(:) = -1
00730 il_nb_comp_pes = 0
00731
00732 DO ib = 0, ig_nb_tot_pes + (ig_driver_nb_pes-1)
00733 IF ((ib < PRISMdrv_root) .OR. ((PRISMdrv_root + ig_driver_nb_pes) <= ib)) THEN
00734 DO ib_ter = 1, Drv_Procs(ib+1)%comps_per_rank
00735 IF (Drv_Procs(ib+1)%global_comp_id(ib_ter) .eq. ib_c) THEN
00736 il_nb_comp_pes = il_nb_comp_pes + 1
00737 ila_tgt_proc(il_nb_comp_pes) = Drv_Procs(ib+1)%global_rank(ib_ter)
00738 END IF
00739 END DO
00740 END IF
00741 END DO
00742
00743 DO ib = 1, il_nb_comp_pes
00744
00745 CALL MPI_Send (ila_smioc_send, 3*iga_comp_nb_grids(ib_c), &
00746 MPI_Integer, ila_tgt_proc(ib), 3, comm_drv_trans, id_err)
00747
00748 CALL MPI_Send (cla_smioc_send, max_name*iga_comp_nb_grids(ib_c), &
00749 MPI_Character, ila_tgt_proc(ib), 4, comm_drv_trans, id_err)
00750
00751 END DO
00752
00753 DEALLOCATE(ila_smioc_send, stat=id_err)
00754 IF (id_err > 0) THEN
00755 ierrp (1) = id_err
00756 id_err = 14
00757
00758 call psmile_error_common ( id_err, 'ila_smioc_send', &
00759 ierrp, 1, __FILE__, __LINE__ )
00760 RETURN
00761 ENDIF
00762
00763 DEALLOCATE(cla_smioc_send, stat=id_err)
00764 IF (id_err > 0) THEN
00765 ierrp (1) = id_err
00766 id_err = 14
00767
00768 call psmile_error_common ( id_err, 'cla_smioc_send', &
00769 ierrp, 1, __FILE__, __LINE__ )
00770 RETURN
00771 ENDIF
00772
00773
00774 DEALLOCATE ( sla_driver_grids, stat=id_err)
00775 IF (id_err > 0) THEN
00776 ierrp (1) = id_err
00777 id_err = 14
00778
00779 call psmile_error_common ( id_err, 'sla_driver_grids', &
00780 ierrp, 1, __FILE__, __LINE__ )
00781 RETURN
00782 ENDIF
00783
00784 END IF
00785
00786 END DO
00787 #ifdef VERBOSE
00788 PRINT *, '| | | '
00789 PRINT *, '| | | Got the grids details component per component'
00790 call psmile_flushstd
00791 #endif
00792
00793
00794
00795
00796
00797
00798 #ifdef VERBOSE
00799 PRINT *, '| | | '
00800 PRINT *, '| | | Get the transient numbers '
00801 call psmile_flushstd
00802 #endif
00803
00804
00805 ALLOCATE (iga_comp_nb_stand_name(ig_nb_tot_transi), stat=id_err)
00806 IF (id_err > 0) THEN
00807 ierrp (1) = id_err
00808 ierrp (2) = ig_nb_tot_transi
00809 id_err = 13
00810
00811 call psmile_error_common ( id_err, 'iga_comp_nb_stand_name', &
00812 ierrp, 2, __FILE__, __LINE__ )
00813 RETURN
00814 ENDIF
00815 ALLOCATE (iga_comp_nb_transi_in(ig_nb_tot_transi), stat=id_err)
00816 IF (id_err > 0) THEN
00817 ierrp (1) = id_err
00818 ierrp (2) = ig_nb_tot_transi
00819 id_err = 13
00820
00821 call psmile_error_common ( id_err, 'iga_comp_nb_transi_in', &
00822 ierrp, 2, __FILE__, __LINE__ )
00823 RETURN
00824 ENDIF
00825 ALLOCATE (iga_comp_nb_transi_out(ig_nb_tot_transi), stat=id_err)
00826 IF (id_err > 0) THEN
00827 ierrp (1) = id_err
00828 ierrp (2) = ig_nb_tot_transi
00829 id_err = 13
00830
00831 call psmile_error_common ( id_err, 'Nb tot transi', &
00832 ierrp, 2, __FILE__, __LINE__ )
00833 RETURN
00834 ENDIF
00835
00836 il_ntr = 0
00837
00838
00839 DO ib_c = 1, ig_nb_tot_comps
00840
00841 IF (iga_comp_nb_transi(ib_c) .gt. 0) THEN
00842
00843
00844 ALLOCATE (ila_comp_nb_stand_name(iga_comp_nb_transi(ib_c)), stat=id_err)
00845 IF (id_err > 0) THEN
00846 ierrp (1) = id_err
00847 ierrp (2) = iga_comp_nb_transi(ib_c)
00848 id_err = 13
00849
00850 call psmile_error_common ( id_err, 'ila_comp_nb_stand_name', &
00851 ierrp, 2, __FILE__, __LINE__ )
00852 RETURN
00853 ENDIF
00854 ALLOCATE (ila_comp_nb_transi_in(iga_comp_nb_transi(ib_c)), stat=id_err)
00855 IF (id_err > 0) THEN
00856 ierrp (1) = id_err
00857 ierrp (2) = iga_comp_nb_transi(ib_c)
00858 id_err = 13
00859
00860 call psmile_error_common ( id_err, 'ila_comp_nb_transi_in', &
00861 ierrp, 2, __FILE__, __LINE__ )
00862 RETURN
00863 ENDIF
00864 ALLOCATE (ila_comp_nb_transi_out(iga_comp_nb_transi(ib_c)), stat=id_err)
00865 IF (id_err > 0) THEN
00866 ierrp (1) = id_err
00867 ierrp (2) = iga_comp_nb_transi(ib_c)
00868 id_err = 13
00869
00870 call psmile_error_common ( id_err, 'ila_comp_nb_transi_out', &
00871 ierrp, 2, __FILE__, __LINE__ )
00872 RETURN
00873 ENDIF
00874
00875
00876
00877
00878
00879 ll_userdef_details = .false.
00880 call prismdrv_get_comp_names(ib_c, cla_appli_name, cla_comp_name, id_err)
00881 CALL get_transi_io_numbers ( iga_comp_id_doc_XML(ib_c), &
00882 iga_comp_nb_transi(ib_c), &
00883 ila_comp_nb_stand_name(:), &
00884 ila_comp_nb_transi_in(:), &
00885 ila_comp_nb_transi_out(:), &
00886 ib_c, &
00887 cla_appli_name, &
00888 cla_comp_name, &
00889 ll_userdef_details, &
00890 id_err )
00891 IF (id_err .ne. 0) PRINT *, '| | |WARNING: Pb in get_transi_io_numbers'
00892
00893
00894 #ifdef DEBUG
00895 print *, 'ib_c, iga_comp_nb_transi(ib_c) = ',ib_c, iga_comp_nb_transi(ib_c)
00896 print *, 'il_ntr = ', il_ntr
00897 #endif
00898 iga_comp_nb_stand_name &
00899 (il_ntr+1:il_ntr+iga_comp_nb_transi(ib_c)) &
00900 = ila_comp_nb_stand_name(:)
00901 iga_comp_nb_transi_in &
00902 (il_ntr+1:il_ntr+iga_comp_nb_transi(ib_c)) &
00903 = ila_comp_nb_transi_in(:)
00904 iga_comp_nb_transi_out &
00905 (il_ntr+1:il_ntr+iga_comp_nb_transi(ib_c)) &
00906 = ila_comp_nb_transi_out(:)
00907
00908 il_ntr = il_ntr + iga_comp_nb_transi(ib_c)
00909
00910
00911 ALLOCATE(ila_smioc_send(3*iga_comp_nb_transi(ib_c)), stat=id_err)
00912 IF (id_err > 0) THEN
00913 ierrp (1) = id_err
00914 ierrp (2) = iga_comp_nb_transi(ib_c)
00915 id_err = 13
00916
00917 call psmile_error_common ( id_err, 'ila_smioc_send', &
00918 ierrp, 2, __FILE__, __LINE__ )
00919 RETURN
00920 ENDIF
00921
00922 DO ib = 1, iga_comp_nb_transi(ib_c)
00923
00924 ila_smioc_send(1 + (ib-1)*3) = ila_comp_nb_stand_name(ib)
00925 ila_smioc_send(2 + (ib-1)*3) = ila_comp_nb_transi_in(ib)
00926 ila_smioc_send(3 + (ib-1)*3) = ila_comp_nb_transi_out(ib)
00927
00928 END DO
00929
00930 ila_tgt_proc(:) = -1
00931 il_nb_comp_pes = 0
00932
00933 DO ib = 0, ig_nb_tot_pes + (ig_driver_nb_pes-1)
00934 IF ((ib < PRISMdrv_root) .OR. ((PRISMdrv_root + ig_driver_nb_pes) <= ib)) THEN
00935 DO ib_ter = 1, Drv_Procs(ib+1)%comps_per_rank
00936 IF (Drv_Procs(ib+1)%global_comp_id(ib_ter) .eq. ib_c) THEN
00937 il_nb_comp_pes = il_nb_comp_pes + 1
00938 ila_tgt_proc(il_nb_comp_pes) = Drv_Procs(ib+1)%global_rank(ib_ter)
00939 END IF
00940 END DO
00941 END IF
00942 END DO
00943
00944
00945 DO ib = 1, il_nb_comp_pes
00946
00947 CALL MPI_Send (ila_smioc_send, 3*iga_comp_nb_transi(ib_c), MPI_Integer, &
00948 ila_tgt_proc(ib), 6, comm_drv_trans, id_err)
00949
00950 END DO
00951
00952 DEALLOCATE(ila_smioc_send, stat=id_err)
00953 IF (id_err > 0) THEN
00954 ierrp (1) = id_err
00955 id_err = 14
00956
00957 call psmile_error_common ( id_err, 'ila_smioc_send', &
00958 ierrp, 1, __FILE__, __LINE__ )
00959 RETURN
00960 ENDIF
00961
00962
00963 DEALLOCATE (ila_comp_nb_stand_name, stat=id_err)
00964 IF (id_err > 0) THEN
00965 ierrp (1) = id_err
00966 id_err = 14
00967
00968 call psmile_error_common ( id_err, 'ila_comp_nb_stand_name', &
00969 ierrp, 1, __FILE__, __LINE__ )
00970 RETURN
00971 ENDIF
00972 DEALLOCATE (ila_comp_nb_transi_in, stat=id_err)
00973 IF (id_err > 0) THEN
00974 ierrp (1) = id_err
00975 id_err = 14
00976
00977 call psmile_error_common ( id_err, 'ila_comp_nb_transi_in', &
00978 ierrp, 1, __FILE__, __LINE__ )
00979 RETURN
00980 ENDIF
00981 DEALLOCATE (ila_comp_nb_transi_out, stat=id_err)
00982 IF (id_err > 0) THEN
00983 ierrp (1) = id_err
00984 id_err = 14
00985
00986 call psmile_error_common ( id_err, 'ila_comp_nb_transi_out', &
00987 ierrp, 1, __FILE__, __LINE__ )
00988 RETURN
00989 ENDIF
00990
00991 END IF
00992
00993 ENDDO
00994 #ifdef DEBUG
00995 print *,' iga_comp_nb_stand_name = ', iga_comp_nb_stand_name(:)
00996 print *,' iga_comp_nb_transi_in (incl extra userdef) = ', iga_comp_nb_transi_in(:)
00997 print *,' iga_comp_nb_transi_out (incl extra userdef) = ', iga_comp_nb_transi_out(:)
00998 #endif
00999
01000
01001
01002 DO ib_ntt = 1, ig_nb_tot_transi
01003 ALLOCATE (sga_smioc_transi(ib_ntt)%sg_transi_in%sga_in_orig &
01004 (iga_comp_nb_transi_in(ib_ntt)), stat=id_err)
01005 IF (id_err > 0) THEN
01006 ierrp (1) = id_err
01007 ierrp (2) = iga_comp_nb_transi_in(ib_ntt)
01008 id_err = 13
01009
01010 call psmile_error_common ( id_err, 'sga_in_orig', &
01011 ierrp, 2, __FILE__, __LINE__ )
01012 RETURN
01013 ENDIF
01014 ALLOCATE (sga_smioc_transi(ib_ntt)%sga_transi_out &
01015 (iga_comp_nb_transi_out(ib_ntt)), stat=id_err)
01016 IF (id_err > 0) THEN
01017 ierrp (1) = id_err
01018 ierrp (2) = iga_comp_nb_transi_out(ib_ntt)
01019 id_err = 13
01020
01021 call psmile_error_common ( id_err, 'sga_transi_out', &
01022 ierrp, 2, __FILE__, __LINE__ )
01023 RETURN
01024 ENDIF
01025 ALLOCATE (sga_smioc_transi(ib_ntt)%cga_stand_name &
01026 (iga_comp_nb_stand_name(ib_ntt)), stat=id_err)
01027 IF (id_err > 0) THEN
01028 ierrp (1) = id_err
01029 ierrp (2) = iga_comp_nb_stand_name(ib_ntt)
01030 id_err = 13
01031
01032 call psmile_error_common ( id_err, 'cga_stand_name', &
01033 ierrp, 2, __FILE__, __LINE__ )
01034 RETURN
01035 ENDIF
01036 ENDDO
01037
01038
01039 #ifdef VERBOSE
01040 PRINT *, '| | | Before init_transi for gloabl structure sga_smioc_transi'
01041 call psmile_flushstd
01042 #endif
01043 CALL init_transi (ig_nb_tot_transi, &
01044 iga_comp_nb_stand_name, &
01045 iga_comp_nb_transi_in, &
01046 iga_comp_nb_transi_out, &
01047 sga_smioc_transi, &
01048 id_err )
01049 #ifdef VERBOSE
01050 PRINT *, '| | | After init_transi'
01051 call psmile_flushstd
01052 #endif
01053 IF (id_err .ne. 0) PRINT *, '| | |WARNING: Pb in init_transi'
01054
01055
01056 il_ntr = 0
01057 il_ntr_xml = 0
01058 il_npartinid = 0
01059 il_npartoutid = 0
01060 DO ib_c = 1, ig_nb_tot_comps
01061
01062
01063 ALLOCATE (ila_comp_nb_stand_name(iga_comp_nb_transi(ib_c)), stat=id_err)
01064 IF (id_err > 0) THEN
01065 ierrp (1) = id_err
01066 ierrp (2) = iga_comp_nb_transi(ib_c)
01067 id_err = 13
01068
01069 call psmile_error_common ( id_err, 'ila_comp_nb_stand_name', &
01070 ierrp, 2, __FILE__, __LINE__ )
01071 RETURN
01072 ENDIF
01073 ALLOCATE (ila_comp_nb_transi_in(iga_comp_nb_transi(ib_c)), stat=id_err)
01074 IF (id_err > 0) THEN
01075 ierrp (1) = id_err
01076 ierrp (2) = iga_comp_nb_transi(ib_c)
01077 id_err = 13
01078
01079 call psmile_error_common ( id_err, 'ila_comp_nb_transi_in', &
01080 ierrp, 2, __FILE__, __LINE__ )
01081 RETURN
01082 ENDIF
01083 ALLOCATE (ila_comp_nb_transi_out(iga_comp_nb_transi(ib_c)), stat=id_err)
01084 IF (id_err > 0) THEN
01085 ierrp (1) = id_err
01086 ierrp (2) = iga_comp_nb_transi(ib_c)
01087 id_err = 13
01088
01089 call psmile_error_common ( id_err, 'ila_comp_nb_transi_out', &
01090 ierrp, 2, __FILE__, __LINE__ )
01091 RETURN
01092 ENDIF
01093 ALLOCATE (sla_driver_transi (iga_comp_nb_transi(ib_c)), stat=id_err)
01094 IF (id_err > 0) THEN
01095 ierrp (1) = id_err
01096 ierrp (2) = iga_comp_nb_transi(ib_c)
01097 id_err = 13
01098
01099 call psmile_error_common ( id_err, 'sla_driver_transi', &
01100 ierrp, 2, __FILE__, __LINE__ )
01101 RETURN
01102 ENDIF
01103
01104 ila_comp_nb_stand_name(:) = iga_comp_nb_stand_name &
01105 (il_ntr+1:il_ntr+iga_comp_nb_transi(ib_c))
01106 ila_comp_nb_transi_in(:) = iga_comp_nb_transi_in &
01107 (il_ntr+1:il_ntr+iga_comp_nb_transi(ib_c))
01108 ila_comp_nb_transi_out(:) = iga_comp_nb_transi_out &
01109 (il_ntr+1:il_ntr+iga_comp_nb_transi(ib_c))
01110
01111
01112
01113 DO ib_nt = 1, iga_comp_nb_transi(ib_c)
01114 ALLOCATE (sla_driver_transi(ib_nt)%sg_transi_in%sga_in_orig(ila_comp_nb_transi_in(ib_nt)), stat=id_err)
01115 IF (id_err > 0) THEN
01116 ierrp (1) = id_err
01117 ierrp (2) = ila_comp_nb_transi_in(ib_nt)
01118 id_err = 13
01119
01120 call psmile_error_common ( id_err, 'sga_in_orig', &
01121 ierrp, 2, __FILE__, __LINE__ )
01122 RETURN
01123 ENDIF
01124 ALLOCATE (sla_driver_transi(ib_nt)%sga_transi_out(ila_comp_nb_transi_out(ib_nt)), stat=id_err)
01125 IF (id_err > 0) THEN
01126 ierrp (1) = id_err
01127 ierrp (2) = ila_comp_nb_transi_out(ib_nt)
01128 id_err = 13
01129
01130 call psmile_error_common ( id_err, 'sga_transi_out', &
01131 ierrp, 2, __FILE__, __LINE__ )
01132 RETURN
01133 ENDIF
01134 ALLOCATE (sla_driver_transi(ib_nt)%cga_stand_name(ila_comp_nb_stand_name(ib_nt)), stat=id_err)
01135 IF (id_err > 0) THEN
01136 ierrp (1) = id_err
01137 ierrp (2) = ila_comp_nb_stand_name(ib_nt)
01138 id_err = 13
01139
01140 call psmile_error_common ( id_err, 'cga_stand_name', &
01141 ierrp, 2, __FILE__, __LINE__ )
01142 RETURN
01143 ENDIF
01144 ENDDO
01145
01146
01147 #ifdef VERBOSE
01148 PRINT *, '| | | Before init_transi bis for local (per component) sla_driver_transi'
01149 call psmile_flushstd
01150 #endif
01151 CALL init_transi (iga_comp_nb_transi(ib_c), &
01152 ila_comp_nb_stand_name, &
01153 ila_comp_nb_transi_in, &
01154 ila_comp_nb_transi_out, &
01155 sla_driver_transi, &
01156 id_err )
01157 #ifdef VERBOSE
01158 PRINT *, '| | | After init_transi bis'
01159 call psmile_flushstd
01160 #endif
01161 IF (id_err .ne. 0) PRINT *, '| | |WARNING: Pb in init_transi'
01162
01163
01164
01165
01166 #ifdef VERBOSE
01167 PRINT *, '| | | Before get_transi_details second pass (XML + Udef transients)'
01168 call psmile_flushstd
01169 #endif
01170
01171
01172
01173 #ifdef DEBUG
01174 print *, ' ib_c il_ntr_xml nb_transi = ', ib_c, il_ntr_xml, iga_xml_comp_nb_transi(ib_c)
01175 #endif
01176 sla_driver_transi(1:iga_xml_comp_nb_transi(ib_c)) = &
01177 sga_xml_smioc_transi(il_ntr_xml+1:il_ntr_xml+iga_xml_comp_nb_transi(ib_c))
01178
01179
01180 CALL prismdrv_get_all_transi ( iga_comp_nb_transi(ib_c), &
01181 sla_driver_transi(:), &
01182 ib_c, &
01183 id_err )
01184
01185 #ifdef VERBOSE
01186 PRINT *, '| | | After get_transi'
01187 call psmile_flushstd
01188 #endif
01189 IF (id_err .ne. 0) PRINT *, '| | |WARNING: Pb in get_transi_details'
01190
01191
01192
01193 sla_driver_transi(:)%ig_comp_id = ib_c
01194 DO ib_nt = 1, iga_comp_nb_transi(ib_c)
01195 ib_a = il_ntr+ib_nt
01196
01197 sla_driver_transi(ib_nt)%ig_transi_id = ib_a
01198
01199 DO ib_nin= 1, sla_driver_transi(ib_nt)%sg_transi_in%ig_nb_in_orig
01200 sla_driver_transi(ib_nt)%sg_transi_in%sga_in_orig(ib_nin)%ig_transi_in_id &
01201 = il_npartinid + ib_nin
01202 ENDDO
01203 il_npartinid = il_npartinid + sla_driver_transi(ib_nt)%sg_transi_in%ig_nb_in_orig
01204
01205 DO ib_nout= 1, sla_driver_transi(ib_nt)%ig_nb_transi_out
01206 sla_driver_transi(ib_nt)%sga_transi_out(ib_nout)%ig_transi_out_id &
01207 = il_npartoutid + ib_nout
01208 ENDDO
01209 il_npartoutid = il_npartoutid + sla_driver_transi(ib_nt)%ig_nb_transi_out
01210 ENDDO
01211
01212
01213 sga_smioc_transi (il_ntr+1:il_ntr+iga_comp_nb_transi(ib_c)) = &
01214 sla_driver_transi(:)
01215
01216
01217 il_nb_int_i_fix = 27
01218 il_nb_int_i_in = 54
01219 il_nb_int_i_out = 82
01220
01221 il_smioc_send_size_i = 0
01222 DO ib = 1, iga_comp_nb_transi(ib_c)
01223 il_smioc_send_size_i = il_smioc_send_size_i &
01224 + il_nb_int_i_fix &
01225 + il_nb_int_i_in * ila_comp_nb_transi_in(ib) &
01226 + il_nb_int_i_out * ila_comp_nb_transi_out(ib)
01227 END DO
01228 ALLOCATE(ila_smioc_send(il_smioc_send_size_i), stat=id_err)
01229 IF (id_err > 0) THEN
01230 ierrp (1) = id_err
01231 ierrp (2) = il_smioc_send_size_i
01232 id_err = 13
01233
01234 call psmile_error_common ( id_err, 'ila_smioc_send', &
01235 ierrp, 2, __FILE__, __LINE__ )
01236 RETURN
01237 ENDIF
01238
01239 il_nb_int_d_fix = 6
01240 il_nb_int_d_in = 15
01241 il_nb_int_d_out = 19
01242
01243 il_smioc_send_size_d = 0
01244 DO ib = 1, iga_comp_nb_transi(ib_c)
01245 il_smioc_send_size_d = il_smioc_send_size_d &
01246 + il_nb_int_d_fix &
01247 + il_nb_int_d_in * ila_comp_nb_transi_in(ib) &
01248 + il_nb_int_d_out * ila_comp_nb_transi_out(ib)
01249 END DO
01250 ALLOCATE(dla_smioc_send(il_smioc_send_size_d), stat=id_err)
01251 IF (id_err > 0) THEN
01252 ierrp (1) = id_err
01253 ierrp (2) = il_smioc_send_size_d
01254 id_err = 13
01255
01256 call psmile_error_common ( id_err, 'dla_smioc_send', &
01257 ierrp, 2, __FILE__, __LINE__ )
01258 RETURN
01259 ENDIF
01260
01261 il_nb_int_c_fix = 4
01262 il_nb_int_c_in = 10
01263 il_nb_int_c_out = 9
01264
01265 il_smioc_send_size_c = 0
01266 DO ib = 1, iga_comp_nb_transi(ib_c)
01267 il_smioc_send_size_c = il_smioc_send_size_c &
01268 + il_nb_int_c_fix &
01269 + ila_comp_nb_stand_name(ib) &
01270 + il_nb_int_c_in * ila_comp_nb_transi_in(ib) &
01271 + il_nb_int_c_out * ila_comp_nb_transi_out(ib)
01272 END DO
01273 ALLOCATE(cla_smioc_send(il_smioc_send_size_c), stat=id_err)
01274 IF (id_err > 0) THEN
01275 ierrp (1) = id_err
01276 ierrp (2) = il_smioc_send_size_c
01277 id_err = 13
01278
01279 call psmile_error_common ( id_err, 'cla_smioc_send', &
01280 ierrp, 2, __FILE__, __LINE__ )
01281 RETURN
01282 ENDIF
01283
01284
01285 il_index_i = 0
01286 il_index_c = 0
01287 il_index_d = 0
01288
01289 DO ib = 1, iga_comp_nb_transi(ib_c)
01290
01291
01292 ila_smioc_send(1 + il_index_i) = sla_driver_transi(ib)%ig_nb_stand_name
01293 ila_smioc_send(2 + il_index_i) = sla_driver_transi(ib)%ig_comp_id
01294 ila_smioc_send(3 + il_index_i) = sla_driver_transi(ib)%ig_transi_id
01295 ila_smioc_send(4 + il_index_i) = sla_driver_transi(ib)%ig_transi_type
01296 ila_smioc_send(5 + il_index_i) = sla_driver_transi(ib)%ig_nb_bndl
01297 ila_smioc_send(6 + il_index_i) = sla_driver_transi(ib)%ig_datatype
01298 ila_smioc_send(7 + il_index_i) = sla_driver_transi(ib)%ig_nb_transi_out
01299
01300
01301 ila_smioc_send(8 + il_index_i) = &
01302 sla_driver_transi(ib)%sg_transi_in%ig_nb_in_orig
01303 ila_smioc_send(9 + il_index_i) = &
01304 sla_driver_transi(ib)%sg_transi_in%ig_exch_date_type
01305 ila_smioc_send(10 + il_index_i) = &
01306 sla_driver_transi(ib)%sg_transi_in%ig_debugmode
01307 ila_smioc_send(11 + il_index_i) = &
01308 sla_driver_transi(ib)%sg_transi_in%ig_tgt_timeop
01309
01310 DO ib_ter = 1, 3
01311 ila_smioc_send(11 + ib_ter + il_index_i) = &
01312 sla_driver_transi(ib)%sg_transi_in%iga_stats(ib_ter)
01313 END DO
01314
01315
01316 ila_smioc_send(17 + il_index_i) = &
01317 sla_driver_transi(ib)%sg_transi_in%sg_min_period%minute
01318 ila_smioc_send(18 + il_index_i) = &
01319 sla_driver_transi(ib)%sg_transi_in%sg_min_period%hour
01320 ila_smioc_send(19 + il_index_i) = &
01321 sla_driver_transi(ib)%sg_transi_in%sg_min_period%day
01322 ila_smioc_send(20 + il_index_i) = &
01323 sla_driver_transi(ib)%sg_transi_in%sg_min_period%month
01324 ila_smioc_send(21 + il_index_i) = &
01325 sla_driver_transi(ib)%sg_transi_in%sg_min_period%year
01326
01327
01328 ila_smioc_send(22 + il_index_i) = &
01329 sla_driver_transi(ib)%sg_transi_in%sg_tgt_local_trans%ig_gather
01330
01331
01332 ila_smioc_send(23 + il_index_i) = &
01333 sla_driver_transi(ib)%sg_transi_in%sg_exch_date%sg_period%minute
01334 ila_smioc_send(24 + il_index_i) = &
01335 sla_driver_transi(ib)%sg_transi_in%sg_exch_date%sg_period%hour
01336 ila_smioc_send(25 + il_index_i) = &
01337 sla_driver_transi(ib)%sg_transi_in%sg_exch_date%sg_period%day
01338 ila_smioc_send(26 + il_index_i) = &
01339 sla_driver_transi(ib)%sg_transi_in%sg_exch_date%sg_period%month
01340 ila_smioc_send(27 + il_index_i) = &
01341 sla_driver_transi(ib)%sg_transi_in%sg_exch_date%sg_period%year
01342
01343 il_index_i = il_index_i + 27
01344
01345 DO ib_bis = 1, ila_comp_nb_transi_in(ib)
01346
01347
01348 ila_smioc_send(1 + il_index_i) = &
01349 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01350 ig_transi_in_id
01351 ila_smioc_send(2 + il_index_i) = &
01352 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01353 ig_orig_type
01354 ila_smioc_send(3 + il_index_i) = &
01355 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01356 ig_orig_transi_id
01357 ila_smioc_send(4 + il_index_i) = &
01358 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01359 ig_orig_comp_id
01360 ila_smioc_send(5 + il_index_i) = &
01361 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01362 ig_conserv
01363
01364
01365 ila_smioc_send(6 + il_index_i) = &
01366 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01367 sg_orig_file%ig_suffix
01368 ila_smioc_send(7 + il_index_i) = &
01369 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01370 sg_orig_file%ig_file_format
01371 ila_smioc_send(8 + il_index_i) = &
01372 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01373 sg_orig_file%ig_file_set
01374 ila_smioc_send(9 + il_index_i) = &
01375 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01376 sg_orig_file%ig_file_iomode
01377 ila_smioc_send(10 + il_index_i) = &
01378 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01379 sg_orig_file%ig_file_pack
01380
01381
01382 ila_smioc_send(11 + il_index_i) = &
01383 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01384 sg_cpl_rst_file%ig_suffix
01385 ila_smioc_send(12 + il_index_i) = &
01386 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01387 sg_cpl_rst_file%ig_file_format
01388 ila_smioc_send(13 + il_index_i) = &
01389 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01390 sg_cpl_rst_file%ig_file_set
01391 ila_smioc_send(14 + il_index_i) = &
01392 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01393 sg_cpl_rst_file%ig_file_iomode
01394 ila_smioc_send(15 + il_index_i) = &
01395 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01396 sg_cpl_rst_file%ig_file_pack
01397
01398
01399 ila_smioc_send(16 + il_index_i) = &
01400 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01401 sg_interp%ig_interp_type
01402 DO ib_ter = 1, 3
01403 ila_smioc_send(16 + ib_ter + il_index_i) = &
01404 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01405 sg_interp%iga_interp_meth(ib_ter)
01406 ila_smioc_send(19 + ib_ter + il_index_i) = &
01407 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01408 sg_interp%iga_arg1(ib_ter)
01409 ila_smioc_send(22 + ib_ter + il_index_i) = &
01410 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01411 sg_interp%iga_arg2(ib_ter)
01412 ila_smioc_send(25 + ib_ter + il_index_i) = &
01413 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01414 sg_interp%iga_arg3(ib_ter)
01415 ila_smioc_send(28 + ib_ter + il_index_i) = &
01416 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01417 sg_interp%iga_arg4(ib_ter)
01418 ila_smioc_send(31 + ib_ter + il_index_i) = &
01419 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01420 sg_interp%iga_arg5(ib_ter)
01421 ila_smioc_send(34 + ib_ter + il_index_i) = &
01422 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01423 sg_interp%iga_arg6(ib_ter)
01424 ila_smioc_send(37 + ib_ter + il_index_i) = &
01425 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01426 sg_interp%iga_arg7(ib_ter)
01427 END DO
01428
01429
01430 ila_smioc_send(41 + il_index_i) = &
01431 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01432 sg_interp%sg_arg10%ig_suffix
01433 ila_smioc_send(42 + il_index_i) = &
01434 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01435 sg_interp%sg_arg10%ig_file_format
01436 ila_smioc_send(43 + il_index_i) = &
01437 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01438 sg_interp%sg_arg10%ig_file_set
01439 ila_smioc_send(44 + il_index_i) = &
01440 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01441 sg_interp%sg_arg10%ig_file_iomode
01442 ila_smioc_send(45 + il_index_i) = &
01443 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01444 sg_interp%sg_arg10%ig_file_pack
01445
01446
01447 ila_smioc_send(46 + il_index_i) = &
01448 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01449 sg_combi%sg_ext_mask_file%ig_suffix
01450 ila_smioc_send(47 + il_index_i) = &
01451 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01452 sg_combi%sg_ext_mask_file%ig_file_format
01453 ila_smioc_send(48 + il_index_i) = &
01454 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01455 sg_combi%sg_ext_mask_file%ig_file_set
01456 ila_smioc_send(49 + il_index_i) = &
01457 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01458 sg_combi%sg_ext_mask_file%ig_file_iomode
01459 ila_smioc_send(50 + il_index_i) = &
01460 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01461 sg_combi%sg_ext_mask_file%ig_file_pack
01462 ila_smioc_send(51 + il_index_i) = &
01463 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01464 sg_combi%ig_location
01465 ila_smioc_send(52 + il_index_i) = &
01466 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01467 sg_combi%ig_operand
01468 ila_smioc_send(53 + il_index_i) = &
01469 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01470 sg_combi%ig_mask_type
01471 ila_smioc_send(54 + il_index_i) = &
01472 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01473 sg_combi%ig_combi_meth
01474
01475 il_index_i = il_index_i + 54
01476
01477 END DO
01478
01479 DO ib_bis = 1, ila_comp_nb_transi_out(ib)
01480
01481
01482 ila_smioc_send(1 + il_index_i) = &
01483 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01484 ig_transi_out_id
01485 ila_smioc_send(2 + il_index_i) = &
01486 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01487 ig_dest_type
01488 ila_smioc_send(3 + il_index_i) = &
01489 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01490 ig_dest_transi_id
01491 ila_smioc_send(4 + il_index_i) = &
01492 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01493 ig_dest_comp_id
01494 ila_smioc_send(5 + il_index_i) = &
01495 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01496 ig_exch_date_type
01497 ila_smioc_send(6 + il_index_i) = &
01498 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01499 ig_debugmode
01500 ila_smioc_send(7 + il_index_i) = &
01501 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01502 ig_lag
01503 ila_smioc_send(8 + il_index_i) = &
01504 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01505 ig_src_timeop
01506 ila_smioc_send(9 + il_index_i) = &
01507 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01508 ig_conserv
01509 DO ib_ter = 1, 3
01510 ila_smioc_send(9 + ib_ter + il_index_i) = &
01511 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01512 iga_stats(ib_ter)
01513 END DO
01514
01515
01516 ila_smioc_send(15 + il_index_i) = &
01517 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01518 sg_dest_file%ig_suffix
01519 ila_smioc_send(16 + il_index_i) = &
01520 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01521 sg_dest_file%ig_file_format
01522 ila_smioc_send(17 + il_index_i) = &
01523 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01524 sg_dest_file%ig_file_set
01525 ila_smioc_send(18 + il_index_i) = &
01526 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01527 sg_dest_file%ig_file_iomode
01528 ila_smioc_send(19 + il_index_i) = &
01529 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01530 sg_dest_file%ig_file_pack
01531
01532
01533 ila_smioc_send(20 + il_index_i) = &
01534 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01535 sg_cpl_rst_file%ig_suffix
01536 ila_smioc_send(21 + il_index_i) = &
01537 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01538 sg_cpl_rst_file%ig_file_format
01539 ila_smioc_send(22 + il_index_i) = &
01540 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01541 sg_cpl_rst_file%ig_file_set
01542 ila_smioc_send(23 + il_index_i) = &
01543 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01544 sg_cpl_rst_file%ig_file_iomode
01545 ila_smioc_send(24 + il_index_i) = &
01546 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01547 sg_cpl_rst_file%ig_file_pack
01548
01549
01550 ila_smioc_send(25 + il_index_i) = &
01551 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01552 sg_min_period%minute
01553 ila_smioc_send(26 + il_index_i) = &
01554 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01555 sg_min_period%hour
01556 ila_smioc_send(27 + il_index_i) = &
01557 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01558 sg_min_period%day
01559 ila_smioc_send(28 + il_index_i) = &
01560 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01561 sg_min_period%month
01562 ila_smioc_send(29 + il_index_i) = &
01563 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01564 sg_min_period%year
01565
01566
01567 ila_smioc_send(30 + il_index_i) = &
01568 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01569 sg_exch_date%sg_period%minute
01570 ila_smioc_send(31 + il_index_i) = &
01571 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01572 sg_exch_date%sg_period%hour
01573 ila_smioc_send(32 + il_index_i) = &
01574 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01575 sg_exch_date%sg_period%day
01576 ila_smioc_send(33 + il_index_i) = &
01577 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01578 sg_exch_date%sg_period%month
01579 ila_smioc_send(34 + il_index_i) = &
01580 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01581 sg_exch_date%sg_period%year
01582
01583
01584 ila_smioc_send(35 + il_index_i) = &
01585 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01586 sg_src_local_trans%ig_scatter
01587 DO ib_ter = 1, 4
01588 ila_smioc_send(35 + ib_ter + il_index_i) = &
01589 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01590 sg_src_local_trans%ig_reduc_type(ib_ter)
01591 ila_smioc_send(39 + ib_ter + il_index_i) = &
01592 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01593 sg_src_local_trans%ig_reduc_order(ib_ter)
01594 END DO
01595
01596
01597 ila_smioc_send(44 + il_index_i) = &
01598 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01599 sg_interp%ig_interp_type
01600 DO ib_ter = 1, 3
01601 ila_smioc_send(44 + ib_ter + il_index_i) = &
01602 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01603 sg_interp%iga_interp_meth(ib_ter)
01604 ila_smioc_send(47 + ib_ter + il_index_i) = &
01605 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01606 sg_interp%iga_arg1(ib_ter)
01607 ila_smioc_send(50 + ib_ter + il_index_i) = &
01608 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01609 sg_interp%iga_arg2(ib_ter)
01610 ila_smioc_send(53 + ib_ter + il_index_i) = &
01611 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01612 sg_interp%iga_arg3(ib_ter)
01613 ila_smioc_send(56 + ib_ter + il_index_i) = &
01614 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01615 sg_interp%iga_arg4(ib_ter)
01616 ila_smioc_send(59 + ib_ter + il_index_i) = &
01617 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01618 sg_interp%iga_arg5(ib_ter)
01619 ila_smioc_send(62 + ib_ter + il_index_i) = &
01620 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01621 sg_interp%iga_arg6(ib_ter)
01622 ila_smioc_send(65 + ib_ter + il_index_i) = &
01623 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01624 sg_interp%iga_arg7(ib_ter)
01625 END DO
01626
01627
01628 ila_smioc_send(69 + il_index_i) = &
01629 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01630 sg_interp%sg_arg10%ig_suffix
01631 ila_smioc_send(70 + il_index_i) = &
01632 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01633 sg_interp%sg_arg10%ig_file_format
01634 ila_smioc_send(71 + il_index_i) = &
01635 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01636 sg_interp%sg_arg10%ig_file_set
01637 ila_smioc_send(72 + il_index_i) = &
01638 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01639 sg_interp%sg_arg10%ig_file_iomode
01640 ila_smioc_send(73 + il_index_i) = &
01641 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01642 sg_interp%sg_arg10%ig_file_pack
01643
01644
01645 ila_smioc_send(74 + il_index_i) = &
01646 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01647 sg_combi%sg_ext_mask_file%ig_suffix
01648 ila_smioc_send(75 + il_index_i) = &
01649 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01650 sg_combi%sg_ext_mask_file%ig_file_format
01651 ila_smioc_send(76 + il_index_i) = &
01652 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01653 sg_combi%sg_ext_mask_file%ig_file_set
01654 ila_smioc_send(77 + il_index_i) = &
01655 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01656 sg_combi%sg_ext_mask_file%ig_file_iomode
01657 ila_smioc_send(78 + il_index_i) = &
01658 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01659 sg_combi%sg_ext_mask_file%ig_file_pack
01660 ila_smioc_send(79 + il_index_i) = &
01661 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01662 sg_combi%ig_location
01663 ila_smioc_send(80 + il_index_i) = &
01664 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01665 sg_combi%ig_operand
01666 ila_smioc_send(81 + il_index_i) = &
01667 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01668 sg_combi%ig_mask_type
01669 ila_smioc_send(82 + il_index_i) = &
01670 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01671 sg_combi%ig_combi_meth
01672
01673 il_index_i = il_index_i + 82
01674
01675 END DO
01676
01677 cla_smioc_send(1 + il_index_c) = sla_driver_transi(ib)%cg_local_name
01678 cla_smioc_send(2 + il_index_c) = sla_driver_transi(ib)%cg_long_name
01679 cla_smioc_send(3 + il_index_c) = sla_driver_transi(ib)%cg_comp_name
01680 cla_smioc_send(4 + il_index_c) = sla_driver_transi(ib)%cg_units
01681
01682 il_index_c = il_index_c + 4
01683
01684 DO ib_bis = 1, ila_comp_nb_stand_name(ib)
01685
01686 cla_smioc_send(1 + il_index_c) = &
01687 sla_driver_transi(ib)%cga_stand_name(ib_bis)
01688
01689 il_index_c = il_index_c + 1
01690
01691 END DO
01692
01693 DO ib_bis = 1, ila_comp_nb_transi_in(ib)
01694
01695 cla_smioc_send(1 + il_index_c) = &
01696 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01697 cg_transi_in_name
01698 cla_smioc_send(2 + il_index_c) = &
01699 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01700 cg_orig_transi
01701 cla_smioc_send(3 + il_index_c) = &
01702 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01703 cg_orig_comp_name
01704 cla_smioc_send(4 + il_index_c) = &
01705 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01706 sg_orig_file%cg_file_name
01707 cla_smioc_send(5 + il_index_c) = &
01708 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01709 sg_cpl_rst_file%cg_file_name
01710 cla_smioc_send(6 + il_index_c) = &
01711 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01712 sg_interp%cg_arg9
01713 cla_smioc_send(7 + il_index_c) = &
01714 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01715 sg_interp%sg_arg10%cg_file_name
01716 cla_smioc_send(8 + il_index_c) = &
01717 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01718 sg_combi%cg_combi_name
01719 cla_smioc_send(9 + il_index_c) = &
01720 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01721 sg_combi%cg_ext_mask_name
01722 cla_smioc_send(10 + il_index_c) = &
01723 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01724 sg_combi%sg_ext_mask_file%cg_file_name
01725
01726 il_index_c = il_index_c + 10
01727
01728 END DO
01729
01730 DO ib_bis = 1, ila_comp_nb_transi_out(ib)
01731
01732 cla_smioc_send(1 + il_index_c) = &
01733 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01734 cg_transi_out_name
01735 cla_smioc_send(2 + il_index_c) = &
01736 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01737 cg_dest_transi
01738 cla_smioc_send(3 + il_index_c) = &
01739 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01740 cg_dest_comp_name
01741 cla_smioc_send(4 + il_index_c) = &
01742 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01743 sg_dest_file%cg_file_name
01744 cla_smioc_send(5 + il_index_c) = &
01745 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01746 sg_cpl_rst_file%cg_file_name
01747 cla_smioc_send(6 + il_index_c) = &
01748 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01749 sg_interp%cg_arg9
01750 cla_smioc_send(7 + il_index_c) = &
01751 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01752 sg_interp%sg_arg10%cg_file_name
01753 cla_smioc_send(8 + il_index_c) = &
01754 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01755 sg_combi%cg_ext_mask_name
01756 cla_smioc_send(9 + il_index_c) = &
01757 sla_driver_transi(ib)%sga_transi_out(ib_bis)% &
01758 sg_combi%sg_ext_mask_file%cg_file_name
01759
01760 il_index_c = il_index_c + 9
01761
01762 END DO
01763
01764 dla_smioc_send(1 + il_index_d) = sla_driver_transi(ib)%dg_transi_min
01765 dla_smioc_send(2 + il_index_d) = sla_driver_transi(ib)%dg_transi_max
01766 dla_smioc_send(3 + il_index_d) = &
01767 sla_driver_transi(ib)%sg_transi_in%sg_min_period%second
01768 dla_smioc_send(4 + il_index_d) = &
01769 sla_driver_transi(ib)%sg_transi_in%sg_tgt_local_trans%dg_add_scalar
01770 dla_smioc_send(5 + il_index_d) = &
01771 sla_driver_transi(ib)%sg_transi_in%sg_tgt_local_trans%dg_mult_scalar
01772 dla_smioc_send(6 + il_index_d) = &
01773 sla_driver_transi(ib)%sg_transi_in%sg_exch_date%sg_period%second
01774
01775 il_index_d = il_index_d + 6
01776
01777 DO ib_bis = 1, ila_comp_nb_transi_in(ib)
01778
01779 dla_smioc_send(1 + il_index_d) = &
01780 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01781 sg_orig_file%dg_file_scal
01782 dla_smioc_send(2 + il_index_d) = &
01783 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01784 sg_orig_file%dg_file_add
01785 dla_smioc_send(3 + il_index_d) = &
01786 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01787 sg_orig_file%dg_fill_val
01788 dla_smioc_send(4 + il_index_d) = &
01789 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01790 sg_cpl_rst_file%dg_file_scal
01791 dla_smioc_send(5 + il_index_d) = &
01792 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01793 sg_cpl_rst_file%dg_file_add
01794 dla_smioc_send(6 + il_index_d) = &
01795 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01796 sg_cpl_rst_file%dg_file_scal
01797 dla_smioc_send(7 + il_index_d) = &
01798 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01799 sg_interp%dg_arg8
01800 dla_smioc_send(8 + il_index_d) = &
01801 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01802 sg_interp%sg_arg10%dg_file_scal
01803 dla_smioc_send(9 + il_index_d) = &
01804 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01805 sg_interp%sg_arg10%dg_file_add
01806 dla_smioc_send(10 + il_index_d) = &
01807 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01808 sg_interp%sg_arg10%dg_fill_val
01809
01810 dla_smioc_send(11 + il_index_d) = &
01811 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01812 sg_combi%sg_ext_mask_file%dg_file_scal
01813 dla_smioc_send(12 + il_index_d) = &
01814 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01815 sg_combi%sg_ext_mask_file%dg_file_add
01816 dla_smioc_send(13 + il_index_d) = &
01817 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01818 sg_combi%sg_ext_mask_file%dg_fill_val
01819 dla_smioc_send(14 + il_index_d) = &
01820 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01821 sg_combi%dg_combi_param
01822 dla_smioc_send(15 + il_index_d) = &
01823 sla_driver_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01824 sg_combi%dg_scalar
01825
01826 il_index_d = il_index_d + 15
01827
01828 END DO
01829
01830 DO ib_bis = 1, ila_comp_nb_transi_out(ib)
01831
01832 dla_smioc_send(1 + il_index_d) = &
01833 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_dest_file% &
01834 dg_file_scal
01835 dla_smioc_send(2 + il_index_d) = &
01836 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_dest_file% &
01837 dg_file_add
01838 dla_smioc_send(3 + il_index_d) = &
01839 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_dest_file% &
01840 dg_fill_val
01841 dla_smioc_send(4 + il_index_d) = &
01842 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_cpl_rst_file% &
01843 dg_file_scal
01844 dla_smioc_send(5 + il_index_d) = &
01845 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_cpl_rst_file% &
01846 dg_file_add
01847 dla_smioc_send(6 + il_index_d) = &
01848 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_cpl_rst_file% &
01849 dg_fill_val
01850 dla_smioc_send(7 + il_index_d) = &
01851 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_min_period%second
01852 dla_smioc_send(8 + il_index_d) = &
01853 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_exch_date% &
01854 sg_period%second
01855 dla_smioc_send(9 + il_index_d) = &
01856 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_src_local_trans% &
01857 dg_add_scalar
01858 dla_smioc_send(10 + il_index_d) = &
01859 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_src_local_trans% &
01860 dg_mult_scalar
01861 dla_smioc_send(11 + il_index_d) = &
01862 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_interp%dg_arg8
01863 dla_smioc_send(12 + il_index_d) = &
01864 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_interp% &
01865 sg_arg10%dg_file_scal
01866 dla_smioc_send(13 + il_index_d) = &
01867 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_interp% &
01868 sg_arg10%dg_file_add
01869 dla_smioc_send(14 + il_index_d) = &
01870 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_interp% &
01871 sg_arg10%dg_fill_val
01872 dla_smioc_send(15 + il_index_d) = &
01873 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_combi% &
01874 sg_ext_mask_file%dg_file_scal
01875 dla_smioc_send(16 + il_index_d) = &
01876 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_combi% &
01877 sg_ext_mask_file%dg_file_add
01878 dla_smioc_send(17 + il_index_d) = &
01879 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_combi% &
01880 sg_ext_mask_file%dg_fill_val
01881 dla_smioc_send(17 + il_index_d) = &
01882 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_combi% &
01883 dg_combi_param
01884 dla_smioc_send(17 + il_index_d) = &
01885 sla_driver_transi(ib)%sga_transi_out(ib_bis)%sg_combi% &
01886 dg_scalar
01887
01888 il_index_d = il_index_d + 19
01889
01890 END DO
01891
01892 END DO
01893
01894 ila_tgt_proc(:) = -1
01895 il_nb_comp_pes = 0
01896
01897
01898 DO ib = 0, ig_nb_tot_pes + (ig_driver_nb_pes-1)
01899 IF ((ib < PRISMdrv_root) .OR. ((PRISMdrv_root + ig_driver_nb_pes) <= ib)) THEN
01900 DO ib_ter = 1, Drv_Procs(ib+1)%comps_per_rank
01901 IF (Drv_Procs(ib+1)%global_comp_id(ib_ter) .eq. ib_c) THEN
01902 il_nb_comp_pes = il_nb_comp_pes + 1
01903 ila_tgt_proc(il_nb_comp_pes) = Drv_Procs(ib+1)%global_rank(ib_ter)
01904 END IF
01905 END DO
01906 END IF
01907 END DO
01908
01909 DO ib = 1, il_nb_comp_pes
01910
01911 CALL MPI_Send (ila_smioc_send(1), il_smioc_send_size_i, MPI_Integer, &
01912 ila_tgt_proc(ib), 7, comm_drv_trans, id_err)
01913
01914 CALL MPI_Send (cla_smioc_send(1), il_smioc_send_size_c*max_name, &
01915 MPI_Character, ila_tgt_proc(ib), 8, comm_drv_trans, id_err)
01916
01917 CALL MPI_Send (dla_smioc_send(1), il_smioc_send_size_d, &
01918 MPI_Double_Precision, ila_tgt_proc(ib), 9, comm_drv_trans, &
01919 id_err)
01920
01921 END DO
01922
01923 DEALLOCATE(ila_smioc_send, stat=id_err)
01924 IF (id_err > 0) THEN
01925 ierrp (1) = id_err
01926 id_err = 14
01927
01928 call psmile_error_common ( id_err, 'ila_smioc_send', &
01929 ierrp, 1, __FILE__, __LINE__ )
01930 RETURN
01931 ENDIF
01932 DEALLOCATE(cla_smioc_send, stat=id_err)
01933 IF (id_err > 0) THEN
01934 ierrp (1) = id_err
01935 id_err = 14
01936
01937 call psmile_error_common ( id_err, 'cla_smioc_send', &
01938 ierrp, 1, __FILE__, __LINE__ )
01939 RETURN
01940 ENDIF
01941 DEALLOCATE(dla_smioc_send, stat=id_err)
01942 IF (id_err > 0) THEN
01943 ierrp (1) = id_err
01944 id_err = 14
01945
01946 call psmile_error_common ( id_err, 'dla_smioc_send', &
01947 ierrp, 1, __FILE__, __LINE__ )
01948 RETURN
01949 ENDIF
01950
01951
01952 DEALLOCATE (ila_comp_nb_stand_name, stat=id_err)
01953 IF (id_err > 0) THEN
01954 ierrp (1) = id_err
01955 id_err = 14
01956
01957 call psmile_error_common ( id_err, 'ila_comp_nb_stand_name', &
01958 ierrp, 1, __FILE__, __LINE__ )
01959 RETURN
01960 ENDIF
01961 DEALLOCATE (ila_comp_nb_transi_in, stat=id_err)
01962 IF (id_err > 0) THEN
01963 ierrp (1) = id_err
01964 id_err = 14
01965
01966 call psmile_error_common ( id_err, 'ila_comp_nb_transi_in', &
01967 ierrp, 1, __FILE__, __LINE__ )
01968 RETURN
01969 ENDIF
01970 DEALLOCATE (ila_comp_nb_transi_out, stat=id_err)
01971 IF (id_err > 0) THEN
01972 ierrp (1) = id_err
01973 id_err = 14
01974
01975 call psmile_error_common ( id_err, 'ila_comp_nb_transi_out', &
01976 ierrp, 1, __FILE__, __LINE__ )
01977 RETURN
01978 ENDIF
01979 DEALLOCATE (sla_driver_transi, stat=id_err)
01980 IF (id_err > 0) THEN
01981 ierrp (1) = id_err
01982 id_err = 14
01983
01984 call psmile_error_common ( id_err, 'sla_driver_transi', &
01985 ierrp, 1, __FILE__, __LINE__ )
01986 RETURN
01987 ENDIF
01988
01989
01990 il_ntr = il_ntr + iga_comp_nb_transi(ib_c)
01991
01992
01993 il_ntr_xml = il_ntr_xml + iga_xml_comp_nb_transi(ib_c)
01994 #ifdef DEBUG
01995 print *, 'il_ntr_xml il_ntr = ', il_ntr_xml, il_ntr
01996 #endif
01997
01998 END DO
01999
02000 #ifdef DEBUGX
02001
02002
02003
02004 OPEN (file='driver_smioc.debug.000', unit=28, form='formatted')
02005
02006
02007 IF (ig_nb_tot_grids .gt. 0) THEN
02008 CALL write_grids_details (ig_nb_tot_grids, &
02009 sga_smioc_grids, 28, id_err )
02010 IF (id_err .ne. 0) PRINT *, '| | |WARNING: Pb in write_grids_details'
02011 END IF
02012
02013
02014 IF (ig_nb_tot_transi .gt. 0) THEN
02015 CALL write_transi_details (ig_nb_tot_transi, &
02016 sga_smioc_transi, 28, id_err )
02017 IF (id_err .ne. 0) PRINT *, '| | |WARNING: Pb in write_transi_details'
02018 END IF
02019
02020 CLOSE (unit=28)
02021
02022 #endif
02023
02024
02025
02026
02027
02028
02029
02030
02031 il_orig_index = 0
02032 il_dest_index = 0
02033 DO ib_ntt = 1, ig_nb_tot_transi
02034 DO ib_ntt2 = 1, ig_nb_tot_transi
02035 il_orig_index = il_orig_index + sga_smioc_transi(ib_ntt)%sg_transi_in%ig_nb_in_orig
02036 il_dest_index = il_dest_index + sga_smioc_transi(ib_ntt)%ig_nb_transi_out
02037 ENDDO
02038 ENDDO
02039
02040
02041 ALLOCATE(ila_orig_comp_id(il_orig_index, 3), stat=id_err)
02042 IF (id_err > 0) THEN
02043 ierrp (1) = id_err
02044 ierrp (2) = il_orig_index
02045 id_err = 13
02046
02047 call psmile_error_common ( id_err, 'ila_orig_comp_id', &
02048 ierrp, 2, __FILE__, __LINE__ )
02049 RETURN
02050 ENDIF
02051 ALLOCATE(ila_dest_comp_id(il_dest_index, 3), stat=id_err)
02052 IF (id_err > 0) THEN
02053 ierrp (1) = id_err
02054 ierrp (2) = il_dest_index
02055 id_err = 13
02056
02057 call psmile_error_common ( id_err, 'ila_dest_comp_id', &
02058 ierrp, 2, __FILE__, __LINE__ )
02059 RETURN
02060 ENDIF
02061 ALLOCATE(ila_combi_loc(ig_nb_tot_transi, 2), stat=id_err)
02062 IF (id_err > 0) THEN
02063 ierrp (1) = id_err
02064 ierrp (2) = ig_nb_tot_transi
02065 id_err = 13
02066
02067 call psmile_error_common ( id_err, 'ila_combi_loc', &
02068 ierrp, 2, __FILE__, __LINE__ )
02069 RETURN
02070 ENDIF
02071
02072 il_index1 = 0
02073 il_index2 = 0
02074 DO ib_ntt = 1, ig_nb_tot_transi
02075 il_index1 = il_index1 + sga_smioc_transi(ib_ntt)%ig_nb_transi_out
02076 il_index2 = il_index2 + sga_smioc_transi(ib_ntt)%sg_transi_in%ig_nb_in_orig
02077 ENDDO
02078 IF (il_index1 .GT. il_index2) il_index2 = il_index1
02079
02080 ALLOCATE(ila_trans_orig_id(il_index2, 3), stat=id_err)
02081 IF (id_err > 0) THEN
02082 ierrp (1) = id_err
02083 ierrp (2) = il_index2
02084 id_err = 13
02085
02086 call psmile_error_common ( id_err, 'ila_trans_orig_id', &
02087 ierrp, 2, __FILE__, __LINE__ )
02088 RETURN
02089 ENDIF
02090 ALLOCATE(ila_trans_dest_id(il_index2, 3), stat=id_err)
02091 IF (id_err > 0) THEN
02092 ierrp (1) = id_err
02093 ierrp (2) = il_index2
02094 id_err = 13
02095
02096 call psmile_error_common ( id_err, 'ila_trans_dest_id', &
02097 ierrp, 2, __FILE__, __LINE__ )
02098 RETURN
02099 ENDIF
02100 ALLOCATE(ila_cpl_rst_file(il_index2, 8), stat=id_err)
02101 IF (id_err > 0) THEN
02102 ierrp (1) = id_err
02103 ierrp (2) = il_index2
02104 id_err = 13
02105
02106 call psmile_error_common ( id_err, 'ila_cpl_rst_file', &
02107 ierrp, 2, __FILE__, __LINE__ )
02108 RETURN
02109 ENDIF
02110 ALLOCATE(dla_cpl_rst_file(il_index2, 3), stat=id_err)
02111 IF (id_err > 0) THEN
02112 ierrp (1) = id_err
02113 ierrp (2) = il_index2
02114 id_err = 13
02115
02116 call psmile_error_common ( id_err, 'dla_cpl_rst_file', &
02117 ierrp, 2, __FILE__, __LINE__ )
02118 RETURN
02119 ENDIF
02120 ALLOCATE(cla_cpl_rst_file(il_index2, 1), stat=id_err)
02121 IF (id_err > 0) THEN
02122 ierrp (1) = id_err
02123 ierrp (2) = il_index2
02124 id_err = 13
02125
02126 call psmile_error_common ( id_err, 'cla_cpl_rst_file', &
02127 ierrp, 2, __FILE__, __LINE__ )
02128 RETURN
02129 ENDIF
02130 ALLOCATE(ila_trans_interp(il_index2, 32), stat=id_err)
02131 IF (id_err > 0) THEN
02132 ierrp (1) = id_err
02133 ierrp (2) = il_index2
02134 id_err = 13
02135
02136 call psmile_error_common ( id_err, 'ila_trans_interp', &
02137 ierrp, 2, __FILE__, __LINE__ )
02138 RETURN
02139 ENDIF
02140 ALLOCATE(dla_trans_interp(il_index2, 4), stat=id_err)
02141 IF (id_err > 0) THEN
02142 ierrp (1) = id_err
02143 ierrp (2) = il_index2
02144 id_err = 13
02145
02146 call psmile_error_common ( id_err, 'dla_trans_interp', &
02147 ierrp, 2, __FILE__, __LINE__ )
02148 RETURN
02149 ENDIF
02150 ALLOCATE(cla_trans_interp(il_index2, 2), stat=id_err)
02151 IF (id_err > 0) THEN
02152 ierrp (1) = id_err
02153 ierrp (2) = il_index2
02154 id_err = 13
02155
02156 call psmile_error_common ( id_err, 'cla_trans_interp', &
02157 ierrp, 2, __FILE__, __LINE__ )
02158 RETURN
02159 ENDIF
02160
02161 ila_orig_comp_id = -1
02162 ila_dest_comp_id = -1
02163 ila_combi_loc = -1
02164 ila_trans_orig_id = -1
02165 ila_trans_dest_id = -1
02166 ila_cpl_rst_file = -1
02167 dla_cpl_rst_file = -1.0
02168 cla_cpl_rst_file = " "
02169 ila_trans_interp = -1
02170
02171
02172 il_orig_index = 0
02173 il_dest_index = 0
02174
02175 DO ib_ntt = 1, ig_nb_tot_transi
02176 DO ib_ntt2 = 1, ig_nb_tot_transi
02177
02178 DO ib_nin = 1, sga_smioc_transi(ib_ntt)%sg_transi_in%ig_nb_in_orig
02179 IF (sga_smioc_transi(ib_ntt)%sg_transi_in%sga_in_orig(ib_nin)% &
02180 cg_orig_comp_name .EQ. sga_smioc_transi(ib_ntt2)%cg_comp_name) THEN
02181
02182 sga_smioc_transi(ib_ntt)%sg_transi_in%sga_in_orig(ib_nin)% &
02183 ig_orig_comp_id = sga_smioc_transi(ib_ntt2)%ig_comp_id
02184
02185 il_orig_index = il_orig_index + 1
02186 ila_orig_comp_id(il_orig_index, 1) = ib_ntt
02187 ila_orig_comp_id(il_orig_index, 2) = ib_nin
02188 ila_orig_comp_id(il_orig_index, 3) = &
02189 sga_smioc_transi(ib_ntt2)%ig_comp_id
02190
02191 ENDIF
02192 ENDDO
02193
02194 DO ib_nout = 1, sga_smioc_transi(ib_ntt)%ig_nb_transi_out
02195 IF (sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
02196 cg_dest_comp_name .EQ. sga_smioc_transi(ib_ntt2)%cg_comp_name) THEN
02197
02198 sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
02199 ig_dest_comp_id = sga_smioc_transi(ib_ntt2)%ig_comp_id
02200
02201 il_dest_index = il_dest_index + 1
02202 ila_dest_comp_id(il_dest_index, 1) = ib_ntt
02203 ila_dest_comp_id(il_dest_index, 2) = ib_nout
02204 ila_dest_comp_id(il_dest_index, 3) = &
02205 sga_smioc_transi(ib_ntt2)%ig_comp_id
02206
02207 ENDIF
02208 ENDDO
02209 ENDDO
02210 ENDDO
02211
02212
02213
02214 il_loc_index = 0
02215
02216 DO ib_ntt2 = 1, ig_nb_tot_transi
02217
02218 il_combi = 1
02219 il_source = 1
02220 ll_combi = .false.
02221 ll_source = .false.
02222
02223 DO ib_nin = 2, sga_smioc_transi(ib_ntt2)%sg_transi_in%ig_nb_in_orig
02224
02225
02226 IF (sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(ib_nin)% &
02227 sg_combi%cg_combi_name .NE. ' ' .AND. sga_smioc_transi(ib_ntt2)% &
02228 sg_transi_in%sga_in_orig(ib_nin)%sg_combi%cg_combi_name .EQ. &
02229 sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(ib_nin-1)% &
02230 sg_combi%cg_combi_name) il_combi = il_combi + 1
02231
02232
02233 IF (sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(ib_nin)% &
02234 cg_orig_comp_name .EQ. sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02235 sga_in_orig(ib_nin-1)%cg_orig_comp_name) il_source = il_source + 1
02236
02237 ENDDO
02238
02239
02240 IF (sga_smioc_transi(ib_ntt2)%sg_transi_in%ig_nb_in_orig .GT. 1 .AND. &
02241 il_combi .EQ. sga_smioc_transi(ib_ntt2)%sg_transi_in%ig_nb_in_orig) &
02242 ll_combi = .TRUE.
02243
02244
02245 IF (sga_smioc_transi(ib_ntt2)%sg_transi_in%ig_nb_in_orig .GT. 1 .AND. &
02246 il_source .EQ. sga_smioc_transi(ib_ntt2)%sg_transi_in%ig_nb_in_orig) &
02247 ll_source = .TRUE.
02248
02249 IF (ll_combi) THEN
02250
02251 il_loc_index = il_loc_index + 1
02252 ila_combi_loc(il_loc_index,1) = ib_ntt2
02253
02254 IF (ll_source) THEN
02255 sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(:)% &
02256 sg_combi%ig_location = PSMILe_source
02257 ila_combi_loc(il_loc_index,2) = PSMILe_source
02258 ELSE
02259 sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(:)% &
02260 sg_combi%ig_location = PSMILe_target
02261 ila_combi_loc(il_loc_index,2) = PSMILe_target
02262 ENDIF
02263 ENDIF
02264 ENDDO
02265
02266
02267
02268 il_trans_dest_index = 0
02269 il_trans_orig_index = 0
02270 il_cpl_rst_file_index = 0
02271 il_trans_interp_index = 0
02272
02273 DO ib_ntt = 1, ig_nb_tot_transi
02274 DO ib_nout = 1, sga_smioc_transi(ib_ntt)%ig_nb_transi_out
02275
02276 DO ib_ntt2 = 1, ig_nb_tot_transi
02277 DO ib_nin = 1, sga_smioc_transi(ib_ntt2)%sg_transi_in%ig_nb_in_orig
02278
02279 #ifdef DEBUG
02280
02281 IF (TRIM(sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
02282 cg_transi_out_name) .EQ. trim(sga_smioc_transi(ib_ntt2)% &
02283 sg_transi_in%sga_in_orig(ib_nin)%cg_orig_transi) .AND. &
02284 trim(sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(ib_nin)% &
02285 cg_transi_in_name) .NE. trim(sga_smioc_transi(ib_ntt)% &
02286 sga_transi_out(ib_nout)%cg_dest_transi)) THEN
02287 PRINT *, '| | | Incoherency in corresponding source and target XML info'
02288 PRINT *, '| | | for transient ', sga_smioc_transi(ib_ntt)% &
02289 sga_transi_out(ib_nout)%cg_dest_transi
02290 CALL PSMILe_abort
02291 ENDIF
02292 IF (TRIM(sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
02293 cg_transi_out_name) .NE. trim(sga_smioc_transi(ib_ntt2)% &
02294 sg_transi_in%sga_in_orig(ib_nin)%cg_orig_transi) .AND. &
02295 trim(sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(ib_nin)% &
02296 cg_transi_in_name) .EQ. trim(sga_smioc_transi(ib_ntt)% &
02297 sga_transi_out(ib_nout)%cg_dest_transi)) THEN
02298 PRINT *, '| | | Incoherency in corresponding source and target XML info'
02299 PRINT *, '| | | for transient ', sga_smioc_transi(ib_ntt2)% &
02300 sg_transi_in%sga_in_orig(ib_nin)%cg_orig_transi
02301 CALL PSMILe_abort
02302 ENDIF
02303 #endif
02304 IF (trim(sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
02305 cg_transi_out_name) .EQ. trim(sga_smioc_transi(ib_ntt2)% &
02306 sg_transi_in%sga_in_orig(ib_nin)%cg_orig_transi) .AND. &
02307 trim(sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(ib_nin)% &
02308 cg_transi_in_name) .EQ. trim(sga_smioc_transi(ib_ntt)% &
02309 sga_transi_out(ib_nout)%cg_dest_transi)) THEN
02310
02311
02312 sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
02313 ig_dest_transi_id = sga_smioc_transi(ib_ntt2)% &
02314 sg_transi_in%sga_in_orig(ib_nin)%ig_transi_in_id
02315
02316 il_trans_dest_index = il_trans_dest_index + 1
02317 #ifdef DEBUG
02318 IF (il_trans_dest_index .GT. il_index2) THEN
02319 PRINT *, '| | | Arrays with too small allocation'
02320 PRINT *, '| | | in prismdrv_init_smioc_struct.F90'
02321 CALL PSMILe_abort
02322 ENDIF
02323 #endif
02324 ila_trans_dest_id(il_trans_dest_index,1) = ib_ntt
02325 ila_trans_dest_id(il_trans_dest_index,2) = ib_nout
02326 ila_trans_dest_id(il_trans_dest_index,3) = &
02327 sga_smioc_transi(ib_ntt2)% &
02328 sg_transi_in%sga_in_orig(ib_nin)%ig_transi_in_id
02329
02330 sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(ib_nin)% &
02331 ig_orig_transi_id = sga_smioc_transi(ib_ntt)% &
02332 sga_transi_out(ib_nout)%ig_transi_out_id
02333
02334 il_trans_orig_index = il_trans_orig_index + 1
02335 ila_trans_orig_id(il_trans_orig_index,1) = ib_ntt2
02336 ila_trans_orig_id(il_trans_orig_index,2) = ib_nin
02337 ila_trans_orig_id(il_trans_orig_index,3) = &
02338 sga_smioc_transi(ib_ntt)% &
02339 sga_transi_out(ib_nout)%ig_transi_out_id
02340
02341
02342 sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
02343 sg_cpl_rst_file = sga_smioc_transi(ib_ntt2)% &
02344 sg_transi_in%sga_in_orig(ib_nin)%sg_cpl_rst_file
02345
02346 il_cpl_rst_file_index = il_cpl_rst_file_index + 1
02347 ila_cpl_rst_file(il_cpl_rst_file_index,1) = ib_ntt
02348 ila_cpl_rst_file(il_cpl_rst_file_index,2) = ib_nout
02349 ila_cpl_rst_file(il_cpl_rst_file_index,3) = &
02350 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02351 sga_in_orig(ib_nin)%sg_cpl_rst_file%ig_suffix
02352 ila_cpl_rst_file(il_cpl_rst_file_index,4) = &
02353 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02354 sga_in_orig(ib_nin)%sg_cpl_rst_file%ig_file_format
02355 ila_cpl_rst_file(il_cpl_rst_file_index,5) = &
02356 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02357 sga_in_orig(ib_nin)%sg_cpl_rst_file%ig_file_set
02358 ila_cpl_rst_file(il_cpl_rst_file_index,6) = &
02359 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02360 sga_in_orig(ib_nin)%sg_cpl_rst_file%ig_file_iomode
02361 ila_cpl_rst_file(il_cpl_rst_file_index,7) = &
02362 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02363 sga_in_orig(ib_nin)%sg_cpl_rst_file%ig_file_pack
02364
02365 dla_cpl_rst_file(il_cpl_rst_file_index,1) = &
02366 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02367 sga_in_orig(ib_nin)%sg_cpl_rst_file%dg_file_scal
02368 dla_cpl_rst_file(il_cpl_rst_file_index,2) = &
02369 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02370 sga_in_orig(ib_nin)%sg_cpl_rst_file%dg_file_add
02371 dla_cpl_rst_file(il_cpl_rst_file_index,3) = &
02372 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02373 sga_in_orig(ib_nin)%sg_cpl_rst_file%dg_fill_val
02374
02375 cla_cpl_rst_file(il_cpl_rst_file_index,1) = &
02376 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02377 sga_in_orig(ib_nin)%sg_cpl_rst_file%cg_file_name
02378
02379
02380 print *,' transfer de sg_interp de in vers out '
02381 IF (sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
02382 ig_dest_type .EQ. PSMILe_comp) THEN
02383
02384 sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
02385 sg_interp = sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02386 sga_in_orig(ib_nin)%sg_interp
02387 print *,' ib_ntt ib_nout ib_ntt2 ib_nin = ',ib_ntt,ib_nout,ib_ntt2,ib_nin
02388
02389 il_trans_interp_index = il_trans_interp_index + 1
02390 print *,' il_trans_interp_index = ',il_trans_interp_index
02391 print *,' il_trans_dest_index = ',il_trans_dest_index
02392
02393 ila_trans_interp(il_trans_dest_index,1) = ib_ntt
02394 ila_trans_interp(il_trans_dest_index,2) = ib_nout
02395 ila_trans_interp(il_trans_dest_index,3) = &
02396 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02397 sga_in_orig(ib_nin)%sg_interp%ig_interp_type
02398 ila_trans_interp(il_trans_dest_index,4:6) = &
02399 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02400 sga_in_orig(ib_nin)%sg_interp%iga_arg1(1:3)
02401 ila_trans_interp(il_trans_dest_index,7:9) = &
02402 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02403 sga_in_orig(ib_nin)%sg_interp%iga_arg2(1:3)
02404 ila_trans_interp(il_trans_dest_index,10:12) = &
02405 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02406 sga_in_orig(ib_nin)%sg_interp%iga_arg3(1:3)
02407 ila_trans_interp(il_trans_dest_index,13:15) = &
02408 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02409 sga_in_orig(ib_nin)%sg_interp%iga_arg4(1:3)
02410 ila_trans_interp(il_trans_dest_index,16:18) = &
02411 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02412 sga_in_orig(ib_nin)%sg_interp%iga_arg5(1:3)
02413 ila_trans_interp(il_trans_dest_index,19:21) = &
02414 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02415 sga_in_orig(ib_nin)%sg_interp%iga_arg6(1:3)
02416 ila_trans_interp(il_trans_dest_index,22:24) = &
02417 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02418 sga_in_orig(ib_nin)%sg_interp%iga_arg7(1:3)
02419 ila_trans_interp(il_trans_dest_index,25:27) = &
02420 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02421 sga_in_orig(ib_nin)%sg_interp%iga_interp_meth(1:3)
02422
02423 ila_trans_interp(il_trans_dest_index,28) = &
02424 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02425 sga_in_orig(ib_nin)%sg_interp%sg_arg10%ig_suffix
02426 ila_trans_interp(il_trans_dest_index,29) = &
02427 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02428 sga_in_orig(ib_nin)%sg_interp%sg_arg10%ig_file_format
02429 ila_trans_interp(il_trans_dest_index,30) = &
02430 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02431 sga_in_orig(ib_nin)%sg_interp%sg_arg10%ig_file_set
02432 ila_trans_interp(il_trans_dest_index,31) = &
02433 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02434 sga_in_orig(ib_nin)%sg_interp%sg_arg10%ig_file_iomode
02435 ila_trans_interp(il_trans_dest_index,32) = &
02436 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02437 sga_in_orig(ib_nin)%sg_interp%sg_arg10%ig_file_pack
02438
02439
02440 dla_trans_interp(il_trans_dest_index,1) = &
02441 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02442 sga_in_orig(ib_nin)%sg_interp%dg_arg8
02443
02444 dla_trans_interp(il_trans_dest_index,2) = &
02445 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02446 sga_in_orig(ib_nin)%sg_interp%sg_arg10%dg_file_scal
02447 dla_trans_interp(il_trans_dest_index,3) = &
02448 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02449 sga_in_orig(ib_nin)%sg_interp%sg_arg10%dg_file_add
02450 dla_trans_interp(il_trans_dest_index,4) = &
02451 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02452 sga_in_orig(ib_nin)%sg_interp%sg_arg10%dg_fill_val
02453
02454
02455 cla_trans_interp(il_trans_dest_index,1) = &
02456 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02457 sga_in_orig(ib_nin)%sg_interp%cg_arg9
02458
02459 cla_trans_interp(il_trans_dest_index,2) = &
02460 sga_smioc_transi(ib_ntt2)%sg_transi_in% &
02461 sga_in_orig(ib_nin)%sg_interp%sg_arg10%cg_file_name
02462
02463 END IF
02464
02465
02466 sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)%ig_conserv = &
02467 sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(ib_nin)% &
02468 ig_conserv
02469
02470 ila_cpl_rst_file(il_cpl_rst_file_index,8) = &
02471 sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(ib_nin)% &
02472 ig_conserv
02473
02474
02475 IF (sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(ib_nin)% &
02476 sg_combi%ig_location == PSMILe_source) &
02477 sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)%sg_combi = &
02478 sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(ib_nin)% &
02479 sg_combi
02480
02481 ENDIF
02482
02483 ENDDO
02484 ENDDO
02485
02486 ENDDO
02487 ENDDO
02488
02489 ila_dim_size(1) = il_orig_index
02490 ila_dim_size(2) = il_dest_index
02491 ila_dim_size(3) = il_loc_index
02492 ila_dim_size(4) = il_trans_orig_index
02493 ila_dim_size(5) = il_trans_dest_index
02494 ila_dim_size(6) = il_cpl_rst_file_index
02495 ila_dim_size(7) = il_trans_interp_index
02496 #ifdef VERBOSE
02497 PRINT *, '| | | '
02498 PRINT *, '| | | Dimensions for post-treatment ', ila_dim_size
02499 PRINT *, '| | | Post-treatment '
02500 call psmile_flushstd
02501 #endif
02502 DO ib_c = 1, ig_nb_tot_comps
02503
02504 ila_tgt_proc(:) = -1
02505 il_nb_comp_pes = 0
02506
02507
02508 DO ib = 0, ig_nb_tot_pes + (ig_driver_nb_pes-1)
02509 IF ((ib < PRISMdrv_root) .OR. ((PRISMdrv_root + ig_driver_nb_pes) <= ib)) THEN
02510 DO ib_ter = 1, Drv_Procs(ib+1)%comps_per_rank
02511 IF (Drv_Procs(ib+1)%global_comp_id(ib_ter) .eq. ib_c) THEN
02512 il_nb_comp_pes = il_nb_comp_pes + 1
02513 ila_tgt_proc(il_nb_comp_pes) = Drv_Procs(ib+1)%global_rank(ib_ter)
02514 END IF
02515 END DO
02516 END IF
02517 END DO
02518
02519 DO ib = 1, il_nb_comp_pes
02520
02521 CALL MPI_Send (ila_dim_size, 7, MPI_Integer, ila_tgt_proc(ib), 11, comm_drv_trans, id_err)
02522
02523 IF (il_orig_index .gt. 0) THEN
02524 CALL MPI_Send (ila_orig_comp_id(1:il_orig_index,1:3), &
02525 il_orig_index*3, MPI_Integer, ila_tgt_proc(ib), 12, comm_drv_trans, id_err)
02526 END IF
02527
02528 IF (il_dest_index .gt. 0) THEN
02529 CALL MPI_Send (ila_dest_comp_id(1:il_dest_index,1:3), &
02530 il_dest_index*3, MPI_Integer, ila_tgt_proc(ib), 13, comm_drv_trans, id_err)
02531 END IF
02532
02533 IF (il_loc_index .gt. 0) THEN
02534 CALL MPI_Send (ila_combi_loc(1:il_loc_index,1:2), il_loc_index*2, &
02535 MPI_Integer, ila_tgt_proc(ib), 14, comm_drv_trans, id_err)
02536 END IF
02537
02538 IF (il_trans_orig_index .gt. 0) THEN
02539 CALL MPI_Send (ila_trans_orig_id(1:il_trans_orig_index,1:3), &
02540 il_trans_orig_index*3, MPI_Integer, ila_tgt_proc(ib), 15, comm_drv_trans, id_err)
02541 END IF
02542
02543 IF (il_trans_dest_index .gt. 0) THEN
02544 CALL MPI_Send (ila_trans_dest_id(1:il_trans_dest_index,1:3), &
02545 il_trans_dest_index*3, MPI_Integer, ila_tgt_proc(ib), 16, comm_drv_trans, id_err)
02546 END IF
02547
02548 IF (il_cpl_rst_file_index .gt. 0) THEN
02549 CALL MPI_Send (ila_cpl_rst_file(1:il_cpl_rst_file_index,1:8), &
02550 il_cpl_rst_file_index*8, MPI_Integer, ila_tgt_proc(ib), 17, comm_drv_trans, id_err)
02551 CALL MPI_Send (dla_cpl_rst_file(1:il_cpl_rst_file_index,1:3), &
02552 il_cpl_rst_file_index*3, MPI_Double_Precision, ila_tgt_proc(ib), 18, &
02553 comm_drv_trans, id_err)
02554 CALL MPI_Send (cla_cpl_rst_file(1:il_cpl_rst_file_index,1), &
02555 il_cpl_rst_file_index*max_name, MPI_Character, ila_tgt_proc(ib), 19, &
02556 comm_drv_trans, id_err)
02557 END IF
02558
02559 IF (il_trans_interp_index .gt. 0) THEN
02560 CALL MPI_Send (ila_trans_interp(1:il_trans_interp_index,1:32), &
02561 il_trans_interp_index*32, MPI_Integer, ila_tgt_proc(ib), 20, comm_drv_trans, &
02562 id_err)
02563 CALL MPI_Send (dla_trans_interp(1:il_trans_interp_index,1:4), &
02564 il_trans_interp_index*4, MPI_Double_Precision, ila_tgt_proc(ib), 21, &
02565 comm_drv_trans, id_err)
02566 CALL MPI_Send (cla_trans_interp(1:il_trans_interp_index,1:2), &
02567 il_trans_interp_index*max_name*2, MPI_Character, ila_tgt_proc(ib), 22, &
02568 comm_drv_trans, id_err)
02569 END IF
02570
02571 END DO
02572
02573 END DO
02574
02575 IF (il_orig_index .gt. 0) THEN
02576 DEALLOCATE(ila_orig_comp_id, stat=id_err)
02577 IF (id_err > 0) THEN
02578 ierrp (1) = id_err
02579 id_err = 14
02580
02581 call psmile_error_common ( id_err, 'ila_orig_comp_id', &
02582 ierrp, 1, __FILE__, __LINE__ )
02583 RETURN
02584 ENDIF
02585 END IF
02586 IF (il_dest_index .gt. 0) THEN
02587 DEALLOCATE(ila_dest_comp_id, stat=id_err)
02588 IF (id_err > 0) THEN
02589 ierrp (1) = id_err
02590 id_err = 14
02591
02592 call psmile_error_common ( id_err, 'ila_dest_comp_id', &
02593 ierrp, 1, __FILE__, __LINE__ )
02594 RETURN
02595 ENDIF
02596 END IF
02597 IF (il_loc_index .gt. 0) THEN
02598 DEALLOCATE(ila_combi_loc, stat=id_err)
02599 IF (id_err > 0) THEN
02600 ierrp (1) = id_err
02601 id_err = 14
02602
02603 call psmile_error_common ( id_err, 'ila_combi_loc', &
02604 ierrp, 1, __FILE__, __LINE__ )
02605 RETURN
02606 ENDIF
02607 END IF
02608 IF (il_trans_orig_index .gt. 0) THEN
02609 DEALLOCATE(ila_trans_orig_id, stat=id_err)
02610 IF (id_err > 0) THEN
02611 ierrp (1) = id_err
02612 id_err = 14
02613
02614 call psmile_error_common ( id_err, 'ila_trans_orig_id', &
02615 ierrp, 1, __FILE__, __LINE__ )
02616 RETURN
02617 ENDIF
02618 DEALLOCATE(ila_combi_loc, stat=id_err)
02619 IF (id_err > 0) THEN
02620 ierrp (1) = id_err
02621 id_err = 14
02622
02623 call psmile_error_common ( id_err, 'ila_combi_loc', &
02624 ierrp, 1, __FILE__, __LINE__ )
02625 RETURN
02626 ENDIF
02627 END IF
02628 IF (il_trans_dest_index .gt. 0) THEN
02629 DEALLOCATE(ila_trans_dest_id, stat=id_err)
02630 IF (id_err > 0) THEN
02631 ierrp (1) = id_err
02632 id_err = 14
02633
02634 call psmile_error_common ( id_err, 'ila_trans_dest_id', &
02635 ierrp, 1, __FILE__, __LINE__ )
02636 RETURN
02637 ENDIF
02638 END IF
02639 IF (il_cpl_rst_file_index .gt. 0) THEN
02640 DEALLOCATE(ila_cpl_rst_file, dla_cpl_rst_file, cla_cpl_rst_file, stat=id_err)
02641 IF (id_err > 0) THEN
02642 ierrp (1) = id_err
02643 id_err = 14
02644
02645 call psmile_error_common ( id_err, 'ila_cpl_rst_file', &
02646 ierrp, 1, __FILE__, __LINE__ )
02647 RETURN
02648 ENDIF
02649 END IF
02650 IF (il_trans_interp_index .gt. 0) THEN
02651 DEALLOCATE(ila_trans_interp, dla_trans_interp, cla_trans_interp, stat=id_err)
02652 IF (id_err > 0) THEN
02653 ierrp (1) = id_err
02654 id_err = 14
02655
02656 call psmile_error_common ( id_err, 'ila_trans_interp', &
02657 ierrp, 1, __FILE__, __LINE__ )
02658 RETURN
02659 ENDIF
02660 END IF
02661
02662 #ifdef VERBOSE
02663 PRINT *, '| | | '
02664 PRINT *, '| | | Got transient details '
02665 call psmile_flushstd
02666 #endif
02667
02668
02669
02670
02671
02672 #ifdef VERBOSE
02673 PRINT *, '| | | '
02674 PRINT *, '| | | Get persistent details '
02675 call psmile_flushstd
02676 #endif
02677
02678 il_npe = 0
02679
02680 DO ib_c = 1, ig_nb_tot_comps
02681
02682 IF (iga_comp_nb_persis(ib_c) .gt. 0) THEN
02683
02684
02685 ALLOCATE (sla_driver_persis(iga_comp_nb_persis(ib_c)), stat=id_err)
02686 IF (id_err > 0) THEN
02687 ierrp (1) = id_err
02688 ierrp (2) = iga_comp_nb_persis(ib_c)
02689 id_err = 13
02690
02691 call psmile_error_common ( id_err, 'sla_driver_persis', &
02692 ierrp, 2, __FILE__, __LINE__ )
02693 RETURN
02694 ENDIF
02695
02696
02697 CALL init_persis (iga_comp_nb_persis(ib_c), &
02698 sla_driver_persis, &
02699 id_err )
02700 IF (id_err .ne. 0) PRINT *, '| | |WARNING: Pb in init_persis'
02701
02702 #ifdef CIM
02703 iga_comp_nb_persis(ib_c) = 0
02704 #else
02705 CALL get_persis_details (iga_comp_id_doc_XML(ib_c), &
02706 iga_comp_nb_persis(ib_c), &
02707 sla_driver_persis, &
02708 id_err )
02709 IF (id_err .ne. 0) PRINT *, '| | |WARNING: Pb in get_persis_details'
02710 #endif
02711
02712
02713 ALLOCATE(ila_smioc_send(4*iga_comp_nb_persis(ib_c)), stat=id_err)
02714 IF (id_err > 0) THEN
02715 ierrp (1) = id_err
02716 ierrp (2) = 4*iga_comp_nb_persis(ib_c)
02717 id_err = 13
02718
02719 call psmile_error_common ( id_err, 'ila_smioc_send', &
02720 ierrp, 2, __FILE__, __LINE__ )
02721 RETURN
02722 ENDIF
02723 ALLOCATE(cla_smioc_send(5*iga_comp_nb_persis(ib_c)), stat=id_err)
02724 IF (id_err > 0) THEN
02725 ierrp (1) = id_err
02726 ierrp (2) = 5*iga_comp_nb_persis(ib_c)
02727 id_err = 13
02728
02729 call psmile_error_common ( id_err, 'cla_smioc_send', &
02730 ierrp, 2, __FILE__, __LINE__ )
02731 RETURN
02732 ENDIF
02733 ALLOCATE(rla_smioc_send(3*iga_comp_nb_persis(ib_c)), stat=id_err)
02734 IF (id_err > 0) THEN
02735 ierrp (1) = id_err
02736 ierrp (2) = 3*iga_comp_nb_persis(ib_c)
02737 id_err = 13
02738
02739 call psmile_error_common ( id_err, 'rla_smioc_send', &
02740 ierrp, 2, __FILE__, __LINE__ )
02741 RETURN
02742 ENDIF
02743
02744 DO ib = 1, iga_comp_nb_persis(ib_c)
02745
02746 ila_smioc_send(1 + (ib-1)*4) = sla_driver_persis(ib)%ig_comp_id
02747 ila_smioc_send(2 + (ib-1)*4) = sla_driver_persis(ib)%ig_persis_id
02748 ila_smioc_send(3 + (ib-1)*4) = sla_driver_persis(ib)%ig_persis_type
02749 ila_smioc_send(4 + (ib-1)*4) = sla_driver_persis(ib)%ig_datatype
02750
02751 cla_smioc_send(1 + (ib-1)*5) = sla_driver_persis(ib)%cg_local_name
02752 cla_smioc_send(2 + (ib-1)*5) = sla_driver_persis(ib)%cg_stand_name
02753 cla_smioc_send(3 + (ib-1)*5) = sla_driver_persis(ib)%cg_long_name
02754 cla_smioc_send(4 + (ib-1)*5) = sla_driver_persis(ib)%cg_comp_name
02755 cla_smioc_send(5 + (ib-1)*5) = sla_driver_persis(ib)%cg_units
02756
02757 rla_smioc_send(1 + (ib-1)*3) = sla_driver_persis(ib)%rg_persis_min
02758 rla_smioc_send(2 + (ib-1)*3) = sla_driver_persis(ib)%rg_persis_max
02759 rla_smioc_send(3 + (ib-1)*3) = sla_driver_persis(ib)%rg_persis
02760
02761 END DO
02762
02763
02764 ila_tgt_proc(:) = -1
02765 il_nb_comp_pes = 0
02766
02767 DO ib = 0, ig_nb_tot_pes + (ig_driver_nb_pes-1)
02768 IF ((ib < PRISMdrv_root) .OR. ((PRISMdrv_root + ig_driver_nb_pes) <= ib)) THEN
02769 DO ib_ter = 1, Drv_Procs(ib+1)%comps_per_rank
02770 IF (Drv_Procs(ib+1)%global_comp_id(ib_ter) .eq. ib_c) THEN
02771 il_nb_comp_pes = il_nb_comp_pes + 1
02772 ila_tgt_proc(il_nb_comp_pes) = Drv_Procs(ib+1)%global_rank(ib_ter)
02773 END IF
02774 END DO
02775 END IF
02776 END DO
02777
02778 DO ib = 1, il_nb_comp_pes
02779
02780 CALL MPI_Send (ila_smioc_send, 4*iga_comp_nb_persis(ib_c), &
02781 MPI_Integer, ila_tgt_proc(ib), 30, comm_drv_trans, id_err)
02782
02783 CALL MPI_Send (cla_smioc_send, max_name*5*iga_comp_nb_persis(ib_c), &
02784 MPI_Character, ila_tgt_proc(ib), 31, comm_drv_trans, id_err)
02785
02786 CALL MPI_Send (rla_smioc_send, 3*iga_comp_nb_persis(ib_c), &
02787 MPI_Real, ila_tgt_proc(ib), 32, comm_drv_trans, id_err)
02788 #ifdef VERBOSE
02789 call prismdrv_get_comp_names(ib_c, cla_appli_name, cla_comp_name, id_err)
02790 PRINT *, '| | | The transfer of information for component ', &
02791 TRIM(cla_comp_name), ' to pes ',ila_tgt_proc(ib), ' ends.'
02792 #endif
02793 END DO
02794
02795 DEALLOCATE(ila_smioc_send, stat=id_err)
02796 IF (id_err > 0) THEN
02797 ierrp (1) = id_err
02798 id_err = 14
02799
02800 call psmile_error_common ( id_err, 'ila_smioc_send', &
02801 ierrp, 1, __FILE__, __LINE__ )
02802 RETURN
02803 ENDIF
02804 DEALLOCATE(cla_smioc_send, stat=id_err)
02805 IF (id_err > 0) THEN
02806 ierrp (1) = id_err
02807 id_err = 14
02808
02809 call psmile_error_common ( id_err, 'cla_smioc_send', &
02810 ierrp, 1, __FILE__, __LINE__ )
02811 RETURN
02812 ENDIF
02813 DEALLOCATE(rla_smioc_send, stat=id_err)
02814 IF (id_err > 0) THEN
02815 ierrp (1) = id_err
02816 id_err = 14
02817
02818 call psmile_error_common ( id_err, 'rla_smioc_send', &
02819 ierrp, 1, __FILE__, __LINE__ )
02820 RETURN
02821 ENDIF
02822
02823
02824 sla_driver_persis(:)%ig_comp_id = ib_c
02825 DO ib_p = 1, iga_comp_nb_persis(ib_c)
02826 ib_a = il_npe+ib_p
02827 sla_driver_persis(ib_p)%ig_persis_id = ib_a
02828 ENDDO
02829
02830
02831 sga_smioc_persis(il_npe+1:il_npe+iga_comp_nb_persis(ib_c)) = &
02832 sla_driver_persis(:)
02833
02834 il_npe = il_npe + iga_comp_nb_persis(ib_c)
02835
02836
02837 DEALLOCATE(sla_driver_persis, stat=id_err)
02838 IF (id_err > 0) THEN
02839 ierrp (1) = id_err
02840 id_err = 14
02841
02842 call psmile_error_common ( id_err, 'sla_driver_persis', &
02843 ierrp, 1, __FILE__, __LINE__ )
02844 RETURN
02845 ENDIF
02846
02847 END IF
02848
02849 END DO
02850 #ifdef VERBOSE
02851 PRINT *, '| | | '
02852 PRINT *, '| | | The total number of persistents : ', il_npe
02853 call psmile_flushstd
02854 #endif
02855
02856
02857
02858
02859
02860 #ifdef CIM
02861
02862 if (ig_nb_tot_comps .ge. 1) then
02863
02864 ierrp (1) = sasa_c_close (iga_comp_id_doc_XML(1))
02865 endif
02866 #else
02867
02868 DO ib_c = 1, ig_nb_tot_comps
02869 ierrp (1) = sasa_c_close (iga_comp_id_doc_XML(ib_c))
02870 END DO
02871 #endif
02872
02873
02874 #ifdef DEBUG
02875
02876
02877
02878 OPEN (file='driver_smioc.debug.000', unit=28, form='formatted')
02879
02880
02881 IF (ig_nb_tot_grids .gt. 0) THEN
02882 CALL write_grids_details (ig_nb_tot_grids, &
02883 sga_smioc_grids, 28, id_err )
02884 IF (id_err .ne. 0) PRINT *, '| | |WARNING: Pb in write_grids_details'
02885 END IF
02886
02887
02888 IF (ig_nb_tot_transi .gt. 0) THEN
02889 CALL write_transi_details (ig_nb_tot_transi, &
02890 sga_smioc_transi, 28, id_err )
02891 IF (id_err .ne. 0) PRINT *, '| | |WARNING: Pb in write_transi_details'
02892 END IF
02893
02894
02895 IF (ig_nb_tot_persis .gt. 0) THEN
02896 CALL write_persis_details (ig_nb_tot_persis, &
02897 sga_smioc_persis, 28, id_err )
02898 IF (id_err .ne. 0) PRINT *, '| | |WARNING: Pb in write_persis_details'
02899 END IF
02900
02901 CLOSE (unit=28)
02902
02903 #endif
02904
02905
02906 #ifdef VERBOSE
02907 PRINT *, '| | | '
02908 PRINT *, '| | Quit PRISMDrv_init_smioc_struct'
02909 PRINT *, '| |'
02910 call psmile_flushstd
02911 #endif
02912 END SUBROUTINE PRISMDrv_init_smioc_struct
02913
02914
02915
02916