prismdrv_init_smioc_struct.F90

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

Generated on 1 Dec 2011 for Oasis4 by  doxygen 1.6.1