Changeset 8079


Ignore:
Timestamp:
2017-05-26T12:09:41+02:00 (3 years ago)
Author:
andmirek
Message:

#1882 a first working version with XIOS writing restart file. Works with MO suite u-am389

Location:
branches/UKMO/dev_r7573_xios_write/NEMOGCM
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/CONFIG/SHARED/namelist_ref

    r7540 r8079  
    5050   ln_clobber  = .false.   !  clobber (overwrite) an existing file 
    5151   nn_chunksz  =       0   !  chunksize (bytes) for NetCDF file (works only with iom_nf90 routines) 
     52   nn_wxios = 0      !  use XIOS to write restart file 0 - no, 1 - single file output, 2 - multiple file output 
    5253/ 
    5354! 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90

    r6487 r8079  
    3232   USE timing          ! preformance summary 
    3333   USE wrk_nemo        ! work arrays 
     34   USE iom_def, ONLY : lwxios 
    3435 
    3536   IMPLICIT NONE 
     
    304305        IF(lwp) WRITE(numout,*) ' dia_hsb_rst at it= ', kt,' date= ', ndastp 
    305306        IF(lwp) WRITE(numout,*) '~~~~~~~' 
    306  
    307         CALL iom_rstput( kt, nitrst, numrow, 'frc_v'   , frc_v     ) 
    308         CALL iom_rstput( kt, nitrst, numrow, 'frc_t'   , frc_t     ) 
    309         CALL iom_rstput( kt, nitrst, numrow, 'frc_s'   , frc_s     ) 
     307        IF( lwxios ) CALL iom_swap(      wxios_context          ) 
     308        CALL iom_rstput( kt, nitrst, numrow, 'frc_v'   , frc_v, lxios = lwxios) 
     309        CALL iom_rstput( kt, nitrst, numrow, 'frc_t'   , frc_t, lxios = lwxios) 
     310        CALL iom_rstput( kt, nitrst, numrow, 'frc_s'   , frc_s, lxios = lwxios) 
    310311        IF( .NOT. lk_vvl ) THEN 
    311            CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_t', frc_wn_t ) 
    312            CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_s', frc_wn_s ) 
     312           CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_t', frc_wn_t, lxios = lwxios) 
     313           CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_s', frc_wn_s, lxios = lwxios ) 
    313314        ENDIF 
    314         CALL iom_rstput( kt, nitrst, numrow, 'ssh_ini', ssh_ini ) 
    315         CALL iom_rstput( kt, nitrst, numrow, 'e3t_ini', e3t_ini ) 
    316         CALL iom_rstput( kt, nitrst, numrow, 'hc_loc_ini', hc_loc_ini ) 
    317         CALL iom_rstput( kt, nitrst, numrow, 'sc_loc_ini', sc_loc_ini ) 
     315        CALL iom_rstput( kt, nitrst, numrow, 'ssh_ini', ssh_ini, lxios = lwxios) 
     316        CALL iom_rstput( kt, nitrst, numrow, 'e3t_ini', e3t_ini, lxios = lwxios) 
     317        CALL iom_rstput( kt, nitrst, numrow, 'hc_loc_ini', hc_loc_ini, lxios = lwxios) 
     318        CALL iom_rstput( kt, nitrst, numrow, 'sc_loc_ini', sc_loc_ini, lxios = lwxios) 
    318319        IF( .NOT. lk_vvl ) THEN 
    319            CALL iom_rstput( kt, nitrst, numrow, 'ssh_hc_loc_ini', ssh_hc_loc_ini ) 
    320            CALL iom_rstput( kt, nitrst, numrow, 'ssh_sc_loc_ini', ssh_sc_loc_ini ) 
     320           CALL iom_rstput( kt, nitrst, numrow, 'ssh_hc_loc_ini', ssh_hc_loc_ini, lxios = lwxios ) 
     321           CALL iom_rstput( kt, nitrst, numrow, 'ssh_sc_loc_ini', ssh_sc_loc_ini, lxios = lwxios ) 
    321322        ENDIF 
    322323        ! 
     324        IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    323325     ENDIF 
    324326     ! 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/DOM/daymod.F90

    r6487 r8079  
    3535   USE timing          ! Timing 
    3636   USE restart         ! restart 
     37   USE iom_def, ONLY : lwxios 
    3738 
    3839   IMPLICIT NONE 
     
    359360         ENDIF 
    360361         ! calendar control 
    361          CALL iom_rstput( kt, nitrst, numrow, 'kt'     , REAL( kt    , wp) )   ! time-step 
    362          CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp) )   ! date 
    363          CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj            )   ! number of elapsed days since 
     362         IF( lwxios ) CALL iom_swap(      wxios_context          ) 
     363         CALL iom_rstput( kt, nitrst, numrow, 'kt'     , REAL( kt    , wp), lxios = lwxios )   ! time-step 
     364         CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp), lxios = lwxios )   ! date 
     365         CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj, lxios = lwxios            )   ! number of elapsed days since 
    364366         !                                                                     ! the begining of the run [s] 
     367         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    365368      ENDIF 
    366369      ! 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/DOM/domain.F90

    r6491 r8079  
    3838   USE timing          ! Timing 
    3939   USE lbclnk          ! ocean lateral boundary condition (or mpp link) 
     40   USE iom_def, ONLY:lwxios, wxioso ! write restart flag and output type 
    4041 
    4142   IMPLICIT NONE 
     
    138139         &             nn_no   , cn_exp    , cn_ocerst_in, cn_ocerst_out, ln_rstart , ln_rstdate, nn_rstctl,   & 
    139140         &             nn_it000, nn_itend  , nn_date0    , nn_leapy     , nn_istate , nn_stock ,   & 
    140          &             nn_write, ln_dimgnnn, ln_mskland  , ln_cfmeta    , ln_clobber, nn_chunksz, nn_euler 
     141         &             nn_write, ln_dimgnnn, ln_mskland  , ln_cfmeta    , ln_clobber, nn_chunksz, nn_euler, & 
     142         &             nn_wxios 
    141143      NAMELIST/namdom/ nn_bathy, rn_bathy , rn_e3zps_min, rn_e3zps_rat, nn_msh, rn_hmin,   & 
    142144         &             nn_acc   , rn_atfp     , rn_rdt      , rn_rdtmin ,                  & 
     
    152154      INTEGER  ::   ios                 ! Local integer output status for namelist read 
    153155      !!---------------------------------------------------------------------- 
    154  
     156      nn_wxios = 0 
    155157      REWIND( numnam_ref )              ! Namelist namrun in reference namelist : Parameters of the run 
    156158      READ  ( numnam_ref, namrun, IOSTAT = ios, ERR = 901) 
     
    193195         WRITE(numout,*) '      overwrite an existing file      ln_clobber = ', ln_clobber 
    194196         WRITE(numout,*) '      NetCDF chunksize (bytes)        nn_chunksz = ', nn_chunksz 
     197         WRITE(numout,*) '      Write restart using XIOS        nn_wxios   = ', nn_wxios 
    195198      ENDIF 
    196199 
     
    305308      rdtmax    = rn_rdtmin 
    306309      rdth      = rn_rdth 
     310      if (nn_wxios > 0) lwxios = .TRUE.  
     311      wxioso = nn_wxios 
    307312 
    308313      REWIND( numnam_ref )              ! Namelist namcla in reference namelist : Cross land advection 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90

    r6498 r8079  
    134134      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 
    135135 
     136      ! Set variables needed in iom for reastart write with XIOS 
     137      lr_vvl_ztilde = ln_vvl_ztilde 
     138      lr_vvl_layer   = ln_vvl_layer 
    136139      ! choose vertical coordinate (z_star, z_tilde or layer) 
    137140      ! ========================== 
     
    909912         !                                           ! all cases ! 
    910913         !                                           ! --------- ! 
    911          CALL iom_rstput( kt, nitrst, numrow, 'fse3t_b', fse3t_b(:,:,:) ) 
    912          CALL iom_rstput( kt, nitrst, numrow, 'fse3t_n', fse3t_n(:,:,:) ) 
     914         IF( lwxios ) CALL iom_swap(      wxios_context          )  
     915         CALL iom_rstput( kt, nitrst, numrow, 'fse3t_b', fse3t_b(:,:,:), lxios = lwxios ) 
     916         CALL iom_rstput( kt, nitrst, numrow, 'fse3t_n', fse3t_n(:,:,:), lxios = lwxios ) 
    913917         !                                           ! ----------------------- ! 
    914918         IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN  ! z_tilde and layer cases ! 
    915919            !                                        ! ----------------------- ! 
    916             CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_b', tilde_e3t_b(:,:,:) ) 
    917             CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_n', tilde_e3t_n(:,:,:) ) 
     920            CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_b', tilde_e3t_b(:,:,:), lxios = lwxios) 
     921            CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_n', tilde_e3t_n(:,:,:), lxios = lwxios) 
    918922         END IF 
    919923         !                                           ! -------------!     
    920924         IF( ln_vvl_ztilde ) THEN                    ! z_tilde case ! 
    921925            !                                        ! ------------ ! 
    922             CALL iom_rstput( kt, nitrst, numrow, 'hdiv_lf', hdiv_lf(:,:,:) ) 
     926            CALL iom_rstput( kt, nitrst, numrow, 'hdiv_lf', hdiv_lf(:,:,:), lxios = lwxios) 
    923927         ENDIF 
    924  
     928         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    925929      ENDIF 
    926930      IF( nn_timing == 1 )  CALL timing_stop('dom_vvl_rst') 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_flt.F90

    r7179 r8079  
    5151   USE agrif_opa_interp 
    5252#endif 
     53   USE iom_def, ONLY : lwxios 
    5354 
    5455   IMPLICIT NONE 
     
    405406! Caution : extra-hallow 
    406407! gcx and gcxb are defined as: DIMENSION(1-jpr2di:jpi+jpr2di,1-jpr2dj:jpj+jpr2dj) 
    407          CALL iom_rstput( kt, nitrst, numrow, 'gcx' , gcx (1:jpi,1:jpj) ) 
    408          CALL iom_rstput( kt, nitrst, numrow, 'gcxb', gcxb(1:jpi,1:jpj) ) 
     408         IF( lwxios ) CALL iom_swap(      wxios_context          ) 
     409         CALL iom_rstput( kt, nitrst, numrow, 'gcx' , gcx (1:jpi,1:jpj), lxios = lwxios ) 
     410         CALL iom_rstput( kt, nitrst, numrow, 'gcxb', gcxb(1:jpi,1:jpj), lxios = lwxios ) 
     411         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    409412      ENDIF 
    410413      ! 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r6487 r8079  
    4848   USE asminc          ! Assimilation increment 
    4949#endif 
     50   USE iom_def, ONLY : lwxios 
    5051 
    5152   IMPLICIT NONE 
     
    10381039      ! 
    10391040      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 
    1040          CALL iom_rstput( kt, nitrst, numrow, 'ub2_b'   , ub2_b  (:,:) ) 
    1041          CALL iom_rstput( kt, nitrst, numrow, 'vb2_b'   , vb2_b  (:,:) ) 
     1041         IF( lwxios ) CALL iom_swap(      wxios_context          ) 
     1042         CALL iom_rstput( kt, nitrst, numrow, 'ub2_b'   , ub2_b  (:,:), lxios = lwxios ) 
     1043         CALL iom_rstput( kt, nitrst, numrow, 'vb2_b'   , vb2_b  (:,:), lxios = lwxios ) 
    10421044         ! 
    10431045         IF (.NOT.ln_bt_av) THEN 
    1044             CALL iom_rstput( kt, nitrst, numrow, 'sshbb_e'  , sshbb_e(:,:) )  
    1045             CALL iom_rstput( kt, nitrst, numrow, 'ubb_e'    ,   ubb_e(:,:) ) 
    1046             CALL iom_rstput( kt, nitrst, numrow, 'vbb_e'    ,   vbb_e(:,:) ) 
    1047             CALL iom_rstput( kt, nitrst, numrow, 'sshb_e'   ,  sshb_e(:,:) ) 
    1048             CALL iom_rstput( kt, nitrst, numrow, 'ub_e'     ,    ub_e(:,:) ) 
    1049             CALL iom_rstput( kt, nitrst, numrow, 'vb_e'     ,    vb_e(:,:) ) 
     1046            CALL iom_rstput( kt, nitrst, numrow, 'sshbb_e'  , sshbb_e(:,:), lxios = lwxios )  
     1047            CALL iom_rstput( kt, nitrst, numrow, 'ubb_e'    ,   ubb_e(:,:), lxios = lwxios ) 
     1048            CALL iom_rstput( kt, nitrst, numrow, 'vbb_e'    ,   vbb_e(:,:), lxios = lwxios ) 
     1049            CALL iom_rstput( kt, nitrst, numrow, 'sshb_e'   ,  sshb_e(:,:), lxios = lwxios ) 
     1050            CALL iom_rstput( kt, nitrst, numrow, 'ub_e'     ,    ub_e(:,:), lxios = lwxios ) 
     1051            CALL iom_rstput( kt, nitrst, numrow, 'vb_e'     ,    vb_e(:,:), lxios = lwxios ) 
    10501052         ENDIF 
    10511053#if defined key_agrif 
    10521054         ! Save time integrated fluxes 
    10531055         IF ( .NOT.Agrif_Root() ) THEN 
    1054             CALL iom_rstput( kt, nitrst, numrow, 'ub2_i_b'  , ub2_i_b(:,:) ) 
    1055             CALL iom_rstput( kt, nitrst, numrow, 'vb2_i_b'  , vb2_i_b(:,:) ) 
    1056          ENDIF 
    1057 #endif 
     1056            CALL iom_rstput( kt, nitrst, numrow, 'ub2_i_b'  , ub2_i_b(:,:), lxios = lwxios ) 
     1057            CALL iom_rstput( kt, nitrst, numrow, 'vb2_i_b'  , vb2_i_b(:,:), lxios = lwxios ) 
     1058         ENDIF 
     1059#endif 
     1060         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    10581061      ENDIF 
    10591062      ! 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/IOM/in_out_manager.F90

    r6491 r8079  
    4949   LOGICAL       ::   ln_clobber       !: clobber (overwrite) an existing file 
    5050   INTEGER       ::   nn_chunksz       !: chunksize (bytes) for NetCDF file (works only with iom_nf90 routines) 
     51   INTEGER       ::   nn_wxios         !: write resart using xios 0 - no, 1 - single, 2 - multiple file output 
    5152#if defined key_netcdf4 
    5253   !!---------------------------------------------------------------------- 
     
    152153   LOGICAL       ::   lsp_area = .TRUE.     !: to make a control print over a specific area 
    153154   CHARACTER(lc) ::   cxios_context         !: context name used in xios 
     155   CHARACTER(lc) ::   wxios_context = "nemo_rstw" !: context name used in xios to write restart file 
    154156 
    155157   !!---------------------------------------------------------------------- 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90

    r7179 r8079  
    4141   USE dianam          ! build name of file 
    4242   USE xios 
     43   USE iom_def, ONLY : max_rst_fields, rst_fields, wxioso 
    4344# endif 
    4445   USE ioipsl, ONLY :  ju2ymds    ! for calendar 
    4546   USE crs             ! Grid coarsening 
     47   USE sbc_oce, ONLY : lk_oasis, ln_coupled_iceshelf_fluxes, ln_apr_dyn, ln_rnf, nn_components, jp_iam_sas 
     48   USE diadct, ONLY : lk_diadct 
    4649 
    4750   IMPLICIT NONE 
     51   !  values needed to set correctlyfiles in reast file when using XIOS for writing 
     52   LOGICAL, PUBLIC :: lr_vvl_ztilde, lr_vvl_layer, lr_traadv_cen2 
     53 
    4854   PUBLIC   !   must be public to be able to access iom_def through iom 
    49     
    5055#if defined key_iomput 
    5156   LOGICAL, PUBLIC, PARAMETER ::   lk_iomput = .TRUE.        !: iom_put flag 
     
    5358   LOGICAL, PUBLIC, PARAMETER ::   lk_iomput = .FALSE.       !: iom_put flag 
    5459#endif 
     60 
    5561   PUBLIC iom_init, iom_swap, iom_open, iom_close, iom_setkt, iom_varid, iom_get, iom_gettime, iom_rstput, iom_put 
    5662   PUBLIC iom_getatt, iom_use, iom_context_finalize 
     
    6268   PRIVATE iom_set_domain_attr, iom_set_axis_attr, iom_set_field_attr, iom_set_file_attr, iom_get_file_attr, iom_set_grid_attr 
    6369   PRIVATE set_grid, set_grid_bounds, set_scalar, set_xmlatt, set_mooring, iom_update_file_name, iom_sdate 
     70   PRIVATE set_rst_vars, set_rstw_active 
    6471# endif 
    6572 
     
    8592CONTAINS 
    8693 
    87    SUBROUTINE iom_init( cdname )  
     94   SUBROUTINE iom_init( cdname, filename, it )  
    8895      !!---------------------------------------------------------------------- 
    8996      !!                     ***  ROUTINE   *** 
     
    105112      ! 
    106113      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: z_bnds 
     114      CHARACTER(len=*), OPTIONAL, INTENT(in)  :: filename  
     115      LOGICAL :: lrst_context              ! is context related to restart 
     116      INTEGER, OPTIONAL :: it              ! timestep when subroutine was called 
    107117      !!---------------------------------------------------------------------- 
    108118#if ! defined key_xios2 
     
    116126      CALL xios_context_initialize(TRIM(clname), mpi_comm_opa) 
    117127      CALL iom_swap( cdname ) 
     128      lrst_context =  (TRIM(cdname) == TRIM(wxios_context)) 
    118129 
    119130      ! calendar parameters 
     
    136147          &                                    start_date = xios_date(nyear,nmonth,nday,0,0,0) ) 
    137148      END SELECT 
     149 
    138150#endif 
    139151      ! horizontal grid definition 
     
    141153      CALL set_scalar 
    142154 
    143       IF( TRIM(cdname) == TRIM(cxios_context) ) THEN   
    144          CALL set_grid( "T", glamt, gphit )  
    145          CALL set_grid( "U", glamu, gphiu ) 
    146          CALL set_grid( "V", glamv, gphiv ) 
    147          CALL set_grid( "W", glamt, gphit ) 
     155      IF( TRIM(cdname) == TRIM(cxios_context) .OR. lrst_context ) THEN   
     156         CALL set_grid( "T", glamt, gphit, ln_mskland )  
     157         CALL set_grid( "U", glamu, gphiu, ln_mskland ) 
     158         CALL set_grid( "V", glamv, gphiv, ln_mskland ) 
     159         CALL set_grid( "W", glamt, gphit, ln_mskland ) 
    148160         CALL set_grid_znl( gphit ) 
     161         CALL set_grid("N",glamt, gphit, .FALSE.)        ! not masked values 
    149162         ! 
    150          IF( ln_cfmeta ) THEN   ! Add additional grid metadata 
     163         IF( ln_cfmeta .AND. .NOT.lrst_context) THEN   ! Add additional grid metadata 
    151164            CALL iom_set_domain_attr("grid_T", area = e12t(nldi:nlei, nldj:nlej)) 
    152165            CALL iom_set_domain_attr("grid_U", area = e12u(nldi:nlei, nldj:nlej)) 
     
    163176         CALL dom_grid_crs   ! Save the parent grid information  & Switch to coarse grid domain 
    164177         ! 
    165          CALL set_grid( "T", glamt_crs, gphit_crs )  
    166          CALL set_grid( "U", glamu_crs, gphiu_crs )  
    167          CALL set_grid( "V", glamv_crs, gphiv_crs )  
    168          CALL set_grid( "W", glamt_crs, gphit_crs )  
     178         CALL set_grid( "T", glamt_crs, gphit_crs, ln_mskland )  
     179         CALL set_grid( "U", glamu_crs, gphiu_crs, ln_mskland )  
     180         CALL set_grid( "V", glamv_crs, gphiv_crs, ln_mskland )  
     181         CALL set_grid( "W", glamt_crs, gphit_crs, ln_mskland )  
    169182         CALL set_grid_znl( gphit_crs ) 
    170183          ! 
    171184         CALL dom_grid_glo   ! Return to parent grid domain 
    172185         ! 
    173          IF( ln_cfmeta ) THEN   ! Add additional grid metadata 
     186         IF( ln_cfmeta .AND. .NOT.lrst_context) THEN   ! Add additional grid metadata 
    174187            CALL iom_set_domain_attr("grid_T", area = e1e2t_crs(nldi:nlei, nldj:nlej)) 
    175188            CALL iom_set_domain_attr("grid_U", area = e1u_crs(nldi:nlei, nldj:nlej) * e2u_crs(nldi:nlei, nldj:nlej)) 
     
    184197 
    185198      ! vertical grid definition 
    186       CALL iom_set_axis_attr( "deptht", gdept_1d ) 
    187       CALL iom_set_axis_attr( "depthu", gdept_1d ) 
    188       CALL iom_set_axis_attr( "depthv", gdept_1d ) 
    189       CALL iom_set_axis_attr( "depthw", gdepw_1d ) 
     199      CALL iom_set_axis_attr( "deptht", paxis = gdept_1d ) 
     200      CALL iom_set_axis_attr( "depthu", paxis = gdept_1d ) 
     201      CALL iom_set_axis_attr( "depthv", paxis = gdept_1d ) 
     202      CALL iom_set_axis_attr( "depthw", paxis = gdepw_1d ) 
    190203 
    191204      ! Add vertical grid bounds 
     
    227240       
    228241      ! automatic definitions of some of the xml attributs 
    229       CALL set_xmlatt 
     242      IF( TRIM(cdname) == TRIM(wxios_context)) THEN 
     243!set names of the fields in restart file IF using XIOS to read/write data 
     244       CALL set_rst_vars() 
     245!set which fields are to be read from restart file 
     246       CALL set_rstw_active(filename, it) 
     247      ELSE 
     248       CALL set_xmlatt 
     249      ENDIF 
    230250 
    231251      CALL set_1point 
     
    241261 
    242262#endif 
    243        
     263 
    244264   END SUBROUTINE iom_init 
    245265 
     266    
     267   SUBROUTINE set_rst_vars() 
     268!set names for variables in restart file 
     269 
     270        rst_fields(:)%vname="NO_NAME";         rst_fields(:)%grid="NO_GRID" 
     271 
     272        rst_fields(1)%vname="rdt";             rst_fields(1)% grid="grid_scalar" 
     273        rst_fields(2)%vname="rdttra1";         rst_fields(2)% grid="grid_scalar"       
     274        rst_fields(3)%vname="un";              rst_fields(3)% grid="grid_N_3D" 
     275        rst_fields(4)%vname="ub";              rst_fields(4)% grid="grid_N_3D" 
     276        rst_fields(5)%vname="vn";              rst_fields(5)% grid="grid_N_3D" 
     277        rst_fields(6)%vname="vb";              rst_fields(6)% grid="grid_N_3D"   
     278        rst_fields(7)%vname="tn";              rst_fields(7)% grid="grid_N_3D" 
     279        rst_fields(8)%vname="tb";              rst_fields(8)% grid="grid_N_3D" 
     280        rst_fields(9)%vname="sn";              rst_fields(9)% grid="grid_N_3D" 
     281        rst_fields(10)%vname="sb";             rst_fields(10)%grid="grid_N_3D" 
     282        rst_fields(11)%vname="sshn";           rst_fields(11)%grid="grid_N" 
     283        rst_fields(12)%vname="sshb";           rst_fields(12)%grid="grid_N" 
     284        rst_fields(13)%vname="hdivn";          rst_fields(13)%grid="grid_N_3D" 
     285        rst_fields(14)%vname="hdivb";          rst_fields(14)%grid="grid_N_3D" 
     286        rst_fields(15)%vname="rhop";           rst_fields(15)%grid="grid_N_3D" 
     287        rst_fields(16)%vname="rotn";           rst_fields(16)%grid="grid_N_3D" 
     288        rst_fields(17)%vname="rotb";           rst_fields(17)%grid="grid_N_3D" 
     289        rst_fields(18)%vname="kt";             rst_fields(18)%grid="grid_scalar" 
     290        rst_fields(19)%vname="ndastp";         rst_fields(19)%grid="grid_scalar" 
     291        rst_fields(20)%vname="adatrj";         rst_fields(20)%grid="grid_scalar" 
     292        rst_fields(21)%vname="utau_b";         rst_fields(21)%grid="grid_N" 
     293        rst_fields(22)%vname="vtau_b";         rst_fields(22)%grid="grid_N" 
     294        rst_fields(23)%vname="qns_b";          rst_fields(23)%grid="grid_N" 
     295        rst_fields(24)%vname="emp_b";          rst_fields(24)%grid="grid_N" 
     296        rst_fields(25)%vname="sfx_b";          rst_fields(25)%grid="grid_N" 
     297        rst_fields(26)%vname="en" ;            rst_fields(26)%grid="grid_N_3D"  
     298        rst_fields(27)%vname="avt";            rst_fields(27)%grid="grid_N_3D" 
     299        rst_fields(28)%vname="avm";            rst_fields(28)%grid="grid_N_3D" 
     300        rst_fields(29)%vname="avmu";           rst_fields(29)%grid="grid_N_3D" 
     301        rst_fields(30)%vname="avmv";           rst_fields(30)%grid="grid_N_3D" 
     302        rst_fields(31)%vname="dissl";          rst_fields(31)%grid="grid_N_3D" 
     303        rst_fields(32)%vname="sbc_hc_b";       rst_fields(32)%grid="grid_N" 
     304        rst_fields(33)%vname="sbc_sc_b";       rst_fields(33)%grid="grid_N" 
     305        rst_fields(34)%vname="qsr_hc_b";       rst_fields(34)%grid="grid_N_3D" 
     306        rst_fields(35)%vname="gcx";            rst_fields(35)%grid="grid_N" 
     307        rst_fields(36)%vname="gcxb";           rst_fields(36)%grid="grid_N" 
     308        rst_fields(37)%vname="fraqsr_1lev";    rst_fields(37)%grid="grid_N" 
     309        rst_fields(38)%vname="greenland_icesheet_mass" 
     310                                               rst_fields(38)%grid="grid_scalar" 
     311        rst_fields(39)%vname="greenland_icesheet_timelapsed" 
     312                                               rst_fields(39)%grid="grid_scalar" 
     313        rst_fields(40)%vname="greenland_icesheet_mass_roc" 
     314                                               rst_fields(40)%grid="grid_scalar" 
     315        rst_fields(41)%vname="antarctica_icesheet_mass" 
     316                                               rst_fields(41)%grid="grid_scalar" 
     317        rst_fields(42)%vname="antarctica_icesheet_timelapsed" 
     318                                               rst_fields(42)%grid="grid_scalar" 
     319        rst_fields(43)%vname="antarctica_icesheet_mass_roc" 
     320                                               rst_fields(43)%grid="grid_scalar" 
     321        rst_fields(44)%vname="rhd";            rst_fields(44)%grid="grid_N_3D" 
     322        rst_fields(45)%vname="frc_v";          rst_fields(45)%grid="grid_scalar" 
     323        rst_fields(46)%vname="frc_t";          rst_fields(46)%grid="grid_scalar" 
     324        rst_fields(47)%vname="frc_s";          rst_fields(47)%grid="grid_scalar" 
     325        rst_fields(48)%vname="frc_wn_t";       rst_fields(48)%grid="grid_scalar" 
     326        rst_fields(49)%vname="frc_wn_s";       rst_fields(49)%grid="grid_scalar" 
     327        rst_fields(50)%vname="ssh_ini";        rst_fields(50)%grid="grid_N" 
     328        rst_fields(51)%vname="e3t_ini";        rst_fields(51)%grid="grid_N_3D" 
     329        rst_fields(52)%vname="hc_loc_ini";     rst_fields(52)%grid="grid_N_3D" 
     330        rst_fields(53)%vname="sc_loc_ini";     rst_fields(53)%grid="grid_N_3D" 
     331        rst_fields(54)%vname="ssh_hc_loc_ini"; rst_fields(54)%grid="grid_N" 
     332        rst_fields(55)%vname="ssh_sc_loc_ini"; rst_fields(55)%grid="grid_N" 
     333        rst_fields(56)%vname="fse3t_b";        rst_fields(56)%grid="grid_N_3D" 
     334        rst_fields(57)%vname="fse3t_n";        rst_fields(57)%grid="grid_N_3D" 
     335        rst_fields(58)%vname="tilde_e3t_b";    rst_fields(58)%grid="grid_N" 
     336        rst_fields(59)%vname="tilde_e3t_n";    rst_fields(59)%grid="grid_N" 
     337        rst_fields(60)%vname="hdiv_lf";        rst_fields(60)%grid="grid_N" 
     338        rst_fields(61)%vname="ub2_b";          rst_fields(61)%grid="grid_N" 
     339        rst_fields(62)%vname="vb2_b";          rst_fields(62)%grid="grid_N" 
     340        rst_fields(63)%vname="sshbb_e";        rst_fields(63)%grid="grid_N" 
     341        rst_fields(64)%vname="ubb_e";          rst_fields(64)%grid="grid_N" 
     342        rst_fields(65)%vname="vbb_e";          rst_fields(65)%grid="grid_N" 
     343        rst_fields(66)%vname="sshb_e";         rst_fields(66)%grid="grid_N" 
     344        rst_fields(67)%vname="ub_e";           rst_fields(67)%grid="grid_N" 
     345        rst_fields(68)%vname="vb_e";           rst_fields(68)%grid="grid_N" 
     346        rst_fields(69)%vname="fwf_isf_b";      rst_fields(69)%grid="grid_N" 
     347        rst_fields(70)%vname="isf_sc_b";       rst_fields(70)%grid="grid_N" 
     348        rst_fields(71)%vname="isf_hc_b";       rst_fields(71)%grid="grid_N" 
     349        rst_fields(72)%vname="ssh_ibb";        rst_fields(72)%grid="grid_N" 
     350        rst_fields(73)%vname="rnf_b";          rst_fields(73)%grid="grid_N" 
     351        rst_fields(74)%vname="rnf_hc_b";       rst_fields(74)%grid="grid_N" 
     352        rst_fields(75)%vname="rnf_sc_b";       rst_fields(75)%grid="grid_N" 
     353        rst_fields(76)%vname="nn_fsbc";        rst_fields(76)%grid="grid_scalar" 
     354        rst_fields(77)%vname="ssu_m";          rst_fields(77)%grid="grid_N" 
     355        rst_fields(78)%vname="ssv_m";          rst_fields(78)%grid="grid_N" 
     356        rst_fields(79)%vname="sst_m";          rst_fields(79)%grid="grid_N" 
     357        rst_fields(80)%vname="sss_m";          rst_fields(80)%grid="grid_N" 
     358        rst_fields(81)%vname="ssh_m";          rst_fields(81)%grid="grid_N" 
     359        rst_fields(82)%vname="e3t_m";          rst_fields(82)%grid="grid_N" 
     360        rst_fields(83)%vname="frq_m";          rst_fields(83)%grid="grid_N" 
     361        rst_fields(84)%vname="avmb";           rst_fields(84)%grid="Vgrid" 
     362        rst_fields(85)%vname="avtb";           rst_fields(85)%grid="Vgrid" 
     363 
     364   END SUBROUTINE set_rst_vars 
     365 
     366 
     367   SUBROUTINE set_rstw_active(rst_file, it) 
     368!sets enabled = .TRUE. for each field in restart file 
     369   CHARACTER(len=*) :: rst_file 
     370   INTEGER, INTENT(in) :: it ! timestep when iom_init was called 
     371   TYPE(xios_field) :: field_hdl 
     372   TYPE(xios_file) :: file_hdl 
     373   TYPE(xios_filegroup) :: filegroup_hdl 
     374   INTEGER :: i 
     375 
     376!set then name of the restart file (OUTPUT!) and enable available fields 
     377        if(lwp) WRITE(numout,*) 'Setting (output) restart filename (for XIOS) to: ',TRIM(rst_file) 
     378        CALL xios_get_handle("file_definition", filegroup_hdl ) 
     379        CALL xios_add_child(filegroup_hdl, file_hdl, 'wrestart') 
     380        IF(wxioso.eq.1) THEN 
     381            CALL xios_set_file_attr( "wrestart", type="one_file", name = TRIM(rst_file), & 
     382               enabled=.TRUE., mode="write", output_freq=xios_timestep) 
     383            if(lwp) write(numout,*) 'OPEN ', trim(rst_file), ' in one_file mode' 
     384        ELSE  
     385            CALL xios_set_file_attr( "wrestart", type="multiple_file", name = TRIM(rst_file),& 
     386               enabled=.TRUE., mode="write", output_freq=xios_timestep) 
     387          if(lwp) write(numout,*) 'OPEN ', trim(rst_file), ' in multiple_file mode' 
     388        ENDIF 
     389 
     390        CALL xios_set_file_attr( "wrestart", name=trim(rst_file)) 
     391        call flush(numout)  
     392!      CALL xios_update_calendar(it+1)       ! + one because we open restart file  
     393                                              ! 1 timestep before write 
     394 
     395!define fields for restart write context 
     396!in restart.F90 
     397        DO i= 1, 17 
     398           CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     399           CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     400                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     401           if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     402        ENDDO 
     403!in daymod.F90 
     404        DO i= 18, 20 
     405                      CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     406           CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     407                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     408           if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     409        ENDDO 
     410!end daymod.F90 
     411!sbcmod.F90 
     412        DO i= 21, 25 
     413           CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     414           CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     415                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     416           if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     417        ENDDO 
     418!end sbcmod.F90 
     419!ALL FIELDS ABOUVE ALWAYS 
     420!zdftke.F90 
     421#if defined key_zdftke   ||   defined key_esopa 
     422        DO i= 26, 31 
     423           CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     424           CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     425                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     426           if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     427        ENDDO 
     428#endif 
     429!end zdftke.F90 
     430!traqsr.F90 
     431       i = 34 
     432       CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     433       CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     434                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant")         
     435       if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     436       i = 37 
     437       CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     438       CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     439                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant")         
     440       if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     441!END traqsr.F90 
     442#if defined key_dynspg_flt   ||   defined key_esopa  
     443!dynspg_flt.F90 
     444        DO i= 35, 36 
     445           CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     446           CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     447                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     448           if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     449        ENDDO 
     450!end dynspg_flt.F90 
     451#endif 
     452!trasbc.F90 START 
     453        DO i= 32, 33 
     454           CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     455           CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     456                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     457           if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     458        ENDDO 
     459        DO i= 69, 71 
     460           CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     461           CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     462                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     463           if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     464        ENDDO 
     465!trasbc.F90 END 
     466        IF( lk_oasis) THEN 
     467        ! ln_coupled_iceshelf_fluxes uninitialised unless lk_oasis=true 
     468          IF( ln_coupled_iceshelf_fluxes ) THEN 
     469             DO i= 38, 43 
     470                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     471                CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     472                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     473                if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     474             ENDDO 
     475          ENDIF 
     476        ENDIF 
     477#if defined key_zdfkpp 
     478        i = 44 
     479        CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     480        CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     481             grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     482        if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     483#endif 
     484!dia_hsb_rst 
     485#if defined key_diadct 
     486        IF( lk_diadct     ) THEN 
     487             DO i= 45, 47 
     488                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     489                CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     490                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     491                if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     492             ENDDO 
     493 
     494             DO i= 50, 53 
     495                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     496                CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     497                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     498                if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     499             ENDDO 
     500             IF( .NOT. lk_vvl ) THEN 
     501             DO i= 48, 48 
     502                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     503                CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     504                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     505                if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     506             ENDDO 
     507             DO i= 54, 55 
     508                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     509                CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     510                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     511                if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     512             ENDDO 
     513             ENDIF 
     514        ENDIF 
     515#endif 
     516!end dia_hsb_rst 
     517!domvvl.F90 
     518        IF( lk_vvl ) THEN 
     519             DO i= 56, 57 
     520                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     521                CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     522                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     523                if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     524             ENDDO 
     525           IF( lr_vvl_ztilde .OR. lr_vvl_layer ) THEN  ! z_tilde and layer cases ! 
     526             DO i= 58, 59 
     527                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     528                CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     529                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     530                if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     531             ENDDO 
     532            END IF 
     533            IF( lr_vvl_ztilde ) THEN                    ! z_tilde case ! 
     534            i=60 
     535            CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     536            CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     537                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     538            if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     539            ENDIF 
     540         ENDIF 
     541!end domvvl.F90 
     542!dynspg_ts.F90 
     543#if defined key_dynspg_ts   ||   defined key_esopa 
     544         DO i= 61, 62 
     545            CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     546            CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     547                 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     548            if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     549         ENDDO 
     550         IF (.NOT.ln_bt_av) THEN 
     551            DO i= 63, 68 
     552               CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     553               CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     554                    grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     555               if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     556            ENDDO 
     557         ENDIF 
     558#if defined key_agrif 
     559         ! Save time integrated fluxes 
     560         IF ( .NOT.Agrif_Root() ) THEN 
     561            DO i= 84, 85 
     562               CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     563               CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     564                    grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     565               if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     566            ENDDO 
     567         ENDIF 
     568#endif 
     569#endif 
     570!end dynspg_ts.F90 
     571!sbcapr.F90 
     572          IF( ln_apr_dyn) THEN 
     573             i = 72 
     574             CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     575             CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     576                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     577             if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     578          ENDIF 
     579!end sbcapr.F90 
     580!sbcrnf.F90 
     581        IF( ln_rnf      ) THEN 
     582             DO i= 73, 75 
     583                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     584                CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     585                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     586                if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     587             ENDDO 
     588        ENDIF  
     589!end sbcrnf.F90 
     590!sbcssm.F90 
     591        IF( nn_components /= jp_iam_sas .AND. nn_fsbc .NE. 1) THEN 
     592             DO i= 76, 81 
     593                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     594                CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     595                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     596                if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     597             ENDDO 
     598             i = 83 
     599             CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     600             CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     601                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     602             if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     603             IF( lk_vvl )  THEN 
     604                i = 82 
     605                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     606                CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     607                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     608                if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     609             ENDIF  
     610        ENDIF 
     611!end sbcssm.F90 
     612       IF( lr_traadv_cen2   ) THEN 
     613            DO i= 84, 85 
     614                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     615                CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8,           & 
     616                     grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
     617                if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 
     618             ENDDO 
     619       ENDIF 
     620 
     621   END SUBROUTINE set_rstw_active 
    246622 
    247623   SUBROUTINE iom_swap( cdname ) 
     
    255631      TYPE(xios_context) :: nemo_hdl 
    256632 
     633      if(lwp) write(numout,*) 'iom_swap to: ',trim(cdname) 
    257634      IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
    258635        CALL xios_get_handle(TRIM(cdname),nemo_hdl) 
     
    9501327            ELSEIF( PRESENT(pv_r2d) ) THEN 
    9511328!CDIR COLLAPSE 
    952                IF( zscf /= 1.)   pv_r2d(:,:) = pv_r2d(:,:) * zscf 
     1329              IF( zscf /= 1.)   pv_r2d(:,:) = pv_r2d(:,:) * zscf 
    9531330!CDIR COLLAPSE 
    9541331               IF( zofs /= 0.)   pv_r2d(:,:) = pv_r2d(:,:) + zofs 
     
    10551432   !!                   INTERFACE iom_rstput 
    10561433   !!---------------------------------------------------------------------- 
    1057    SUBROUTINE iom_rp0d( kt, kwrite, kiomid, cdvar, pvar, ktype ) 
     1434   SUBROUTINE iom_rp0d( kt, kwrite, kiomid, cdvar, pvar, ktype, lxios ) 
    10581435      INTEGER         , INTENT(in)                         ::   kt       ! ocean time-step 
    10591436      INTEGER         , INTENT(in)                         ::   kwrite   ! writing time-step 
     
    10621439      REAL(wp)        , INTENT(in)                         ::   pvar     ! written field 
    10631440      INTEGER         , INTENT(in), OPTIONAL               ::   ktype    ! variable external type 
     1441      LOGICAL, OPTIONAL :: lxios   ! xios write flag 
     1442      LOGICAL :: lx                ! local xios write flag 
    10641443      INTEGER :: ivid   ! variable id 
    1065       IF( kiomid > 0 ) THEN 
    1066          IF( iom_file(kiomid)%nfid > 0 ) THEN 
    1067             ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
    1068             SELECT CASE (iom_file(kiomid)%iolib) 
    1069             CASE (jpioipsl )   ;   CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 
    1070             CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 
    1071             CASE (jprstdimg)   ;   IF( kt == kwrite )    CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pvar ) 
    1072             CASE DEFAULT      
    1073                CALL ctl_stop( 'iom_rp0d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 
    1074             END SELECT 
     1444 
     1445      lx = .FALSE. 
     1446      IF(PRESENT(lxios)) lx = lxios 
     1447      IF( lx ) THEN 
     1448#ifdef key_iomput 
     1449       if(lwp) write(numout,*) 'RESTART: write (XIOS 0D) ',trim(cdvar) 
     1450       CALL xios_send_field(trim(cdvar), pvar) 
     1451#endif 
     1452      ELSE 
     1453         IF( kiomid > 0 ) THEN 
     1454            IF( iom_file(kiomid)%nfid > 0 ) THEN 
     1455               ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
     1456               SELECT CASE (iom_file(kiomid)%iolib) 
     1457               CASE (jpioipsl )   ;   CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 
     1458               CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 
     1459               CASE (jprstdimg)   ;   IF( kt == kwrite )    CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pvar ) 
     1460               CASE DEFAULT      
     1461                  CALL ctl_stop( 'iom_rp0d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 
     1462               END SELECT 
     1463            ENDIF 
    10751464         ENDIF 
    10761465      ENDIF 
    10771466   END SUBROUTINE iom_rp0d 
    10781467 
    1079    SUBROUTINE iom_rp1d( kt, kwrite, kiomid, cdvar, pvar, ktype ) 
     1468   SUBROUTINE iom_rp1d( kt, kwrite, kiomid, cdvar, pvar, ktype, lxios ) 
    10801469      INTEGER         , INTENT(in)                         ::   kt       ! ocean time-step 
    10811470      INTEGER         , INTENT(in)                         ::   kwrite   ! writing time-step 
     
    10841473      REAL(wp)        , INTENT(in), DIMENSION(          :) ::   pvar     ! written field 
    10851474      INTEGER         , INTENT(in), OPTIONAL               ::   ktype    ! variable external type 
     1475      LOGICAL, OPTIONAL :: lxios   ! xios write flag 
     1476      LOGICAL :: lx                ! local xios write flag 
    10861477      INTEGER :: ivid   ! variable id 
    1087       IF( kiomid > 0 ) THEN 
    1088          IF( iom_file(kiomid)%nfid > 0 ) THEN 
    1089             ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
    1090             SELECT CASE (iom_file(kiomid)%iolib) 
    1091             CASE (jpioipsl )   ;   CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 
    1092             CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 
    1093             CASE (jprstdimg)   ;   IF( kt == kwrite )    CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r1d = pvar ) 
    1094             CASE DEFAULT      
    1095                CALL ctl_stop( 'iom_rp1d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 
    1096             END SELECT 
     1478 
     1479      lx = .FALSE. 
     1480      IF(PRESENT(lxios)) lx = lxios 
     1481      IF( lx ) THEN 
     1482#ifdef key_iomput 
     1483       if(lwp) write(numout,*) 'RESTART: write (XIOS 1D) ',trim(cdvar) 
     1484       CALL xios_send_field(trim(cdvar), pvar) 
     1485#endif 
     1486      ELSE 
     1487         IF( kiomid > 0 ) THEN 
     1488            IF( iom_file(kiomid)%nfid > 0 ) THEN 
     1489               ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
     1490               SELECT CASE (iom_file(kiomid)%iolib) 
     1491               CASE (jpioipsl )   ;   CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 
     1492               CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 
     1493               CASE (jprstdimg)   ;   IF( kt == kwrite )    CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r1d = pvar ) 
     1494               CASE DEFAULT      
     1495                  CALL ctl_stop( 'iom_rp1d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 
     1496               END SELECT 
     1497            ENDIF 
    10971498         ENDIF 
    10981499      ENDIF 
    10991500   END SUBROUTINE iom_rp1d 
    11001501 
    1101    SUBROUTINE iom_rp2d( kt, kwrite, kiomid, cdvar, pvar, ktype ) 
     1502   SUBROUTINE iom_rp2d( kt, kwrite, kiomid, cdvar, pvar, ktype, lxios ) 
    11021503      INTEGER         , INTENT(in)                         ::   kt       ! ocean time-step 
    11031504      INTEGER         , INTENT(in)                         ::   kwrite   ! writing time-step 
     
    11061507      REAL(wp)        , INTENT(in), DIMENSION(:,    :    ) ::   pvar     ! written field 
    11071508      INTEGER         , INTENT(in), OPTIONAL               ::   ktype    ! variable external type 
     1509      LOGICAL, OPTIONAL :: lxios   ! xios write flag 
     1510      LOGICAL :: lx                ! local xios write flag 
    11081511      INTEGER :: ivid   ! variable id 
    1109       IF( kiomid > 0 ) THEN 
    1110          IF( iom_file(kiomid)%nfid > 0 ) THEN 
    1111             ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
    1112             SELECT CASE (iom_file(kiomid)%iolib) 
    1113             CASE (jpioipsl )   ;   CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 
    1114             CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 
    1115             CASE (jprstdimg)   ;   IF( kt == kwrite )   CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r2d = pvar )  
    1116             CASE DEFAULT      
    1117                CALL ctl_stop( 'iom_rp2d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 
    1118             END SELECT 
     1512 
     1513      lx = .FALSE. 
     1514      IF(PRESENT(lxios)) lx = lxios 
     1515      IF( lx ) THEN 
     1516#ifdef key_iomput 
     1517       if(lwp) write(numout,*) 'RESTART: write (XIOS 2D) ',trim(cdvar) 
     1518       CALL xios_send_field(trim(cdvar), pvar) 
     1519#endif 
     1520      ELSE 
     1521         IF( kiomid > 0 ) THEN 
     1522            IF( iom_file(kiomid)%nfid > 0 ) THEN 
     1523               ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
     1524               SELECT CASE (iom_file(kiomid)%iolib) 
     1525               CASE (jpioipsl )   ;   CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 
     1526               CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 
     1527               CASE (jprstdimg)   ;   IF( kt == kwrite )   CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r2d = pvar )  
     1528               CASE DEFAULT      
     1529                  CALL ctl_stop( 'iom_rp2d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 
     1530               END SELECT 
     1531            ENDIF 
    11191532         ENDIF 
    11201533      ENDIF 
    11211534   END SUBROUTINE iom_rp2d 
    11221535 
    1123    SUBROUTINE iom_rp3d( kt, kwrite, kiomid, cdvar, pvar, ktype ) 
     1536   SUBROUTINE iom_rp3d( kt, kwrite, kiomid, cdvar, pvar, ktype, lxios ) 
    11241537      INTEGER         , INTENT(in)                         ::   kt       ! ocean time-step 
    11251538      INTEGER         , INTENT(in)                         ::   kwrite   ! writing time-step 
     
    11281541      REAL(wp)        , INTENT(in),       DIMENSION(:,:,:) ::   pvar     ! written field 
    11291542      INTEGER         , INTENT(in), OPTIONAL               ::   ktype    ! variable external type 
     1543      LOGICAL, OPTIONAL :: lxios   ! xios write flag 
     1544      LOGICAL :: lx                 ! local xios write flag 
    11301545      INTEGER :: ivid   ! variable id 
    1131       IF( kiomid > 0 ) THEN 
    1132          IF( iom_file(kiomid)%nfid > 0 ) THEN 
    1133             ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
    1134             SELECT CASE (iom_file(kiomid)%iolib) 
    1135             CASE (jpioipsl )   ;   CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 
    1136             CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 
    1137             CASE (jprstdimg)   ;   IF( kt == kwrite )   CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r3d = pvar ) 
    1138             CASE DEFAULT      
    1139                CALL ctl_stop( 'iom_rp3d: accepted IO library are only jpioipsl and jprstdimg' ) 
    1140             END SELECT 
     1546 
     1547      lx = .FALSE. 
     1548      IF(PRESENT(lxios)) lx = lxios 
     1549      IF( lx ) THEN 
     1550#ifdef key_iomput 
     1551       if(lwp) write(numout,*) 'RESTART: write (XIOS 3D) ',trim(cdvar) 
     1552       CALL xios_send_field(trim(cdvar), pvar) 
     1553#endif 
     1554      ELSE 
     1555         IF( kiomid > 0 ) THEN 
     1556            IF( iom_file(kiomid)%nfid > 0 ) THEN 
     1557               ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
     1558               SELECT CASE (iom_file(kiomid)%iolib) 
     1559               CASE (jpioipsl )   ;   CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 
     1560               CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 
     1561               CASE (jprstdimg)   ;   IF( kt == kwrite )   CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r3d = pvar ) 
     1562               CASE DEFAULT      
     1563                  CALL ctl_stop( 'iom_rp3d: accepted IO library are only jpioipsl and jprstdimg' ) 
     1564               END SELECT 
     1565            ENDIF 
    11411566         ENDIF 
    11421567      ENDIF 
     
    13671792 
    13681793 
    1369    SUBROUTINE set_grid( cdgrd, plon, plat ) 
     1794   SUBROUTINE set_grid( cdgrd, plon, plat, lmask ) 
    13701795      !!---------------------------------------------------------------------- 
    13711796      !!                     ***  ROUTINE set_grid  *** 
     
    13801805      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zmask 
    13811806      INTEGER  :: ni,nj 
     1807      LOGICAL :: lmask 
    13821808       
    13831809      ni=nlei-nldi+1 ; nj=nlej-nldj+1 
     
    13921818         &                                     latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /)))   
    13931819 
    1394       IF ( ln_mskland ) THEN 
     1820      IF ( lmask ) THEN 
    13951821         ! mask land points, keep values on coast line -> specific mask for U, V and W points 
    13961822         SELECT CASE ( cdgrd ) 
     
    14361862      ! Offset of coordinate representing bottom-left corner 
    14371863      SELECT CASE ( TRIM(cdgrd) ) 
    1438          CASE ('T', 'W') 
     1864         CASE ('T', 'W', 'N') 
    14391865            icnr = -1 ; jcnr = -1 
    14401866         CASE ('U') 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/IOM/iom_def.F90

    r6491 r8079  
    5151!$AGRIF_DO_NOT_TREAT 
    5252   INTEGER, PUBLIC            ::   iom_open_init = 0   !: used to initialize iom_file(:)%nfid to 0 
     53!XIOS read restart    
     54   LOGICAL, PUBLIC            ::   lwxios          !: read single file restart using XIOS 
     55   INTEGER, PUBLIC            ::   wxioso          !: type of restart file when writing using XIOS 1 - single, 2 - multiple 
     56 
     57 
    5358 
    5459   TYPE, PUBLIC ::   file_descriptor 
     
    7075   END TYPE file_descriptor 
    7176   TYPE(file_descriptor), DIMENSION(jpmax_files), PUBLIC ::   iom_file !: array containing the info for all opened files 
     77 
     78   INTEGER, PARAMETER, PUBLIC                   :: max_rst_fields = 85   
     79 
     80 
     81   TYPE, PUBLIC :: RST_FIELD   
     82    CHARACTER(len=30) :: vname ! names of variables in restart file 
     83    CHARACTER(len=30) :: grid 
     84   END TYPE RST_FIELD 
     85   TYPE(RST_FIELD), PUBLIC :: rst_fields(max_rst_fields) 
     86   !  values needed to set correctlyfiles in reast file when using XIOS for writing 
    7287!$AGRIF_END_DO_NOT_TREAT 
    73  
    7488   !!===================================================================== 
    7589END MODULE iom_def 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90

    r6755 r8079  
    2626   USE divcur          ! hor. divergence and curl      (div & cur routines) 
    2727   USE sbc_oce         ! for icesheet freshwater input variables 
     28   USE iom_def, ONLY : lwxios 
    2829 
    2930   IMPLICIT NONE 
     
    6566      !!---------------------------------------------------------------------- 
    6667      ! 
     68 
    6769      IF( kt == nit000 ) THEN   ! default definitions 
    6870         lrst_oce = .FALSE.    
     
    8486      ! we open and define the ocean restart file one time step before writing the data (-> at nitrst - 1) 
    8587      ! except if we write ocean restart files every time step or if an ocean restart file was writen at nitend - 1 
    86       IF( kt == nitrst - 1 .OR. nstock == 1 .OR. ( kt == nitend .AND. .NOT. lrst_oce ) ) THEN 
     88      ! NO, because the data is written 2 times on nitrst - 1 and nitrst 
     89!     IF( kt == nitrst - 1 .OR. nstock == 1 .OR. ( kt == nitend .AND. .NOT. lrst_oce ) ) THEN 
     90      IF( kt == nitrst .OR. nstock == 1 ) THEN 
    8791         IF( nitrst <= nitend .AND. nitrst > 0 ) THEN  
    8892            IF ( ln_rstdate ) THEN 
     
    103107            IF(lwp) THEN 
    104108               WRITE(numout,*) 
    105                SELECT CASE ( jprstlib ) 
    106                CASE ( jprstdimg )   ;   WRITE(numout,*)                            & 
    107                    '             open ocean restart binary file: ',TRIM(clpath)//clname 
    108                CASE DEFAULT         ;   WRITE(numout,*)                            & 
    109                    '             open ocean restart NetCDF file: ',TRIM(clpath)//clname 
    110                END SELECT 
    111                IF ( snc4set%luse )      WRITE(numout,*) '             opened for NetCDF4 chunking and compression' 
    112                IF( kt == nitrst - 1 ) THEN   ;   WRITE(numout,*) '             kt = nitrst - 1 = ', kt 
    113                ELSE                          ;   WRITE(numout,*) '             kt = '             , kt 
     109               IF(lwxios) THEN 
     110                  WRITE(numout,*)                                                     & 
     111                      '        XIOS open ocean restart NetCDF file: ',TRIM(clpath)//TRIM(clname) 
     112               ELSE 
     113                  SELECT CASE ( jprstlib ) 
     114                  CASE ( jprstdimg )   ;   WRITE(numout,*)                            & 
     115                      '             open ocean restart binary file: ',TRIM(clpath)//TRIM(clname) 
     116                  CASE DEFAULT         ;   WRITE(numout,*)                            & 
     117                      '             open ocean restart NetCDF file: ',TRIM(clpath)//TRIM(clname) 
     118                  END SELECT 
     119                  IF ( snc4set%luse )      WRITE(numout,*) '             opened for NetCDF4 chunking and compression' 
     120                  IF( kt == nitrst - 1 ) THEN   ;   WRITE(numout,*) '             kt = nitrst - 1 = ', kt 
     121                  ELSE                          ;   WRITE(numout,*) '             kt = '             , kt 
     122                  ENDIF 
    114123               ENDIF 
    115124            ENDIF 
    116125            ! 
    117             CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 
     126            IF(.NOT.lwxios) THEN 
     127               CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 
     128            ELSE 
     129               CALL iom_init( wxios_context, TRIM(clpath)//TRIM(clname) ) 
     130               CALL xios_update_calendar(nitrst) 
     131               CALL iom_swap(      cxios_context          ) 
     132            ENDIF 
     133!HAVE TO set lrst_oce to FALSE after XIOS restart is written !!!!!! 
     134!           THIS CALL SHOULDN't be here we open restart file on iter-1, move it 
     135!           to SUBROUTINE day to set the flag on the step when we save data 
    118136            lrst_oce = .TRUE. 
    119137         ENDIF 
    120138      ENDIF 
     139 
    121140      ! 
    122141   END SUBROUTINE rst_opn 
     
    134153      INTEGER, INTENT(in) ::   kt   ! ocean time-step 
    135154      !!---------------------------------------------------------------------- 
    136  
    137                      CALL iom_rstput( kt, nitrst, numrow, 'rdt'    , rdt       )   ! dynamics time step 
    138                      CALL iom_rstput( kt, nitrst, numrow, 'rdttra1', rdttra(1) )   ! surface tracer time step 
    139  
    140                      CALL iom_rstput( kt, nitrst, numrow, 'ub'     , ub        )     ! before fields 
    141                      CALL iom_rstput( kt, nitrst, numrow, 'vb'     , vb        ) 
    142                      CALL iom_rstput( kt, nitrst, numrow, 'tb'     , tsb(:,:,:,jp_tem) ) 
    143                      CALL iom_rstput( kt, nitrst, numrow, 'sb'     , tsb(:,:,:,jp_sal) ) 
    144                      CALL iom_rstput( kt, nitrst, numrow, 'rotb'   , rotb      ) 
    145                      CALL iom_rstput( kt, nitrst, numrow, 'hdivb'  , hdivb     ) 
    146                      CALL iom_rstput( kt, nitrst, numrow, 'sshb'   , sshb      ) 
     155                     IF(lwxios) CALL iom_swap(      wxios_context          ) 
     156                     CALL iom_rstput( kt, nitrst, numrow, 'rdt'    , rdt       , lxios = lwxios)   ! dynamics time step 
     157                     CALL iom_rstput( kt, nitrst, numrow, 'rdttra1', rdttra(1) , lxios = lwxios)   ! surface tracer time step 
     158 
     159                     CALL iom_rstput( kt, nitrst, numrow, 'ub'     , ub        , lxios = lwxios)     ! before fields 
     160                     CALL iom_rstput( kt, nitrst, numrow, 'vb'     , vb        , lxios = lwxios) 
     161                     CALL iom_rstput( kt, nitrst, numrow, 'tb'     , tsb(:,:,:,jp_tem) , lxios = lwxios) 
     162                     CALL iom_rstput( kt, nitrst, numrow, 'sb'     , tsb(:,:,:,jp_sal) , lxios = lwxios) 
     163                     CALL iom_rstput( kt, nitrst, numrow, 'rotb'   , rotb      , lxios = lwxios) 
     164                     CALL iom_rstput( kt, nitrst, numrow, 'hdivb'  , hdivb     , lxios = lwxios) 
     165                     CALL iom_rstput( kt, nitrst, numrow, 'sshb'   , sshb      , lxios = lwxios) 
    147166                     ! 
    148                      CALL iom_rstput( kt, nitrst, numrow, 'un'     , un        )     ! now fields 
    149                      CALL iom_rstput( kt, nitrst, numrow, 'vn'     , vn        ) 
    150                      CALL iom_rstput( kt, nitrst, numrow, 'tn'     , tsn(:,:,:,jp_tem) ) 
    151                      CALL iom_rstput( kt, nitrst, numrow, 'sn'     , tsn(:,:,:,jp_sal) ) 
    152                      CALL iom_rstput( kt, nitrst, numrow, 'rotn'   , rotn      ) 
    153                      CALL iom_rstput( kt, nitrst, numrow, 'hdivn'  , hdivn     ) 
    154                      CALL iom_rstput( kt, nitrst, numrow, 'sshn'   , sshn      ) 
    155                      CALL iom_rstput( kt, nitrst, numrow, 'rhop'   , rhop      ) 
     167                     CALL iom_rstput( kt, nitrst, numrow, 'un'     , un        , lxios = lwxios)     ! now fields 
     168                     CALL iom_rstput( kt, nitrst, numrow, 'vn'     , vn        , lxios = lwxios) 
     169                     CALL iom_rstput( kt, nitrst, numrow, 'tn'     , tsn(:,:,:,jp_tem) , lxios = lwxios) 
     170                     CALL iom_rstput( kt, nitrst, numrow, 'sn'     , tsn(:,:,:,jp_sal) , lxios = lwxios) 
     171                     CALL iom_rstput( kt, nitrst, numrow, 'rotn'   , rotn      , lxios = lwxios) 
     172                     CALL iom_rstput( kt, nitrst, numrow, 'hdivn'  , hdivn     , lxios = lwxios) 
     173                     CALL iom_rstput( kt, nitrst, numrow, 'sshn'   , sshn      , lxios = lwxios) 
     174                     CALL iom_rstput( kt, nitrst, numrow, 'rhop'   , rhop      , lxios = lwxios) 
    156175#if defined key_zdfkpp 
    157                      CALL iom_rstput( kt, nitrst, numrow, 'rhd'    , rhd       ) 
     176                     CALL iom_rstput( kt, nitrst, numrow, 'rhd'    , rhd       , lxios = lwxios) 
    158177#endif 
    159178                     IF( lk_oasis) THEN 
    160179                     ! ln_coupled_iceshelf_fluxes uninitialised unless lk_oasis=true 
    161180                     IF( ln_coupled_iceshelf_fluxes ) THEN 
    162                         CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_mass', greenland_icesheet_mass ) 
    163                         CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_timelapsed', greenland_icesheet_timelapsed ) 
    164                         CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_mass_roc', greenland_icesheet_mass_rate_of_change ) 
    165                         CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_mass', antarctica_icesheet_mass ) 
    166                         CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_timelapsed', antarctica_icesheet_timelapsed ) 
    167                         CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_mass_roc', antarctica_icesheet_mass_rate_of_change ) 
     181                        CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_mass', greenland_icesheet_mass ,& 
     182      &                                   lxios = lwxios) 
     183                        CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_timelapsed', greenland_icesheet_timelapsed ,& 
     184      &                                   lxios = lwxios) 
     185                        CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_mass_roc', greenland_icesheet_mass_rate_of_change ,& 
     186      &                                   lxios = lwxios) 
     187                        CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_mass', antarctica_icesheet_mass , & 
     188      &                                  lxios = lwxios) 
     189                        CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_timelapsed', antarctica_icesheet_timelapsed ,& 
     190      &                                   lxios = lwxios) 
     191                        CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_mass_roc', & 
     192      &                                  antarctica_icesheet_mass_rate_of_change , lxios = lwxios) 
    168193                     ENDIF 
    169194                     ENDIF 
    170195 
    171196      IF( kt == nitrst ) THEN 
    172          CALL iom_close( numrow )     ! close the restart file (only at last time step) 
     197         IF(.NOT.lwxios) THEN 
     198            CALL iom_close( numrow )     ! close the restart file (only at last time step) 
     199         ELSE 
     200            CALL iom_context_finalize(      wxios_context          ) 
     201            CALL iom_swap(      cxios_context          ) 
     202         ENDIF 
    173203!!gm         IF( .NOT. lk_trdmld )   lrst_oce = .FALSE. 
    174204!!gm  not sure what to do here   ===>>>  ask to Sebastian 
     
    178208               nitrst = nstocklist( nrst_lst ) 
    179209            ENDIF 
    180             lrst_oce = .FALSE. 
    181210      ENDIF 
    182211      ! 
     
    318347      ! 
    319348   END SUBROUTINE rst_read 
    320  
    321349   !!===================================================================== 
    322350END MODULE restart 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/SBC/sbcapr.F90

    r6486 r8079  
    1919   USE iom             ! IOM library 
    2020   USE lib_mpp         ! MPP library 
     21   USE iom_def, ONLY : lwxios 
    2122 
    2223   IMPLICIT NONE 
     
    156157         IF(lwp) WRITE(numout,*) 'sbc_apr : ssh_ib written in ocean restart file at it= ', kt,' date= ', ndastp 
    157158         IF(lwp) WRITE(numout,*) '~~~~' 
    158          CALL iom_rstput( kt, nitrst, numrow, 'ssh_ibb' , ssh_ib ) 
     159         IF( lwxios ) CALL iom_swap(      wxios_context          ) 
     160         CALL iom_rstput( kt, nitrst, numrow, 'ssh_ibb' , ssh_ib, lxios = lwxios ) 
     161         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    159162      ENDIF 
    160163      ! 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r6498 r8079  
    5454   USE sbcwave          ! Wave module 
    5555   USE bdy_par          ! Require lk_bdy 
     56   USE iom_def, ONLY : lwxios 
    5657 
    5758   IMPLICIT NONE 
     
    443444            &                    'at it= ', kt,' date= ', ndastp 
    444445         IF(lwp) WRITE(numout,*) '~~~~' 
    445          CALL iom_rstput( kt, nitrst, numrow, 'utau_b' , utau ) 
    446          CALL iom_rstput( kt, nitrst, numrow, 'vtau_b' , vtau ) 
    447          CALL iom_rstput( kt, nitrst, numrow, 'qns_b'  , qns  ) 
     446         IF( lwxios ) CALL iom_swap(      wxios_context          ) 
     447         CALL iom_rstput( kt, nitrst, numrow, 'utau_b' , utau, lxios = lwxios ) 
     448         CALL iom_rstput( kt, nitrst, numrow, 'vtau_b' , vtau, lxios = lwxios ) 
     449         CALL iom_rstput( kt, nitrst, numrow, 'qns_b'  , qns, lxios = lwxios  ) 
    448450         ! The 3D heat content due to qsr forcing is treated in traqsr 
    449451         ! CALL iom_rstput( kt, nitrst, numrow, 'qsr_b'  , qsr  ) 
    450          CALL iom_rstput( kt, nitrst, numrow, 'emp_b'  , emp  ) 
    451          CALL iom_rstput( kt, nitrst, numrow, 'sfx_b'  , sfx  ) 
     452         CALL iom_rstput( kt, nitrst, numrow, 'emp_b'  , emp, lxios = lwxios  ) 
     453         CALL iom_rstput( kt, nitrst, numrow, 'sfx_b'  , sfx, lxios = lwxios  ) 
     454         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    452455      ENDIF 
    453456 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90

    r6498 r8079  
    2727   USE eosbn2 
    2828   USE wrk_nemo        ! Memory allocation 
     29   USE iom_def, ONLY : lwxios 
    2930 
    3031   IMPLICIT NONE 
     
    171172            &                    'at it= ', kt,' date= ', ndastp 
    172173         IF(lwp) WRITE(numout,*) '~~~~' 
    173          CALL iom_rstput( kt, nitrst, numrow, 'rnf_b' , rnf ) 
    174          CALL iom_rstput( kt, nitrst, numrow, 'rnf_hc_b', rnf_tsc(:,:,jp_tem) ) 
    175          CALL iom_rstput( kt, nitrst, numrow, 'rnf_sc_b', rnf_tsc(:,:,jp_sal) ) 
     174         IF( lwxios ) CALL iom_swap(      wxios_context          ) 
     175         CALL iom_rstput( kt, nitrst, numrow, 'rnf_b' , rnf, lxios = lwxios ) 
     176         CALL iom_rstput( kt, nitrst, numrow, 'rnf_hc_b', rnf_tsc(:,:,jp_tem), lxios = lwxios ) 
     177         CALL iom_rstput( kt, nitrst, numrow, 'rnf_sc_b', rnf_tsc(:,:,jp_sal), lxios = lwxios ) 
     178         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    176179      ENDIF 
    177180      ! 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90

    r6486 r8079  
    2121   USE prtctl          ! Print control 
    2222   USE iom             ! IOM library 
     23   USE iom_def, ONLY : lwxios 
    2324 
    2425   IMPLICIT NONE 
     
    156157            IF(lwp) WRITE(numout,*) '~~~~~~~' 
    157158            zf_sbc = REAL( nn_fsbc, wp ) 
    158             CALL iom_rstput( kt, nitrst, numrow, 'nn_fsbc', zf_sbc )    ! sbc frequency 
    159             CALL iom_rstput( kt, nitrst, numrow, 'ssu_m'  , ssu_m  )    ! sea surface mean fields 
    160             CALL iom_rstput( kt, nitrst, numrow, 'ssv_m'  , ssv_m  ) 
    161             CALL iom_rstput( kt, nitrst, numrow, 'sst_m'  , sst_m  ) 
    162             CALL iom_rstput( kt, nitrst, numrow, 'sss_m'  , sss_m  ) 
    163             CALL iom_rstput( kt, nitrst, numrow, 'ssh_m'  , ssh_m  ) 
    164             IF( lk_vvl )   CALL iom_rstput( kt, nitrst, numrow, 'e3t_m'  , e3t_m  ) 
    165             CALL iom_rstput( kt, nitrst, numrow, 'frq_m'  , frq_m  ) 
    166             ! 
     159            IF( lwxios ) CALL iom_swap(      wxios_context          ) 
     160            CALL iom_rstput( kt, nitrst, numrow, 'nn_fsbc', zf_sbc, lxios = lwxios )    ! sbc frequency 
     161            CALL iom_rstput( kt, nitrst, numrow, 'ssu_m'  , ssu_m, lxios = lwxios  )    ! sea surface mean fields 
     162            CALL iom_rstput( kt, nitrst, numrow, 'ssv_m'  , ssv_m, lxios = lwxios  ) 
     163            CALL iom_rstput( kt, nitrst, numrow, 'sst_m'  , sst_m, lxios = lwxios  ) 
     164            CALL iom_rstput( kt, nitrst, numrow, 'sss_m'  , sss_m, lxios = lwxios  ) 
     165            CALL iom_rstput( kt, nitrst, numrow, 'ssh_m'  , ssh_m, lxios = lwxios  ) 
     166            IF( lk_vvl )   CALL iom_rstput( kt, nitrst, numrow, 'e3t_m'  , e3t_m   ) 
     167            CALL iom_rstput( kt, nitrst, numrow, 'frq_m'  , frq_m, lxios = lwxios ) 
     168            ! 
     169            IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    167170         ENDIF 
    168171         ! 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90

    r7061 r8079  
    4646 
    4747   !                              !!* Namelist namtra_adv * 
    48    LOGICAL ::   ln_traadv_cen2     ! 2nd order centered scheme flag 
     48!make ln_traadv_cen2 public. It's needed when XIOS is used to write restart file 
     49   LOGICAL, PUBLIC ::   ln_traadv_cen2     ! 2nd order centered scheme flag 
    4950   LOGICAL ::   ln_traadv_tvd      ! TVD scheme flag 
    5051   LOGICAL ::   ln_traadv_tvd_zts  ! TVD scheme flag with vertical sub time-stepping 
     
    257258      ! 
    258259      CALL tra_adv_mle_init          ! initialisation of the Mixed Layer Eddy parametrisation (MLE) 
     260      lr_traadv_cen2 = ln_traadv_cen2 
    259261      ! 
    260262   END SUBROUTINE tra_adv_init 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_cen2.F90

    r7179 r8079  
    3434   USE timing          ! Timing 
    3535   USE phycst 
     36   USE iom_def, ONLY : lwxios 
    3637 
    3738   IMPLICIT NONE 
     
    286287      ! avmb, avtb will be read in zdfini in restart case as they are used in zdftke, kpp etc... 
    287288      IF( lrst_oce .AND. cdtype == 'TRA' ) THEN 
    288          CALL iom_rstput( kt, nitrst, numrow, 'avmb', avmb ) 
    289          CALL iom_rstput( kt, nitrst, numrow, 'avtb', avtb ) 
     289         IF( lwxios ) CALL iom_swap(      wxios_context          ) 
     290         CALL iom_rstput( kt, nitrst, numrow, 'avmb', avmb, lxios = lwxios ) 
     291         CALL iom_rstput( kt, nitrst, numrow, 'avtb', avtb, lxios = lwxios ) 
     292         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    290293      ENDIF 
    291294      ! 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90

    r6498 r8079  
    3333   USE wrk_nemo       ! Memory Allocation 
    3434   USE timing         ! Timing 
     35   USE iom_def, ONLY : lwxios 
    3536 
    3637   IMPLICIT NONE 
     
    368369            &                    'at it= ', kt,' date= ', ndastp 
    369370         IF(lwp) WRITE(numout,*) '~~~~' 
    370          CALL iom_rstput( kt, nitrst, numrow, 'qsr_hc_b'   , qsr_hc      ) 
    371          CALL iom_rstput( kt, nitrst, numrow, 'fraqsr_1lev', fraqsr_1lev )   ! default definition in sbcssm  
     371         IF( lwxios ) CALL iom_swap(      wxios_context          ) 
     372         CALL iom_rstput( kt, nitrst, numrow, 'qsr_hc_b', qsr_hc, lxios = lwxios                ) 
     373         CALL iom_rstput( kt, nitrst, numrow, 'fraqsr_1lev', fraqsr_1lev, lxios = lwxios)   ! default definition in sbcssm  
     374         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    372375         ! 
    373376      ENDIF 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90

    r6793 r8079  
    3333   USE timing          ! Timing 
    3434   USE eosbn2 
     35   USE iom_def, ONLY : lwxios 
    3536 
    3637   IMPLICIT NONE 
     
    209210            &                    'at it= ', kt,' date= ', ndastp 
    210211         IF(lwp) WRITE(numout,*) '~~~~' 
    211          CALL iom_rstput( kt, nitrst, numrow, 'sbc_hc_b', sbc_tsc(:,:,jp_tem) ) 
    212          CALL iom_rstput( kt, nitrst, numrow, 'sbc_sc_b', sbc_tsc(:,:,jp_sal) ) 
     212         IF( lwxios ) CALL iom_swap(      wxios_context          ) 
     213         CALL iom_rstput( kt, nitrst, numrow, 'sbc_hc_b', sbc_tsc(:,:,jp_tem), lxios = lwxios ) 
     214         CALL iom_rstput( kt, nitrst, numrow, 'sbc_sc_b', sbc_tsc(:,:,jp_sal), lxios = lwxios ) 
     215         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    213216      ENDIF 
    214217      ! 
     
    253256               &                    'at it= ', kt,' date= ', ndastp 
    254257            IF(lwp) WRITE(numout,*) '~~~~' 
    255             CALL iom_rstput( kt, nitrst, numrow, 'fwf_isf_b', fwfisf(:,:)          ) 
    256             CALL iom_rstput( kt, nitrst, numrow, 'isf_hc_b' , risf_tsc(:,:,jp_tem) ) 
    257             CALL iom_rstput( kt, nitrst, numrow, 'isf_sc_b' , risf_tsc(:,:,jp_sal) ) 
     258            IF( lwxios ) CALL iom_swap(      wxios_context          ) 
     259            CALL iom_rstput( kt, nitrst, numrow, 'fwf_isf_b', fwfisf(:,:)         , lxios = lwxios) 
     260            CALL iom_rstput( kt, nitrst, numrow, 'isf_hc_b' , risf_tsc(:,:,jp_tem), lxios = lwxios) 
     261            CALL iom_rstput( kt, nitrst, numrow, 'isf_sc_b' , risf_tsc(:,:,jp_sal), lxios = lwxios) 
     262            IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    258263         ENDIF 
    259264      END IF 
  • branches/UKMO/dev_r7573_xios_write/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90

    r6498 r8079  
    5353   USE timing         ! Timing 
    5454   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
     55   USE iom_def, ONLY : lwxios 
    5556#if defined key_agrif 
    5657   USE agrif_opa_interp 
     
    970971        !                                   ! ------------------- 
    971972        IF(lwp) WRITE(numout,*) '---- tke-rst ----' 
    972         CALL iom_rstput( kt, nitrst, numrow, 'en'   , en     ) 
    973         CALL iom_rstput( kt, nitrst, numrow, 'avt'  , avt_k  ) 
    974         CALL iom_rstput( kt, nitrst, numrow, 'avm'  , avm_k  ) 
    975         CALL iom_rstput( kt, nitrst, numrow, 'avmu' , avmu_k ) 
    976         CALL iom_rstput( kt, nitrst, numrow, 'avmv' , avmv_k ) 
    977         CALL iom_rstput( kt, nitrst, numrow, 'dissl', dissl  ) 
     973        IF( lwxios ) CALL iom_swap(      wxios_context          ) 
     974        CALL iom_rstput( kt, nitrst, numrow, 'en'   , en    , lxios = lwxios ) 
     975        CALL iom_rstput( kt, nitrst, numrow, 'avt'  , avt_k , lxios = lwxios ) 
     976        CALL iom_rstput( kt, nitrst, numrow, 'avm'  , avm_k , lxios = lwxios ) 
     977        CALL iom_rstput( kt, nitrst, numrow, 'avmu' , avmu_k, lxios = lwxios ) 
     978        CALL iom_rstput( kt, nitrst, numrow, 'avmv' , avmv_k, lxios = lwxios ) 
     979        CALL iom_rstput( kt, nitrst, numrow, 'dissl', dissl , lxios = lwxios ) 
     980        IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    978981        ! 
    979982     ENDIF 
Note: See TracChangeset for help on using the changeset viewer.