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 12961 for NEMO/branches/2020/dev_12905_xios_restart/src/TOP/PISCES/SED/sedrst.F90 – NEMO

Ignore:
Timestamp:
2020-05-22T13:51:12+02:00 (4 years ago)
Author:
andmirek
Message:

Ticket #2462: read/write restart with XIOS in TOP (with debug print statements)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_12905_xios_restart/src/TOP/PISCES/SED/sedrst.F90

    r12649 r12961  
    4242      CHARACTER(LEN=50)   ::   clname   ! trc output restart file name 
    4343      CHARACTER(LEN=256)  ::   clpath   ! full path to ocean output restart file 
     44      CHARACTER(LEN=52)   ::   clpname   ! trc output restart file name including AGRIF 
    4445      !!---------------------------------------------------------------------- 
    4546      ! 
     
    8081         IF(lwp) WRITE(numsed,*) & 
    8182             '             open sed restart.output NetCDF file: ',TRIM(clpath)//clname 
    82          CALL iom_open( TRIM(clpath)//TRIM(clname), numrsw, ldwrt = .TRUE., kdlev = jpksed, cdcomp = 'SED' ) 
     83         IF(.NOT.lwxios) THEN 
     84            CALL iom_open( TRIM(clpath)//TRIM(clname), numrsw, ldwrt = .TRUE., kdlev = jpksed, cdcomp = 'SED' ) 
     85         ELSE 
     86#if defined key_iomput 
     87            cwsxios_context = "rstws_"//TRIM(ADJUSTL(clkt)) 
     88            IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     89               clpname = clname 
     90            ELSE 
     91               clpname = TRIM(Agrif_CFixed())//"_"//clname 
     92            ENDIF 
     93            CALL iom_init( cwsxios_context, TRIM(clpath)//TRIM(clpname), ld_tmppatch = .false.,& 
     94                                                                         ld_closedef = .FALSE. ) 
     95            CALL iom_swap(      cxios_context          ) 
     96#else 
     97               clinfo = 'Can not use XIOS in trc_rst_opn' 
     98               CALL ctl_stop(TRIM(clinfo)) 
     99#endif 
     100            ENDIF 
     101 
    83102         lrst_sed = .TRUE. 
    84103      ENDIF 
     
    120139      zdta2 = 0. 
    121140 
     141      IF(lrxios) CALL iom_swap(crsxios_context) 
    122142      DO jn = 1, jptrased 
    123143         cltra = TRIM(sedtrcd(jn)) 
    124144         IF( iom_varid( numrsr, TRIM(cltra) , ldstop = .FALSE. ) > 0 ) THEN 
    125             CALL iom_get( numrsr, jpdom_autoglo, TRIM(cltra), zdta(:,:,:,jn) ) 
     145            CALL iom_get( numrsr, jpdom_autoglo, TRIM(cltra), zdta(:,:,:,jn), ldxios = lrxios ) 
    126146         ELSE 
    127147            zdta(:,:,:,jn) = 0.0 
     
    142162         cltra = TRIM(seddia3d(jn)) 
    143163         IF( iom_varid( numrsr, TRIM(cltra) , ldstop = .FALSE. ) > 0 ) THEN 
    144             CALL iom_get( numrsr, jpdom_autoglo, TRIM(cltra), zdta1(:,:,:,jn) ) 
     164            CALL iom_get( numrsr, jpdom_autoglo, TRIM(cltra), zdta1(:,:,:,jn), ldxios = lrxios ) 
    145165         ELSE 
    146166            zdta1(:,:,:,jn) = 0.0 
     
    169189      cltra = "dbioturb" 
    170190      IF( iom_varid( numrsr, TRIM(cltra) , ldstop = .FALSE. ) > 0 ) THEN 
    171          CALL iom_get( numrsr, jpdom_autoglo, TRIM(cltra), zdta2(:,:,:) ) 
     191         CALL iom_get( numrsr, jpdom_autoglo, TRIM(cltra), zdta2(:,:,:), ldxios = lrxios ) 
    172192      ELSE 
    173193         zdta2(:,:,:) = 0.0 
     
    179199      cltra = "irrig" 
    180200      IF( iom_varid( numrsr, TRIM(cltra) , ldstop = .FALSE. ) > 0 ) THEN 
    181          CALL iom_get( numrsr, jpdom_autoglo, TRIM(cltra), zdta2(:,:,:) ) 
     201         CALL iom_get( numrsr, jpdom_autoglo, TRIM(cltra), zdta2(:,:,:), ldxios = lrxios ) 
    182202      ELSE 
    183203         zdta2(:,:,:) = 0.0 
     
    189209      cltra = "sedligand" 
    190210      IF( iom_varid( numrsr, TRIM(cltra) , ldstop = .FALSE. ) > 0 ) THEN 
    191          CALL iom_get( numrsr, jpdom_autoglo, TRIM(cltra), zdta2(:,:,:) ) 
     211         CALL iom_get( numrsr, jpdom_autoglo, TRIM(cltra), zdta2(:,:,:), ldxios = lrxios ) 
    192212      ELSE 
    193213         zdta2(:,:,:) = 0.0 
     
    196216      CALL pack_arr( jpoce, sedligand(1:jpoce,1:jpksed), & 
    197217         &             zdta2(1:jpi,1:jpj,1:jpksed), iarroce(1:jpoce) ) 
    198  
     218      IF(lrxios) CALL iom_swap(cxios_context) 
    199219      IF( ln_timing )  CALL timing_stop('sed_rst_read') 
    200220      
     
    240260      !! 1. WRITE in nutwrs 
    241261      !! ------------------ 
    242  
    243       zinfo(1) = REAL( kt) 
    244       CALL iom_rstput( kt, nitrst, numrsw, 'kt', zinfo ) 
     262      IF( lwxios ) CALL iom_swap(      cwsxios_context         ) 
     263!     zinfo(1) = REAL( kt) 
     264      CALL iom_rstput( kt, nitrst, numrsw, 'kt', REAL( kt    , wp), ldxios = lwxios ) 
    245265 
    246266      ! Back to 2D geometry 
     
    272292      DO jn = 1, jptrased 
    273293         cltra = TRIM(sedtrcd(jn)) 
    274          CALL iom_rstput( kt, nitrst, numrsw, TRIM(cltra), trcsedi(:,:,:,jn) ) 
     294         CALL iom_rstput( kt, nitrst, numrsw, TRIM(cltra), trcsedi(:,:,:,jn), ldxios = lwxios ) 
    275295      ENDDO 
    276296 
    277297      DO jn = 1, 2 
    278298         cltra = TRIM(seddia3d(jn)) 
    279          CALL iom_rstput( kt, nitrst, numrsw, TRIM(cltra), flxsedi3d(:,:,:,jn) ) 
     299         CALL iom_rstput( kt, nitrst, numrsw, TRIM(cltra), flxsedi3d(:,:,:,jn), ldxios = lwxios ) 
    280300      ENDDO 
    281301 
     
    284304 
    285305      cltra = "dbioturb" 
    286       CALL iom_rstput( kt, nitrst, numrsw, TRIM(cltra), zdta2(:,:,:) ) 
     306      CALL iom_rstput( kt, nitrst, numrsw, TRIM(cltra), zdta2(:,:,:), ldxios = lwxios ) 
    287307 
    288308      CALL unpack_arr( jpoce, zdta2(1:jpi,1:jpj,1:jpksed)  , iarroce(1:jpoce), & 
     
    290310 
    291311      cltra = "irrig" 
    292       CALL iom_rstput( kt, nitrst, numrsw, TRIM(cltra), zdta2(:,:,:) ) 
     312      CALL iom_rstput( kt, nitrst, numrsw, TRIM(cltra), zdta2(:,:,:), ldxios = lwxios ) 
    293313 
    294314      CALL unpack_arr( jpoce, zdta2(1:jpi,1:jpj,1:jpksed)  , iarroce(1:jpoce), & 
     
    296316 
    297317      cltra = "sedligand" 
    298       CALL iom_rstput( kt, nitrst, numrsw, TRIM(cltra), zdta2(:,:,:) ) 
     318      CALL iom_rstput( kt, nitrst, numrsw, TRIM(cltra), zdta2(:,:,:), ldxios = lwxios ) 
     319      IF( lwxios ) CALL iom_swap(      cxios_context         ) 
    299320 
    300321      IF( kt == nitrst ) THEN 
    301           CALL iom_close( numrsw )     ! close the restart file (only at last time step) 
     322          IF(.NOT.lwxios) THEN 
     323             CALL iom_close( numrsw )     ! close the restart file (only at last time step) 
     324          ELSE 
     325             CALL iom_context_finalize( cwsxios_context )  
     326          ENDIF 
    302327          IF( l_offline .AND. ln_rst_list ) THEN 
    303328             nrst_lst = nrst_lst + 1 
     
    342367      REAL(wp) ::  zkt, zrdttrc1 
    343368      REAL(wp) ::  zndastp 
     369      CHARACTER(len = 82) :: clpname 
    344370 
    345371      ! Time domain : restart 
     
    353379 
    354380         IF( ln_rst_sed ) THEN 
     381            lxios_sini = .FALSE. 
    355382            CALL iom_open( TRIM(cn_sedrst_indir)//'/'//cn_sedrst_in, numrsr ) 
    356             CALL iom_get ( numrsr, 'kt', zkt )   ! last time-step of previous run 
    357  
     383 
     384      IF( lrxios .AND. .NOT. lxios_sini) THEN 
     385          CALL ctl_stop('OCE and SED restart must be in a single file when XIOS is used to read restart') 
     386      ENDIF 
     387      IF( lrxios) THEN 
     388          crsxios_context = 'sed_rst' 
     389          IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS for SED' 
     390          IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     391             clpname = cn_sedrst_in 
     392          ELSE 
     393             clpname = TRIM(Agrif_CFixed())//"_"//cn_sedrst_in    
     394          ENDIF 
     395          CALL iom_init( crsxios_context, fname = TRIM(cn_sedrst_indir)//'/'//TRIM(clpname), & 
     396                                          idfp = iom_file(numrsr)%nfid, ld_tmppatch = .TRUE. ) 
     397      ENDIF 
     398            IF(lrxios) CALL iom_swap(crsxios_context) 
     399            CALL iom_get ( numrsr, 'kt', zkt, ldxios = lrxios )   ! last time-step of previous run 
     400            IF(lrxios) CALL iom_swap(cxios_context) 
    358401            IF(lwp) THEN 
    359402               WRITE(numsed,*) ' *** Info read in restart : ' 
     
    376419            !                                          ! set the date in offline mode 
    377420            IF( ln_rst_sed .AND. nn_rstsed == 2 ) THEN 
    378                CALL iom_get( numrsr, 'ndastp', zndastp ) 
     421               IF(lrxios) CALL iom_swap(crsxios_context) 
     422               CALL iom_get( numrsr, 'ndastp', zndastp, ldxios = lrxios ) 
    379423               ndastp = NINT( zndastp ) 
    380                CALL iom_get( numrsr, 'adatrj', adatrj  ) 
     424               CALL iom_get( numrsr, 'adatrj', adatrj, ldxios = lrxios  ) 
     425               IF(lrxios) CALL iom_swap(crxios_context) 
    381426             ELSE 
    382427               ndastp = ndate0 - 1     ! ndate0 read in the namelist in dom_nam 
     
    402447            IF(lwp) WRITE(numsed,*) 'trc_wri : write the TOP restart file (NetCDF) at it= ', kt, ' date= ', ndastp 
    403448            IF(lwp) WRITE(numsed,*) '~~~~~~~' 
    404          ENDIF 
    405          CALL iom_rstput( kt, nitrst, numrsw, 'kt'     , REAL( kt    , wp) )   ! time-step 
    406          CALL iom_rstput( kt, nitrst, numrsw, 'ndastp' , REAL( ndastp, wp) )   ! date 
    407          CALL iom_rstput( kt, nitrst, numrsw, 'adatrj' , adatrj            )   ! number of elapsed days since 
    408          !                                                                     ! the begining of the run [s] 
     449            IF( lwxios ) CALL iom_init_closedef(cwsxios_context) 
     450         ENDIF 
     451         IF( lwxios ) CALL iom_swap(      cwsxios_context         ) 
     452         CALL iom_rstput( kt, nitrst, numrsw, 'kt'     , REAL( kt    , wp), ldxios = lwxios )   ! time-step 
     453         CALL iom_rstput( kt, nitrst, numrsw, 'ndastp' , REAL( ndastp, wp), ldxios = lwxios )   ! date 
     454         CALL iom_rstput( kt, nitrst, numrsw, 'adatrj' , adatrj,            ldxios = lwxios )   ! number of elapsed days since 
     455         !                                                                                      ! the begining of the run [s] 
     456         IF( lwxios ) CALL iom_swap(      cxios_context         ) 
    409457      ENDIF 
    410458 
Note: See TracChangeset for help on using the changeset viewer.