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 8987 – NEMO

Changeset 8987


Ignore:
Timestamp:
2017-12-12T11:41:19+01:00 (6 years ago)
Author:
timgraham
Message:

Merge in XIOS read/write branch again

Location:
branches/2017/dev_METO_2017/NEMOGCM
Files:
28 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_METO_2017/NEMOGCM/CONFIG/SHARED/namelist_ref

    r8985 r8987  
    5353   ln_clobber  = .true.    !  clobber (overwrite) an existing file 
    5454   nn_chunksz  =       0   !  chunksize (bytes) for NetCDF file (works only with iom_nf90 routines) 
     55   ln_xios_read = .FALSE.  !  use XIOS to read restart file (only for a single file restart) 
     56   nn_wxios = 0      !  use XIOS to write restart file 0 - no, 1 - single file output, 2 - multiple file output 
    5557/ 
    5658! 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90

    r8924 r8987  
    255255           IF(lwp) WRITE(numout,*) ' dia_hsb_rst at it= ', kt,' date= ', ndastp 
    256256           IF(lwp) WRITE(numout,*) '~~~~~~~' 
    257            CALL iom_get( numror, 'frc_v', frc_v ) 
    258            CALL iom_get( numror, 'frc_t', frc_t ) 
    259            CALL iom_get( numror, 'frc_s', frc_s ) 
     257           CALL iom_get( numror, 'frc_v', frc_v, ldxios = lrxios  ) 
     258           CALL iom_get( numror, 'frc_t', frc_t, ldxios = lrxios ) 
     259           CALL iom_get( numror, 'frc_s', frc_s, ldxios = lrxios ) 
     260           CALL iom_get( numror, jpdom_autoglo, 'surf_ini', surf_ini, ldxios = lrxios ) ! ice sheet coupling 
     261           CALL iom_get( numror, jpdom_autoglo, 'ssh_ini', ssh_ini(:,:), ldxios = lrxios ) 
     262           CALL iom_get( numror, jpdom_autoglo, 'e3t_ini', e3t_ini(:,:,:), ldxios = lrxios ) 
     263           CALL iom_get( numror, jpdom_autoglo, 'hc_loc_ini', hc_loc_ini(:,:,:), ldxios = lrxios ) 
     264           CALL iom_get( numror, jpdom_autoglo, 'sc_loc_ini', sc_loc_ini(:,:,:), ldxios = lrxios ) 
    260265           IF( ln_linssh ) THEN 
    261               CALL iom_get( numror, 'frc_wn_t', frc_wn_t ) 
    262               CALL iom_get( numror, 'frc_wn_s', frc_wn_s ) 
    263            ENDIF 
    264            CALL iom_get( numror, jpdom_autoglo, 'surf_ini', surf_ini ) ! ice sheet coupling 
    265            CALL iom_get( numror, jpdom_autoglo, 'ssh_ini', ssh_ini(:,:) ) 
    266            CALL iom_get( numror, jpdom_autoglo, 'e3t_ini', e3t_ini(:,:,:) ) 
    267            CALL iom_get( numror, jpdom_autoglo, 'hc_loc_ini', hc_loc_ini(:,:,:) ) 
    268            CALL iom_get( numror, jpdom_autoglo, 'sc_loc_ini', sc_loc_ini(:,:,:) ) 
    269            IF( ln_linssh ) THEN 
    270               CALL iom_get( numror, jpdom_autoglo, 'ssh_hc_loc_ini', ssh_hc_loc_ini(:,:) ) 
    271               CALL iom_get( numror, jpdom_autoglo, 'ssh_sc_loc_ini', ssh_sc_loc_ini(:,:) ) 
     266              CALL iom_get( numror, jpdom_autoglo, 'ssh_hc_loc_ini', ssh_hc_loc_ini(:,:), ldxios = lrxios ) 
     267              CALL iom_get( numror, jpdom_autoglo, 'ssh_sc_loc_ini', ssh_sc_loc_ini(:,:), ldxios = lrxios ) 
     268              CALL iom_get( numror, 'frc_wn_t', frc_wn_t, ldxios = lrxios ) 
     269              CALL iom_get( numror, 'frc_wn_s', frc_wn_s, ldxios = lrxios ) 
    272270           ENDIF 
    273271       ELSE 
     
    308306        IF(lwp) WRITE(numout,*) ' dia_hsb_rst at it= ', kt,' date= ', ndastp 
    309307        IF(lwp) WRITE(numout,*) '~~~~~~~' 
    310  
    311         CALL iom_rstput( kt, nitrst, numrow, 'frc_v'   , frc_v     ) 
    312         CALL iom_rstput( kt, nitrst, numrow, 'frc_t'   , frc_t     ) 
    313         CALL iom_rstput( kt, nitrst, numrow, 'frc_s'   , frc_s     ) 
     308        IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
     309        CALL iom_rstput( kt, nitrst, numrow, 'frc_v'   , frc_v, ldxios = lwxios) 
     310        CALL iom_rstput( kt, nitrst, numrow, 'frc_t'   , frc_t, ldxios = lwxios) 
     311        CALL iom_rstput( kt, nitrst, numrow, 'frc_s'   , frc_s, ldxios = lwxios) 
     312        CALL iom_rstput( kt, nitrst, numrow, 'surf_ini', surf_ini, ldxios = lwxios )      ! ice sheet coupling 
     313        CALL iom_rstput( kt, nitrst, numrow, 'ssh_ini', ssh_ini(:,:), ldxios = lwxios ) 
     314        CALL iom_rstput( kt, nitrst, numrow, 'e3t_ini', e3t_ini(:,:,:), ldxios = lwxios ) 
     315        CALL iom_rstput( kt, nitrst, numrow, 'hc_loc_ini', hc_loc_ini(:,:,:), ldxios = lwxios ) 
     316        CALL iom_rstput( kt, nitrst, numrow, 'sc_loc_ini', sc_loc_ini(:,:,:), ldxios = lwxios ) 
    314317        IF( ln_linssh ) THEN 
    315            CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_t', frc_wn_t ) 
    316            CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_s', frc_wn_s ) 
    317         ENDIF 
    318         CALL iom_rstput( kt, nitrst, numrow, 'surf_ini', surf_ini )      ! ice sheet coupling 
    319         CALL iom_rstput( kt, nitrst, numrow, 'ssh_ini', ssh_ini(:,:) ) 
    320         CALL iom_rstput( kt, nitrst, numrow, 'e3t_ini', e3t_ini(:,:,:) ) 
    321         CALL iom_rstput( kt, nitrst, numrow, 'hc_loc_ini', hc_loc_ini(:,:,:) ) 
    322         CALL iom_rstput( kt, nitrst, numrow, 'sc_loc_ini', sc_loc_ini(:,:,:) ) 
    323         IF( ln_linssh ) THEN 
    324            CALL iom_rstput( kt, nitrst, numrow, 'ssh_hc_loc_ini', ssh_hc_loc_ini(:,:) ) 
    325            CALL iom_rstput( kt, nitrst, numrow, 'ssh_sc_loc_ini', ssh_sc_loc_ini(:,:) ) 
     318           CALL iom_rstput( kt, nitrst, numrow, 'ssh_hc_loc_ini', ssh_hc_loc_ini(:,:), ldxios = lwxios ) 
     319           CALL iom_rstput( kt, nitrst, numrow, 'ssh_sc_loc_ini', ssh_sc_loc_ini(:,:), ldxios = lwxios ) 
     320           CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_t', frc_wn_t, ldxios = lwxios) 
     321           CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_s', frc_wn_s, ldxios = lwxios ) 
    326322        ENDIF 
    327323        ! 
     324        IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    328325     ENDIF 
    329326     ! 
     
    367364      IF( .NOT. ln_diahsb )   RETURN 
    368365 
     366      IF(lwxios) THEN 
     367! define variables in restart file when writing with XIOS 
     368        CALL iom_set_rstw_var_active('frc_v') 
     369        CALL iom_set_rstw_var_active('frc_t') 
     370        CALL iom_set_rstw_var_active('frc_s') 
     371        CALL iom_set_rstw_var_active('surf_ini') 
     372        CALL iom_set_rstw_var_active('ssh_ini') 
     373        CALL iom_set_rstw_var_active('e3t_ini') 
     374        CALL iom_set_rstw_var_active('hc_loc_ini') 
     375        CALL iom_set_rstw_var_active('sc_loc_ini') 
     376        IF( ln_linssh ) THEN 
     377           CALL iom_set_rstw_var_active('ssh_hc_loc_ini') 
     378           CALL iom_set_rstw_var_active('ssh_sc_loc_ini') 
     379           CALL iom_set_rstw_var_active('frc_wn_t') 
     380           CALL iom_set_rstw_var_active('frc_wn_s') 
     381        ENDIF 
     382      ENDIF 
    369383      ! ------------------- ! 
    370384      ! 1 - Allocate memory ! 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/DOM/daymod.F90

    r8924 r8987  
    143143      CALL day( nit000 ) 
    144144      ! 
     145      IF( lwxios ) THEN 
     146! define variables in restart file when writing with XIOS 
     147          CALL iom_set_rstw_var_active('kt') 
     148          CALL iom_set_rstw_var_active('ndastp') 
     149          CALL iom_set_rstw_var_active('adatrj') 
     150          CALL iom_set_rstw_var_active('ntime') 
     151      ENDIF 
     152 
    145153   END SUBROUTINE day_init 
    146154 
     
    318326         IF( iom_varid( numror, 'kt', ldstop = .FALSE. ) > 0 ) THEN 
    319327            ! Get Calendar informations 
    320             CALL iom_get( numror, 'kt', zkt )   ! last time-step of previous run 
     328            CALL iom_get( numror, 'kt', zkt, ldxios = lrxios )   ! last time-step of previous run 
    321329            IF(lwp) THEN 
    322330               WRITE(numout,*) ' *** Info read in restart : ' 
     
    337345            IF ( nrstdt == 2 ) THEN 
    338346               ! read the parameters corresponding to nit000 - 1 (last time step of previous run) 
    339                CALL iom_get( numror, 'ndastp', zndastp ) 
     347               CALL iom_get( numror, 'ndastp', zndastp, ldxios = lrxios ) 
    340348               ndastp = NINT( zndastp ) 
    341                CALL iom_get( numror, 'adatrj', adatrj ) 
    342           CALL iom_get( numror, 'ntime', ktime ) 
     349               CALL iom_get( numror, 'adatrj', adatrj , ldxios = lrxios ) 
     350          CALL iom_get( numror, 'ntime' , ktime  , ldxios = lrxios ) 
    343351          nn_time0=INT(ktime) 
    344352               ! calculate start time in hours and minutes 
     
    399407         ENDIF 
    400408         ! calendar control 
    401          CALL iom_rstput( kt, nitrst, numrow, 'kt'     , REAL( kt    , wp) )   ! time-step 
    402          CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp) )   ! date 
    403          CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj            )   ! number of elapsed days since 
    404          !                                                                     ! the begining of the run [s] 
    405     CALL iom_rstput( kt, nitrst, numrow, 'ntime'  , REAL( nn_time0, wp) ) ! time 
     409         IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
     410         CALL iom_rstput( kt, nitrst, numrow, 'kt'     , REAL( kt    , wp)  , ldxios = lwxios )   ! time-step 
     411         CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp)  , ldxios = lwxios )   ! date 
     412         CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj             , ldxios = lwxios            )   ! number of elapsed days since 
     413         !                                                                                                   ! the begining of the run [s] 
     414    CALL iom_rstput( kt, nitrst, numrow, 'ntime'  , REAL( nn_time0, wp), ldxios = lwxios ) ! time 
     415         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    406416      ENDIF 
    407417      ! 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/DOM/domain.F90

    r8985 r8987  
    6161CONTAINS 
    6262 
    63    SUBROUTINE dom_init 
     63   SUBROUTINE dom_init(cdstr) 
    6464      !!---------------------------------------------------------------------- 
    6565      !!                  ***  ROUTINE dom_init  *** 
     
    7979      INTEGER ::   iconf = 0    ! local integers 
    8080      CHARACTER (len=64) ::   cform = "(A12, 3(A13, I7))"  
     81      CHARACTER (len=*), INTENT(IN) :: cdstr                  ! model: NEMO or SAS. Determines core restart variables 
    8182      INTEGER , DIMENSION(jpi,jpj) ::   ik_top , ik_bot       ! top and bottom ocean level 
    8283      REAL(wp), DIMENSION(jpi,jpj) ::   z1_hu_0, z1_hv_0 
     
    128129      CALL dom_glo                     ! global domain versus local domain 
    129130      CALL dom_nam                     ! read namelist ( namrun, namdom ) 
     131      ! 
     132      IF( lwxios ) THEN 
     133!define names for restart write and set core output (restart.F90) 
     134         CALL iom_set_rst_vars(rst_wfields) 
     135         CALL iom_set_rstw_core(cdstr) 
     136      ENDIF 
     137!reset namelist for SAS 
     138      IF(cdstr == 'SAS') THEN 
     139         IF(lrxios) THEN 
     140               IF(lwp) write(numout,*) 'Disable reading restart file using XIOS for SAS' 
     141               lrxios = .FALSE. 
     142         ENDIF 
     143      ENDIF 
     144      ! 
    130145      CALL dom_clo( cn_cfg, nn_cfg )   ! Closed seas and lake 
    131146      CALL dom_hgr                     ! Horizontal mesh 
     
    285300         &             nn_it000, nn_itend , nn_date0    , nn_time0     , nn_leapy  , nn_istate ,     & 
    286301         &             nn_stock, nn_write , ln_mskland  , ln_clobber   , nn_chunksz, nn_euler  ,     & 
    287          &             ln_cfmeta, ln_iscpl 
     302         &             ln_cfmeta, ln_iscpl, ln_xios_read, nn_wxios 
    288303      NAMELIST/namdom/ ln_linssh, nn_closea, nn_msh, rn_isfhmin, rn_rdt, rn_atfp, ln_crs 
    289304#if defined key_netcdf4 
     
    293308      !!---------------------------------------------------------------------- 
    294309      ! 
     310      ln_xios_read = .false.            ! set in case ln_xios_read is not in namelist 
     311      nn_wxios = 0 
    295312      REWIND( numnam_ref )              ! Namelist namrun in reference namelist : Parameters of the run 
    296313      READ  ( numnam_ref, namrun, IOSTAT = ios, ERR = 901) 
     
    333350         WRITE(numout,*) '      NetCDF chunksize (bytes)        nn_chunksz = ', nn_chunksz 
    334351         WRITE(numout,*) '      IS coupling at the restart step ln_iscpl   = ', ln_iscpl 
     352         IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     353            WRITE(numout,*) '      READ restart for a single file using XIOS ln_xios_read =', ln_xios_read 
     354            WRITE(numout,*) '      Write restart using XIOS        nn_wxios   = ', nn_wxios 
     355         ELSE 
     356            WRITE(numout,*) "      AGRIF: nn_wxios will be ingored. See setting for parent" 
     357            WRITE(numout,*) "      AGRIF: ln_xios_read will be ingored. See setting for parent" 
     358         ENDIF 
    335359      ENDIF 
    336360 
     
    413437      rdt       = rn_rdt 
    414438 
     439      IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     440         lrxios = ln_xios_read.AND.ln_rstart 
     441!set output file type for XIOS based on NEMO namelist  
     442         IF (nn_wxios > 0) lwxios = .TRUE.  
     443         nxioso = nn_wxios 
     444      ENDIF 
     445 
    415446#if defined key_netcdf4 
    416447      !                             ! NetCDF 4 case   ("key_netcdf4" defined) 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90

    r8985 r8987  
    242242      ENDIF 
    243243      ! 
     244      IF(lwxios) THEN 
     245! define variables in restart file when writing with XIOS 
     246         CALL iom_set_rstw_var_active('e3t_b') 
     247         CALL iom_set_rstw_var_active('e3t_n') 
     248         !                                           ! ----------------------- ! 
     249         IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN  ! z_tilde and layer cases ! 
     250            !                                        ! ----------------------- ! 
     251            CALL iom_set_rstw_var_active('tilde_e3t_b') 
     252            CALL iom_set_rstw_var_active('tilde_e3t_n') 
     253         END IF 
     254         !                                           ! -------------!     
     255         IF( ln_vvl_ztilde ) THEN                    ! z_tilde case ! 
     256            !                                        ! ------------ ! 
     257            CALL iom_set_rstw_var_active('hdiv_lf') 
     258         ENDIF 
     259         ! 
     260      ENDIF 
     261 
    244262      IF( nn_timing == 1 )  CALL timing_stop('dom_vvl_init') 
    245263      ! 
     
    799817         IF( ln_rstart ) THEN                   !* Read the restart file 
    800818            CALL rst_read_open                  !  open the restart file if necessary 
    801             CALL iom_get( numror, jpdom_autoglo, 'sshn'   , sshn    ) 
     819            CALL iom_get( numror, jpdom_autoglo, 'sshn'   , sshn, ldxios = lrxios    ) 
    802820            ! 
    803821            id1 = iom_varid( numror, 'e3t_b', ldstop = .FALSE. ) 
     
    810828            !                             ! --------- ! 
    811829            IF( MIN( id1, id2 ) > 0 ) THEN       ! all required arrays exist 
    812                CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t_b(:,:,:) ) 
    813                CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t_n(:,:,:) ) 
     830               CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t_b(:,:,:), ldxios = lrxios ) 
     831               CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t_n(:,:,:), ldxios = lrxios ) 
    814832               ! needed to restart if land processor not computed  
    815833               IF(lwp) write(numout,*) 'dom_vvl_rst : e3t_b and e3t_n found in restart files' 
     
    825843               IF(lwp) write(numout,*) 'e3t_n set equal to e3t_b.' 
    826844               IF(lwp) write(numout,*) 'neuler is forced to 0' 
    827                CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t_b(:,:,:) ) 
     845               CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t_b(:,:,:), ldxios = lrxios ) 
    828846               e3t_n(:,:,:) = e3t_b(:,:,:) 
    829847               neuler = 0 
     
    832850               IF(lwp) write(numout,*) 'e3t_b set equal to e3t_n.' 
    833851               IF(lwp) write(numout,*) 'neuler is forced to 0' 
    834                CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t_n(:,:,:) ) 
     852               CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t_n(:,:,:), ldxios = lrxios ) 
    835853               e3t_b(:,:,:) = e3t_n(:,:,:) 
    836854               neuler = 0 
     
    857875               !                          ! ----------------------- ! 
    858876               IF( MIN( id3, id4 ) > 0 ) THEN  ! all required arrays exist 
    859                   CALL iom_get( numror, jpdom_autoglo, 'tilde_e3t_b', tilde_e3t_b(:,:,:) ) 
    860                   CALL iom_get( numror, jpdom_autoglo, 'tilde_e3t_n', tilde_e3t_n(:,:,:) ) 
     877                  CALL iom_get( numror, jpdom_autoglo, 'tilde_e3t_b', tilde_e3t_b(:,:,:), ldxios = lrxios ) 
     878                  CALL iom_get( numror, jpdom_autoglo, 'tilde_e3t_n', tilde_e3t_n(:,:,:), ldxios = lrxios ) 
    861879               ELSE                            ! one at least array is missing 
    862880                  tilde_e3t_b(:,:,:) = 0.0_wp 
     
    867885                  !                       ! ------------ ! 
    868886                  IF( id5 > 0 ) THEN  ! required array exists 
    869                      CALL iom_get( numror, jpdom_autoglo, 'hdiv_lf', hdiv_lf(:,:,:) ) 
     887                     CALL iom_get( numror, jpdom_autoglo, 'hdiv_lf', hdiv_lf(:,:,:), ldxios = lrxios ) 
    870888                  ELSE                ! array is missing 
    871889                     hdiv_lf(:,:,:) = 0.0_wp 
     
    938956         !                                   ! =================== 
    939957         IF(lwp) WRITE(numout,*) '---- dom_vvl_rst ----' 
     958         IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
    940959         !                                           ! --------- ! 
    941960         !                                           ! all cases ! 
    942961         !                                           ! --------- ! 
    943          CALL iom_rstput( kt, nitrst, numrow, 'e3t_b', e3t_b(:,:,:) ) 
    944          CALL iom_rstput( kt, nitrst, numrow, 'e3t_n', e3t_n(:,:,:) ) 
     962         CALL iom_rstput( kt, nitrst, numrow, 'e3t_b', e3t_b(:,:,:), ldxios = lwxios ) 
     963         CALL iom_rstput( kt, nitrst, numrow, 'e3t_n', e3t_n(:,:,:), ldxios = lwxios ) 
    945964         !                                           ! ----------------------- ! 
    946965         IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN  ! z_tilde and layer cases ! 
    947966            !                                        ! ----------------------- ! 
    948             CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_b', tilde_e3t_b(:,:,:) ) 
    949             CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_n', tilde_e3t_n(:,:,:) ) 
     967            CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_b', tilde_e3t_b(:,:,:), ldxios = lwxios) 
     968            CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_n', tilde_e3t_n(:,:,:), ldxios = lwxios) 
    950969         END IF 
    951970         !                                           ! -------------!     
    952971         IF( ln_vvl_ztilde ) THEN                    ! z_tilde case ! 
    953972            !                                        ! ------------ ! 
    954             CALL iom_rstput( kt, nitrst, numrow, 'hdiv_lf', hdiv_lf(:,:,:) ) 
    955          ENDIF 
    956          ! 
     973            CALL iom_rstput( kt, nitrst, numrow, 'hdiv_lf', hdiv_lf(:,:,:), ldxios = lwxios) 
     974         ENDIF 
     975         ! 
     976         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    957977      ENDIF 
    958978      ! 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/DOM/iscplrst.F90

    r8924 r8987  
    6464 
    6565      !! get restart variable 
    66       CALL iom_get( numror, jpdom_autoglo, 'tmask'  , ztmask_b   ) ! need to extrapolate T/S 
    67       CALL iom_get( numror, jpdom_autoglo, 'umask'  , zumask_b   ) ! need to correct barotropic velocity 
    68       CALL iom_get( numror, jpdom_autoglo, 'vmask'  , zvmask_b   ) ! need to correct barotropic velocity 
    69       CALL iom_get( numror, jpdom_autoglo, 'smask'  , zsmask_b   ) ! need to correct barotropic velocity 
    70       CALL iom_get( numror, jpdom_autoglo, 'e3t_n'  , ze3t_b(:,:,:) )  ! need to compute temperature correction 
    71       CALL iom_get( numror, jpdom_autoglo, 'e3u_n'  , ze3u_b(:,:,:) )  ! need to correct barotropic velocity 
    72       CALL iom_get( numror, jpdom_autoglo, 'e3v_n'  , ze3v_b(:,:,:) )  ! need to correct barotropic velocity 
    73       CALL iom_get( numror, jpdom_autoglo, 'gdepw_n', zdepw_b(:,:,:) ) ! need to interpol vertical profile (vvl) 
     66      CALL iom_get( numror, jpdom_autoglo, 'tmask'  , ztmask_b, ldxios = lrxios   ) ! need to extrapolate T/S 
     67      CALL iom_get( numror, jpdom_autoglo, 'umask'  , zumask_b, ldxios = lrxios   ) ! need to correct barotropic velocity 
     68      CALL iom_get( numror, jpdom_autoglo, 'vmask'  , zvmask_b, ldxios = lrxios   ) ! need to correct barotropic velocity 
     69      CALL iom_get( numror, jpdom_autoglo, 'smask'  , zsmask_b, ldxios = lrxios   ) ! need to correct barotropic velocity 
     70      CALL iom_get( numror, jpdom_autoglo, 'e3t_n'  , ze3t_b(:,:,:), ldxios = lrxios )  ! need to compute temperature correction 
     71      CALL iom_get( numror, jpdom_autoglo, 'e3u_n'  , ze3u_b(:,:,:), ldxios = lrxios )  ! need to correct barotropic velocity 
     72      CALL iom_get( numror, jpdom_autoglo, 'e3v_n'  , ze3v_b(:,:,:), ldxios = lrxios )  ! need to correct barotropic velocity 
     73      CALL iom_get( numror, jpdom_autoglo, 'gdepw_n', zdepw_b(:,:,:), ldxios = lrxios ) ! need to interpol vertical profile (vvl) 
    7474 
    7575      !! read namelist 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r8985 r8987  
    5959   USE asminc          ! Assimilation increment 
    6060#endif 
    61  
    6261 
    6362   IMPLICIT NONE 
     
    13101309      ! 
    13111310      IF( TRIM(cdrw) == 'READ' ) THEN 
    1312          CALL iom_get( numror, jpdom_autoglo, 'ub2_b'  , ub2_b  (:,:) )    
    1313          CALL iom_get( numror, jpdom_autoglo, 'vb2_b'  , vb2_b  (:,:) )  
     1311         CALL iom_get( numror, jpdom_autoglo, 'ub2_b'  , ub2_b  (:,:), ldxios = lrxios )    
     1312         CALL iom_get( numror, jpdom_autoglo, 'vb2_b'  , vb2_b  (:,:), ldxios = lrxios )  
    13141313         IF( .NOT.ln_bt_av ) THEN 
    1315             CALL iom_get( numror, jpdom_autoglo, 'sshbb_e'  , sshbb_e(:,:) )    
    1316             CALL iom_get( numror, jpdom_autoglo, 'ubb_e'    ,   ubb_e(:,:) )    
    1317             CALL iom_get( numror, jpdom_autoglo, 'vbb_e'    ,   vbb_e(:,:) ) 
    1318             CALL iom_get( numror, jpdom_autoglo, 'sshb_e'   ,  sshb_e(:,:) )  
    1319             CALL iom_get( numror, jpdom_autoglo, 'ub_e'     ,    ub_e(:,:) )    
    1320             CALL iom_get( numror, jpdom_autoglo, 'vb_e'     ,    vb_e(:,:) ) 
     1314            CALL iom_get( numror, jpdom_autoglo, 'sshbb_e'  , sshbb_e(:,:), ldxios = lrxios )    
     1315            CALL iom_get( numror, jpdom_autoglo, 'ubb_e'    ,   ubb_e(:,:), ldxios = lrxios )    
     1316            CALL iom_get( numror, jpdom_autoglo, 'vbb_e'    ,   vbb_e(:,:), ldxios = lrxios ) 
     1317            CALL iom_get( numror, jpdom_autoglo, 'sshb_e'   ,  sshb_e(:,:), ldxios = lrxios )  
     1318            CALL iom_get( numror, jpdom_autoglo, 'ub_e'     ,    ub_e(:,:), ldxios = lrxios )    
     1319            CALL iom_get( numror, jpdom_autoglo, 'vb_e'     ,    vb_e(:,:), ldxios = lrxios ) 
    13211320         ENDIF 
    13221321#if defined key_agrif 
    13231322         ! Read time integrated fluxes 
    13241323         IF ( .NOT.Agrif_Root() ) THEN 
    1325             CALL iom_get( numror, jpdom_autoglo, 'ub2_i_b'  , ub2_i_b(:,:) )    
    1326             CALL iom_get( numror, jpdom_autoglo, 'vb2_i_b'  , vb2_i_b(:,:) ) 
     1324            CALL iom_get( numror, jpdom_autoglo, 'ub2_i_b'  , ub2_i_b(:,:), ldxios = lrxios )    
     1325            CALL iom_get( numror, jpdom_autoglo, 'vb2_i_b'  , vb2_i_b(:,:), ldxios = lrxios ) 
    13271326         ENDIF 
    13281327#endif 
    13291328      ! 
    13301329      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 
    1331          CALL iom_rstput( kt, nitrst, numrow, 'ub2_b'   , ub2_b  (:,:) ) 
    1332          CALL iom_rstput( kt, nitrst, numrow, 'vb2_b'   , vb2_b  (:,:) ) 
     1330         IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
     1331         CALL iom_rstput( kt, nitrst, numrow, 'ub2_b'   , ub2_b  (:,:), ldxios = lwxios ) 
     1332         CALL iom_rstput( kt, nitrst, numrow, 'vb2_b'   , vb2_b  (:,:), ldxios = lwxios ) 
    13331333         ! 
    13341334         IF (.NOT.ln_bt_av) THEN 
    1335             CALL iom_rstput( kt, nitrst, numrow, 'sshbb_e'  , sshbb_e(:,:) )  
    1336             CALL iom_rstput( kt, nitrst, numrow, 'ubb_e'    ,   ubb_e(:,:) ) 
    1337             CALL iom_rstput( kt, nitrst, numrow, 'vbb_e'    ,   vbb_e(:,:) ) 
    1338             CALL iom_rstput( kt, nitrst, numrow, 'sshb_e'   ,  sshb_e(:,:) ) 
    1339             CALL iom_rstput( kt, nitrst, numrow, 'ub_e'     ,    ub_e(:,:) ) 
    1340             CALL iom_rstput( kt, nitrst, numrow, 'vb_e'     ,    vb_e(:,:) ) 
     1335            CALL iom_rstput( kt, nitrst, numrow, 'sshbb_e'  , sshbb_e(:,:), ldxios = lwxios )  
     1336            CALL iom_rstput( kt, nitrst, numrow, 'ubb_e'    ,   ubb_e(:,:), ldxios = lwxios ) 
     1337            CALL iom_rstput( kt, nitrst, numrow, 'vbb_e'    ,   vbb_e(:,:), ldxios = lwxios ) 
     1338            CALL iom_rstput( kt, nitrst, numrow, 'sshb_e'   ,  sshb_e(:,:), ldxios = lwxios ) 
     1339            CALL iom_rstput( kt, nitrst, numrow, 'ub_e'     ,    ub_e(:,:), ldxios = lwxios ) 
     1340            CALL iom_rstput( kt, nitrst, numrow, 'vb_e'     ,    vb_e(:,:), ldxios = lwxios ) 
    13411341         ENDIF 
    13421342#if defined key_agrif 
    13431343         ! Save time integrated fluxes 
    13441344         IF ( .NOT.Agrif_Root() ) THEN 
    1345             CALL iom_rstput( kt, nitrst, numrow, 'ub2_i_b'  , ub2_i_b(:,:) ) 
    1346             CALL iom_rstput( kt, nitrst, numrow, 'vb2_i_b'  , vb2_i_b(:,:) ) 
     1345            CALL iom_rstput( kt, nitrst, numrow, 'ub2_i_b'  , ub2_i_b(:,:), ldxios = lwxios ) 
     1346            CALL iom_rstput( kt, nitrst, numrow, 'vb2_i_b'  , vb2_i_b(:,:), ldxios = lwxios ) 
    13471347         ENDIF 
    13481348#endif 
     1349         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    13491350      ENDIF 
    13501351      ! 
     
    14341435      CALL wrk_dealloc( jpi,jpj,   zcu ) 
    14351436      ! 
     1437      IF( lwxios ) THEN 
     1438! define variables in restart file when writing with XIOS 
     1439         CALL iom_set_rstw_var_active('ub2_b') 
     1440         CALL iom_set_rstw_var_active('vb2_b') 
     1441         ! 
     1442         IF (.NOT.ln_bt_av) THEN 
     1443            CALL iom_set_rstw_var_active('sshbb_e') 
     1444            CALL iom_set_rstw_var_active('ubb_e') 
     1445            CALL iom_set_rstw_var_active('vbb_e') 
     1446            CALL iom_set_rstw_var_active('sshb_e') 
     1447            CALL iom_set_rstw_var_active('ub_e') 
     1448            CALL iom_set_rstw_var_active('vb_e') 
     1449         ENDIF 
     1450#if defined key_agrif 
     1451         ! Save time integrated fluxes 
     1452         IF ( .NOT.Agrif_Root() ) THEN 
     1453            CALL iom_set_rstw_var_active('ub2_i_b') 
     1454            CALL iom_set_rstw_var_active('vb2_i_b') 
     1455         ENDIF 
     1456#endif 
     1457      ENDIF 
     1458 
    14361459   END SUBROUTINE dyn_spg_ts_init 
    14371460 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/IOM/in_out_manager.F90

    r8924 r8987  
    4444   LOGICAL       ::   ln_clobber       !: clobber (overwrite) an existing file 
    4545   INTEGER       ::   nn_chunksz       !: chunksize (bytes) for NetCDF file (works only with iom_nf90 routines) 
     46   LOGICAL       ::   ln_xios_read     !: use xios to read single file restart 
     47   INTEGER       ::   nn_wxios         !: write resart using xios 0 - no, 1 - single, 2 - multiple file output 
    4648 
    4749#if defined key_netcdf4 
     
    150152   LOGICAL       ::   lsp_area = .TRUE.     !: to make a control print over a specific area 
    151153   CHARACTER(lc) ::   cxios_context         !: context name used in xios 
     154   CHARACTER(lc) ::   crxios_context         !: context name used in xios to read restart 
     155   CHARACTER(lc) ::   cwxios_context        !: context name used in xios to write restart file 
    152156 
    153157   !!---------------------------------------------------------------------- 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90

    r8924 r8987  
    4444   USE ioipsl, ONLY :  ju2ymds    ! for calendar 
    4545   USE crs             ! Grid coarsening 
     46   USE lib_fortran  
     47   USE diurnal_bulk, ONLY : ln_diurnal_only, ln_diurnal 
    4648 
    4749   IMPLICIT NONE 
     
    6365   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 
    6466   PRIVATE set_grid, set_grid_bounds, set_scalar, set_xmlatt, set_mooring, iom_update_file_name, iom_sdate 
     67   PRIVATE iom_set_rst_context, iom_set_rstw_active, iom_set_rstr_active 
     68   PUBLIC iom_set_rstw_var_active, iom_set_rst_vars 
    6569# endif 
    6670 
     
    8993CONTAINS 
    9094 
    91    SUBROUTINE iom_init( cdname )  
     95   SUBROUTINE iom_init( cdname, fname )  
    9296      !!---------------------------------------------------------------------- 
    9397      !!                     ***  ROUTINE   *** 
     
    97101      !!---------------------------------------------------------------------- 
    98102      CHARACTER(len=*), INTENT(in)  :: cdname 
     103      CHARACTER(len=*), OPTIONAL, INTENT(in)  :: fname 
    99104#if defined key_iomput 
    100105 
    101106      TYPE(xios_duration) :: dtime    = xios_duration(0, 0, 0, 0, 0, 0) 
    102107      TYPE(xios_date)     :: start_date 
    103       CHARACTER(len=10) :: clname 
     108      CHARACTER(len=lc) :: clname 
    104109      INTEGER           :: ji, jkmin 
     110      LOGICAL :: llrst_context              ! is context related to restart 
    105111      ! 
    106112      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zt_bnds, zw_bnds 
     
    113119      CALL xios_context_initialize(TRIM(clname), mpi_comm_opa) 
    114120      CALL iom_swap( cdname ) 
    115  
     121      llrst_context =  (TRIM(cdname) == TRIM(crxios_context) .OR. TRIM(cdname) == TRIM(cwxios_context)) 
    116122 
    117123      ! Calendar type is now defined in xml file  
     
    126132 
    127133      ! horizontal grid definition 
    128       CALL set_scalar 
     134      IF(.NOT.llrst_context) CALL set_scalar 
    129135 
    130136      IF( TRIM(cdname) == TRIM(cxios_context) ) THEN   
    131          CALL set_grid( "T", glamt, gphit )  
    132          CALL set_grid( "U", glamu, gphiu ) 
    133          CALL set_grid( "V", glamv, gphiv ) 
    134          CALL set_grid( "W", glamt, gphit ) 
     137         CALL set_grid( "T", glamt, gphit, .FALSE. )  
     138         CALL set_grid( "U", glamu, gphiu, .FALSE. ) 
     139         CALL set_grid( "V", glamv, gphiv, .FALSE. ) 
     140         CALL set_grid( "W", glamt, gphit, .FALSE. ) 
    135141         CALL set_grid_znl( gphit ) 
    136142         ! 
     
    150156         CALL dom_grid_crs   ! Save the parent grid information  & Switch to coarse grid domain 
    151157         ! 
    152          CALL set_grid( "T", glamt_crs, gphit_crs )  
    153          CALL set_grid( "U", glamu_crs, gphiu_crs )  
    154          CALL set_grid( "V", glamv_crs, gphiv_crs )  
    155          CALL set_grid( "W", glamt_crs, gphit_crs )  
     158         CALL set_grid( "T", glamt_crs, gphit_crs, .FALSE. )  
     159         CALL set_grid( "U", glamu_crs, gphiu_crs, .FALSE. )  
     160         CALL set_grid( "V", glamv_crs, gphiv_crs, .FALSE. )  
     161         CALL set_grid( "W", glamt_crs, gphit_crs, .FALSE. )  
    156162         CALL set_grid_znl( gphit_crs ) 
    157163          ! 
    158164         CALL dom_grid_glo   ! Return to parent grid domain 
    159165         ! 
    160          IF( ln_cfmeta ) THEN   ! Add additional grid metadata 
     166         IF( ln_cfmeta .AND. .NOT. llrst_context) THEN   ! Add additional grid metadata 
    161167            CALL iom_set_domain_attr("grid_T", area = e1e2t_crs(nldi:nlei, nldj:nlej)) 
    162168            CALL iom_set_domain_attr("grid_U", area = e1u_crs(nldi:nlei, nldj:nlej) * e2u_crs(nldi:nlei, nldj:nlej)) 
     
    171177 
    172178      ! vertical grid definition 
    173       CALL iom_set_axis_attr( "deptht", gdept_1d ) 
    174       CALL iom_set_axis_attr( "depthu", gdept_1d ) 
    175       CALL iom_set_axis_attr( "depthv", gdept_1d ) 
    176       CALL iom_set_axis_attr( "depthw", gdepw_1d ) 
    177  
    178       ! Add vertical grid bounds 
    179       jkmin = MIN(2,jpk)  ! in case jpk=1 (i.e. sas2D) 
    180       zt_bnds(2,:        ) = gdept_1d(:) 
    181       zt_bnds(1,jkmin:jpk) = gdept_1d(1:jpkm1) 
    182       zt_bnds(1,1        ) = gdept_1d(1) - e3w_1d(1) 
    183       zw_bnds(1,:        ) = gdepw_1d(:) 
    184       zw_bnds(2,1:jpkm1  ) = gdepw_1d(jkmin:jpk) 
    185       zw_bnds(2,jpk:     ) = gdepw_1d(jpk) + e3t_1d(jpk) 
    186       CALL iom_set_axis_attr( "deptht", bounds=zt_bnds ) 
    187       CALL iom_set_axis_attr( "depthu", bounds=zt_bnds ) 
    188       CALL iom_set_axis_attr( "depthv", bounds=zt_bnds ) 
    189       CALL iom_set_axis_attr( "depthw", bounds=zw_bnds ) 
     179      IF(.NOT.llrst_context) THEN 
     180          CALL iom_set_axis_attr( "deptht", paxis = gdept_1d ) 
     181          CALL iom_set_axis_attr( "depthu", paxis = gdept_1d ) 
     182          CALL iom_set_axis_attr( "depthv", paxis = gdept_1d ) 
     183          CALL iom_set_axis_attr( "depthw", paxis = gdepw_1d ) 
     184 
     185          ! Add vertical grid bounds 
     186          jkmin = MIN(2,jpk)  ! in case jpk=1 (i.e. sas2D) 
     187          zt_bnds(2,:        ) = gdept_1d(:) 
     188          zt_bnds(1,jkmin:jpk) = gdept_1d(1:jpkm1) 
     189          zt_bnds(1,1        ) = gdept_1d(1) - e3w_1d(1) 
     190          zw_bnds(1,:        ) = gdepw_1d(:) 
     191          zw_bnds(2,1:jpkm1  ) = gdepw_1d(jkmin:jpk) 
     192          zw_bnds(2,jpk:     ) = gdepw_1d(jpk) + e3t_1d(jpk) 
     193          CALL iom_set_axis_attr( "deptht", bounds=zt_bnds ) 
     194          CALL iom_set_axis_attr( "depthu", bounds=zt_bnds ) 
     195          CALL iom_set_axis_attr( "depthv", bounds=zt_bnds ) 
     196          CALL iom_set_axis_attr( "depthw", bounds=zw_bnds ) 
    190197 
    191198 
    192199# if defined key_floats 
    193       CALL iom_set_axis_attr( "nfloat", (/ (REAL(ji,wp), ji=1,nfloat) /) ) 
     200          CALL iom_set_axis_attr( "nfloat", (/ (REAL(ji,wp), ji=1,nfloat) /) ) 
    194201# endif 
    195202#if defined key_lim3 || defined key_lim2 
    196       CALL iom_set_axis_attr( "ncatice", (/ (REAL(ji,wp), ji=1,jpl) /) ) 
     203          CALL iom_set_axis_attr( "ncatice", (/ (REAL(ji,wp), ji=1,jpl) /) ) 
    197204#endif 
    198       CALL iom_set_axis_attr( "icbcla", class_num ) 
    199       CALL iom_set_axis_attr( "iax_20C", (/ REAL(20,wp) /) ) 
    200       CALL iom_set_axis_attr( "iax_28C", (/ REAL(28,wp) /) ) 
    201        
     205          CALL iom_set_axis_attr( "icbcla", class_num ) 
     206          CALL iom_set_axis_attr( "iax_20C", (/ REAL(20,wp) /) ) 
     207          CALL iom_set_axis_attr( "iax_28C", (/ REAL(28,wp) /) ) 
     208      ENDIF    
    202209      ! automatic definitions of some of the xml attributs 
    203       CALL set_xmlatt 
     210      IF( TRIM(cdname) == TRIM(crxios_context) ) THEN 
     211!set names of the fields in restart file IF using XIOS to read data 
     212          CALL iom_set_rst_context() 
     213          CALL iom_set_rst_vars(rst_rfields) 
     214!set which fields are to be read from restart file 
     215          CALL iom_set_rstr_active() 
     216      ELSE IF( TRIM(cdname) == TRIM(cwxios_context) ) THEN 
     217!set names of the fields in restart file IF using XIOS to write data 
     218          CALL iom_set_rst_context() 
     219          CALL iom_set_rst_vars(rst_wfields) 
     220!set which fields are to be read from restart file 
     221          CALL iom_set_rstw_active(fname) 
     222      ELSE 
     223          CALL set_xmlatt 
     224      ENDIF 
    204225 
    205226      ! end file definition 
     
    213234 
    214235#endif 
    215        
     236 
    216237   END SUBROUTINE iom_init 
    217238 
     239   SUBROUTINE iom_set_rstw_var_active(field) 
     240      !!--------------------------------------------------------------------- 
     241      !!                   ***  SUBROUTINE  iom_set_rstw_var_active  *** 
     242      !! 
     243      !! ** Purpose :  enable variable in restart file when writing with XIOS  
     244      !!--------------------------------------------------------------------- 
     245   CHARACTER(len = *), INTENT(IN) :: field 
     246   INTEGER :: i 
     247   LOGICAL :: llis_set 
     248 
     249   llis_set = .FALSE. 
     250 
     251   DO i = 1, max_rst_fields 
     252       IF(TRIM(rst_wfields(i)%vname) == field) THEN  
     253          rst_wfields(i)%active = .TRUE. 
     254          llis_set = .TRUE. 
     255          EXIT 
     256       ENDIF 
     257   ENDDO 
     258!Warn if variable is not in defined in rst_wfields 
     259   IF(.NOT.llis_set) THEN 
     260      IF(lwp) THEN 
     261         write(numout,cform_err) 
     262         write(numout,*) 'iom_set_rstw_var_active: variable ', field ,' is available for writing but not defined'  
     263      ENDIF 
     264        nstop = nstop + 1 
     265   ENDIF 
     266 
     267   END SUBROUTINE iom_set_rstw_var_active 
     268 
     269   SUBROUTINE iom_set_rstr_active() 
     270      !!--------------------------------------------------------------------- 
     271      !!                   ***  SUBROUTINE  iom_set_rstr_active  *** 
     272      !! 
     273      !! ** Purpose :  define file name in XIOS context for reading restart file, 
     274      !!               enable variables present in restart file for reading with XIOS  
     275      !!--------------------------------------------------------------------- 
     276 
     277!sets enabled = .TRUE. for each field in restart file 
     278   CHARACTER(len=256) :: rst_file 
     279   TYPE(xios_field) :: field_hdl 
     280   TYPE(xios_file) :: file_hdl 
     281   TYPE(xios_filegroup) :: filegroup_hdl 
     282   INTEGER :: i 
     283   CHARACTER(lc)  ::   clpath 
     284 
     285        clpath = TRIM(cn_ocerst_indir) 
     286        IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 
     287        IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     288           rst_file = TRIM(clpath)//TRIM(cn_ocerst_in) 
     289        ELSE 
     290           rst_file = TRIM(clpath)//'1_'//TRIM(cn_ocerst_in) 
     291        ENDIF 
     292!set name of the restart file and enable available fields 
     293        if(lwp) WRITE(numout,*) 'Setting restart filename (for XIOS) to: ',rst_file 
     294        CALL xios_get_handle("file_definition", filegroup_hdl ) 
     295        CALL xios_add_child(filegroup_hdl, file_hdl, 'rrestart') 
     296        CALL xios_set_file_attr( "rrestart", name=trim(rst_file), type="one_file", & 
     297             par_access="collective", enabled=.TRUE., mode="read",                 & 
     298             output_freq=xios_timestep) 
     299!define variables for restart context 
     300        DO i = 1, max_rst_fields 
     301         IF( TRIM(rst_rfields(i)%vname) /= "NO_NAME") THEN 
     302           IF( iom_varid( numror, TRIM(rst_rfields(i)%vname), ldstop = .FALSE. ) > 0 ) THEN 
     303                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_rfields(i)%vname)) 
     304                SELECT CASE (TRIM(rst_rfields(i)%grid)) 
     305                 CASE ("grid_N_3D") 
     306                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
     307                        domain_ref="grid_N", axis_ref="deptht", operation = "instant") 
     308                 CASE ("grid_N") 
     309                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
     310                        domain_ref="grid_N", operation = "instant")  
     311                CASE ("grid_vector") 
     312                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
     313                         axis_ref="deptht", operation = "instant") 
     314                 CASE ("grid_scalar") 
     315                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
     316                        scalar_ref = "grid_scalar", operation = "instant") 
     317                END SELECT 
     318                IF(lwp) WRITE(numout,*) 'XIOS read: ', TRIM(rst_rfields(i)%vname), ' enabled in ', TRIM(rst_file) 
     319           ENDIF 
     320         ENDIF 
     321        END DO 
     322   END SUBROUTINE iom_set_rstr_active 
     323 
     324   SUBROUTINE iom_set_rstw_core(cdmdl) 
     325      !!--------------------------------------------------------------------- 
     326      !!                   ***  SUBROUTINE  iom_set_rstw_core  *** 
     327      !! 
     328      !! ** Purpose :  set variables which are always in restart file  
     329      !!--------------------------------------------------------------------- 
     330   CHARACTER (len=*), INTENT (IN) :: cdmdl ! model OPA or SAS 
     331    
     332   IF(cdmdl == "OPA") THEN 
     333!from restart.F90 
     334   CALL iom_set_rstw_var_active("rdt") 
     335   IF ( .NOT. ln_diurnal_only ) THEN 
     336        CALL iom_set_rstw_var_active('ub'  ) 
     337        CALL iom_set_rstw_var_active('vb'  ) 
     338        CALL iom_set_rstw_var_active('tb'  ) 
     339        CALL iom_set_rstw_var_active('sb'  ) 
     340        CALL iom_set_rstw_var_active('sshb') 
     341        ! 
     342        CALL iom_set_rstw_var_active('un'  ) 
     343        CALL iom_set_rstw_var_active('vn'  ) 
     344        CALL iom_set_rstw_var_active('tn'  ) 
     345        CALL iom_set_rstw_var_active('sn'  ) 
     346        CALL iom_set_rstw_var_active('sshn') 
     347        CALL iom_set_rstw_var_active('rhop') 
     348     ! extra variable needed for the ice sheet coupling 
     349        IF ( ln_iscpl ) THEN 
     350             CALL iom_set_rstw_var_active('tmask') 
     351             CALL iom_set_rstw_var_active('umask') 
     352             CALL iom_set_rstw_var_active('vmask') 
     353             CALL iom_set_rstw_var_active('smask') 
     354             CALL iom_set_rstw_var_active('e3t_n') 
     355             CALL iom_set_rstw_var_active('e3u_n') 
     356             CALL iom_set_rstw_var_active('e3v_n') 
     357             CALL iom_set_rstw_var_active('gdepw_n') 
     358        END IF 
     359      ENDIF 
     360      IF(ln_diurnal) CALL iom_set_rstw_var_active('Dsst') 
     361!from trasbc.F90 
     362         CALL iom_set_rstw_var_active('sbc_hc_b') 
     363         CALL iom_set_rstw_var_active('sbc_sc_b') 
     364   ENDIF 
     365   END SUBROUTINE iom_set_rstw_core 
     366 
     367   SUBROUTINE iom_set_rst_vars(fields) 
     368      !!--------------------------------------------------------------------- 
     369      !!                   ***  SUBROUTINE  iom_set_rstr_active  *** 
     370      !! 
     371      !! ** Purpose :  Fill array fields with the information about all  
     372      !!               possible variables and corresponding grids definition  
     373      !!               for reading/writing restart with XIOS 
     374      !!--------------------------------------------------------------------- 
     375   TYPE(RST_FIELD), INTENT(INOUT) :: fields(max_rst_fields) 
     376 
     377   INTEGER :: i 
     378        i = 0 
     379        i = i + 1; fields(i)%vname="rdt";            fields(i)%grid="grid_scalar" 
     380        i = i + 1; fields(i)%vname="un";             fields(i)%grid="grid_N_3D" 
     381        i = i + 1; fields(i)%vname="ub";             fields(i)%grid="grid_N_3D" 
     382        i = i + 1; fields(i)%vname="vn";             fields(i)%grid="grid_N_3D" 
     383        i = i + 1; fields(i)%vname="vb";             fields(i)%grid="grid_N_3D"   
     384        i = i + 1; fields(i)%vname="tn";             fields(i)%grid="grid_N_3D" 
     385        i = i + 1; fields(i)%vname="tb";             fields(i)%grid="grid_N_3D" 
     386        i = i + 1; fields(i)%vname="sn";             fields(i)%grid="grid_N_3D" 
     387        i = i + 1; fields(i)%vname="sb";             fields(i)%grid="grid_N_3D" 
     388        i = i + 1; fields(i)%vname="sshn";           fields(i)%grid="grid_N" 
     389        i = i + 1; fields(i)%vname="sshb";           fields(i)%grid="grid_N" 
     390        i = i + 1; fields(i)%vname="rhop";           fields(i)%grid="grid_N_3D" 
     391        i = i + 1; fields(i)%vname="kt";             fields(i)%grid="grid_scalar" 
     392        i = i + 1; fields(i)%vname="ndastp";         fields(i)%grid="grid_scalar" 
     393        i = i + 1; fields(i)%vname="adatrj";         fields(i)%grid="grid_scalar" 
     394        i = i + 1; fields(i)%vname="utau_b";         fields(i)%grid="grid_N" 
     395        i = i + 1; fields(i)%vname="vtau_b";         fields(i)%grid="grid_N" 
     396        i = i + 1; fields(i)%vname="qns_b";          fields(i)%grid="grid_N" 
     397        i = i + 1; fields(i)%vname="emp_b";          fields(i)%grid="grid_N" 
     398        i = i + 1; fields(i)%vname="sfx_b";          fields(i)%grid="grid_N" 
     399        i = i + 1; fields(i)%vname="en" ;            fields(i)%grid="grid_N_3D"  
     400        i = i + 1; fields(i)%vname="avt";            fields(i)%grid="grid_N_3D" 
     401        i = i + 1; fields(i)%vname="avm";            fields(i)%grid="grid_N_3D" 
     402        i = i + 1; fields(i)%vname="avmu";           fields(i)%grid="grid_N_3D" 
     403        i = i + 1; fields(i)%vname="avmv";           fields(i)%grid="grid_N_3D" 
     404        i = i + 1; fields(i)%vname="dissl";          fields(i)%grid="grid_N_3D" 
     405        i = i + 1; fields(i)%vname="sbc_hc_b";       fields(i)%grid="grid_N" 
     406        i = i + 1; fields(i)%vname="sbc_sc_b";       fields(i)%grid="grid_N" 
     407        i = i + 1; fields(i)%vname="qsr_hc_b";       fields(i)%grid="grid_N_3D" 
     408        i = i + 1; fields(i)%vname="fraqsr_1lev";    fields(i)%grid="grid_N" 
     409        i = i + 1; fields(i)%vname="frc_v";          fields(i)%grid="grid_scalar" 
     410        i = i + 1; fields(i)%vname="frc_t";          fields(i)%grid="grid_scalar" 
     411        i = i + 1; fields(i)%vname="frc_s";          fields(i)%grid="grid_scalar" 
     412        i = i + 1; fields(i)%vname="frc_wn_t";       fields(i)%grid="grid_scalar" 
     413        i = i + 1; fields(i)%vname="frc_wn_s";       fields(i)%grid="grid_scalar" 
     414        i = i + 1; fields(i)%vname="ssh_ini";        fields(i)%grid="grid_N" 
     415        i = i + 1; fields(i)%vname="e3t_ini";        fields(i)%grid="grid_N_3D" 
     416        i = i + 1; fields(i)%vname="hc_loc_ini";     fields(i)%grid="grid_N_3D" 
     417        i = i + 1; fields(i)%vname="sc_loc_ini";     fields(i)%grid="grid_N_3D" 
     418        i = i + 1; fields(i)%vname="ssh_hc_loc_ini"; fields(i)%grid="grid_N" 
     419        i = i + 1; fields(i)%vname="ssh_sc_loc_ini"; fields(i)%grid="grid_N" 
     420        i = i + 1; fields(i)%vname="tilde_e3t_b";    fields(i)%grid="grid_N" 
     421        i = i + 1; fields(i)%vname="tilde_e3t_n";    fields(i)%grid="grid_N" 
     422        i = i + 1; fields(i)%vname="hdiv_lf";        fields(i)%grid="grid_N" 
     423        i = i + 1; fields(i)%vname="ub2_b";          fields(i)%grid="grid_N" 
     424        i = i + 1; fields(i)%vname="vb2_b";          fields(i)%grid="grid_N" 
     425        i = i + 1; fields(i)%vname="sshbb_e";        fields(i)%grid="grid_N" 
     426        i = i + 1; fields(i)%vname="ubb_e";          fields(i)%grid="grid_N" 
     427        i = i + 1; fields(i)%vname="vbb_e";          fields(i)%grid="grid_N" 
     428        i = i + 1; fields(i)%vname="sshb_e";         fields(i)%grid="grid_N" 
     429        i = i + 1; fields(i)%vname="ub_e";           fields(i)%grid="grid_N" 
     430        i = i + 1; fields(i)%vname="vb_e";           fields(i)%grid="grid_N" 
     431        i = i + 1; fields(i)%vname="fwf_isf_b";      fields(i)%grid="grid_N" 
     432        i = i + 1; fields(i)%vname="isf_sc_b";       fields(i)%grid="grid_N" 
     433        i = i + 1; fields(i)%vname="isf_hc_b";       fields(i)%grid="grid_N" 
     434        i = i + 1; fields(i)%vname="ssh_ibb";        fields(i)%grid="grid_N" 
     435        i = i + 1; fields(i)%vname="rnf_b";          fields(i)%grid="grid_N" 
     436        i = i + 1; fields(i)%vname="rnf_hc_b";       fields(i)%grid="grid_N" 
     437        i = i + 1; fields(i)%vname="rnf_sc_b";       fields(i)%grid="grid_N" 
     438        i = i + 1; fields(i)%vname="nn_fsbc";        fields(i)%grid="grid_scalar" 
     439        i = i + 1; fields(i)%vname="ssu_m";          fields(i)%grid="grid_N" 
     440        i = i + 1; fields(i)%vname="ssv_m";          fields(i)%grid="grid_N" 
     441        i = i + 1; fields(i)%vname="sst_m";          fields(i)%grid="grid_N" 
     442        i = i + 1; fields(i)%vname="sss_m";          fields(i)%grid="grid_N" 
     443        i = i + 1; fields(i)%vname="ssh_m";          fields(i)%grid="grid_N" 
     444        i = i + 1; fields(i)%vname="e3t_m";          fields(i)%grid="grid_N" 
     445        i = i + 1; fields(i)%vname="frq_m";          fields(i)%grid="grid_N" 
     446        i = i + 1; fields(i)%vname="avmb";           fields(i)%grid="grid_vector" 
     447        i = i + 1; fields(i)%vname="avtb";           fields(i)%grid="grid_vector" 
     448        i = i + 1; fields(i)%vname="ub2_i_b";        fields(i)%grid="grid_N" 
     449        i = i + 1; fields(i)%vname="vb2_i_b";        fields(i)%grid="grid_N" 
     450        i = i + 1; fields(i)%vname="ntime";          fields(i)%grid="grid_scalar" 
     451        i = i + 1; fields(i)%vname="Dsst";           fields(i)%grid="grid_scalar" 
     452        i = i + 1; fields(i)%vname="tmask";          fields(i)%grid="grid_N_3D" 
     453        i = i + 1; fields(i)%vname="umask";          fields(i)%grid="grid_N_3D" 
     454        i = i + 1; fields(i)%vname="vmask";          fields(i)%grid="grid_N_3D" 
     455        i = i + 1; fields(i)%vname="smask";          fields(i)%grid="grid_N_3D" 
     456        i = i + 1; fields(i)%vname="gdepw_n";        fields(i)%grid="grid_N_3D" 
     457        i = i + 1; fields(i)%vname="e3t_n";          fields(i)%grid="grid_N_3D" 
     458        i = i + 1; fields(i)%vname="e3u_n";          fields(i)%grid="grid_N_3D" 
     459        i = i + 1; fields(i)%vname="e3v_n";          fields(i)%grid="grid_N_3D" 
     460        i = i + 1; fields(i)%vname="surf_ini";       fields(i)%grid="grid_N" 
     461        i = i + 1; fields(i)%vname="e3t_b";          fields(i)%grid="grid_N_3D" 
     462        i = i + 1; fields(i)%vname="mxln";           fields(i)%grid="grid_N_3D" 
     463 
     464        IF( i-1 > max_rst_fields) THEN 
     465        IF(lwp) write(numout,*) 'E R R O R : iom_set_rst_vars SIZE of RST_FIELD array is too small' 
     466        nstop = nstop + 1 
     467        ENDIF 
     468 
     469   END SUBROUTINE iom_set_rst_vars 
     470 
     471 
     472   SUBROUTINE iom_set_rstw_active(cdrst_file) 
     473      !!--------------------------------------------------------------------- 
     474      !!                   ***  SUBROUTINE  iom_set_rstr_active  *** 
     475      !! 
     476      !! ** Purpose :  define file name in XIOS context for writing restart 
     477      !!               enable variables present in restart file for writing 
     478      !!--------------------------------------------------------------------- 
     479!sets enabled = .TRUE. for each field in restart file 
     480   CHARACTER(len=*) :: cdrst_file 
     481#if defined key_iomput 
     482   TYPE(xios_field) :: field_hdl 
     483   TYPE(xios_file) :: file_hdl 
     484   TYPE(xios_filegroup) :: filegroup_hdl 
     485   INTEGER :: i 
     486   CHARACTER(lc)  ::   clpath 
     487 
     488!set name of the restart file and enable available fields 
     489        IF(lwp) WRITE(numout,*) 'Setting restart filename (for XIOS write) to: ',cdrst_file 
     490        CALL xios_get_handle("file_definition", filegroup_hdl ) 
     491        CALL xios_add_child(filegroup_hdl, file_hdl, 'wrestart') 
     492        IF(nxioso.eq.1) THEN  
     493           CALL xios_set_file_attr( "wrestart", type="one_file", enabled=.TRUE.,&  
     494                                    mode="write", output_freq=xios_timestep)  
     495           if(lwp) write(numout,*) 'OPEN ', trim(cdrst_file), ' in one_file mode'  
     496        ELSE   
     497           CALL xios_set_file_attr( "wrestart", type="multiple_file", enabled=.TRUE.,&  
     498                                    mode="write", output_freq=xios_timestep)  
     499           if(lwp) write(numout,*) 'OPEN ', trim(cdrst_file), ' in multiple_file mode'  
     500        ENDIF  
     501        CALL xios_set_file_attr( "wrestart", name=trim(cdrst_file)) 
     502!defin files for restart context 
     503        DO i = 1, max_rst_fields 
     504         IF( rst_wfields(i)%active ) THEN 
     505                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_wfields(i)%vname)) 
     506                SELECT CASE (TRIM(rst_wfields(i)%grid)) 
     507                 CASE ("grid_N_3D") 
     508                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 
     509                        domain_ref="grid_N", axis_ref="deptht", prec = 8, operation = "instant") 
     510                 CASE ("grid_N") 
     511                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 
     512                        domain_ref="grid_N", prec = 8, operation = "instant")  
     513                 CASE ("grid_vector") 
     514                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 
     515                         axis_ref="deptht", prec = 8, operation = "instant") 
     516                 CASE ("grid_scalar") 
     517                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 
     518                        scalar_ref = "grid_scalar", prec = 8, operation = "instant") 
     519                END SELECT 
     520         ENDIF 
     521        END DO 
     522#endif 
     523   END SUBROUTINE iom_set_rstw_active 
     524 
     525   SUBROUTINE iom_set_rst_context( )  
     526     !!--------------------------------------------------------------------- 
     527      !!                   ***  SUBROUTINE  iom_set_rstr_active  *** 
     528      !! 
     529      !! ** Purpose : Define domain, axis and grid for restart (read/write)  
     530      !!              context  
     531      !!                
     532      !!--------------------------------------------------------------------- 
     533#if defined key_iomput 
     534   TYPE(xios_domaingroup)            :: domaingroup_hdl  
     535   TYPE(xios_domain)                 :: domain_hdl  
     536   TYPE(xios_axisgroup)              :: axisgroup_hdl  
     537   TYPE(xios_axis)                   :: axis_hdl  
     538   TYPE(xios_scalar)                 :: scalar_hdl  
     539   TYPE(xios_scalargroup)            :: scalargroup_hdl  
     540 
     541     CALL xios_get_handle("domain_definition",domaingroup_hdl)  
     542     CALL xios_add_child(domaingroup_hdl, domain_hdl, "grid_N")  
     543     CALL set_grid("N", glamt, gphit, .TRUE.)  
     544  
     545     CALL xios_get_handle("axis_definition",axisgroup_hdl)  
     546     CALL xios_add_child(axisgroup_hdl, axis_hdl, "deptht")  
     547!AGRIF fails to compile when unit= is in call to xios_set_axis_attr 
     548!    CALL xios_set_axis_attr( "deptht", long_name="Vertical levels",  unit="m", positive="down")  
     549     CALL xios_set_axis_attr( "deptht", long_name="Vertical levels in meters", positive="down") 
     550     CALL iom_set_axis_attr( "deptht", paxis = gdept_1d )  
     551 
     552     CALL xios_get_handle("scalar_definition", scalargroup_hdl)  
     553     CALL xios_add_child(scalargroup_hdl, scalar_hdl, "grid_scalar")  
     554#endif 
     555   END SUBROUTINE iom_set_rst_context 
    218556 
    219557   SUBROUTINE iom_swap( cdname ) 
     
    226564#if defined key_iomput 
    227565      TYPE(xios_context) :: nemo_hdl 
    228  
    229566      IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
    230567        CALL xios_get_handle(TRIM(cdname),nemo_hdl) 
     
    347684            icnt = icnt + 1 
    348685         END DO 
     686      ELSE 
     687         lxios_sini = .TRUE. 
    349688      ENDIF 
    350689      IF( llwrt ) THEN 
     
    530869   !!                   INTERFACE iom_get 
    531870   !!---------------------------------------------------------------------- 
    532    SUBROUTINE iom_g0d( kiomid, cdvar, pvar, ktime ) 
     871   SUBROUTINE iom_g0d( kiomid, cdvar, pvar, ktime, ldxios ) 
    533872      INTEGER         , INTENT(in   )                 ::   kiomid    ! Identifier of the file 
    534873      CHARACTER(len=*), INTENT(in   )                 ::   cdvar     ! Name of the variable 
    535874      REAL(wp)        , INTENT(  out)                 ::   pvar      ! read field 
    536875      INTEGER         , INTENT(in   ),     OPTIONAL   ::   ktime     ! record number 
     876      LOGICAL         , INTENT(in   ),     OPTIONAL   ::   ldxios    ! use xios to read restart 
    537877      ! 
    538878      INTEGER                                         ::   idvar     ! variable id 
     
    542882      CHARACTER(LEN=100)                              ::   clname    ! file name 
    543883      CHARACTER(LEN=1)                                ::   cldmspc   ! 
    544       ! 
    545       itime = 1 
    546       IF( PRESENT(ktime) ) itime = ktime 
    547       ! 
    548       clname = iom_file(kiomid)%name 
    549       clinfo = '          iom_g0d, file: '//trim(clname)//', var: '//trim(cdvar) 
    550       ! 
    551       IF( kiomid > 0 ) THEN 
    552          idvar = iom_varid( kiomid, cdvar ) 
    553          IF( iom_file(kiomid)%nfid > 0 .AND. idvar > 0 ) THEN 
    554             idmspc = iom_file ( kiomid )%ndims( idvar ) 
    555             IF( iom_file(kiomid)%luld(idvar) )  idmspc = idmspc - 1 
    556             WRITE(cldmspc , fmt='(i1)') idmspc 
    557             IF( idmspc > 0 )  CALL ctl_stop( TRIM(clinfo), 'When reading to a 0D array, we do not accept data', & 
    558                                  &                         'with 1 or more spatial dimensions: '//cldmspc//' were found.' , & 
    559                                  &                         'Use ncwa -a to suppress the unnecessary dimensions' ) 
    560             SELECT CASE (iom_file(kiomid)%iolib) 
    561             CASE (jpnf90   )   ;   CALL iom_nf90_get(    kiomid, idvar, pvar, itime ) 
    562             CASE DEFAULT 
    563                CALL ctl_stop( 'iom_g0d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
    564             END SELECT 
    565          ENDIF 
     884      LOGICAL                                         ::   llxios 
     885      ! 
     886      llxios = .FALSE. 
     887      IF( PRESENT(ldxios) ) llxios = ldxios 
     888 
     889      IF(.NOT.llxios) THEN  ! read data using default library 
     890         itime = 1 
     891         IF( PRESENT(ktime) ) itime = ktime 
     892         ! 
     893         clname = iom_file(kiomid)%name 
     894         clinfo = '          iom_g0d, file: '//trim(clname)//', var: '//trim(cdvar) 
     895         ! 
     896         IF( kiomid > 0 ) THEN 
     897            idvar = iom_varid( kiomid, cdvar ) 
     898            IF( iom_file(kiomid)%nfid > 0 .AND. idvar > 0 ) THEN 
     899               idmspc = iom_file ( kiomid )%ndims( idvar ) 
     900               IF( iom_file(kiomid)%luld(idvar) )  idmspc = idmspc - 1 
     901               WRITE(cldmspc , fmt='(i1)') idmspc 
     902               IF( idmspc > 0 )  CALL ctl_stop( TRIM(clinfo), 'When reading to a 0D array, we do not accept data', & 
     903                                    &                         'with 1 or more spatial dimensions: '//cldmspc//' were found.' , & 
     904                                    &                         'Use ncwa -a to suppress the unnecessary dimensions' ) 
     905               SELECT CASE (iom_file(kiomid)%iolib) 
     906               CASE (jpnf90   )   ;   CALL iom_nf90_get(    kiomid, idvar, pvar, itime ) 
     907               CASE DEFAULT 
     908                  CALL ctl_stop( 'iom_g0d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
     909               END SELECT 
     910            ENDIF 
     911         ENDIF 
     912      ELSE 
     913         IF(lwp) WRITE(numout,*) 'XIOS RST READ (0D): ', trim(cdvar) 
     914         CALL iom_swap( TRIM(crxios_context) ) 
     915         CALL xios_recv_field( trim(cdvar), pvar) 
     916         CALL iom_swap( TRIM(cxios_context) ) 
    566917      ENDIF 
    567918   END SUBROUTINE iom_g0d 
    568919 
    569    SUBROUTINE iom_g1d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount ) 
     920   SUBROUTINE iom_g1d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, ldxios ) 
    570921      INTEGER         , INTENT(in   )                         ::   kiomid    ! Identifier of the file 
    571922      INTEGER         , INTENT(in   )                         ::   kdom      ! Type of domain to be read 
     
    575926      INTEGER         , INTENT(in   ), DIMENSION(1), OPTIONAL ::   kstart    ! start axis position of the reading  
    576927      INTEGER         , INTENT(in   ), DIMENSION(1), OPTIONAL ::   kcount    ! number of points in each axis 
     928      LOGICAL         , INTENT(in   ),               OPTIONAL ::   ldxios    ! read data using XIOS 
    577929      ! 
    578930      IF( kiomid > 0 ) THEN 
    579931         IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom       , cdvar        , pv_r1d=pvar,   & 
    580               &                                                     ktime=ktime, kstart=kstart, kcount=kcount ) 
     932              &                                                     ktime=ktime, kstart=kstart, kcount=kcount, & 
     933              &                                                     ldxios=ldxios ) 
    581934      ENDIF 
    582935   END SUBROUTINE iom_g1d 
    583936 
    584    SUBROUTINE iom_g2d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr ) 
     937   SUBROUTINE iom_g2d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr, ldxios) 
    585938      INTEGER         , INTENT(in   )                           ::   kiomid    ! Identifier of the file 
    586939      INTEGER         , INTENT(in   )                           ::   kdom      ! Type of domain to be read 
     
    594947                                                                               ! called open_ocean_jstart to set the start 
    595948                                                                               ! value for the 2nd dimension (netcdf only) 
     949      LOGICAL         , INTENT(in   ),                 OPTIONAL ::   ldxios    ! read data using XIOS 
    596950      ! 
    597951      IF( kiomid > 0 ) THEN 
    598952         IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom       , cdvar        , pv_r2d=pvar,   & 
    599953              &                                                     ktime=ktime, kstart=kstart, kcount=kcount, & 
    600               &                                                     lrowattr=lrowattr ) 
     954              &                                                     lrowattr=lrowattr,  ldxios=ldxios) 
    601955      ENDIF 
    602956   END SUBROUTINE iom_g2d 
    603957 
    604    SUBROUTINE iom_g3d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr ) 
     958   SUBROUTINE iom_g3d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr, ldxios ) 
    605959      INTEGER         , INTENT(in   )                             ::   kiomid    ! Identifier of the file 
    606960      INTEGER         , INTENT(in   )                             ::   kdom      ! Type of domain to be read 
     
    614968                                                                                 ! called open_ocean_jstart to set the start 
    615969                                                                                 ! value for the 2nd dimension (netcdf only) 
     970      LOGICAL         , INTENT(in   ),                   OPTIONAL ::   ldxios    ! read data using XIOS 
    616971      ! 
    617972      IF( kiomid > 0 ) THEN 
    618973         IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom       , cdvar        , pv_r3d=pvar,   & 
    619974              &                                                     ktime=ktime, kstart=kstart, kcount=kcount, & 
    620               &                                                     lrowattr=lrowattr ) 
     975              &                                                     lrowattr=lrowattr, ldxios=ldxios ) 
    621976      ENDIF 
    622977   END SUBROUTINE iom_g3d 
     
    626981         &                  pv_r1d, pv_r2d, pv_r3d,   & 
    627982         &                  ktime , kstart, kcount,   & 
    628          &                  lrowattr                ) 
     983         &                  lrowattr, ldxios        ) 
    629984      !!----------------------------------------------------------------------- 
    630985      !!                  ***  ROUTINE  iom_get_123d  *** 
     
    6471002                                                                           ! called open_ocean_jstart to set the start 
    6481003                                                                           ! value for the 2nd dimension (netcdf only) 
    649       ! 
     1004      LOGICAL                    , INTENT(in   ), OPTIONAL ::   ldxios     ! use XIOS to read restart 
     1005      ! 
     1006      LOGICAL                        ::   llxios       ! local definition for XIOS read 
    6501007      LOGICAL                        ::   llnoov      ! local definition to read overlap 
    6511008      LOGICAL                        ::   luse_jattr  ! local definition to read open_ocean_jstart file attribute 
     
    6741031      !--------------------------------------------------------------------- 
    6751032      ! 
    676       clname = iom_file(kiomid)%name   !   esier to read 
    677       clinfo = '          iom_get_123d, file: '//trim(clname)//', var: '//trim(cdvar) 
    678       ! local definition of the domain ? 
     1033      REAL(wp)                       :: gma, gmi 
     1034      llxios = .FALSE. 
     1035      if(PRESENT(ldxios)) llxios = ldxios 
     1036      idvar = iom_varid( kiomid, cdvar )  
    6791037      idom = kdom 
    680       ! do we read the overlap  
    681       ! ugly patch SM+JMM+RB to overwrite global definition in some cases 
    682       llnoov = (jpni * jpnj ) == jpnij .AND. .NOT. lk_agrif  
    683       ! check kcount and kstart optionals parameters... 
    684       IF( PRESENT(kcount) .AND. (.NOT. PRESENT(kstart)) ) CALL ctl_stop(trim(clinfo), 'kcount present needs kstart present') 
    685       IF( PRESENT(kstart) .AND. (.NOT. PRESENT(kcount)) ) CALL ctl_stop(trim(clinfo), 'kstart present needs kcount present') 
    686       IF( PRESENT(kstart) .AND. idom /= jpdom_unknown .AND.  idom /= jpdom_autoglo_xy  ) & 
     1038 
     1039      IF(.NOT.llxios) THEN 
     1040          clname = iom_file(kiomid)%name   !   esier to read 
     1041          clinfo = '          iom_get_123d, file: '//trim(clname)//', var: '//trim(cdvar) 
     1042          ! local definition of the domain ? 
     1043          ! do we read the overlap  
     1044          ! ugly patch SM+JMM+RB to overwrite global definition in some cases 
     1045          llnoov = (jpni * jpnj ) == jpnij .AND. .NOT. lk_agrif  
     1046          ! check kcount and kstart optionals parameters... 
     1047          IF( PRESENT(kcount) .AND. (.NOT. PRESENT(kstart)) ) CALL ctl_stop(trim(clinfo), 'kcount present needs kstart present') 
     1048          IF( PRESENT(kstart) .AND. (.NOT. PRESENT(kcount)) ) CALL ctl_stop(trim(clinfo), 'kstart present needs kcount present') 
     1049          IF( PRESENT(kstart) .AND. idom /= jpdom_unknown .AND.  idom /= jpdom_autoglo_xy  ) & 
    6871050     &           CALL ctl_stop(trim(clinfo), 'kstart present needs kdom = jpdom_unknown or kdom = jpdom_autoglo_xy') 
    6881051 
     
    7011064      ENDIF 
    7021065 
    703       ! Search for the variable in the data base (eventually actualize data) 
    704       istop = nstop 
    705       idvar = iom_varid( kiomid, cdvar ) 
    706       ! 
    707       IF( idvar > 0 ) THEN 
    708          ! to write iom_file(kiomid)%dimsz in a shorter way ! 
    709          idimsz(:) = iom_file(kiomid)%dimsz(:, idvar)  
    710          inbdim = iom_file(kiomid)%ndims(idvar)            ! number of dimensions in the file 
    711          idmspc = inbdim                                   ! number of spatial dimensions in the file 
    712          IF( iom_file(kiomid)%luld(idvar) )   idmspc = inbdim - 1 
    713          IF( idmspc > 3 )   CALL ctl_stop(trim(clinfo), 'the file has more than 3 spatial dimensions this case is not coded...')  
    714          ! 
    715          ! update idom definition... 
    716          ! Identify the domain in case of jpdom_auto(glo/dta) definition 
    717          IF( idom == jpdom_autoglo_xy ) THEN 
    718             ll_depth_spec = .TRUE. 
    719             idom = jpdom_autoglo 
    720          ELSE 
    721             ll_depth_spec = .FALSE. 
    722          ENDIF 
    723          IF( idom == jpdom_autoglo .OR. idom == jpdom_autodta ) THEN             
    724             IF( idom == jpdom_autoglo ) THEN   ;   idom = jpdom_global  
    725             ELSE                               ;   idom = jpdom_data 
    726             ENDIF 
    727             ind1 = INDEX( clname, '_', back = .TRUE. ) + 1 
    728             ind2 = INDEX( clname, '.', back = .TRUE. ) - 1 
    729             IF( ind2 > ind1 ) THEN   ;   IF( VERIFY( clname(ind1:ind2), '0123456789' ) == 0 )   idom = jpdom_local   ;   ENDIF 
    730          ENDIF 
    731          ! Identify the domain in case of jpdom_local definition 
    732          IF( idom == jpdom_local ) THEN 
    733             IF(     idimsz(1) == jpi               .AND. idimsz(2) == jpj               ) THEN   ;   idom = jpdom_local_full 
    734             ELSEIF( idimsz(1) == nlci              .AND. idimsz(2) == nlcj              ) THEN   ;   idom = jpdom_local_noextra 
    735             ELSEIF( idimsz(1) == (nlei - nldi + 1) .AND. idimsz(2) == (nlej - nldj + 1) ) THEN   ;   idom = jpdom_local_noovlap 
    736             ELSE   ;   CALL ctl_stop( trim(clinfo), 'impossible to identify the local domain' ) 
    737             ENDIF 
    738          ENDIF 
    739          ! 
    740          ! check the consistency between input array and data rank in the file 
    741          ! 
    742          ! initializations 
    743          itime = 1 
    744          IF( PRESENT(ktime) ) itime = ktime 
    745  
    746          irankpv = 1 * COUNT( (/PRESENT(pv_r1d)/) ) + 2 * COUNT( (/PRESENT(pv_r2d)/) ) + 3 * COUNT( (/PRESENT(pv_r3d)/) ) 
    747          WRITE(clrankpv, fmt='(i1)') irankpv 
    748          WRITE(cldmspc , fmt='(i1)') idmspc 
    749          ! 
    750          IF(     idmspc <  irankpv ) THEN  
    751             CALL ctl_stop( TRIM(clinfo), 'The file has only '//cldmspc//' spatial dimension',   & 
     1066          ! Search for the variable in the data base (eventually actualize data) 
     1067          istop = nstop 
     1068          ! 
     1069          IF( idvar > 0 ) THEN 
     1070             ! to write iom_file(kiomid)%dimsz in a shorter way ! 
     1071             idimsz(:) = iom_file(kiomid)%dimsz(:, idvar)  
     1072             inbdim = iom_file(kiomid)%ndims(idvar)            ! number of dimensions in the file 
     1073             idmspc = inbdim                                   ! number of spatial dimensions in the file 
     1074             IF( iom_file(kiomid)%luld(idvar) )   idmspc = inbdim - 1 
     1075             IF( idmspc > 3 )   CALL ctl_stop(trim(clinfo), 'the file has more than 3 spatial dimensions this case is not coded...')  
     1076             ! 
     1077             ! update idom definition... 
     1078             ! Identify the domain in case of jpdom_auto(glo/dta) definition 
     1079             IF( idom == jpdom_autoglo_xy ) THEN 
     1080                ll_depth_spec = .TRUE. 
     1081                idom = jpdom_autoglo 
     1082             ELSE 
     1083                ll_depth_spec = .FALSE. 
     1084             ENDIF 
     1085             IF( idom == jpdom_autoglo .OR. idom == jpdom_autodta ) THEN             
     1086                IF( idom == jpdom_autoglo ) THEN   ;   idom = jpdom_global  
     1087                ELSE                               ;   idom = jpdom_data 
     1088                ENDIF 
     1089                ind1 = INDEX( clname, '_', back = .TRUE. ) + 1 
     1090                ind2 = INDEX( clname, '.', back = .TRUE. ) - 1 
     1091                IF( ind2 > ind1 ) THEN   ;   IF( VERIFY( clname(ind1:ind2), '0123456789' ) == 0 )   idom = jpdom_local   ;   ENDIF 
     1092             ENDIF 
     1093             ! Identify the domain in case of jpdom_local definition 
     1094             IF( idom == jpdom_local ) THEN 
     1095                IF(     idimsz(1) == jpi               .AND. idimsz(2) == jpj               ) THEN   ;   idom = jpdom_local_full 
     1096                ELSEIF( idimsz(1) == nlci              .AND. idimsz(2) == nlcj              ) THEN   ;   idom = jpdom_local_noextra 
     1097                ELSEIF( idimsz(1) == (nlei - nldi + 1) .AND. idimsz(2) == (nlej - nldj + 1) ) THEN   ;   idom = jpdom_local_noovlap 
     1098                ELSE   ;   CALL ctl_stop( trim(clinfo), 'impossible to identify the local domain' ) 
     1099                ENDIF 
     1100             ENDIF 
     1101             ! 
     1102             ! check the consistency between input array and data rank in the file 
     1103             ! 
     1104             ! initializations 
     1105             itime = 1 
     1106             IF( PRESENT(ktime) ) itime = ktime 
     1107 
     1108             irankpv = 1 * COUNT( (/PRESENT(pv_r1d)/) ) + 2 * COUNT( (/PRESENT(pv_r2d)/) ) + 3 * COUNT( (/PRESENT(pv_r3d)/) ) 
     1109             WRITE(clrankpv, fmt='(i1)') irankpv 
     1110             WRITE(cldmspc , fmt='(i1)') idmspc 
     1111             ! 
     1112             IF(     idmspc <  irankpv ) THEN  
     1113                CALL ctl_stop( TRIM(clinfo), 'The file has only '//cldmspc//' spatial dimension',   & 
    7521114               &                         'it is impossible to read a '//clrankpv//'D array from this file...' ) 
    753          ELSEIF( idmspc == irankpv ) THEN 
    754             IF( PRESENT(pv_r1d) .AND. idom /= jpdom_unknown )   & 
     1115             ELSEIF( idmspc == irankpv ) THEN 
     1116                IF( PRESENT(pv_r1d) .AND. idom /= jpdom_unknown )   & 
    7551117               &   CALL ctl_stop( TRIM(clinfo), 'case not coded...You must use jpdom_unknown' ) 
    756          ELSEIF( idmspc >  irankpv ) THEN 
    757                IF( PRESENT(pv_r2d) .AND. itime == 1 .AND. idimsz(3) == 1 .AND. idmspc == 3 ) THEN 
    758                   CALL ctl_warn( trim(clinfo), '2D array but 3 spatial dimensions for the data...'              ,   & 
     1118             ELSEIF( idmspc >  irankpv ) THEN 
     1119                   IF( PRESENT(pv_r2d) .AND. itime == 1 .AND. idimsz(3) == 1 .AND. idmspc == 3 ) THEN 
     1120                      CALL ctl_warn( trim(clinfo), '2D array but 3 spatial dimensions for the data...'              ,   & 
    7591121                        &         'As the size of the z dimension is 1 and as we try to read the first record, ',   & 
    7601122                        &         'we accept this case, even if there is a possible mix-up between z and time dimension' )    
    761                   idmspc = idmspc - 1 
    762                ELSE 
    763                   CALL ctl_stop( TRIM(clinfo), 'To keep iom lisibility, when reading a '//clrankpv//'D array,'         ,   & 
     1123                      idmspc = idmspc - 1 
     1124                   ELSE 
     1125                      CALL ctl_stop( TRIM(clinfo), 'To keep iom lisibility, when reading a '//clrankpv//'D array,'         ,   & 
    7641126                     &                         'we do not accept data with '//cldmspc//' spatial dimensions',   & 
    7651127                     &                         'Use ncwa -a to suppress the unnecessary dimensions' ) 
    766                ENDIF 
    767          ENDIF 
    768  
    769          ! 
    770          ! definition of istart and icnt 
    771          ! 
    772          icnt  (:) = 1 
    773          istart(:) = 1 
    774          istart(idmspc+1) = itime 
     1128                   ENDIF 
     1129             ENDIF 
     1130 
     1131             ! 
     1132             ! definition of istart and icnt 
     1133             ! 
     1134             icnt  (:) = 1 
     1135             istart(:) = 1 
     1136             istart(idmspc+1) = itime 
    7751137 
    7761138         IF( PRESENT(kstart) .AND. .NOT. ll_depth_spec ) THEN  
     
    7931155! JMM + SM: ugly patch before getting the new version of lib_mpp) 
    7941156!                  IF( idom /= jpdom_local_noovlap )   istart(1:2) = istart(1:2) + (/ nldi - 1, nldj - 1 /) 
    795                   IF( llnoov .AND. idom /= jpdom_local_noovlap ) istart(1:2) = istart(1:2) + (/ nldi - 1, nldj - 1 /) 
     1157                      IF( llnoov .AND. idom /= jpdom_local_noovlap ) istart(1:2) = istart(1:2) + (/ nldi - 1, nldj - 1 /) 
    7961158                  ! we do not read the overlap and the extra-halos -> from nldi to nlei and from nldj to nlej  
    7971159! JMM + SM: ugly patch before getting the new version of lib_mpp) 
     
    8101172         ENDIF 
    8111173 
    812          ! check that istart and icnt can be used with this file 
    813          !- 
    814          DO jl = 1, jpmax_dims 
    815             itmp = istart(jl)+icnt(jl)-1 
    816             IF( itmp > idimsz(jl) .AND. idimsz(jl) /= 0 ) THEN 
    817                WRITE( ctmp1, FMT="('(istart(', i1, ') + icnt(', i1, ') - 1) = ', i5)" ) jl, jl, itmp 
    818                WRITE( ctmp2, FMT="(' is larger than idimsz(', i1,') = ', i5)"         ) jl, idimsz(jl) 
    819                CALL ctl_stop( trim(clinfo), 'start and count too big regarding to the size of the data, ', ctmp1, ctmp2 )      
    820             ENDIF 
    821          END DO 
    822  
    823          ! check that icnt matches the input array 
    824          !-      
    825          IF( idom == jpdom_unknown ) THEN 
    826             IF( irankpv == 1 )        ishape(1:1) = SHAPE(pv_r1d) 
    827             IF( irankpv == 2 )        ishape(1:2) = SHAPE(pv_r2d) 
    828             IF( irankpv == 3 )        ishape(1:3) = SHAPE(pv_r3d) 
    829             ctmp1 = 'd' 
    830          ELSE 
    831             IF( irankpv == 2 ) THEN 
     1174             ! check that istart and icnt can be used with this file 
     1175             !- 
     1176             DO jl = 1, jpmax_dims 
     1177                itmp = istart(jl)+icnt(jl)-1 
     1178                IF( itmp > idimsz(jl) .AND. idimsz(jl) /= 0 ) THEN 
     1179                   WRITE( ctmp1, FMT="('(istart(', i1, ') + icnt(', i1, ') - 1) = ', i5)" ) jl, jl, itmp 
     1180                   WRITE( ctmp2, FMT="(' is larger than idimsz(', i1,') = ', i5)"         ) jl, idimsz(jl) 
     1181                   CALL ctl_stop( trim(clinfo), 'start and count too big regarding to the size of the data, ', ctmp1, ctmp2 )      
     1182                ENDIF 
     1183             END DO 
     1184 
     1185             ! check that icnt matches the input array 
     1186             !-      
     1187             IF( idom == jpdom_unknown ) THEN 
     1188                IF( irankpv == 1 )        ishape(1:1) = SHAPE(pv_r1d) 
     1189                IF( irankpv == 2 )        ishape(1:2) = SHAPE(pv_r2d) 
     1190                IF( irankpv == 3 )        ishape(1:3) = SHAPE(pv_r3d) 
     1191                ctmp1 = 'd' 
     1192             ELSE 
     1193                IF( irankpv == 2 ) THEN 
    8321194! JMM + SM: ugly patch before getting the new version of lib_mpp) 
    8331195!               ishape(1:2) = SHAPE(pv_r2d(nldi:nlei,nldj:nlej  ))   ;   ctmp1 = 'd(nldi:nlei,nldj:nlej)' 
    834                IF( llnoov ) THEN ; ishape(1:2)=SHAPE(pv_r2d(nldi:nlei,nldj:nlej  )) ; ctmp1='d(nldi:nlei,nldj:nlej)' 
    835                ELSE              ; ishape(1:2)=SHAPE(pv_r2d(1   :nlci,1   :nlcj  )) ; ctmp1='d(1:nlci,1:nlcj)' 
    836                ENDIF 
    837             ENDIF 
    838             IF( irankpv == 3 ) THEN  
     1196                   IF( llnoov ) THEN ; ishape(1:2)=SHAPE(pv_r2d(nldi:nlei,nldj:nlej  )) ; ctmp1='d(nldi:nlei,nldj:nlej)' 
     1197                   ELSE              ; ishape(1:2)=SHAPE(pv_r2d(1   :nlci,1   :nlcj  )) ; ctmp1='d(1:nlci,1:nlcj)' 
     1198                   ENDIF 
     1199                ENDIF 
     1200                IF( irankpv == 3 ) THEN  
    8391201! JMM + SM: ugly patch before getting the new version of lib_mpp) 
    8401202!               ishape(1:3) = SHAPE(pv_r3d(nldi:nlei,nldj:nlej,:))   ;   ctmp1 = 'd(nldi:nlei,nldj:nlej,:)' 
    841                IF( llnoov ) THEN ; ishape(1:3)=SHAPE(pv_r3d(nldi:nlei,nldj:nlej,:)) ; ctmp1='d(nldi:nlei,nldj:nlej,:)' 
    842                ELSE              ; ishape(1:3)=SHAPE(pv_r3d(1   :nlci,1   :nlcj,:)) ; ctmp1='d(1:nlci,1:nlcj,:)' 
    843                ENDIF 
    844             ENDIF 
    845          ENDIF 
     1203                   IF( llnoov ) THEN ; ishape(1:3)=SHAPE(pv_r3d(nldi:nlei,nldj:nlej,:)) ; ctmp1='d(nldi:nlei,nldj:nlej,:)' 
     1204                   ELSE              ; ishape(1:3)=SHAPE(pv_r3d(1   :nlci,1   :nlcj,:)) ; ctmp1='d(1:nlci,1:nlcj,:)' 
     1205                   ENDIF 
     1206                ENDIF 
     1207             ENDIF 
    8461208          
    847          DO jl = 1, irankpv 
    848             WRITE( ctmp2, FMT="(', ', i1,'): ', i5,' /= icnt(', i1,'):', i5)" ) jl, ishape(jl), jl, icnt(jl) 
    849             IF( ishape(jl) /= icnt(jl) )   CALL ctl_stop( TRIM(clinfo), 'size(pv_r'//clrankpv//TRIM(ctmp1)//TRIM(ctmp2) ) 
    850          END DO 
    851  
    852       ENDIF 
    853  
    854       ! read the data 
    855       !-      
    856       IF( idvar > 0 .AND. istop == nstop ) THEN   ! no additional errors until this point... 
    857          ! 
    858          ! find the right index of the array to be read 
     1209             DO jl = 1, irankpv 
     1210                WRITE( ctmp2, FMT="(', ', i1,'): ', i5,' /= icnt(', i1,'):', i5)" ) jl, ishape(jl), jl, icnt(jl) 
     1211                IF( ishape(jl) /= icnt(jl) )   CALL ctl_stop( TRIM(clinfo), 'size(pv_r'//clrankpv//TRIM(ctmp1)//TRIM(ctmp2) ) 
     1212             END DO 
     1213 
     1214          ENDIF 
     1215 
     1216          ! read the data 
     1217          !-      
     1218          IF( idvar > 0 .AND. istop == nstop ) THEN   ! no additional errors until this point... 
     1219             ! 
     1220             ! find the right index of the array to be read 
    8591221! JMM + SM: ugly patch before getting the new version of lib_mpp) 
    8601222!         IF( idom /= jpdom_unknown ) THEN   ;   ix1 = nldi   ;   ix2 = nlei      ;   iy1 = nldj   ;   iy2 = nlej 
    8611223!         ELSE                               ;   ix1 = 1      ;   ix2 = icnt(1)   ;   iy1 = 1      ;   iy2 = icnt(2) 
    8621224!         ENDIF 
    863          IF( llnoov ) THEN 
    864             IF( idom /= jpdom_unknown ) THEN   ;   ix1 = nldi   ;   ix2 = nlei      ;   iy1 = nldj   ;   iy2 = nlej 
    865             ELSE                               ;   ix1 = 1      ;   ix2 = icnt(1)   ;   iy1 = 1      ;   iy2 = icnt(2) 
    866             ENDIF 
    867          ELSE 
    868             IF( idom /= jpdom_unknown ) THEN   ;   ix1 = 1      ;   ix2 = nlci      ;   iy1 = 1      ;   iy2 = nlcj 
    869             ELSE                               ;   ix1 = 1      ;   ix2 = icnt(1)   ;   iy1 = 1      ;   iy2 = icnt(2) 
    870             ENDIF 
    871          ENDIF 
     1225             IF( llnoov ) THEN 
     1226                IF( idom /= jpdom_unknown ) THEN   ;   ix1 = nldi   ;   ix2 = nlei      ;   iy1 = nldj   ;   iy2 = nlej 
     1227                ELSE                               ;   ix1 = 1      ;   ix2 = icnt(1)   ;   iy1 = 1      ;   iy2 = icnt(2) 
     1228                ENDIF 
     1229             ELSE 
     1230                IF( idom /= jpdom_unknown ) THEN   ;   ix1 = 1      ;   ix2 = nlci      ;   iy1 = 1      ;   iy2 = nlcj 
     1231                ELSE                               ;   ix1 = 1      ;   ix2 = icnt(1)   ;   iy1 = 1      ;   iy2 = icnt(2) 
     1232                ENDIF 
     1233             ENDIF 
    8721234       
    8731235         SELECT CASE (iom_file(kiomid)%iolib) 
     
    8781240         END SELECT 
    8791241 
    880          IF( istop == nstop ) THEN   ! no additional errors until this point... 
    881             IF(lwp) WRITE(numout,"(10x,' read ',a,' (rec: ',i6,') in ',a,' ok')") TRIM(cdvar), itime, TRIM(iom_file(kiomid)%name) 
     1242             IF( istop == nstop ) THEN   ! no additional errors until this point... 
     1243                IF(lwp) WRITE(numout,"(10x,' read ',a,' (rec: ',i6,') in ',a,' ok')") TRIM(cdvar), itime, TRIM(iom_file(kiomid)%name) 
    8821244           
    883             !--- overlap areas and extra hallows (mpp) 
    884             IF(     PRESENT(pv_r2d) .AND. idom /= jpdom_unknown ) THEN 
    885                CALL lbc_lnk( pv_r2d,'Z',-999.,'no0' ) 
    886             ELSEIF( PRESENT(pv_r3d) .AND. idom /= jpdom_unknown ) THEN 
    887                ! this if could be simplified with the new lbc_lnk that works with any size of the 3rd dimension 
    888                IF( icnt(3) == jpk ) THEN 
    889                   CALL lbc_lnk( pv_r3d,'Z',-999.,'no0' ) 
    890                ELSE   ! put some arbitrary value (a call to lbc_lnk will be done later...) 
    891                   DO jj = nlcj+1, jpj   ;   pv_r3d(1:nlci, jj, :) = pv_r3d(1:nlci, nlej, :)   ;   END DO 
    892                   DO ji = nlci+1, jpi   ;   pv_r3d(ji    , : , :) = pv_r3d(nlei  , :   , :)   ;   END DO 
    893                ENDIF 
    894             ENDIF 
    895              
    896             ! C1D case : always call lbc_lnk to replicate the central value over the whole 3X3 domain 
    897             IF( lk_c1d .AND. PRESENT(pv_r2d) )   CALL lbc_lnk( pv_r2d,'Z',1. ) 
    898             IF( lk_c1d .AND. PRESENT(pv_r3d) )   CALL lbc_lnk( pv_r3d,'Z',1. ) 
    899      
    900             !--- Apply scale_factor and offset 
    901             zscf = iom_file(kiomid)%scf(idvar)      ! scale factor 
    902             zofs = iom_file(kiomid)%ofs(idvar)      ! offset 
    903             IF(     PRESENT(pv_r1d) ) THEN 
    904                IF( zscf /= 1. )   pv_r1d(:) = pv_r1d(:) * zscf  
    905                IF( zofs /= 0. )   pv_r1d(:) = pv_r1d(:) + zofs 
    906             ELSEIF( PRESENT(pv_r2d) ) THEN 
    907                IF( zscf /= 1.)   pv_r2d(:,:) = pv_r2d(:,:) * zscf 
    908                IF( zofs /= 0.)   pv_r2d(:,:) = pv_r2d(:,:) + zofs 
    909             ELSEIF( PRESENT(pv_r3d) ) THEN 
    910                IF( zscf /= 1.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) * zscf 
    911                IF( zofs /= 0.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) + zofs 
    912             ENDIF 
    913             ! 
    914          ENDIF 
    915          ! 
    916       ENDIF 
    917       ! 
     1245                !--- overlap areas and extra hallows (mpp) 
     1246                IF(     PRESENT(pv_r2d) .AND. idom /= jpdom_unknown ) THEN 
     1247                   CALL lbc_lnk( pv_r2d,'Z',-999.,'no0' ) 
     1248                ELSEIF( PRESENT(pv_r3d) .AND. idom /= jpdom_unknown ) THEN 
     1249                   ! this if could be simplified with the new lbc_lnk that works with any size of the 3rd dimension 
     1250                   IF( icnt(3) == jpk ) THEN 
     1251                      CALL lbc_lnk( pv_r3d,'Z',-999.,'no0' ) 
     1252                   ELSE   ! put some arbitrary value (a call to lbc_lnk will be done later...) 
     1253                      DO jj = nlcj+1, jpj   ;   pv_r3d(1:nlci, jj, :) = pv_r3d(1:nlci, nlej, :)   ;   END DO 
     1254                      DO ji = nlci+1, jpi   ;   pv_r3d(ji    , : , :) = pv_r3d(nlei  , :   , :)   ;   END DO 
     1255                   ENDIF 
     1256                ENDIF 
     1257                ! 
     1258             ELSE 
     1259                ! return if istop == nstop is false 
     1260                RETURN 
     1261             ENDIF 
     1262          ELSE 
     1263             ! return if statment idvar > 0 .AND. istop == nstop is false 
     1264             RETURN 
     1265          ENDIF 
     1266          ! 
     1267       ELSE        ! read using XIOS. Only if KEY_IOMPUT is defined 
     1268#if defined key_iomput 
     1269!would be good to be able to check which context is active and swap only if current is not restart 
     1270          CALL iom_swap( TRIM(crxios_context) )  
     1271          IF( PRESENT(pv_r3d) ) THEN 
     1272             if(lwp) write(numout,*) 'XIOS RST READ (3D): ',trim(cdvar) 
     1273             CALL xios_recv_field( trim(cdvar), pv_r3d) 
     1274             IF(idom /= jpdom_unknown ) then 
     1275                 CALL lbc_lnk( pv_r3d,'Z',-999.,'no0' ) 
     1276             ENDIF 
     1277          ELSEIF( PRESENT(pv_r2d) ) THEN 
     1278             if(lwp) write(numout,*) 'XIOS RST READ (2D): ', trim(cdvar) 
     1279             CALL xios_recv_field( trim(cdvar), pv_r2d) 
     1280             IF(idom /= jpdom_unknown ) THEN 
     1281                 CALL lbc_lnk(pv_r2d,'Z',-999.,'no0') 
     1282             ENDIF 
     1283          ELSEIF( PRESENT(pv_r1d) ) THEN 
     1284             if(lwp) write(numout,*) 'XIOS RST READ (1D): ', trim(cdvar) 
     1285             CALL xios_recv_field( trim(cdvar), pv_r1d) 
     1286          ENDIF 
     1287          CALL iom_swap( TRIM(cxios_context) ) 
     1288#else 
     1289          istop = istop + 1  
     1290          clinfo = 'Can not use XIOS in iom_get_123d, file: '//trim(clname)//', var:'//trim(cdvar) 
     1291#endif 
     1292       ENDIF 
     1293!some final adjustments 
     1294       ! C1D case : always call lbc_lnk to replicate the central value over the whole 3X3 domain 
     1295       IF( lk_c1d .AND. PRESENT(pv_r2d) )   CALL lbc_lnk( pv_r2d,'Z',1. ) 
     1296       IF( lk_c1d .AND. PRESENT(pv_r3d) )   CALL lbc_lnk( pv_r3d,'Z',1. ) 
     1297 
     1298       !--- Apply scale_factor and offset 
     1299       zscf = iom_file(kiomid)%scf(idvar)      ! scale factor 
     1300       zofs = iom_file(kiomid)%ofs(idvar)      ! offset 
     1301       IF(     PRESENT(pv_r1d) ) THEN 
     1302          IF( zscf /= 1. )   pv_r1d(:) = pv_r1d(:) * zscf  
     1303          IF( zofs /= 0. )   pv_r1d(:) = pv_r1d(:) + zofs 
     1304       ELSEIF( PRESENT(pv_r2d) ) THEN 
     1305          IF( zscf /= 1.)   pv_r2d(:,:) = pv_r2d(:,:) * zscf 
     1306          IF( zofs /= 0.)   pv_r2d(:,:) = pv_r2d(:,:) + zofs 
     1307       ELSEIF( PRESENT(pv_r3d) ) THEN 
     1308          IF( zscf /= 1.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) * zscf 
     1309          IF( zofs /= 0.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) + zofs 
     1310       ENDIF 
    9181311   END SUBROUTINE iom_get_123d 
    9191312 
     
    11151508   !!                   INTERFACE iom_rstput 
    11161509   !!---------------------------------------------------------------------- 
    1117    SUBROUTINE iom_rp0d( kt, kwrite, kiomid, cdvar, pvar, ktype ) 
     1510   SUBROUTINE iom_rp0d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 
    11181511      INTEGER         , INTENT(in)                         ::   kt       ! ocean time-step 
    11191512      INTEGER         , INTENT(in)                         ::   kwrite   ! writing time-step 
     
    11221515      REAL(wp)        , INTENT(in)                         ::   pvar     ! written field 
    11231516      INTEGER         , INTENT(in), OPTIONAL               ::   ktype    ! variable external type 
     1517      LOGICAL, OPTIONAL :: ldxios   ! xios write flag 
     1518      LOGICAL :: llx                ! local xios write flag 
    11241519      INTEGER :: ivid   ! variable id 
    1125       IF( kiomid > 0 ) THEN 
    1126          IF( iom_file(kiomid)%nfid > 0 ) THEN 
    1127             ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
    1128             SELECT CASE (iom_file(kiomid)%iolib) 
    1129             CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 
    1130             CASE DEFAULT 
    1131                CALL ctl_stop( 'iom_rp0d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
    1132             END SELECT 
     1520 
     1521      llx = .FALSE. 
     1522      IF(PRESENT(ldxios)) llx = ldxios 
     1523      IF( llx ) THEN 
     1524#ifdef key_iomput 
     1525      IF( kt == kwrite ) THEN 
     1526          IF(lwp) write(numout,*) 'RESTART: write (XIOS 0D) ',trim(cdvar) 
     1527          CALL xios_send_field(trim(cdvar), pvar) 
     1528      ENDIF 
     1529#endif 
     1530      ELSE 
     1531         IF( kiomid > 0 ) THEN 
     1532            IF( iom_file(kiomid)%nfid > 0 ) THEN 
     1533               ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
     1534               SELECT CASE (iom_file(kiomid)%iolib) 
     1535               CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 
     1536               CASE DEFAULT      
     1537                  CALL ctl_stop( 'iom_rp0d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
     1538               END SELECT 
     1539            ENDIF 
    11331540         ENDIF 
    11341541      ENDIF 
    11351542   END SUBROUTINE iom_rp0d 
    11361543 
    1137    SUBROUTINE iom_rp1d( kt, kwrite, kiomid, cdvar, pvar, ktype ) 
     1544   SUBROUTINE iom_rp1d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 
    11381545      INTEGER         , INTENT(in)                         ::   kt       ! ocean time-step 
    11391546      INTEGER         , INTENT(in)                         ::   kwrite   ! writing time-step 
     
    11421549      REAL(wp)        , INTENT(in), DIMENSION(          :) ::   pvar     ! written field 
    11431550      INTEGER         , INTENT(in), OPTIONAL               ::   ktype    ! variable external type 
     1551      LOGICAL, OPTIONAL :: ldxios   ! xios write flag 
     1552      LOGICAL :: llx                ! local xios write flag 
    11441553      INTEGER :: ivid   ! variable id 
    1145       IF( kiomid > 0 ) THEN 
    1146          IF( iom_file(kiomid)%nfid > 0 ) THEN 
    1147             ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
    1148             SELECT CASE (iom_file(kiomid)%iolib) 
    1149             CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 
    1150             CASE DEFAULT 
    1151                CALL ctl_stop( 'iom_rp1d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
    1152             END SELECT 
     1554 
     1555      llx = .FALSE. 
     1556      IF(PRESENT(ldxios)) llx = ldxios 
     1557      IF( llx ) THEN 
     1558#ifdef key_iomput 
     1559      IF( kt == kwrite ) THEN 
     1560         IF(lwp) write(numout,*) 'RESTART: write (XIOS 1D) ',trim(cdvar) 
     1561         CALL xios_send_field(trim(cdvar), pvar) 
     1562      ENDIF 
     1563#endif 
     1564      ELSE 
     1565         IF( kiomid > 0 ) THEN 
     1566            IF( iom_file(kiomid)%nfid > 0 ) THEN 
     1567               ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
     1568               SELECT CASE (iom_file(kiomid)%iolib) 
     1569               CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 
     1570               CASE DEFAULT      
     1571                  CALL ctl_stop( 'iom_rp1d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
     1572               END SELECT 
     1573            ENDIF 
    11531574         ENDIF 
    11541575      ENDIF 
    11551576   END SUBROUTINE iom_rp1d 
    11561577 
    1157    SUBROUTINE iom_rp2d( kt, kwrite, kiomid, cdvar, pvar, ktype ) 
     1578   SUBROUTINE iom_rp2d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 
    11581579      INTEGER         , INTENT(in)                         ::   kt       ! ocean time-step 
    11591580      INTEGER         , INTENT(in)                         ::   kwrite   ! writing time-step 
     
    11621583      REAL(wp)        , INTENT(in), DIMENSION(:,    :    ) ::   pvar     ! written field 
    11631584      INTEGER         , INTENT(in), OPTIONAL               ::   ktype    ! variable external type 
     1585      LOGICAL, OPTIONAL :: ldxios   ! xios write flag 
     1586      LOGICAL :: llx 
    11641587      INTEGER :: ivid   ! variable id 
    1165       IF( kiomid > 0 ) THEN 
    1166          IF( iom_file(kiomid)%nfid > 0 ) THEN 
    1167             ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
    1168             SELECT CASE (iom_file(kiomid)%iolib) 
    1169             CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 
    1170             CASE DEFAULT 
    1171                CALL ctl_stop( 'iom_rp2d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
    1172             END SELECT 
     1588 
     1589      llx = .FALSE. 
     1590      IF(PRESENT(ldxios)) llx = ldxios 
     1591      IF( llx ) THEN 
     1592#ifdef key_iomput 
     1593      IF( kt == kwrite ) THEN 
     1594         IF(lwp) write(numout,*) 'RESTART: write (XIOS 2D) ',trim(cdvar) 
     1595         CALL xios_send_field(trim(cdvar), pvar) 
     1596      ENDIF 
     1597#endif 
     1598      ELSE 
     1599         IF( kiomid > 0 ) THEN 
     1600            IF( iom_file(kiomid)%nfid > 0 ) THEN 
     1601               ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
     1602               SELECT CASE (iom_file(kiomid)%iolib) 
     1603               CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 
     1604               CASE DEFAULT      
     1605                  CALL ctl_stop( 'iom_rp2d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
     1606               END SELECT 
     1607            ENDIF 
    11731608         ENDIF 
    11741609      ENDIF 
    11751610   END SUBROUTINE iom_rp2d 
    11761611 
    1177    SUBROUTINE iom_rp3d( kt, kwrite, kiomid, cdvar, pvar, ktype ) 
     1612   SUBROUTINE iom_rp3d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 
    11781613      INTEGER         , INTENT(in)                         ::   kt       ! ocean time-step 
    11791614      INTEGER         , INTENT(in)                         ::   kwrite   ! writing time-step 
     
    11821617      REAL(wp)        , INTENT(in),       DIMENSION(:,:,:) ::   pvar     ! written field 
    11831618      INTEGER         , INTENT(in), OPTIONAL               ::   ktype    ! variable external type 
     1619      LOGICAL, OPTIONAL :: ldxios   ! xios write flag 
     1620      LOGICAL :: llx                 ! local xios write flag 
    11841621      INTEGER :: ivid   ! variable id 
    1185       IF( kiomid > 0 ) THEN 
    1186          IF( iom_file(kiomid)%nfid > 0 ) THEN 
    1187             ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
    1188             SELECT CASE (iom_file(kiomid)%iolib) 
    1189             CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 
    1190             CASE DEFAULT 
    1191                CALL ctl_stop( 'iom_rp3d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
    1192             END SELECT 
     1622 
     1623      llx = .FALSE. 
     1624      IF(PRESENT(ldxios)) llx = ldxios 
     1625      IF( llx ) THEN 
     1626#ifdef key_iomput 
     1627      IF( kt == kwrite ) THEN 
     1628         IF(lwp) write(numout,*) 'RESTART: write (XIOS 3D) ',trim(cdvar) 
     1629         CALL xios_send_field(trim(cdvar), pvar) 
     1630      ENDIF 
     1631#endif 
     1632      ELSE 
     1633         IF( kiomid > 0 ) THEN 
     1634            IF( iom_file(kiomid)%nfid > 0 ) THEN 
     1635               ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
     1636               SELECT CASE (iom_file(kiomid)%iolib) 
     1637               CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 
     1638               CASE DEFAULT      
     1639                  CALL ctl_stop( 'iom_rp3d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
     1640               END SELECT 
     1641            ENDIF 
    11931642         ENDIF 
    11941643      ENDIF 
     
    12621711            &    lonvalue_1D=lonvalue, latvalue_1D=latvalue, mask_1D=mask, nvertex=nvertex, bounds_lon_1D=bounds_lon,      & 
    12631712            &    bounds_lat_1D=bounds_lat, area=area, type='curvilinear') 
    1264      ENDIF 
     1713      ENDIF 
    12651714      IF ( xios_is_valid_domaingroup(cdid) ) THEN 
    12661715         CALL xios_set_domaingroup_attr( cdid, ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, jbegin=jbegin, ni=ni, nj=nj,   & 
     
    13681817   SUBROUTINE iom_context_finalize( cdname ) 
    13691818      CHARACTER(LEN=*), INTENT(in) :: cdname 
    1370       ! 
    1371       IF( xios_is_valid_context(cdname) ) THEN 
     1819      CHARACTER(LEN=120)           :: clname 
     1820      ! 
     1821      clname = cdname 
     1822      IF( TRIM(Agrif_CFixed()) .NE. '0' ) clname = TRIM(Agrif_CFixed())//"_"//clname  
     1823 
     1824      IF( xios_is_valid_context(clname) ) THEN 
    13721825         CALL iom_swap( cdname )   ! swap to cdname context 
    13731826         CALL xios_context_finalize() ! finalize the context 
     
    13781831 
    13791832 
    1380    SUBROUTINE set_grid( cdgrd, plon, plat ) 
     1833   SUBROUTINE set_grid( cdgrd, plon, plat, ldxios ) 
    13811834      !!---------------------------------------------------------------------- 
    13821835      !!                     ***  ROUTINE set_grid  *** 
     
    13911844      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zmask 
    13921845      INTEGER  :: ni,nj 
     1846      LOGICAL, INTENT(IN) :: ldxios 
    13931847       
    13941848      ni=nlei-nldi+1 ; nj=nlej-nldj+1 
     
    13961850      CALL iom_set_domain_attr("grid_"//cdgrd, ni_glo=jpiglo, nj_glo=jpjglo, ibegin=nimpp+nldi-2, jbegin=njmpp+nldj-2, ni=ni, nj=nj) 
    13971851      CALL iom_set_domain_attr("grid_"//cdgrd, data_dim=2, data_ibegin = 1-nldi, data_ni = jpi, data_jbegin = 1-nldj, data_nj = jpj) 
    1398       CALL iom_set_domain_attr("grid_"//cdgrd, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)),   & 
     1852      if(.NOT.ldxios) CALL iom_set_domain_attr("grid_"//cdgrd, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)),   & 
    13991853         &                                     latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /)))   
    14001854 
    1401       IF ( ln_mskland ) THEN 
     1855      IF ( ln_mskland.AND.(.NOT.ldxios) ) THEN 
    14021856         ! mask land points, keep values on coast line -> specific mask for U, V and W points 
    14031857         SELECT CASE ( cdgrd ) 
     
    14391893      ! Offset of coordinate representing bottom-left corner 
    14401894      SELECT CASE ( TRIM(cdgrd) ) 
    1441          CASE ('T', 'W') 
     1895         CASE ('T', 'W', 'N') 
    14421896            icnr = -1 ; jcnr = -1 
    14431897         CASE ('U') 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/IOM/iom_def.F90

    r8924 r8987  
    4444   INTEGER, PARAMETER, PUBLIC ::   jpmax_digits =  5   !: maximum number of digits for the cpu number in the file name 
    4545 
     46 
    4647!$AGRIF_DO_NOT_TREAT 
    4748   INTEGER, PUBLIC            ::   iom_open_init = 0   !: used to initialize iom_file(:)%nfid to 0 
     49!XIOS write restart    
     50   LOGICAL, PUBLIC            ::   lwxios          !: write single file restart using XIOS 
     51   INTEGER, PUBLIC            ::   nxioso          !: type of restart file when writing using XIOS 1 - single, 2 - multiple 
     52!XIOS read restart    
     53   LOGICAL, PUBLIC            ::   lrxios          !: read single file restart using XIOS 
     54   LOGICAL, PUBLIC            ::   lxios_sini = .FALSE. ! is restart in a single file 
     55   LOGICAL, PUBLIC            ::   lxios_set  = .FALSE.  
     56 
     57 
    4858 
    4959   TYPE, PUBLIC ::   file_descriptor 
     
    6676   END TYPE file_descriptor 
    6777   TYPE(file_descriptor), DIMENSION(jpmax_files), PUBLIC ::   iom_file !: array containing the info for all opened files 
     78   INTEGER, PARAMETER, PUBLIC                   :: max_rst_fields = 95 !: maximum number of restart variables defined in iom_set_rst_vars 
     79   TYPE, PUBLIC :: RST_FIELD   
     80    CHARACTER(len=30) :: vname = "NO_NAME" ! names of variables in restart file 
     81    CHARACTER(len=30) :: grid = "NO_GRID" 
     82    LOGICAL           :: active =.FALSE. ! for restart write only: true - write field, false do not write field 
     83   END TYPE RST_FIELD 
    6884!$AGRIF_END_DO_NOT_TREAT 
     85 
     86   TYPE(RST_FIELD), PUBLIC :: rst_wfields(max_rst_fields), rst_rfields(max_rst_fields) 
    6987 
    7088   !!===================================================================== 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/IOM/iom_nf90.F90

    r8924 r8987  
    126126            CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'x', kdompar(1,1)  , idmy ), clinfo) 
    127127            CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'y', kdompar(2,1)  , idmy ), clinfo) 
    128             CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'z', jpk           , idmy ), clinfo) 
    129             CALL iom_nf90_check(NF90_DEF_DIM( if90id, 't', NF90_UNLIMITED, idmy ), clinfo) 
     128            CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'nav_lev', jpk           , idmy ), clinfo) 
     129            CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'time_counter', NF90_UNLIMITED, idmy ), clinfo) 
    130130            ! global attributes 
    131131            CALL iom_nf90_check(NF90_PUT_ATT( if90id, NF90_GLOBAL, 'DOMAIN_number_total'   , jpnij              ), clinfo) 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90

    r8924 r8987  
    2828   USE iom             ! I/O module 
    2929   USE diurnal_bulk 
    30     
     30 
    3131   IMPLICIT NONE 
    3232   PRIVATE 
     
    6161      CHARACTER(LEN=50)   ::   clname   ! ocean output restart file name 
    6262      CHARACTER(lc)       ::   clpath   ! full path to ocean output restart file 
     63      CHARACTER(LEN=52)   ::   clpname   ! ocean output restart file name including prefix for AGRIF 
    6364      !!---------------------------------------------------------------------- 
    6465      ! 
     
    9495            IF(lwp) THEN 
    9596               WRITE(numout,*) 
    96                SELECT CASE ( jprstlib ) 
    97                CASE DEFAULT         ;   WRITE(numout,*)                            & 
    98                    '             open ocean restart NetCDF file: ',TRIM(clpath)//clname 
    99                END SELECT 
    100                IF ( snc4set%luse )      WRITE(numout,*) '             opened for NetCDF4 chunking and compression' 
    101                IF( kt == nitrst - 1 ) THEN   ;   WRITE(numout,*) '             kt = nitrst - 1 = ', kt 
    102                ELSE                          ;   WRITE(numout,*) '             kt = '             , kt 
     97               IF(.NOT.lwxios) THEN 
     98                  SELECT CASE ( jprstlib ) 
     99                  CASE DEFAULT         ;   WRITE(numout,*)                            & 
     100                      '             open ocean restart NetCDF file: ',TRIM(clpath)//TRIM(clname) 
     101                  END SELECT 
     102                  IF ( snc4set%luse )      WRITE(numout,*) '             opened for NetCDF4 chunking and compression' 
     103                  IF( kt == nitrst - 1 ) THEN   ;   WRITE(numout,*) '             kt = nitrst - 1 = ', kt 
     104                  ELSE                          ;   WRITE(numout,*) '             kt = '             , kt 
     105                  ENDIF 
    103106               ENDIF 
    104107            ENDIF 
    105108            ! 
    106             CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 
     109            IF(.NOT.lwxios) THEN 
     110               CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 
     111            ELSE 
     112               cwxios_context = "rstw_"//TRIM(ADJUSTL(clkt)) 
     113               IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     114                  clpname = clname 
     115               ELSE 
     116                  clpname = TRIM(Agrif_CFixed())//"_"//clname    
     117               ENDIF 
     118               CALL iom_init( cwxios_context, TRIM(clpath)//TRIM(clpname)) 
     119               CALL xios_update_calendar(nitrst) 
     120               CALL iom_swap(      cxios_context          ) 
     121            ENDIF 
    107122            lrst_oce = .TRUE. 
    108123         ENDIF 
     
    123138      INTEGER, INTENT(in) ::   kt   ! ocean time-step 
    124139      !!---------------------------------------------------------------------- 
    125  
    126                      CALL iom_rstput( kt, nitrst, numrow, 'rdt'    , rdt       )   ! dynamics and tracer time step 
     140                     IF(lwxios) CALL iom_swap(      cwxios_context          ) 
     141                     CALL iom_rstput( kt, nitrst, numrow, 'rdt'    , rdt       , ldxios = lwxios)   ! dynamics time step 
    127142 
    128143      IF ( .NOT. ln_diurnal_only ) THEN 
    129                      CALL iom_rstput( kt, nitrst, numrow, 'ub'     , ub        )     ! before fields 
    130                      CALL iom_rstput( kt, nitrst, numrow, 'vb'     , vb        ) 
    131                      CALL iom_rstput( kt, nitrst, numrow, 'tb'     , tsb(:,:,:,jp_tem) ) 
    132                      CALL iom_rstput( kt, nitrst, numrow, 'sb'     , tsb(:,:,:,jp_sal) ) 
    133                      CALL iom_rstput( kt, nitrst, numrow, 'sshb'   , sshb      ) 
     144                     CALL iom_rstput( kt, nitrst, numrow, 'ub'     , ub, ldxios = lwxios        )     ! before fields 
     145                     CALL iom_rstput( kt, nitrst, numrow, 'vb'     , vb, ldxios = lwxios        ) 
     146                     CALL iom_rstput( kt, nitrst, numrow, 'tb'     , tsb(:,:,:,jp_tem), ldxios = lwxios ) 
     147                     CALL iom_rstput( kt, nitrst, numrow, 'sb'     , tsb(:,:,:,jp_sal), ldxios = lwxios ) 
     148                     CALL iom_rstput( kt, nitrst, numrow, 'sshb'   , sshb, ldxios = lwxios      ) 
    134149                     ! 
    135                      CALL iom_rstput( kt, nitrst, numrow, 'un'     , un        )     ! now fields 
    136                      CALL iom_rstput( kt, nitrst, numrow, 'vn'     , vn        ) 
    137                      CALL iom_rstput( kt, nitrst, numrow, 'tn'     , tsn(:,:,:,jp_tem) ) 
    138                      CALL iom_rstput( kt, nitrst, numrow, 'sn'     , tsn(:,:,:,jp_sal) ) 
    139                      CALL iom_rstput( kt, nitrst, numrow, 'sshn'   , sshn      ) 
    140                      CALL iom_rstput( kt, nitrst, numrow, 'rhop'   , rhop      ) 
    141  
     150                     CALL iom_rstput( kt, nitrst, numrow, 'un'     , un, ldxios = lwxios        )     ! now fields 
     151                     CALL iom_rstput( kt, nitrst, numrow, 'vn'     , vn, ldxios = lwxios        ) 
     152                     CALL iom_rstput( kt, nitrst, numrow, 'tn'     , tsn(:,:,:,jp_tem), ldxios = lwxios ) 
     153                     CALL iom_rstput( kt, nitrst, numrow, 'sn'     , tsn(:,:,:,jp_sal), ldxios = lwxios ) 
     154                     CALL iom_rstput( kt, nitrst, numrow, 'sshn'   , sshn, ldxios = lwxios      ) 
     155                     CALL iom_rstput( kt, nitrst, numrow, 'rhop'   , rhop, ldxios = lwxios      ) 
    142156                  ! extra variable needed for the ice sheet coupling 
    143157                  IF ( ln_iscpl ) THEN  
    144                      CALL iom_rstput( kt, nitrst, numrow, 'tmask'  , tmask    ) ! need to extrapolate T/S 
    145                      CALL iom_rstput( kt, nitrst, numrow, 'umask'  , umask    ) ! need to correct barotropic velocity 
    146                      CALL iom_rstput( kt, nitrst, numrow, 'vmask'  , vmask    ) ! need to correct barotropic velocity 
    147                      CALL iom_rstput( kt, nitrst, numrow, 'smask'  , ssmask    ) ! need to correct barotropic velocity 
    148                      CALL iom_rstput( kt, nitrst, numrow, 'e3t_n', e3t_n(:,:,:) )   ! need to compute temperature correction 
    149                      CALL iom_rstput( kt, nitrst, numrow, 'e3u_n', e3u_n(:,:,:) )   ! need to compute bt conservation 
    150                      CALL iom_rstput( kt, nitrst, numrow, 'e3v_n', e3v_n(:,:,:) )   ! need to compute bt conservation 
    151                      CALL iom_rstput( kt, nitrst, numrow, 'gdepw_n', gdepw_n(:,:,:) ) ! need to compute extrapolation if vvl 
     158                     CALL iom_rstput( kt, nitrst, numrow, 'tmask'  , tmask, ldxios = lwxios ) ! need to extrapolate T/S 
     159                     CALL iom_rstput( kt, nitrst, numrow, 'umask'  , umask, ldxios = lwxios ) ! need to correct barotropic velocity 
     160                     CALL iom_rstput( kt, nitrst, numrow, 'vmask'  , vmask, ldxios = lwxios ) ! need to correct barotropic velocity 
     161                     CALL iom_rstput( kt, nitrst, numrow, 'smask'  , ssmask, ldxios = lwxios) ! need to correct barotropic velocity 
     162                     CALL iom_rstput( kt, nitrst, numrow, 'e3t_n', e3t_n(:,:,:), ldxios = lwxios )   ! need to compute temperature correction 
     163                     CALL iom_rstput( kt, nitrst, numrow, 'e3u_n', e3u_n(:,:,:), ldxios = lwxios )   ! need to compute bt conservation 
     164                     CALL iom_rstput( kt, nitrst, numrow, 'e3v_n', e3v_n(:,:,:), ldxios = lwxios )   ! need to compute bt conservation 
     165                     CALL iom_rstput( kt, nitrst, numrow, 'gdepw_n', gdepw_n(:,:,:), ldxios = lwxios ) ! need to compute extrapolation if vvl 
    152166                  END IF 
    153167      ENDIF 
    154168       
    155       IF (ln_diurnal) CALL iom_rstput( kt, nitrst, numrow, 'Dsst', x_dsst    
    156  
     169      IF (ln_diurnal) CALL iom_rstput( kt, nitrst, numrow, 'Dsst', x_dsst, ldxios = lwxios 
     170      IF(lwxios) CALL iom_swap(      cxios_context          ) 
    157171      IF( kt == nitrst ) THEN 
    158          CALL iom_close( numrow )     ! close the restart file (only at last time step) 
     172         IF(.NOT.lwxios) THEN 
     173            CALL iom_close( numrow )     ! close the restart file (only at last time step) 
     174         ELSE 
     175            CALL iom_context_finalize(      cwxios_context          ) 
     176         ENDIF 
    159177!!gm         IF( .NOT. lk_trdmld )   lrst_oce = .FALSE. 
    160178!!gm  not sure what to do here   ===>>>  ask to Sebastian 
     
    164182               nitrst = nstocklist( nrst_lst ) 
    165183            ENDIF 
    166             lrst_oce = .FALSE. 
    167184      ENDIF 
    168185      ! 
     
    193210            WRITE(numout,*) '~~~~~~~~' 
    194211         ENDIF 
    195  
     212         lxios_sini = .FALSE. 
    196213         clpath = TRIM(cn_ocerst_indir) 
    197214         IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 
    198215         CALL iom_open( TRIM(clpath)//cn_ocerst_in, numror, kiolib = jlibalt ) 
    199       ENDIF 
     216! are we using XIOS to read the data? Part above will have to modified once XIOS 
     217! can handle checking if variable is in the restart file (there will be no need to open 
     218! restart) 
     219         IF(.NOT.lxios_set) lrxios = lrxios.AND.lxios_sini 
     220         IF( lrxios) THEN 
     221             crxios_context = 'nemo_rst' 
     222             IF( .NOT.lxios_set ) THEN 
     223                 IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS' 
     224                 CALL iom_init( crxios_context ) 
     225                 lxios_set = .TRUE. 
     226             ENDIF 
     227         ENDIF 
     228         IF( TRIM(Agrif_CFixed()) /= '0' .AND. lrxios) THEN 
     229             CALL iom_init( crxios_context ) 
     230             IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS for AGRIF' 
     231             lxios_set = .TRUE. 
     232         ENDIF  
     233      ENDIF 
     234 
    200235   END SUBROUTINE rst_read_open 
    201236 
     
    211246      REAL(wp) ::   zrdt 
    212247      INTEGER  ::   jk 
     248      REAL(wp), DIMENSION(jpi, jpj, jpk) :: w3d 
    213249      !!---------------------------------------------------------------------- 
    214250 
     
    217253      ! Check dynamics and tracer time-step consistency and force Euler restart if changed 
    218254      IF( iom_varid( numror, 'rdt', ldstop = .FALSE. ) > 0 )   THEN 
    219          CALL iom_get( numror, 'rdt', zrdt ) 
     255         CALL iom_get( numror, 'rdt', zrdt, ldxios = lrxios ) 
    220256         IF( zrdt /= rdt )   neuler = 0 
    221257      ENDIF 
    222258 
    223259      ! Diurnal DSST  
    224       IF( ln_diurnal ) CALL iom_get( numror, jpdom_autoglo, 'Dsst' , x_dsst  )  
     260      IF( ln_diurnal ) CALL iom_get( numror, jpdom_autoglo, 'Dsst' , x_dsst, ldxios = lrxios )  
    225261      IF ( ln_diurnal_only ) THEN  
    226262         IF(lwp) WRITE( numout, * ) & 
    227263         &   "rst_read:- ln_diurnal_only set, setting rhop=rau0"  
    228264         rhop = rau0 
    229          CALL iom_get( numror, jpdom_autoglo, 'tn'     , tsn(:,:,1,jp_tem) )  
     265         CALL iom_get( numror, jpdom_autoglo, 'tn'     , w3d, ldxios = lrxios )  
     266         tsn(:,:,1,jp_tem) = w3d(:,:,1) 
    230267         RETURN  
    231268      ENDIF   
    232269       
    233270      IF( iom_varid( numror, 'ub', ldstop = .FALSE. ) > 0 ) THEN 
    234          CALL iom_get( numror, jpdom_autoglo, 'ub'     , ub      )   ! before fields 
    235          CALL iom_get( numror, jpdom_autoglo, 'vb'     , vb      ) 
    236          CALL iom_get( numror, jpdom_autoglo, 'tb'     , tsb(:,:,:,jp_tem) ) 
    237          CALL iom_get( numror, jpdom_autoglo, 'sb'     , tsb(:,:,:,jp_sal) ) 
    238          CALL iom_get( numror, jpdom_autoglo, 'sshb'   , sshb    ) 
     271         CALL iom_get( numror, jpdom_autoglo, 'ub'     , ub, ldxios = lrxios                )   ! before fields 
     272         CALL iom_get( numror, jpdom_autoglo, 'vb'     , vb, ldxios = lrxios                ) 
     273         CALL iom_get( numror, jpdom_autoglo, 'tb'     , tsb(:,:,:,jp_tem), ldxios = lrxios ) 
     274         CALL iom_get( numror, jpdom_autoglo, 'sb'     , tsb(:,:,:,jp_sal), ldxios = lrxios ) 
     275         CALL iom_get( numror, jpdom_autoglo, 'sshb'   , sshb, ldxios = lrxios              ) 
    239276      ELSE 
    240277         neuler = 0 
    241278      ENDIF 
    242279      ! 
    243       CALL iom_get( numror, jpdom_autoglo, 'un'     , un      )   ! now    fields 
    244       CALL iom_get( numror, jpdom_autoglo, 'vn'     , vn      ) 
    245       CALL iom_get( numror, jpdom_autoglo, 'tn'     , tsn(:,:,:,jp_tem) ) 
    246       CALL iom_get( numror, jpdom_autoglo, 'sn'     , tsn(:,:,:,jp_sal) ) 
    247       CALL iom_get( numror, jpdom_autoglo, 'sshn'   , sshn    ) 
     280      CALL iom_get( numror, jpdom_autoglo, 'un'     , un, ldxios = lrxios )   ! now    fields 
     281      CALL iom_get( numror, jpdom_autoglo, 'vn'     , vn, ldxios = lrxios ) 
     282      CALL iom_get( numror, jpdom_autoglo, 'tn'     , tsn(:,:,:,jp_tem), ldxios = lrxios ) 
     283      CALL iom_get( numror, jpdom_autoglo, 'sn'     , tsn(:,:,:,jp_sal), ldxios = lrxios ) 
     284      CALL iom_get( numror, jpdom_autoglo, 'sshn'   , sshn, ldxios = lrxios ) 
    248285      IF( iom_varid( numror, 'rhop', ldstop = .FALSE. ) > 0 ) THEN 
    249          CALL iom_get( numror, jpdom_autoglo, 'rhop'   , rhop    )   ! now    potential density 
     286         CALL iom_get( numror, jpdom_autoglo, 'rhop'   , rhop, ldxios = lrxios )   ! now    potential density 
    250287      ELSE 
    251288         CALL eos( tsn, rhd, rhop, gdept_n(:,:,:) )    
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbcapr.F90

    r8924 r8987  
    6565      CHARACTER(len=100) ::  cn_dir   ! Root directory for location of ssr files 
    6666      TYPE(FLD_N)        ::  sn_apr   ! informations about the fields to be read 
     67      LOGICAL            ::  lrxios   ! read restart using XIOS? 
    6768      !! 
    6869      NAMELIST/namsbc_apr/ cn_dir, sn_apr, ln_ref_apr, rn_pref, ln_apr_obc 
     
    109110            CALL ctl_warn( 'sbc_apr: use inverse barometer ssh at open boundary ONLY requires ln_apr_dyn=T' ) 
    110111      ! 
     112      IF( lwxios ) THEN 
     113         CALL iom_set_rstw_var_active('ssh_ibb') 
     114      ENDIF 
    111115   END SUBROUTINE sbc_apr_init 
    112116 
     
    152156         IF( ln_rstart .AND. iom_varid( numror, 'ssh_ibb', ldstop = .FALSE. ) > 0 ) THEN  
    153157            IF(lwp) WRITE(numout,*) 'sbc_apr:   ssh_ibb read in the restart file' 
    154             CALL iom_get( numror, jpdom_autoglo, 'ssh_ibb', ssh_ibb )   ! before inv. barometer ssh 
     158            CALL iom_get( numror, jpdom_autoglo, 'ssh_ibb', ssh_ibb, ldxios = lrxios )   ! before inv. barometer ssh 
    155159            ! 
    156160         ELSE                                         !* no restart: set from nit000 values 
     
    165169         IF(lwp) WRITE(numout,*) 'sbc_apr : ssh_ib written in ocean restart file at it= ', kt,' date= ', ndastp 
    166170         IF(lwp) WRITE(numout,*) '~~~~' 
    167          CALL iom_rstput( kt, nitrst, numrow, 'ssh_ibb' , ssh_ib ) 
     171         IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
     172         CALL iom_rstput( kt, nitrst, numrow, 'ssh_ibb' , ssh_ib, ldxios = lwxios ) 
     173         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    168174      ENDIF 
    169175      ! 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90

    r8924 r8987  
    218218                 & iom_varid( numror, 'fwf_isf_b', ldstop = .FALSE. ) > 0 ) THEN 
    219219               IF(lwp) WRITE(numout,*) '          nit000-1 isf tracer content forcing fields read in the restart file' 
    220                CALL iom_get( numror, jpdom_autoglo, 'fwf_isf_b', fwfisf_b(:,:) )   ! before salt content isf_tsc trend 
    221                CALL iom_get( numror, jpdom_autoglo, 'isf_sc_b', risf_tsc_b(:,:,jp_sal) )   ! before salt content isf_tsc trend 
    222                CALL iom_get( numror, jpdom_autoglo, 'isf_hc_b', risf_tsc_b(:,:,jp_tem) )   ! before salt content isf_tsc trend 
     220               CALL iom_get( numror, jpdom_autoglo, 'fwf_isf_b', fwfisf_b(:,:), ldxios = lrxios )   ! before salt content isf_tsc trend 
     221               CALL iom_get( numror, jpdom_autoglo, 'isf_sc_b', risf_tsc_b(:,:,jp_sal), ldxios = lrxios )   ! before salt content isf_tsc trend 
     222               CALL iom_get( numror, jpdom_autoglo, 'isf_hc_b', risf_tsc_b(:,:,jp_tem), ldxios = lrxios )   ! before salt content isf_tsc trend 
    223223           ELSE 
    224224               fwfisf_b(:,:)    = fwfisf(:,:) 
     
    232232               &                    'at it= ', kt,' date= ', ndastp 
    233233            IF(lwp) WRITE(numout,*) '~~~~' 
    234             CALL iom_rstput( kt, nitrst, numrow, 'fwf_isf_b', fwfisf(:,:) ) 
    235             CALL iom_rstput( kt, nitrst, numrow, 'isf_hc_b' , risf_tsc(:,:,jp_tem) ) 
    236             CALL iom_rstput( kt, nitrst, numrow, 'isf_sc_b' , risf_tsc(:,:,jp_sal) ) 
     234            IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
     235                CALL iom_rstput( kt, nitrst, numrow, 'fwf_isf_b', fwfisf(:,:), ldxios = lwxios ) 
     236                CALL iom_rstput( kt, nitrst, numrow, 'isf_hc_b' , risf_tsc(:,:,jp_tem), ldxios = lwxios ) 
     237                CALL iom_rstput( kt, nitrst, numrow, 'isf_sc_b' , risf_tsc(:,:,jp_sal), ldxios = lwxios ) 
     238            IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    237239         ENDIF 
    238240         ! 
     
    393395      END DO 
    394396 
     397      IF( lwxios ) THEN 
     398          CALL iom_set_rstw_var_active('fwf_isf_b') 
     399          CALL iom_set_rstw_var_active('isf_hc_b') 
     400          CALL iom_set_rstw_var_active('isf_sc_b') 
     401      ENDIF 
     402 
     403 
    395404  END SUBROUTINE sbc_isf_init 
    396405 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r8924 r8987  
    5656   USE lib_mpp        ! MPP library 
    5757   USE timing         ! Timing 
    58  
    5958   USE diurnal_bulk, ONLY:   ln_diurnal_only   ! diurnal SST diagnostic 
    6059 
     
    356355      IF( ln_wave     )   CALL sbc_wave_init              ! surface wave initialisation 
    357356      ! 
     357      IF( lwxios ) THEN 
     358         CALL iom_set_rstw_var_active('utau_b') 
     359         CALL iom_set_rstw_var_active('vtau_b') 
     360         CALL iom_set_rstw_var_active('qns_b') 
     361         ! The 3D heat content due to qsr forcing is treated in traqsr 
     362         ! CALL iom_set_rstw_var_active('qsr_b') 
     363         CALL iom_set_rstw_var_active('emp_b') 
     364         CALL iom_set_rstw_var_active('sfx_b') 
     365      ENDIF 
     366 
    358367   END SUBROUTINE sbc_init 
    359368 
     
    462471            & iom_varid( numror, 'utau_b', ldstop = .FALSE. ) > 0 ) THEN 
    463472            IF(lwp) WRITE(numout,*) '          nit000-1 surface forcing fields red in the restart file' 
    464             CALL iom_get( numror, jpdom_autoglo, 'utau_b', utau_b )   ! before i-stress  (U-point) 
    465             CALL iom_get( numror, jpdom_autoglo, 'vtau_b', vtau_b )   ! before j-stress  (V-point) 
    466             CALL iom_get( numror, jpdom_autoglo, 'qns_b' , qns_b  )   ! before non solar heat flux (T-point) 
     473            CALL iom_get( numror, jpdom_autoglo, 'utau_b', utau_b, ldxios = lrxios )   ! before i-stress  (U-point) 
     474            CALL iom_get( numror, jpdom_autoglo, 'vtau_b', vtau_b, ldxios = lrxios )   ! before j-stress  (V-point) 
     475            CALL iom_get( numror, jpdom_autoglo, 'qns_b' , qns_b, ldxios = lrxios  )   ! before non solar heat flux (T-point) 
    467476            ! The 3D heat content due to qsr forcing is treated in traqsr 
    468             ! CALL iom_get( numror, jpdom_autoglo, 'qsr_b' , qsr_b  ) ! before     solar heat flux (T-point) 
    469             CALL iom_get( numror, jpdom_autoglo, 'emp_b', emp_b  )    ! before     freshwater flux (T-point) 
     477            ! CALL iom_get( numror, jpdom_autoglo, 'qsr_b' , qsr_b, ldxios = lrxios  ) ! before     solar heat flux (T-point) 
     478            CALL iom_get( numror, jpdom_autoglo, 'emp_b', emp_b, ldxios = lrxios  )    ! before     freshwater flux (T-point) 
    470479            ! To ensure restart capability with 3.3x/3.4 restart files    !! to be removed in v3.6 
    471480            IF( iom_varid( numror, 'sfx_b', ldstop = .FALSE. ) > 0 ) THEN 
    472                CALL iom_get( numror, jpdom_autoglo, 'sfx_b', sfx_b )  ! before salt flux (T-point) 
     481               CALL iom_get( numror, jpdom_autoglo, 'sfx_b', sfx_b, ldxios = lrxios )  ! before salt flux (T-point) 
    473482            ELSE 
    474483               sfx_b (:,:) = sfx(:,:) 
     
    490499            &                    'at it= ', kt,' date= ', ndastp 
    491500         IF(lwp) WRITE(numout,*) '~~~~' 
    492          CALL iom_rstput( kt, nitrst, numrow, 'utau_b' , utau ) 
    493          CALL iom_rstput( kt, nitrst, numrow, 'vtau_b' , vtau ) 
    494          CALL iom_rstput( kt, nitrst, numrow, 'qns_b'  , qns  ) 
     501         IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
     502         CALL iom_rstput( kt, nitrst, numrow, 'utau_b' , utau, ldxios = lwxios ) 
     503         CALL iom_rstput( kt, nitrst, numrow, 'vtau_b' , vtau, ldxios = lwxios ) 
     504         CALL iom_rstput( kt, nitrst, numrow, 'qns_b'  , qns, ldxios = lwxios  ) 
    495505         ! The 3D heat content due to qsr forcing is treated in traqsr 
    496506         ! CALL iom_rstput( kt, nitrst, numrow, 'qsr_b'  , qsr  ) 
    497          CALL iom_rstput( kt, nitrst, numrow, 'emp_b'  , emp  ) 
    498          CALL iom_rstput( kt, nitrst, numrow, 'sfx_b'  , sfx  ) 
     507         CALL iom_rstput( kt, nitrst, numrow, 'emp_b'  , emp, ldxios = lwxios  ) 
     508         CALL iom_rstput( kt, nitrst, numrow, 'sfx_b'  , sfx, ldxios = lwxios  ) 
     509         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    499510      ENDIF 
    500511      !                                                ! ---------------------------------------- ! 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90

    r8985 r8987  
    148148         IF( ln_rstart .AND.    &                               !* Restart: read in restart file 
    149149            & iom_varid( numror, 'rnf_b', ldstop = .FALSE. ) > 0 ) THEN 
    150             IF(lwp) WRITE(numout,*) '          nit000-1 runoff forcing fields red in the restart file' 
    151             CALL iom_get( numror, jpdom_autoglo, 'rnf_b', rnf_b )     ! before runoff 
    152             CALL iom_get( numror, jpdom_autoglo, 'rnf_hc_b', rnf_tsc_b(:,:,jp_tem) )   ! before heat content of runoff 
    153             CALL iom_get( numror, jpdom_autoglo, 'rnf_sc_b', rnf_tsc_b(:,:,jp_sal) )   ! before salinity content of runoff 
     150            IF(lwp) WRITE(numout,*) '          nit000-1 runoff forcing fields red in the restart file', lrxios 
     151            CALL iom_get( numror, jpdom_autoglo, 'rnf_b', rnf_b, ldxios = lrxios )     ! before runoff 
     152            CALL iom_get( numror, jpdom_autoglo, 'rnf_hc_b', rnf_tsc_b(:,:,jp_tem), ldxios = lrxios )   ! before heat content of runoff 
     153            CALL iom_get( numror, jpdom_autoglo, 'rnf_sc_b', rnf_tsc_b(:,:,jp_sal), ldxios = lrxios )   ! before salinity content of runoff 
    154154         ELSE                                                   !* no restart: set from nit000 values 
    155155            IF(lwp) WRITE(numout,*) '          nit000-1 runoff forcing fields set to nit000' 
     
    165165            &                    'at it= ', kt,' date= ', ndastp 
    166166         IF(lwp) WRITE(numout,*) '~~~~' 
    167          CALL iom_rstput( kt, nitrst, numrow, 'rnf_b' , rnf ) 
    168          CALL iom_rstput( kt, nitrst, numrow, 'rnf_hc_b', rnf_tsc(:,:,jp_tem) ) 
    169          CALL iom_rstput( kt, nitrst, numrow, 'rnf_sc_b', rnf_tsc(:,:,jp_sal) ) 
     167         IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
     168         CALL iom_rstput( kt, nitrst, numrow, 'rnf_b' , rnf, ldxios = lwxios ) 
     169         CALL iom_rstput( kt, nitrst, numrow, 'rnf_hc_b', rnf_tsc(:,:,jp_tem), ldxios = lwxios ) 
     170         CALL iom_rstput( kt, nitrst, numrow, 'rnf_sc_b', rnf_tsc(:,:,jp_sal), ldxios = lwxios ) 
     171         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    170172      ENDIF 
    171173      ! 
     
    473475      ENDIF 
    474476      ! 
     477      IF( lwxios ) THEN 
     478         CALL iom_set_rstw_var_active('rnf_b') 
     479         CALL iom_set_rstw_var_active('rnf_hc_b') 
     480         CALL iom_set_rstw_var_active('rnf_sc_b') 
     481      ENDIF 
     482 
    475483   END SUBROUTINE sbc_rnf_init 
    476484 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90

    r8924 r8987  
    155155            IF(lwp) WRITE(numout,*) '~~~~~~~' 
    156156            zf_sbc = REAL( nn_fsbc, wp ) 
    157             CALL iom_rstput( kt, nitrst, numrow, 'nn_fsbc', zf_sbc )    ! sbc frequency 
    158             CALL iom_rstput( kt, nitrst, numrow, 'ssu_m'  , ssu_m  )    ! sea surface mean fields 
    159             CALL iom_rstput( kt, nitrst, numrow, 'ssv_m'  , ssv_m  ) 
    160             CALL iom_rstput( kt, nitrst, numrow, 'sst_m'  , sst_m  ) 
    161             CALL iom_rstput( kt, nitrst, numrow, 'sss_m'  , sss_m  ) 
    162             CALL iom_rstput( kt, nitrst, numrow, 'ssh_m'  , ssh_m  ) 
    163             CALL iom_rstput( kt, nitrst, numrow, 'e3t_m'  , e3t_m  ) 
    164             CALL iom_rstput( kt, nitrst, numrow, 'frq_m'  , frq_m  ) 
    165             ! 
     157            IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
     158            CALL iom_rstput( kt, nitrst, numrow, 'nn_fsbc', zf_sbc, ldxios = lwxios )    ! sbc frequency 
     159            CALL iom_rstput( kt, nitrst, numrow, 'ssu_m'  , ssu_m, ldxios = lwxios  )    ! sea surface mean fields 
     160            CALL iom_rstput( kt, nitrst, numrow, 'ssv_m'  , ssv_m, ldxios = lwxios  ) 
     161            CALL iom_rstput( kt, nitrst, numrow, 'sst_m'  , sst_m, ldxios = lwxios  ) 
     162            CALL iom_rstput( kt, nitrst, numrow, 'sss_m'  , sss_m, ldxios = lwxios  ) 
     163            CALL iom_rstput( kt, nitrst, numrow, 'ssh_m'  , ssh_m, ldxios = lwxios  ) 
     164            CALL iom_rstput( kt, nitrst, numrow, 'e3t_m'  , e3t_m, ldxios = lwxios  ) 
     165            CALL iom_rstput( kt, nitrst, numrow, 'frq_m'  , frq_m, ldxios = lwxios  ) 
     166            ! 
     167            IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    166168         ENDIF 
    167169         ! 
     
    206208         IF( ln_rstart .AND. iom_varid( numror, 'nn_fsbc', ldstop = .FALSE. ) > 0 ) THEN 
    207209            l_ssm_mean = .TRUE. 
    208             CALL iom_get( numror               , 'nn_fsbc', zf_sbc )    ! sbc frequency of previous run 
    209             CALL iom_get( numror, jpdom_autoglo, 'ssu_m'  , ssu_m  )    ! sea surface mean velocity    (U-point) 
    210             CALL iom_get( numror, jpdom_autoglo, 'ssv_m'  , ssv_m  )    !   "         "    velocity    (V-point) 
    211             CALL iom_get( numror, jpdom_autoglo, 'sst_m'  , sst_m  )    !   "         "    temperature (T-point) 
    212             CALL iom_get( numror, jpdom_autoglo, 'sss_m'  , sss_m  )    !   "         "    salinity    (T-point) 
    213             CALL iom_get( numror, jpdom_autoglo, 'ssh_m'  , ssh_m  )    !   "         "    height      (T-point) 
    214             CALL iom_get( numror, jpdom_autoglo, 'e3t_m'  , e3t_m  )    ! 1st level thickness          (T-point) 
     210            CALL iom_get( numror               , 'nn_fsbc', zf_sbc, ldxios = lrxios )    ! sbc frequency of previous run 
     211            CALL iom_get( numror, jpdom_autoglo, 'ssu_m'  , ssu_m, ldxios = lrxios  )    ! sea surface mean velocity    (U-point) 
     212            CALL iom_get( numror, jpdom_autoglo, 'ssv_m'  , ssv_m, ldxios = lrxios  )    !   "         "    velocity    (V-point) 
     213            CALL iom_get( numror, jpdom_autoglo, 'sst_m'  , sst_m, ldxios = lrxios  )    !   "         "    temperature (T-point) 
     214            CALL iom_get( numror, jpdom_autoglo, 'sss_m'  , sss_m, ldxios = lrxios  )    !   "         "    salinity    (T-point) 
     215            CALL iom_get( numror, jpdom_autoglo, 'ssh_m'  , ssh_m, ldxios = lrxios  )    !   "         "    height      (T-point) 
     216            CALL iom_get( numror, jpdom_autoglo, 'e3t_m'  , e3t_m, ldxios = lrxios  )    ! 1st level thickness          (T-point) 
    215217            ! fraction of solar net radiation absorbed in 1st T level 
    216218            IF( iom_varid( numror, 'frq_m', ldstop = .FALSE. ) > 0 ) THEN 
    217                CALL iom_get( numror, jpdom_autoglo, 'frq_m'  , frq_m  ) 
     219               CALL iom_get( numror, jpdom_autoglo, 'frq_m'  , frq_m, ldxios = lrxios  ) 
    218220            ELSE 
    219221               frq_m(:,:) = 1._wp   ! default definition 
     
    251253      ENDIF 
    252254      ! 
     255      IF( lwxios.AND.nn_fsbc > 1 ) THEN 
     256         CALL iom_set_rstw_var_active('nn_fsbc') 
     257         CALL iom_set_rstw_var_active('ssu_m') 
     258         CALL iom_set_rstw_var_active('ssv_m') 
     259         CALL iom_set_rstw_var_active('sst_m') 
     260         CALL iom_set_rstw_var_active('sss_m') 
     261         CALL iom_set_rstw_var_active('ssh_m') 
     262         CALL iom_set_rstw_var_active('e3t_m') 
     263         CALL iom_set_rstw_var_active('frq_m') 
     264      ENDIF 
     265 
    253266   END SUBROUTINE sbc_ssm_init 
    254267 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90

    r8924 r8987  
    139139            IF(lwp) WRITE(numout,*) '          nit000-1 qsr tracer content forcing field read in the restart file' 
    140140            z1_2 = 0.5_wp 
    141             CALL iom_get( numror, jpdom_autoglo, 'qsr_hc_b', qsr_hc_b )   ! before heat content trend due to Qsr flux 
     141            CALL iom_get( numror, jpdom_autoglo, 'qsr_hc_b', qsr_hc_b, ldxios = lrxios )   ! before heat content trend due to Qsr flux 
    142142         ELSE                                           ! No restart or restart not found: Euler forward time stepping 
    143143            z1_2 = 1._wp 
     
    294294      ! 
    295295      IF( lrst_oce ) THEN     ! write in the ocean restart file 
    296          CALL iom_rstput( kt, nitrst, numrow, 'qsr_hc_b'   , qsr_hc      ) 
    297          CALL iom_rstput( kt, nitrst, numrow, 'fraqsr_1lev', fraqsr_1lev )  
     296         IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
     297         CALL iom_rstput( kt, nitrst, numrow, 'qsr_hc_b'   , qsr_hc, ldxios = lwxios      ) 
     298         CALL iom_rstput( kt, nitrst, numrow, 'fraqsr_1lev', fraqsr_1lev, ldxios = lwxios )  
     299         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    298300      ENDIF 
    299301      ! 
     
    430432      ! 1st ocean level attenuation coefficient (used in sbcssm) 
    431433      IF( iom_varid( numror, 'fraqsr_1lev', ldstop = .FALSE. ) > 0 ) THEN 
    432          CALL iom_get( numror, jpdom_autoglo, 'fraqsr_1lev'  , fraqsr_1lev  ) 
     434         CALL iom_get( numror, jpdom_autoglo, 'fraqsr_1lev'  , fraqsr_1lev, ldxios = lrxios  ) 
    433435      ELSE 
    434436         fraqsr_1lev(:,:) = 1._wp   ! default : no penetration 
    435437      ENDIF 
    436438      ! 
     439      IF( lwxios ) THEN 
     440         CALL iom_set_rstw_var_active('qsr_hc_b') 
     441         CALL iom_set_rstw_var_active('fraqsr_1lev') 
     442      ENDIF 
    437443      IF( nn_timing == 1 )   CALL timing_stop('tra_qsr_init') 
    438444      ! 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90

    r8985 r8987  
    112112            zfact = 0.5_wp 
    113113            sbc_tsc(:,:,:) = 0._wp 
    114             CALL iom_get( numror, jpdom_autoglo, 'sbc_hc_b', sbc_tsc_b(:,:,jp_tem) )   ! before heat content sbc trend 
    115             CALL iom_get( numror, jpdom_autoglo, 'sbc_sc_b', sbc_tsc_b(:,:,jp_sal) )   ! before salt content sbc trend 
     114            CALL iom_get( numror, jpdom_autoglo, 'sbc_hc_b', sbc_tsc_b(:,:,jp_tem), ldxios = lrxios )   ! before heat content sbc trend 
     115            CALL iom_get( numror, jpdom_autoglo, 'sbc_sc_b', sbc_tsc_b(:,:,jp_sal), ldxios = lrxios )   ! before salt content sbc trend 
    116116         ELSE                                   ! No restart or restart not found: Euler forward time stepping 
    117117            zfact = 1._wp 
     
    161161      !                   
    162162      IF( lrst_oce ) THEN           !==  write sbc_tsc in the ocean restart file  ==! 
    163          CALL iom_rstput( kt, nitrst, numrow, 'sbc_hc_b', sbc_tsc(:,:,jp_tem) ) 
    164          CALL iom_rstput( kt, nitrst, numrow, 'sbc_sc_b', sbc_tsc(:,:,jp_sal) ) 
     163         IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
     164         CALL iom_rstput( kt, nitrst, numrow, 'sbc_hc_b', sbc_tsc(:,:,jp_tem), ldxios = lwxios ) 
     165         CALL iom_rstput( kt, nitrst, numrow, 'sbc_sc_b', sbc_tsc(:,:,jp_sal), ldxios = lwxios ) 
     166         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    165167      ENDIF 
    166168      ! 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90

    r8924 r8987  
    11401140      CALL gls_rst( nit000, 'READ' )   !* read or initialize all required files 
    11411141      ! 
     1142      IF( lwxios ) THEN 
     1143         CALL iom_set_rstw_var_active('en') 
     1144         CALL iom_set_rstw_var_active('avt') 
     1145         CALL iom_set_rstw_var_active('avm') 
     1146         CALL iom_set_rstw_var_active('avmu') 
     1147         CALL iom_set_rstw_var_active('avmv') 
     1148         CALL iom_set_rstw_var_active('mxln') 
     1149      ENDIF 
     1150 
    11421151      IF( nn_timing == 1 )  CALL timing_stop('zdf_gls_init') 
    11431152      ! 
     
    11751184            ! 
    11761185            IF( MIN( id1, id2, id3, id4, id5, id6 ) > 0 ) THEN        ! all required arrays exist 
    1177                CALL iom_get( numror, jpdom_autoglo, 'en'    , en     ) 
    1178                CALL iom_get( numror, jpdom_autoglo, 'avt'   , avt    ) 
    1179                CALL iom_get( numror, jpdom_autoglo, 'avm'   , avm    ) 
    1180                CALL iom_get( numror, jpdom_autoglo, 'avmu'  , avmu   ) 
    1181                CALL iom_get( numror, jpdom_autoglo, 'avmv'  , avmv   ) 
    1182                CALL iom_get( numror, jpdom_autoglo, 'mxln'  , mxln   ) 
     1186               CALL iom_get( numror, jpdom_autoglo, 'en'    , en, ldxios = lrxios     ) 
     1187               CALL iom_get( numror, jpdom_autoglo, 'avt'   , avt, ldxios = lrxios    ) 
     1188               CALL iom_get( numror, jpdom_autoglo, 'avm'   , avm, ldxios = lrxios    ) 
     1189               CALL iom_get( numror, jpdom_autoglo, 'avmu'  , avmu, ldxios = lrxios   ) 
     1190               CALL iom_get( numror, jpdom_autoglo, 'avmv'  , avmv, ldxios = lrxios   ) 
     1191               CALL iom_get( numror, jpdom_autoglo, 'mxln'  , mxln, ldxios = lrxios   ) 
    11831192            ELSE                         
    11841193               IF(lwp) WRITE(numout,*) ' ===>>>> : previous run without gls scheme, en and mxln computed by iterative loop' 
     
    12001209         !                                   ! ------------------- 
    12011210         IF(lwp) WRITE(numout,*) '---- gls-rst ----' 
    1202          CALL iom_rstput( kt, nitrst, numrow, 'en'   , en     )  
    1203          CALL iom_rstput( kt, nitrst, numrow, 'avt'  , avt_k  ) 
    1204          CALL iom_rstput( kt, nitrst, numrow, 'avm'  , avm_k  ) 
    1205          CALL iom_rstput( kt, nitrst, numrow, 'avmu' , avmu_k )  
    1206          CALL iom_rstput( kt, nitrst, numrow, 'avmv' , avmv_k ) 
    1207          CALL iom_rstput( kt, nitrst, numrow, 'mxln' , mxln   ) 
     1211         IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
     1212         CALL iom_rstput( kt, nitrst, numrow, 'en'   , en, ldxios = lwxios      )  
     1213         CALL iom_rstput( kt, nitrst, numrow, 'avt'  , avt_k, ldxios = lwxios  ) 
     1214         CALL iom_rstput( kt, nitrst, numrow, 'avm'  , avm_k, ldxios = lwxios  ) 
     1215         CALL iom_rstput( kt, nitrst, numrow, 'avmu' , avmu_k, ldxios = lwxios )  
     1216         CALL iom_rstput( kt, nitrst, numrow, 'avmv' , avmv_k, ldxios = lwxios ) 
     1217         CALL iom_rstput( kt, nitrst, numrow, 'mxln' , mxln, ldxios = lwxios   ) 
     1218         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    12081219         ! 
    12091220      ENDIF 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfini.F90

    r8924 r8987  
    159159         ! file in traadv_cen2 end read here.  
    160160         IF( iom_varid( numror, 'avmb', ldstop = .FALSE. ) > 0 ) THEN 
    161             CALL iom_get( numror, jpdom_unknown, 'avmb', avmb ) 
    162             CALL iom_get( numror, jpdom_unknown, 'avtb', avtb ) 
     161            CALL iom_get( numror, jpdom_unknown, 'avmb', avmb, ldxios = lrxios ) 
     162            CALL iom_get( numror, jpdom_unknown, 'avtb', avtb, ldxios = lrxios ) 
    163163         ENDIF 
    164164      ENDIF 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90

    r8924 r8987  
    814814      CALL tke_rst( nit000, 'READ' )  !* read or initialize all required files 
    815815      ! 
     816      IF( lwxios ) THEN 
     817         CALL iom_set_rstw_var_active('en') 
     818         CALL iom_set_rstw_var_active('avt') 
     819         CALL iom_set_rstw_var_active('avm') 
     820         CALL iom_set_rstw_var_active('avmu') 
     821         CALL iom_set_rstw_var_active('avmv') 
     822         CALL iom_set_rstw_var_active('dissl') 
     823      ENDIF 
     824 
    816825   END SUBROUTINE zdf_tke_init 
    817826 
     
    845854           ! 
    846855           IF( id1 > 0 ) THEN                       ! 'en' exists 
    847               CALL iom_get( numror, jpdom_autoglo, 'en', en ) 
     856              CALL iom_get( numror, jpdom_autoglo, 'en', en, ldxios = lrxios ) 
    848857              IF( MIN( id2, id3, id4, id5, id6 ) > 0 ) THEN        ! all required arrays exist 
    849                  CALL iom_get( numror, jpdom_autoglo, 'avt'  , avt   ) 
    850                  CALL iom_get( numror, jpdom_autoglo, 'avm'  , avm   ) 
    851                  CALL iom_get( numror, jpdom_autoglo, 'avmu' , avmu  ) 
    852                  CALL iom_get( numror, jpdom_autoglo, 'avmv' , avmv  ) 
    853                  CALL iom_get( numror, jpdom_autoglo, 'dissl', dissl ) 
     858                 CALL iom_get( numror, jpdom_autoglo, 'avt'  , avt, ldxios = lrxios   ) 
     859                 CALL iom_get( numror, jpdom_autoglo, 'avm'  , avm, ldxios = lrxios   ) 
     860                 CALL iom_get( numror, jpdom_autoglo, 'avmu' , avmu, ldxios = lrxios  ) 
     861                 CALL iom_get( numror, jpdom_autoglo, 'avmv' , avmv, ldxios = lrxios  ) 
     862                 CALL iom_get( numror, jpdom_autoglo, 'dissl', dissl, ldxios = lrxios ) 
    854863              ELSE                                                 ! one at least array is missing 
    855864                 CALL tke_avn                                          ! compute avt, avm, avmu, avmv and dissl (approximation) 
     
    880889        !                                   ! ------------------- 
    881890        IF(lwp) WRITE(numout,*) '---- tke-rst ----' 
    882         CALL iom_rstput( kt, nitrst, numrow, 'en'   , en     ) 
    883         CALL iom_rstput( kt, nitrst, numrow, 'avt'  , avt_k  ) 
    884         CALL iom_rstput( kt, nitrst, numrow, 'avm'  , avm_k  ) 
    885         CALL iom_rstput( kt, nitrst, numrow, 'avmu' , avmu_k ) 
    886         CALL iom_rstput( kt, nitrst, numrow, 'avmv' , avmv_k ) 
    887         CALL iom_rstput( kt, nitrst, numrow, 'dissl', dissl  ) 
     891        IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
     892        CALL iom_rstput( kt, nitrst, numrow, 'en'   , en    , ldxios = lwxios ) 
     893        CALL iom_rstput( kt, nitrst, numrow, 'avt'  , avt_k , ldxios = lwxios ) 
     894        CALL iom_rstput( kt, nitrst, numrow, 'avm'  , avm_k , ldxios = lwxios ) 
     895        CALL iom_rstput( kt, nitrst, numrow, 'avmu' , avmu_k, ldxios = lwxios ) 
     896        CALL iom_rstput( kt, nitrst, numrow, 'avmv' , avmv_k, ldxios = lwxios ) 
     897        CALL iom_rstput( kt, nitrst, numrow, 'dissl', dissl , ldxios = lwxios ) 
     898        IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    888899        ! 
    889900     ENDIF 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90

    r8924 r8987  
    422422      IF( lk_c1d        )   CALL     c1d_init   ! 1D column configuration 
    423423                            CALL     wad_init   ! Wetting and drying options 
    424                             CALL     dom_init   ! Domain 
     424                            CALL     dom_init("OPA")   ! Domain 
    425425      IF( ln_crs        )   CALL     crs_init   ! coarsened grid: domain initialization  
    426426      IF( ln_nnogather )    CALL nemo_northcomms! northfold neighbour lists (must be done after the masks are defined) 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/step.F90

    r8924 r8987  
    345345      IF( kstp == nitend .OR. indic < 0 ) THEN  
    346346                      CALL iom_context_finalize(      cxios_context          ) ! needed for XIOS+AGRIF 
     347                      IF(lrxios) CALL iom_context_finalize(      crxios_context          ) 
    347348         IF( ln_crs ) CALL iom_context_finalize( trim(cxios_context)//"_crs" ) !  
    348349      ENDIF 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/SAO_SRC/nemogcm.F90

    r8924 r8987  
    271271                            CALL     phy_cst    ! Physical constants 
    272272                            CALL     eos_init   ! Equation of state 
    273                             CALL     dom_init   ! Domain 
     273                            CALL     dom_init('SAO')   ! Domain 
    274274 
    275275      IF( ln_nnogather )    CALL nemo_northcomms   ! Initialise the northfold neighbour lists (must be done after the masks are defined) 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/SAS_SRC/daymod.F90

    r8924 r8987  
    3030   USE in_out_manager ! I/O manager 
    3131   USE prtctl         ! Print control 
    32    USE iom            ! 
     32   USE iom            ! I/O manager 
    3333   USE timing         ! Timing 
    3434   USE restart        ! restart 
     
    142142      ! call day to set the calendar parameters at the begining of the current simulaton. needed by iom_init 
    143143      CALL day( nit000 ) 
     144      IF( lwxios ) THEN 
     145        CALL iom_set_rstw_var_active('kt') 
     146        CALL iom_set_rstw_var_active('ndastp') 
     147        CALL iom_set_rstw_var_active('adatrj') 
     148        CALL iom_set_rstw_var_active('ntime') 
     149      ENDIF 
    144150      ! 
    145151   END SUBROUTINE day_init 
     
    318324         IF( iom_varid( numror, 'kt', ldstop = .FALSE. ) > 0 ) THEN 
    319325            ! Get Calendar informations 
    320             CALL iom_get( numror, 'kt', zkt )   ! last time-step of previous run 
     326            CALL iom_get( numror, 'kt', zkt, ldxios = lrxios )   ! last time-step of previous run 
    321327            IF(lwp) THEN 
    322328               WRITE(numout,*) ' *** Info read in restart : ' 
     
    337343            IF ( nrstdt == 2 ) THEN 
    338344               ! read the parameters corresponding to nit000 - 1 (last time step of previous run) 
    339                CALL iom_get( numror, 'ndastp', zndastp ) 
     345               CALL iom_get( numror, 'ndastp', zndastp, ldxios = lrxios ) 
    340346               ndastp = NINT( zndastp ) 
    341                CALL iom_get( numror, 'adatrj', adatrj ) 
    342           CALL iom_get( numror, 'ntime', ktime ) 
     347               CALL iom_get( numror, 'adatrj', adatrj , ldxios = lrxios ) 
     348          CALL iom_get( numror, 'ntime' , ktime  , ldxios = lrxios ) 
    343349          nn_time0=INT(ktime) 
    344350               ! calculate start time in hours and minutes 
     
    399405         ENDIF 
    400406         ! calendar control 
    401          CALL iom_rstput( kt, nitrst, numrow, 'kt'     , REAL( kt    , wp) )   ! time-step 
    402          CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp) )   ! date 
    403          CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj            )   ! number of elapsed days since 
     407         IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
     408         CALL iom_rstput( kt, nitrst, numrow, 'kt'     , REAL( kt    , wp)  , ldxios = lwxios )   ! time-step 
     409         CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp)  , ldxios = lwxios )   ! date 
     410         CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj             , ldxios = lwxios )   ! number of elapsed days since 
    404411         !                                                                     ! the begining of the run [s] 
    405     CALL iom_rstput( kt, nitrst, numrow, 'ntime'  , REAL( nn_time0, wp) ) ! time 
     412    CALL iom_rstput( kt, nitrst, numrow, 'ntime'  , REAL( nn_time0, wp), ldxios = lwxios ) ! time 
     413         IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    406414      ENDIF 
    407415      ! 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/SAS_SRC/nemogcm.F90

    r8924 r8987  
    359359                            CALL phy_cst    ! Physical constants 
    360360                            CALL eos_init   ! Equation of state 
    361                             CALL dom_init   ! Domain 
    362  
     361                            CALL dom_init('SAS')   ! Domain 
    363362     IF( ln_nnogather )     CALL nemo_northcomms   ! Initialise the northfold neighbour lists (must be done after the masks are defined) 
    364363 
  • branches/2017/dev_METO_2017/NEMOGCM/NEMO/SAS_SRC/step.F90

    r8924 r8987  
    122122 
    123123#if defined key_iomput 
    124       IF( kstp == nitend .OR. indic < 0 ) THEN  
     124      IF( kstp == nitrst ) THEN 
     125         IF(.NOT.lwxios) THEN 
     126            CALL iom_close( numrow )      
     127         ELSE 
     128            CALL iom_context_finalize( cwxios_context ) 
     129         ENDIF 
     130         lrst_oce = .FALSE. 
     131      ENDIF 
     132      IF( kstp == nitend .OR. indic < 0 ) THEN 
    125133                             CALL iom_context_finalize( cxios_context ) ! needed for XIOS+AGRIF 
    126134      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.