Changeset 12950


Ignore:
Timestamp:
2020-05-19T12:53:16+02:00 (4 months ago)
Author:
andmirek
Message:

Ticket #2462: new XIOS restart read/write interfaces

Location:
NEMO/branches/2020/dev_12905_xios_restart
Files:
25 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/DIA/diahsb.F90

    r12489 r12950  
    262262            IF(lwp) WRITE(numout,*) '   dia_hsb_rst : read hsb restart at it= ', kt,' date= ', ndastp 
    263263            IF(lwp) WRITE(numout,*) 
     264            IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    264265            CALL iom_get( numror, 'frc_v', frc_v, ldxios = lrxios ) 
    265266            CALL iom_get( numror, 'frc_t', frc_t, ldxios = lrxios ) 
     
    279280               CALL iom_get( numror, jpdom_autoglo, 'ssh_sc_loc_ini', ssh_sc_loc_ini, ldxios = lrxios ) 
    280281            ENDIF 
     282            IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    281283         ELSE 
    282284            IF(lwp) WRITE(numout,*) 
     
    380382      IF( .NOT. ln_diahsb )   RETURN 
    381383 
    382       IF(lwxios) THEN 
    383 ! define variables in restart file when writing with XIOS 
    384         CALL iom_set_rstw_var_active('frc_v') 
    385         CALL iom_set_rstw_var_active('frc_t') 
    386         CALL iom_set_rstw_var_active('frc_s') 
    387         CALL iom_set_rstw_var_active('surf_ini') 
    388         CALL iom_set_rstw_var_active('ssh_ini') 
    389         CALL iom_set_rstw_var_active('e3t_ini') 
    390         CALL iom_set_rstw_var_active('hc_loc_ini') 
    391         CALL iom_set_rstw_var_active('sc_loc_ini') 
    392         IF( ln_linssh ) THEN 
    393            CALL iom_set_rstw_var_active('ssh_hc_loc_ini') 
    394            CALL iom_set_rstw_var_active('ssh_sc_loc_ini') 
    395            CALL iom_set_rstw_var_active('frc_wn_t') 
    396            CALL iom_set_rstw_var_active('frc_wn_s') 
    397         ENDIF 
    398       ENDIF 
    399384      ! ------------------- ! 
    400385      ! 1 - Allocate memory ! 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/DOM/daymod.F90

    r12489 r12950  
    148148      CALL day( nit000 ) 
    149149      ! 
    150       IF( lwxios ) THEN 
    151 ! define variables in restart file when writing with XIOS 
    152           CALL iom_set_rstw_var_active('kt') 
    153           CALL iom_set_rstw_var_active('ndastp') 
    154           CALL iom_set_rstw_var_active('adatrj') 
    155           CALL iom_set_rstw_var_active('ntime') 
    156       ENDIF 
    157  
    158150   END SUBROUTINE day_init 
    159151 
     
    323315 
    324316      IF( TRIM(cdrw) == 'READ' ) THEN 
    325  
     317         IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    326318         IF( iom_varid( numror, 'kt', ldstop = .FALSE. ) > 0 ) THEN 
    327319            ! Get Calendar informations 
     
    391383            adatrj = ( REAL( nit000-1, wp ) * rn_Dt ) / rday 
    392384         ENDIF 
     385         IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    393386         IF( ABS(adatrj  - REAL(NINT(adatrj),wp)) < 0.1 / rday )   adatrj = REAL(NINT(adatrj),wp)   ! avoid truncation error 
    394387         ! 
     
    409402         ENDIF 
    410403         ! calendar control 
    411          IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
     404         IF( lwxios ) THEN 
     405            CALL iom_swap(      cwxios_context          ) 
     406!           IF( kt == nitrst ) THEN 
     407!               CALL iom_init_closedef(cwxios_context) 
     408!               CALL iom_setkt( kt - nit000 + 1,      cwxios_context          ) 
     409!               CALL iom_swap(      cwxios_context          ) 
     410!           ENDIF 
     411         ENDIF 
    412412         CALL iom_rstput( kt, nitrst, numrow, 'kt'     , REAL( kt    , wp)  , ldxios = lwxios )   ! time-step 
    413413         CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp)  , ldxios = lwxios )   ! date 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/DOM/domain.F90

    r12914 r12950  
    123123      CALL dom_nam                     ! read namelist ( namrun, namdom ) 
    124124      ! 
    125       IF( lwxios ) THEN 
    126 !define names for restart write and set core output (restart.F90) 
    127          CALL iom_set_rst_vars(rst_wfields) 
    128          CALL iom_set_rstw_core(cdstr) 
    129       ENDIF 
    130125!reset namelist for SAS 
    131126      IF(cdstr == 'SAS') THEN 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/DOM/domvvl.F90

    r12740 r12950  
    270270      ENDIF 
    271271      ! 
    272       IF(lwxios) THEN 
    273 ! define variables in restart file when writing with XIOS 
    274          CALL iom_set_rstw_var_active('e3t_b') 
    275          CALL iom_set_rstw_var_active('e3t_n') 
    276          !                                           ! ----------------------- ! 
    277          IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN  ! z_tilde and layer cases ! 
    278             !                                        ! ----------------------- ! 
    279             CALL iom_set_rstw_var_active('tilde_e3t_b') 
    280             CALL iom_set_rstw_var_active('tilde_e3t_n') 
    281          END IF 
    282          !                                           ! -------------!     
    283          IF( ln_vvl_ztilde ) THEN                    ! z_tilde case ! 
    284             !                                        ! ------------ ! 
    285             CALL iom_set_rstw_var_active('hdiv_lf') 
    286          ENDIF 
    287          ! 
    288       ENDIF 
    289       ! 
    290272   END SUBROUTINE dom_vvl_zgr 
    291273 
     
    793775         IF( ln_rstart ) THEN                   !* Read the restart file 
    794776            CALL rst_read_open                  !  open the restart file if necessary 
     777            IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    795778            CALL iom_get( numror, jpdom_autoglo, 'sshn'   , ssh(:,:,Kmm), ldxios = lrxios    ) 
    796779            ! 
     
    869852               ENDIF 
    870853            ENDIF 
     854            IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    871855            ! 
    872856         ELSE                                   !* Initialize at "rest" 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/DYN/dynspg_ts.F90

    r12489 r12950  
    890890      IF( TRIM(cdrw) == 'READ' ) THEN        ! Read/initialise  
    891891         !                                   ! --------------- 
     892         IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    892893         IF( ln_rstart .AND. ln_bt_fw .AND. (.NOT.l_1st_euler) ) THEN    !* Read the restart file 
    893894            CALL iom_get( numror, jpdom_autoglo, 'ub2_b'  , ub2_b  (:,:), ldxios = lrxios )    
     
    922923#endif 
    923924         ENDIF 
     925         IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    924926         ! 
    925927      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN   ! Create restart file 
     
    10391041      !                             ! read restart when needed 
    10401042      CALL ts_rst( nit000, 'READ' ) 
    1041       ! 
    1042       IF( lwxios ) THEN 
    1043 ! define variables in restart file when writing with XIOS 
    1044          CALL iom_set_rstw_var_active('ub2_b') 
    1045          CALL iom_set_rstw_var_active('vb2_b') 
    1046          CALL iom_set_rstw_var_active('un_bf') 
    1047          CALL iom_set_rstw_var_active('vn_bf') 
    1048          ! 
    1049          IF (.NOT.ln_bt_av) THEN 
    1050             CALL iom_set_rstw_var_active('sshbb_e') 
    1051             CALL iom_set_rstw_var_active('ubb_e') 
    1052             CALL iom_set_rstw_var_active('vbb_e') 
    1053             CALL iom_set_rstw_var_active('sshb_e') 
    1054             CALL iom_set_rstw_var_active('ub_e') 
    1055             CALL iom_set_rstw_var_active('vb_e') 
    1056          ENDIF 
    1057 #if defined key_agrif 
    1058          ! Save time integrated fluxes 
    1059          IF ( .NOT.Agrif_Root() ) THEN 
    1060             CALL iom_set_rstw_var_active('ub2_i_b') 
    1061             CALL iom_set_rstw_var_active('vb2_i_b') 
    1062          ENDIF 
    1063 #endif 
    1064       ENDIF 
    10651043      ! 
    10661044   END SUBROUTINE dyn_spg_ts_init 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/IOM/iom.F90

    r12914 r12950  
    4646   USE lib_fortran  
    4747   USE diu_bulk, ONLY : ln_diurnal_only, ln_diurnal 
     48   USE iom_nf90 
     49   USE netcdf 
    4850 
    4951   IMPLICIT NONE 
     
    6567   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 
    6668   PRIVATE set_grid, set_grid_bounds, set_scalar, set_xmlatt, set_mooring, iom_sdate 
    67    PRIVATE iom_set_rst_context, iom_set_rstw_active, iom_set_rstr_active 
     69   PRIVATE iom_set_rst_context, iom_set_rstr_active 
    6870# endif 
    69    PUBLIC iom_set_rstw_var_active, iom_set_rstw_core, iom_set_rst_vars 
     71   PRIVATE iom_set_rstw_active 
    7072 
    7173   INTERFACE iom_get 
     
    261263!set names of the fields in restart file IF using XIOS to read data 
    262264          CALL iom_set_rst_context(.TRUE.) 
    263           CALL iom_set_rst_vars(rst_rfields) 
    264265!set which fields are to be read from restart file 
    265266          CALL iom_set_rstr_active() 
    266267      ELSE IF( TRIM(cdname) == TRIM(cwxios_context) ) THEN 
    267 !set names of the fields in restart file IF using XIOS to write data 
    268           CALL iom_set_rst_context(.FALSE.) 
    269           CALL iom_set_rst_vars(rst_wfields) 
    270 !set which fields are to be written to a restart file 
    271           CALL iom_set_rstw_active(fname) 
     268          CALL iom_set_rstw_file(fname) 
    272269      ELSE 
    273270          CALL set_xmlatt 
     
    291288   END SUBROUTINE iom_init 
    292289 
    293    SUBROUTINE iom_init_closedef 
     290   SUBROUTINE iom_init_closedef(cdname) 
    294291      !!---------------------------------------------------------------------- 
    295292      !!            ***  SUBROUTINE iom_init_closedef  *** 
     
    299296      !! 
    300297      !!---------------------------------------------------------------------- 
    301  
     298   CHARACTER(len=*), OPTIONAL, INTENT(IN) :: cdname 
    302299#if defined key_iomput 
     300      IF( TRIM(cdname) == TRIM(cwxios_context) ) THEN 
     301!set names of the fields in restart file IF using XIOS to write data 
     302          CALL iom_set_rst_context(.FALSE.) 
     303      ENDIF 
     304 
    303305      CALL xios_close_context_definition() 
    304       CALL xios_update_calendar( 0 ) 
     306 
     307      IF(.NOT. (TRIM(cdname) == TRIM(cwxios_context)))  CALL xios_update_calendar( 0 ) 
     308 
    305309#else 
    306310      IF( .FALSE. )   WRITE(numout,*) 'iom_init_closedef: should not see this'   ! useless statement to avoid compilation warnings 
     
    308312 
    309313   END SUBROUTINE iom_init_closedef 
    310  
    311    SUBROUTINE iom_set_rstw_var_active(field) 
    312       !!--------------------------------------------------------------------- 
    313       !!                   ***  SUBROUTINE  iom_set_rstw_var_active  *** 
    314       !! 
    315       !! ** Purpose :  enable variable in restart file when writing with XIOS  
    316       !!--------------------------------------------------------------------- 
    317    CHARACTER(len = *), INTENT(IN) :: field 
    318    INTEGER :: i 
    319    LOGICAL :: llis_set 
    320    CHARACTER(LEN=256) :: clinfo    ! info character 
    321  
    322 #if defined key_iomput 
    323    llis_set = .FALSE. 
    324  
    325    DO i = 1, max_rst_fields 
    326        IF(TRIM(rst_wfields(i)%vname) == field) THEN  
    327           rst_wfields(i)%active = .TRUE. 
    328           llis_set = .TRUE. 
    329           EXIT 
    330        ENDIF 
    331    ENDDO 
    332 !Warn if variable is not in defined in rst_wfields 
    333    IF(.NOT.llis_set) THEN 
    334       WRITE(ctmp1,*) 'iom_set_rstw_var_active: variable ', field ,' is available for writing but not defined'  
    335       CALL ctl_stop( 'iom_set_rstw_var_active:', ctmp1 ) 
    336    ENDIF 
    337 #else 
    338         clinfo = 'iom_set_rstw_var_active: key_iomput is needed to use XIOS restart read/write functionality' 
    339         CALL ctl_stop('STOP', TRIM(clinfo)) 
    340 #endif 
    341  
    342    END SUBROUTINE iom_set_rstw_var_active 
    343314 
    344315   SUBROUTINE iom_set_rstr_active() 
     
    352323!sets enabled = .TRUE. for each field in restart file 
    353324   CHARACTER(len=256) :: rst_file 
    354  
    355325#if defined key_iomput 
    356    TYPE(xios_field) :: field_hdl 
    357    TYPE(xios_file) :: file_hdl 
    358    TYPE(xios_filegroup) :: filegroup_hdl 
    359    INTEGER :: i 
    360    CHARACTER(lc)  ::   clpath 
     326   INTEGER                                    :: ndims, nvars, natts, unlimitedDimId, dimlen, xtype,mdims 
     327   TYPE(xios_field)                           :: field_hdl 
     328   TYPE(xios_file)                            :: file_hdl 
     329   TYPE(xios_filegroup)                       :: filegroup_hdl 
     330   INTEGER                                    :: dimids(4), jv,i, idim 
     331   CHARACTER(LEN=lc)                          :: clpath 
     332   CHARACTER(LEN=256)                         :: clinfo               ! info character 
     333   INTEGER, ALLOCATABLE                       :: indimlens(:) 
     334   CHARACTER(LEN=nf90_max_name), ALLOCATABLE  :: indimnames(:) 
     335   CHARACTER(LEN=nf90_max_name)               :: dimname, varname 
     336   LOGICAL                                    :: lmeta 
     337 
     338!failed to build with AGRIF 
     339!      meta(1:NMETA) = ["nav_lat",        & 
     340!            "nav_lon", "nav_lev", "time_instant",                  & 
     341!            "time_instant_bounds", "time_counter",                 & 
     342!            "time_counter_bounds", "x", "y", "numcat"] 
     343 
     344        meta(1) = "nav_lat" 
     345        meta(2) = "nav_lon" 
     346        meta(3) = "nav_lev" 
     347        meta(4) = "time_instant" 
     348        meta(5) = "time_instant_bounds" 
     349        meta(6) = "time_counter" 
     350        meta(7) = "time_counter_bounds" 
     351        meta(8) = "x" 
     352        meta(9) = "y" 
     353        meta(10) = "numcat" 
    361354 
    362355        clpath = TRIM(cn_ocerst_indir) 
     
    367360           rst_file = TRIM(clpath)//TRIM(Agrif_CFixed())//'_'//TRIM(cn_ocerst_in) 
    368361        ENDIF 
     362 
     363        clinfo = '          iom_set_rstr_active, file: '//TRIM(rst_file) 
     364 
    369365!set name of the restart file and enable available fields 
    370         if(lwp) WRITE(numout,*) 'Setting restart filename (for XIOS) to: ', TRIM(rst_file) 
    371366        CALL xios_get_handle("file_definition", filegroup_hdl ) 
    372367        CALL xios_add_child(filegroup_hdl, file_hdl, 'rrestart') 
     
    374369             par_access="collective", enabled=.TRUE., mode="read",                 & 
    375370             output_freq=xios_timestep) 
    376 !define variables for restart context 
    377         DO i = 1, max_rst_fields 
    378          IF( TRIM(rst_rfields(i)%vname) /= "NO_NAME") THEN 
    379            IF( iom_varid( numror, TRIM(rst_rfields(i)%vname), ldstop = .FALSE. ) > 0 ) THEN 
    380                 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_rfields(i)%vname)) 
    381                 SELECT CASE (TRIM(rst_rfields(i)%grid)) 
    382                  CASE ("grid_N_3D") 
    383                     CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
    384                         domain_ref="grid_N", axis_ref="nav_lev", operation = "instant") 
    385                  CASE ("grid_N") 
    386                     CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
    387                         domain_ref="grid_N", operation = "instant")  
    388                 CASE ("grid_vector") 
    389                     CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
    390                          axis_ref="nav_lev", operation = "instant") 
    391                  CASE ("grid_scalar") 
    392                     CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
    393                         scalar_ref = "grid_scalar", operation = "instant") 
    394                 END SELECT 
    395                 IF(lwp) WRITE(numout,*) 'XIOS read: ', TRIM(rst_rfields(i)%vname), ' enabled in ', TRIM(rst_file) 
    396            ENDIF 
    397          ENDIF 
    398         END DO 
     371 
     372        CALL iom_nf90_check( nf90_inquire( iom_file(numror)%nfid, ndims, nvars, natts ), clinfo ) 
     373        ALLOCATE(indimlens(ndims), indimnames(ndims)) 
     374        CALL iom_nf90_check( nf90_inquire( iom_file(numror)%nfid, unlimitedDimId = unlimitedDimId ), clinfo ) 
     375 
     376        DO idim = 1, ndims 
     377           CALL iom_nf90_check( nf90_inquire_dimension( iom_file(numror)%nfid, idim, dimname, dimlen ), clinfo ) 
     378           indimlens(idim) = dimlen 
     379           indimnames(idim) = dimname 
     380        ENDDO 
     381 
     382        DO jv =1, nvars 
     383            lmeta = .FALSE. 
     384            CALL iom_nf90_check( nf90_inquire_variable( iom_file(numror)%nfid, jv, varname, xtype, ndims, dimids, natts ), clinfo ) 
     385            DO i = 1, NMETA 
     386               IF(TRIM(varname) == TRIM(meta(i))) THEN 
     387                  lmeta = .TRUE. 
     388               ENDIF 
     389            ENDDO 
     390            IF(.NOT.lmeta) THEN 
     391               CALL xios_add_child(file_hdl, field_hdl, TRIM(varname)) 
     392               mdims = ndims 
     393 
     394               IF(ANY(dimids(1:ndims) == unlimitedDimId)) THEN 
     395                mdims = mdims - 1 
     396               ENDIF 
     397 
     398               IF(mdims == 3) THEN 
     399                      CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(varname),   & 
     400                                   domain_ref="grid_N", axis_ref=TRIM(iom_axis(indimlens(ndims))), & 
     401                                   prec = 8, operation = "instant") 
     402               ELSEIF(mdims == 2) THEN 
     403                      CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(varname), & 
     404                                          domain_ref="grid_N", prec = 8, operation = "instant")  
     405               ELSEIF(mdims == 1) THEN 
     406                      CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(varname), & 
     407                                          axis_ref=TRIM(iom_axis(indimlens(ndims))), prec = 8, operation = "instant") 
     408               ELSEIF(mdims == 0) THEN 
     409                      CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(varname), & 
     410                                                scalar_ref = "grid_scalar", prec = 8, operation = "instant") 
     411               ELSE 
     412                   WRITE(ctmp1,*) 'iom_set_rstr_active: variable ', TRIM(varname) ,' incorrect number of dimensions'  
     413                   CALL ctl_stop( 'iom_set_rstr_active:', ctmp1 ) 
     414               ENDIF 
     415            ENDIF 
     416        ENDDO 
     417        DEALLOCATE(indimlens, indimnames) 
    399418#endif 
    400419   END SUBROUTINE iom_set_rstr_active 
    401420 
    402    SUBROUTINE iom_set_rstw_core(cdmdl) 
     421   SUBROUTINE iom_set_rstw_file(cdrst_file) 
    403422      !!--------------------------------------------------------------------- 
    404       !!                   ***  SUBROUTINE  iom_set_rstw_core  *** 
    405       !! 
    406       !! ** Purpose :  set variables which are always in restart file  
     423      !!                   ***  SUBROUTINE iom_set_rstw_file   *** 
     424      !! 
     425      !! ** Purpose :  define file name in XIOS context for writing restart 
    407426      !!--------------------------------------------------------------------- 
    408    CHARACTER (len=*), INTENT (IN) :: cdmdl ! model OPA or SAS 
    409    CHARACTER(LEN=256)             :: clinfo    ! info character 
    410 #if defined key_iomput 
    411    IF(cdmdl == "OPA") THEN 
    412 !from restart.F90 
    413    CALL iom_set_rstw_var_active("rdt") 
    414    IF ( .NOT. ln_diurnal_only ) THEN 
    415         CALL iom_set_rstw_var_active('ub'  ) 
    416         CALL iom_set_rstw_var_active('vb'  ) 
    417         CALL iom_set_rstw_var_active('tb'  ) 
    418         CALL iom_set_rstw_var_active('sb'  ) 
    419         CALL iom_set_rstw_var_active('sshb') 
    420         ! 
    421         CALL iom_set_rstw_var_active('un'  ) 
    422         CALL iom_set_rstw_var_active('vn'  ) 
    423         CALL iom_set_rstw_var_active('tn'  ) 
    424         CALL iom_set_rstw_var_active('sn'  ) 
    425         CALL iom_set_rstw_var_active('sshn') 
    426         CALL iom_set_rstw_var_active('rhop') 
    427       ENDIF 
    428       IF(ln_diurnal) CALL iom_set_rstw_var_active('Dsst') 
    429 !from trasbc.F90 
    430          CALL iom_set_rstw_var_active('sbc_hc_b') 
    431          CALL iom_set_rstw_var_active('sbc_sc_b') 
    432    ENDIF 
    433 #else 
    434         clinfo = 'iom_set_rstw_core: key_iomput is needed to use XIOS restart read/write functionality' 
    435         CALL ctl_stop('STOP', TRIM(clinfo)) 
    436 #endif 
    437    END SUBROUTINE iom_set_rstw_core 
    438  
    439    SUBROUTINE iom_set_rst_vars(fields) 
    440       !!--------------------------------------------------------------------- 
    441       !!                   ***  SUBROUTINE iom_set_rst_vars   *** 
    442       !! 
    443       !! ** Purpose :  Fill array fields with the information about all  
    444       !!               possible variables and corresponding grids definition  
    445       !!               for reading/writing restart with XIOS 
    446       !!--------------------------------------------------------------------- 
    447    TYPE(RST_FIELD), INTENT(INOUT) :: fields(max_rst_fields) 
    448    INTEGER :: i 
    449  
    450         i = 0 
    451         i = i + 1; fields(i)%vname="rdt";            fields(i)%grid="grid_scalar" 
    452         i = i + 1; fields(i)%vname="un";             fields(i)%grid="grid_N_3D" 
    453         i = i + 1; fields(i)%vname="ub";             fields(i)%grid="grid_N_3D" 
    454         i = i + 1; fields(i)%vname="vn";             fields(i)%grid="grid_N_3D" 
    455         i = i + 1; fields(i)%vname="vb";             fields(i)%grid="grid_N_3D"   
    456         i = i + 1; fields(i)%vname="tn";             fields(i)%grid="grid_N_3D" 
    457         i = i + 1; fields(i)%vname="tb";             fields(i)%grid="grid_N_3D" 
    458         i = i + 1; fields(i)%vname="sn";             fields(i)%grid="grid_N_3D" 
    459         i = i + 1; fields(i)%vname="sb";             fields(i)%grid="grid_N_3D" 
    460         i = i + 1; fields(i)%vname="sshn";           fields(i)%grid="grid_N" 
    461         i = i + 1; fields(i)%vname="sshb";           fields(i)%grid="grid_N" 
    462         i = i + 1; fields(i)%vname="rhop";           fields(i)%grid="grid_N_3D" 
    463         i = i + 1; fields(i)%vname="kt";             fields(i)%grid="grid_scalar" 
    464         i = i + 1; fields(i)%vname="ndastp";         fields(i)%grid="grid_scalar" 
    465         i = i + 1; fields(i)%vname="adatrj";         fields(i)%grid="grid_scalar" 
    466         i = i + 1; fields(i)%vname="utau_b";         fields(i)%grid="grid_N" 
    467         i = i + 1; fields(i)%vname="vtau_b";         fields(i)%grid="grid_N" 
    468         i = i + 1; fields(i)%vname="qns_b";          fields(i)%grid="grid_N" 
    469         i = i + 1; fields(i)%vname="emp_b";          fields(i)%grid="grid_N" 
    470         i = i + 1; fields(i)%vname="sfx_b";          fields(i)%grid="grid_N" 
    471         i = i + 1; fields(i)%vname="en" ;            fields(i)%grid="grid_N_3D"  
    472         i = i + 1; fields(i)%vname="avt_k";            fields(i)%grid="grid_N_3D" 
    473         i = i + 1; fields(i)%vname="avm_k";            fields(i)%grid="grid_N_3D" 
    474         i = i + 1; fields(i)%vname="dissl";          fields(i)%grid="grid_N_3D" 
    475         i = i + 1; fields(i)%vname="sbc_hc_b";       fields(i)%grid="grid_N" 
    476         i = i + 1; fields(i)%vname="sbc_sc_b";       fields(i)%grid="grid_N" 
    477         i = i + 1; fields(i)%vname="qsr_hc_b";       fields(i)%grid="grid_N_3D" 
    478         i = i + 1; fields(i)%vname="fraqsr_1lev";    fields(i)%grid="grid_N" 
    479         i = i + 1; fields(i)%vname="frc_v";          fields(i)%grid="grid_scalar" 
    480         i = i + 1; fields(i)%vname="frc_t";          fields(i)%grid="grid_scalar" 
    481         i = i + 1; fields(i)%vname="frc_s";          fields(i)%grid="grid_scalar" 
    482         i = i + 1; fields(i)%vname="frc_wn_t";       fields(i)%grid="grid_scalar" 
    483         i = i + 1; fields(i)%vname="frc_wn_s";       fields(i)%grid="grid_scalar" 
    484         i = i + 1; fields(i)%vname="ssh_ini";        fields(i)%grid="grid_N" 
    485         i = i + 1; fields(i)%vname="e3t_ini";        fields(i)%grid="grid_N_3D" 
    486         i = i + 1; fields(i)%vname="hc_loc_ini";     fields(i)%grid="grid_N_3D" 
    487         i = i + 1; fields(i)%vname="sc_loc_ini";     fields(i)%grid="grid_N_3D" 
    488         i = i + 1; fields(i)%vname="ssh_hc_loc_ini"; fields(i)%grid="grid_N" 
    489         i = i + 1; fields(i)%vname="ssh_sc_loc_ini"; fields(i)%grid="grid_N" 
    490         i = i + 1; fields(i)%vname="tilde_e3t_b";    fields(i)%grid="grid_N" 
    491         i = i + 1; fields(i)%vname="tilde_e3t_n";    fields(i)%grid="grid_N" 
    492         i = i + 1; fields(i)%vname="hdiv_lf";        fields(i)%grid="grid_N" 
    493         i = i + 1; fields(i)%vname="ub2_b";          fields(i)%grid="grid_N" 
    494         i = i + 1; fields(i)%vname="vb2_b";          fields(i)%grid="grid_N" 
    495         i = i + 1; fields(i)%vname="sshbb_e";        fields(i)%grid="grid_N" 
    496         i = i + 1; fields(i)%vname="ubb_e";          fields(i)%grid="grid_N" 
    497         i = i + 1; fields(i)%vname="vbb_e";          fields(i)%grid="grid_N" 
    498         i = i + 1; fields(i)%vname="sshb_e";         fields(i)%grid="grid_N" 
    499         i = i + 1; fields(i)%vname="ub_e";           fields(i)%grid="grid_N" 
    500         i = i + 1; fields(i)%vname="vb_e";           fields(i)%grid="grid_N" 
    501         i = i + 1; fields(i)%vname="fwf_isf_b";      fields(i)%grid="grid_N" 
    502         i = i + 1; fields(i)%vname="isf_sc_b";       fields(i)%grid="grid_N" 
    503         i = i + 1; fields(i)%vname="isf_hc_b";       fields(i)%grid="grid_N" 
    504         i = i + 1; fields(i)%vname="ssh_ibb";        fields(i)%grid="grid_N" 
    505         i = i + 1; fields(i)%vname="rnf_b";          fields(i)%grid="grid_N" 
    506         i = i + 1; fields(i)%vname="rnf_hc_b";       fields(i)%grid="grid_N" 
    507         i = i + 1; fields(i)%vname="rnf_sc_b";       fields(i)%grid="grid_N" 
    508         i = i + 1; fields(i)%vname="nn_fsbc";        fields(i)%grid="grid_scalar" 
    509         i = i + 1; fields(i)%vname="ssu_m";          fields(i)%grid="grid_N" 
    510         i = i + 1; fields(i)%vname="ssv_m";          fields(i)%grid="grid_N" 
    511         i = i + 1; fields(i)%vname="sst_m";          fields(i)%grid="grid_N" 
    512         i = i + 1; fields(i)%vname="sss_m";          fields(i)%grid="grid_N" 
    513         i = i + 1; fields(i)%vname="ssh_m";          fields(i)%grid="grid_N" 
    514         i = i + 1; fields(i)%vname="e3t_m";          fields(i)%grid="grid_N" 
    515         i = i + 1; fields(i)%vname="frq_m";          fields(i)%grid="grid_N" 
    516         i = i + 1; fields(i)%vname="avmb";           fields(i)%grid="grid_vector" 
    517         i = i + 1; fields(i)%vname="avtb";           fields(i)%grid="grid_vector" 
    518         i = i + 1; fields(i)%vname="ub2_i_b";        fields(i)%grid="grid_N" 
    519         i = i + 1; fields(i)%vname="vb2_i_b";        fields(i)%grid="grid_N" 
    520         i = i + 1; fields(i)%vname="ntime";          fields(i)%grid="grid_scalar" 
    521         i = i + 1; fields(i)%vname="Dsst";           fields(i)%grid="grid_scalar" 
    522         i = i + 1; fields(i)%vname="tmask";          fields(i)%grid="grid_N_3D" 
    523         i = i + 1; fields(i)%vname="umask";          fields(i)%grid="grid_N_3D" 
    524         i = i + 1; fields(i)%vname="vmask";          fields(i)%grid="grid_N_3D" 
    525         i = i + 1; fields(i)%vname="smask";          fields(i)%grid="grid_N_3D" 
    526         i = i + 1; fields(i)%vname="gdepw_n";        fields(i)%grid="grid_N_3D" 
    527         i = i + 1; fields(i)%vname="e3t_n";          fields(i)%grid="grid_N_3D" 
    528         i = i + 1; fields(i)%vname="e3u_n";          fields(i)%grid="grid_N_3D" 
    529         i = i + 1; fields(i)%vname="e3v_n";          fields(i)%grid="grid_N_3D" 
    530         i = i + 1; fields(i)%vname="surf_ini";       fields(i)%grid="grid_N" 
    531         i = i + 1; fields(i)%vname="e3t_b";          fields(i)%grid="grid_N_3D" 
    532         i = i + 1; fields(i)%vname="hmxl_n";         fields(i)%grid="grid_N_3D" 
    533         i = i + 1; fields(i)%vname="un_bf";          fields(i)%grid="grid_N" 
    534         i = i + 1; fields(i)%vname="vn_bf";          fields(i)%grid="grid_N" 
    535         i = i + 1; fields(i)%vname="hbl";            fields(i)%grid="grid_N" 
    536         i = i + 1; fields(i)%vname="hbli";           fields(i)%grid="grid_N" 
    537         i = i + 1; fields(i)%vname="wn";             fields(i)%grid="grid_N_3D" 
    538         i = i + 1; fields(i)%vname="fwfisf_cav_b";   fields(i)%grid="grid_N" 
    539         i = i + 1; fields(i)%vname="isf_hc_cav_b";   fields(i)%grid="grid_N" 
    540         i = i + 1; fields(i)%vname="isf_sc_cav_b";   fields(i)%grid="grid_N" 
    541  
    542         IF( i-1 > max_rst_fields) THEN 
    543            WRITE(ctmp1,*) 'E R R O R : iom_set_rst_vars SIZE of RST_FIELD array is too small' 
    544            CALL ctl_stop( 'iom_set_rst_vars:', ctmp1 ) 
    545         ENDIF 
    546    END SUBROUTINE iom_set_rst_vars 
    547  
    548  
    549    SUBROUTINE iom_set_rstw_active(cdrst_file) 
    550       !!--------------------------------------------------------------------- 
    551       !!                   ***  SUBROUTINE iom_set_rstw_active   *** 
    552       !! 
    553       !! ** Purpose :  define file name in XIOS context for writing restart 
    554       !!               enable variables present in restart file for writing 
    555       !!--------------------------------------------------------------------- 
    556 !sets enabled = .TRUE. for each field in restart file 
    557427   CHARACTER(len=*) :: cdrst_file 
    558428#if defined key_iomput 
    559    TYPE(xios_field) :: field_hdl 
    560429   TYPE(xios_file) :: file_hdl 
    561430   TYPE(xios_filegroup) :: filegroup_hdl 
     
    577446        ENDIF  
    578447        CALL xios_set_file_attr( "wrestart", name=trim(cdrst_file)) 
     448#endif 
     449   END SUBROUTINE iom_set_rstw_file 
     450 
     451 
     452   SUBROUTINE iom_set_rstw_active(sdfield, rd0, rd1, rd2, rd3) 
     453      !!--------------------------------------------------------------------- 
     454      !!                   ***  SUBROUTINE iom_set_rstw_active   *** 
     455      !! 
     456      !! ** Purpose :  define file name in XIOS context for writing restart 
     457      !!               enable variables present in restart file for writing 
     458      !!--------------------------------------------------------------------- 
     459!sets enabled = .TRUE. for each field in restart file 
     460   CHARACTER(len = *), INTENT(IN)                     :: sdfield 
     461   REAL(wp), OPTIONAL, INTENT(IN)                     :: rd0 
     462   REAL(wp), OPTIONAL, INTENT(IN), DIMENSION(:)       :: rd1 
     463   REAL(wp), OPTIONAL, INTENT(IN), DIMENSION(:, :)    :: rd2 
     464   REAL(wp), OPTIONAL, INTENT(IN), DIMENSION(:, :, :) :: rd3   
     465#if defined key_iomput 
     466   TYPE(xios_field) :: field_hdl 
     467   TYPE(xios_file) :: file_hdl 
     468   INTEGER :: i 
     469   CHARACTER(lc)  ::   clpath 
     470   CHARACTER(len=1024) :: fname 
     471   CHARACTER(len=lc)   :: axis_ref 
     472 
     473        CALL xios_get_handle("wrestart", file_hdl) 
     474!       CALL xios_get_file_attr("wrestart", name = fname ) 
     475!       IF(lwp) write(numout, *) TRIM(fname), ' File to write' 
     476!       IF(lwp) call flush(numout) 
    579477!define fields for restart context 
    580         DO i = 1, max_rst_fields 
    581          IF( rst_wfields(i)%active ) THEN 
    582                 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_wfields(i)%vname)) 
    583                 SELECT CASE (TRIM(rst_wfields(i)%grid)) 
    584                  CASE ("grid_N_3D") 
    585                     CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 
    586                         domain_ref="grid_N", axis_ref="nav_lev", prec = 8, operation = "instant") 
    587                  CASE ("grid_N") 
    588                     CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 
    589                         domain_ref="grid_N", prec = 8, operation = "instant")  
    590                  CASE ("grid_vector") 
    591                     CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 
    592                          axis_ref="nav_lev", prec = 8, operation = "instant") 
    593                  CASE ("grid_scalar") 
    594                     CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 
    595                         scalar_ref = "grid_scalar", prec = 8, operation = "instant") 
    596                 END SELECT 
    597          ENDIF 
    598         END DO 
     478        CALL xios_add_child(file_hdl, field_hdl, TRIM(sdfield)) 
     479 
     480        IF(PRESENT(rd3)) THEN 
     481               CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(sdfield),   & 
     482                            domain_ref="grid_N", axis_ref=TRIM(iom_axis(size(rd3, 3))), & 
     483                            prec = 8, operation = "instant") 
     484        ENDIF 
     485 
     486        IF(PRESENT(rd2)) THEN 
     487               CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(sdfield), & 
     488                                   domain_ref="grid_N", prec = 8, operation = "instant")  
     489        ENDIF 
     490 
     491        IF(PRESENT(rd1)) THEN 
     492               CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(sdfield), & 
     493                                   axis_ref=TRIM(iom_axis(size(rd1, 1))), prec = 8, operation = "instant") 
     494        ENDIF 
     495 
     496        IF(PRESENT(rd0)) THEN 
     497               CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(sdfield), & 
     498                                         scalar_ref = "grid_scalar", prec = 8, operation = "instant") 
     499        ENDIF 
    599500#endif 
    600501   END SUBROUTINE iom_set_rstw_active 
     502 
     503   FUNCTION iom_axis(idlev) result(axis_ref) 
     504     !!--------------------------------------------------------------------- 
     505      !!                   ***  FUNCTION  iom_axis  *** 
     506      !! 
     507      !! ** Purpose : Used for grid definition when XIOS is used to read/write 
     508      !!              restart. Returns axis corresponding to the number of levels 
     509      !!              given as an input variable. Axes are defined in routine  
     510      !!              iom_set_rst_context 
     511      !!--------------------------------------------------------------------- 
     512    INTEGER, INTENT(IN) :: idlev 
     513    CHARACTER(len=lc)   :: axis_ref 
     514    CHARACTER(len=12)   :: str 
     515       IF(idlev == jpk) THEN 
     516         axis_ref="nav_lev" 
     517#if defined key_si3 
     518       ELSEIF(idlev == jpl) THEN 
     519         axis_ref="numcat" 
     520#endif          
     521       ELSE 
     522         write(str, *) idlev 
     523         CALL ctl_stop( 'iom_axis', 'Definition for axis with '//TRIM(ADJUSTL(str))//' levels missing') 
     524       ENDIF 
     525   END FUNCTION iom_axis 
    601526 
    602527   SUBROUTINE iom_set_rst_context(ld_rstr)  
     
    609534      !!--------------------------------------------------------------------- 
    610535   LOGICAL, INTENT(IN)               :: ld_rstr 
    611 !ld_rstr is true for restart context. There is no need to define grid for  
    612 !restart read, because it's read from file 
     536   INTEGER :: ji 
    613537#if defined key_iomput 
    614538   TYPE(xios_domaingroup)            :: domaingroup_hdl  
     
    629553     CALL xios_set_axis_attr( "nav_lev", long_name="Vertical levels in meters", positive="down") 
    630554     CALL iom_set_axis_attr( "nav_lev", paxis = gdept_1d )  
     555#if defined key_si3 
     556     CALL xios_add_child(axisgroup_hdl, axis_hdl, "numcat") 
     557     CALL iom_set_axis_attr( "numcat", (/ (REAL(ji,wp), ji=1,jpl) /) ) 
     558#endif 
    631559 
    632560     CALL xios_get_handle("scalar_definition", scalargroup_hdl)  
     
    974902#if defined key_iomput 
    975903         IF(lwp) WRITE(numout,*) 'XIOS RST READ (0D): ', trim(cdvar) 
    976          CALL iom_swap( TRIM(crxios_context) ) 
    977904         CALL xios_recv_field( trim(cdvar), pvar) 
    978          CALL iom_swap( TRIM(cxios_context) ) 
    979905#else 
    980906         WRITE(ctmp1,*) 'Can not use XIOS in iom_g0d, file: '//trim(clname)//', var:'//trim(cdvar) 
     
    13271253#if defined key_iomput 
    13281254!would be good to be able to check which context is active and swap only if current is not restart 
    1329          CALL iom_swap( TRIM(crxios_context) )  
    13301255         IF( PRESENT(pv_r3d) ) THEN 
    13311256            pv_r3d(:, :, :) = 0. 
     
    13471272            CALL xios_recv_field( trim(cdvar), pv_r1d) 
    13481273         ENDIF 
    1349          CALL iom_swap( TRIM(cxios_context) ) 
    13501274#else 
    13511275         istop = istop + 1  
     
    15611485          IF(lwp) write(numout,*) 'RESTART: write (XIOS 0D) ',trim(cdvar) 
    15621486          CALL xios_send_field(trim(cdvar), pvar) 
     1487      ELSE 
     1488          IF(lwp) write(numout,*) 'RESTART: define (XIOS 0D) ',trim(cdvar) 
     1489          CALL iom_set_rstw_active( trim(cdvar), rd0 = pvar )  
    15631490      ENDIF 
    15641491#endif 
     
    15911518         IF(lwp) write(numout,*) 'RESTART: write (XIOS 1D) ',trim(cdvar) 
    15921519         CALL xios_send_field(trim(cdvar), pvar) 
     1520      ELSE 
     1521         IF(lwp) write(numout,*) 'RESTART: define (XIOS 1D) ',trim(cdvar) 
     1522         CALL iom_set_rstw_active( trim(cdvar), rd1 = pvar )  
    15931523      ENDIF 
    15941524#endif 
     
    16211551         IF(lwp) write(numout,*) 'RESTART: write (XIOS 2D) ',trim(cdvar) 
    16221552         CALL xios_send_field(trim(cdvar), pvar) 
     1553      ELSE 
     1554         IF(lwp) write(numout,*) 'RESTART: define (XIOS 2D) ',trim(cdvar) 
     1555         CALL iom_set_rstw_active( trim(cdvar), rd2 = pvar )  
    16231556      ENDIF 
    16241557#endif 
     
    16511584         IF(lwp) write(numout,*) 'RESTART: write (XIOS 3D) ',trim(cdvar) 
    16521585         CALL xios_send_field(trim(cdvar), pvar) 
     1586      ELSE 
     1587         IF(lwp) write(numout,*) 'RESTART: define (XIOS 3D) ',trim(cdvar) 
     1588         CALL iom_set_rstw_active( trim(cdvar), rd3 = pvar ) 
    16531589      ENDIF 
    16541590#endif 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/IOM/iom_def.F90

    r12914 r12950  
    99   !!---------------------------------------------------------------------- 
    1010   USE par_kind 
     11   USE netcdf 
    1112 
    1213   IMPLICIT NONE 
     
    6768   END TYPE file_descriptor 
    6869   TYPE(file_descriptor), DIMENSION(jpmax_files), PUBLIC ::   iom_file !: array containing the info for all opened files 
    69    INTEGER, PARAMETER, PUBLIC                   :: max_rst_fields = 105 !: maximum number of restart variables defined in iom_set_rst_vars 
    70    TYPE, PUBLIC :: RST_FIELD   
    71     CHARACTER(len=30) :: vname = "NO_NAME" ! names of variables in restart file 
    72     CHARACTER(len=30) :: grid = "NO_GRID" 
    73     LOGICAL           :: active =.FALSE. ! for restart write only: true - write field, false do not write field 
    74    END TYPE RST_FIELD 
     70!metadata in restart file for restart read with XIOS 
     71   INTEGER, PUBLIC, PARAMETER :: NMETA = 10 
     72   CHARACTER(LEN=nf90_max_name), PUBLIC :: meta(NMETA) 
    7573!$AGRIF_END_DO_NOT_TREAT 
    76    ! 
    77    TYPE(RST_FIELD), PUBLIC, SAVE :: rst_wfields(max_rst_fields), rst_rfields(max_rst_fields) 
    7874   ! 
    7975   !! * Substitutions 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/IOM/iom_nf90.F90

    r12649 r12950  
    3131   PUBLIC iom_nf90_open  , iom_nf90_close, iom_nf90_varid, iom_nf90_get, iom_nf90_rstput 
    3232   PUBLIC iom_nf90_chkatt, iom_nf90_getatt, iom_nf90_putatt 
     33   PUBLIC iom_nf90_check 
    3334 
    3435   INTERFACE iom_nf90_get 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/IOM/restart.F90

    r12489 r12950  
    116116                  clpname = TRIM(Agrif_CFixed())//"_"//clname    
    117117               ENDIF 
    118                CALL iom_init( cwxios_context, TRIM(clpath)//TRIM(clpname), .false. ) 
    119                CALL xios_update_calendar(nitrst) 
     118               CALL iom_init( cwxios_context, TRIM(clpath)//TRIM(clpname), .false., ld_closedef = .FALSE. ) 
    120119               CALL iom_swap(      cxios_context          ) 
    121120#else 
     
    214213             IF( .NOT.lxios_set ) THEN 
    215214                 IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS' 
    216                  CALL iom_init( crxios_context, ld_tmppatch = .false. ) 
     215                 CALL iom_init( crxios_context, ld_tmppatch = .TRUE. ) 
    217216                 lxios_set = .TRUE. 
    218217             ENDIF 
    219218         ENDIF 
    220219         IF( TRIM(Agrif_CFixed()) /= '0' .AND. lrxios) THEN 
    221              CALL iom_init( crxios_context, ld_tmppatch = .false. ) 
     220             CALL iom_init( crxios_context, ld_tmppatch = .TRUE. ) 
    222221             IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS for AGRIF' 
    223222             lxios_set = .TRUE. 
     
    245244 
    246245      ! Check dynamics and tracer time-step consistency and force Euler restart if changed 
     246      IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    247247      IF( iom_varid( numror, 'rdt', ldstop = .FALSE. ) > 0 )   THEN 
    248248         CALL iom_get( numror, 'rdt', zrdt, ldxios = lrxios ) 
     
    268268         RETURN  
    269269      ENDIF   
    270        
     270 
    271271      IF( iom_varid( numror, 'ub', ldstop = .FALSE. ) > 0 ) THEN 
    272272         CALL iom_get( numror, jpdom_autoglo, 'ub'     , uu(:,:,:       ,Kbb), ldxios = lrxios )   ! before fields 
     
    289289         CALL eos( ts(:,:,:,:,Kmm), rhd, rhop, gdept(:,:,:,Kmm) )    
    290290      ENDIF 
     291      IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    291292      ! 
    292293      IF( l_1st_euler ) THEN                                  ! Euler restart  
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/ISF/isfcav.F90

    r12914 r12950  
    187187      !================ 
    188188      ! 
    189       IF( lwxios ) THEN 
    190          CALL iom_set_rstw_var_active('fwfisf_cav_b') 
    191          CALL iom_set_rstw_var_active('isf_hc_cav_b') 
    192          CALL iom_set_rstw_var_active('isf_sc_cav_b') 
    193       ENDIF 
    194       ! 
    195189      !================ 
    196190      ! 3: read restart 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/ISF/isfcpl.F90

    r12489 r12950  
    114114      e3t(:,:,:,Kbb)   = e3t(:,:,:,Kmm) 
    115115  
    116       ! prepare writing restart 
    117       IF( lwxios ) THEN 
    118          CALL iom_set_rstw_var_active('ssmask') 
    119          CALL iom_set_rstw_var_active('tmask') 
    120          CALL iom_set_rstw_var_active('e3t_n') 
    121          CALL iom_set_rstw_var_active('e3u_n') 
    122          CALL iom_set_rstw_var_active('e3v_n') 
    123       END IF 
    124       ! 
    125116   END SUBROUTINE isfcpl_init 
    126117   !  
     
    166157      !!---------------------------------------------------------------------- 
    167158      ! 
     159      IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    168160      CALL iom_get( numror, jpdom_autoglo, 'ssmask'  , zssmask_b, ldxios = lrxios   ) ! need to extrapolate T/S 
     161      IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    169162 
    170163      ! compute new ssh if we open a full water column  
     
    245238      !!---------------------------------------------------------------------- 
    246239      !  
     240      IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    247241      CALL iom_get( numror, jpdom_autoglo, 'tmask'  , ztmask_b, ldxios = lrxios   ) ! need to extrapolate T/S 
    248242      !CALL iom_get( numror, jpdom_autoglo, 'wmask'  , zwmask_b, ldxios = lrxios   ) ! need to extrapolate T/S 
    249243      !CALL iom_get( numror, jpdom_autoglo, 'gdepw_n', zdepw_b(:,:,:), ldxios = lrxios ) ! need to interpol vertical profile (vvl) 
     244      IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    250245      ! 
    251246      !  
     
    391386      !!---------------------------------------------------------------------- 
    392387      ! 
     388      IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    393389      CALL iom_get( numror, jpdom_autoglo, 'tmask'  , ztmask_b, ldxios = lrxios ) 
    394390      CALL iom_get( numror, jpdom_autoglo, 'e3u_n'  , ze3u_b  , ldxios = lrxios ) 
    395391      CALL iom_get( numror, jpdom_autoglo, 'e3v_n'  , ze3v_b  , ldxios = lrxios ) 
     392      IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    396393      ! 
    397394      ! 1.0: compute horizontal volume flux divergence difference before-after coupling 
     
    495492 
    496493      ! get restart variable 
     494      IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    497495      CALL iom_get( numror, jpdom_autoglo, 'tmask'  , ztmask_b(:,:,:), ldxios = lrxios   ) ! need to extrapolate T/S 
    498496      CALL iom_get( numror, jpdom_autoglo, 'e3t_n'  , ze3t_b(:,:,:)  , ldxios = lrxios ) 
    499497      CALL iom_get( numror, jpdom_autoglo, 'tn'     , zt_b(:,:,:)    , ldxios = lrxios ) 
    500498      CALL iom_get( numror, jpdom_autoglo, 'sn'     , zs_b(:,:,:)    , ldxios = lrxios ) 
     499      IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    501500 
    502501      ! compute run length 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/ISF/isfrst.F90

    r11931 r12950  
    5353      IF( iom_varid( numror, cfwf_b, ldstop = .FALSE. ) > 0 ) THEN 
    5454         IF(lwp) WRITE(numout,*) '          nit000-1 isf tracer content forcing fields read in the restart file' 
     55         IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    5556         CALL iom_get( numror, jpdom_autoglo, cfwf_b, pfwf_b(:,:)        , ldxios = lrxios )   ! before ice shelf melt 
    5657         CALL iom_get( numror, jpdom_autoglo, chc_b , ptsc_b (:,:,jp_tem), ldxios = lrxios )   ! before ice shelf heat flux 
    5758         CALL iom_get( numror, jpdom_autoglo, csc_b , ptsc_b (:,:,jp_sal), ldxios = lrxios )   ! before ice shelf heat flux 
     59         IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    5860      ELSE 
    5961         pfwf_b(:,:)   = pfwf(:,:) 
     
    6163      ENDIF 
    6264      ! 
    63       IF( lwxios ) THEN 
    64          CALL iom_set_rstw_var_active(TRIM(chc_b )) 
    65          CALL iom_set_rstw_var_active(TRIM(csc_b )) 
    66          CALL iom_set_rstw_var_active(TRIM(cfwf_b)) 
    67       ENDIF 
    68  
    6965   END SUBROUTINE isfrst_read 
    7066   !  
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/SBC/sbcapr.F90

    r12489 r12950  
    108108            CALL ctl_warn( 'sbc_apr: use inverse barometer ssh at open boundary ONLY requires ln_apr_dyn=T' ) 
    109109      ! 
    110       IF( lwxios ) THEN 
    111          CALL iom_set_rstw_var_active('ssh_ibb') 
    112       ENDIF 
    113110   END SUBROUTINE sbc_apr_init 
    114111 
     
    152149         !                                      ! ---------------------------------------- ! 
    153150         !                                            !* Restart: read in restart file 
     151         IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    154152         IF( ln_rstart .AND. iom_varid( numror, 'ssh_ibb', ldstop = .FALSE. ) > 0 ) THEN  
    155153            IF(lwp) WRITE(numout,*) 'sbc_apr:   ssh_ibb read in the restart file' 
     
    160158            ssh_ibb(:,:) = ssh_ib(:,:) 
    161159         ENDIF 
     160         IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    162161      ENDIF 
    163162      !                                         ! ---------------------------------------- ! 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/SBC/sbcmod.F90

    r12489 r12950  
    366366      IF( ln_wave     )   CALL sbc_wave_init                     ! surface wave initialisation 
    367367      ! 
    368       IF( lwxios ) THEN 
    369          CALL iom_set_rstw_var_active('utau_b') 
    370          CALL iom_set_rstw_var_active('vtau_b') 
    371          CALL iom_set_rstw_var_active('qns_b') 
    372          ! The 3D heat content due to qsr forcing is treated in traqsr 
    373          ! CALL iom_set_rstw_var_active('qsr_b') 
    374          CALL iom_set_rstw_var_active('emp_b') 
    375          CALL iom_set_rstw_var_active('sfx_b') 
    376       ENDIF 
    377  
    378368   END SUBROUTINE sbc_init 
    379369 
     
    514504      IF( kt == nit000 ) THEN                          !   set the forcing field at nit000 - 1    ! 
    515505         !                                             ! ---------------------------------------- ! 
     506         IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    516507         IF( ln_rstart .AND.    &                               !* Restart: read in restart file 
    517508            & iom_varid( numror, 'utau_b', ldstop = .FALSE. ) > 0 ) THEN 
     
    537528            sfx_b (:,:) = sfx (:,:) 
    538529         ENDIF 
     530         IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    539531      ENDIF 
    540532      !                                                ! ---------------------------------------- ! 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/SBC/sbcrnf.F90

    r12489 r12950  
    156156      IF( kt == nit000 ) THEN                          !   set the forcing field at nit000 - 1    ! 
    157157         !                                             ! ---------------------------------------- ! 
     158         IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    158159         IF( ln_rstart .AND.    &                               !* Restart: read in restart file 
    159160            & iom_varid( numror, 'rnf_b', ldstop = .FALSE. ) > 0 ) THEN 
     
    167168            rnf_tsc_b(:,:,:) = rnf_tsc(:,:,:) 
    168169         ENDIF 
     170         IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    169171      ENDIF 
    170172      !                                                ! ---------------------------------------- ! 
     
    479481      ENDIF 
    480482      ! 
    481       IF( lwxios ) THEN 
    482          CALL iom_set_rstw_var_active('rnf_b') 
    483          CALL iom_set_rstw_var_active('rnf_hc_b') 
    484          CALL iom_set_rstw_var_active('rnf_sc_b') 
    485       ENDIF 
    486  
    487483   END SUBROUTINE sbc_rnf_init 
    488484 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/SBC/sbcssm.F90

    r12377 r12950  
    205205         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~ ' 
    206206         ! 
     207         IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    207208         IF( ln_rstart .AND. iom_varid( numror, 'nn_fsbc', ldstop = .FALSE. ) > 0 ) THEN 
    208209            l_ssm_mean = .TRUE. 
     
    235236            ENDIF 
    236237         ENDIF 
     238         IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    237239      ENDIF 
    238240      ! 
     
    254256      IF( .NOT. ln_traqsr )   fraqsr_1lev(:,:) = 1._wp   ! default definition: qsr 100% in the fisrt level  
    255257      ! 
    256       IF( lwxios.AND.nn_fsbc > 1 ) THEN 
    257          CALL iom_set_rstw_var_active('nn_fsbc') 
    258          CALL iom_set_rstw_var_active('ssu_m') 
    259          CALL iom_set_rstw_var_active('ssv_m') 
    260          CALL iom_set_rstw_var_active('sst_m') 
    261          CALL iom_set_rstw_var_active('sss_m') 
    262          CALL iom_set_rstw_var_active('ssh_m') 
    263          CALL iom_set_rstw_var_active('e3t_m') 
    264          CALL iom_set_rstw_var_active('frq_m') 
    265       ENDIF 
    266  
    267258   END SUBROUTINE sbc_ssm_init 
    268259 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/TRA/traqsr.F90

    r12489 r12950  
    135135      !                         !-----------------------------------! 
    136136      IF( kt == nit000 ) THEN          !==  1st time step  ==! 
     137         IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    137138         IF( ln_rstart .AND. iom_varid( numror, 'qsr_hc_b', ldstop = .FALSE. ) > 0  .AND. .NOT.l_1st_euler ) THEN    ! read in restart 
    138139            IF(lwp) WRITE(numout,*) '          nit000-1 qsr tracer content forcing field read in the restart file' 
     
    143144            qsr_hc_b(:,:,:) = 0._wp 
    144145         ENDIF 
     146         IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    145147      ELSE                             !==  Swap of qsr heat content  ==! 
    146148         z1_2 = 0.5_wp 
     
    401403      ! 
    402404      ! 1st ocean level attenuation coefficient (used in sbcssm) 
     405      IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    403406      IF( iom_varid( numror, 'fraqsr_1lev', ldstop = .FALSE. ) > 0 ) THEN 
    404407         CALL iom_get( numror, jpdom_autoglo, 'fraqsr_1lev'  , fraqsr_1lev, ldxios = lrxios  ) 
     
    406409         fraqsr_1lev(:,:) = 1._wp   ! default : no penetration 
    407410      ENDIF 
    408       ! 
    409       IF( lwxios ) THEN 
    410          CALL iom_set_rstw_var_active('qsr_hc_b') 
    411          CALL iom_set_rstw_var_active('fraqsr_1lev') 
    412       ENDIF 
     411      IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    413412      ! 
    414413   END SUBROUTINE tra_qsr_init 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/TRA/trasbc.F90

    r12489 r12950  
    106106      !                             !==  Set before sbc tracer content fields  ==! 
    107107      IF( kt == nit000 ) THEN             !* 1st time-step 
     108         IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    108109         IF( ln_rstart .AND.    &               ! Restart: read in restart file 
    109110              & iom_varid( numror, 'sbc_hc_b', ldstop = .FALSE. ) > 0 ) THEN 
     
    118119            sbc_tsc_b(:,:,:) = 0._wp 
    119120         ENDIF 
     121         IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    120122      ELSE                                !* other time-steps: swap of forcing fields 
    121123         zfact = 0.5_wp 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/ZDF/zdfgls.F90

    r12489 r12950  
    10251025      CALL gls_rst( nit000, 'READ' )      ! (en, avt_k, avm_k, hmxl_n) 
    10261026      ! 
    1027       IF( lwxios ) THEN 
    1028          CALL iom_set_rstw_var_active('en') 
    1029          CALL iom_set_rstw_var_active('avt_k') 
    1030          CALL iom_set_rstw_var_active('avm_k') 
    1031          CALL iom_set_rstw_var_active('hmxl_n') 
    1032       ENDIF 
    1033       ! 
    10341027   END SUBROUTINE zdf_gls_init 
    10351028 
     
    10591052         !                                   ! --------------- 
    10601053         IF( ln_rstart ) THEN                   !* Read the restart file 
     1054            IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    10611055            id1 = iom_varid( numror, 'en'    , ldstop = .FALSE. ) 
    10621056            id2 = iom_varid( numror, 'avt_k' , ldstop = .FALSE. ) 
     
    10761070               ! avt_k, avm_k already set to the background value in zdf_phy_init 
    10771071            ENDIF 
     1072            IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    10781073         ELSE                                   !* Start from rest 
    10791074            IF(lwp) WRITE(numout,*) 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/ZDF/zdfosm.F90

    r12489 r12950  
    14241424     ghamv(:,:,:) = 0. 
    14251425     ! 
    1426      IF( lwxios ) THEN 
    1427         CALL iom_set_rstw_var_active('wn') 
    1428         CALL iom_set_rstw_var_active('hbl') 
    1429         CALL iom_set_rstw_var_active('hbli') 
    1430      ENDIF 
    14311426   END SUBROUTINE zdf_osm_init 
    14321427 
     
    14591454     !!----------------------------------------------------------------------------- 
    14601455     IF( TRIM(cdrw) == 'READ'.AND. ln_rstart) THEN 
     1456        IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    14611457        id1 = iom_varid( numror, 'wn'   , ldstop = .FALSE. ) 
    14621458        IF( id1 > 0 ) THEN                       ! 'wn' exists; read 
     
    14731469           CALL iom_get( numror, jpdom_autoglo, 'hbli', hbli, ldxios = lrxios  ) 
    14741470           WRITE(numout,*) ' ===>>>> :  hbl & hbli read from restart file' 
     1471           IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    14751472           RETURN 
    14761473        ELSE                      ! 'hbl' & 'hbli' not in restart file, recalculate 
    14771474           WRITE(numout,*) ' ===>>>> : previous run without osmosis scheme, hbl computed from stratification' 
    14781475        END IF 
     1476        IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    14791477     END IF 
    14801478 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/ZDF/zdfric.F90

    r12489 r12950  
    103103      CALL ric_rst( nit000, 'READ' )  !* read or initialize all required files 
    104104      ! 
    105       IF( lwxios ) THEN 
    106          CALL iom_set_rstw_var_active('avt_k') 
    107          CALL iom_set_rstw_var_active('avm_k') 
    108       ENDIF 
    109105   END SUBROUTINE zdf_ric_init 
    110106 
     
    210206         !           !* Read the restart file 
    211207         IF( ln_rstart ) THEN 
     208            IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    212209            id1 = iom_varid( numror, 'avt_k', ldstop = .FALSE. ) 
    213210            id2 = iom_varid( numror, 'avm_k', ldstop = .FALSE. ) 
     
    217214               CALL iom_get( numror, jpdom_autoglo, 'avm_k', avm_k, ldxios = lrxios ) 
    218215            ENDIF 
     216            IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    219217         ENDIF 
    220218         !           !* otherwise Kz already set to the background value in zdf_phy_init 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/ZDF/zdftke.F90

    r12702 r12950  
    634634      CALL tke_rst( nit000, 'READ' )      ! (en, avt_k, avm_k, dissl)  
    635635      ! 
    636       IF( lwxios ) THEN 
    637          CALL iom_set_rstw_var_active('en') 
    638          CALL iom_set_rstw_var_active('avt_k') 
    639          CALL iom_set_rstw_var_active('avm_k') 
    640          CALL iom_set_rstw_var_active('dissl') 
    641       ENDIF 
    642636   END SUBROUTINE zdf_tke_init 
    643637 
     
    665659         !                                   ! --------------- 
    666660         IF( ln_rstart ) THEN                   !* Read the restart file 
     661            IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    667662            id1 = iom_varid( numror, 'en'   , ldstop = .FALSE. ) 
    668663            id2 = iom_varid( numror, 'avt_k', ldstop = .FALSE. ) 
     
    682677               ! avt_k, avm_k already set to the background value in zdf_phy_init 
    683678            ENDIF 
     679            IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    684680         ELSE                                   !* Start from rest 
    685681            IF(lwp) WRITE(numout,*) 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/step.F90

    r12650 r12950  
    122122                             CALL iom_init_closedef 
    123123         IF( ln_crs      )   CALL iom_init( TRIM(cxios_context)//"_crs" )  ! for coarse grid 
     124      ELSEIF((kstp == nitrst) .AND. lwxios) THEN 
     125         CALL iom_swap(      cwxios_context          ) 
     126         CALL iom_init_closedef(cwxios_context) 
     127         CALL iom_setkt( kstp - nit000 + 1,      cwxios_context          ) 
     128         CALL iom_swap(      cwxios_context          ) 
    124129      ENDIF 
    125130      IF( kstp /= nit000 )   CALL day( kstp )         ! Calendar (day was already called at nit000 in day_init) 
  • NEMO/branches/2020/dev_12905_xios_restart/tests/CANAL/MY_SRC/domvvl.F90

    r12740 r12950  
    270270      ENDIF 
    271271      ! 
    272       IF(lwxios) THEN 
    273 ! define variables in restart file when writing with XIOS 
    274          CALL iom_set_rstw_var_active('e3t_b') 
    275          CALL iom_set_rstw_var_active('e3t_n') 
    276          !                                           ! ----------------------- ! 
    277          IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN  ! z_tilde and layer cases ! 
    278             !                                        ! ----------------------- ! 
    279             CALL iom_set_rstw_var_active('tilde_e3t_b') 
    280             CALL iom_set_rstw_var_active('tilde_e3t_n') 
    281          END IF 
    282          !                                           ! -------------!     
    283          IF( ln_vvl_ztilde ) THEN                    ! z_tilde case ! 
    284             !                                        ! ------------ ! 
    285             CALL iom_set_rstw_var_active('hdiv_lf') 
    286          ENDIF 
    287          ! 
    288       ENDIF 
    289       ! 
    290272   END SUBROUTINE dom_vvl_zgr 
    291273 
     
    793775         IF( ln_rstart ) THEN                   !* Read the restart file 
    794776            CALL rst_read_open                  !  open the restart file if necessary 
     777            IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    795778            CALL iom_get( numror, jpdom_autoglo, 'sshn'   , ssh(:,:,Kmm), ldxios = lrxios    ) 
    796779            ! 
     
    869852               ENDIF 
    870853            ENDIF 
     854            IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    871855            ! 
    872856         ELSE                                   !* Initialize at "rest" 
  • NEMO/branches/2020/dev_12905_xios_restart/tests/VORTEX/MY_SRC/domvvl.F90

    r12740 r12950  
    270270      ENDIF 
    271271      ! 
    272       IF(lwxios) THEN 
    273 ! define variables in restart file when writing with XIOS 
    274          CALL iom_set_rstw_var_active('e3t_b') 
    275          CALL iom_set_rstw_var_active('e3t_n') 
    276          !                                           ! ----------------------- ! 
    277          IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN  ! z_tilde and layer cases ! 
    278             !                                        ! ----------------------- ! 
    279             CALL iom_set_rstw_var_active('tilde_e3t_b') 
    280             CALL iom_set_rstw_var_active('tilde_e3t_n') 
    281          END IF 
    282          !                                           ! -------------!     
    283          IF( ln_vvl_ztilde ) THEN                    ! z_tilde case ! 
    284             !                                        ! ------------ ! 
    285             CALL iom_set_rstw_var_active('hdiv_lf') 
    286          ENDIF 
    287          ! 
    288       ENDIF 
    289       ! 
    290272   END SUBROUTINE dom_vvl_zgr 
    291273 
     
    793775         IF( ln_rstart ) THEN                   !* Read the restart file 
    794776            CALL rst_read_open                  !  open the restart file if necessary 
     777            IF( lrxios ) CALL iom_swap( TRIM(crxios_context) ) 
    795778            CALL iom_get( numror, jpdom_autoglo, 'sshn'   , ssh(:,:,Kmm), ldxios = lrxios    ) 
    796779            ! 
     
    869852               ENDIF 
    870853            ENDIF 
     854            IF( lrxios ) CALL iom_swap( TRIM(cxios_context) ) 
    871855            ! 
    872856         ELSE                                   !* Initialize at "rest" 
Note: See TracChangeset for help on using the changeset viewer.