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 – 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)

Location:
NEMO/branches/2020/dev_12905_xios_restart/src/TOP
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_12905_xios_restart/src/TOP/C14/trcini_c14.F90

    r12377 r12961  
    6868        IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 
    6969        !  
    70         CALL iom_get( numrtr, 'co2sbc', co2sbc )  
    71         CALL iom_get( numrtr, jpdom_autoglo, 'c14sbc', c14sbc )  
    72         CALL iom_get( numrtr, jpdom_autoglo, 'exch_co2', exch_co2 )  
    73         CALL iom_get( numrtr, jpdom_autoglo, 'exch_c14', exch_c14 )  
    74         CALL iom_get( numrtr, jpdom_autoglo, 'qtr_c14', qtr_c14 ) 
     70        IF(lrxios) CALL iom_swap(crtxios_context) 
     71        CALL iom_get( numrtr, 'co2sbc', co2sbc, ldxios = lrxios )  
     72        CALL iom_get( numrtr, jpdom_autoglo, 'c14sbc', c14sbc, ldxios = lrxios )  
     73        CALL iom_get( numrtr, jpdom_autoglo, 'exch_co2', exch_co2, ldxios = lrxios )  
     74        CALL iom_get( numrtr, jpdom_autoglo, 'exch_c14', exch_c14, ldxios = lrxios )  
     75        CALL iom_get( numrtr, jpdom_autoglo, 'qtr_c14', qtr_c14, ldxios = lrxios ) 
     76        IF(lrxios) CALL iom_swap(cxios_context) 
    7577        ! 
    7678      END IF 
     
    8587      ELSE 
    8688        ! 
    87         CALL iom_get( numrtr, jpdom_autoglo, 'qint_c14', qint_c14 )  
     89        IF(lrxios) CALL iom_swap(crtxios_context) 
     90        CALL iom_get( numrtr, jpdom_autoglo, 'qint_c14', qint_c14, ldxios = lrxios )  
     91        IF(lrxios) CALL iom_swap(cxios_context) 
    8892        ! 
    8993      ENDIF 
  • NEMO/branches/2020/dev_12905_xios_restart/src/TOP/C14/trcsms_c14.F90

    r12489 r12961  
    143143         IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 
    144144         ! 
    145          CALL iom_rstput( kt, nitrst, numrtw, 'co2sbc', co2sbc )       ! These five need      & 
    146          CALL iom_rstput( kt, nitrst, numrtw, 'c14sbc', c14sbc )     ! &    to be written   & 
    147          CALL iom_rstput( kt, nitrst, numrtw, 'exch_co2', exch_co2 ) ! &    for temporal    & 
    148          CALL iom_rstput( kt, nitrst, numrtw, 'exch_c14', exch_c14 ) ! &    averages        & 
    149          CALL iom_rstput( kt, nitrst, numrtw, 'qtr_c14', qtr_c14 )   ! &    to be coherent. 
    150          CALL iom_rstput( kt, nitrst, numrtw, 'qint_c14', qint_c14 ) ! Cumulative 
     145         IF( lwxios ) CALL iom_swap(      cwtxios_context         ) 
     146         CALL iom_rstput( kt, nitrst, numrtw, 'co2sbc', co2sbc,     ldxios = lwxios ) ! These five need      & 
     147         CALL iom_rstput( kt, nitrst, numrtw, 'c14sbc', c14sbc,     ldxios = lwxios ) ! &    to be written   & 
     148         CALL iom_rstput( kt, nitrst, numrtw, 'exch_co2', exch_co2, ldxios = lwxios ) ! &    for temporal    & 
     149         CALL iom_rstput( kt, nitrst, numrtw, 'exch_c14', exch_c14, ldxios = lwxios ) ! &    averages        & 
     150         CALL iom_rstput( kt, nitrst, numrtw, 'qtr_c14', qtr_c14,   ldxios = lwxios ) ! &    to be coherent. 
     151         CALL iom_rstput( kt, nitrst, numrtw, 'qint_c14', qint_c14, ldxios = lwxios ) ! Cumulative 
     152         IF( lwxios ) CALL iom_swap(      cxios_context         ) 
    151153         ! 
    152154      ENDIF 
  • NEMO/branches/2020/dev_12905_xios_restart/src/TOP/CFC/trcsms_cfc.F90

    r12489 r12961  
    178178         IF(lwp) WRITE(numout,*) '~~~~' 
    179179         jl = 0 
     180         IF( lwxios ) CALL iom_swap(      cwtxios_context         ) 
    180181         DO jn = jp_cfc0, jp_cfc1 
    181182             jl = jl + 1 
    182             CALL iom_rstput( kt, nitrst, numrtw, 'qint_'//ctrcnm(jn), qint_cfc(:,:,jl) ) 
     183            CALL iom_rstput( kt, nitrst, numrtw, 'qint_'//ctrcnm(jn), qint_cfc(:,:,jl), ldxios = lwxios ) 
    183184         END DO 
     185         IF( lwxios ) CALL iom_swap(      cxios_context         ) 
    184186      ENDIF                                             
    185187      ! 
     
    295297         ! 
    296298         jl = 0 
     299         IF(lrxios) CALL iom_swap(crtxios_context) 
    297300         DO jn = jp_cfc0, jp_cfc1 
    298301            jl = jl + 1 
    299             CALL iom_get( numrtr, jpdom_autoglo, 'qint_'//ctrcnm(jn), qint_cfc(:,:,jl) )  
     302            CALL iom_get( numrtr, jpdom_autoglo, 'qint_'//ctrcnm(jn), qint_cfc(:,:,jl), ldxios = lrxios )  
    300303         END DO 
     304         IF(lrxios) CALL iom_swap(cxios_context) 
    301305      ENDIF 
    302306      IF(lwp) WRITE(numout,*) 
  • NEMO/branches/2020/dev_12905_xios_restart/src/TOP/PISCES/P2Z/p2zexp.F90

    r12489 r12961  
    133133            &                    'at it= ', kt,' date= ', ndastp 
    134134         IF(lwp) WRITE(numout,*) '~~~~' 
    135          CALL iom_rstput( kt, nitrst, numrtw, 'SEDB'//ctrcnm(jpdet), sedpocb(:,:) ) 
    136          CALL iom_rstput( kt, nitrst, numrtw, 'SEDN'//ctrcnm(jpdet), sedpocn(:,:) ) 
     135         IF( lwxios ) CALL iom_swap(      cwtxios_context         ) 
     136         CALL iom_rstput( kt, nitrst, numrtw, 'SEDB'//ctrcnm(jpdet), sedpocb(:,:), ldxios = lwxios ) 
     137         CALL iom_rstput( kt, nitrst, numrtw, 'SEDN'//ctrcnm(jpdet), sedpocn(:,:), ldxios = lwxios ) 
     138         IF( lwxios ) CALL iom_swap(      cxios_context         ) 
    137139      ENDIF 
    138140      ! 
     
    213215      ! 
    214216      IF( ln_rsttr ) THEN 
    215          CALL iom_get( numrtr, jpdom_autoglo, 'SEDB'//ctrcnm(jpdet), sedpocb(:,:) ) 
    216          CALL iom_get( numrtr, jpdom_autoglo, 'SEDN'//ctrcnm(jpdet), sedpocn(:,:) ) 
     217         IF(lrxios) CALL iom_swap(crtxios_context) 
     218         CALL iom_get( numrtr, jpdom_autoglo, 'SEDB'//ctrcnm(jpdet), sedpocb(:,:), ldxios = lrxios ) 
     219         CALL iom_get( numrtr, jpdom_autoglo, 'SEDN'//ctrcnm(jpdet), sedpocn(:,:), ldxios = lrxios ) 
     220         IF(lrxios) CALL iom_swap(cxios_context) 
    217221      ELSE 
    218222         sedpocb(:,:) = 0._wp 
  • NEMO/branches/2020/dev_12905_xios_restart/src/TOP/PISCES/P4Z/p4zsms.F90

    r12489 r12961  
    339339         IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 
    340340         !  
     341         IF(lrxios) CALL iom_swap(crtxios_context) 
    341342         IF( iom_varid( numrtr, 'PH', ldstop = .FALSE. ) > 0 ) THEN 
    342             CALL iom_get( numrtr, jpdom_autoglo, 'PH' , hi(:,:,:)  ) 
     343            CALL iom_get( numrtr, jpdom_autoglo, 'PH' , hi(:,:,:), ldxios = lrxios  ) 
    343344         ELSE 
    344345            CALL p4z_che( Kbb, Kmm )                  ! initialize the chemical constants 
    345346            CALL ahini_for_at( hi, Kbb ) 
    346347         ENDIF 
    347          CALL iom_get( numrtr, jpdom_autoglo, 'Silicalim', xksi(:,:) ) 
     348         CALL iom_get( numrtr, jpdom_autoglo, 'Silicalim', xksi(:,:), ldxios = lrxios ) 
    348349         IF( iom_varid( numrtr, 'Silicamax', ldstop = .FALSE. ) > 0 ) THEN 
    349             CALL iom_get( numrtr, jpdom_autoglo, 'Silicamax' , xksimax(:,:)  ) 
     350            CALL iom_get( numrtr, jpdom_autoglo, 'Silicamax' , xksimax(:,:), ldxios = lrxios  ) 
    350351         ELSE 
    351352            xksimax(:,:) = xksi(:,:) 
     
    353354         ! 
    354355         IF( iom_varid( numrtr, 'tcflxcum', ldstop = .FALSE. ) > 0 ) THEN  ! cumulative total flux of carbon 
    355             CALL iom_get( numrtr, 'tcflxcum' , t_oce_co2_flx_cum  ) 
     356            CALL iom_get( numrtr, 'tcflxcum' , t_oce_co2_flx_cum, ldxios = lrxios  ) 
    356357         ELSE 
    357358            t_oce_co2_flx_cum = 0._wp 
     
    360361         IF( ln_p5z ) THEN 
    361362            IF( iom_varid( numrtr, 'sized', ldstop = .FALSE. ) > 0 ) THEN 
    362                CALL iom_get( numrtr, jpdom_autoglo, 'sizep' , sizep(:,:,:)  ) 
    363                CALL iom_get( numrtr, jpdom_autoglo, 'sizen' , sizen(:,:,:)  ) 
    364                CALL iom_get( numrtr, jpdom_autoglo, 'sized' , sized(:,:,:)  ) 
     363               CALL iom_get( numrtr, jpdom_autoglo, 'sizep' , sizep(:,:,:), ldxios = lrxios  ) 
     364               CALL iom_get( numrtr, jpdom_autoglo, 'sizen' , sizen(:,:,:), ldxios = lrxios  ) 
     365               CALL iom_get( numrtr, jpdom_autoglo, 'sized' , sized(:,:,:), ldxios = lrxios  ) 
    365366            ELSE 
    366367               sizep(:,:,:) = 1. 
     
    369370            ENDIF 
    370371        ENDIF 
     372        IF(lrxios) CALL iom_swap(cxios_context) 
    371373        ! 
    372374      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 
     
    376378            IF(lwp) WRITE(numout,*) '~~~~~~~' 
    377379         ENDIF 
    378          CALL iom_rstput( kt, nitrst, numrtw, 'PH', hi(:,:,:) ) 
    379          CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:) ) 
    380          CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) 
    381          CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) 
     380         IF( lwxios ) CALL iom_swap(      cwtxios_context         ) 
     381         CALL iom_rstput( kt, nitrst, numrtw, 'PH', hi(:,:,:),               ldxios = lwxios ) 
     382         CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:),        ldxios = lwxios ) 
     383         CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:),     ldxios = lwxios ) 
     384         CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum, ldxios = lwxios ) 
    382385         IF( ln_p5z ) THEN 
    383             CALL iom_rstput( kt, nitrst, numrtw, 'sizep', sizep(:,:,:) ) 
    384             CALL iom_rstput( kt, nitrst, numrtw, 'sizen', sizen(:,:,:) ) 
    385             CALL iom_rstput( kt, nitrst, numrtw, 'sized', sized(:,:,:) ) 
    386          ENDIF 
     386            CALL iom_rstput( kt, nitrst, numrtw, 'sizep', sizep(:,:,:), ldxios = lwxios ) 
     387            CALL iom_rstput( kt, nitrst, numrtw, 'sizen', sizen(:,:,:), ldxios = lwxios ) 
     388            CALL iom_rstput( kt, nitrst, numrtw, 'sized', sized(:,:,:), ldxios = lwxios ) 
     389         ENDIF 
     390         IF( lwxios ) CALL iom_swap(      cxios_context         ) 
    387391      ENDIF 
    388392      ! 
  • 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 
  • NEMO/branches/2020/dev_12905_xios_restart/src/TOP/PISCES/SED/sedstp.F90

    r12489 r12961  
    8686      IF( kt == nitsed000 ) THEN 
    8787          CALL iom_close( numrsr )       ! close input tracer restart file 
     88          IF(lrxios) CALL iom_context_finalize(      crsxios_context  ) 
    8889!          IF(lwm) CALL FLUSH( numont )   ! flush namelist output 
    8990      ENDIF 
  • NEMO/branches/2020/dev_12905_xios_restart/src/TOP/TRP/trcsbc.F90

    r12489 r12961  
    8686            IF(lwp) WRITE(numout,*) '          nittrc000-1 surface tracer content forcing fields read in the restart file' 
    8787            zfact = 0.5_wp 
     88            IF(lrxios) CALL iom_swap(crtxios_context) 
    8889            DO jn = 1, jptra 
    89                CALL iom_get( numrtr, jpdom_autoglo, 'sbc_'//TRIM(ctrcnm(jn))//'_b', sbc_trc_b(:,:,jn) )   ! before tracer content sbc 
     90               CALL iom_get( numrtr, jpdom_autoglo, 'sbc_'//TRIM(ctrcnm(jn))//'_b', sbc_trc_b(:,:,jn), ldxios = lrxios )   ! before tracer content sbc 
    9091            END DO 
     92            IF(lrxios) CALL iom_swap(cxios_context) 
    9193         ELSE                                         ! No restart or restart not found: Euler forward time stepping 
    9294           zfact = 1._wp 
     
    180182            &                    'at it= ', kt,' date= ', ndastp 
    181183         IF(lwp) WRITE(numout,*) '~~~~' 
    182          DO jn = 1, jptra 
    183             CALL iom_rstput( kt, nitrst, numrtw, 'sbc_'//TRIM(ctrcnm(jn))//'_b', sbc_trc(:,:,jn) ) 
    184          END DO 
     184         IF( lwxios ) CALL iom_swap(      cwtxios_context         ) 
     185         DO jn = 1, jptra 
     186            CALL iom_rstput( kt, nitrst, numrtw, 'sbc_'//TRIM(ctrcnm(jn))//'_b', sbc_trc(:,:,jn), ldxios = lwxios ) 
     187         END DO 
     188         IF( lwxios ) CALL iom_swap(      cxios_context         ) 
    185189      ENDIF 
    186190      ! 
  • NEMO/branches/2020/dev_12905_xios_restart/src/TOP/trcrst.F90

    r12489 r12961  
    5151      CHARACTER(LEN=50)   ::   clname   ! trc output restart file name 
    5252      CHARACTER(LEN=256)  ::   clpath   ! full path to ocean output restart file 
     53      CHARACTER(LEN=50)   ::   clpname  ! trc output restart file name including AGRIF 
    5354      !!---------------------------------------------------------------------- 
    5455      ! 
     
    9091         IF(lwp) WRITE(numout,*) & 
    9192             '             open trc restart.output NetCDF file: ',TRIM(clpath)//clname 
    92          CALL iom_open( TRIM(clpath)//TRIM(clname), numrtw, ldwrt = .TRUE. ) 
     93         IF(.NOT.lwxios) THEN 
     94            CALL iom_open( TRIM(clpath)//TRIM(clname), numrtw, ldwrt = .TRUE. ) 
     95         ELSE 
     96#if defined key_iomput 
     97            cwtxios_context = "rstwt_"//TRIM(ADJUSTL(clkt)) 
     98            IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     99               clpname = clname 
     100            ELSE 
     101               clpname = TRIM(Agrif_CFixed())//"_"//clname 
     102            ENDIF 
     103            CALL iom_init( cwtxios_context, TRIM(clpath)//TRIM(clpname), ld_tmppatch = .false.,& 
     104                                                                         ld_closedef = .FALSE. ) 
     105            CALL iom_swap(      cxios_context          ) 
     106#else 
     107               clinfo = 'Can not use XIOS in trc_rst_opn' 
     108               CALL ctl_stop(TRIM(clinfo)) 
     109#endif 
     110            ENDIF 
    93111         lrst_trc = .TRUE. 
    94112      ENDIF 
     
    112130 
    113131      ! READ prognostic variables and computes diagnostic variable 
     132      IF(lrxios) CALL iom_swap(crtxios_context) 
    114133      DO jn = 1, jptra 
    115          CALL iom_get( numrtr, jpdom_autoglo, 'TRN'//ctrcnm(jn), tr(:,:,:,jn,Kmm) ) 
     134         CALL iom_get( numrtr, jpdom_autoglo, 'TRN'//ctrcnm(jn), tr(:,:,:,jn,Kmm), ldxios = lrxios ) 
    116135      END DO 
    117136 
    118137      DO jn = 1, jptra 
    119          CALL iom_get( numrtr, jpdom_autoglo, 'TRB'//ctrcnm(jn), tr(:,:,:,jn,Kbb) ) 
     138         CALL iom_get( numrtr, jpdom_autoglo, 'TRB'//ctrcnm(jn), tr(:,:,:,jn,Kbb), ldxios = lrxios ) 
    120139      END DO 
    121140      ! 
    122141      CALL iom_delay_rst( 'READ', 'TOP', numrtr )   ! read only TOP delayed global communication variables 
    123        
     142      IF(lrxios) CALL iom_swap(cxios_context)  
    124143   END SUBROUTINE trc_rst_read 
    125144 
     
    136155      !!---------------------------------------------------------------------- 
    137156      ! 
    138       CALL iom_rstput( kt, nitrst, numrtw, 'rdttrc1', rn_Dt )   ! passive tracer time step (= ocean time step) 
     157      IF( lwxios ) CALL iom_swap(      cwtxios_context         ) 
     158      CALL iom_rstput( kt, nitrst, numrtw, 'rdttrc1', rn_Dt, ldxios = lwxios )   ! passive tracer time step (= ocean time step) 
    139159      ! prognostic variables  
    140160      ! --------------------  
    141161      DO jn = 1, jptra 
    142          CALL iom_rstput( kt, nitrst, numrtw, 'TRN'//ctrcnm(jn), tr(:,:,:,jn,Kmm) ) 
     162         CALL iom_rstput( kt, nitrst, numrtw, 'TRN'//ctrcnm(jn), tr(:,:,:,jn,Kmm), ldxios = lwxios ) 
    143163      END DO 
    144164 
    145165      DO jn = 1, jptra 
    146          CALL iom_rstput( kt, nitrst, numrtw, 'TRB'//ctrcnm(jn), tr(:,:,:,jn,Kbb) ) 
    147       END DO 
     166         CALL iom_rstput( kt, nitrst, numrtw, 'TRB'//ctrcnm(jn), tr(:,:,:,jn,Kbb), ldxios = lwxios ) 
     167      END DO 
     168      IF( lwxios ) CALL iom_swap(      cxios_context         ) 
    148169      ! 
    149170      CALL iom_delay_rst( 'WRITE', 'TOP', numrtw )   ! save only TOP delayed global communication variables 
     
    151172      IF( kt == nitrst ) THEN 
    152173          CALL trc_rst_stat( Kmm, Krhs )             ! statistics 
    153           CALL iom_close( numrtw )     ! close the restart file (only at last time step) 
     174          IF(lwxios) THEN 
     175             CALL iom_context_finalize(      cwtxios_context          ) 
     176          ELSE 
     177             CALL iom_close( numrtw )     ! close the restart file (only at last time step) 
     178          ENDIF 
    154179#if ! defined key_trdmxl_trc 
    155180          lrst_trc = .FALSE. 
     
    195220      REAL(wp) ::  zrdttrc1, zkt, zndastp, zdayfrac, ksecs, ktime 
    196221      INTEGER  ::   ihour, iminute 
     222      CHARACTER(len=82) :: clpname 
    197223 
    198224      ! Time domain : restart 
     
    206232 
    207233         IF( ln_rsttr ) THEN 
     234            lxios_sini = .FALSE. 
    208235            CALL iom_open( TRIM(cn_trcrst_indir)//'/'//cn_trcrst_in, numrtr ) 
    209             CALL iom_get ( numrtr, 'kt', zkt )   ! last time-step of previous run 
     236            IF( lrxios .AND. .NOT. lxios_sini) THEN 
     237               CALL ctl_stop('OCE and TOP restart must be in a single file when XIOS is used to read restart') 
     238            ENDIF 
     239            IF( lrxios) THEN 
     240                crtxios_context = 'top_rst' 
     241                IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS for TOP' 
     242                IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     243                   clpname = cn_trcrst_in 
     244                ELSE 
     245                   clpname = TRIM(Agrif_CFixed())//"_"//cn_trcrst_in    
     246                ENDIF 
     247                CALL iom_init( crtxios_context, fname = TRIM(cn_trcrst_indir)//'/'//TRIM(clpname), & 
     248                                          idfp = iom_file(numrtr)%nfid, ld_tmppatch = .TRUE. ) 
     249            ENDIF 
     250 
     251            IF(lrxios) CALL iom_swap(crtxios_context) 
     252            CALL iom_get ( numrtr, 'kt', zkt, ldxios = lrxios )   ! last time-step of previous run 
     253            IF(lrxios) CALL iom_swap(cxios_context) 
    210254 
    211255            IF(lwp) THEN 
     
    229273            !                                          ! set the date in offline mode 
    230274            IF( ln_rsttr .AND. nn_rsttr == 2 ) THEN 
    231                CALL iom_get( numrtr, 'ndastp', zndastp ) 
     275               IF(lrxios) CALL iom_swap(crtxios_context) 
     276               CALL iom_get( numrtr, 'ndastp', zndastp, ldxios = lrxios ) 
    232277               ndastp = NINT( zndastp ) 
    233                CALL iom_get( numrtr, 'adatrj', adatrj  ) 
    234                CALL iom_get( numrtr, 'ntime' , ktime   ) 
     278               CALL iom_get( numrtr, 'adatrj', adatrj, ldxios = lrxios  ) 
     279               CALL iom_get( numrtr, 'ntime' , ktime, ldxios = lrxios   ) 
     280               IF(lrxios) CALL iom_swap(cxios_context) 
    235281               nn_time0=INT(ktime) 
    236282               ! calculate start time in hours and minutes 
     
    291337            IF(lwp) WRITE(numout,*) '~~~~~~~' 
    292338         ENDIF 
    293          CALL iom_rstput( kt, nitrst, numrtw, 'kt'     , REAL( kt    , wp) )   ! time-step 
    294          CALL iom_rstput( kt, nitrst, numrtw, 'ndastp' , REAL( ndastp, wp) )   ! date 
    295          CALL iom_rstput( kt, nitrst, numrtw, 'adatrj' , adatrj            )   ! number of elapsed days since 
     339         IF( lwxios ) CALL iom_swap(      cwtxios_context         ) 
     340         CALL iom_rstput( kt, nitrst, numrtw, 'kt'     , REAL( kt    , wp)  , ldxios = lwxios )   ! time-step 
     341         CALL iom_rstput( kt, nitrst, numrtw, 'ndastp' , REAL( ndastp, wp)  , ldxios = lwxios )   ! date 
     342         CALL iom_rstput( kt, nitrst, numrtw, 'adatrj' , adatrj             , ldxios = lwxios )   ! number of elapsed days since 
    296343         !                                                                     ! the begining of the run [s] 
    297          CALL iom_rstput( kt, nitrst, numrtw, 'ntime'  , REAL( nn_time0, wp)) ! time 
     344         CALL iom_rstput( kt, nitrst, numrtw, 'ntime'  , REAL( nn_time0, wp), ldxios = lwxios ) ! time 
     345         IF( lwxios ) CALL iom_swap(      cxios_context         ) 
    298346      ENDIF 
    299347 
  • NEMO/branches/2020/dev_12905_xios_restart/src/TOP/trcstp.F90

    r12620 r12961  
    109109      IF( kt == nittrc000 ) THEN 
    110110         CALL iom_close( numrtr )                         ! close input tracer restart file 
     111         IF(lrxios) CALL iom_context_finalize(      crtxios_context          ) 
    111112         IF(lwm) CALL FLUSH( numont )                     ! flush namelist output 
    112113      ENDIF 
     
    195196           &                              .AND. iom_varid( numrtr, 'ktdcy'    , ldstop = .FALSE. ) > 0  & 
    196197           &                              .AND. iom_varid( numrtr, 'nrdcy'    , ldstop = .FALSE. ) > 0  ) THEN 
    197  
    198             CALL iom_get( numrtr, 'ktdcy', zkt 
     198            IF(lrxios) CALL iom_swap(crtxios_context) 
     199            CALL iom_get( numrtr, 'ktdcy', zkt, ldxios = lrxios 
    199200            rsecfst = INT( zkt ) * rn_Dt 
    200201            IF(lwp) WRITE(numout,*) 'trc_qsr_mean:   qsr_mean read in the restart file at time-step rsecfst =', rsecfst, ' s ' 
    201             CALL iom_get( numrtr, jpdom_autoglo, 'qsr_mean', qsr_mean )   !  A mean of qsr 
    202             CALL iom_get( numrtr, 'nrdcy', zrec )   !  Number of record per days 
     202            CALL iom_get( numrtr, jpdom_autoglo, 'qsr_mean', qsr_mean, ldxios = lrxios )   !  A mean of qsr 
     203            CALL iom_get( numrtr, 'nrdcy', zrec, ldxios = lrxios )   !  Number of record per days 
    203204            IF( INT( zrec ) == nb_rec_per_day ) THEN 
    204205               DO jn = 1, nb_rec_per_day  
    205206                  IF( jn <= 9 )  THEN 
    206207                    WRITE(cl1,'(i1)') jn 
    207                     CALL iom_get( numrtr, jpdom_autoglo, 'qsr_arr_'//cl1, qsr_arr(:,:,jn) )   !  A mean of qsr 
     208                    CALL iom_get( numrtr, jpdom_autoglo, 'qsr_arr_'//cl1, qsr_arr(:,:,jn), ldxios = lrxios )   !  A mean of qsr 
    208209                  ELSE 
    209210                    WRITE(cl2,'(i2.2)') jn 
    210                     CALL iom_get( numrtr, jpdom_autoglo, 'qsr_arr_'//cl2, qsr_arr(:,:,jn) )   !  A mean of qsr 
     211                    CALL iom_get( numrtr, jpdom_autoglo, 'qsr_arr_'//cl2, qsr_arr(:,:,jn), ldxios = lrxios )   !  A mean of qsr 
    211212                  ENDIF 
    212213              END DO 
     
    216217               ENDDO 
    217218            ENDIF 
     219            IF(lrxios) CALL iom_swap(cxios_context) 
    218220         ELSE                                         !* no restart: set from nit000 values 
    219221            IF(lwp) WRITE(numout,*) 'trc_qsr_mean:   qsr_mean set to nit000 values' 
     
    249251         zkt  = REAL( ktdcy, wp ) 
    250252         zrec = REAL( nb_rec_per_day, wp ) 
    251          CALL iom_rstput( kt, nitrst, numrtw, 'ktdcy', zkt  ) 
    252          CALL iom_rstput( kt, nitrst, numrtw, 'nrdcy', zrec ) 
     253         IF( lwxios ) CALL iom_swap(      cwtxios_context         ) 
     254         CALL iom_rstput( kt, nitrst, numrtw, 'ktdcy', zkt, ldxios = lwxios  ) 
     255         CALL iom_rstput( kt, nitrst, numrtw, 'nrdcy', zrec, ldxios = lwxios ) 
    253256          DO jn = 1, nb_rec_per_day  
    254257             IF( jn <= 9 )  THEN 
    255258               WRITE(cl1,'(i1)') jn 
    256                CALL iom_rstput( kt, nitrst, numrtw, 'qsr_arr_'//cl1, qsr_arr(:,:,jn) ) 
     259               CALL iom_rstput( kt, nitrst, numrtw, 'qsr_arr_'//cl1, qsr_arr(:,:,jn), ldxios = lwxios ) 
    257260             ELSE 
    258261               WRITE(cl2,'(i2.2)') jn 
    259                CALL iom_rstput( kt, nitrst, numrtw, 'qsr_arr_'//cl2, qsr_arr(:,:,jn) ) 
     262               CALL iom_rstput( kt, nitrst, numrtw, 'qsr_arr_'//cl2, qsr_arr(:,:,jn), ldxios = lwxios ) 
    260263             ENDIF 
    261264         END DO 
    262          CALL iom_rstput( kt, nitrst, numrtw, 'qsr_mean', qsr_mean(:,:) ) 
     265         CALL iom_rstput( kt, nitrst, numrtw, 'qsr_mean', qsr_mean(:,:), ldxios = lwxios ) 
     266         IF( lwxios ) CALL iom_swap(      cxios_context         ) 
    263267      ENDIF 
    264268      ! 
Note: See TracChangeset for help on using the changeset viewer.