New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 11837 for NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/IOM/iom.F90 – NEMO

Ignore:
Timestamp:
2019-10-30T15:10:36+01:00 (4 years ago)
Author:
andmirek
Message:

ticket #2323 read SI3 restart with XIOS

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/IOM/iom.F90

    r11554 r11837  
    4747   USE lib_fortran  
    4848   USE diurnal_bulk, ONLY : ln_diurnal_only, ln_diurnal 
     49#if defined key_si3 
     50   USE ice, ONLY: nlay_i, nlay_s 
     51#endif 
     52 
    4953 
    5054   IMPLICIT NONE 
     
    6165 
    6266   PRIVATE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d 
    63    PRIVATE iom_g0d, iom_g1d, iom_g2d, iom_g3d, iom_get_123d 
     67   PRIVATE iom_g0d, iom_g1d, iom_g2d, iom_g3d, iom_g4d, iom_get_123d 
    6468   PRIVATE iom_p1d, iom_p2d, iom_p3d 
    6569#if defined key_iomput 
     
    6973# endif 
    7074   PUBLIC iom_set_rstw_var_active, iom_set_rstw_core, iom_set_rst_vars 
     75   PRIVATE iom_add 
     76   INTEGER, PRIVATE :: numrst 
    7177 
    7278   INTERFACE iom_get 
    73       MODULE PROCEDURE iom_g0d, iom_g1d, iom_g2d, iom_g3d 
     79      MODULE PROCEDURE iom_g0d, iom_g1d, iom_g2d, iom_g3d, iom_g4d 
    7480   END INTERFACE 
    7581   INTERFACE iom_getatt 
     
    227233      ! 
    228234      ! automatic definitions of some of the xml attributs 
    229       IF( TRIM(cdname) == TRIM(crxios_context) ) THEN 
     235      IF( TRIM(cdname) == TRIM(crxios_context) .OR. TRIM(cdname) == TRIM(crixios_context) ) THEN 
     236          numrst = numror 
     237          IF(TRIM(cdname) == TRIM(crixios_context)) numrst = numrir  
    230238!set names of the fields in restart file IF using XIOS to read data 
    231239          CALL iom_set_rst_context(.TRUE.) 
    232240          CALL iom_set_rst_vars(rst_rfields) 
    233241!set which fields are to be read from restart file 
    234           CALL iom_set_rstr_active() 
     242          CALL iom_set_rstr_active(fname) 
    235243      ELSE IF( TRIM(cdname) == TRIM(cwxios_context) ) THEN 
    236244!set names of the fields in restart file IF using XIOS to write data 
     
    238246          CALL iom_set_rst_vars(rst_wfields) 
    239247!set which fields are to be written to a restart file 
    240           CALL iom_set_rstw_active(fname) 
     248          CALL iom_set_rstw_active(rst_wfields, fname) 
    241249      ELSE 
    242250          CALL set_xmlatt 
     
    259267   END SUBROUTINE iom_init 
    260268 
    261    SUBROUTINE iom_set_rstw_var_active(field) 
     269   SUBROUTINE iom_set_rstw_var_active(drst_wfields, field) 
    262270      !!--------------------------------------------------------------------- 
    263271      !!                   ***  SUBROUTINE  iom_set_rstw_var_active  *** 
     
    266274      !!--------------------------------------------------------------------- 
    267275   CHARACTER(len = *), INTENT(IN) :: field 
     276   TYPE(RST_FIELD),    INTENT(INOUT) :: drst_wfields(max_rst_fields) 
    268277   INTEGER :: i 
    269278   LOGICAL :: llis_set 
     
    274283 
    275284   DO i = 1, max_rst_fields 
    276        IF(TRIM(rst_wfields(i)%vname) == field) THEN  
    277           rst_wfields(i)%active = .TRUE. 
     285       IF(TRIM(drst_wfields(i)%vname) == field) THEN  
     286          drst_wfields(i)%active = .TRUE. 
    278287          llis_set = .TRUE. 
    279288          EXIT 
    280289       ENDIF 
    281290   ENDDO 
    282 !Warn if variable is not in defined in rst_wfields 
     291!Warn if variable is not in defined in drst_wfields 
    283292   IF(.NOT.llis_set) THEN 
    284293      WRITE(ctmp1,*) 'iom_set_rstw_var_active: variable ', field ,' is available for writing but not defined'  
     
    292301   END SUBROUTINE iom_set_rstw_var_active 
    293302 
    294    SUBROUTINE iom_set_rstr_active() 
     303   SUBROUTINE iom_set_rstr_active(rst_file) 
    295304      !!--------------------------------------------------------------------- 
    296305      !!                   ***  SUBROUTINE  iom_set_rstr_active  *** 
     
    308317   TYPE(xios_filegroup) :: filegroup_hdl 
    309318   INTEGER :: i 
    310    CHARACTER(lc)  ::   clpath 
    311  
    312         clpath = TRIM(cn_ocerst_indir) 
    313         IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 
    314         IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
    315            rst_file = TRIM(clpath)//TRIM(cn_ocerst_in) 
    316         ELSE 
    317            rst_file = TRIM(clpath)//'1_'//TRIM(cn_ocerst_in) 
    318         ENDIF 
     319 
    319320!set name of the restart file and enable available fields 
    320321        if(lwp) WRITE(numout,*) 'Setting restart filename (for XIOS) to: ',rst_file 
     
    327328        DO i = 1, max_rst_fields 
    328329         IF( TRIM(rst_rfields(i)%vname) /= "NO_NAME") THEN 
    329            IF( iom_varid( numror, TRIM(rst_rfields(i)%vname), ldstop = .FALSE. ) > 0 ) THEN 
     330           IF( iom_varid( numrst, TRIM(rst_rfields(i)%vname), ldstop = .FALSE. ) > 0 ) THEN 
     331                IF(TRIM(rst_rfields(i)%vname) == "e_s") lrsi3_nemo = .FALSE.       ! SI3 restart written by XIOS 
    330332                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_rfields(i)%vname)) 
    331333                SELECT CASE (TRIM(rst_rfields(i)%grid)) 
     334!                CASE ("grid_Ni_4D") 
     335!                   CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
     336!                       domain_ref="grid_N", axis_ref="nlay_i", axis_ref="numcat", operation = "instant") 
     337!                CASE ("grid_Ns_4D") 
     338!                   CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
     339!                       domain_ref="grid_N", axis_ref="nlay_s", axis_ref="numcat", operation = "instant") 
     340                 CASE ("grid_Ni_3D") 
     341                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
     342                        domain_ref="grid_N", axis_ref="numcat", operation = "instant") 
    332343                 CASE ("grid_N_3D") 
    333344                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
     
    361372   IF(cdmdl == "OPA") THEN 
    362373!from restart.F90 
    363    CALL iom_set_rstw_var_active("rdt") 
     374   CALL iom_set_rstw_var_active(rst_wfields, "rdt") 
    364375   IF ( .NOT. ln_diurnal_only ) THEN 
    365         CALL iom_set_rstw_var_active('ub'  ) 
    366         CALL iom_set_rstw_var_active('vb'  ) 
    367         CALL iom_set_rstw_var_active('tb'  ) 
    368         CALL iom_set_rstw_var_active('sb'  ) 
    369         CALL iom_set_rstw_var_active('sshb') 
     376        CALL iom_set_rstw_var_active(rst_wfields, 'ub'  ) 
     377        CALL iom_set_rstw_var_active(rst_wfields, 'vb'  ) 
     378        CALL iom_set_rstw_var_active(rst_wfields, 'tb'  ) 
     379        CALL iom_set_rstw_var_active(rst_wfields, 'sb'  ) 
     380        CALL iom_set_rstw_var_active(rst_wfields, 'sshb') 
    370381        ! 
    371         CALL iom_set_rstw_var_active('un'  ) 
    372         CALL iom_set_rstw_var_active('vn'  ) 
    373         CALL iom_set_rstw_var_active('tn'  ) 
    374         CALL iom_set_rstw_var_active('sn'  ) 
    375         CALL iom_set_rstw_var_active('sshn') 
    376         CALL iom_set_rstw_var_active('rhop') 
     382        CALL iom_set_rstw_var_active(rst_wfields, 'un'  ) 
     383        CALL iom_set_rstw_var_active(rst_wfields, 'vn'  ) 
     384        CALL iom_set_rstw_var_active(rst_wfields, 'tn'  ) 
     385        CALL iom_set_rstw_var_active(rst_wfields, 'sn'  ) 
     386        CALL iom_set_rstw_var_active(rst_wfields, 'sshn') 
     387        CALL iom_set_rstw_var_active(rst_wfields, 'rhop') 
    377388     ! extra variable needed for the ice sheet coupling 
    378389        IF ( ln_iscpl ) THEN 
    379              CALL iom_set_rstw_var_active('tmask') 
    380              CALL iom_set_rstw_var_active('umask') 
    381              CALL iom_set_rstw_var_active('vmask') 
    382              CALL iom_set_rstw_var_active('smask') 
    383              CALL iom_set_rstw_var_active('e3t_n') 
    384              CALL iom_set_rstw_var_active('e3u_n') 
    385              CALL iom_set_rstw_var_active('e3v_n') 
    386              CALL iom_set_rstw_var_active('gdepw_n') 
     390             CALL iom_set_rstw_var_active(rst_wfields, 'tmask') 
     391             CALL iom_set_rstw_var_active(rst_wfields, 'umask') 
     392             CALL iom_set_rstw_var_active(rst_wfields, 'vmask') 
     393             CALL iom_set_rstw_var_active(rst_wfields, 'smask') 
     394             CALL iom_set_rstw_var_active(rst_wfields, 'e3t_n') 
     395             CALL iom_set_rstw_var_active(rst_wfields, 'e3u_n') 
     396             CALL iom_set_rstw_var_active(rst_wfields, 'e3v_n') 
     397             CALL iom_set_rstw_var_active(rst_wfields, 'gdepw_n') 
    387398        END IF 
    388399      ENDIF 
    389       IF(ln_diurnal) CALL iom_set_rstw_var_active('Dsst') 
     400      IF(ln_diurnal) CALL iom_set_rstw_var_active(rst_wfields, 'Dsst') 
    390401!from trasbc.F90 
    391          CALL iom_set_rstw_var_active('sbc_hc_b') 
    392          CALL iom_set_rstw_var_active('sbc_sc_b') 
     402         CALL iom_set_rstw_var_active(rst_wfields, 'sbc_hc_b') 
     403         CALL iom_set_rstw_var_active(rst_wfields, 'sbc_sc_b') 
    393404   ENDIF 
    394405#else 
     
    407418      !!--------------------------------------------------------------------- 
    408419   TYPE(RST_FIELD), INTENT(INOUT) :: fields(max_rst_fields) 
    409    INTEGER :: i 
     420   INTEGER :: i, jk 
     421   CHARACTER(len=2)  ::   zchar 
     422   CHARACTER(len=25) ::   znam 
    410423 
    411424        i = 0 
    412         i = i + 1; fields(i)%vname="rdt";            fields(i)%grid="grid_scalar" 
    413         i = i + 1; fields(i)%vname="un";             fields(i)%grid="grid_N_3D" 
    414         i = i + 1; fields(i)%vname="ub";             fields(i)%grid="grid_N_3D" 
    415         i = i + 1; fields(i)%vname="vn";             fields(i)%grid="grid_N_3D" 
    416         i = i + 1; fields(i)%vname="vb";             fields(i)%grid="grid_N_3D"   
    417         i = i + 1; fields(i)%vname="tn";             fields(i)%grid="grid_N_3D" 
    418         i = i + 1; fields(i)%vname="tb";             fields(i)%grid="grid_N_3D" 
    419         i = i + 1; fields(i)%vname="sn";             fields(i)%grid="grid_N_3D" 
    420         i = i + 1; fields(i)%vname="sb";             fields(i)%grid="grid_N_3D" 
    421         i = i + 1; fields(i)%vname="sshn";           fields(i)%grid="grid_N" 
    422         i = i + 1; fields(i)%vname="sshb";           fields(i)%grid="grid_N" 
    423         i = i + 1; fields(i)%vname="rhop";           fields(i)%grid="grid_N_3D" 
    424         i = i + 1; fields(i)%vname="kt";             fields(i)%grid="grid_scalar" 
    425         i = i + 1; fields(i)%vname="ndastp";         fields(i)%grid="grid_scalar" 
    426         i = i + 1; fields(i)%vname="adatrj";         fields(i)%grid="grid_scalar" 
    427         i = i + 1; fields(i)%vname="utau_b";         fields(i)%grid="grid_N" 
    428         i = i + 1; fields(i)%vname="vtau_b";         fields(i)%grid="grid_N" 
    429         i = i + 1; fields(i)%vname="qns_b";          fields(i)%grid="grid_N" 
    430         i = i + 1; fields(i)%vname="emp_b";          fields(i)%grid="grid_N" 
    431         i = i + 1; fields(i)%vname="sfx_b";          fields(i)%grid="grid_N" 
    432         i = i + 1; fields(i)%vname="en" ;            fields(i)%grid="grid_N_3D"  
    433         i = i + 1; fields(i)%vname="avt_k";            fields(i)%grid="grid_N_3D" 
    434         i = i + 1; fields(i)%vname="avm_k";            fields(i)%grid="grid_N_3D" 
    435         i = i + 1; fields(i)%vname="dissl";          fields(i)%grid="grid_N_3D" 
    436         i = i + 1; fields(i)%vname="sbc_hc_b";       fields(i)%grid="grid_N" 
    437         i = i + 1; fields(i)%vname="sbc_sc_b";       fields(i)%grid="grid_N" 
    438         i = i + 1; fields(i)%vname="qsr_hc_b";       fields(i)%grid="grid_N_3D" 
    439         i = i + 1; fields(i)%vname="fraqsr_1lev";    fields(i)%grid="grid_N" 
    440         i = i + 1; fields(i)%vname="greenland_icesheet_mass" 
     425        i = iom_add(i); fields(i)%vname="rdt";            fields(i)%grid="grid_scalar" 
     426        i = iom_add(i); fields(i)%vname="un";             fields(i)%grid="grid_N_3D" 
     427        i = iom_add(i); fields(i)%vname="ub";             fields(i)%grid="grid_N_3D" 
     428        i = iom_add(i); fields(i)%vname="vn";             fields(i)%grid="grid_N_3D" 
     429        i = iom_add(i); fields(i)%vname="vb";             fields(i)%grid="grid_N_3D"   
     430        i = iom_add(i); fields(i)%vname="tn";             fields(i)%grid="grid_N_3D" 
     431        i = iom_add(i); fields(i)%vname="tb";             fields(i)%grid="grid_N_3D" 
     432        i = iom_add(i); fields(i)%vname="sn";             fields(i)%grid="grid_N_3D" 
     433        i = iom_add(i); fields(i)%vname="sb";             fields(i)%grid="grid_N_3D" 
     434        i = iom_add(i); fields(i)%vname="sshn";           fields(i)%grid="grid_N" 
     435        i = iom_add(i); fields(i)%vname="sshb";           fields(i)%grid="grid_N" 
     436        i = iom_add(i); fields(i)%vname="rhop";           fields(i)%grid="grid_N_3D" 
     437        i = iom_add(i); fields(i)%vname="kt";             fields(i)%grid="grid_scalar" 
     438        i = iom_add(i); fields(i)%vname="ndastp";         fields(i)%grid="grid_scalar" 
     439        i = iom_add(i); fields(i)%vname="adatrj";         fields(i)%grid="grid_scalar" 
     440        i = iom_add(i); fields(i)%vname="utau_b";         fields(i)%grid="grid_N" 
     441        i = iom_add(i); fields(i)%vname="vtau_b";         fields(i)%grid="grid_N" 
     442        i = iom_add(i); fields(i)%vname="qns_b";          fields(i)%grid="grid_N" 
     443        i = iom_add(i); fields(i)%vname="emp_b";          fields(i)%grid="grid_N" 
     444        i = iom_add(i); fields(i)%vname="sfx_b";          fields(i)%grid="grid_N" 
     445        i = iom_add(i); fields(i)%vname="en" ;            fields(i)%grid="grid_N_3D"  
     446        i = iom_add(i); fields(i)%vname="avt_k";            fields(i)%grid="grid_N_3D" 
     447        i = iom_add(i); fields(i)%vname="avm_k";            fields(i)%grid="grid_N_3D" 
     448        i = iom_add(i); fields(i)%vname="dissl";          fields(i)%grid="grid_N_3D" 
     449        i = iom_add(i); fields(i)%vname="sbc_hc_b";       fields(i)%grid="grid_N" 
     450        i = iom_add(i); fields(i)%vname="sbc_sc_b";       fields(i)%grid="grid_N" 
     451        i = iom_add(i); fields(i)%vname="qsr_hc_b";       fields(i)%grid="grid_N_3D" 
     452        i = iom_add(i); fields(i)%vname="fraqsr_1lev";    fields(i)%grid="grid_N" 
     453        i = iom_add(i); fields(i)%vname="greenland_icesheet_mass" 
    441454                                               fields(i)%grid="grid_scalar" 
    442         i = i + 1; fields(i)%vname="greenland_icesheet_timelapsed" 
     455        i = iom_add(i); fields(i)%vname="greenland_icesheet_timelapsed" 
    443456                                               fields(i)%grid="grid_scalar" 
    444         i = i + 1; fields(i)%vname="greenland_icesheet_mass_roc" 
     457        i = iom_add(i); fields(i)%vname="greenland_icesheet_mass_roc" 
    445458                                               fields(i)%grid="grid_scalar" 
    446         i = i + 1; fields(i)%vname="antarctica_icesheet_mass" 
     459        i = iom_add(i); fields(i)%vname="antarctica_icesheet_mass" 
    447460                                               fields(i)%grid="grid_scalar" 
    448         i = i + 1; fields(i)%vname="antarctica_icesheet_timelapsed" 
     461        i = iom_add(i); fields(i)%vname="antarctica_icesheet_timelapsed" 
    449462                                               fields(i)%grid="grid_scalar" 
    450         i = i + 1; fields(i)%vname="antarctica_icesheet_mass_roc" 
     463        i = iom_add(i); fields(i)%vname="antarctica_icesheet_mass_roc" 
    451464                                               fields(i)%grid="grid_scalar" 
    452         i = i + 1; fields(i)%vname="frc_v";          fields(i)%grid="grid_scalar" 
    453         i = i + 1; fields(i)%vname="frc_t";          fields(i)%grid="grid_scalar" 
    454         i = i + 1; fields(i)%vname="frc_s";          fields(i)%grid="grid_scalar" 
    455         i = i + 1; fields(i)%vname="frc_wn_t";       fields(i)%grid="grid_scalar" 
    456         i = i + 1; fields(i)%vname="frc_wn_s";       fields(i)%grid="grid_scalar" 
    457         i = i + 1; fields(i)%vname="ssh_ini";        fields(i)%grid="grid_N" 
    458         i = i + 1; fields(i)%vname="e3t_ini";        fields(i)%grid="grid_N_3D" 
    459         i = i + 1; fields(i)%vname="hc_loc_ini";     fields(i)%grid="grid_N_3D" 
    460         i = i + 1; fields(i)%vname="sc_loc_ini";     fields(i)%grid="grid_N_3D" 
    461         i = i + 1; fields(i)%vname="ssh_hc_loc_ini"; fields(i)%grid="grid_N" 
    462         i = i + 1; fields(i)%vname="ssh_sc_loc_ini"; fields(i)%grid="grid_N" 
    463         i = i + 1; fields(i)%vname="tilde_e3t_b";    fields(i)%grid="grid_N" 
    464         i = i + 1; fields(i)%vname="tilde_e3t_n";    fields(i)%grid="grid_N" 
    465         i = i + 1; fields(i)%vname="hdiv_lf";        fields(i)%grid="grid_N" 
    466         i = i + 1; fields(i)%vname="ub2_b";          fields(i)%grid="grid_N" 
    467         i = i + 1; fields(i)%vname="vb2_b";          fields(i)%grid="grid_N" 
    468         i = i + 1; fields(i)%vname="sshbb_e";        fields(i)%grid="grid_N" 
    469         i = i + 1; fields(i)%vname="ubb_e";          fields(i)%grid="grid_N" 
    470         i = i + 1; fields(i)%vname="vbb_e";          fields(i)%grid="grid_N" 
    471         i = i + 1; fields(i)%vname="sshb_e";         fields(i)%grid="grid_N" 
    472         i = i + 1; fields(i)%vname="ub_e";           fields(i)%grid="grid_N" 
    473         i = i + 1; fields(i)%vname="vb_e";           fields(i)%grid="grid_N" 
    474         i = i + 1; fields(i)%vname="fwf_isf_b";      fields(i)%grid="grid_N" 
    475         i = i + 1; fields(i)%vname="isf_sc_b";       fields(i)%grid="grid_N" 
    476         i = i + 1; fields(i)%vname="isf_hc_b";       fields(i)%grid="grid_N" 
    477         i = i + 1; fields(i)%vname="ssh_ibb";        fields(i)%grid="grid_N" 
    478         i = i + 1; fields(i)%vname="rnf_b";          fields(i)%grid="grid_N" 
    479         i = i + 1; fields(i)%vname="rnf_hc_b";       fields(i)%grid="grid_N" 
    480         i = i + 1; fields(i)%vname="rnf_sc_b";       fields(i)%grid="grid_N" 
    481         i = i + 1; fields(i)%vname="nn_fsbc";        fields(i)%grid="grid_scalar" 
    482         i = i + 1; fields(i)%vname="ssu_m";          fields(i)%grid="grid_N" 
    483         i = i + 1; fields(i)%vname="ssv_m";          fields(i)%grid="grid_N" 
    484         i = i + 1; fields(i)%vname="sst_m";          fields(i)%grid="grid_N" 
    485         i = i + 1; fields(i)%vname="sss_m";          fields(i)%grid="grid_N" 
    486         i = i + 1; fields(i)%vname="ssh_m";          fields(i)%grid="grid_N" 
    487         i = i + 1; fields(i)%vname="e3t_m";          fields(i)%grid="grid_N" 
    488         i = i + 1; fields(i)%vname="frq_m";          fields(i)%grid="grid_N" 
    489         i = i + 1; fields(i)%vname="avmb";           fields(i)%grid="grid_vector" 
    490         i = i + 1; fields(i)%vname="avtb";           fields(i)%grid="grid_vector" 
    491         i = i + 1; fields(i)%vname="ub2_i_b";        fields(i)%grid="grid_N" 
    492         i = i + 1; fields(i)%vname="vb2_i_b";        fields(i)%grid="grid_N" 
    493         i = i + 1; fields(i)%vname="ntime";          fields(i)%grid="grid_scalar" 
    494         i = i + 1; fields(i)%vname="Dsst";           fields(i)%grid="grid_scalar" 
    495         i = i + 1; fields(i)%vname="tmask";          fields(i)%grid="grid_N_3D" 
    496         i = i + 1; fields(i)%vname="umask";          fields(i)%grid="grid_N_3D" 
    497         i = i + 1; fields(i)%vname="vmask";          fields(i)%grid="grid_N_3D" 
    498         i = i + 1; fields(i)%vname="smask";          fields(i)%grid="grid_N_3D" 
    499         i = i + 1; fields(i)%vname="gdepw_n";        fields(i)%grid="grid_N_3D" 
    500         i = i + 1; fields(i)%vname="e3t_n";          fields(i)%grid="grid_N_3D" 
    501         i = i + 1; fields(i)%vname="e3u_n";          fields(i)%grid="grid_N_3D" 
    502         i = i + 1; fields(i)%vname="e3v_n";          fields(i)%grid="grid_N_3D" 
    503         i = i + 1; fields(i)%vname="surf_ini";       fields(i)%grid="grid_N" 
    504         i = i + 1; fields(i)%vname="e3t_b";          fields(i)%grid="grid_N_3D" 
    505         i = i + 1; fields(i)%vname="hmxl_n";         fields(i)%grid="grid_N_3D" 
    506         i = i + 1; fields(i)%vname="un_bf";          fields(i)%grid="grid_N" 
    507         i = i + 1; fields(i)%vname="vn_bf";          fields(i)%grid="grid_N" 
    508         i = i + 1; fields(i)%vname="hbl";            fields(i)%grid="grid_N" 
    509         i = i + 1; fields(i)%vname="hbli";           fields(i)%grid="grid_N" 
    510         i = i + 1; fields(i)%vname="wn";             fields(i)%grid="grid_N_3D" 
    511  
    512         IF( i-1 > max_rst_fields) THEN 
    513            WRITE(ctmp1,*) 'E R R O R : iom_set_rst_vars SIZE of RST_FIELD array is too small' 
    514            CALL ctl_stop( 'iom_set_rst_vars:', ctmp1 ) 
    515         ENDIF 
     465        i = iom_add(i); fields(i)%vname="frc_v";          fields(i)%grid="grid_scalar" 
     466        i = iom_add(i); fields(i)%vname="frc_t";          fields(i)%grid="grid_scalar" 
     467        i = iom_add(i); fields(i)%vname="frc_s";          fields(i)%grid="grid_scalar" 
     468        i = iom_add(i); fields(i)%vname="frc_wn_t";       fields(i)%grid="grid_scalar" 
     469        i = iom_add(i); fields(i)%vname="frc_wn_s";       fields(i)%grid="grid_scalar" 
     470        i = iom_add(i); fields(i)%vname="ssh_ini";        fields(i)%grid="grid_N" 
     471        i = iom_add(i); fields(i)%vname="e3t_ini";        fields(i)%grid="grid_N_3D" 
     472        i = iom_add(i); fields(i)%vname="hc_loc_ini";     fields(i)%grid="grid_N_3D" 
     473        i = iom_add(i); fields(i)%vname="sc_loc_ini";     fields(i)%grid="grid_N_3D" 
     474        i = iom_add(i); fields(i)%vname="ssh_hc_loc_ini"; fields(i)%grid="grid_N" 
     475        i = iom_add(i); fields(i)%vname="ssh_sc_loc_ini"; fields(i)%grid="grid_N" 
     476        i = iom_add(i); fields(i)%vname="tilde_e3t_b";    fields(i)%grid="grid_N" 
     477        i = iom_add(i); fields(i)%vname="tilde_e3t_n";    fields(i)%grid="grid_N" 
     478        i = iom_add(i); fields(i)%vname="hdiv_lf";        fields(i)%grid="grid_N" 
     479        i = iom_add(i); fields(i)%vname="ub2_b";          fields(i)%grid="grid_N" 
     480        i = iom_add(i); fields(i)%vname="vb2_b";          fields(i)%grid="grid_N" 
     481        i = iom_add(i); fields(i)%vname="sshbb_e";        fields(i)%grid="grid_N" 
     482        i = iom_add(i); fields(i)%vname="ubb_e";          fields(i)%grid="grid_N" 
     483        i = iom_add(i); fields(i)%vname="vbb_e";          fields(i)%grid="grid_N" 
     484        i = iom_add(i); fields(i)%vname="sshb_e";         fields(i)%grid="grid_N" 
     485        i = iom_add(i); fields(i)%vname="ub_e";           fields(i)%grid="grid_N" 
     486        i = iom_add(i); fields(i)%vname="vb_e";           fields(i)%grid="grid_N" 
     487        i = iom_add(i); fields(i)%vname="fwf_isf_b";      fields(i)%grid="grid_N" 
     488        i = iom_add(i); fields(i)%vname="isf_sc_b";       fields(i)%grid="grid_N" 
     489        i = iom_add(i); fields(i)%vname="isf_hc_b";       fields(i)%grid="grid_N" 
     490        i = iom_add(i); fields(i)%vname="ssh_ibb";        fields(i)%grid="grid_N" 
     491        i = iom_add(i); fields(i)%vname="rnf_b";          fields(i)%grid="grid_N" 
     492        i = iom_add(i); fields(i)%vname="rnf_hc_b";       fields(i)%grid="grid_N" 
     493        i = iom_add(i); fields(i)%vname="rnf_sc_b";       fields(i)%grid="grid_N" 
     494        i = iom_add(i); fields(i)%vname="nn_fsbc";        fields(i)%grid="grid_scalar" 
     495        i = iom_add(i); fields(i)%vname="ssu_m";          fields(i)%grid="grid_N" 
     496        i = iom_add(i); fields(i)%vname="ssv_m";          fields(i)%grid="grid_N" 
     497        i = iom_add(i); fields(i)%vname="sst_m";          fields(i)%grid="grid_N" 
     498        i = iom_add(i); fields(i)%vname="sss_m";          fields(i)%grid="grid_N" 
     499        i = iom_add(i); fields(i)%vname="ssh_m";          fields(i)%grid="grid_N" 
     500        i = iom_add(i); fields(i)%vname="e3t_m";          fields(i)%grid="grid_N" 
     501        i = iom_add(i); fields(i)%vname="frq_m";          fields(i)%grid="grid_N" 
     502        i = iom_add(i); fields(i)%vname="avmb";           fields(i)%grid="grid_vector" 
     503        i = iom_add(i); fields(i)%vname="avtb";           fields(i)%grid="grid_vector" 
     504        i = iom_add(i); fields(i)%vname="ub2_i_b";        fields(i)%grid="grid_N" 
     505        i = iom_add(i); fields(i)%vname="vb2_i_b";        fields(i)%grid="grid_N" 
     506        i = iom_add(i); fields(i)%vname="ntime";          fields(i)%grid="grid_scalar" 
     507        i = iom_add(i); fields(i)%vname="Dsst";           fields(i)%grid="grid_scalar" 
     508        i = iom_add(i); fields(i)%vname="tmask";          fields(i)%grid="grid_N_3D" 
     509        i = iom_add(i); fields(i)%vname="umask";          fields(i)%grid="grid_N_3D" 
     510        i = iom_add(i); fields(i)%vname="vmask";          fields(i)%grid="grid_N_3D" 
     511        i = iom_add(i); fields(i)%vname="smask";          fields(i)%grid="grid_N_3D" 
     512        i = iom_add(i); fields(i)%vname="gdepw_n";        fields(i)%grid="grid_N_3D" 
     513        i = iom_add(i); fields(i)%vname="e3t_n";          fields(i)%grid="grid_N_3D" 
     514        i = iom_add(i); fields(i)%vname="e3u_n";          fields(i)%grid="grid_N_3D" 
     515        i = iom_add(i); fields(i)%vname="e3v_n";          fields(i)%grid="grid_N_3D" 
     516        i = iom_add(i); fields(i)%vname="surf_ini";       fields(i)%grid="grid_N" 
     517        i = iom_add(i); fields(i)%vname="e3t_b";          fields(i)%grid="grid_N_3D" 
     518        i = iom_add(i); fields(i)%vname="hmxl_n";         fields(i)%grid="grid_N_3D" 
     519        i = iom_add(i); fields(i)%vname="un_bf";          fields(i)%grid="grid_N" 
     520        i = iom_add(i); fields(i)%vname="vn_bf";          fields(i)%grid="grid_N" 
     521        i = iom_add(i); fields(i)%vname="hbl";            fields(i)%grid="grid_N" 
     522        i = iom_add(i); fields(i)%vname="hbli";           fields(i)%grid="grid_N" 
     523        i = iom_add(i); fields(i)%vname="wn";             fields(i)%grid="grid_N_3D" 
     524#ifdef key_si3 
     525!ICE/icedia.F90 
     526        i = iom_add(i); fields(i)%vname="kt_ice";         fields(i)%grid="grid_scalar" 
     527        i = iom_add(i); fields(i)%vname="frc_voltop";     fields(i)%grid="grid_scalar" 
     528        i = iom_add(i); fields(i)%vname="frc_volbot";     fields(i)%grid="grid_scalar" 
     529        i = iom_add(i); fields(i)%vname="frc_temtop";     fields(i)%grid="grid_scalar" 
     530        i = iom_add(i); fields(i)%vname="frc_tembot";     fields(i)%grid="grid_scalar"  
     531        i = iom_add(i); fields(i)%vname="frc_sal";        fields(i)%grid="grid_scalar" 
     532        i = iom_add(i); fields(i)%vname="vol_loc_ini";    fields(i)%grid="grid_N" 
     533        i = iom_add(i); fields(i)%vname="tem_loc_ini";    fields(i)%grid="grid_N" 
     534        i = iom_add(i); fields(i)%vname="sal_loc_ini";    fields(i)%grid="grid_N" 
     535        i = iom_add(i); fields(i)%vname="sal_loc_ini";    fields(i)%grid="grid_N" 
     536!ICE/icedyn_adv_pra.F90 grid_Ni_3D - jpi,jpj,jpl  
     537        i = iom_add(i); fields(i)%vname="sxice";          fields(i)%grid="grid_Ni_3D" 
     538        i = iom_add(i); fields(i)%vname="syice";          fields(i)%grid="grid_Ni_3D" 
     539        i = iom_add(i); fields(i)%vname="sxxice";         fields(i)%grid="grid_Ni_3D" 
     540        i = iom_add(i); fields(i)%vname="syyice";         fields(i)%grid="grid_Ni_3D" 
     541        i = iom_add(i); fields(i)%vname="sxyice";         fields(i)%grid="grid_Ni_3D" 
     542        i = iom_add(i); fields(i)%vname="sxsn";           fields(i)%grid="grid_Ni_3D" 
     543        i = iom_add(i); fields(i)%vname="sysn";           fields(i)%grid="grid_Ni_3D" 
     544        i = iom_add(i); fields(i)%vname="sxxsn";          fields(i)%grid="grid_Ni_3D" 
     545        i = iom_add(i); fields(i)%vname="syysn";          fields(i)%grid="grid_Ni_3D" 
     546        i = iom_add(i); fields(i)%vname="sxysn";          fields(i)%grid="grid_Ni_3D" 
     547        i = iom_add(i); fields(i)%vname="sxa";            fields(i)%grid="grid_Ni_3D" 
     548        i = iom_add(i); fields(i)%vname="sya";            fields(i)%grid="grid_Ni_3D" 
     549        i = iom_add(i); fields(i)%vname="sxxa";           fields(i)%grid="grid_Ni_3D" 
     550        i = iom_add(i); fields(i)%vname="syya";           fields(i)%grid="grid_Ni_3D" 
     551        i = iom_add(i); fields(i)%vname="sxya";           fields(i)%grid="grid_Ni_3D" 
     552        i = iom_add(i); fields(i)%vname="sxsal";          fields(i)%grid="grid_Ni_3D" 
     553        i = iom_add(i); fields(i)%vname="sysal";          fields(i)%grid="grid_Ni_3D" 
     554        i = iom_add(i); fields(i)%vname="sxxsal";         fields(i)%grid="grid_Ni_3D" 
     555        i = iom_add(i); fields(i)%vname="syysal";         fields(i)%grid="grid_Ni_3D" 
     556        i = iom_add(i); fields(i)%vname="sxysal";         fields(i)%grid="grid_Ni_3D" 
     557        i = iom_add(i); fields(i)%vname="sxage";          fields(i)%grid="grid_Ni_3D" 
     558        i = iom_add(i); fields(i)%vname="syage";          fields(i)%grid="grid_Ni_3D" 
     559        i = iom_add(i); fields(i)%vname="sxxage";         fields(i)%grid="grid_Ni_3D" 
     560        i = iom_add(i); fields(i)%vname="syyage";         fields(i)%grid="grid_Ni_3D" 
     561        i = iom_add(i); fields(i)%vname="sxyage";         fields(i)%grid="grid_Ni_3D" 
     562!this part is in addition to 4D grids, to handle old format of SI3 resart 
     563!NEMO format restart 
     564        DO jk = 1, nlay_s 
     565           WRITE(zchar,'(I2.2)') jk 
     566           znam = 'sxc0'//'_l'//zchar 
     567           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     568           znam = 'syc0'//'_l'//zchar 
     569           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     570           znam = 'sxxc0'//'_l'//zchar 
     571           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     572           znam = 'syyc0'//'_l'//zchar 
     573           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     574           znam = 'sxyc0'//'_l'//zchar 
     575           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     576        END DO 
     577!XIOS format restart 
     578        i = iom_add(i); fields(i)%vname="sxc0";           fields(i)%grid="grid_Ns_4D" 
     579        i = iom_add(i); fields(i)%vname="syc0";           fields(i)%grid="grid_Ns_4D" 
     580        i = iom_add(i); fields(i)%vname="sxxc0";          fields(i)%grid="grid_Ns_4D" 
     581        i = iom_add(i); fields(i)%vname="syyc0";          fields(i)%grid="grid_Ns_4D" 
     582        i = iom_add(i); fields(i)%vname="sxxc0";          fields(i)%grid="grid_Ns_4D" 
     583        ! 
     584!NEMO format restart 
     585        DO jk = 1, nlay_i 
     586           WRITE(zchar,'(I2.2)') jk 
     587           znam = 'sxe'//'_l'//zchar 
     588           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     589           znam = 'sye'//'_l'//zchar   
     590           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     591           znam = 'sxxe'//'_l'//zchar 
     592           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     593           znam = 'syye'//'_l'//zchar 
     594           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     595           znam = 'sxye'//'_l'//zchar 
     596           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     597        ENDDO 
     598!XIOS format restart 
     599        i = iom_add(i); fields(i)%vname="sxe";           fields(i)%grid="grid_Ni_4D" 
     600        i = iom_add(i); fields(i)%vname="sye";           fields(i)%grid="grid_Ni_4D" 
     601        i = iom_add(i); fields(i)%vname="sxxe";          fields(i)%grid="grid_Ni_4D" 
     602        i = iom_add(i); fields(i)%vname="syye";          fields(i)%grid="grid_Ni_4D" 
     603        i = iom_add(i); fields(i)%vname="sxye";          fields(i)%grid="grid_Ni_4D" 
     604!common for both 
     605        i = iom_add(i); fields(i)%vname="sxap";          fields(i)%grid="grid_Ni_3D" 
     606        i = iom_add(i); fields(i)%vname="syap";          fields(i)%grid="grid_Ni_3D" 
     607        i = iom_add(i); fields(i)%vname="sxxap";         fields(i)%grid="grid_Ni_3D" 
     608        i = iom_add(i); fields(i)%vname="syyap";         fields(i)%grid="grid_Ni_3D" 
     609        i = iom_add(i); fields(i)%vname="sxyap";         fields(i)%grid="grid_Ni_3D" 
     610        i = iom_add(i); fields(i)%vname="sxvp";          fields(i)%grid="grid_Ni_3D" 
     611        i = iom_add(i); fields(i)%vname="syvp";          fields(i)%grid="grid_Ni_3D" 
     612        i = iom_add(i); fields(i)%vname="sxxvp";         fields(i)%grid="grid_Ni_3D" 
     613        i = iom_add(i); fields(i)%vname="syyvp";         fields(i)%grid="grid_Ni_3D" 
     614        i = iom_add(i); fields(i)%vname="sxyvp";         fields(i)%grid="grid_Ni_3D" 
     615        i = iom_add(i); fields(i)%vname="stress1_i";     fields(i)%grid="grid_N" 
     616        i = iom_add(i); fields(i)%vname="stress2_i";     fields(i)%grid="grid_N" 
     617        i = iom_add(i); fields(i)%vname="stress12_i";    fields(i)%grid="grid_N" 
     618        i = iom_add(i); fields(i)%vname="nn_fsbc";       fields(i)%grid="grid_scalar" 
     619        i = iom_add(i); fields(i)%vname="kt_ice";        fields(i)%grid="grid_scalar" 
     620        i = iom_add(i); fields(i)%vname="v_i";           fields(i)%grid="grid_Ni_3D" 
     621        i = iom_add(i); fields(i)%vname="v_s";           fields(i)%grid="grid_Ni_3D" 
     622        i = iom_add(i); fields(i)%vname="sv_i";          fields(i)%grid="grid_Ni_3D" 
     623        i = iom_add(i); fields(i)%vname="a_i";           fields(i)%grid="grid_Ni_3D" 
     624        i = iom_add(i); fields(i)%vname="t_su";          fields(i)%grid="grid_Ni_3D" 
     625        i = iom_add(i); fields(i)%vname="u_ice";         fields(i)%grid="grid_N" 
     626        i = iom_add(i); fields(i)%vname="v_ice";         fields(i)%grid="grid_N" 
     627!NEMO format restat 
     628        DO jk = 1, nlay_s 
     629           WRITE(zchar,'(I2.2)') jk 
     630           znam = 'e_s'//'_l'//zchar 
     631           i = iom_add(i); fields(i)%vname=znam;         fields(i)%grid="grid_Ni_3D" 
     632        END DO 
     633!XIOS format restart 
     634        i = iom_add(i); fields(i)%vname="e_s";           fields(i)%grid="grid_Ns_4D" 
     635!NEMO format restat 
     636        DO jk = 1, nlay_i 
     637           WRITE(zchar,'(I2.2)') jk 
     638           znam = 'e_i'//'_l'//zchar 
     639           i = iom_add(i); fields(i)%vname=znam;         fields(i)%grid="grid_Ni_3D" 
     640        END DO 
     641!XIOS format restart 
     642        i = iom_add(i); fields(i)%vname="e_i";           fields(i)%grid="grid_Ni_4D" 
     643!common for both 
     644        i = iom_add(i); fields(i)%vname="oa_i";          fields(i)%grid="grid_Ni_3D" 
     645        i = iom_add(i); fields(i)%vname="a_ip";          fields(i)%grid="grid_Ni_3D" 
     646        i = iom_add(i); fields(i)%vname="v_ip";          fields(i)%grid="grid_Ni_3D" 
     647        i = iom_add(i); fields(i)%vname="cnd_ice";       fields(i)%grid="grid_Ni_3D" 
     648        i = iom_add(i); fields(i)%vname="t1_ice";        fields(i)%grid="grid_Ni_3D" 
     649        i = iom_add(i); fields(i)%vname="snwice_mass";   fields(i)%grid="grid_N" 
     650        i = iom_add(i); fields(i)%vname="snwice_mass_b"; fields(i)%grid="grid_N" 
     651#endif 
    516652   END SUBROUTINE iom_set_rst_vars 
    517653 
    518654 
    519    SUBROUTINE iom_set_rstw_active(cdrst_file) 
     655   SUBROUTINE iom_set_rstw_active(drst_wfields, cdrst_file) 
    520656      !!--------------------------------------------------------------------- 
    521657      !!                   ***  SUBROUTINE iom_set_rstw_active   *** 
     
    525661      !!--------------------------------------------------------------------- 
    526662!sets enabled = .TRUE. for each field in restart file 
    527    CHARACTER(len=*) :: cdrst_file 
     663   CHARACTER(len=*), INTENT(IN) :: cdrst_file 
     664   TYPE(RST_FIELD),  INTENT(IN) :: drst_wfields(max_rst_fields) 
    528665#if defined key_iomput 
    529666   TYPE(xios_field) :: field_hdl 
     
    549686!define fields for restart context 
    550687        DO i = 1, max_rst_fields 
    551          IF( rst_wfields(i)%active ) THEN 
    552                 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_wfields(i)%vname)) 
    553                 SELECT CASE (TRIM(rst_wfields(i)%grid)) 
     688         IF( drst_wfields(i)%active ) THEN 
     689                CALL xios_add_child(file_hdl, field_hdl, TRIM(drst_wfields(i)%vname)) 
     690                SELECT CASE (TRIM(drst_wfields(i)%grid)) 
    554691                 CASE ("grid_N_3D") 
    555                     CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 
     692                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 
    556693                        domain_ref="grid_N", axis_ref="nav_lev", prec = 8, operation = "instant") 
    557694                 CASE ("grid_N") 
    558                     CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 
     695                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 
    559696                        domain_ref="grid_N", prec = 8, operation = "instant")  
    560697                 CASE ("grid_vector") 
    561                     CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 
     698                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 
    562699                         axis_ref="nav_lev", prec = 8, operation = "instant") 
    563700                 CASE ("grid_scalar") 
    564                     CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 
     701                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 
    565702                        scalar_ref = "grid_scalar", prec = 8, operation = "instant") 
    566703                END SELECT 
     
    588725   TYPE(xios_scalar)                 :: scalar_hdl  
    589726   TYPE(xios_scalargroup)            :: scalargroup_hdl  
     727   INTEGER                           :: ji 
    590728 
    591729     CALL xios_get_handle("domain_definition",domaingroup_hdl)  
     
    602740     CALL xios_get_handle("scalar_definition", scalargroup_hdl)  
    603741     CALL xios_add_child(scalargroup_hdl, scalar_hdl, "grid_scalar")  
     742#if defined key_si3 
     743     CALL xios_get_handle("axis_definition",axisgroup_hdl)  
     744     CALL xios_add_child(axisgroup_hdl, axis_hdl, "numcat") 
     745     CALL iom_set_axis_attr( "numcat", (/ (REAL(ji,wp), ji=1,jpl) /) ) 
     746     CALL xios_add_child(axisgroup_hdl, axis_hdl, "nlay_i") 
     747     CALL iom_set_axis_attr( "nlay_i", (/ (REAL(ji,wp), ji=1,nlay_i) /) ) 
     748     CALL xios_add_child(axisgroup_hdl, axis_hdl, "nlay_s") 
     749     CALL iom_set_axis_attr( "nlay_s", (/ (REAL(ji,wp), ji=1,nlay_s) /) ) 
     750#endif 
    604751#endif 
    605752   END SUBROUTINE iom_set_rst_context 
     
    614761#if defined key_iomput 
    615762      TYPE(xios_context) :: nemo_hdl 
    616  
     763       
    617764      IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
    618765        CALL xios_get_handle(TRIM(cdname),nemo_hdl) 
     
    9421089#if defined key_iomput 
    9431090         IF(lwp) WRITE(numout,*) 'XIOS RST READ (0D): ', trim(cdvar) 
    944          CALL iom_swap( TRIM(crxios_context) ) 
    9451091         CALL xios_recv_field( trim(cdvar), pvar) 
    946          CALL iom_swap( TRIM(cxios_context) ) 
    9471092#else 
    9481093         WRITE(ctmp1,*) 'Can not use XIOS in iom_g0d, file: '//trim(clname)//', var:'//trim(cdvar) 
     
    10101155      ENDIF 
    10111156   END SUBROUTINE iom_g3d 
     1157 
     1158   SUBROUTINE iom_g4d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr, ldxios ) 
     1159      INTEGER         , INTENT(in   )                             ::   kiomid    ! Identifier of the file 
     1160      INTEGER         , INTENT(in   )                             ::   kdom      ! Type of domain to be read 
     1161      CHARACTER(len=*), INTENT(in   )                             ::   cdvar     ! Name of the variable 
     1162      REAL(wp)        , INTENT(  out), DIMENSION(:,:,:,:)         ::   pvar      ! read field 
     1163      INTEGER         , INTENT(in   )                  , OPTIONAL ::   ktime     ! record number 
     1164      INTEGER         , INTENT(in   ), DIMENSION(4)    , OPTIONAL ::   kstart    ! start axis position of the reading  
     1165      INTEGER         , INTENT(in   ), DIMENSION(4)    , OPTIONAL ::   kcount    ! number of points in each axis 
     1166      LOGICAL         , INTENT(in   )                  , OPTIONAL ::   lrowattr  ! logical flag telling iom_get to 
     1167                                                                                 ! look for and use a file attribute 
     1168                                                                                 ! called open_ocean_jstart to set the start 
     1169                                                                                 ! value for the 2nd dimension (netcdf only) 
     1170      LOGICAL         , INTENT(in   ),               OPTIONAL ::   ldxios        ! read data using XIOS 
     1171      ! 
     1172      IF( kiomid > 0 ) THEN 
     1173         IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom       , cdvar        , pv_r4d=pvar,   & 
     1174              &                                                     ktime=ktime, kstart=kstart, kcount=kcount, & 
     1175              &                                                     lrowattr=lrowattr, ldxios=ldxios ) 
     1176      ENDIF 
     1177   END SUBROUTINE iom_g4d 
    10121178   !!---------------------------------------------------------------------- 
    10131179 
    10141180   SUBROUTINE iom_get_123d( kiomid, kdom  , cdvar ,   & 
    1015          &                  pv_r1d, pv_r2d, pv_r3d,   & 
     1181         &                  pv_r1d, pv_r2d, pv_r3d, pv_r4d,  & 
    10161182         &                  ktime , kstart, kcount,   & 
    10171183         &                  lrowattr, ldxios        ) 
     
    10291195      REAL(wp), DIMENSION(:,:)   , INTENT(  out), OPTIONAL ::   pv_r2d     ! read field (2D case) 
    10301196      REAL(wp), DIMENSION(:,:,:) , INTENT(  out), OPTIONAL ::   pv_r3d     ! read field (3D case) 
     1197      REAL(wp), DIMENSION(:,:,:,:),INTENT(  out), OPTIONAL ::   pv_r4d     ! read field (4D case) 
    10311198      INTEGER                    , INTENT(in   ), OPTIONAL ::   ktime      ! record number 
    10321199      INTEGER , DIMENSION(:)     , INTENT(in   ), OPTIONAL ::   kstart     ! start position of the reading in each axis  
     
    12931460#if defined key_iomput 
    12941461!would be good to be able to check which context is active and swap only if current is not restart 
    1295          CALL iom_swap( TRIM(crxios_context) )  
    1296          IF( PRESENT(pv_r3d) ) THEN 
     1462         IF( PRESENT(pv_r4d) ) THEN 
     1463            pv_r4d(:, :, :, :) = 0. 
     1464            if(lwp) write(numout,*) 'XIOS RST READ (4D): ',trim(cdvar) 
     1465            CALL xios_recv_field( trim(cdvar), pv_r4d) 
     1466            IF(idom /= jpdom_unknown ) then 
     1467                CALL lbc_lnk( 'iom', pv_r4d,'Z', -999., kfillmode = jpfillnothing) 
     1468            ENDIF 
     1469         ELSEIF( PRESENT(pv_r3d) ) THEN 
    12971470            pv_r3d(:, :, :) = 0. 
    12981471            if(lwp) write(numout,*) 'XIOS RST READ (3D): ',trim(cdvar) 
     
    13131486            CALL xios_recv_field( trim(cdvar), pv_r1d) 
    13141487         ENDIF 
    1315          CALL iom_swap( TRIM(cxios_context) ) 
    13161488#else 
    13171489         istop = istop + 1  
     
    13361508         IF( zscf /= 1.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) * zscf 
    13371509         IF( zofs /= 0.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) + zofs 
     1510      ELSEIF( PRESENT(pv_r4d) ) THEN 
     1511         IF( zscf /= 1.)   pv_r4d(:,:,:,:) = pv_r4d(:,:,:,:) * zscf 
     1512         IF( zofs /= 0.)   pv_r4d(:,:,:,:) = pv_r4d(:,:,:,:) + zofs 
    13381513      ENDIF 
    13391514      ! 
     
    23952570   END FUNCTION iom_sdate 
    23962571 
     2572   INTEGER FUNCTION iom_add(idm) 
     2573   INTEGER :: idm 
     2574 
     2575   iom_add = idm + 1 
     2576   IF( iom_add > max_rst_fields) THEN 
     2577     WRITE(ctmp1,*) 'E R R O R : iom_set_rst_vars SIZE of RST_FIELD array is too small' 
     2578     CALL ctl_stop( 'iom_add:', ctmp1 ) 
     2579   ENDIF 
     2580 
     2581   END FUNCTION iom_add 
     2582 
    23972583#else 
    23982584   !!---------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.