Changeset 8800


Ignore:
Timestamp:
2017-11-23T16:48:37+01:00 (3 years ago)
Author:
andmirek
Message:

#1953 and #1962 merged dev_r8600_xios_read beanch r8668

Location:
branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM
Files:
25 edited

Legend:

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

    r8599 r8800  
    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) 
    5556/ 
    5657! 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90

    r7753 r8800  
    3232   USE timing          ! preformance summary 
    3333   USE wrk_nemo        ! work arrays 
     34   USE iom_def, ONLY : lxios_read 
    3435 
    3536   IMPLICIT NONE 
     
    255256           IF(lwp) WRITE(numout,*) ' dia_hsb_rst at it= ', kt,' date= ', ndastp 
    256257           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 ) 
     258           CALL iom_get( numror, 'frc_v', frc_v, ldxios = lxios_read ) 
     259           CALL iom_get( numror, 'frc_t', frc_t, ldxios = lxios_read ) 
     260           CALL iom_get( numror, 'frc_s', frc_s, ldxios = lxios_read ) 
    260261           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 ) 
     262              CALL iom_get( numror, 'frc_wn_t', frc_wn_t, ldxios = lxios_read ) 
     263              CALL iom_get( numror, 'frc_wn_s', frc_wn_s, ldxios = lxios_read ) 
    263264           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(:,:,:) ) 
     265           CALL iom_get( numror, jpdom_autoglo, 'surf_ini', surf_ini, ldxios = lxios_read ) ! ice sheet coupling 
     266           CALL iom_get( numror, jpdom_autoglo, 'ssh_ini', ssh_ini(:,:), ldxios = lxios_read ) 
     267           CALL iom_get( numror, jpdom_autoglo, 'e3t_ini', e3t_ini(:,:,:), ldxios = lxios_read ) 
     268           CALL iom_get( numror, jpdom_autoglo, 'hc_loc_ini', hc_loc_ini(:,:,:), ldxios = lxios_read ) 
     269           CALL iom_get( numror, jpdom_autoglo, 'sc_loc_ini', sc_loc_ini(:,:,:), ldxios = lxios_read ) 
    269270           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(:,:) ) 
     271              CALL iom_get( numror, jpdom_autoglo, 'ssh_hc_loc_ini', ssh_hc_loc_ini(:,:), ldxios = lxios_read ) 
     272              CALL iom_get( numror, jpdom_autoglo, 'ssh_sc_loc_ini', ssh_sc_loc_ini(:,:), ldxios = lxios_read ) 
    272273           ENDIF 
    273274       ELSE 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/DOM/daymod.F90

    r8329 r8800  
    3333   USE timing         ! Timing 
    3434   USE restart        ! restart 
     35   USE iom_def, ONLY : lxios_read 
    3536 
    3637   IMPLICIT NONE 
     
    318319         IF( iom_varid( numror, 'kt', ldstop = .FALSE. ) > 0 ) THEN 
    319320            ! Get Calendar informations 
    320             CALL iom_get( numror, 'kt', zkt )   ! last time-step of previous run 
     321            CALL iom_get( numror, 'kt', zkt, ldxios = lxios_read )   ! last time-step of previous run 
    321322            IF(lwp) THEN 
    322323               WRITE(numout,*) ' *** Info read in restart : ' 
     
    337338            IF ( nrstdt == 2 ) THEN 
    338339               ! read the parameters corresponding to nit000 - 1 (last time step of previous run) 
    339                CALL iom_get( numror, 'ndastp', zndastp ) 
     340               CALL iom_get( numror, 'ndastp', zndastp, ldxios = lxios_read ) 
    340341               ndastp = NINT( zndastp ) 
    341                CALL iom_get( numror, 'adatrj', adatrj  ) 
    342           CALL iom_get( numror, 'ntime', ktime ) 
     342               CALL iom_get( numror, 'adatrj', adatrj, ldxios = lxios_read ) 
     343          CALL iom_get( numror, 'ntime', ktime, ldxios = lxios_read ) 
    343344          nn_time0=INT(ktime) 
    344345               ! calculate start time in hours and minutes 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/DOM/domain.F90

    r7822 r8800  
    4747   USE wrk_nemo       ! Memory Allocation 
    4848   USE timing         ! Timing 
     49   USE iom_def, ONLY : lxios_read 
    4950 
    5051   IMPLICIT NONE 
     
    285286         &             nn_it000, nn_itend , nn_date0    , nn_time0     , nn_leapy  , nn_istate ,     & 
    286287         &             nn_stock, nn_write , ln_mskland  , ln_clobber   , nn_chunksz, nn_euler  ,     & 
    287          &             ln_cfmeta, ln_iscpl 
     288         &             ln_cfmeta, ln_iscpl, ln_xios_read 
    288289      NAMELIST/namdom/ ln_linssh, nn_closea, nn_msh, rn_isfhmin, rn_rdt, rn_atfp, ln_crs 
    289290#if defined key_netcdf4 
     
    293294      !!---------------------------------------------------------------------- 
    294295      ! 
     296      ln_xios_read = .false.            ! set in case ln_xios_read is not in namelist 
    295297      REWIND( numnam_ref )              ! Namelist namrun in reference namelist : Parameters of the run 
    296298      READ  ( numnam_ref, namrun, IOSTAT = ios, ERR = 901) 
     
    333335         WRITE(numout,*) '      NetCDF chunksize (bytes)        nn_chunksz = ', nn_chunksz 
    334336         WRITE(numout,*) '      IS coupling at the restart step ln_iscpl   = ', ln_iscpl 
     337         WRITE(numout,*) '      READ restart for a single file using XIOS ln_xios_read =', ln_xios_read 
     338      IF( TRIM(Agrif_CFixed()) /= '0') THEN 
     339         WRITE(numout,*) '      READ restart for a single file using XIOS WILL not use AGRIF setting.' 
     340      ENDIF 
    335341      ENDIF 
    336342 
     
    347353      nwrite = nn_write 
    348354      neuler = nn_euler 
     355      IF( TRIM(Agrif_CFixed()) == '0') THEN  
     356       lxios_read = ln_xios_read.AND.ln_rstart 
     357      ENDIF 
    349358      IF ( neuler == 1 .AND. .NOT. ln_rstart ) THEN 
    350359         WRITE(ctmp1,*) 'ln_rstart =.FALSE., nn_euler is forced to 0 ' 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90

    r7753 r8800  
    3333   USE wrk_nemo        ! Memory allocation 
    3434   USE timing          ! Timing 
     35   USE iom_def, ONLY : lxios_read 
    3536 
    3637   IMPLICIT NONE 
     
    799800         IF( ln_rstart ) THEN                   !* Read the restart file 
    800801            CALL rst_read_open                  !  open the restart file if necessary 
    801             CALL iom_get( numror, jpdom_autoglo, 'sshn'   , sshn    ) 
     802            CALL iom_get( numror, jpdom_autoglo, 'sshn'   , sshn, ldxios = lxios_read    ) 
    802803            ! 
    803804            id1 = iom_varid( numror, 'e3t_b', ldstop = .FALSE. ) 
     
    810811            !                             ! --------- ! 
    811812            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(:,:,:) ) 
     813               CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t_b(:,:,:), ldxios = lxios_read ) 
     814               CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t_n(:,:,:), ldxios = lxios_read ) 
    814815               ! needed to restart if land processor not computed  
    815816               IF(lwp) write(numout,*) 'dom_vvl_rst : e3t_b and e3t_n found in restart files' 
     
    825826               IF(lwp) write(numout,*) 'e3t_n set equal to e3t_b.' 
    826827               IF(lwp) write(numout,*) 'neuler is forced to 0' 
    827                CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t_b(:,:,:) ) 
     828               CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t_b(:,:,:), ldxios = lxios_read ) 
    828829               e3t_n(:,:,:) = e3t_b(:,:,:) 
    829830               neuler = 0 
     
    832833               IF(lwp) write(numout,*) 'e3t_b set equal to e3t_n.' 
    833834               IF(lwp) write(numout,*) 'neuler is forced to 0' 
    834                CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t_n(:,:,:) ) 
     835               CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t_n(:,:,:), ldxios = lxios_read ) 
    835836               e3t_b(:,:,:) = e3t_n(:,:,:) 
    836837               neuler = 0 
     
    857858               !                          ! ----------------------- ! 
    858859               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(:,:,:) ) 
     860                  CALL iom_get( numror, jpdom_autoglo, 'tilde_e3t_b', tilde_e3t_b(:,:,:), ldxios = lxios_read ) 
     861                  CALL iom_get( numror, jpdom_autoglo, 'tilde_e3t_n', tilde_e3t_n(:,:,:), ldxios = lxios_read ) 
    861862               ELSE                            ! one at least array is missing 
    862863                  tilde_e3t_b(:,:,:) = 0.0_wp 
     
    867868                  !                       ! ------------ ! 
    868869                  IF( id5 > 0 ) THEN  ! required array exists 
    869                      CALL iom_get( numror, jpdom_autoglo, 'hdiv_lf', hdiv_lf(:,:,:) ) 
     870                     CALL iom_get( numror, jpdom_autoglo, 'hdiv_lf', hdiv_lf(:,:,:), ldxios = lxios_read ) 
    870871                  ELSE                ! array is missing 
    871872                     hdiv_lf(:,:,:) = 0.0_wp 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/DOM/iscplrst.F90

    r8329 r8800  
    2525   USE iscplini        ! ice sheet coupling: initialisation 
    2626   USE iscplhsb        ! ice sheet coupling: conservation 
     27   USE iom_def, ONLY : lxios_read 
    2728 
    2829   IMPLICIT NONE 
     
    6465 
    6566      !! 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) 
     67      CALL iom_get( numror, jpdom_autoglo, 'tmask'  , ztmask_b, ldxios = lxios_read   ) ! need to extrapolate T/S 
     68      CALL iom_get( numror, jpdom_autoglo, 'umask'  , zumask_b, ldxios = lxios_read   ) ! need to correct barotropic velocity 
     69      CALL iom_get( numror, jpdom_autoglo, 'vmask'  , zvmask_b, ldxios = lxios_read   ) ! need to correct barotropic velocity 
     70      CALL iom_get( numror, jpdom_autoglo, 'smask'  , zsmask_b, ldxios = lxios_read   ) ! need to correct barotropic velocity 
     71      CALL iom_get( numror, jpdom_autoglo, 'e3t_n'  , ze3t_b(:,:,:), ldxios = lxios_read )  ! need to compute temperature correction 
     72      CALL iom_get( numror, jpdom_autoglo, 'e3u_n'  , ze3u_b(:,:,:), ldxios = lxios_read )  ! need to correct barotropic velocity 
     73      CALL iom_get( numror, jpdom_autoglo, 'e3v_n'  , ze3v_b(:,:,:), ldxios = lxios_read )  ! need to correct barotropic velocity 
     74      CALL iom_get( numror, jpdom_autoglo, 'gdepw_n', zdepw_b(:,:,:), ldxios = lxios_read ) ! need to interpol vertical profile (vvl) 
    7475 
    7576      !! read namelist 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r7831 r8800  
    5656   USE asminc          ! Assimilation increment 
    5757#endif 
     58   USE iom_def, ONLY : lxios_read 
    5859 
    5960 
     
    11981199      ! 
    11991200      IF( TRIM(cdrw) == 'READ' ) THEN 
    1200          CALL iom_get( numror, jpdom_autoglo, 'ub2_b'  , ub2_b  (:,:) )    
    1201          CALL iom_get( numror, jpdom_autoglo, 'vb2_b'  , vb2_b  (:,:) )  
     1201         CALL iom_get( numror, jpdom_autoglo, 'ub2_b'  , ub2_b  (:,:), ldxios = lxios_read )    
     1202         CALL iom_get( numror, jpdom_autoglo, 'vb2_b'  , vb2_b  (:,:), ldxios = lxios_read )  
    12021203         IF( .NOT.ln_bt_av ) THEN 
    1203             CALL iom_get( numror, jpdom_autoglo, 'sshbb_e'  , sshbb_e(:,:) )    
    1204             CALL iom_get( numror, jpdom_autoglo, 'ubb_e'    ,   ubb_e(:,:) )    
    1205             CALL iom_get( numror, jpdom_autoglo, 'vbb_e'    ,   vbb_e(:,:) ) 
    1206             CALL iom_get( numror, jpdom_autoglo, 'sshb_e'   ,  sshb_e(:,:) )  
    1207             CALL iom_get( numror, jpdom_autoglo, 'ub_e'     ,    ub_e(:,:) )    
    1208             CALL iom_get( numror, jpdom_autoglo, 'vb_e'     ,    vb_e(:,:) ) 
     1204            CALL iom_get( numror, jpdom_autoglo, 'sshbb_e'  , sshbb_e(:,:), ldxios = lxios_read )    
     1205            CALL iom_get( numror, jpdom_autoglo, 'ubb_e'    ,   ubb_e(:,:), ldxios = lxios_read )    
     1206            CALL iom_get( numror, jpdom_autoglo, 'vbb_e'    ,   vbb_e(:,:), ldxios = lxios_read ) 
     1207            CALL iom_get( numror, jpdom_autoglo, 'sshb_e'   ,  sshb_e(:,:), ldxios = lxios_read )  
     1208            CALL iom_get( numror, jpdom_autoglo, 'ub_e'     ,    ub_e(:,:), ldxios = lxios_read )    
     1209            CALL iom_get( numror, jpdom_autoglo, 'vb_e'     ,    vb_e(:,:), ldxios = lxios_read ) 
    12091210         ENDIF 
    12101211#if defined key_agrif 
    12111212         ! Read time integrated fluxes 
    12121213         IF ( .NOT.Agrif_Root() ) THEN 
    1213             CALL iom_get( numror, jpdom_autoglo, 'ub2_i_b'  , ub2_i_b(:,:) )    
    1214             CALL iom_get( numror, jpdom_autoglo, 'vb2_i_b'  , vb2_i_b(:,:) ) 
     1214            CALL iom_get( numror, jpdom_autoglo, 'ub2_i_b'  , ub2_i_b(:,:), ldxios = lxios_read )    
     1215            CALL iom_get( numror, jpdom_autoglo, 'vb2_i_b'  , vb2_i_b(:,:), ldxios = lxios_read ) 
    12151216         ENDIF 
    12161217#endif 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/IOM/in_out_manager.F90

    r7646 r8800  
    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 
    4647 
    4748#if defined key_netcdf4 
     
    150151   LOGICAL       ::   lsp_area = .TRUE.     !: to make a control print over a specific area 
    151152   CHARACTER(lc) ::   cxios_context         !: context name used in xios 
     153   CHARACTER(lc) ::   crxios_context         !: context name used in xios to read restart 
    152154 
    153155   !!---------------------------------------------------------------------- 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90

    r8573 r8800  
    4141   USE dianam          ! build name of file 
    4242   USE xios 
     43   USE iom_def, ONLY : max_rst_fields, rst_fields 
    4344# endif 
    4445   USE ioipsl, ONLY :  ju2ymds    ! for calendar 
    4546   USE crs             ! Grid coarsening 
     47   USE lib_fortran  
    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 set_rst_vars, set_rstr_active, set_rst_context 
    6568# endif 
    6669 
     
    103106      CHARACTER(len=10) :: clname 
    104107      INTEGER           :: ji, jkmin 
     108      LOGICAL :: llrst_context              ! is context related to restart 
    105109      ! 
    106110      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zt_bnds, zw_bnds 
     
    113117      CALL xios_context_initialize(TRIM(clname), mpi_comm_opa) 
    114118      CALL iom_swap( cdname ) 
    115  
     119      llrst_context =  (TRIM(cdname) == TRIM(crxios_context)) 
    116120 
    117121      ! Calendar type is now defined in xml file  
     
    126130 
    127131      ! horizontal grid definition 
    128       CALL set_scalar 
     132      IF(.NOT.llrst_context) CALL set_scalar 
    129133 
    130134      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 ) 
     135         CALL set_grid( "T", glamt, gphit, .FALSE. )  
     136         CALL set_grid( "U", glamu, gphiu, .FALSE. ) 
     137         CALL set_grid( "V", glamv, gphiv, .FALSE. ) 
     138         CALL set_grid( "W", glamt, gphit, .FALSE. ) 
    135139         CALL set_grid_znl( gphit ) 
    136140         ! 
     
    150154         CALL dom_grid_crs   ! Save the parent grid information  & Switch to coarse grid domain 
    151155         ! 
    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 )  
     156         CALL set_grid( "T", glamt_crs, gphit_crs, .FALSE. )  
     157         CALL set_grid( "U", glamu_crs, gphiu_crs, .FALSE. )  
     158         CALL set_grid( "V", glamv_crs, gphiv_crs, .FALSE. )  
     159         CALL set_grid( "W", glamt_crs, gphit_crs, .FALSE. )  
    156160         CALL set_grid_znl( gphit_crs ) 
    157161          ! 
    158162         CALL dom_grid_glo   ! Return to parent grid domain 
    159163         ! 
    160          IF( ln_cfmeta ) THEN   ! Add additional grid metadata 
     164         IF( ln_cfmeta .AND. TRIM(cdname) .NE. TRIM(crxios_context)) THEN   ! Add additional grid metadata 
    161165            CALL iom_set_domain_attr("grid_T", area = e1e2t_crs(nldi:nlei, nldj:nlej)) 
    162166            CALL iom_set_domain_attr("grid_U", area = e1u_crs(nldi:nlei, nldj:nlej) * e2u_crs(nldi:nlei, nldj:nlej)) 
     
    171175 
    172176      ! 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 ) 
     177      IF(.NOT.llrst_context) THEN 
     178          CALL iom_set_axis_attr( "deptht", paxis = gdept_1d ) 
     179          CALL iom_set_axis_attr( "depthu", paxis = gdept_1d ) 
     180          CALL iom_set_axis_attr( "depthv", paxis = gdept_1d ) 
     181          CALL iom_set_axis_attr( "depthw", paxis = gdepw_1d ) 
     182 
     183          ! Add vertical grid bounds 
     184          jkmin = MIN(2,jpk)  ! in case jpk=1 (i.e. sas2D) 
     185          zt_bnds(2,:        ) = gdept_1d(:) 
     186          zt_bnds(1,jkmin:jpk) = gdept_1d(1:jpkm1) 
     187          zt_bnds(1,1        ) = gdept_1d(1) - e3w_1d(1) 
     188          zw_bnds(1,:        ) = gdepw_1d(:) 
     189          zw_bnds(2,1:jpkm1  ) = gdepw_1d(jkmin:jpk) 
     190          zw_bnds(2,jpk:     ) = gdepw_1d(jpk) + e3t_1d(jpk) 
     191          CALL iom_set_axis_attr( "deptht", bounds=zt_bnds ) 
     192          CALL iom_set_axis_attr( "depthu", bounds=zt_bnds ) 
     193          CALL iom_set_axis_attr( "depthv", bounds=zt_bnds ) 
     194          CALL iom_set_axis_attr( "depthw", bounds=zw_bnds ) 
    190195 
    191196 
    192197# if defined key_floats 
    193       CALL iom_set_axis_attr( "nfloat", (/ (REAL(ji,wp), ji=1,nfloat) /) ) 
     198          CALL iom_set_axis_attr( "nfloat", (/ (REAL(ji,wp), ji=1,nfloat) /) ) 
    194199# endif 
    195200#if defined key_lim3 || defined key_lim2 
    196       CALL iom_set_axis_attr( "ncatice", (/ (REAL(ji,wp), ji=1,jpl) /) ) 
     201          CALL iom_set_axis_attr( "ncatice", (/ (REAL(ji,wp), ji=1,jpl) /) ) 
    197202#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        
     203          CALL iom_set_axis_attr( "icbcla", class_num ) 
     204          CALL iom_set_axis_attr( "iax_20C", (/ REAL(20,wp) /) ) 
     205          CALL iom_set_axis_attr( "iax_28C", (/ REAL(28,wp) /) ) 
     206      ENDIF    
    202207      ! automatic definitions of some of the xml attributs 
    203       CALL set_xmlatt 
     208      IF( llrst_context ) THEN 
     209!set names of the fields in restart file IF using XIOS to read/write data 
     210       CALL set_rst_context() 
     211       CALL set_rst_vars() 
     212!set which fields are to be read from restart file 
     213       CALL set_rstr_active() 
     214      ELSE 
     215       CALL set_xmlatt 
     216      ENDIF 
    204217 
    205218      ! end file definition 
     
    213226 
    214227#endif 
    215        
     228 
    216229   END SUBROUTINE iom_init 
    217230 
     231    
     232   SUBROUTINE set_rst_vars() 
     233!set names for variables in restart file 
     234   INTEGER :: i 
     235        rst_fields(:)%vname="NO_NAME";         rst_fields(:)%grid="NO_GRID" 
     236        i = 0 
     237        i = i + 1; rst_fields(i)%vname="rdt";            rst_fields(i)% grid="grid_scalar" 
     238        i = i + 1; rst_fields(i)%vname="un";             rst_fields(i)% grid="grid_N_3D" 
     239        i = i + 1; rst_fields(i)%vname="ub";             rst_fields(i)% grid="grid_N_3D" 
     240        i = i + 1; rst_fields(i)%vname="vn";             rst_fields(i)% grid="grid_N_3D" 
     241        i = i + 1; rst_fields(i)%vname="vb";             rst_fields(i)% grid="grid_N_3D"   
     242        i = i + 1; rst_fields(i)%vname="tn";             rst_fields(i)% grid="grid_N_3D" 
     243        i = i + 1; rst_fields(i)%vname="tb";             rst_fields(i)% grid="grid_N_3D" 
     244        i = i + 1; rst_fields(i)%vname="sn";             rst_fields(i)% grid="grid_N_3D" 
     245        i = i + 1; rst_fields(i)%vname="sb";             rst_fields(i)%grid="grid_N_3D" 
     246        i = i + 1; rst_fields(i)%vname="sshn";           rst_fields(i)%grid="grid_N" 
     247        i = i + 1; rst_fields(i)%vname="sshb";           rst_fields(i)%grid="grid_N" 
     248        i = i + 1; rst_fields(i)%vname="rhop";           rst_fields(i)%grid="grid_N_3D" 
     249        i = i + 1; rst_fields(i)%vname="kt";             rst_fields(i)%grid="grid_scalar" 
     250        i = i + 1; rst_fields(i)%vname="ndastp";         rst_fields(i)%grid="grid_scalar" 
     251        i = i + 1; rst_fields(i)%vname="adatrj";         rst_fields(i)%grid="grid_scalar" 
     252        i = i + 1; rst_fields(i)%vname="utau_b";         rst_fields(i)%grid="grid_N" 
     253        i = i + 1; rst_fields(i)%vname="vtau_b";         rst_fields(i)%grid="grid_N" 
     254        i = i + 1; rst_fields(i)%vname="qns_b";          rst_fields(i)%grid="grid_N" 
     255        i = i + 1; rst_fields(i)%vname="emp_b";          rst_fields(i)%grid="grid_N" 
     256        i = i + 1; rst_fields(i)%vname="sfx_b";          rst_fields(i)%grid="grid_N" 
     257        i = i + 1; rst_fields(i)%vname="en" ;            rst_fields(i)%grid="grid_N_3D"  
     258        i = i + 1; rst_fields(i)%vname="avt";            rst_fields(i)%grid="grid_N_3D" 
     259        i = i + 1; rst_fields(i)%vname="avm";            rst_fields(i)%grid="grid_N_3D" 
     260        i = i + 1; rst_fields(i)%vname="avmu";           rst_fields(i)%grid="grid_N_3D" 
     261        i = i + 1; rst_fields(i)%vname="avmv";           rst_fields(i)%grid="grid_N_3D" 
     262        i = i + 1; rst_fields(i)%vname="dissl";          rst_fields(i)%grid="grid_N_3D" 
     263        i = i + 1; rst_fields(i)%vname="sbc_hc_b";       rst_fields(i)%grid="grid_N" 
     264        i = i + 1; rst_fields(i)%vname="sbc_sc_b";       rst_fields(i)%grid="grid_N" 
     265        i = i + 1; rst_fields(i)%vname="qsr_hc_b";       rst_fields(i)%grid="grid_N_3D" 
     266        i = i + 1; rst_fields(i)%vname="fraqsr_1lev";    rst_fields(i)%grid="grid_N" 
     267        i = i + 1; rst_fields(i)%vname="greenland_icesheet_mass" 
     268                                               rst_fields(i)%grid="grid_scalar" 
     269        i = i + 1; rst_fields(i)%vname="greenland_icesheet_timelapsed" 
     270                                               rst_fields(i)%grid="grid_scalar" 
     271        i = i + 1; rst_fields(i)%vname="greenland_icesheet_mass_roc" 
     272                                               rst_fields(i)%grid="grid_scalar" 
     273        i = i + 1; rst_fields(i)%vname="antarctica_icesheet_mass" 
     274                                               rst_fields(i)%grid="grid_scalar" 
     275        i = i + 1; rst_fields(i)%vname="antarctica_icesheet_timelapsed" 
     276                                               rst_fields(i)%grid="grid_scalar" 
     277        i = i + 1; rst_fields(i)%vname="antarctica_icesheet_mass_roc" 
     278                                               rst_fields(i)%grid="grid_scalar" 
     279        i = i + 1; rst_fields(i)%vname="frc_v";          rst_fields(i)%grid="grid_scalar" 
     280        i = i + 1; rst_fields(i)%vname="frc_t";          rst_fields(i)%grid="grid_scalar" 
     281        i = i + 1; rst_fields(i)%vname="frc_s";          rst_fields(i)%grid="grid_scalar" 
     282        i = i + 1; rst_fields(i)%vname="frc_wn_t";       rst_fields(i)%grid="grid_scalar" 
     283        i = i + 1; rst_fields(i)%vname="frc_wn_s";       rst_fields(i)%grid="grid_scalar" 
     284        i = i + 1; rst_fields(i)%vname="ssh_ini";        rst_fields(i)%grid="grid_N" 
     285        i = i + 1; rst_fields(i)%vname="e3t_ini";        rst_fields(i)%grid="grid_N_3D" 
     286        i = i + 1; rst_fields(i)%vname="hc_loc_ini";     rst_fields(i)%grid="grid_N_3D" 
     287        i = i + 1; rst_fields(i)%vname="sc_loc_ini";     rst_fields(i)%grid="grid_N_3D" 
     288        i = i + 1; rst_fields(i)%vname="ssh_hc_loc_ini"; rst_fields(i)%grid="grid_N" 
     289        i = i + 1; rst_fields(i)%vname="ssh_sc_loc_ini"; rst_fields(i)%grid="grid_N" 
     290        i = i + 1; rst_fields(i)%vname="tilde_e3t_b";    rst_fields(i)%grid="grid_N" 
     291        i = i + 1; rst_fields(i)%vname="tilde_e3t_n";    rst_fields(i)%grid="grid_N" 
     292        i = i + 1; rst_fields(i)%vname="hdiv_lf";        rst_fields(i)%grid="grid_N" 
     293        i = i + 1; rst_fields(i)%vname="ub2_b";          rst_fields(i)%grid="grid_N" 
     294        i = i + 1; rst_fields(i)%vname="vb2_b";          rst_fields(i)%grid="grid_N" 
     295        i = i + 1; rst_fields(i)%vname="sshbb_e";        rst_fields(i)%grid="grid_N" 
     296        i = i + 1; rst_fields(i)%vname="ubb_e";          rst_fields(i)%grid="grid_N" 
     297        i = i + 1; rst_fields(i)%vname="vbb_e";          rst_fields(i)%grid="grid_N" 
     298        i = i + 1; rst_fields(i)%vname="sshb_e";         rst_fields(i)%grid="grid_N" 
     299        i = i + 1; rst_fields(i)%vname="ub_e";           rst_fields(i)%grid="grid_N" 
     300        i = i + 1; rst_fields(i)%vname="vb_e";           rst_fields(i)%grid="grid_N" 
     301        i = i + 1; rst_fields(i)%vname="fwf_isf_b";      rst_fields(i)%grid="grid_N" 
     302        i = i + 1; rst_fields(i)%vname="isf_sc_b";       rst_fields(i)%grid="grid_N" 
     303        i = i + 1; rst_fields(i)%vname="isf_hc_b";       rst_fields(i)%grid="grid_N" 
     304        i = i + 1; rst_fields(i)%vname="ssh_ibb";        rst_fields(i)%grid="grid_N" 
     305        i = i + 1; rst_fields(i)%vname="rnf_b";          rst_fields(i)%grid="grid_N" 
     306        i = i + 1; rst_fields(i)%vname="rnf_hc_b";       rst_fields(i)%grid="grid_N" 
     307        i = i + 1; rst_fields(i)%vname="rnf_sc_b";       rst_fields(i)%grid="grid_N" 
     308        i = i + 1; rst_fields(i)%vname="nn_fsbc";        rst_fields(i)%grid="grid_scalar" 
     309        i = i + 1; rst_fields(i)%vname="ssu_m";          rst_fields(i)%grid="grid_N" 
     310        i = i + 1; rst_fields(i)%vname="ssv_m";          rst_fields(i)%grid="grid_N" 
     311        i = i + 1; rst_fields(i)%vname="sst_m";          rst_fields(i)%grid="grid_N" 
     312        i = i + 1; rst_fields(i)%vname="sss_m";          rst_fields(i)%grid="grid_N" 
     313        i = i + 1; rst_fields(i)%vname="ssh_m";          rst_fields(i)%grid="grid_N" 
     314        i = i + 1; rst_fields(i)%vname="e3t_m";          rst_fields(i)%grid="grid_N" 
     315        i = i + 1; rst_fields(i)%vname="frq_m";          rst_fields(i)%grid="grid_N" 
     316        i = i + 1; rst_fields(i)%vname="avmb";           rst_fields(i)%grid="grid_vector" 
     317        i = i + 1; rst_fields(i)%vname="avtb";           rst_fields(i)%grid="grid_vector" 
     318        i = i + 1; rst_fields(i)%vname="ub2_i_b";        rst_fields(i)%grid="grid_N" 
     319        i = i + 1; rst_fields(i)%vname="vb2_i_b";        rst_fields(i)%grid="grid_N" 
     320        i = i + 1; rst_fields(i)%vname="ntime";          rst_fields(i)%grid="grid_scalar" 
     321        i = i + 1; rst_fields(i)%vname="Dsst";           rst_fields(i)%grid="grid_scalar" 
     322        i = i + 1; rst_fields(i)%vname="tmask";          rst_fields(i)%grid="grid_N_3D" 
     323        i = i + 1; rst_fields(i)%vname="umask";          rst_fields(i)%grid="grid_N_3D" 
     324        i = i + 1; rst_fields(i)%vname="vmask";          rst_fields(i)%grid="grid_N_3D" 
     325        i = i + 1; rst_fields(i)%vname="smask";          rst_fields(i)%grid="grid_N_3D" 
     326        i = i + 1; rst_fields(i)%vname="gdepw_n";        rst_fields(i)%grid="grid_N_3D" 
     327        i = i + 1; rst_fields(i)%vname="e3t_n";          rst_fields(i)%grid="grid_N_3D" 
     328        i = i + 1; rst_fields(i)%vname="e3u_n";          rst_fields(i)%grid="grid_N_3D" 
     329        i = i + 1; rst_fields(i)%vname="e3v_n";          rst_fields(i)%grid="grid_N_3D" 
     330        i = i + 1; rst_fields(i)%vname="surf_ini";       rst_fields(i)%grid="grid_N" 
     331        i = i + 1; rst_fields(i)%vname="e3t_b";          rst_fields(i)%grid="grid_N_3D" 
     332        i = i + 1; rst_fields(i)%vname="e3t_n";          rst_fields(i)%grid="grid_N_3D" 
     333        i = i + 1; rst_fields(i)%vname="mxln";           rst_fields(i)%grid="grid_N_3D" 
     334        i = i + 1; rst_fields(i)%vname="e3t_m";          rst_fields(i)%grid="grid_N_3D" 
     335   END SUBROUTINE set_rst_vars 
     336 
     337 
     338   SUBROUTINE set_rstr_active() 
     339!sets enabled = .TRUE. for each field in restart file 
     340   CHARACTER(len=256) :: rst_file 
     341   TYPE(xios_field) :: field_hdl 
     342   TYPE(xios_file) :: file_hdl 
     343   TYPE(xios_filegroup) :: filegroup_hdl 
     344   INTEGER :: i 
     345   CHARACTER(lc)  ::   clpath 
     346 
     347        clpath = TRIM(cn_ocerst_indir) 
     348        IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 
     349        IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     350           rst_file = TRIM(clpath)//TRIM(cn_ocerst_in) 
     351        ELSE 
     352           rst_file = TRIM(clpath)//'1_'//TRIM(cn_ocerst_in) 
     353        ENDIF 
     354!set name of the restart file and enable available fields 
     355        if(lwp) WRITE(numout,*) 'Setting restart filename (for XIOS) to: ',rst_file 
     356        CALL xios_get_handle("file_definition", filegroup_hdl ) 
     357        CALL xios_add_child(filegroup_hdl, file_hdl, 'rrestart') 
     358        CALL xios_set_file_attr( "rrestart", name=trim(rst_file), type="one_file", & 
     359             par_access="collective", enabled=.TRUE., mode="read",                 & 
     360             output_freq=xios_timestep) 
     361!defin files for restart context 
     362        DO i = 1, max_rst_fields 
     363         IF( TRIM(rst_fields(i)%vname) /= "NO_NAME") THEN 
     364           IF( iom_varid( numror, TRIM(rst_fields(i)%vname), ldstop = .FALSE. ) > 0 ) THEN 
     365                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
     366                SELECT CASE (TRIM(rst_fields(i)%grid)) 
     367                 CASE ("grid_N_3D") 
     368                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_fields(i)%vname), & 
     369                        domain_ref="grid_N", axis_ref="deptht", operation = "instant") 
     370                 CASE ("grid_N") 
     371                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_fields(i)%vname), & 
     372                        domain_ref="grid_N", operation = "instant")  
     373                CASE ("grid_vector") 
     374                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_fields(i)%vname), & 
     375                         axis_ref="deptht", operation = "instant") 
     376                 CASE ("grid_scalar") 
     377                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_fields(i)%vname), & 
     378                        scalar_ref = "grid_scalar", operation = "instant") 
     379                END SELECT 
     380                IF(lwp) WRITE(numout,*) 'XIOS read: ', TRIM(rst_fields(i)%vname), ' enabled in ', TRIM(rst_file) 
     381           ENDIF 
     382         ENDIF 
     383        END DO 
     384   END SUBROUTINE set_rstr_active 
     385 
     386   SUBROUTINE set_rst_context( )  
     387#if defined key_iomput 
     388   TYPE(xios_domaingroup)            :: domaingroup_hdl  
     389   TYPE(xios_domain)                 :: domain_hdl  
     390   TYPE(xios_axisgroup)              :: axisgroup_hdl  
     391   TYPE(xios_axis)                   :: axis_hdl  
     392   TYPE(xios_scalar)                 :: scalar_hdl  
     393   TYPE(xios_scalargroup)            :: scalargroup_hdl  
     394 
     395     CALL xios_get_handle("domain_definition",domaingroup_hdl)  
     396     CALL xios_add_child(domaingroup_hdl, domain_hdl, "grid_N")  
     397     CALL set_grid("N", glamt, gphit, .TRUE.)  
     398  
     399     CALL xios_get_handle("axis_definition",axisgroup_hdl)  
     400     CALL xios_add_child(axisgroup_hdl, axis_hdl, "deptht")  
     401!AGRIF fails to compile when unit= is in call to xios_set_axis_attr 
     402!    CALL xios_set_axis_attr( "deptht", long_name="Vertical levels",  unit="m", positive="down")  
     403     CALL xios_set_axis_attr( "deptht", long_name="Vertical levels in meters", positive="down") 
     404     CALL iom_set_axis_attr( "deptht", paxis = gdept_1d )  
     405 
     406     CALL xios_get_handle("scalar_definition", scalargroup_hdl)  
     407     CALL xios_add_child(scalargroup_hdl, scalar_hdl, "grid_scalar")  
     408#endif 
     409   END SUBROUTINE set_rst_context 
    218410 
    219411   SUBROUTINE iom_swap( cdname ) 
     
    347539            icnt = icnt + 1 
    348540         END DO 
     541      ELSE 
     542         lxios_sini = .TRUE. 
    349543      ENDIF 
    350544      IF( llwrt ) THEN 
     
    530724   !!                   INTERFACE iom_get 
    531725   !!---------------------------------------------------------------------- 
    532    SUBROUTINE iom_g0d( kiomid, cdvar, pvar, ktime ) 
     726   SUBROUTINE iom_g0d( kiomid, cdvar, pvar, ktime, ldxios ) 
    533727      INTEGER         , INTENT(in   )                 ::   kiomid    ! Identifier of the file 
    534728      CHARACTER(len=*), INTENT(in   )                 ::   cdvar     ! Name of the variable 
    535729      REAL(wp)        , INTENT(  out)                 ::   pvar      ! read field 
    536730      INTEGER         , INTENT(in   ),     OPTIONAL   ::   ktime     ! record number 
     731      LOGICAL         , INTENT(in   ),     OPTIONAL   ::   ldxios    ! use xios to read restart 
    537732      ! 
    538733      INTEGER                                         ::   idvar     ! variable id 
     
    542737      CHARACTER(LEN=100)                              ::   clname    ! file name 
    543738      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 
     739      LOGICAL                                         ::   llxios 
     740      ! 
     741      llxios = .FALSE. 
     742      IF( PRESENT(ldxios) ) llxios = ldxios 
     743 
     744      IF(.NOT.llxios) THEN  ! read data using default library 
     745         itime = 1 
     746         IF( PRESENT(ktime) ) itime = ktime 
     747         ! 
     748         clname = iom_file(kiomid)%name 
     749         clinfo = '          iom_g0d, file: '//trim(clname)//', var: '//trim(cdvar) 
     750         ! 
     751         IF( kiomid > 0 ) THEN 
     752            idvar = iom_varid( kiomid, cdvar ) 
     753            IF( iom_file(kiomid)%nfid > 0 .AND. idvar > 0 ) THEN 
     754               idmspc = iom_file ( kiomid )%ndims( idvar ) 
     755               IF( iom_file(kiomid)%luld(idvar) )  idmspc = idmspc - 1 
     756               WRITE(cldmspc , fmt='(i1)') idmspc 
     757               IF( idmspc > 0 )  CALL ctl_stop( TRIM(clinfo), 'When reading to a 0D array, we do not accept data', & 
     758                                    &                         'with 1 or more spatial dimensions: '//cldmspc//' were found.' , & 
     759                                    &                         'Use ncwa -a to suppress the unnecessary dimensions' ) 
     760               SELECT CASE (iom_file(kiomid)%iolib) 
     761               CASE (jpnf90   )   ;   CALL iom_nf90_get(    kiomid, idvar, pvar, itime ) 
     762               CASE DEFAULT 
     763                  CALL ctl_stop( 'iom_g0d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
     764               END SELECT 
     765            ENDIF 
     766         ENDIF 
     767      ELSE 
     768         IF(lwp) WRITE(numout,*) 'XIOS RST READ (0D): ', trim(cdvar) 
     769         CALL iom_swap( TRIM(crxios_context) ) 
     770         CALL xios_recv_field( trim(cdvar), pvar) 
     771         CALL iom_swap( TRIM(cxios_context) ) 
    566772      ENDIF 
    567773   END SUBROUTINE iom_g0d 
    568774 
    569    SUBROUTINE iom_g1d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount ) 
     775   SUBROUTINE iom_g1d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, ldxios ) 
    570776      INTEGER         , INTENT(in   )                         ::   kiomid    ! Identifier of the file 
    571777      INTEGER         , INTENT(in   )                         ::   kdom      ! Type of domain to be read 
     
    575781      INTEGER         , INTENT(in   ), DIMENSION(1), OPTIONAL ::   kstart    ! start axis position of the reading  
    576782      INTEGER         , INTENT(in   ), DIMENSION(1), OPTIONAL ::   kcount    ! number of points in each axis 
     783      LOGICAL         , INTENT(in   ),               OPTIONAL ::   ldxios    ! read data using XIOS 
    577784      ! 
    578785      IF( kiomid > 0 ) THEN 
    579786         IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom       , cdvar        , pv_r1d=pvar,   & 
    580               &                                                     ktime=ktime, kstart=kstart, kcount=kcount ) 
     787              &                                                     ktime=ktime, kstart=kstart, kcount=kcount, & 
     788              &                                                     ldxios=ldxios ) 
    581789      ENDIF 
    582790   END SUBROUTINE iom_g1d 
    583791 
    584    SUBROUTINE iom_g2d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr ) 
     792   SUBROUTINE iom_g2d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr, ldxios) 
    585793      INTEGER         , INTENT(in   )                           ::   kiomid    ! Identifier of the file 
    586794      INTEGER         , INTENT(in   )                           ::   kdom      ! Type of domain to be read 
     
    594802                                                                               ! called open_ocean_jstart to set the start 
    595803                                                                               ! value for the 2nd dimension (netcdf only) 
     804      LOGICAL         , INTENT(in   ),                 OPTIONAL ::   ldxios    ! read data using XIOS 
    596805      ! 
    597806      IF( kiomid > 0 ) THEN 
    598807         IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom       , cdvar        , pv_r2d=pvar,   & 
    599808              &                                                     ktime=ktime, kstart=kstart, kcount=kcount, & 
    600               &                                                     lrowattr=lrowattr ) 
     809              &                                                     lrowattr=lrowattr,  ldxios=ldxios) 
    601810      ENDIF 
    602811   END SUBROUTINE iom_g2d 
    603812 
    604    SUBROUTINE iom_g3d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr ) 
     813   SUBROUTINE iom_g3d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr, ldxios ) 
    605814      INTEGER         , INTENT(in   )                             ::   kiomid    ! Identifier of the file 
    606815      INTEGER         , INTENT(in   )                             ::   kdom      ! Type of domain to be read 
     
    614823                                                                                 ! called open_ocean_jstart to set the start 
    615824                                                                                 ! value for the 2nd dimension (netcdf only) 
     825      LOGICAL         , INTENT(in   ),                   OPTIONAL ::   ldxios    ! read data using XIOS 
    616826      ! 
    617827      IF( kiomid > 0 ) THEN 
    618828         IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom       , cdvar        , pv_r3d=pvar,   & 
    619829              &                                                     ktime=ktime, kstart=kstart, kcount=kcount, & 
    620               &                                                     lrowattr=lrowattr ) 
     830              &                                                     lrowattr=lrowattr, ldxios=ldxios ) 
    621831      ENDIF 
    622832   END SUBROUTINE iom_g3d 
     
    626836         &                  pv_r1d, pv_r2d, pv_r3d,   & 
    627837         &                  ktime , kstart, kcount,   & 
    628          &                  lrowattr                ) 
     838         &                  lrowattr, ldxios        ) 
    629839      !!----------------------------------------------------------------------- 
    630840      !!                  ***  ROUTINE  iom_get_123d  *** 
     
    647857                                                                           ! called open_ocean_jstart to set the start 
    648858                                                                           ! value for the 2nd dimension (netcdf only) 
    649       ! 
     859      LOGICAL                    , INTENT(in   ), OPTIONAL ::   ldxios     ! use XIOS to read restart 
     860      ! 
     861      LOGICAL                        ::   llxios       ! local definition for XIOS read 
    650862      LOGICAL                        ::   llnoov      ! local definition to read overlap 
    651863      LOGICAL                        ::   luse_jattr  ! local definition to read open_ocean_jstart file attribute 
     
    674886      !--------------------------------------------------------------------- 
    675887      ! 
    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 ? 
     888      REAL(wp)                       :: gma, gmi 
     889      llxios = .FALSE. 
     890      if(PRESENT(ldxios)) llxios = ldxios 
     891      idvar = iom_varid( kiomid, cdvar )  
    679892      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  ) & 
     893 
     894      IF(.NOT.llxios) THEN 
     895          clname = iom_file(kiomid)%name   !   esier to read 
     896          clinfo = '          iom_get_123d, file: '//trim(clname)//', var: '//trim(cdvar) 
     897          ! local definition of the domain ? 
     898          ! do we read the overlap  
     899          ! ugly patch SM+JMM+RB to overwrite global definition in some cases 
     900          llnoov = (jpni * jpnj ) == jpnij .AND. .NOT. lk_agrif  
     901          ! check kcount and kstart optionals parameters... 
     902          IF( PRESENT(kcount) .AND. (.NOT. PRESENT(kstart)) ) CALL ctl_stop(trim(clinfo), 'kcount present needs kstart present') 
     903          IF( PRESENT(kstart) .AND. (.NOT. PRESENT(kcount)) ) CALL ctl_stop(trim(clinfo), 'kstart present needs kcount present') 
     904          IF( PRESENT(kstart) .AND. idom /= jpdom_unknown .AND.  idom /= jpdom_autoglo_xy  ) & 
    687905     &           CALL ctl_stop(trim(clinfo), 'kstart present needs kdom = jpdom_unknown or kdom = jpdom_autoglo_xy') 
    688906 
     
    701919      ENDIF 
    702920 
    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',   & 
     921          ! Search for the variable in the data base (eventually actualize data) 
     922          istop = nstop 
     923          ! 
     924          IF( idvar > 0 ) THEN 
     925             ! to write iom_file(kiomid)%dimsz in a shorter way ! 
     926             idimsz(:) = iom_file(kiomid)%dimsz(:, idvar)  
     927             inbdim = iom_file(kiomid)%ndims(idvar)            ! number of dimensions in the file 
     928             idmspc = inbdim                                   ! number of spatial dimensions in the file 
     929             IF( iom_file(kiomid)%luld(idvar) )   idmspc = inbdim - 1 
     930             IF( idmspc > 3 )   CALL ctl_stop(trim(clinfo), 'the file has more than 3 spatial dimensions this case is not coded...')  
     931             ! 
     932             ! update idom definition... 
     933             ! Identify the domain in case of jpdom_auto(glo/dta) definition 
     934             IF( idom == jpdom_autoglo_xy ) THEN 
     935                ll_depth_spec = .TRUE. 
     936                idom = jpdom_autoglo 
     937             ELSE 
     938                ll_depth_spec = .FALSE. 
     939             ENDIF 
     940             IF( idom == jpdom_autoglo .OR. idom == jpdom_autodta ) THEN             
     941                IF( idom == jpdom_autoglo ) THEN   ;   idom = jpdom_global  
     942                ELSE                               ;   idom = jpdom_data 
     943                ENDIF 
     944                ind1 = INDEX( clname, '_', back = .TRUE. ) + 1 
     945                ind2 = INDEX( clname, '.', back = .TRUE. ) - 1 
     946                IF( ind2 > ind1 ) THEN   ;   IF( VERIFY( clname(ind1:ind2), '0123456789' ) == 0 )   idom = jpdom_local   ;   ENDIF 
     947             ENDIF 
     948             ! Identify the domain in case of jpdom_local definition 
     949             IF( idom == jpdom_local ) THEN 
     950                IF(     idimsz(1) == jpi               .AND. idimsz(2) == jpj               ) THEN   ;   idom = jpdom_local_full 
     951                ELSEIF( idimsz(1) == nlci              .AND. idimsz(2) == nlcj              ) THEN   ;   idom = jpdom_local_noextra 
     952                ELSEIF( idimsz(1) == (nlei - nldi + 1) .AND. idimsz(2) == (nlej - nldj + 1) ) THEN   ;   idom = jpdom_local_noovlap 
     953                ELSE   ;   CALL ctl_stop( trim(clinfo), 'impossible to identify the local domain' ) 
     954                ENDIF 
     955             ENDIF 
     956             ! 
     957             ! check the consistency between input array and data rank in the file 
     958             ! 
     959             ! initializations 
     960             itime = 1 
     961             IF( PRESENT(ktime) ) itime = ktime 
     962 
     963             irankpv = 1 * COUNT( (/PRESENT(pv_r1d)/) ) + 2 * COUNT( (/PRESENT(pv_r2d)/) ) + 3 * COUNT( (/PRESENT(pv_r3d)/) ) 
     964             WRITE(clrankpv, fmt='(i1)') irankpv 
     965             WRITE(cldmspc , fmt='(i1)') idmspc 
     966             ! 
     967             IF(     idmspc <  irankpv ) THEN  
     968                CALL ctl_stop( TRIM(clinfo), 'The file has only '//cldmspc//' spatial dimension',   & 
    752969               &                         '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 )   & 
     970             ELSEIF( idmspc == irankpv ) THEN 
     971                IF( PRESENT(pv_r1d) .AND. idom /= jpdom_unknown )   & 
    755972               &   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...'              ,   & 
     973             ELSEIF( idmspc >  irankpv ) THEN 
     974                   IF( PRESENT(pv_r2d) .AND. itime == 1 .AND. idimsz(3) == 1 .AND. idmspc == 3 ) THEN 
     975                      CALL ctl_warn( trim(clinfo), '2D array but 3 spatial dimensions for the data...'              ,   & 
    759976                        &         'As the size of the z dimension is 1 and as we try to read the first record, ',   & 
    760977                        &         '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,'         ,   & 
     978                      idmspc = idmspc - 1 
     979                   ELSE 
     980                      CALL ctl_stop( TRIM(clinfo), 'To keep iom lisibility, when reading a '//clrankpv//'D array,'         ,   & 
    764981                     &                         'we do not accept data with '//cldmspc//' spatial dimensions',   & 
    765982                     &                         '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 
     983                   ENDIF 
     984             ENDIF 
     985 
     986             ! 
     987             ! definition of istart and icnt 
     988             ! 
     989             icnt  (:) = 1 
     990             istart(:) = 1 
     991             istart(idmspc+1) = itime 
    775992 
    776993         IF( PRESENT(kstart) .AND. .NOT. ll_depth_spec ) THEN  
     
    7931010! JMM + SM: ugly patch before getting the new version of lib_mpp) 
    7941011!                  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 /) 
     1012                      IF( llnoov .AND. idom /= jpdom_local_noovlap ) istart(1:2) = istart(1:2) + (/ nldi - 1, nldj - 1 /) 
    7961013                  ! we do not read the overlap and the extra-halos -> from nldi to nlei and from nldj to nlej  
    7971014! JMM + SM: ugly patch before getting the new version of lib_mpp) 
     
    8101027         ENDIF 
    8111028 
    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 
     1029             ! check that istart and icnt can be used with this file 
     1030             !- 
     1031             DO jl = 1, jpmax_dims 
     1032                itmp = istart(jl)+icnt(jl)-1 
     1033                IF( itmp > idimsz(jl) .AND. idimsz(jl) /= 0 ) THEN 
     1034                   WRITE( ctmp1, FMT="('(istart(', i1, ') + icnt(', i1, ') - 1) = ', i5)" ) jl, jl, itmp 
     1035                   WRITE( ctmp2, FMT="(' is larger than idimsz(', i1,') = ', i5)"         ) jl, idimsz(jl) 
     1036                   CALL ctl_stop( trim(clinfo), 'start and count too big regarding to the size of the data, ', ctmp1, ctmp2 )      
     1037                ENDIF 
     1038             END DO 
     1039 
     1040             ! check that icnt matches the input array 
     1041             !-      
     1042             IF( idom == jpdom_unknown ) THEN 
     1043                IF( irankpv == 1 )        ishape(1:1) = SHAPE(pv_r1d) 
     1044                IF( irankpv == 2 )        ishape(1:2) = SHAPE(pv_r2d) 
     1045                IF( irankpv == 3 )        ishape(1:3) = SHAPE(pv_r3d) 
     1046                ctmp1 = 'd' 
     1047             ELSE 
     1048                IF( irankpv == 2 ) THEN 
    8321049! JMM + SM: ugly patch before getting the new version of lib_mpp) 
    8331050!               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  
     1051                   IF( llnoov ) THEN ; ishape(1:2)=SHAPE(pv_r2d(nldi:nlei,nldj:nlej  )) ; ctmp1='d(nldi:nlei,nldj:nlej)' 
     1052                   ELSE              ; ishape(1:2)=SHAPE(pv_r2d(1   :nlci,1   :nlcj  )) ; ctmp1='d(1:nlci,1:nlcj)' 
     1053                   ENDIF 
     1054                ENDIF 
     1055                IF( irankpv == 3 ) THEN  
    8391056! JMM + SM: ugly patch before getting the new version of lib_mpp) 
    8401057!               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 
     1058                   IF( llnoov ) THEN ; ishape(1:3)=SHAPE(pv_r3d(nldi:nlei,nldj:nlej,:)) ; ctmp1='d(nldi:nlei,nldj:nlej,:)' 
     1059                   ELSE              ; ishape(1:3)=SHAPE(pv_r3d(1   :nlci,1   :nlcj,:)) ; ctmp1='d(1:nlci,1:nlcj,:)' 
     1060                   ENDIF 
     1061                ENDIF 
     1062             ENDIF 
    8461063          
    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 
     1064             DO jl = 1, irankpv 
     1065                WRITE( ctmp2, FMT="(', ', i1,'): ', i5,' /= icnt(', i1,'):', i5)" ) jl, ishape(jl), jl, icnt(jl) 
     1066                IF( ishape(jl) /= icnt(jl) )   CALL ctl_stop( TRIM(clinfo), 'size(pv_r'//clrankpv//TRIM(ctmp1)//TRIM(ctmp2) ) 
     1067             END DO 
     1068 
     1069          ENDIF 
     1070 
     1071          ! read the data 
     1072          !-      
     1073          IF( idvar > 0 .AND. istop == nstop ) THEN   ! no additional errors until this point... 
     1074             ! 
     1075             ! find the right index of the array to be read 
    8591076! JMM + SM: ugly patch before getting the new version of lib_mpp) 
    8601077!         IF( idom /= jpdom_unknown ) THEN   ;   ix1 = nldi   ;   ix2 = nlei      ;   iy1 = nldj   ;   iy2 = nlej 
    8611078!         ELSE                               ;   ix1 = 1      ;   ix2 = icnt(1)   ;   iy1 = 1      ;   iy2 = icnt(2) 
    8621079!         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 
     1080             IF( llnoov ) THEN 
     1081                IF( idom /= jpdom_unknown ) THEN   ;   ix1 = nldi   ;   ix2 = nlei      ;   iy1 = nldj   ;   iy2 = nlej 
     1082                ELSE                               ;   ix1 = 1      ;   ix2 = icnt(1)   ;   iy1 = 1      ;   iy2 = icnt(2) 
     1083                ENDIF 
     1084             ELSE 
     1085                IF( idom /= jpdom_unknown ) THEN   ;   ix1 = 1      ;   ix2 = nlci      ;   iy1 = 1      ;   iy2 = nlcj 
     1086                ELSE                               ;   ix1 = 1      ;   ix2 = icnt(1)   ;   iy1 = 1      ;   iy2 = icnt(2) 
     1087                ENDIF 
     1088             ENDIF 
    8721089       
    8731090         SELECT CASE (iom_file(kiomid)%iolib) 
     
    8781095         END SELECT 
    8791096 
    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) 
     1097             IF( istop == nstop ) THEN   ! no additional errors until this point... 
     1098                IF(lwp) WRITE(numout,"(10x,' read ',a,' (rec: ',i6,') in ',a,' ok')") TRIM(cdvar), itime, TRIM(iom_file(kiomid)%name) 
    8821099           
    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       ! 
     1100                !--- overlap areas and extra hallows (mpp) 
     1101                IF(     PRESENT(pv_r2d) .AND. idom /= jpdom_unknown ) THEN 
     1102                   CALL lbc_lnk( pv_r2d,'Z',-999.,'no0' ) 
     1103                ELSEIF( PRESENT(pv_r3d) .AND. idom /= jpdom_unknown ) THEN 
     1104                   ! this if could be simplified with the new lbc_lnk that works with any size of the 3rd dimension 
     1105                   IF( icnt(3) == jpk ) THEN 
     1106                      CALL lbc_lnk( pv_r3d,'Z',-999.,'no0' ) 
     1107                   ELSE   ! put some arbitrary value (a call to lbc_lnk will be done later...) 
     1108                      DO jj = nlcj+1, jpj   ;   pv_r3d(1:nlci, jj, :) = pv_r3d(1:nlci, nlej, :)   ;   END DO 
     1109                      DO ji = nlci+1, jpi   ;   pv_r3d(ji    , : , :) = pv_r3d(nlei  , :   , :)   ;   END DO 
     1110                   ENDIF 
     1111                ENDIF 
     1112                ! 
     1113             ELSE 
     1114                ! return if istop == nstop is false 
     1115                RETURN 
     1116             ENDIF 
     1117          ELSE 
     1118             ! return if statment idvar > 0 .AND. istop == nstop is false 
     1119             RETURN 
     1120          ENDIF 
     1121          ! 
     1122       ELSE        ! read using XIOS. Only if KEY_IOMPUT is defined 
     1123#if defined key_iomput 
     1124!would be good to be able to check which context is active and swap only if current is not restart 
     1125          CALL iom_swap( TRIM(crxios_context) )  
     1126          IF( PRESENT(pv_r3d) ) THEN 
     1127             if(lwp) write(numout,*) 'XIOS RST READ (3D): ',trim(cdvar) 
     1128             CALL xios_recv_field( trim(cdvar), pv_r3d) 
     1129             IF(idom /= jpdom_unknown ) then 
     1130                 CALL lbc_lnk( pv_r3d,'Z',-999.,'no0' ) 
     1131             ENDIF 
     1132          ELSEIF( PRESENT(pv_r2d) ) THEN 
     1133             if(lwp) write(numout,*) 'XIOS RST READ (2D): ', trim(cdvar) 
     1134             CALL xios_recv_field( trim(cdvar), pv_r2d) 
     1135             IF(idom /= jpdom_unknown ) THEN 
     1136                 CALL lbc_lnk(pv_r2d,'Z',-999.,'no0') 
     1137             ENDIF 
     1138          ELSEIF( PRESENT(pv_r1d) ) THEN 
     1139             if(lwp) write(numout,*) 'XIOS RST READ (1D): ', trim(cdvar) 
     1140             CALL xios_recv_field( trim(cdvar), pv_r1d) 
     1141          ENDIF 
     1142          CALL iom_swap( TRIM(cxios_context) ) 
     1143#else 
     1144          istop = istop + 1  
     1145          clinfo = 'Can not use XIOS in iom_get_123d, file: '//trim(clname)//', var:'//trim(cdvar) 
     1146#endif 
     1147       ENDIF 
     1148!some final adjustments 
     1149       ! C1D case : always call lbc_lnk to replicate the central value over the whole 3X3 domain 
     1150       IF( lk_c1d .AND. PRESENT(pv_r2d) )   CALL lbc_lnk( pv_r2d,'Z',1. ) 
     1151       IF( lk_c1d .AND. PRESENT(pv_r3d) )   CALL lbc_lnk( pv_r3d,'Z',1. ) 
     1152 
     1153       !--- Apply scale_factor and offset 
     1154       zscf = iom_file(kiomid)%scf(idvar)      ! scale factor 
     1155       zofs = iom_file(kiomid)%ofs(idvar)      ! offset 
     1156       IF(     PRESENT(pv_r1d) ) THEN 
     1157          IF( zscf /= 1. )   pv_r1d(:) = pv_r1d(:) * zscf  
     1158          IF( zofs /= 0. )   pv_r1d(:) = pv_r1d(:) + zofs 
     1159       ELSEIF( PRESENT(pv_r2d) ) THEN 
     1160          IF( zscf /= 1.)   pv_r2d(:,:) = pv_r2d(:,:) * zscf 
     1161          IF( zofs /= 0.)   pv_r2d(:,:) = pv_r2d(:,:) + zofs 
     1162       ELSEIF( PRESENT(pv_r3d) ) THEN 
     1163          IF( zscf /= 1.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) * zscf 
     1164          IF( zofs /= 0.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) + zofs 
     1165       ENDIF 
    9181166   END SUBROUTINE iom_get_123d 
    9191167 
     
    12621510            &    lonvalue_1D=lonvalue, latvalue_1D=latvalue, mask_1D=mask, nvertex=nvertex, bounds_lon_1D=bounds_lon,      & 
    12631511            &    bounds_lat_1D=bounds_lat, area=area, type='curvilinear') 
    1264      ENDIF 
     1512      ENDIF 
    12651513      IF ( xios_is_valid_domaingroup(cdid) ) THEN 
    12661514         CALL xios_set_domaingroup_attr( cdid, ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, jbegin=jbegin, ni=ni, nj=nj,   & 
     
    13781626 
    13791627 
    1380    SUBROUTINE set_grid( cdgrd, plon, plat ) 
     1628   SUBROUTINE set_grid( cdgrd, plon, plat, ldxios ) 
    13811629      !!---------------------------------------------------------------------- 
    13821630      !!                     ***  ROUTINE set_grid  *** 
     
    13911639      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zmask 
    13921640      INTEGER  :: ni,nj 
     1641      LOGICAL, INTENT(IN) :: ldxios 
    13931642       
    13941643      ni=nlei-nldi+1 ; nj=nlej-nldj+1 
     
    13991648         &                                     latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /)))   
    14001649 
    1401       IF ( ln_mskland ) THEN 
     1650      IF ( ln_mskland.AND.(.NOT.ldxios) ) THEN 
    14021651         ! mask land points, keep values on coast line -> specific mask for U, V and W points 
    14031652         SELECT CASE ( cdgrd ) 
     
    14391688      ! Offset of coordinate representing bottom-left corner 
    14401689      SELECT CASE ( TRIM(cdgrd) ) 
    1441          CASE ('T', 'W') 
     1690         CASE ('T', 'W', 'N') 
    14421691            icnr = -1 ; jcnr = -1 
    14431692         CASE ('U') 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/IOM/iom_def.F90

    r7646 r8800  
    4646!$AGRIF_DO_NOT_TREAT 
    4747   INTEGER, PUBLIC            ::   iom_open_init = 0   !: used to initialize iom_file(:)%nfid to 0 
     48!XIOS read restart    
     49   LOGICAL, PUBLIC            ::   lxios_read          !: read single file restart using XIOS 
     50   LOGICAL, PUBLIC            ::   lxios_sini = .FALSE. ! is restart in a single file 
     51   LOGICAL, PUBLIC            ::   lxios_set  = .FALSE.  
    4852 
    4953   TYPE, PUBLIC ::   file_descriptor 
     
    6670   END TYPE file_descriptor 
    6771   TYPE(file_descriptor), DIMENSION(jpmax_files), PUBLIC ::   iom_file !: array containing the info for all opened files 
     72 
     73   INTEGER, PARAMETER, PUBLIC                   :: max_rst_fields = 95   
     74 
    6875!$AGRIF_END_DO_NOT_TREAT 
     76 
     77   TYPE, PUBLIC :: RST_FIELD   
     78    CHARACTER(len=30) :: vname ! names of variables in restart file 
     79    CHARACTER(len=30) :: grid 
     80   END TYPE RST_FIELD 
     81   TYPE(RST_FIELD), PUBLIC :: rst_fields(max_rst_fields) 
    6982 
    7083   !!===================================================================== 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/IOM/iom_nf90.F90

    r7646 r8800  
    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_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90

    r6140 r8800  
    193193            WRITE(numout,*) '~~~~~~~~' 
    194194         ENDIF 
    195  
     195         lxios_sini = .FALSE. 
    196196         clpath = TRIM(cn_ocerst_indir) 
    197197         IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 
    198198         CALL iom_open( TRIM(clpath)//cn_ocerst_in, numror, kiolib = jlibalt ) 
    199       ENDIF 
     199! are we using XIOS to read the data? Part above will have to modified once XIOS 
     200! can handle checking if variable is in the restart file (there will be no need to open 
     201! restart) 
     202         IF(.NOT.lxios_set) lxios_read = lxios_read.AND.lxios_sini 
     203         IF( lxios_read) THEN 
     204           crxios_context = 'nemo_rst' 
     205         if(.NOT.lxios_set) then 
     206             IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS' 
     207             CALL iom_init( crxios_context ) 
     208             lxios_set = .TRUE. 
     209         endif 
     210         ENDIF 
     211         IF( TRIM(Agrif_CFixed()) /= '0' .AND. lxios_read) THEN 
     212            CALL iom_init( crxios_context ) 
     213            IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS for AGRIF' 
     214            lxios_set = .TRUE. 
     215         ENDIF  
     216      ENDIF 
     217 
    200218   END SUBROUTINE rst_read_open 
    201219 
     
    211229      REAL(wp) ::   zrdt 
    212230      INTEGER  ::   jk 
     231      TYPE(xios_duration):: dtime 
     232      integer::ni,nj,nk 
    213233      !!---------------------------------------------------------------------- 
    214234 
     
    217237      ! Check dynamics and tracer time-step consistency and force Euler restart if changed 
    218238      IF( iom_varid( numror, 'rdt', ldstop = .FALSE. ) > 0 )   THEN 
    219          CALL iom_get( numror, 'rdt', zrdt ) 
     239         CALL iom_get( numror, 'rdt', zrdt, ldxios = lxios_read ) 
    220240         IF( zrdt /= rdt )   neuler = 0 
    221241      ENDIF 
    222242 
    223243      ! Diurnal DSST  
    224       IF( ln_diurnal ) CALL iom_get( numror, jpdom_autoglo, 'Dsst' , x_dsst  )  
     244      IF( ln_diurnal ) CALL iom_get( numror, jpdom_autoglo, 'Dsst' , x_dsst, ldxios = lxios_read )  
    225245      IF ( ln_diurnal_only ) THEN  
    226246         IF(lwp) WRITE( numout, * ) & 
    227247         &   "rst_read:- ln_diurnal_only set, setting rhop=rau0"  
    228248         rhop = rau0 
    229          CALL iom_get( numror, jpdom_autoglo, 'tn'     , tsn(:,:,1,jp_tem) )  
     249         CALL iom_get( numror, jpdom_autoglo, 'tn'     , tsn(:,:,1,jp_tem), ldxios = lxios_read )  
    230250         RETURN  
    231251      ENDIF   
    232252       
    233253      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    ) 
     254         CALL iom_get( numror, jpdom_autoglo, 'ub'     , ub, ldxios = lxios_read                )   ! before fields 
     255         CALL iom_get( numror, jpdom_autoglo, 'vb'     , vb, ldxios = lxios_read                ) 
     256         CALL iom_get( numror, jpdom_autoglo, 'tb'     , tsb(:,:,:,jp_tem), ldxios = lxios_read ) 
     257         CALL iom_get( numror, jpdom_autoglo, 'sb'     , tsb(:,:,:,jp_sal), ldxios = lxios_read ) 
     258         CALL iom_get( numror, jpdom_autoglo, 'sshb'   , sshb, ldxios = lxios_read              ) 
    239259      ELSE 
    240260         neuler = 0 
    241261      ENDIF 
    242262      ! 
    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    ) 
     263      CALL iom_get( numror, jpdom_autoglo, 'un'     , un, ldxios = lxios_read )   ! now    fields 
     264      CALL iom_get( numror, jpdom_autoglo, 'vn'     , vn, ldxios = lxios_read ) 
     265      CALL iom_get( numror, jpdom_autoglo, 'tn'     , tsn(:,:,:,jp_tem), ldxios = lxios_read ) 
     266      CALL iom_get( numror, jpdom_autoglo, 'sn'     , tsn(:,:,:,jp_sal), ldxios = lxios_read ) 
     267      CALL iom_get( numror, jpdom_autoglo, 'sshn'   , sshn, ldxios = lxios_read ) 
    248268      IF( iom_varid( numror, 'rhop', ldstop = .FALSE. ) > 0 ) THEN 
    249          CALL iom_get( numror, jpdom_autoglo, 'rhop'   , rhop    )   ! now    potential density 
     269         CALL iom_get( numror, jpdom_autoglo, 'rhop'   , rhop, ldxios = lxios_read )   ! now    potential density 
    250270      ELSE 
    251271         CALL eos( tsn, rhd, rhop, gdept_n(:,:,:) )    
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/SBC/sbcapr.F90

    r8524 r8800  
    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            ::  lxios_read ! read restart using XIOS? 
    6768      !! 
    6869      NAMELIST/namsbc_apr/ cn_dir, sn_apr, ln_ref_apr, rn_pref, ln_apr_obc 
     
    152153         IF( ln_rstart .AND. iom_varid( numror, 'ssh_ibb', ldstop = .FALSE. ) > 0 ) THEN  
    153154            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 
     155            CALL iom_get( numror, jpdom_autoglo, 'ssh_ibb', ssh_ibb, ldxios = lxios_read )   ! before inv. barometer ssh 
    155156            ! 
    156157         ELSE                                         !* no restart: set from nit000 values 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90

    r8329 r8800  
    2727   USE timing          ! Timing 
    2828   USE lib_fortran     ! glob_sum 
     29   USE iom_def, ONLY : lxios_read 
    2930 
    3031   IMPLICIT NONE 
     
    218219                 & iom_varid( numror, 'fwf_isf_b', ldstop = .FALSE. ) > 0 ) THEN 
    219220               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 
     221               CALL iom_get( numror, jpdom_autoglo, 'fwf_isf_b', fwfisf_b(:,:), ldxios = lxios_read )   ! before salt content isf_tsc trend 
     222               CALL iom_get( numror, jpdom_autoglo, 'isf_sc_b', risf_tsc_b(:,:,jp_sal), ldxios = lxios_read )   ! before salt content isf_tsc trend 
     223               CALL iom_get( numror, jpdom_autoglo, 'isf_hc_b', risf_tsc_b(:,:,jp_tem), ldxios = lxios_read )   ! before salt content isf_tsc trend 
    223224           ELSE 
    224225               fwfisf_b(:,:)    = fwfisf(:,:) 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r8524 r8800  
    5858 
    5959   USE diurnal_bulk, ONLY:   ln_diurnal_only   ! diurnal SST diagnostic 
     60   USE iom_def, ONLY : lxios_read 
    6061 
    6162   IMPLICIT NONE 
     
    457458            & iom_varid( numror, 'utau_b', ldstop = .FALSE. ) > 0 ) THEN 
    458459            IF(lwp) WRITE(numout,*) '          nit000-1 surface forcing fields red in the restart file' 
    459             CALL iom_get( numror, jpdom_autoglo, 'utau_b', utau_b )   ! before i-stress  (U-point) 
    460             CALL iom_get( numror, jpdom_autoglo, 'vtau_b', vtau_b )   ! before j-stress  (V-point) 
    461             CALL iom_get( numror, jpdom_autoglo, 'qns_b' , qns_b  )   ! before non solar heat flux (T-point) 
     460            CALL iom_get( numror, jpdom_autoglo, 'utau_b', utau_b, ldxios = lxios_read )   ! before i-stress  (U-point) 
     461            CALL iom_get( numror, jpdom_autoglo, 'vtau_b', vtau_b, ldxios = lxios_read )   ! before j-stress  (V-point) 
     462            CALL iom_get( numror, jpdom_autoglo, 'qns_b' , qns_b, ldxios = lxios_read  )   ! before non solar heat flux (T-point) 
    462463            ! The 3D heat content due to qsr forcing is treated in traqsr 
    463             ! CALL iom_get( numror, jpdom_autoglo, 'qsr_b' , qsr_b  ) ! before     solar heat flux (T-point) 
    464             CALL iom_get( numror, jpdom_autoglo, 'emp_b', emp_b  )    ! before     freshwater flux (T-point) 
     464            ! CALL iom_get( numror, jpdom_autoglo, 'qsr_b' , qsr_b, ldxios = lxios_read  ) ! before     solar heat flux (T-point) 
     465            CALL iom_get( numror, jpdom_autoglo, 'emp_b', emp_b, ldxios = lxios_read  )    ! before     freshwater flux (T-point) 
    465466            ! To ensure restart capability with 3.3x/3.4 restart files    !! to be removed in v3.6 
    466467            IF( iom_varid( numror, 'sfx_b', ldstop = .FALSE. ) > 0 ) THEN 
    467                CALL iom_get( numror, jpdom_autoglo, 'sfx_b', sfx_b )  ! before salt flux (T-point) 
     468               CALL iom_get( numror, jpdom_autoglo, 'sfx_b', sfx_b, ldxios = lxios_read )  ! before salt flux (T-point) 
    468469            ELSE 
    469470               sfx_b (:,:) = sfx(:,:) 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90

    r7968 r8800  
    2828   USE lib_mpp        ! MPP library 
    2929   USE wrk_nemo       ! Memory allocation 
     30   USE iom_def, ONLY : lxios_read 
    3031 
    3132   IMPLICIT NONE 
     
    147148         IF( ln_rstart .AND.    &                               !* Restart: read in restart file 
    148149            & iom_varid( numror, 'rnf_b', ldstop = .FALSE. ) > 0 ) THEN 
    149             IF(lwp) WRITE(numout,*) '          nit000-1 runoff forcing fields red in the restart file' 
    150             CALL iom_get( numror, jpdom_autoglo, 'rnf_b', rnf_b )     ! before runoff 
    151             CALL iom_get( numror, jpdom_autoglo, 'rnf_hc_b', rnf_tsc_b(:,:,jp_tem) )   ! before heat content of runoff 
    152             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', lxios_read 
     151            CALL iom_get( numror, jpdom_autoglo, 'rnf_b', rnf_b, ldxios = lxios_read )     ! before runoff 
     152            CALL iom_get( numror, jpdom_autoglo, 'rnf_hc_b', rnf_tsc_b(:,:,jp_tem), ldxios = lxios_read )   ! before heat content of runoff 
     153            CALL iom_get( numror, jpdom_autoglo, 'rnf_sc_b', rnf_tsc_b(:,:,jp_sal), ldxios = lxios_read )   ! before salinity content of runoff 
    153154         ELSE                                                   !* no restart: set from nit000 values 
    154155            IF(lwp) WRITE(numout,*) '          nit000-1 runoff forcing fields set to nit000' 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90

    r7753 r8800  
    2222   USE prtctl         ! Print control 
    2323   USE iom            ! IOM library 
     24   USE iom_def, ONLY : lxios_read 
    2425 
    2526   IMPLICIT NONE 
     
    206207         IF( ln_rstart .AND. iom_varid( numror, 'nn_fsbc', ldstop = .FALSE. ) > 0 ) THEN 
    207208            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) 
     209            CALL iom_get( numror               , 'nn_fsbc', zf_sbc, ldxios = lxios_read )    ! sbc frequency of previous run 
     210            CALL iom_get( numror, jpdom_autoglo, 'ssu_m'  , ssu_m, ldxios = lxios_read  )    ! sea surface mean velocity    (U-point) 
     211            CALL iom_get( numror, jpdom_autoglo, 'ssv_m'  , ssv_m, ldxios = lxios_read  )    !   "         "    velocity    (V-point) 
     212            CALL iom_get( numror, jpdom_autoglo, 'sst_m'  , sst_m, ldxios = lxios_read  )    !   "         "    temperature (T-point) 
     213            CALL iom_get( numror, jpdom_autoglo, 'sss_m'  , sss_m, ldxios = lxios_read  )    !   "         "    salinity    (T-point) 
     214            CALL iom_get( numror, jpdom_autoglo, 'ssh_m'  , ssh_m, ldxios = lxios_read  )    !   "         "    height      (T-point) 
     215            CALL iom_get( numror, jpdom_autoglo, 'e3t_m'  , e3t_m, ldxios = lxios_read  )    ! 1st level thickness          (T-point) 
     216            CALL iom_get( numror, jpdom_autoglo, 'e3t_m', e3t_m, ldxios = lxios_read ) 
    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 = lxios_read  ) 
    218220            ELSE 
    219221               frq_m(:,:) = 1._wp   ! default definition 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90

    r7753 r8800  
    3636   USE wrk_nemo       ! Memory Allocation 
    3737   USE timing         ! Timing 
    38  
     38   USE iom_def, ONLY : lxios_read 
    3939   IMPLICIT NONE 
    4040   PRIVATE 
     
    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 = lxios_read )   ! 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 
     
    430430      ! 1st ocean level attenuation coefficient (used in sbcssm) 
    431431      IF( iom_varid( numror, 'fraqsr_1lev', ldstop = .FALSE. ) > 0 ) THEN 
    432          CALL iom_get( numror, jpdom_autoglo, 'fraqsr_1lev'  , fraqsr_1lev  ) 
     432         CALL iom_get( numror, jpdom_autoglo, 'fraqsr_1lev'  , fraqsr_1lev, ldxios = lxios_read  ) 
    433433      ELSE 
    434434         fraqsr_1lev(:,:) = 1._wp   ! default : no penetration 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90

    r7788 r8800  
    3434   USE wrk_nemo       ! Memory Allocation 
    3535   USE timing         ! Timing 
     36   USE iom_def, ONLY : lxios_read 
    3637 
    3738   IMPLICIT NONE 
     
    108109            zfact = 0.5_wp 
    109110            sbc_tsc(:,:,:) = 0._wp 
    110             CALL iom_get( numror, jpdom_autoglo, 'sbc_hc_b', sbc_tsc_b(:,:,jp_tem) )   ! before heat content sbc trend 
    111             CALL iom_get( numror, jpdom_autoglo, 'sbc_sc_b', sbc_tsc_b(:,:,jp_sal) )   ! before salt content sbc trend 
     111            CALL iom_get( numror, jpdom_autoglo, 'sbc_hc_b', sbc_tsc_b(:,:,jp_tem), ldxios = lxios_read )   ! before heat content sbc trend 
     112            CALL iom_get( numror, jpdom_autoglo, 'sbc_sc_b', sbc_tsc_b(:,:,jp_sal), ldxios = lxios_read )   ! before salt content sbc trend 
    112113         ELSE                                   ! No restart or restart not found: Euler forward time stepping 
    113114            zfact = 1._wp 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/TRD/trdmxl_rst.F90

    r6140 r8800  
    150150      IF( ln_trdmxl_instant ) THEN  
    151151         !-- Temperature 
    152          CALL iom_get( inum, jpdom_autoglo, 'tmlbb'           , tmlbb          ) 
    153          CALL iom_get( inum, jpdom_autoglo, 'tmlbn'           , tmlbn          ) 
    154          CALL iom_get( inum, jpdom_autoglo, 'tmlatfb'         , tmlatfb        ) 
     152         CALL iom_get( inum, jpdom_autoglo, 'tmlbb'           , tmlbb ) 
     153         CALL iom_get( inum, jpdom_autoglo, 'tmlbn'           , tmlbn ) 
     154         CALL iom_get( inum, jpdom_autoglo, 'tmlatfb'         , tmlatfb ) 
    155155         ! 
    156156         !-- Salinity 
    157          CALL iom_get( inum, jpdom_autoglo, 'smlbb'           , smlbb          ) 
    158          CALL iom_get( inum, jpdom_autoglo, 'smlbn'           , smlbn          ) 
    159          CALL iom_get( inum, jpdom_autoglo, 'smlatfb'         , smlatfb        ) 
     157         CALL iom_get( inum, jpdom_autoglo, 'smlbb'           , smlbb ) 
     158         CALL iom_get( inum, jpdom_autoglo, 'smlbn'           , smlbn ) 
     159         CALL iom_get( inum, jpdom_autoglo, 'smlatfb'         , smlatfb ) 
    160160      ELSE 
    161          CALL iom_get( inum, jpdom_autoglo, 'hmxlbn'          , hmxlbn         ) ! needed for hmxl_sum 
     161         CALL iom_get( inum, jpdom_autoglo, 'hmxlbn'          , hmxlbn ) ! needed for hmxl_sum 
    162162         ! 
    163163         !-- Temperature 
    164          CALL iom_get( inum, jpdom_autoglo, 'tmlbn'           , tmlbn          ) ! needed for tml_sum 
    165          CALL iom_get( inum, jpdom_autoglo, 'tml_sumb'        , tml_sumb       ) 
     164         CALL iom_get( inum, jpdom_autoglo, 'tmlbn'           , tmlbn ) ! needed for tml_sum 
     165         CALL iom_get( inum, jpdom_autoglo, 'tml_sumb'        , tml_sumb ) 
    166166         DO jk = 1, jpltrd 
    167167            IF( jk < 10 ) THEN   ;   WRITE(charout,FMT="('tmltrd_csum_ub_', I1)")   jk 
     
    173173         ! 
    174174         !-- Salinity 
    175          CALL iom_get( inum, jpdom_autoglo, 'smlbn'           , smlbn          ) ! needed for sml_sum 
    176          CALL iom_get( inum, jpdom_autoglo, 'sml_sumb'        , sml_sumb       ) 
     175         CALL iom_get( inum, jpdom_autoglo, 'smlbn'           , smlbn ) ! needed for sml_sum 
     176         CALL iom_get( inum, jpdom_autoglo, 'sml_sumb'        , sml_sumb ) 
    177177         DO jk = 1, jpltrd 
    178178            IF( jk < 10 ) THEN   ;   WRITE(charout,FMT="('smltrd_csum_ub_', I1)")   jk 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90

    r7646 r8800  
    3434   USE timing         ! Timing 
    3535   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
     36   USE iom_def, ONLY : lxios_read 
    3637 
    3738   IMPLICIT NONE 
     
    11751176            ! 
    11761177            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   ) 
     1178               CALL iom_get( numror, jpdom_autoglo, 'en'    , en, ldxios = lxios_read     ) 
     1179               CALL iom_get( numror, jpdom_autoglo, 'avt'   , avt, ldxios = lxios_read    ) 
     1180               CALL iom_get( numror, jpdom_autoglo, 'avm'   , avm, ldxios = lxios_read    ) 
     1181               CALL iom_get( numror, jpdom_autoglo, 'avmu'  , avmu, ldxios = lxios_read   ) 
     1182               CALL iom_get( numror, jpdom_autoglo, 'avmv'  , avmv, ldxios = lxios_read   ) 
     1183               CALL iom_get( numror, jpdom_autoglo, 'mxln'  , mxln, ldxios = lxios_read   ) 
    11831184            ELSE                         
    11841185               IF(lwp) WRITE(numout,*) ' ===>>>> : previous run without gls scheme, en and mxln computed by iterative loop' 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfini.F90

    r7646 r8800  
    2828   USE iom             ! IOM library 
    2929   USE lib_mpp         ! distribued memory computing 
     30   USE iom_def, ONLY : lxios_read 
    3031 
    3132   IMPLICIT NONE 
     
    159160         ! file in traadv_cen2 end read here.  
    160161         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 ) 
     162            CALL iom_get( numror, jpdom_unknown, 'avmb', avmb, ldxios = lxios_read ) 
     163            CALL iom_get( numror, jpdom_unknown, 'avtb', avtb, ldxios = lxios_read ) 
    163164         ENDIF 
    164165      ENDIF 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90

    r7813 r8800  
    5757   USE agrif_opa_update 
    5858#endif 
     59   USE iom_def, ONLY : lxios_read 
    5960 
    6061   IMPLICIT NONE 
     
    845846           ! 
    846847           IF( id1 > 0 ) THEN                       ! 'en' exists 
    847               CALL iom_get( numror, jpdom_autoglo, 'en', en ) 
     848              CALL iom_get( numror, jpdom_autoglo, 'en', en, ldxios = lxios_read ) 
    848849              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 ) 
     850                 CALL iom_get( numror, jpdom_autoglo, 'avt'  , avt, ldxios = lxios_read   ) 
     851                 CALL iom_get( numror, jpdom_autoglo, 'avm'  , avm, ldxios = lxios_read   ) 
     852                 CALL iom_get( numror, jpdom_autoglo, 'avmu' , avmu, ldxios = lxios_read  ) 
     853                 CALL iom_get( numror, jpdom_autoglo, 'avmv' , avmv, ldxios = lxios_read  ) 
     854                 CALL iom_get( numror, jpdom_autoglo, 'dissl', dissl, ldxios = lxios_read ) 
    854855              ELSE                                                 ! one at least array is missing 
    855856                 CALL tke_avn                                          ! compute avt, avm, avmu, avmv and dissl (approximation) 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/step.F90

    r7753 r8800  
    345345      IF( kstp == nitend .OR. indic < 0 ) THEN  
    346346                      CALL iom_context_finalize(      cxios_context          ) ! needed for XIOS+AGRIF 
     347                      IF(lxios_read) CALL iom_context_finalize(      crxios_context          ) 
    347348         IF( ln_crs ) CALL iom_context_finalize( trim(cxios_context)//"_crs" ) !  
    348349      ENDIF 
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/SAS_SRC/daymod.F90

    r8583 r8800  
    3333   USE timing         ! Timing 
    3434   USE restart        ! restart 
    35  
     35   USE iom_def, ONLY : lxios_read 
    3636   IMPLICIT NONE 
    3737   PRIVATE 
     
    318318         IF( iom_varid( numror, 'kt', ldstop = .FALSE. ) > 0 ) THEN 
    319319            ! Get Calendar informations 
    320             CALL iom_get( numror, 'kt', zkt )   ! last time-step of previous run 
     320            CALL iom_get( numror, 'kt', zk, ldxios = lxios_read )   ! last time-step of previous run 
    321321            IF(lwp) THEN 
    322322               WRITE(numout,*) ' *** Info read in restart : ' 
     
    337337            IF ( nrstdt == 2 ) THEN 
    338338               ! read the parameters corresponding to nit000 - 1 (last time step of previous run) 
    339                CALL iom_get( numror, 'ndastp', zndastp ) 
     339               CALL iom_get( numror, 'ndastp', zndastp, ldxios = lxios_read ) 
    340340               ndastp = NINT( zndastp ) 
    341                CALL iom_get( numror, 'adatrj', adatrj  ) 
    342           CALL iom_get( numror, 'ntime', ktime ) 
     341               CALL iom_get( numror, 'adatrj', adatrj, ldxios = lxios_read ) 
     342          CALL iom_get( numror, 'ntime', ktime, ldxios = lxios_read ) 
    343343          nn_time0=INT(ktime) 
    344344               ! calculate start time in hours and minutes 
Note: See TracChangeset for help on using the changeset viewer.