psmile_smioc_init.F90

Go to the documentation of this file.
00001 !------------------------------------------------------------------------
00002 ! Copyright 2006-2010, CERFACS, Toulouse, France.
00003 ! All rights reserved. Use is subject to OASIS4 license terms.
00004 !-----------------------------------------------------------------------
00005 !BOP
00006 !
00007 ! !ROUTINE: PSMILe_smioc_init
00008 !
00009 ! !INTERFACE
00010 subroutine psmile_smioc_init(cda_comp_name, il_comp_id, id_err)
00011 
00012 !
00013 ! !USES:
00014 !
00015   USE PSMILe_smioc
00016   USE PSMILe_smioc_interface
00017 !
00018   IMPLICIT NONE
00019 
00020 !
00021 ! !PARAMETERS:
00022 !
00023   CHARACTER (LEN=256), INTENT(In)     :: cda_comp_name
00024 
00025   INTEGER, INTENT (IN)                :: il_comp_id
00026 !
00027 ! ! RETURN VALUE
00028 !
00029   INTEGER, INTENT (Out)               :: id_err   ! error value
00030 
00031 ! !DESCRIPTION
00032 ! Subroutine "PSMILe_smioc_init" extracts the smioc information. The
00033 ! information is directly extracted from the xml file if stand alone,
00034 ! or received from the driver if several component.
00035 !
00036 ! !REVISED HISTORY
00037 !   Date      Programmer   Description
00038 ! ----------  ----------   -----------
00039 ! 02/01/2004  D. Declat     Creation
00040 ! 22/03/2010  JM Epitalon   Simultaneous access to multiple SMIOC files
00041 !                           by OASIS driver (when not standalone)
00042 !
00043 !EOP
00044 !----------------------------------------------------------------------
00045 ! $Id: psmile_smioc_init.F90 2687 2010-10-28 15:15:52Z coquart $
00046 ! $Author: coquart $
00047 !----------------------------------------------------------------------
00048 !
00049 ! 0. Local declarations
00050 !
00051 ! External routines (written in C)
00052   INTEGER :: sasa_c_read_file, sasa_c_close
00053 
00054   CHARACTER(LEN=80), SAVE  :: mycvs = 
00055      '$Id'
00056 
00057   CHARACTER (LEN=256)      :: cla_smioc_file
00058 
00059   INTEGER :: il_smioc_recv_size_i, il_smioc_recv_size_c, il_smioc_recv_size_d
00060   INTEGER :: il_index_i, il_index_c, il_index_d
00061 
00062   INTEGER :: il_nb_int_i_fix, il_nb_int_i_in, il_nb_int_i_out
00063   INTEGER :: il_nb_int_d_fix, il_nb_int_d_in, il_nb_int_d_out
00064   INTEGER :: il_nb_int_c_fix, il_nb_int_c_in, il_nb_int_c_out
00065   INTEGER :: il_igrid
00066 
00067   INTEGER, DIMENSION(:), ALLOCATABLE :: ila_smioc_recv
00068   CHARACTER (LEN=256), DIMENSION(:), ALLOCATABLE :: cla_smioc_recv
00069   DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: dla_smioc_recv
00070   REAL, DIMENSION(:), ALLOCATABLE :: rla_smioc_recv
00071 
00072 ! Loop indices
00073   INTEGER :: ib_ntt, ib, ib_bis, ib_ter
00074   INTEGER :: ib_ntt2, ib_nin, ib_nout, ib_transi
00075   INTEGER :: ib_grid
00076 
00077 ! Count integers
00078   INTEGER :: ib_p, il_combi, il_source
00079   INTEGER :: il_npartinid, il_npartoutid
00080 
00081 ! Logical
00082   LOGICAL :: ll_combi, ll_source
00083 ! Local logical variable : ll_userdef_details must be set to .false.
00084 ! Used to call  get_smioc_numbers, get_transi_details also called by driver
00085   LOGICAL :: ll_userdef_details
00086 ! Local logical variable : ll_first_details must be set to .true.
00087 ! Used to call  get_transi_io_numbers also called by driver
00088   LOGICAL :: ll_first_details
00089 
00090   INTEGER :: il_status(MPI_STATUS_SIZE)
00091   INTEGER :: il_chanel, il_index
00092   INTEGER :: il_smioc_len
00093   INTEGER :: il_compid
00094 
00095 ! arrays used to manage the post-attributed informations
00096   INTEGER, DIMENSION(7) :: ila_dim_size
00097 
00098   INTEGER, DIMENSION(:,:), ALLOCATABLE :: ila_orig_comp_id
00099   INTEGER, DIMENSION(:,:), ALLOCATABLE :: ila_dest_comp_id
00100   INTEGER, DIMENSION(:,:), ALLOCATABLE :: ila_combi_loc
00101   INTEGER, DIMENSION(:,:), ALLOCATABLE :: ila_trans_orig_id
00102   INTEGER, DIMENSION(:,:), ALLOCATABLE :: ila_trans_dest_id
00103 
00104   INTEGER, DIMENSION(:,:), ALLOCATABLE :: ila_cpl_rst_file
00105   DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: dla_cpl_rst_file
00106   CHARACTER(len=max_name), DIMENSION(:,:), ALLOCATABLE :: cla_cpl_rst_file
00107 
00108   INTEGER, DIMENSION(:,:), ALLOCATABLE :: ila_trans_interp
00109   DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: dla_trans_interp
00110   CHARACTER(len=max_name), DIMENSION(:,:), ALLOCATABLE :: cla_trans_interp
00111 
00112 ! Number of input and output transients and standard names per transients
00113   INTEGER, DIMENSION(:), ALLOCATABLE :: ila_comp_nb_stand_name
00114   INTEGER, DIMENSION(:), ALLOCATABLE :: ila_comp_nb_transi_in
00115   INTEGER, DIMENSION(:), ALLOCATABLE :: ila_comp_nb_transi_out
00116 
00117 !     ... for error handling
00118   INTEGER, PARAMETER  :: nerrp = 2
00119   INTEGER             :: ierrp (nerrp)
00120 
00121 #ifdef DEBUG
00122   CHARACTER(len=max_name) :: file_name
00123   INTEGER                 :: my_rank
00124   INTEGER                 :: il_len
00125 #endif
00126 
00127 !
00128 !----------------------------------------------------------------------
00129 !----------------------------------------------------------------------
00130 !
00131 #ifdef VERBOSE
00132       print 9990, trim(ch_id), il_comp_id
00133 
00134       call psmile_flushstd
00135 #endif /* VERBOSE */
00136 !
00137 !
00138 ! 0. Set the debug channel
00139 !
00140 #ifdef DEBUG
00141   CALL MPI_Comm_rank( MPI_COMM_WORLD, my_rank, id_err )
00142   il_chanel = 31
00143   WRITE(file_name,'(a,a17)') TRIM(cda_comp_name), '_smioc.debug.0000'
00144   il_len = LEN_TRIM(file_name)
00145   IF      ( my_rank < 10 ) THEN
00146      WRITE(file_name(il_len  :il_len),'(i1)') my_rank
00147   ELSE IF ( my_rank < 100 ) THEN
00148      WRITE(file_name(il_len-1:il_len),'(i2)') my_rank
00149   ELSE IF ( my_rank < 1000 ) THEN
00150      WRITE(file_name(il_len-2:il_len),'(i3)') my_rank
00151   ELSE IF ( my_rank < 10000 ) THEN
00152      WRITE(file_name(il_len-3:il_len),'(i4)') my_rank
00153   ENDIF
00154   OPEN(FILE=file_name,FORM='FORMATTED',UNIT=il_chanel)
00155 #endif
00156 !
00157 !-----------------------------------------------------------------------
00158 !
00159 ! 1. Get the number of grids, transient variables and persistent variables
00160 !
00161 #ifdef DEBUG
00162   WRITE(il_chanel,*) '  '
00163   WRITE(il_chanel,*) '* Get the dimensionning numbers'
00164 #endif
00165 
00166 ! 1.1. Initialize the XML content id array for ONE component
00167   IF ( .NOT. ALLOCATED(iga_comp_id_doc_XML) ) &
00168       ALLOCATE( iga_comp_id_doc_XML(1), stat=id_err )
00169   IF (id_err > 0) THEN
00170       ierrp (1) = id_err
00171       ierrp (2) = 1
00172       id_err = 13
00173 
00174       CALL PSMILe_Error ( id_err, 'iga_comp_id_doc_XML', &
00175          ierrp, 2, __FILE__, __LINE__ )
00176       RETURN
00177   ENDIF
00178 
00179 ! 1.2. Initialize the count arrays for the numbers for ONE component
00180   IF ( .NOT. ALLOCATED(iga_comp_nb_grids) ) &
00181       ALLOCATE( iga_comp_nb_grids(1), stat=id_err )
00182   IF (id_err > 0) THEN
00183       ierrp (1) = id_err
00184       ierrp (2) = 1
00185       id_err = 13
00186 
00187       call psmile_error ( id_err, 'iga_comp_nb_grids', &
00188          ierrp, 2, __FILE__, __LINE__ )
00189       RETURN
00190   ENDIF
00191   IF ( .NOT. ALLOCATED(iga_comp_nb_transi) ) &
00192       ALLOCATE( iga_comp_nb_transi(1), stat=id_err )
00193   IF (id_err > 0) THEN
00194       ierrp (1) = id_err
00195       ierrp (2) = 1
00196       id_err = 13
00197 
00198       call psmile_error ( id_err, 'iga_comp_nb_transi', &
00199          ierrp, 2, __FILE__, __LINE__ )
00200       RETURN
00201   ENDIF
00202   IF ( .NOT. ALLOCATED(iga_comp_nb_persis) ) &
00203       ALLOCATE( iga_comp_nb_persis(1), stat=id_err )
00204   IF (id_err > 0) THEN
00205       ierrp (1) = id_err
00206       ierrp (2) = 1
00207       id_err = 13
00208 
00209       call psmile_error ( id_err, 'iga_comp_nb_persis', &
00210          ierrp, 2, __FILE__, __LINE__ )
00211       RETURN
00212   ENDIF
00213   IF ( .NOT. ALLOCATED(iga_comp_nb_unitsets) ) &
00214       ALLOCATE( iga_comp_nb_unitsets(1), stat=id_err )
00215   IF (id_err > 0) THEN
00216       ierrp (1) = id_err
00217       ierrp (2) = 1
00218       id_err = 13
00219 
00220       call psmile_error ( id_err, 'iga_comp_nb_unitsets', &
00221          ierrp, 2, __FILE__, __LINE__ )
00222       RETURN
00223   ENDIF
00224   IF ( .NOT. ALLOCATED(iga_comp_nb_udef) ) &
00225       ALLOCATE( iga_comp_nb_udef(1), stat=id_err )
00226   IF (id_err > 0) THEN
00227       ierrp (1) = id_err
00228       ierrp (2) = 1
00229       id_err = 13
00230 
00231       call psmile_error ( id_err, 'iga_comp_nb_udef', &
00232          ierrp, 2, __FILE__, __LINE__ )
00233       RETURN
00234   ENDIF
00235 
00236 ! 1.3. For each comp (ie SMIOC) get the number of Fortran unit sets
00237 !      the number of grids, transients and
00238 !      persistents and compute the total numbers
00239 #ifdef DEBUG
00240   WRITE(il_chanel,*) '   Component ',  cda_comp_name
00241 #endif
00242 
00243   IF (Appl%stand_alone) THEN
00244 
00245       cla_smioc_file = TRIM(Appl%name)//"_"//TRIM(cda_comp_name)//"_smioc.xml"
00246       il_smioc_len = LEN_TRIM(Appl%name) + 1 + LEN_TRIM(cda_comp_name) + 10
00247 
00248      ! Open SMIOC file
00249       iga_comp_id_doc_XML(1) = sasa_c_read_file  (cla_smioc_file, il_smioc_len)
00250 
00251       il_compid = 1
00252       ll_userdef_details = .false.
00253       CALL get_smioc_numbers ( iga_comp_id_doc_XML(1),  &
00254                                iga_comp_nb_unitsets(1), &
00255                                iga_comp_nb_grids(1),    &
00256                                iga_comp_nb_transi(1),   &
00257                                iga_comp_nb_persis(1),   &
00258                                il_compid,               &
00259                                ll_userdef_details,      &
00260                                id_err )
00261       IF (id_err .ne. 0) WRITE(il_chanel,*) 'WARNING: Pb in get_smioc_numbers'
00262 
00263 #ifdef DEBUG
00264       WRITE(il_chanel,*) '  Nb of Fortran unit sets ', iga_comp_nb_unitsets(1)
00265       WRITE(il_chanel,*) '  Nb of grids ',             iga_comp_nb_grids(1)
00266       WRITE(il_chanel,*) '  Nb of transients ',        iga_comp_nb_transi(1)  
00267       WRITE(il_chanel,*) '  Nb of persistents ',       iga_comp_nb_persis(1)
00268       WRITE(il_chanel,*) '   '
00269       call psmile_flushstd(il_chanel)
00270 #endif
00271 
00272   ELSE
00273 
00274       ALLOCATE(ila_smioc_recv(4), stat=id_err)
00275       IF (id_err > 0) THEN
00276           ierrp (1) = id_err
00277           ierrp (2) = 4
00278           id_err = 13
00279 
00280           call psmile_error ( id_err, 'ila_smioc_recv', &
00281              ierrp, 2, __FILE__, __LINE__ )
00282           RETURN
00283       ENDIF
00284 
00285       CALL MPI_Recv (ila_smioc_recv, 4, MPI_Integer, &
00286                      PRISMdrv_root, 1, comm_trans, il_status, id_err)
00287 
00288       IF (id_err .ne. 0) &
00289          WRITE(il_chanel,*) 'WARNING: Pb in get_smioc_numbers'
00290 
00291       iga_comp_nb_unitsets(1) = ila_smioc_recv(1)
00292       iga_comp_nb_grids(1)    = ila_smioc_recv(2)
00293       iga_comp_nb_transi(1)   = ila_smioc_recv(3)
00294       iga_comp_nb_persis(1)   = ila_smioc_recv(4) 
00295 
00296 #ifdef DEBUG
00297       WRITE(il_chanel,*) '  Nb of Fortran unit sets ', &
00298          iga_comp_nb_unitsets(1)
00299       WRITE(il_chanel,*) '  Nb of grids       ', iga_comp_nb_grids(1)
00300       WRITE(il_chanel,*) '  Nb of transients  ', iga_comp_nb_transi(1)  
00301       WRITE(il_chanel,*) '  Nb of persistents ', iga_comp_nb_persis(1)
00302       WRITE(il_chanel,*) '   '
00303       call psmile_flushstd(il_chanel)
00304 #endif
00305 
00306       DEALLOCATE(ila_smioc_recv, stat=id_err)
00307       IF (id_err > 0) THEN
00308           ierrp (1) = id_err
00309           id_err = 14
00310           
00311           call psmile_error ( id_err, 'ila_smioc_recv', &
00312              ierrp, 1, __FILE__, __LINE__ )
00313           RETURN
00314       ENDIF
00315 
00316 !      END IF
00317 
00318   END IF
00319 
00320 #ifdef DEBUG
00321   WRITE(il_chanel,*) '   '
00322   WRITE(il_chanel,*) '  Got the dimensionning numbers'
00323   call psmile_flushstd(il_chanel)
00324 #endif
00325 
00326 ! 1.4 Allocate the global structures 
00327   ALLOCATE ( sga_smioc_comp(il_comp_id)%iga_smioc_unitsets (iga_comp_nb_unitsets(1), 3), stat=id_err )
00328   IF (id_err > 0) THEN
00329       ierrp (1) = id_err
00330       ierrp (2) = iga_comp_nb_unitsets(1)
00331       id_err = 13
00332 
00333       call psmile_error ( id_err, 'iga_smioc_unitsets', &
00334          ierrp, 2, __FILE__, __LINE__ )
00335       RETURN
00336   ENDIF
00337 
00338   ALLOCATE ( sga_smioc_comp(il_comp_id)%sga_smioc_grids (iga_comp_nb_grids(1)), stat=id_err )
00339   IF (id_err > 0) THEN
00340       ierrp (1) = id_err
00341       ierrp (2) = iga_comp_nb_grids(1)
00342       id_err = 13
00343 
00344       call psmile_error ( id_err, 'sga_smioc_grids', &
00345          ierrp, 2, __FILE__, __LINE__ )
00346       RETURN
00347   ENDIF
00348 
00349   ALLOCATE ( sga_smioc_comp(il_comp_id)%sga_smioc_transi (iga_comp_nb_transi(1)), stat=id_err )
00350   IF (id_err > 0) THEN
00351       ierrp (1) = id_err
00352       ierrp (2) = iga_comp_nb_transi(1)
00353       id_err = 13
00354 
00355       call psmile_error ( id_err, 'sga_smioc_transi', &
00356          ierrp, 2, __FILE__, __LINE__ )
00357       RETURN
00358   ENDIF
00359 
00360   ALLOCATE ( sga_smioc_comp(il_comp_id)%sga_smioc_persis (iga_comp_nb_persis(1)) , stat=id_err)
00361   IF (id_err > 0) THEN
00362       ierrp (1) = id_err
00363       ierrp (2) = iga_comp_nb_persis(1)
00364       id_err = 13
00365 
00366       call psmile_error ( id_err, 'sga_smioc_persis', &
00367          ierrp, 2, __FILE__, __LINE__ )
00368       RETURN
00369   ENDIF
00370 
00371   iga_smioc_unitsets => sga_smioc_comp(il_comp_id)%iga_smioc_unitsets
00372   sga_smioc_grids => sga_smioc_comp(il_comp_id)%sga_smioc_grids
00373   sga_smioc_transi => sga_smioc_comp(il_comp_id)%sga_smioc_transi
00374   sga_smioc_persis => sga_smioc_comp(il_comp_id)%sga_smioc_persis
00375 
00376 #ifdef DEBUG
00377   WRITE(il_chanel,*) '  '
00378   WRITE(il_chanel,*) '* Global structures allocated'
00379   call psmile_flushstd(il_chanel)
00380 #endif
00381 
00382 !
00383 !-----------------------------------------------------------------------
00384 !
00385 ! 2. Get the Fortran unit sets component per component
00386 !
00387 #ifdef DEBUG
00388   WRITE(il_chanel,*) '  '
00389   WRITE(il_chanel,*) '* Get the Fortran unit sets component per component'
00390 #endif
00391 
00392   IF (iga_comp_nb_unitsets(1) .gt. 0) THEN
00393 
00394 ! 2.2. get the Fortran unit sets information for the component
00395       IF (Appl%stand_alone) THEN
00396           CALL get_unitsets_details ( iga_comp_id_doc_XML(1),                          &
00397                                       iga_comp_nb_unitsets(1),                         &
00398                                       iga_smioc_unitsets(1:iga_comp_nb_unitsets(1),:), &
00399                                       id_err )
00400           IF (id_err .ne. 0) &
00401              WRITE(il_chanel,*) 'WARNING: Pb in get_unitsets_details'
00402 
00403       ELSE
00404 
00405           ALLOCATE(ila_smioc_recv(iga_comp_nb_unitsets(1)*3), stat=id_err)
00406           IF (id_err > 0) THEN
00407               ierrp (1) = id_err
00408               ierrp (2) = iga_comp_nb_unitsets(1)*3
00409               id_err = 13
00410 
00411               call psmile_error ( id_err, 'ila_smioc_recv', &
00412                  ierrp, 2, __FILE__, __LINE__ )
00413               RETURN
00414           ENDIF
00415 
00416           CALL MPI_Recv (ila_smioc_recv, iga_comp_nb_unitsets(1)*3, &
00417                          MPI_Integer, PRISMdrv_root, 2, comm_trans, &
00418                          il_status, id_err)
00419 
00420           IF (id_err .ne. 0) &
00421              WRITE(il_chanel,*) 'WARNING: Pb in get_unitsets_details'
00422 
00423           il_index = 1
00424           DO ib= 1, iga_comp_nb_unitsets(1)
00425 
00426             iga_smioc_unitsets(ib,1) = ila_smioc_recv(il_index)
00427             iga_smioc_unitsets(ib,2) = ila_smioc_recv(il_index+1)
00428             iga_smioc_unitsets(ib,3) = ila_smioc_recv(il_index+2)
00429 
00430             il_index = il_index + 3
00431 
00432           END DO
00433 
00434           DEALLOCATE(ila_smioc_recv, stat=id_err)
00435           IF (id_err > 0) THEN
00436               ierrp (1) = id_err
00437               id_err = 14
00438           
00439               call psmile_error ( id_err, 'ila_smioc_recv', &
00440                  ierrp, 1, __FILE__, __LINE__ )
00441               RETURN
00442           ENDIF
00443       END IF
00444   END IF
00445 
00446 #ifdef DEBUG
00447   WRITE(il_chanel,*) '  '
00448   WRITE(il_chanel,*) '  Got the Fortran unit sets component per component'
00449   call psmile_flushstd(il_chanel)
00450 #endif
00451 
00452 !
00453 !-----------------------------------------------------------------------
00454 !
00455 ! 3. Get the grids details component per component
00456 !
00457 #ifdef DEBUG
00458   WRITE(il_chanel,*) '  '
00459   WRITE(il_chanel,*) '* Get the grids details component per component'
00460 #endif
00461 
00462   IF (iga_comp_nb_grids(1) .gt. 0) THEN
00463 
00464       CALL init_grids (iga_comp_nb_grids(1), sga_smioc_grids, id_err )
00465       IF (id_err .ne. 0) WRITE(il_chanel,*) 'WARNING: Pb in init_grids'
00466 
00467       IF (Appl%stand_alone) THEN
00468 
00469           CALL get_grids_details ( iga_comp_id_doc_XML(1),                  &
00470                                    iga_comp_nb_grids(1),                    &
00471                                    sga_smioc_grids(1:iga_comp_nb_grids(1)), &
00472                                    id_err )
00473           IF (id_err .ne. 0) &
00474              WRITE(il_chanel,*) 'WARNING: Pb in get_grids_details'
00475 
00476           sga_smioc_grids(:)%ig_comp_id = 1
00477           DO ib = 1, iga_comp_nb_grids(1)
00478             sga_smioc_grids(ib)%ig_grid_id = ib
00479           ENDDO
00480 
00481       ELSE
00482 
00483           ALLOCATE(ila_smioc_recv(5*iga_comp_nb_grids(1)), stat=id_err)
00484           IF (id_err > 0) THEN
00485               ierrp (1) = id_err
00486               ierrp (2) = 3*iga_comp_nb_grids(1)
00487               id_err = 13
00488 
00489               call psmile_error ( id_err, 'ila_smioc_recv', &
00490                  ierrp, 2, __FILE__, __LINE__ )
00491               RETURN
00492           ENDIF
00493           ALLOCATE(cla_smioc_recv(iga_comp_nb_grids(1)), stat=id_err)
00494           IF (id_err > 0) THEN
00495               ierrp (1) = id_err
00496               ierrp (2) = iga_comp_nb_grids(1)
00497               id_err = 13
00498 
00499               call psmile_error ( id_err, 'cla_smioc_recv', &
00500                  ierrp, 2, __FILE__, __LINE__ )
00501               RETURN
00502           ENDIF
00503 
00504           CALL MPI_Recv (ila_smioc_recv, 5*iga_comp_nb_grids(1),    &
00505                          MPI_Integer, PRISMdrv_root, 3, comm_trans, &
00506                          il_status, id_err)
00507 
00508           CALL MPI_Recv (cla_smioc_recv, max_name*iga_comp_nb_grids(1), &
00509                          MPI_Character, PRISMdrv_root, 4, comm_trans,   &
00510                          il_status, id_err)
00511 
00512           IF (id_err .ne. 0) &
00513              WRITE(il_chanel,*) 'WARNING: Pb in get_grids_details'
00514 
00515           il_index = 1
00516           DO ib= 1, iga_comp_nb_grids(1)
00517 
00518             sga_smioc_grids(ib)%ig_grid_id = ila_smioc_recv(1 + (ib-1)*5)
00519             sga_smioc_grids(ib)%ig_comp_id = ila_smioc_recv(2 + (ib-1)*5) 
00520             DO ib_bis = 1, 3
00521               sga_smioc_grids(ib)%iga_periodic(ib_bis) = &
00522                 ila_smioc_recv(2 + ib_bis + (ib-1)*5)
00523             END DO
00524 
00525             sga_smioc_grids(ib)%cg_grid_name = cla_smioc_recv(ib)
00526 
00527           END DO
00528 
00529           DEALLOCATE(ila_smioc_recv, stat=id_err)
00530           IF (id_err > 0) THEN
00531               ierrp (1) = id_err
00532               id_err = 14
00533           
00534               call psmile_error ( id_err, 'ila_smioc_recv', &
00535                  ierrp, 1, __FILE__, __LINE__ )
00536               RETURN
00537           ENDIF
00538           DEALLOCATE(cla_smioc_recv, stat=id_err)
00539           IF (id_err > 0) THEN
00540             ierrp (1) = id_err
00541             id_err = 14
00542 
00543             call psmile_error ( id_err, 'cla_smioc_recv', &
00544                ierrp, 1, __FILE__, __LINE__ )
00545             RETURN
00546           ENDIF
00547       END IF
00548   END IF
00549 
00550 #ifdef DEBUG
00551   WRITE(il_chanel,*) '  '
00552   WRITE(il_chanel,*) '  Got the grids details component per component'
00553   call psmile_flushstd(il_chanel)
00554 #endif
00555 
00556 !
00557 !-----------------------------------------------------------------------
00558 !
00559 ! 4. Get the number of times the transient variables are sent and
00560 !    the number of time they are received to allocate the global structure
00561 !
00562 #ifdef DEBUG
00563   WRITE(il_chanel,*) '  '
00564   WRITE(il_chanel,*) '* Get the transient numbers '
00565 #endif
00566 
00567   IF (iga_comp_nb_transi(1) .gt. 0) THEN
00568 
00569 ! 4.1. Allocate the total count arrays 
00570 !      for numbers of standard names, inputs and outputs
00571       ALLOCATE (ila_comp_nb_stand_name(iga_comp_nb_transi(1)), stat=id_err)
00572       IF (id_err > 0) THEN
00573          ierrp (1) = id_err
00574          ierrp (2) = iga_comp_nb_transi(1)
00575          id_err = 13
00576 
00577          call psmile_error ( id_err, 'ila_comp_nb_stand_name', &
00578             ierrp, 2, __FILE__, __LINE__ )
00579          RETURN
00580       ENDIF
00581       ALLOCATE (ila_comp_nb_transi_in(iga_comp_nb_transi(1)), stat=id_err)
00582       IF (id_err > 0) THEN
00583          ierrp (1) = id_err
00584          ierrp (2) = iga_comp_nb_transi(1)
00585          id_err = 13
00586 
00587          call psmile_error ( id_err, 'ila_comp_nb_transi_in', &
00588             ierrp, 2, __FILE__, __LINE__ )
00589          RETURN
00590       ENDIF
00591       ALLOCATE (ila_comp_nb_transi_out(iga_comp_nb_transi(1)), stat=id_err)
00592       IF (id_err > 0) THEN
00593          ierrp (1) = id_err
00594          ierrp (2) = iga_comp_nb_transi(1)
00595          id_err = 13
00596 
00597          call psmile_error ( id_err, 'ila_comp_nb_transi_out', &
00598             ierrp, 2, __FILE__, __LINE__ )
00599          RETURN
00600       ENDIF
00601 
00602 ! 4.3.2. For all transients of the component, get the number of times they
00603 !        are sent and the number of time they are received
00604       IF (Appl%stand_alone) THEN
00605          il_compid = 1
00606          ll_first_details = .true.
00607          CALL get_transi_io_numbers ( iga_comp_id_doc_XML(1),    &
00608                                       iga_comp_nb_transi(1),     &
00609                                       ila_comp_nb_stand_name(:), &
00610                                       ila_comp_nb_transi_in(:),  &
00611                                       ila_comp_nb_transi_out(:), &
00612                                       il_compid,                 &
00613                                       ll_first_details,          &
00614                                       id_err )
00615          IF (id_err .ne. 0) &
00616             WRITE(il_chanel,*) 'WARNING: Pb in get_transi_io_numbers'
00617 
00618       ELSE
00619 
00620          ALLOCATE(ila_smioc_recv(3*iga_comp_nb_transi(1)), stat=id_err)
00621          IF (id_err > 0) THEN
00622             ierrp (1) = id_err
00623             ierrp (2) = 3*iga_comp_nb_transi(1)
00624             id_err = 13
00625 
00626             call psmile_error ( id_err, 'ila_smioc_recv', &
00627                ierrp, 2, __FILE__, __LINE__ )
00628             RETURN
00629          ENDIF
00630 
00631          CALL MPI_Recv (ila_smioc_recv, 3*iga_comp_nb_transi(1), &
00632                         MPI_Integer, PRISMdrv_root, 6, comm_trans, &
00633                         il_status, id_err)
00634 
00635          DO ib = 1, iga_comp_nb_transi(1)
00636 
00637             ila_comp_nb_stand_name(ib) = ila_smioc_recv(1 + (ib-1)*3)
00638             ila_comp_nb_transi_in(ib) = ila_smioc_recv(2 + (ib-1)*3)
00639             ila_comp_nb_transi_out(ib) = ila_smioc_recv(3 + (ib-1)*3)
00640 
00641          END DO
00642 
00643          DEALLOCATE(ila_smioc_recv, stat=id_err)
00644          IF (id_err > 0) THEN
00645             ierrp (1) = id_err
00646             id_err = 14
00647 
00648             call psmile_error ( id_err, 'ila_smioc_recv', &
00649                ierrp, 1, __FILE__, __LINE__ )
00650             RETURN
00651          ENDIF
00652       END IF
00653 
00654 ! 4.4. Allocate standard name, transient_out, and transient_in 
00655 !      in global transient structure
00656       DO ib_ntt = 1, iga_comp_nb_transi(1)
00657          IF (ila_comp_nb_transi_in(ib_ntt) .GT. 0) THEN
00658             ALLOCATE (sga_smioc_transi(ib_ntt)%sg_transi_in%sga_in_orig &
00659                       (ila_comp_nb_transi_in(ib_ntt)), stat=id_err)
00660             IF (id_err > 0) THEN
00661                ierrp (1) = id_err
00662                ierrp (2) = ila_comp_nb_transi_in(ib_ntt)
00663                id_err = 13
00664 
00665                call psmile_error ( id_err, 'sga_in_orig', &
00666                                    ierrp, 2, __FILE__, __LINE__ )
00667                RETURN
00668             ENDIF
00669          ELSE
00670             NULLIFY(sga_smioc_transi(ib_ntt)%sg_transi_in%sga_in_orig)
00671          ENDIF
00672          IF (ila_comp_nb_transi_out(ib_ntt) .GT. 0) THEN
00673             ALLOCATE (sga_smioc_transi(ib_ntt)%sga_transi_out &
00674                       (ila_comp_nb_transi_out(ib_ntt)), stat=id_err)
00675             IF (id_err > 0) THEN
00676                ierrp (1) = id_err
00677                ierrp (2) = ila_comp_nb_transi_out(ib_ntt)
00678                id_err = 13
00679 
00680                call psmile_error ( id_err, 'sga_transi_out', &
00681                   ierrp, 2, __FILE__, __LINE__ )
00682                RETURN
00683             ENDIF
00684          ELSE
00685             NULLIFY(sga_smioc_transi(ib_ntt)%sga_transi_out)
00686          ENDIF
00687          IF (ila_comp_nb_stand_name(ib_ntt) .GT. 0) THEN
00688             ALLOCATE (sga_smioc_transi(ib_ntt)%cga_stand_name &
00689                       (ila_comp_nb_stand_name(ib_ntt)), stat=id_err)
00690             IF (id_err > 0) THEN
00691                ierrp (1) = id_err
00692                ierrp (2) = ila_comp_nb_stand_name(ib_ntt)
00693                id_err = 13
00694 
00695                call psmile_error ( id_err, 'cga_stand_name', &
00696                   ierrp, 2, __FILE__, __LINE__ )
00697                RETURN
00698             ENDIF
00699          ELSE
00700             NULLIFY(sga_smioc_transi(ib_ntt)%cga_stand_name)
00701          ENDIF
00702       ENDDO
00703 
00704 ! 4.5. Initialize the global transient structure
00705       CALL init_transi (iga_comp_nb_transi(1),   &
00706                         ila_comp_nb_stand_name,  &
00707                         ila_comp_nb_transi_in,   &
00708                         ila_comp_nb_transi_out,  &
00709                         sga_smioc_transi,        &
00710                         id_err )
00711       IF (id_err .ne. 0) WRITE(il_chanel,*) 'WARNING: Pb in init_transi'
00712 
00713 ! 5. Get the transient details
00714       il_npartinid = 0
00715       il_npartoutid = 0
00716 
00717 ! 5.1. For each comp
00718 #ifdef DEBUG
00719       WRITE(il_chanel,*) '  Get the transient for ', trim(cda_comp_name)
00720       call psmile_flushstd(il_chanel)
00721 #endif
00722 
00723 ! 5.5. Get transient details for all transients of the component
00724 !
00725 ! 5.5.1 Get details for all transients with SASA
00726       IF (Appl%stand_alone) THEN
00727          il_compid = 1
00728          ll_userdef_details = .false.
00729          CALL get_transi_details (iga_comp_id_doc_XML(1), &
00730                                   iga_comp_nb_transi(1),  &
00731                                   sga_smioc_transi(:),    &
00732                                   il_compid,              &
00733                                   ll_userdef_details,     &
00734                                   id_err )
00735          IF (id_err .ne. 0) &
00736             WRITE(il_chanel,*) 'WARNING: Pb in get_transi_details'
00737 
00738 ! 5.5.2. Set the corresponding target or source component id 
00739          DO ib_ntt = 1, iga_comp_nb_transi(1)
00740             DO ib_ntt2 = 1, iga_comp_nb_transi(1)
00741                DO ib_nin = 1, sga_smioc_transi(ib_ntt)%sg_transi_in%ig_nb_in_orig
00742                   IF (sga_smioc_transi(ib_ntt)%sg_transi_in%sga_in_orig(ib_nin)% &
00743                      cg_orig_comp_name .EQ. &
00744                      sga_smioc_transi(ib_ntt2)%cg_comp_name) THEN
00745                      sga_smioc_transi(ib_ntt)%sg_transi_in%sga_in_orig(ib_nin)%&
00746                         ig_orig_comp_id = sga_smioc_transi(ib_ntt2)%ig_comp_id
00747                   ENDIF
00748                ENDDO
00749                DO ib_nout = 1, sga_smioc_transi(ib_ntt)%ig_nb_transi_out
00750                   IF (sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
00751                      cg_dest_comp_name .EQ. &
00752                      sga_smioc_transi(ib_ntt2)%cg_comp_name) THEN
00753                      sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
00754                         ig_dest_comp_id = sga_smioc_transi(ib_ntt2)%ig_comp_id
00755                   ENDIF
00756                ENDDO
00757             ENDDO
00758          ENDDO
00759 
00760 ! Define where the combination will take place
00761          DO ib_ntt2 = 1, iga_comp_nb_transi(1)
00762             il_combi = 1
00763             il_source = 1
00764             ll_combi = .false.
00765             ll_source = .false.
00766             DO ib_nin = 2, sga_smioc_transi(ib_ntt2)%sg_transi_in%ig_nb_in_orig
00767 ! Check if there is a combination for that transient_in
00768                IF (sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(ib_nin)% &
00769                   sg_combi%cg_combi_name .NE. '    ' .AND. &
00770                   sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(ib_nin)% &
00771                   sg_combi%cg_combi_name .EQ. sga_smioc_transi(ib_ntt2)% &
00772                   sg_transi_in%sga_in_orig(ib_nin-1)%sg_combi%cg_combi_name) &
00773                   il_combi = il_combi + 1
00774 ! Check if the transient implied in combination come from
00775 ! same source component
00776                IF (sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(ib_nin)% &
00777                   cg_orig_comp_name .EQ. sga_smioc_transi(ib_ntt2)%sg_transi_in% &
00778                   sga_in_orig(ib_nin-1)%cg_orig_comp_name) &
00779                   il_source = il_source + 1
00780             ENDDO
00781 ! If there is a combination, put ll_combi to true
00782             IF (sga_smioc_transi(ib_ntt2)%sg_transi_in%ig_nb_in_orig .GT. 1 .AND. &
00783                il_combi .EQ. sga_smioc_transi(ib_ntt2)%sg_transi_in%ig_nb_in_orig)&
00784                ll_combi = .TRUE.
00785 ! If the combination implies transients coming all from same source,
00786 ! put ll_source to true
00787             IF (sga_smioc_transi(ib_ntt2)%sg_transi_in%ig_nb_in_orig .GT. 1 .AND. &
00788                il_source .EQ. sga_smioc_transi(ib_ntt2)%sg_transi_in%ig_nb_in_orig) &
00789                ll_source = .TRUE.
00790             IF (ll_combi) THEN
00791                   IF (ll_source) THEN
00792                      sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(:)% &
00793                         sg_combi%ig_location = PSMILe_source
00794                   ELSE
00795                      sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(:)% &
00796                         sg_combi%ig_location = PSMILe_target
00797                   ENDIF
00798             ENDIF
00799          ENDDO
00800 
00801 ! Set transient out coupling restart files, interpolation, conservation
00802 !    and combination, and corresponding transient in or out id
00803          DO ib_ntt = 1, iga_comp_nb_transi(1)
00804             DO ib_nout = 1, sga_smioc_transi(ib_ntt)%ig_nb_transi_out
00805                DO ib_ntt2 = 1, iga_comp_nb_transi(1)
00806                   DO ib_nin = 1, sga_smioc_transi(ib_ntt2)%sg_transi_in%ig_nb_in_orig
00807                   IF (sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
00808                         cg_transi_out_name  &
00809                         .EQ. sga_smioc_transi(ib_ntt2)%sg_transi_in% &
00810                         sga_in_orig(ib_nin)%cg_orig_transi .AND. &
00811                         sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(ib_nin)% &
00812                         cg_transi_in_name &
00813                         .EQ. sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
00814                         cg_dest_transi) THEN
00815 ! Corresponding global ids
00816                      sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
00817                         ig_dest_transi_id = &
00818                         sga_smioc_transi(ib_ntt2)%sg_transi_in% &
00819                         sga_in_orig(ib_nin)%ig_transi_in_id
00820                      sga_smioc_transi(ib_ntt2)%sg_transi_in%sga_in_orig(ib_nin)% &
00821                         ig_orig_transi_id = &
00822                         sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
00823                         ig_transi_out_id
00824 ! Coupling restart file
00825                      sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
00826                         sg_cpl_rst_file = &
00827                         sga_smioc_transi(ib_ntt2)%sg_transi_in% &
00828                         sga_in_orig(ib_nin)%sg_cpl_rst_file
00829 ! Interpolation
00830                      IF (sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
00831                            ig_dest_type .EQ. PSMILe_comp) &
00832                         sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
00833                         sg_interp = &
00834                         sga_smioc_transi(ib_ntt2)%sg_transi_in% &
00835                         sga_in_orig(ib_nin)%sg_interp
00836 ! Conservation
00837                      sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
00838                         ig_conserv = &
00839                         sga_smioc_transi(ib_ntt2)%sg_transi_in% &
00840                         sga_in_orig(ib_nin)%ig_conserv
00841 ! Combination
00842                      IF (sga_smioc_transi(ib_ntt2)%sg_transi_in% &
00843                         sga_in_orig(ib_nin)%sg_combi%ig_location &
00844                         == PSMILe_source) &
00845                         sga_smioc_transi(ib_ntt)%sga_transi_out(ib_nout)% &
00846                         sg_combi = &
00847                         sga_smioc_transi(ib_ntt2)%sg_transi_in% &
00848                         sga_in_orig(ib_nin)%sg_combi
00849                      ENDIF
00850                   ENDDO
00851                ENDDO
00852             ENDDO
00853          ENDDO
00854 
00855       ELSE !(Appl%stand_alone)
00856 
00857          il_nb_int_i_fix = 27
00858          il_nb_int_i_in  = 54
00859          il_nb_int_i_out = 82
00860 
00861          il_smioc_recv_size_i = 0
00862          DO ib = 1, iga_comp_nb_transi(1)
00863             il_smioc_recv_size_i = il_smioc_recv_size_i       &
00864                + il_nb_int_i_fix                              &
00865                + il_nb_int_i_in * ila_comp_nb_transi_in(ib)   &
00866                + il_nb_int_i_out * ila_comp_nb_transi_out(ib)
00867          END DO
00868 
00869          il_nb_int_d_fix = 6
00870          il_nb_int_d_in  = 15
00871          il_nb_int_d_out = 19
00872 
00873          il_smioc_recv_size_d = 0
00874          DO ib = 1, iga_comp_nb_transi(1)
00875             il_smioc_recv_size_d = il_smioc_recv_size_d       &
00876                + il_nb_int_d_fix                              &
00877                + il_nb_int_d_in * ila_comp_nb_transi_in(ib)   &
00878                + il_nb_int_d_out * ila_comp_nb_transi_out(ib)
00879          END DO
00880 
00881          il_nb_int_c_fix = 4
00882          il_nb_int_c_in  = 10
00883          il_nb_int_c_out = 9
00884 
00885          il_smioc_recv_size_c = 0
00886          DO ib = 1, iga_comp_nb_transi(1)
00887             il_smioc_recv_size_c = il_smioc_recv_size_c       &
00888                + il_nb_int_c_fix                              &
00889                + ila_comp_nb_stand_name(ib)                   &
00890                + il_nb_int_c_in * ila_comp_nb_transi_in(ib)   &
00891                + il_nb_int_c_out * ila_comp_nb_transi_out(ib)
00892          END DO
00893 
00894          ALLOCATE(ila_smioc_recv(il_smioc_recv_size_i), stat=id_err)
00895          IF (id_err > 0) THEN
00896             ierrp (1) = id_err
00897             ierrp (2) = il_smioc_recv_size_i
00898             id_err = 13
00899 
00900             call psmile_error ( id_err, 'ila_smioc_recv', &
00901                ierrp, 2, __FILE__, __LINE__ )
00902             RETURN
00903          ENDIF
00904          ALLOCATE(cla_smioc_recv(il_smioc_recv_size_c), stat=id_err)
00905          IF (id_err > 0) THEN
00906             ierrp (1) = id_err
00907             ierrp (2) = il_smioc_recv_size_c
00908             id_err = 13
00909 
00910             call psmile_error ( id_err, 'cla_smioc_recv', &
00911                ierrp, 2, __FILE__, __LINE__ )
00912             RETURN
00913          ENDIF
00914          ALLOCATE(dla_smioc_recv(il_smioc_recv_size_d), stat=id_err)
00915          IF (id_err > 0) THEN
00916             ierrp (1) = id_err
00917             ierrp (2) = il_smioc_recv_size_d
00918             id_err = 13
00919 
00920             call psmile_error ( id_err, 'dla_smioc_recv', &
00921                ierrp, 2, __FILE__, __LINE__ )
00922             RETURN
00923          ENDIF
00924 
00925          CALL MPI_Recv (ila_smioc_recv, il_smioc_recv_size_i,         &
00926             MPI_Integer, PRISMdrv_root, 7, comm_trans, il_status, id_err )
00927 
00928          CALL MPI_Recv (cla_smioc_recv, il_smioc_recv_size_c*max_name,  &
00929             MPI_Character, PRISMdrv_root, 8, comm_trans, il_status, id_err )
00930 
00931          CALL MPI_Recv (dla_smioc_recv, il_smioc_recv_size_d,                  &
00932             MPI_Double_Precision, PRISMdrv_root, 9, comm_trans, il_status, id_err )
00933 
00934 ! Set the transient structure for the component
00935          il_index_i = 0
00936          il_index_c = 0
00937          il_index_d = 0
00938 
00939          DO ib = 1, iga_comp_nb_transi(1)
00940 
00941 ! transient infos
00942             sga_smioc_transi(ib)%ig_nb_stand_name = ila_smioc_recv(1 + il_index_i)
00943             sga_smioc_transi(ib)%ig_comp_id = ila_smioc_recv(2 + il_index_i)
00944             sga_smioc_transi(ib)%ig_transi_id = ila_smioc_recv(3 + il_index_i)
00945             sga_smioc_transi(ib)%ig_transi_type = ila_smioc_recv(4 + il_index_i)
00946             sga_smioc_transi(ib)%ig_nb_bndl = ila_smioc_recv(5 + il_index_i)
00947             sga_smioc_transi(ib)%ig_datatype = ila_smioc_recv(6 + il_index_i)
00948             sga_smioc_transi(ib)%ig_nb_transi_out = ila_smioc_recv(7 + il_index_i)
00949 
00950 ! transient_in infos
00951             sga_smioc_transi(ib)%sg_transi_in%ig_nb_in_orig = &
00952                ila_smioc_recv(8 + il_index_i)
00953             sga_smioc_transi(ib)%sg_transi_in%ig_exch_date_type = &
00954                ila_smioc_recv(9 + il_index_i)
00955             sga_smioc_transi(ib)%sg_transi_in%ig_debugmode = &
00956                ila_smioc_recv(10 + il_index_i)
00957             sga_smioc_transi(ib)%sg_transi_in%ig_tgt_timeop = &
00958                ila_smioc_recv(11 + il_index_i)
00959 
00960             DO ib_ter = 1, 3
00961                sga_smioc_transi(ib)%sg_transi_in%iga_stats(ib_ter) = &
00962                   ila_smioc_recv(11 + ib_ter + il_index_i)
00963             END DO
00964 
00965 ! min period infos
00966             sga_smioc_transi(ib)%sg_transi_in%sg_min_period%minute = &
00967                ila_smioc_recv(17 + il_index_i)
00968             sga_smioc_transi(ib)%sg_transi_in%sg_min_period%hour = &
00969                ila_smioc_recv(18 + il_index_i)
00970             sga_smioc_transi(ib)%sg_transi_in%sg_min_period%day = &
00971                ila_smioc_recv(19 + il_index_i)
00972             sga_smioc_transi(ib)%sg_transi_in%sg_min_period%month = &
00973                ila_smioc_recv(20 + il_index_i)
00974             sga_smioc_transi(ib)%sg_transi_in%sg_min_period%year = &
00975                ila_smioc_recv(21 + il_index_i)
00976 
00977 ! tgt local trans
00978             sga_smioc_transi(ib)%sg_transi_in%sg_tgt_local_trans%ig_gather = &
00979                ila_smioc_recv(22 + il_index_i)
00980 
00981 ! PSMILe exch date
00982             sga_smioc_transi(ib)%sg_transi_in%sg_exch_date%sg_period%minute = &
00983                ila_smioc_recv(23 + il_index_i)
00984             sga_smioc_transi(ib)%sg_transi_in%sg_exch_date%sg_period%hour = &
00985                ila_smioc_recv(24 + il_index_i)
00986             sga_smioc_transi(ib)%sg_transi_in%sg_exch_date%sg_period%day = &
00987                ila_smioc_recv(25 + il_index_i)
00988             sga_smioc_transi(ib)%sg_transi_in%sg_exch_date%sg_period%month = &
00989                ila_smioc_recv(26 + il_index_i)
00990             sga_smioc_transi(ib)%sg_transi_in%sg_exch_date%sg_period%year = &
00991                ila_smioc_recv(27 + il_index_i)
00992 
00993             il_index_i = il_index_i + 27
00994 
00995             DO ib_bis = 1, ila_comp_nb_transi_in(ib)
00996 
00997 ! transi_in infos
00998                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
00999                   ig_transi_in_id = ila_smioc_recv(1 + il_index_i)
01000                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01001                   ig_orig_type = ila_smioc_recv(2 + il_index_i)
01002                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01003                   ig_orig_transi_id = ila_smioc_recv(3 + il_index_i)
01004                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01005                   ig_orig_comp_id = ila_smioc_recv(4 + il_index_i)
01006                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01007                   ig_conserv = ila_smioc_recv(5 + il_index_i)
01008 
01009 ! PSMILe_file_struct
01010                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01011                   sg_orig_file%ig_suffix = ila_smioc_recv(6 + il_index_i)
01012                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01013                   sg_orig_file%ig_file_format = ila_smioc_recv(7 + il_index_i)
01014                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01015                   sg_orig_file%ig_file_set = ila_smioc_recv(8 + il_index_i)
01016                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01017                   sg_orig_file%ig_file_iomode = ila_smioc_recv(9 + il_index_i)
01018                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01019                   sg_orig_file%ig_file_pack = ila_smioc_recv(10 + il_index_i)
01020 
01021 ! PSMILe_file_struct
01022                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01023                   sg_cpl_rst_file%ig_suffix = ila_smioc_recv(11 + il_index_i)
01024                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01025                   sg_cpl_rst_file%ig_file_format = ila_smioc_recv(12 + il_index_i)
01026                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01027                   sg_cpl_rst_file%ig_file_set = ila_smioc_recv(13 + il_index_i)
01028                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01029                   sg_cpl_rst_file%ig_file_iomode = ila_smioc_recv(14 + il_index_i)
01030                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01031                   sg_cpl_rst_file%ig_file_pack = ila_smioc_recv(15 + il_index_i)
01032 
01033 ! PSMILe_interp
01034                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01035                   sg_interp%ig_interp_type = ila_smioc_recv(16 + il_index_i)
01036                DO ib_ter = 1, 3
01037                   sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01038                      sg_interp%iga_interp_meth(ib_ter) = &
01039                      ila_smioc_recv(16 + ib_ter + il_index_i)
01040                   sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01041                      sg_interp%iga_arg1(ib_ter) = &
01042                      ila_smioc_recv(19 + ib_ter + il_index_i)
01043                   sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01044                      sg_interp%iga_arg2(ib_ter) = &
01045                      ila_smioc_recv(22 + ib_ter + il_index_i)
01046                   sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01047                      sg_interp%iga_arg3(ib_ter) = &
01048                      ila_smioc_recv(25 + ib_ter + il_index_i)
01049                   sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01050                      sg_interp%iga_arg4(ib_ter) = &
01051                      ila_smioc_recv(28 + ib_ter + il_index_i)
01052                   sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01053                      sg_interp%iga_arg5(ib_ter) = &
01054                      ila_smioc_recv(31 + ib_ter + il_index_i)
01055                   sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01056                      sg_interp%iga_arg6(ib_ter) = &
01057                      ila_smioc_recv(34 + ib_ter + il_index_i)
01058                   sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01059                      sg_interp%iga_arg7(ib_ter) = &
01060                      ila_smioc_recv(37 + ib_ter + il_index_i)
01061                END DO
01062 
01063 ! PSMILe_file_struct
01064                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01065                   sg_interp%sg_arg10%ig_suffix = ila_smioc_recv(41 + il_index_i)
01066                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01067                   sg_interp%sg_arg10%ig_file_format = ila_smioc_recv(42 + il_index_i)
01068                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01069                   sg_interp%sg_arg10%ig_file_set = ila_smioc_recv(43 + il_index_i)
01070                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01071                   sg_interp%sg_arg10%ig_file_iomode = &
01072                   ila_smioc_recv(44 + il_index_i)
01073                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01074                   sg_interp%sg_arg10%ig_file_pack = ila_smioc_recv(45 + il_index_i)
01075 
01076 ! PSMILe_combi_struct
01077                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01078                   sg_combi%sg_ext_mask_file%ig_suffix = &
01079                   ila_smioc_recv(46 + il_index_i)
01080                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01081                   sg_combi%sg_ext_mask_file%ig_file_format = &
01082                   ila_smioc_recv(47 + il_index_i)
01083                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01084                   sg_combi%sg_ext_mask_file%ig_file_set = &
01085                   ila_smioc_recv(48 + il_index_i)
01086                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01087                   sg_combi%sg_ext_mask_file%ig_file_iomode = &
01088                   ila_smioc_recv(49 + il_index_i)
01089                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01090                   sg_combi%sg_ext_mask_file%ig_file_pack = &
01091                   ila_smioc_recv(50 + il_index_i)
01092                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01093                   sg_combi%ig_location = ila_smioc_recv(51 + il_index_i)
01094                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01095                   sg_combi%ig_operand = ila_smioc_recv(52 + il_index_i)
01096                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01097                   sg_combi%ig_mask_type = ila_smioc_recv(53 + il_index_i)
01098                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01099                   sg_combi%ig_combi_meth = ila_smioc_recv(54 + il_index_i)
01100 
01101                il_index_i = il_index_i + 54
01102 
01103             END DO
01104 
01105             DO ib_bis = 1, ila_comp_nb_transi_out(ib)
01106 
01107 ! transi_out infos
01108                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01109                   ig_transi_out_id = ila_smioc_recv(1 + il_index_i)
01110                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01111                   ig_dest_type = ila_smioc_recv(2 + il_index_i)
01112                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01113                   ig_dest_transi_id = ila_smioc_recv(3 + il_index_i)
01114                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01115                   ig_dest_comp_id = ila_smioc_recv(4 + il_index_i)
01116                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01117                   ig_exch_date_type = ila_smioc_recv(5 + il_index_i)
01118                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01119                   ig_debugmode = ila_smioc_recv(6 + il_index_i)
01120                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01121                   ig_lag = ila_smioc_recv(7 + il_index_i)
01122                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01123                   ig_src_timeop = ila_smioc_recv(8 + il_index_i)
01124                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01125                   ig_conserv = ila_smioc_recv(9 + il_index_i)
01126                DO ib_ter = 1, 3
01127                   sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01128                      iga_stats(ib_ter) = ila_smioc_recv(9 + ib_ter + il_index_i)
01129                END DO
01130 
01131 ! PSMILe_file_struct
01132                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01133                   sg_dest_file%ig_suffix = ila_smioc_recv(15 + il_index_i)
01134                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01135                   sg_dest_file%ig_file_format = ila_smioc_recv(16 + il_index_i)
01136                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01137                   sg_dest_file%ig_file_set = ila_smioc_recv(17 + il_index_i)
01138                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01139                   sg_dest_file%ig_file_iomode = ila_smioc_recv(18 + il_index_i)
01140                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01141                   sg_dest_file%ig_file_pack = ila_smioc_recv(19 + il_index_i)
01142 
01143 ! PSMILe_file_struct
01144                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01145                   sg_cpl_rst_file%ig_suffix = ila_smioc_recv(20 + il_index_i)
01146                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01147                   sg_cpl_rst_file%ig_file_format = ila_smioc_recv(21 + il_index_i)
01148                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01149                   sg_cpl_rst_file%ig_file_set = ila_smioc_recv(22 + il_index_i)
01150                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01151                   sg_cpl_rst_file%ig_file_iomode = ila_smioc_recv(23 + il_index_i)
01152                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01153                   sg_cpl_rst_file%ig_file_pack = ila_smioc_recv(24 + il_index_i)
01154 
01155 ! PRISM_time_struct
01156                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01157                   sg_min_period%minute = ila_smioc_recv(25 + il_index_i)
01158                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01159                   sg_min_period%hour = ila_smioc_recv(26 + il_index_i)
01160                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01161                   sg_min_period%day = ila_smioc_recv(27 + il_index_i)
01162                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01163                   sg_min_period%month = ila_smioc_recv(28 + il_index_i)
01164                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01165                   sg_min_period%year = ila_smioc_recv(29 + il_index_i)
01166 
01167 ! PSMILe_exch_date
01168                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01169                   sg_exch_date%sg_period%minute = ila_smioc_recv(30 + il_index_i)
01170                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01171                   sg_exch_date%sg_period%hour = ila_smioc_recv(31 + il_index_i)
01172                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01173                   sg_exch_date%sg_period%day = ila_smioc_recv(32 + il_index_i)
01174                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01175                   sg_exch_date%sg_period%month = ila_smioc_recv(33 + il_index_i)
01176                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01177                   sg_exch_date%sg_period%year = ila_smioc_recv(34 + il_index_i)
01178 
01179 ! PSMILe_src_local_trans
01180                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01181                   sg_src_local_trans%ig_scatter = ila_smioc_recv(35 + il_index_i)
01182                DO ib_ter = 1, 4
01183                   sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01184                      sg_src_local_trans%ig_reduc_type(ib_ter) =           &
01185                      ila_smioc_recv(35 + ib_ter + il_index_i)
01186                   sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01187                      sg_src_local_trans%ig_reduc_order(ib_ter) =          &
01188                      ila_smioc_recv(39 + ib_ter + il_index_i)
01189                END DO
01190 
01191 ! PSMILe_interp
01192                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01193                   sg_interp%ig_interp_type = ila_smioc_recv(44 + il_index_i)
01194                DO ib_ter = 1, 3
01195                   sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01196                      sg_interp%iga_interp_meth(ib_ter) = &
01197                      ila_smioc_recv(44 + ib_ter + il_index_i)
01198                   sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01199                      sg_interp%iga_arg1(ib_ter) = &
01200                      ila_smioc_recv(47 + ib_ter + il_index_i)
01201                   sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01202                      sg_interp%iga_arg2(ib_ter) = &
01203                      ila_smioc_recv(50 + ib_ter + il_index_i)
01204                   sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01205                      sg_interp%iga_arg3(ib_ter) = &
01206                      ila_smioc_recv(53 + ib_ter + il_index_i)
01207                   sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01208                      sg_interp%iga_arg4(ib_ter) = &
01209                      ila_smioc_recv(56 + ib_ter + il_index_i)
01210                   sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01211                      sg_interp%iga_arg5(ib_ter) = &
01212                      ila_smioc_recv(59 + ib_ter + il_index_i)
01213                   sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01214                      sg_interp%iga_arg6(ib_ter) = &
01215                      ila_smioc_recv(62 + ib_ter + il_index_i)
01216                   sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01217                      sg_interp%iga_arg7(ib_ter) = &
01218                      ila_smioc_recv(65 + ib_ter + il_index_i)
01219                END DO
01220 
01221 ! PSMILe_file_struct
01222                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01223                   sg_interp%sg_arg10%ig_suffix = ila_smioc_recv(69 + il_index_i)
01224                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01225                   sg_interp%sg_arg10%ig_file_format = ila_smioc_recv(70 + il_index_i)
01226                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01227                   sg_interp%sg_arg10%ig_file_set = ila_smioc_recv(71 + il_index_i)
01228                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01229                   sg_interp%sg_arg10%ig_file_iomode = &
01230                   ila_smioc_recv(72 + il_index_i)
01231                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01232                   sg_interp%sg_arg10%ig_file_pack = ila_smioc_recv(73 + il_index_i)
01233 
01234 ! PSMILe_combi_struct
01235                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01236                   sg_combi%sg_ext_mask_file%ig_suffix = &
01237                   ila_smioc_recv(74 + il_index_i)
01238                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01239                   sg_combi%sg_ext_mask_file%ig_file_format = &
01240                   ila_smioc_recv(75 + il_index_i)
01241                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01242                   sg_combi%sg_ext_mask_file%ig_file_set = &
01243                   ila_smioc_recv(76 + il_index_i)
01244                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01245                   sg_combi%sg_ext_mask_file%ig_file_iomode = &
01246                   ila_smioc_recv(77 + il_index_i)
01247                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01248                   sg_combi%sg_ext_mask_file%ig_file_pack = &
01249                   ila_smioc_recv(78 + il_index_i)
01250                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01251                   sg_combi%ig_location = ila_smioc_recv(79 + il_index_i)
01252                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01253                   sg_combi%ig_operand = ila_smioc_recv(80 + il_index_i)
01254                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01255                   sg_combi%ig_mask_type = ila_smioc_recv(81 + il_index_i)
01256                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%            &
01257                   sg_combi%ig_combi_meth = ila_smioc_recv(82 + il_index_i)
01258 
01259                il_index_i = il_index_i + 82
01260 
01261             END DO
01262 
01263             sga_smioc_transi(ib)%cg_local_name = cla_smioc_recv(1 + il_index_c)
01264             sga_smioc_transi(ib)%cg_long_name = cla_smioc_recv(2 + il_index_c)
01265             sga_smioc_transi(ib)%cg_comp_name = cla_smioc_recv(3 + il_index_c)
01266             sga_smioc_transi(ib)%cg_units = cla_smioc_recv(4 + il_index_c)
01267             il_index_c = il_index_c + 4
01268 
01269             DO ib_bis = 1, ila_comp_nb_stand_name(ib)
01270 
01271                sga_smioc_transi(ib)%cga_stand_name(ib_bis) = &
01272                   cla_smioc_recv(1 + il_index_c)
01273 
01274                il_index_c = il_index_c + 1
01275 
01276             END DO
01277 
01278             DO ib_bis = 1, ila_comp_nb_transi_in(ib)
01279 
01280                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01281                   cg_transi_in_name = cla_smioc_recv(1 + il_index_c)
01282                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01283                   cg_orig_transi = cla_smioc_recv(2 + il_index_c)
01284                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01285                   cg_orig_comp_name = cla_smioc_recv(3 + il_index_c)
01286                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01287                   sg_orig_file%cg_file_name = cla_smioc_recv(4 + il_index_c)
01288                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01289                   sg_cpl_rst_file%cg_file_name = cla_smioc_recv(5 + il_index_c)
01290                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01291                   sg_interp%cg_arg9 = cla_smioc_recv(6 + il_index_c)
01292                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01293                   sg_interp%sg_arg10%cg_file_name = cla_smioc_recv(7 + il_index_c)
01294                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01295                   sg_combi%cg_combi_name = cla_smioc_recv(8 + il_index_c)
01296                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01297                   sg_combi%cg_ext_mask_name = cla_smioc_recv(9 + il_index_c)
01298                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01299                   sg_combi%sg_ext_mask_file%cg_file_name = &
01300                   cla_smioc_recv(10 + il_index_c)
01301 
01302                il_index_c = il_index_c + 10
01303 
01304             END DO
01305 
01306             DO ib_bis = 1, ila_comp_nb_transi_out(ib)
01307 
01308                sga_smioc_transi(ib)%sga_transi_out(ib_bis)% &
01309                   cg_transi_out_name = cla_smioc_recv(1 + il_index_c)
01310                sga_smioc_transi(ib)%sga_transi_out(ib_bis)% &
01311                   cg_dest_transi = cla_smioc_recv(2 + il_index_c)
01312                sga_smioc_transi(ib)%sga_transi_out(ib_bis)% &
01313                   cg_dest_comp_name = cla_smioc_recv(3 + il_index_c)
01314                sga_smioc_transi(ib)%sga_transi_out(ib_bis)% &
01315                   sg_dest_file%cg_file_name = cla_smioc_recv(4 + il_index_c)
01316                sga_smioc_transi(ib)%sga_transi_out(ib_bis)% &
01317                   sg_cpl_rst_file%cg_file_name = cla_smioc_recv(5 + il_index_c)
01318                sga_smioc_transi(ib)%sga_transi_out(ib_bis)% &
01319                   sg_interp%cg_arg9 = cla_smioc_recv(6 + il_index_c)
01320                sga_smioc_transi(ib)%sga_transi_out(ib_bis)% &
01321                   sg_interp%sg_arg10%cg_file_name = cla_smioc_recv(7 + il_index_c)
01322                sga_smioc_transi(ib)%sga_transi_out(ib_bis)% &
01323                   sg_combi%cg_ext_mask_name = cla_smioc_recv(8 + il_index_c)
01324                sga_smioc_transi(ib)%sga_transi_out(ib_bis)% &
01325                   sg_combi%sg_ext_mask_file%cg_file_name = &
01326                   cla_smioc_recv(9 + il_index_c)
01327 
01328                il_index_c = il_index_c + 9
01329 
01330             END DO
01331 
01332             sga_smioc_transi(ib)%dg_transi_min = dla_smioc_recv(1 + il_index_d)
01333             sga_smioc_transi(ib)%dg_transi_max = dla_smioc_recv(2 + il_index_d)
01334             sga_smioc_transi(ib)%sg_transi_in%sg_min_period%second = &
01335                dla_smioc_recv(3 + il_index_d)
01336             sga_smioc_transi(ib)%sg_transi_in%sg_tgt_local_trans%dg_add_scalar = &
01337                dla_smioc_recv(4 + il_index_d)
01338             sga_smioc_transi(ib)%sg_transi_in%sg_tgt_local_trans%dg_mult_scalar = &
01339                dla_smioc_recv(5 + il_index_d)
01340             sga_smioc_transi(ib)%sg_transi_in%sg_exch_date%sg_period%second = &
01341                dla_smioc_recv(6 + il_index_d)
01342 
01343             il_index_d = il_index_d + 6
01344 
01345             DO ib_bis = 1, ila_comp_nb_transi_in(ib)
01346 
01347                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01348                   sg_orig_file%dg_file_scal = dla_smioc_recv(1 + il_index_d)
01349                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01350                   sg_orig_file%dg_file_add = dla_smioc_recv(2 + il_index_d)
01351                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01352                   sg_orig_file%dg_fill_val = dla_smioc_recv(3 + il_index_d)
01353                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01354                   sg_cpl_rst_file%dg_file_scal = dla_smioc_recv(4 + il_index_d)
01355                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01356                   sg_cpl_rst_file%dg_file_add = dla_smioc_recv(5 + il_index_d)
01357                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01358                   sg_cpl_rst_file%dg_file_scal = dla_smioc_recv(6 + il_index_d)
01359                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01360                   sg_interp%dg_arg8 = dla_smioc_recv(7 + il_index_d)
01361                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01362                   sg_interp%sg_arg10%dg_file_scal = dla_smioc_recv(8 + il_index_d)
01363                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01364                   sg_interp%sg_arg10%dg_file_add = dla_smioc_recv(9 + il_index_d)
01365                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01366                   sg_interp%sg_arg10%dg_fill_val = dla_smioc_recv(10 + il_index_d)
01367                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01368                   sg_combi%sg_ext_mask_file%dg_file_scal = &
01369                   dla_smioc_recv(11 + il_index_d)
01370                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01371                   sg_combi%sg_ext_mask_file%dg_file_add = &
01372                   dla_smioc_recv(12 + il_index_d)
01373                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01374                   sg_combi%sg_ext_mask_file%dg_fill_val = &
01375                   dla_smioc_recv(13 + il_index_d)
01376                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01377                   sg_combi%dg_combi_param = dla_smioc_recv(14 + il_index_d)
01378                sga_smioc_transi(ib)%sg_transi_in%sga_in_orig(ib_bis)% &
01379                   sg_combi%dg_scalar = dla_smioc_recv(15 + il_index_d)
01380 
01381                il_index_d = il_index_d + 15
01382 
01383             END DO
01384 
01385             DO ib_bis = 1, ila_comp_nb_transi_out(ib)
01386 
01387                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_dest_file% &
01388                   dg_file_scal = dla_smioc_recv(1 + il_index_d)
01389                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_dest_file% &
01390                   dg_file_add = dla_smioc_recv(2 + il_index_d)
01391                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_dest_file% &
01392                   dg_fill_val = dla_smioc_recv(3 + il_index_d)
01393                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_cpl_rst_file% &
01394                   dg_file_scal = dla_smioc_recv(4 + il_index_d)
01395                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_cpl_rst_file% &
01396                   dg_file_add = dla_smioc_recv(5 + il_index_d)
01397                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_cpl_rst_file% &
01398                   dg_fill_val = dla_smioc_recv(6 + il_index_d)
01399                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_min_period%second = &
01400                   dla_smioc_recv(7 + il_index_d)
01401                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_exch_date% &
01402                   sg_period%second = dla_smioc_recv(8 + il_index_d)
01403                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_src_local_trans% &
01404                   dg_add_scalar = dla_smioc_recv(9 + il_index_d)
01405                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_src_local_trans% &
01406                   dg_mult_scalar = dla_smioc_recv(10 + il_index_d)
01407                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_interp%dg_arg8 = &
01408                   dla_smioc_recv(11 + il_index_d)
01409                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_interp% &
01410                   sg_arg10%dg_file_scal = dla_smioc_recv(12 + il_index_d)
01411                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_interp% &
01412                   sg_arg10%dg_file_add = dla_smioc_recv(13 + il_index_d)
01413                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_interp% &
01414                   sg_arg10%dg_fill_val = dla_smioc_recv(14 + il_index_d)
01415                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_combi% &
01416                   sg_ext_mask_file%dg_file_scal = dla_smioc_recv(15 + il_index_d)
01417                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_combi% &
01418                   sg_ext_mask_file%dg_file_add = dla_smioc_recv(16 + il_index_d)
01419                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_combi% &
01420                   sg_ext_mask_file%dg_fill_val = dla_smioc_recv(17 + il_index_d)
01421                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_combi% &
01422                   dg_combi_param = dla_smioc_recv(17 + il_index_d)
01423                sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_combi% &
01424                   dg_scalar = dla_smioc_recv(17 + il_index_d)
01425 
01426                il_index_d = il_index_d + 19
01427             END DO
01428          END DO
01429 
01430          DEALLOCATE(ila_smioc_recv, stat=id_err)
01431          IF (id_err > 0) THEN
01432             ierrp (1) = id_err
01433             id_err = 14
01434 
01435             call psmile_error ( id_err, 'ila_smioc_recv', &
01436                ierrp, 1, __FILE__, __LINE__ )
01437             RETURN
01438          ENDIF
01439          DEALLOCATE(cla_smioc_recv, stat=id_err)
01440          IF (id_err > 0) THEN
01441             ierrp (1) = id_err
01442             id_err = 14
01443 
01444             call psmile_error ( id_err, 'cla_smioc_recv', &
01445                ierrp, 1, __FILE__, __LINE__ )
01446             RETURN
01447          ENDIF
01448          DEALLOCATE(dla_smioc_recv, stat=id_err)
01449          IF (id_err > 0) THEN
01450             ierrp (1) = id_err
01451             id_err = 14
01452 
01453             call psmile_error ( id_err, 'dla_smioc_recv', &
01454                ierrp, 1, __FILE__, __LINE__ )
01455             RETURN
01456          ENDIF
01457 
01458 ! Recv the information to set the post-attributed ids
01459 
01460          CALL MPI_Recv (ila_dim_size, 7, MPI_Integer, PRISMdrv_root, 11, &
01461             comm_trans, il_status, id_err)
01462 
01463 ! the origin comp id
01464          IF (ila_dim_size(1) .gt. 0) THEN
01465 
01466             ALLOCATE(ila_orig_comp_id(ila_dim_size(1),3), stat = id_err)
01467             IF (id_err > 0) THEN
01468                ierrp (1) = id_err
01469                ierrp (2) = ila_dim_size(1)*3
01470                id_err = 13
01471 
01472                call psmile_error ( id_err, 'ila_orig_comp_id', &
01473                   ierrp, 2, __FILE__, __LINE__ )
01474                RETURN
01475             ENDIF
01476 
01477             CALL MPI_Recv (ila_orig_comp_id, ila_dim_size(1)*3, MPI_Integer, &
01478                PRISMdrv_root, 12, comm_trans, il_status, id_err)
01479 
01480             DO ib = 1, ila_dim_size(1)
01481                DO ib_transi = 1, iga_comp_nb_transi(1)
01482                   IF (sga_smioc_transi(ib_transi)%ig_transi_id == &
01483                       ila_orig_comp_id(ib,1)) THEN
01484                      sga_smioc_transi(ib_transi)%sg_transi_in%                &
01485                         sga_in_orig(ila_orig_comp_id(ib,2))%ig_orig_comp_id = &
01486                         ila_orig_comp_id(ib,3)
01487                      EXIT
01488                   END IF
01489                END DO
01490             END DO
01491 
01492             DEALLOCATE(ila_orig_comp_id, stat=id_err)
01493             IF (id_err > 0) THEN
01494                ierrp (1) = id_err
01495                id_err = 14
01496 
01497                call psmile_error ( id_err, 'ila_orig_comp_id', &
01498                   ierrp, 1, __FILE__, __LINE__ )
01499                RETURN
01500             ENDIF
01501 
01502          END IF
01503 
01504 ! the dest comp id
01505          IF (ila_dim_size(2) .gt. 0) THEN
01506 
01507             ALLOCATE(ila_dest_comp_id(ila_dim_size(2),3), stat = id_err)
01508             IF (id_err > 0) THEN
01509                ierrp (1) = id_err
01510                ierrp (2) = ila_dim_size(2)*3
01511                id_err = 13
01512 
01513                call psmile_error ( id_err, 'ila_dest_comp_id', &
01514                   ierrp, 2, __FILE__, __LINE__ )
01515                RETURN
01516             ENDIF
01517 
01518             CALL MPI_Recv (ila_dest_comp_id, ila_dim_size(2)*3, MPI_Integer, &
01519                PRISMdrv_root, 13, comm_trans, il_status, id_err)
01520 
01521             DO ib = 1, ila_dim_size(2)
01522                DO ib_transi = 1, iga_comp_nb_transi(1)
01523                   IF (sga_smioc_transi(ib_transi)%ig_transi_id == &
01524                       ila_dest_comp_id(ib,1)) THEN
01525                      sga_smioc_transi(ib_transi)%                                &
01526                         sga_transi_out(ila_dest_comp_id(ib,2))%ig_dest_comp_id = &
01527                         ila_dest_comp_id(ib,3)
01528                      EXIT
01529                   END IF
01530                END DO
01531             END DO
01532 
01533             DEALLOCATE(ila_dest_comp_id, stat=id_err)
01534             IF (id_err > 0) THEN
01535                ierrp (1) = id_err
01536                id_err = 14
01537 
01538                call psmile_error ( id_err, 'ila_dest_comp_id', &
01539                   ierrp, 1, __FILE__, __LINE__ )
01540                RETURN
01541             ENDIF
01542 
01543          END IF
01544 
01545 ! the combination location
01546          IF (ila_dim_size(3) .gt. 0) THEN
01547 
01548             ALLOCATE(ila_combi_loc(ila_dim_size(3),2), stat = id_err)
01549             IF (id_err > 0) THEN
01550                ierrp (1) = id_err
01551                ierrp (2) = ila_dim_size(3)*2
01552                id_err = 13
01553 
01554                call psmile_error ( id_err, 'ila_combi_loc', &
01555                   ierrp, 2, __FILE__, __LINE__ )
01556                RETURN
01557             ENDIF
01558 
01559             CALL MPI_Recv (ila_combi_loc, ila_dim_size(3)*2, MPI_Integer, &
01560                PRISMdrv_root, 14, comm_trans, il_status, id_err)
01561 
01562             DO ib = 1, ila_dim_size(3)
01563                DO ib_transi = 1, iga_comp_nb_transi(1)
01564                IF (sga_smioc_transi(ib_transi)%ig_transi_id == &
01565                    ila_combi_loc(ib,1)) THEN
01566                   sga_smioc_transi(ib_transi)%                           &
01567                      sg_transi_in%sga_in_orig(:)%sg_combi%ig_location =  &
01568                      ila_combi_loc(ib,2)
01569                   EXIT
01570                END IF
01571                END DO
01572             END DO
01573 
01574             DEALLOCATE(ila_combi_loc, stat=id_err)
01575             IF (id_err > 0) THEN
01576                ierrp (1) = id_err
01577                id_err = 14
01578 
01579                call psmile_error ( id_err, 'ila_combi_loc', &
01580                   ierrp, 1, __FILE__, __LINE__ )
01581                RETURN
01582             ENDIF
01583 
01584          END IF
01585 
01586 ! the id of the origin transient
01587          IF (ila_dim_size(4) .gt. 0) THEN
01588 
01589             ALLOCATE(ila_trans_orig_id(ila_dim_size(4),3), stat = id_err)
01590             IF (id_err > 0) THEN
01591                ierrp (1) = id_err
01592                ierrp (2) = ila_dim_size(4)*3
01593                id_err = 13
01594 
01595                call psmile_error ( id_err, 'ila_trans_orig_id', &
01596                   ierrp, 2, __FILE__, __LINE__ )
01597                RETURN
01598             ENDIF
01599 
01600             CALL MPI_Recv (ila_trans_orig_id, ila_dim_size(4)*3, MPI_Integer, &
01601                PRISMdrv_root, 15, comm_trans, il_status, id_err)
01602 
01603             DO ib = 1, ila_dim_size(4)
01604                DO ib_transi = 1, iga_comp_nb_transi(1)
01605                   IF (sga_smioc_transi(ib_transi)%ig_transi_id == &
01606                       ila_trans_orig_id(ib,1)) THEN
01607                      sga_smioc_transi(ib_transi)%                           &
01608                         sg_transi_in%sga_in_orig(ila_trans_orig_id(ib,2))%  &
01609                         ig_orig_transi_id = ila_trans_orig_id(ib,3)
01610                      EXIT
01611                   END IF
01612                END DO
01613             END DO
01614 
01615             DEALLOCATE(ila_trans_orig_id, stat=id_err)
01616             IF (id_err > 0) THEN
01617                ierrp (1) = id_err
01618                id_err = 14
01619 
01620                call psmile_error ( id_err, 'ila_trans_orig_id', &
01621                   ierrp, 1, __FILE__, __LINE__ )
01622                RETURN
01623             ENDIF
01624 
01625          END IF
01626 
01627 ! the id of the destination transient
01628          IF (ila_dim_size(5) .gt. 0) THEN
01629 
01630             ALLOCATE(ila_trans_dest_id(ila_dim_size(5),3), stat = id_err)
01631             IF (id_err > 0) THEN
01632                ierrp (1) = id_err
01633                ierrp (2) = ila_dim_size(5)*3
01634                id_err = 13
01635 
01636                call psmile_error ( id_err, 'ila_trans_dest_id', &
01637                   ierrp, 2, __FILE__, __LINE__ )
01638                RETURN
01639             ENDIF
01640 
01641             CALL MPI_Recv (ila_trans_dest_id, ila_dim_size(5)*3, MPI_Integer, &
01642                PRISMdrv_root, 16, comm_trans, il_status, id_err)
01643 
01644             DO ib = 1, ila_dim_size(5)
01645                DO ib_transi = 1, iga_comp_nb_transi(1)
01646                   IF (sga_smioc_transi(ib_transi)%ig_transi_id == &
01647                      ila_trans_dest_id(ib,1)) THEN
01648                      sga_smioc_transi(ib_transi)%                           &
01649                         sga_transi_out(ila_trans_dest_id(ib,2))%            &
01650                         ig_dest_transi_id = ila_trans_dest_id(ib,3)
01651                      EXIT
01652                   END IF
01653                END DO
01654             END DO
01655 
01656             DEALLOCATE(ila_trans_dest_id, stat=id_err)
01657             IF (id_err > 0) THEN
01658                ierrp (1) = id_err
01659                id_err = 14
01660 
01661                call psmile_error ( id_err, 'ila_trans_dest_id', &
01662                   ierrp, 1, __FILE__, __LINE__ )
01663                RETURN
01664             ENDIF
01665 
01666          END IF
01667 
01668 ! the coupling restart file
01669          IF (ila_dim_size(6) .gt. 0) THEN
01670 
01671             ALLOCATE(ila_cpl_rst_file(ila_dim_size(6),8), stat = id_err)
01672             IF (id_err > 0) THEN
01673                ierrp (1) = id_err
01674                ierrp (2) = ila_dim_size(6)
01675                id_err = 13
01676 
01677                call psmile_error ( id_err, 'ila_cpl_rst_file', &
01678                   ierrp, 2, __FILE__, __LINE__ )
01679                RETURN
01680             ENDIF
01681             ALLOCATE(dla_cpl_rst_file(ila_dim_size(6),3), stat = id_err)
01682             IF (id_err > 0) THEN
01683                ierrp (1) = id_err
01684                ierrp (2) = ila_dim_size(6)
01685                id_err = 13
01686 
01687                call psmile_error ( id_err, 'dla_cpl_rst_file', &
01688                   ierrp, 2, __FILE__, __LINE__ )
01689                RETURN
01690             ENDIF
01691             ALLOCATE(cla_cpl_rst_file(ila_dim_size(6),1), stat = id_err)
01692             IF (id_err > 0) THEN
01693                ierrp (1) = id_err
01694                ierrp (2) = ila_dim_size(6)
01695                id_err = 13
01696 
01697                call psmile_error ( id_err, 'cla_cpl_rst_file', &
01698                   ierrp, 2, __FILE__, __LINE__ )
01699                RETURN
01700             ENDIF
01701 
01702             CALL MPI_Recv (ila_cpl_rst_file, ila_dim_size(6)*8, MPI_Integer, &
01703                PRISMdrv_root, 17, comm_trans, il_status, id_err)
01704 
01705             CALL MPI_Recv (dla_cpl_rst_file, ila_dim_size(6)*3, &
01706                MPI_Double_Precision, PRISMdrv_root, 18, comm_trans, il_status,id_err)
01707 
01708             CALL MPI_Recv (cla_cpl_rst_file, ila_dim_size(6)*max_name, &
01709                MPI_Character, PRISMdrv_root, 19, comm_trans, il_status, id_err)
01710 
01711             DO ib = 1, ila_dim_size(6)
01712                DO ib_transi = 1, iga_comp_nb_transi(1)
01713                   IF (sga_smioc_transi(ib_transi)%ig_transi_id == &
01714                         ila_cpl_rst_file(ib,1)) THEN
01715 
01716                      sga_smioc_transi(ib_transi)%                           &
01717                         sga_transi_out(ila_cpl_rst_file(ib,2))%             &
01718                         sg_cpl_rst_file%ig_suffix = ila_cpl_rst_file(ib,3)
01719                      sga_smioc_transi(ib_transi)%                           &
01720                         sga_transi_out(ila_cpl_rst_file(ib,2))%             &
01721                         sg_cpl_rst_file%ig_file_format = ila_cpl_rst_file(ib,4)
01722                      sga_smioc_transi(ib_transi)%                           &
01723                         sga_transi_out(ila_cpl_rst_file(ib,2))%             &
01724                         sg_cpl_rst_file%ig_file_set = ila_cpl_rst_file(ib,5)
01725                      sga_smioc_transi(ib_transi)%                           &
01726                         sga_transi_out(ila_cpl_rst_file(ib,2))%             &
01727                         sg_cpl_rst_file%ig_file_iomode = ila_cpl_rst_file(ib,6)
01728                      sga_smioc_transi(ib_transi)%                           &
01729                         sga_transi_out(ila_cpl_rst_file(ib,2))%             &
01730                         sg_cpl_rst_file%ig_file_pack = ila_cpl_rst_file(ib,7)
01731 
01732                      sga_smioc_transi(ib_transi)%                           &
01733                         sga_transi_out(ila_cpl_rst_file(ib,2))%             &
01734                         sg_cpl_rst_file%dg_file_scal = dla_cpl_rst_file(ib,1)
01735                      sga_smioc_transi(ib_transi)%                           &
01736                         sga_transi_out(ila_cpl_rst_file(ib,2))%             &
01737                         sg_cpl_rst_file%dg_file_add = dla_cpl_rst_file(ib,2)
01738                      sga_smioc_transi(ib_transi)%                           &
01739                         sga_transi_out(ila_cpl_rst_file(ib,2))%             &
01740                         sg_cpl_rst_file%dg_fill_val = dla_cpl_rst_file(ib,3)
01741 
01742                      sga_smioc_transi(ib_transi)%                           &
01743                         sga_transi_out(ila_cpl_rst_file(ib,2))%             &
01744                         sg_cpl_rst_file%cg_file_name = cla_cpl_rst_file(ib,1)
01745 
01746                      sga_smioc_transi(ib_transi)%                           &
01747                         sga_transi_out(ila_cpl_rst_file(ib,2))%             &
01748                         ig_conserv = ila_cpl_rst_file(ib,8)
01749 
01750                      EXIT
01751                   END IF
01752                END DO
01753             END DO
01754 
01755             DEALLOCATE(ila_cpl_rst_file, stat=id_err)
01756             DEALLOCATE(dla_cpl_rst_file, stat=id_err)
01757             DEALLOCATE(cla_cpl_rst_file, stat=id_err)
01758             IF (id_err > 0) THEN
01759                ierrp (1) = id_err
01760                id_err = 14
01761 
01762                call psmile_error ( id_err, 'cpl_rst_file', &
01763                   ierrp, 1, __FILE__, __LINE__ )
01764                RETURN
01765             ENDIF
01766 
01767          END IF
01768 
01769 ! the interpolation
01770          IF (ila_dim_size(7) .gt. 0) THEN
01771 
01772             ALLOCATE(ila_trans_interp(ila_dim_size(7),32), stat = id_err)
01773             IF (id_err > 0) THEN
01774                ierrp (1) = id_err
01775                ierrp (2) = ila_dim_size(7)
01776                id_err = 13
01777 
01778                call psmile_error ( id_err, 'ila_trans_interp', &
01779                   ierrp, 2, __FILE__, __LINE__ )
01780                RETURN
01781             ENDIF
01782             ALLOCATE(dla_trans_interp(ila_dim_size(7),4), stat = id_err)
01783             IF (id_err > 0) THEN
01784                ierrp (1) = id_err
01785                ierrp (2) = ila_dim_size(7)
01786                id_err = 13
01787 
01788                call psmile_error ( id_err, 'dla_trans_interp', &
01789                   ierrp, 2, __FILE__, __LINE__ )
01790                RETURN
01791             ENDIF
01792             ALLOCATE(cla_trans_interp(ila_dim_size(7),2), stat = id_err)
01793             IF (id_err > 0) THEN
01794                ierrp (1) = id_err
01795                ierrp (2) = ila_dim_size(7)
01796                id_err = 13
01797 
01798                call psmile_error ( id_err, 'cla_trans_interp', &
01799                   ierrp, 2, __FILE__, __LINE__ )
01800                RETURN
01801             ENDIF
01802 
01803             CALL MPI_Recv (ila_trans_interp, ila_dim_size(7)*32, MPI_Integer, &
01804                PRISMdrv_root, 20, comm_trans, il_status, id_err)
01805 
01806             CALL MPI_Recv (dla_trans_interp, ila_dim_size(7)*4,  &
01807                MPI_Double_Precision, PRISMdrv_root, 21, comm_trans, &
01808                il_status, id_err)
01809 
01810             CALL MPI_Recv (cla_trans_interp, ila_dim_size(7)*max_name*2, &
01811                MPI_Character, PRISMdrv_root, 22, comm_trans, il_status, id_err)
01812 
01813             DO ib = 1, ila_dim_size(7)
01814                DO ib_transi = 1, iga_comp_nb_transi(1)
01815                   IF (sga_smioc_transi(ib_transi)%ig_transi_id == &
01816                      ila_trans_interp(ib,1)) THEN
01817 
01818                      sga_smioc_transi(ib_transi)%                          &
01819                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01820                         ig_interp_type = ila_trans_interp(ib,3)
01821                      sga_smioc_transi(ib_transi)%                          &
01822                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01823                         iga_arg1 = ila_trans_interp(ib,4:6)
01824                      sga_smioc_transi(ib_transi)%                          &
01825                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01826                         iga_arg2 = ila_trans_interp(ib,7:9)
01827                      sga_smioc_transi(ib_transi)%                          &
01828                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01829                         iga_arg3 = ila_trans_interp(ib,10:12)
01830                      sga_smioc_transi(ib_transi)%                          &
01831                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01832                         iga_arg4 = ila_trans_interp(ib,13:15)
01833                      sga_smioc_transi(ib_transi)%                          &
01834                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01835                         iga_arg5 = ila_trans_interp(ib,16:18)
01836                      sga_smioc_transi(ib_transi)%                          &
01837                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01838                         iga_arg6 = ila_trans_interp(ib,19:21)
01839                      sga_smioc_transi(ib_transi)%                          &
01840                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01841                         iga_arg7 = ila_trans_interp(ib,22:24)
01842                      sga_smioc_transi(ib_transi)%                          &
01843                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01844                         iga_interp_meth = ila_trans_interp(ib,25:27)
01845 !JL sg_arg10 integer
01846                      sga_smioc_transi(ib_transi)%                          &
01847                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01848                         sg_arg10%ig_suffix = ila_trans_interp(ib,28)
01849                      sga_smioc_transi(ib_transi)%                          &
01850                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01851                         sg_arg10%ig_file_format = ila_trans_interp(ib,29)
01852                      sga_smioc_transi(ib_transi)%                          &
01853                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01854                         sg_arg10%ig_file_set = ila_trans_interp(ib,30)
01855                      sga_smioc_transi(ib_transi)%                          &
01856                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01857                         sg_arg10%ig_file_iomode = ila_trans_interp(ib,31)
01858                      sga_smioc_transi(ib_transi)%                          &
01859                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01860                         sg_arg10%ig_file_pack = ila_trans_interp(ib,32)
01861 
01862                      sga_smioc_transi(ib_transi)%                          &
01863                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01864                         dg_arg8 = dla_trans_interp(ib,1)
01865                      sga_smioc_transi(ib_transi)%                          &
01866                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01867                         sg_arg10%dg_file_scal = dla_trans_interp(ib,2)
01868                      sga_smioc_transi(ib_transi)%                          &
01869                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01870                         sg_arg10%dg_file_add = dla_trans_interp(ib,3)
01871                      sga_smioc_transi(ib_transi)%                          &
01872                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01873                         sg_arg10%dg_fill_val = dla_trans_interp(ib,4)
01874 !JL sg_arg10 double precision
01875 
01876                      sga_smioc_transi(ib_transi)%                          &
01877                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01878                         cg_arg9 = cla_trans_interp(ib,1)
01879 !JL sg_arg10 character
01880                      sga_smioc_transi(ib_transi)%                          &
01881                         sga_transi_out(ila_trans_interp(ib,2))%sg_interp%  &
01882                         sg_arg10%cg_file_name = cla_trans_interp(ib,2)
01883 
01884                      EXIT
01885                   END IF
01886                END DO
01887             END DO
01888 
01889             DEALLOCATE(ila_trans_interp, stat=id_err)
01890             DEALLOCATE(dla_trans_interp, stat=id_err)
01891             DEALLOCATE(cla_trans_interp, stat=id_err)
01892             IF (id_err > 0) THEN
01893                ierrp (1) = id_err
01894                id_err = 14
01895 
01896                call psmile_error ( id_err, 'trans_interp', &
01897                   ierrp, 1, __FILE__, __LINE__ )
01898                RETURN
01899             ENDIF
01900 
01901          END IF !(ila_dim_size(7) .gt. 0)
01902 
01903       END IF !(Appl%stand_alone)
01904 
01905       DEALLOCATE(ila_comp_nb_stand_name)
01906       DEALLOCATE(ila_comp_nb_transi_in)
01907       DEALLOCATE(ila_comp_nb_transi_out)
01908 
01909   END IF !(iga_comp_nb_transi(1) .gt. 0)
01910 !
01911 #ifdef DEBUG
01912   WRITE(il_chanel,*) ' '
01913   WRITE(il_chanel,*) ' ila_dim_size ', ila_dim_size
01914   WRITE(il_chanel,*) ' '
01915   WRITE(il_chanel,*) '  Got transient details  '
01916   call psmile_flushstd(il_chanel)    
01917 #endif
01918 !
01919 !-----------------------------------------------------------------------
01920 !
01921 ! 6. Check some transient details
01922 !
01923 #ifdef DEBUG
01924 !!JL  DO ib = 1, iga_comp_nb_transi(1)
01925 !!JL    IF (sga_smioc_transi(ib)%ig_nb_transi_out > 0) THEN
01926 !!JL        DO ib_bis = 1, sga_smioc_transi(ib)%ig_nb_transi_out
01927 !!JL          il_igrid = 0
01928 !!JL          DO ib_grid = 1, iga_comp_nb_grids(1)
01929 !!JL            IF (sga_smioc_grids(ib_grid)%ig_grid_id == sga_smioc_transi(ib)%ig_grid_id) il_igrid = ib_grid
01930 !!JL          ENDDO
01931 !!JL          IF (il_igrid /= 0) THEN
01932 !!JL              DO ib_ter = 1,3
01933 !!JL                IF ((sga_smioc_grids(il_igrid)%ig_grid_type &
01934 !!JL                   ==  PRISM_Gaussreduced_regvrt .OR. &
01935 !!JL                   sga_smioc_grids(il_igrid)%ig_grid_type &
01936 !!JL                   ==  PRISM_Gaussreduced_sigmavrt) .AND. & 
01937 !!JL                   sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_interp%iga_interp_meth(ib_ter) &
01938 !!JL                   == PSMILe_bicubic .AND.  &
01939 !!JL                   sga_smioc_transi(ib)%sga_transi_out(ib_bis)%sg_interp%iga_arg5(ib_ter) &
01940 !!JL                   == PSMIle_gradient) THEN
01941 !!JL                    PRINT *, '******************************************************'
01942 !!JL                    PRINT *, 'Bicubic method gradient cannot be used for Gaussian Reduced grids'
01943 !!JL                    PRINT *, '******************************************************'
01944 !!JL                    call psmile_flushstd
01945 !!JL                    call psmile_abort
01946 !!JL                ENDIF
01947 !!JL              ENDDO
01948 !!JL          ENDIF
01949 !!JL        ENDDO
01950 !!JL    ENDIF
01951 !!JL  ENDDO
01952 #endif
01953 !     
01954 !-----------------------------------------------------------------------
01955 !
01956 ! 7. get the persistents details
01957 !
01958 #ifdef DEBUG
01959   WRITE(il_chanel,*) ' '
01960   WRITE(il_chanel,*) '* Get persistent details  '
01961 #endif
01962 
01963   IF (iga_comp_nb_persis(1) .gt. 0) THEN
01964 
01965       CALL init_persis (iga_comp_nb_persis(1), &
01966          sga_smioc_persis,      &
01967          id_err )
01968       IF (id_err .ne. 0) WRITE(il_chanel,*) 'WARNING: Pb in init_persis'
01969 
01970       IF (Appl%stand_alone) THEN
01971 
01972           CALL get_persis_details (iga_comp_id_doc_XML(1),         &
01973              iga_comp_nb_persis(1),  &
01974              sga_smioc_persis,       &
01975              id_err )
01976           IF (id_err .ne. 0) &
01977              WRITE(il_chanel,*) 'WARNING: Pb in get_persis_details'
01978 
01979           sga_smioc_persis(:)%ig_comp_id = 1
01980           DO ib_p = 1, iga_comp_nb_persis(1)
01981             sga_smioc_persis(ib_p)%ig_persis_id = ib_p 
01982           ENDDO
01983 
01984       ELSE !(Appl%stand_alone)
01985 
01986           ALLOCATE(ila_smioc_recv(4*iga_comp_nb_persis(1)), stat=id_err)
01987           IF (id_err > 0) THEN
01988               ierrp (1) = id_err
01989               ierrp (2) = 4*iga_comp_nb_persis(1)
01990               id_err = 13
01991               
01992               call psmile_error ( id_err, 'ila_smioc_recv', &
01993                  ierrp, 2, __FILE__, __LINE__ )
01994               RETURN
01995           ENDIF
01996           ALLOCATE(cla_smioc_recv(5*iga_comp_nb_persis(1)), stat=id_err)
01997           IF (id_err > 0) THEN
01998               ierrp (1) = id_err
01999               ierrp (2) = 5*iga_comp_nb_persis(1)
02000               id_err = 13
02001               
02002               call psmile_error ( id_err, 'cla_smioc_recv', &
02003                  ierrp, 2, __FILE__, __LINE__ )
02004               RETURN
02005           ENDIF
02006           ALLOCATE(rla_smioc_recv(3*iga_comp_nb_persis(1)), stat=id_err)
02007           IF (id_err > 0) THEN
02008               ierrp (1) = id_err
02009               ierrp (2) = 3*iga_comp_nb_persis(1)
02010               id_err = 13
02011               
02012               call psmile_error ( id_err, 'rla_smioc_recv', &
02013                  ierrp, 2, __FILE__, __LINE__ )
02014               RETURN
02015           ENDIF
02016 
02017           CALL MPI_Recv (ila_smioc_recv, 4*iga_comp_nb_persis(1), &
02018              MPI_Integer, PRISMdrv_root, 30, comm_trans, il_status, id_err)
02019 
02020           CALL MPI_Recv (cla_smioc_recv, max_name*5*iga_comp_nb_persis(1), &
02021              MPI_Character, PRISMdrv_root, 31, comm_trans, il_status, id_err)
02022 
02023           CALL MPI_Recv (rla_smioc_recv, 3*iga_comp_nb_persis(1), &
02024              MPI_Real, PRISMdrv_root, 32, comm_trans, il_status, id_err)
02025 
02026           IF (id_err .ne. 0) &
02027              WRITE(il_chanel,*) 'WARNING: Pb in get_unitsets_details'
02028 
02029           il_index = 1
02030           DO ib= 1, iga_comp_nb_persis(1)
02031 
02032             sga_smioc_persis(ib)%ig_comp_id = ila_smioc_recv(1 + (ib-1)*4)
02033             sga_smioc_persis(ib)%ig_persis_id = ila_smioc_recv(2 + (ib-1)*4) 
02034             sga_smioc_persis(ib)%ig_persis_type = ila_smioc_recv(3 + (ib-1)*4)
02035             sga_smioc_persis(ib)%ig_datatype = ila_smioc_recv(4 + (ib-1)*4) 
02036 
02037             sga_smioc_persis(ib)%cg_local_name = cla_smioc_recv(1 + (ib-1)*5)
02038             sga_smioc_persis(ib)%cg_stand_name = cla_smioc_recv(2 + (ib-1)*5)
02039             sga_smioc_persis(ib)%cg_long_name = cla_smioc_recv(3 + (ib-1)*5)
02040             sga_smioc_persis(ib)%cg_comp_name = cla_smioc_recv(4 + (ib-1)*5)
02041             sga_smioc_persis(ib)%cg_units = cla_smioc_recv(5 + (ib-1)*5)
02042 
02043             sga_smioc_persis(ib)%rg_persis_min = rla_smioc_recv(1 + (ib-1)*3)
02044             sga_smioc_persis(ib)%rg_persis_max = rla_smioc_recv(2 + (ib-1)*3)
02045             sga_smioc_persis(ib)%rg_persis = rla_smioc_recv(3 + (ib-1)*3)
02046 
02047           END DO
02048 
02049           DEALLOCATE(ila_smioc_recv, stat=id_err)
02050           IF (id_err > 0) THEN
02051               ierrp (1) = id_err
02052               id_err = 14
02053           
02054               call psmile_error ( id_err, 'ila_smioc_recv', &
02055                  ierrp, 1, __FILE__, __LINE__ )
02056               RETURN
02057           ENDIF
02058           DEALLOCATE(cla_smioc_recv, stat=id_err)
02059           IF (id_err > 0) THEN
02060               ierrp (1) = id_err
02061               id_err = 14
02062           
02063               call psmile_error ( id_err, 'cla_smioc_recv', &
02064                  ierrp, 1, __FILE__, __LINE__ )
02065               RETURN
02066           ENDIF
02067           DEALLOCATE(rla_smioc_recv, stat=id_err)
02068           IF (id_err > 0) THEN
02069               ierrp (1) = id_err
02070               id_err = 14
02071           
02072               call psmile_error ( id_err, 'rla_smioc_recv', &
02073                  ierrp, 1, __FILE__, __LINE__ )
02074               RETURN
02075           ENDIF
02076       END IF !(Appl%stand_alone)
02077   END IF !(iga_comp_nb_persis(1) .gt. 0)
02078 
02079 #ifdef DEBUG
02080   WRITE(il_chanel,*) ' '
02081   WRITE(il_chanel,*) '* The total number of persistents : ', &
02082      iga_comp_nb_persis(1)
02083   call psmile_flushstd(il_chanel)    
02084 #endif
02085 
02086   IF (Appl%stand_alone) THEN
02087      ! Close SMIOC file
02088       ierrp(1) = sasa_c_close (iga_comp_id_doc_XML(1))
02089   END IF
02090 !
02091 !-----------------------------------------------------------------------
02092 !
02093 ! 8. Write the different structures
02094 !
02095 ! 8.1. Write the grid structure
02096 #ifdef DEBUG
02097   WRITE(il_chanel,*) ' '
02098   IF (iga_comp_nb_grids(1) .gt. 0) THEN
02099       CALL write_grids_details (iga_comp_nb_grids(1),  &
02100                                 sga_smioc_grids, il_chanel, id_err )
02101       IF (id_err .ne. 0) WRITE(il_chanel,*) &
02102          'WARNING: Pb in write_grids_details'
02103   END IF
02104 
02105 ! 8.2. Write the transient structure
02106   IF (iga_comp_nb_transi(1) .gt. 0) THEN
02107       CALL write_transi_details (iga_comp_nb_transi(1),  &
02108                                  sga_smioc_transi, il_chanel, id_err )
02109       IF (id_err .ne. 0) WRITE(il_chanel,*) &
02110          'WARNING: Pb in write_transi_details'
02111   END IF
02112 
02113 ! 8.3. Write the persistent structure
02114   IF (iga_comp_nb_persis(1) .gt. 0) THEN
02115       CALL write_persis_details (iga_comp_nb_persis(1),  &
02116                                  sga_smioc_persis, il_chanel, id_err )
02117       IF (id_err .ne. 0) WRITE(il_chanel,*) &
02118          'WARNING: Pb in write_persis_details'
02119   END IF
02120   WRITE(il_chanel,*) ' '
02121 
02122 #endif
02123 
02124 #ifdef VERBOSE
02125       print 9980, trim(ch_id), id_err
02126 
02127       call psmile_flushstd
02128 #endif /* VERBOSE */
02129 
02130 9990 format (1x, a, ': psmile_smioc_init: comp_id =', i3)
02131 9980 format (1x, a, ': psmile_smioc_init: eof, ierror =', i3)
02132 !
02133 
02134 END SUBROUTINE PSMILe_smioc_init

Generated on 18 Mar 2011 for Oasis4 by  doxygen 1.6.1