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 8630 for branches/2017/dev_r8600_xios_write/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90 – NEMO

Ignore:
Timestamp:
2017-10-17T14:31:49+02:00 (7 years ago)
Author:
andmirek
Message:

#1962 merge with branches/UKMO/dev_r7573_xios_write (doesn't woork)

File:
1 edited

Legend:

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

    r6140 r8630  
    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 
    63       !!---------------------------------------------------------------------- 
    64       ! 
     64      CHARACTER(LEN=52)   ::   dlname   ! ocean output restart file name including prefix for AGRIF 
     65      !!---------------------------------------------------------------------- 
     66      ! 
     67 
    6568      IF( kt == nit000 ) THEN   ! default definitions 
    6669         lrst_oce = .FALSE.    
     
    8285      ! we open and define the ocean restart file one time step before writing the data (-> at nitrst - 1) 
    8386      ! except if we write ocean restart files every time step or if an ocean restart file was writen at nitend - 1 
     87      ! NO, because the data is written 2 times on nitrst - 1 and nitrst 
    8488      IF( kt == nitrst - 1 .OR. nstock == 1 .OR. ( kt == nitend .AND. .NOT. lrst_oce ) ) THEN 
    8589         IF( nitrst <= nitend .AND. nitrst > 0 ) THEN  
     
    9498            IF(lwp) THEN 
    9599               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 
     100               IF(.NOT.lwxios) THEN 
     101                  SELECT CASE ( jprstlib ) 
     102                  CASE ( jprstdimg )   ;   WRITE(numout,*)                            & 
     103                      '             open ocean restart binary file: ',TRIM(clpath)//TRIM(clname) 
     104                  CASE DEFAULT         ;   WRITE(numout,*)                            & 
     105                      '             open ocean restart NetCDF file: ',TRIM(clpath)//TRIM(clname) 
     106                  END SELECT 
     107                  IF ( snc4set%luse )      WRITE(numout,*) '             opened for NetCDF4 chunking and compression' 
     108                  IF( kt == nitrst - 1 ) THEN   ;   WRITE(numout,*) '             kt = nitrst - 1 = ', kt 
     109                  ELSE                          ;   WRITE(numout,*) '             kt = '             , kt 
     110                  ENDIF 
    103111               ENDIF 
    104112            ENDIF 
    105113            ! 
    106             CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 
     114            IF(.NOT.lwxios) THEN 
     115               CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 
     116            ELSE 
     117               wxios_context = "rstw_"//TRIM(ADJUSTL(clkt)) 
     118               IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     119                  dlname = clname 
     120               ELSE 
     121                  dlname = TRIM(Agrif_CFixed())//"_"//clname    
     122               ENDIF 
     123               CALL iom_rstw_init( wxios_context, TRIM(clpath)//TRIM(dlname)) 
     124               CALL xios_update_calendar(nitrst) 
     125               CALL iom_swap(      cxios_context          ) 
     126            ENDIF 
    107127            lrst_oce = .TRUE. 
    108128         ENDIF 
    109129      ENDIF 
     130 
    110131      ! 
    111132   END SUBROUTINE rst_opn 
     
    123144      INTEGER, INTENT(in) ::   kt   ! ocean time-step 
    124145      !!---------------------------------------------------------------------- 
    125  
     146                     IF(lwxios) CALL iom_swap(      wxios_context          ) 
     147                     CALL iom_rstput( kt, nitrst, numrow, 'rdt'    , rdt       , lxios = lwxios)   ! dynamics time step 
     148                     CALL iom_rstput( kt, nitrst, numrow, 'rdttra1', rdttra(1) , lxios = lwxios)   ! surface tracer time step 
    126149                     CALL iom_rstput( kt, nitrst, numrow, 'rdt'    , rdt       )   ! dynamics and tracer time step 
    127150 
    128151      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      ) 
     152                     CALL iom_rstput( kt, nitrst, numrow, 'ub'     , ub, lxios = lwxios)        )     ! before fields 
     153                     CALL iom_rstput( kt, nitrst, numrow, 'vb'     , vb, lxios = lwxios)        ) 
     154                     CALL iom_rstput( kt, nitrst, numrow, 'tb'     , tsb(:,:,:,jp_tem), lxios = lwxios) ) 
     155                     CALL iom_rstput( kt, nitrst, numrow, 'sb'     , tsb(:,:,:,jp_sal), lxios = lwxios) ) 
     156                     CALL iom_rstput( kt, nitrst, numrow, 'sshb'   , sshb, lxios = lwxios)      ) 
    134157                     ! 
    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  
     158                     CALL iom_rstput( kt, nitrst, numrow, 'un'     , un, lxios = lwxios        )     ! now fields 
     159                     CALL iom_rstput( kt, nitrst, numrow, 'vn'     , vn, lxios = lwxios        ) 
     160                     CALL iom_rstput( kt, nitrst, numrow, 'tn'     , tsn(:,:,:,jp_tem), lxios = lwxios ) 
     161                     CALL iom_rstput( kt, nitrst, numrow, 'sn'     , tsn(:,:,:,jp_sal), lxios = lwxios ) 
     162                     CALL iom_rstput( kt, nitrst, numrow, 'sshn'   , sshn, lxios = lwxios      ) 
     163                     CALL iom_rstput( kt, nitrst, numrow, 'rhop'   , rhop, lxios = lwxios      ) 
    142164                  ! extra variable needed for the ice sheet coupling 
    143165                  IF ( ln_iscpl ) THEN  
     
    156178 
    157179      IF( kt == nitrst ) THEN 
    158          CALL iom_close( numrow )     ! close the restart file (only at last time step) 
     180         IF(.NOT.lwxios) THEN 
     181            CALL iom_close( numrow )     ! close the restart file (only at last time step) 
     182         ELSE 
     183            CALL iom_context_finalize(      wxios_context          ) 
     184         ENDIF 
    159185!!gm         IF( .NOT. lk_trdmld )   lrst_oce = .FALSE. 
    160186!!gm  not sure what to do here   ===>>>  ask to Sebastian 
     
    164190               nitrst = nstocklist( nrst_lst ) 
    165191            ENDIF 
    166             lrst_oce = .FALSE. 
    167192      ENDIF 
    168193      ! 
     
    267292      ! 
    268293   END SUBROUTINE rst_read 
    269  
    270294   !!===================================================================== 
    271295END MODULE restart 
Note: See TracChangeset for help on using the changeset viewer.