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

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 8801 for branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90 – NEMO

Ignore:
Timestamp:
2017-11-23T16:52:17+01:00 (6 years ago)
Author:
andmirek
Message:

#1953 and #1962 merge dev_r8600_xios_read_write r8793

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90

    r8800 r8801  
    2828   USE iom             ! I/O module 
    2929   USE diurnal_bulk 
    30     
     30   USE iom_def, ONLY : lwxios 
     31 
    3132   IMPLICIT NONE 
    3233   PRIVATE 
     
    6162      CHARACTER(LEN=50)   ::   clname   ! ocean output restart file name 
    6263      CHARACTER(lc)       ::   clpath   ! full path to ocean output restart file 
     64      CHARACTER(LEN=52)   ::   clpname   ! ocean output restart file name including prefix for AGRIF 
    6365      !!---------------------------------------------------------------------- 
    6466      ! 
     
    9496            IF(lwp) THEN 
    9597               WRITE(numout,*) 
    96                SELECT CASE ( jprstlib ) 
    97                CASE DEFAULT         ;   WRITE(numout,*)                            & 
    98                    '             open ocean restart NetCDF file: ',TRIM(clpath)//clname 
    99                END SELECT 
    100                IF ( snc4set%luse )      WRITE(numout,*) '             opened for NetCDF4 chunking and compression' 
    101                IF( kt == nitrst - 1 ) THEN   ;   WRITE(numout,*) '             kt = nitrst - 1 = ', kt 
    102                ELSE                          ;   WRITE(numout,*) '             kt = '             , kt 
     98               IF(.NOT.lwxios) THEN 
     99                  SELECT CASE ( jprstlib ) 
     100                  CASE DEFAULT         ;   WRITE(numout,*)                            & 
     101                      '             open ocean restart NetCDF file: ',TRIM(clpath)//TRIM(clname) 
     102                  END SELECT 
     103                  IF ( snc4set%luse )      WRITE(numout,*) '             opened for NetCDF4 chunking and compression' 
     104                  IF( kt == nitrst - 1 ) THEN   ;   WRITE(numout,*) '             kt = nitrst - 1 = ', kt 
     105                  ELSE                          ;   WRITE(numout,*) '             kt = '             , kt 
     106                  ENDIF 
    103107               ENDIF 
    104108            ENDIF 
    105109            ! 
    106             CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 
     110            IF(.NOT.lwxios) THEN 
     111               CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 
     112            ELSE 
     113               cwxios_context = "rstw_"//TRIM(ADJUSTL(clkt)) 
     114               IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     115                  clpname = clname 
     116               ELSE 
     117                  clpname = TRIM(Agrif_CFixed())//"_"//clname    
     118               ENDIF 
     119               CALL iom_init( cwxios_context, TRIM(clpath)//TRIM(clpname)) 
     120               CALL xios_update_calendar(nitrst) 
     121               CALL iom_swap(      cxios_context          ) 
     122            ENDIF 
    107123            lrst_oce = .TRUE. 
    108124         ENDIF 
     
    123139      INTEGER, INTENT(in) ::   kt   ! ocean time-step 
    124140      !!---------------------------------------------------------------------- 
    125  
    126                      CALL iom_rstput( kt, nitrst, numrow, 'rdt'    , rdt       )   ! dynamics and tracer time step 
     141                     IF(lwxios) CALL iom_swap(      cwxios_context          ) 
     142                     CALL iom_rstput( kt, nitrst, numrow, 'rdt'    , rdt       , ldxios = lwxios)   ! dynamics time step 
    127143 
    128144      IF ( .NOT. ln_diurnal_only ) THEN 
    129                      CALL iom_rstput( kt, nitrst, numrow, 'ub'     , ub        )     ! before fields 
    130                      CALL iom_rstput( kt, nitrst, numrow, 'vb'     , vb        ) 
    131                      CALL iom_rstput( kt, nitrst, numrow, 'tb'     , tsb(:,:,:,jp_tem) ) 
    132                      CALL iom_rstput( kt, nitrst, numrow, 'sb'     , tsb(:,:,:,jp_sal) ) 
    133                      CALL iom_rstput( kt, nitrst, numrow, 'sshb'   , sshb      ) 
     145                     CALL iom_rstput( kt, nitrst, numrow, 'ub'     , ub, ldxios = lwxios        )     ! before fields 
     146                     CALL iom_rstput( kt, nitrst, numrow, 'vb'     , vb, ldxios = lwxios        ) 
     147                     CALL iom_rstput( kt, nitrst, numrow, 'tb'     , tsb(:,:,:,jp_tem), ldxios = lwxios ) 
     148                     CALL iom_rstput( kt, nitrst, numrow, 'sb'     , tsb(:,:,:,jp_sal), ldxios = lwxios ) 
     149                     CALL iom_rstput( kt, nitrst, numrow, 'sshb'   , sshb, ldxios = lwxios      ) 
    134150                     ! 
    135                      CALL iom_rstput( kt, nitrst, numrow, 'un'     , un        )     ! now fields 
    136                      CALL iom_rstput( kt, nitrst, numrow, 'vn'     , vn        ) 
    137                      CALL iom_rstput( kt, nitrst, numrow, 'tn'     , tsn(:,:,:,jp_tem) ) 
    138                      CALL iom_rstput( kt, nitrst, numrow, 'sn'     , tsn(:,:,:,jp_sal) ) 
    139                      CALL iom_rstput( kt, nitrst, numrow, 'sshn'   , sshn      ) 
    140                      CALL iom_rstput( kt, nitrst, numrow, 'rhop'   , rhop      ) 
    141  
     151                     CALL iom_rstput( kt, nitrst, numrow, 'un'     , un, ldxios = lwxios        )     ! now fields 
     152                     CALL iom_rstput( kt, nitrst, numrow, 'vn'     , vn, ldxios = lwxios        ) 
     153                     CALL iom_rstput( kt, nitrst, numrow, 'tn'     , tsn(:,:,:,jp_tem), ldxios = lwxios ) 
     154                     CALL iom_rstput( kt, nitrst, numrow, 'sn'     , tsn(:,:,:,jp_sal), ldxios = lwxios ) 
     155                     CALL iom_rstput( kt, nitrst, numrow, 'sshn'   , sshn, ldxios = lwxios      ) 
     156                     CALL iom_rstput( kt, nitrst, numrow, 'rhop'   , rhop, ldxios = lwxios      ) 
    142157                  ! extra variable needed for the ice sheet coupling 
    143158                  IF ( ln_iscpl ) THEN  
    144                      CALL iom_rstput( kt, nitrst, numrow, 'tmask'  , tmask    ) ! need to extrapolate T/S 
    145                      CALL iom_rstput( kt, nitrst, numrow, 'umask'  , umask    ) ! need to correct barotropic velocity 
    146                      CALL iom_rstput( kt, nitrst, numrow, 'vmask'  , vmask    ) ! need to correct barotropic velocity 
    147                      CALL iom_rstput( kt, nitrst, numrow, 'smask'  , ssmask    ) ! need to correct barotropic velocity 
    148                      CALL iom_rstput( kt, nitrst, numrow, 'e3t_n', e3t_n(:,:,:) )   ! need to compute temperature correction 
    149                      CALL iom_rstput( kt, nitrst, numrow, 'e3u_n', e3u_n(:,:,:) )   ! need to compute bt conservation 
    150                      CALL iom_rstput( kt, nitrst, numrow, 'e3v_n', e3v_n(:,:,:) )   ! need to compute bt conservation 
    151                      CALL iom_rstput( kt, nitrst, numrow, 'gdepw_n', gdepw_n(:,:,:) ) ! need to compute extrapolation if vvl 
     159                     CALL iom_rstput( kt, nitrst, numrow, 'tmask'  , tmask, ldxios = lwxios ) ! need to extrapolate T/S 
     160                     CALL iom_rstput( kt, nitrst, numrow, 'umask'  , umask, ldxios = lwxios ) ! need to correct barotropic velocity 
     161                     CALL iom_rstput( kt, nitrst, numrow, 'vmask'  , vmask, ldxios = lwxios ) ! need to correct barotropic velocity 
     162                     CALL iom_rstput( kt, nitrst, numrow, 'smask'  , ssmask, ldxios = lwxios) ! need to correct barotropic velocity 
     163                     CALL iom_rstput( kt, nitrst, numrow, 'e3t_n', e3t_n(:,:,:), ldxios = lwxios )   ! need to compute temperature correction 
     164                     CALL iom_rstput( kt, nitrst, numrow, 'e3u_n', e3u_n(:,:,:), ldxios = lwxios )   ! need to compute bt conservation 
     165                     CALL iom_rstput( kt, nitrst, numrow, 'e3v_n', e3v_n(:,:,:), ldxios = lwxios )   ! need to compute bt conservation 
     166                     CALL iom_rstput( kt, nitrst, numrow, 'gdepw_n', gdepw_n(:,:,:), ldxios = lwxios ) ! need to compute extrapolation if vvl 
    152167                  END IF 
    153168      ENDIF 
    154169       
    155       IF (ln_diurnal) CALL iom_rstput( kt, nitrst, numrow, 'Dsst', x_dsst    
    156  
     170      IF (ln_diurnal) CALL iom_rstput( kt, nitrst, numrow, 'Dsst', x_dsst, ldxios = lwxios 
     171      IF(lwxios) CALL iom_swap(      cxios_context          ) 
    157172      IF( kt == nitrst ) THEN 
    158          CALL iom_close( numrow )     ! close the restart file (only at last time step) 
     173         IF(.NOT.lwxios) THEN 
     174            CALL iom_close( numrow )     ! close the restart file (only at last time step) 
     175         ELSE 
     176            CALL iom_context_finalize(      cwxios_context          ) 
     177         ENDIF 
    159178!!gm         IF( .NOT. lk_trdmld )   lrst_oce = .FALSE. 
    160179!!gm  not sure what to do here   ===>>>  ask to Sebastian 
     
    164183               nitrst = nstocklist( nrst_lst ) 
    165184            ENDIF 
    166             lrst_oce = .FALSE. 
    167185      ENDIF 
    168186      ! 
     
    200218! can handle checking if variable is in the restart file (there will be no need to open 
    201219! restart) 
    202          IF(.NOT.lxios_set) lxios_read = lxios_read.AND.lxios_sini 
    203          IF( lxios_read) THEN 
     220         IF(.NOT.lxios_set) lrxios = lrxios.AND.lxios_sini 
     221         IF( lrxios) THEN 
    204222           crxios_context = 'nemo_rst' 
    205223         if(.NOT.lxios_set) then 
     
    209227         endif 
    210228         ENDIF 
    211          IF( TRIM(Agrif_CFixed()) /= '0' .AND. lxios_read) THEN 
     229         IF( TRIM(Agrif_CFixed()) /= '0' .AND. lrxios) THEN 
    212230            CALL iom_init( crxios_context ) 
    213231            IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS for AGRIF' 
     
    231249      TYPE(xios_duration):: dtime 
    232250      integer::ni,nj,nk 
     251      REAL(wp), DIMENSION(jpi, jpj, jpk) :: w3d  
    233252      !!---------------------------------------------------------------------- 
    234253 
     
    237256      ! Check dynamics and tracer time-step consistency and force Euler restart if changed 
    238257      IF( iom_varid( numror, 'rdt', ldstop = .FALSE. ) > 0 )   THEN 
    239          CALL iom_get( numror, 'rdt', zrdt, ldxios = lxios_read ) 
     258         CALL iom_get( numror, 'rdt', zrdt, ldxios = lrxios ) 
    240259         IF( zrdt /= rdt )   neuler = 0 
    241260      ENDIF 
    242261 
    243262      ! Diurnal DSST  
    244       IF( ln_diurnal ) CALL iom_get( numror, jpdom_autoglo, 'Dsst' , x_dsst, ldxios = lxios_read )  
     263      IF( ln_diurnal ) CALL iom_get( numror, jpdom_autoglo, 'Dsst' , x_dsst, ldxios = lrxios )  
    245264      IF ( ln_diurnal_only ) THEN  
    246265         IF(lwp) WRITE( numout, * ) & 
    247266         &   "rst_read:- ln_diurnal_only set, setting rhop=rau0"  
    248267         rhop = rau0 
    249          CALL iom_get( numror, jpdom_autoglo, 'tn'     , tsn(:,:,1,jp_tem), ldxios = lxios_read )  
     268         CALL iom_get( numror, jpdom_autoglo, 'tn'     , w3d, ldxios = lrxios )  
     269         tsn(:,:,1,jp_tem) = w3d(:,:,1) 
    250270         RETURN  
    251271      ENDIF   
    252272       
    253273      IF( iom_varid( numror, 'ub', ldstop = .FALSE. ) > 0 ) THEN 
    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              ) 
     274         CALL iom_get( numror, jpdom_autoglo, 'ub'     , ub, ldxios = lrxios                )   ! before fields 
     275         CALL iom_get( numror, jpdom_autoglo, 'vb'     , vb, ldxios = lrxios                ) 
     276         CALL iom_get( numror, jpdom_autoglo, 'tb'     , tsb(:,:,:,jp_tem), ldxios = lrxios ) 
     277         CALL iom_get( numror, jpdom_autoglo, 'sb'     , tsb(:,:,:,jp_sal), ldxios = lrxios ) 
     278         CALL iom_get( numror, jpdom_autoglo, 'sshb'   , sshb, ldxios = lrxios              ) 
    259279      ELSE 
    260280         neuler = 0 
    261281      ENDIF 
    262282      ! 
    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 ) 
     283      CALL iom_get( numror, jpdom_autoglo, 'un'     , un, ldxios = lrxios )   ! now    fields 
     284      CALL iom_get( numror, jpdom_autoglo, 'vn'     , vn, ldxios = lrxios ) 
     285      CALL iom_get( numror, jpdom_autoglo, 'tn'     , tsn(:,:,:,jp_tem), ldxios = lrxios ) 
     286      CALL iom_get( numror, jpdom_autoglo, 'sn'     , tsn(:,:,:,jp_sal), ldxios = lrxios ) 
     287      CALL iom_get( numror, jpdom_autoglo, 'sshn'   , sshn, ldxios = lrxios ) 
    268288      IF( iom_varid( numror, 'rhop', ldstop = .FALSE. ) > 0 ) THEN 
    269          CALL iom_get( numror, jpdom_autoglo, 'rhop'   , rhop, ldxios = lxios_read )   ! now    potential density 
     289         CALL iom_get( numror, jpdom_autoglo, 'rhop'   , rhop, ldxios = lrxios )   ! now    potential density 
    270290      ELSE 
    271291         CALL eos( tsn, rhd, rhop, gdept_n(:,:,:) )    
Note: See TracChangeset for help on using the changeset viewer.