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