Changeset 11837


Ignore:
Timestamp:
2019-10-30T15:10:36+01:00 (8 months ago)
Author:
andmirek
Message:

ticket #2323 read SI3 restart with XIOS

Location:
NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src
Files:
28 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/ICE/icedia.F90

    r11536 r11837  
    225225         IF( ln_rstart ) THEN                   !* Read the restart file 
    226226            ! 
    227             CALL iom_get( numrir, 'kt_ice' , ziter ) 
     227            IF(lrxios) CALL iom_swap( TRIM(crixios_context) ) 
     228            CALL iom_get( numrir, 'kt_ice' , ziter, ldxios = lrxios  ) 
    228229            IF(lwp) WRITE(numout,*) 
    229230            IF(lwp) WRITE(numout,*) 'ice_dia_rst read at time step = ', ziter 
    230231            IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    231             CALL iom_get( numrir, 'frc_voltop' , frc_voltop  ) 
    232             CALL iom_get( numrir, 'frc_volbot' , frc_volbot  ) 
    233             CALL iom_get( numrir, 'frc_temtop' , frc_temtop  ) 
    234             CALL iom_get( numrir, 'frc_tembot' , frc_tembot  ) 
    235             CALL iom_get( numrir, 'frc_sal'    , frc_sal     ) 
    236             CALL iom_get( numrir, jpdom_autoglo, 'vol_loc_ini', vol_loc_ini ) 
    237             CALL iom_get( numrir, jpdom_autoglo, 'tem_loc_ini', tem_loc_ini ) 
    238             CALL iom_get( numrir, jpdom_autoglo, 'sal_loc_ini', sal_loc_ini ) 
     232            CALL iom_get( numrir, 'frc_voltop' , frc_voltop, ldxios = lrxios ) 
     233            CALL iom_get( numrir, 'frc_volbot' , frc_volbot, ldxios = lrxios ) 
     234            CALL iom_get( numrir, 'frc_temtop' , frc_temtop, ldxios = lrxios ) 
     235            CALL iom_get( numrir, 'frc_tembot' , frc_tembot, ldxios = lrxios ) 
     236            CALL iom_get( numrir, 'frc_sal'    , frc_sal, ldxios = lrxios    ) 
     237            CALL iom_get( numrir, jpdom_autoglo, 'vol_loc_ini', vol_loc_ini, ldxios = lrxios) 
     238            CALL iom_get( numrir, jpdom_autoglo, 'tem_loc_ini', tem_loc_ini, ldxios = lrxios) 
     239            CALL iom_get( numrir, jpdom_autoglo, 'sal_loc_ini', sal_loc_ini, ldxios = lrxios) 
     240            IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 
    239241         ELSE 
    240242            IF(lwp) WRITE(numout,*) 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/ICE/icedyn_adv_pra.F90

    r11732 r11837  
    706706            ! 
    707707            !                                                        ! ice thickness 
    708             CALL iom_get( numrir, jpdom_autoglo, 'sxice' , sxice  ) 
    709             CALL iom_get( numrir, jpdom_autoglo, 'syice' , syice  ) 
    710             CALL iom_get( numrir, jpdom_autoglo, 'sxxice', sxxice ) 
    711             CALL iom_get( numrir, jpdom_autoglo, 'syyice', syyice ) 
    712             CALL iom_get( numrir, jpdom_autoglo, 'sxyice', sxyice ) 
     708            IF(lrxios) CALL iom_swap( TRIM(crixios_context) ) 
     709            ! 
     710            CALL iom_get( numrir, jpdom_autoglo, 'sxice' , sxice, ldxios = lrxios  ) 
     711            CALL iom_get( numrir, jpdom_autoglo, 'syice' , syice, ldxios = lrxios  ) 
     712            CALL iom_get( numrir, jpdom_autoglo, 'sxxice', sxxice, ldxios = lrxios ) 
     713            CALL iom_get( numrir, jpdom_autoglo, 'syyice', syyice, ldxios = lrxios ) 
     714            CALL iom_get( numrir, jpdom_autoglo, 'sxyice', sxyice, ldxios = lrxios ) 
    713715            !                                                        ! snow thickness 
    714             CALL iom_get( numrir, jpdom_autoglo, 'sxsn'  , sxsn   ) 
    715             CALL iom_get( numrir, jpdom_autoglo, 'sysn'  , sysn   ) 
    716             CALL iom_get( numrir, jpdom_autoglo, 'sxxsn' , sxxsn  ) 
    717             CALL iom_get( numrir, jpdom_autoglo, 'syysn' , syysn  ) 
    718             CALL iom_get( numrir, jpdom_autoglo, 'sxysn' , sxysn  ) 
     716            CALL iom_get( numrir, jpdom_autoglo, 'sxsn'  , sxsn, ldxios = lrxios   ) 
     717            CALL iom_get( numrir, jpdom_autoglo, 'sysn'  , sysn, ldxios = lrxios   ) 
     718            CALL iom_get( numrir, jpdom_autoglo, 'sxxsn' , sxxsn, ldxios = lrxios  ) 
     719            CALL iom_get( numrir, jpdom_autoglo, 'syysn' , syysn, ldxios = lrxios  ) 
     720            CALL iom_get( numrir, jpdom_autoglo, 'sxysn' , sxysn, ldxios = lrxios  ) 
    719721            !                                                        ! ice concentration 
    720             CALL iom_get( numrir, jpdom_autoglo, 'sxa'   , sxa    ) 
    721             CALL iom_get( numrir, jpdom_autoglo, 'sya'   , sya    ) 
    722             CALL iom_get( numrir, jpdom_autoglo, 'sxxa'  , sxxa   ) 
    723             CALL iom_get( numrir, jpdom_autoglo, 'syya'  , syya   ) 
    724             CALL iom_get( numrir, jpdom_autoglo, 'sxya'  , sxya   ) 
     722            CALL iom_get( numrir, jpdom_autoglo, 'sxa'   , sxa, ldxios = lrxios    ) 
     723            CALL iom_get( numrir, jpdom_autoglo, 'sya'   , sya, ldxios = lrxios    ) 
     724            CALL iom_get( numrir, jpdom_autoglo, 'sxxa'  , sxxa, ldxios = lrxios   ) 
     725            CALL iom_get( numrir, jpdom_autoglo, 'syya'  , syya, ldxios = lrxios   ) 
     726            CALL iom_get( numrir, jpdom_autoglo, 'sxya'  , sxya, ldxios = lrxios   ) 
    725727            !                                                        ! ice salinity 
    726             CALL iom_get( numrir, jpdom_autoglo, 'sxsal' , sxsal  ) 
    727             CALL iom_get( numrir, jpdom_autoglo, 'sysal' , sysal  ) 
    728             CALL iom_get( numrir, jpdom_autoglo, 'sxxsal', sxxsal ) 
    729             CALL iom_get( numrir, jpdom_autoglo, 'syysal', syysal ) 
    730             CALL iom_get( numrir, jpdom_autoglo, 'sxysal', sxysal ) 
     728            CALL iom_get( numrir, jpdom_autoglo, 'sxsal' , sxsal, ldxios = lrxios  ) 
     729            CALL iom_get( numrir, jpdom_autoglo, 'sysal' , sysal, ldxios = lrxios  ) 
     730            CALL iom_get( numrir, jpdom_autoglo, 'sxxsal', sxxsal, ldxios = lrxios ) 
     731            CALL iom_get( numrir, jpdom_autoglo, 'syysal', syysal, ldxios = lrxios ) 
     732            CALL iom_get( numrir, jpdom_autoglo, 'sxysal', sxysal, ldxios = lrxios ) 
    731733            !                                                        ! ice age 
    732             CALL iom_get( numrir, jpdom_autoglo, 'sxage' , sxage  ) 
    733             CALL iom_get( numrir, jpdom_autoglo, 'syage' , syage  ) 
    734             CALL iom_get( numrir, jpdom_autoglo, 'sxxage', sxxage ) 
    735             CALL iom_get( numrir, jpdom_autoglo, 'syyage', syyage ) 
    736             CALL iom_get( numrir, jpdom_autoglo, 'sxyage', sxyage ) 
     734            CALL iom_get( numrir, jpdom_autoglo, 'sxage' , sxage, ldxios = lrxios  ) 
     735            CALL iom_get( numrir, jpdom_autoglo, 'syage' , syage, ldxios = lrxios  ) 
     736            CALL iom_get( numrir, jpdom_autoglo, 'sxxage', sxxage, ldxios = lrxios ) 
     737            CALL iom_get( numrir, jpdom_autoglo, 'syyage', syyage, ldxios = lrxios ) 
     738            CALL iom_get( numrir, jpdom_autoglo, 'sxyage', sxyage, ldxios = lrxios ) 
    737739            !                                                        ! snow layers heat content 
    738             DO jk = 1, nlay_s 
    739                WRITE(zchar1,'(I2.2)') jk 
    740                znam = 'sxc0'//'_l'//zchar1  ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d )   ;   sxc0 (:,:,jk,:) = z3d(:,:,:) 
    741                znam = 'syc0'//'_l'//zchar1  ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d )   ;   syc0 (:,:,jk,:) = z3d(:,:,:) 
    742                znam = 'sxxc0'//'_l'//zchar1 ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d )   ;   sxxc0(:,:,jk,:) = z3d(:,:,:) 
    743                znam = 'syyc0'//'_l'//zchar1 ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d )   ;   syyc0(:,:,jk,:) = z3d(:,:,:) 
    744                znam = 'sxyc0'//'_l'//zchar1 ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d )   ;   sxyc0(:,:,jk,:) = z3d(:,:,:) 
    745             END DO 
    746             !                                                        ! ice layers heat content 
    747             DO jk = 1, nlay_i 
    748                WRITE(zchar1,'(I2.2)') jk 
    749                znam = 'sxe'//'_l'//zchar1   ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d )   ;   sxe (:,:,jk,:) = z3d(:,:,:) 
    750                znam = 'sye'//'_l'//zchar1   ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d )   ;   sye (:,:,jk,:) = z3d(:,:,:) 
    751                znam = 'sxxe'//'_l'//zchar1  ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d )   ;   sxxe(:,:,jk,:) = z3d(:,:,:) 
    752                znam = 'syye'//'_l'//zchar1  ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d )   ;   syye(:,:,jk,:) = z3d(:,:,:) 
    753                znam = 'sxye'//'_l'//zchar1  ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d )   ;   sxye(:,:,jk,:) = z3d(:,:,:) 
    754             END DO 
     740            IF(lrsi3_nemo) THEN 
     741               DO jk = 1, nlay_s 
     742                  WRITE(zchar1,'(I2.2)') jk 
     743                  znam = 'sxc0'//'_l'//zchar1  ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d, ldxios = lrxios ) 
     744                  sxc0 (:,:,jk,:) = z3d(:,:,:) 
     745                  znam = 'syc0'//'_l'//zchar1  ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d, ldxios = lrxios ) 
     746                  syc0 (:,:,jk,:) = z3d(:,:,:) 
     747                  znam = 'sxxc0'//'_l'//zchar1 ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d, ldxios = lrxios ) 
     748                  sxxc0(:,:,jk,:) = z3d(:,:,:) 
     749                  znam = 'syyc0'//'_l'//zchar1 ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d, ldxios = lrxios ) 
     750                  syyc0(:,:,jk,:) = z3d(:,:,:) 
     751                  znam = 'sxyc0'//'_l'//zchar1 ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d, ldxios = lrxios ) 
     752                  sxyc0(:,:,jk,:) = z3d(:,:,:) 
     753               END DO 
     754               !                                                        ! ice layers heat content 
     755               DO jk = 1, nlay_i 
     756                  WRITE(zchar1,'(I2.2)') jk 
     757                  znam = 'sxe'//'_l'//zchar1   ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d, ldxios = lrxios ) 
     758                  sxe (:,:,jk,:) = z3d(:,:,:) 
     759                  znam = 'sye'//'_l'//zchar1   ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d, ldxios = lrxios ) 
     760                  sye (:,:,jk,:) = z3d(:,:,:) 
     761                  znam = 'sxxe'//'_l'//zchar1  ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d, ldxios = lrxios ) 
     762                  sxxe(:,:,jk,:) = z3d(:,:,:) 
     763                  znam = 'syye'//'_l'//zchar1  ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d, ldxios = lrxios ) 
     764                  syye(:,:,jk,:) = z3d(:,:,:) 
     765                  znam = 'sxye'//'_l'//zchar1  ;   CALL iom_get( numrir, jpdom_autoglo, znam , z3d, ldxios = lrxios ) 
     766                  sxye(:,:,jk,:) = z3d(:,:,:) 
     767               END DO 
     768            ELSE 
     769               CALL iom_get( numrir, jpdom_autoglo, "sxc0", sxc0, ldxios = lrxios ) 
     770               CALL iom_get( numrir, jpdom_autoglo, "syc0", syc0, ldxios = lrxios ) 
     771               CALL iom_get( numrir, jpdom_autoglo, "sxxc0", sxxc0, ldxios = lrxios ) 
     772               CALL iom_get( numrir, jpdom_autoglo, "syyc0", syyc0, ldxios = lrxios ) 
     773               CALL iom_get( numrir, jpdom_autoglo, "sxyc0", sxyc0, ldxios = lrxios ) 
     774               CALL iom_get( numrir, jpdom_autoglo, "sxe", sxc0, ldxios = lrxios ) 
     775               CALL iom_get( numrir, jpdom_autoglo, "sye", syc0, ldxios = lrxios ) 
     776               CALL iom_get( numrir, jpdom_autoglo, "sxxe", sxxc0, ldxios = lrxios ) 
     777               CALL iom_get( numrir, jpdom_autoglo, "syye", syyc0, ldxios = lrxios ) 
     778               CALL iom_get( numrir, jpdom_autoglo, "sxye", sxyc0, ldxios = lrxios ) 
     779            ENDIF 
    755780            ! 
    756781            IF( ln_pnd_H12 ) THEN                                    ! melt pond fraction 
    757                CALL iom_get( numrir, jpdom_autoglo, 'sxap' , sxap  ) 
    758                CALL iom_get( numrir, jpdom_autoglo, 'syap' , syap  ) 
    759                CALL iom_get( numrir, jpdom_autoglo, 'sxxap', sxxap ) 
    760                CALL iom_get( numrir, jpdom_autoglo, 'syyap', syyap ) 
    761                CALL iom_get( numrir, jpdom_autoglo, 'sxyap', sxyap ) 
     782               CALL iom_get( numrir, jpdom_autoglo, 'sxap' , sxap, ldxios = lrxios  ) 
     783               CALL iom_get( numrir, jpdom_autoglo, 'syap' , syap, ldxios = lrxios  ) 
     784               CALL iom_get( numrir, jpdom_autoglo, 'sxxap', sxxap, ldxios = lrxios ) 
     785               CALL iom_get( numrir, jpdom_autoglo, 'syyap', syyap, ldxios = lrxios ) 
     786               CALL iom_get( numrir, jpdom_autoglo, 'sxyap', sxyap, ldxios = lrxios ) 
    762787               !                                                     ! melt pond volume 
    763                CALL iom_get( numrir, jpdom_autoglo, 'sxvp' , sxvp  ) 
    764                CALL iom_get( numrir, jpdom_autoglo, 'syvp' , syvp  ) 
    765                CALL iom_get( numrir, jpdom_autoglo, 'sxxvp', sxxvp ) 
    766                CALL iom_get( numrir, jpdom_autoglo, 'syyvp', syyvp ) 
    767                CALL iom_get( numrir, jpdom_autoglo, 'sxyvp', sxyvp ) 
     788               CALL iom_get( numrir, jpdom_autoglo, 'sxvp' , sxvp, ldxios = lrxios  ) 
     789               CALL iom_get( numrir, jpdom_autoglo, 'syvp' , syvp, ldxios = lrxios  ) 
     790               CALL iom_get( numrir, jpdom_autoglo, 'sxxvp', sxxvp, ldxios = lrxios ) 
     791               CALL iom_get( numrir, jpdom_autoglo, 'syyvp', syyvp, ldxios = lrxios ) 
     792               CALL iom_get( numrir, jpdom_autoglo, 'sxyvp', sxyvp, ldxios = lrxios ) 
    768793            ENDIF 
     794            ! 
     795            IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 
    769796            ! 
    770797         ELSE                                   !**  start rheology from rest  **! 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/ICE/icedyn_rhg_evp.F90

    r11536 r11837  
    879879            ! 
    880880            IF( MIN( id1, id2, id3 ) > 0 ) THEN      ! fields exist 
    881                CALL iom_get( numrir, jpdom_autoglo, 'stress1_i' , stress1_i  ) 
    882                CALL iom_get( numrir, jpdom_autoglo, 'stress2_i' , stress2_i  ) 
    883                CALL iom_get( numrir, jpdom_autoglo, 'stress12_i', stress12_i ) 
     881               IF(lrxios) CALL iom_swap( TRIM(crixios_context) ) 
     882               CALL iom_get( numrir, jpdom_autoglo, 'stress1_i' , stress1_i, ldxios = lrxios  ) 
     883               CALL iom_get( numrir, jpdom_autoglo, 'stress2_i' , stress2_i, ldxios = lrxios  ) 
     884               CALL iom_get( numrir, jpdom_autoglo, 'stress12_i', stress12_i, ldxios = lrxios ) 
     885               IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 
    884886            ELSE                                     ! start rheology from rest 
    885887               IF(lwp) WRITE(numout,*) 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/ICE/icerst.F90

    r11536 r11837  
    184184      ENDIF 
    185185 
     186      lxios_sini = .FALSE. 
    186187      CALL iom_open ( TRIM(cn_icerst_indir)//'/'//cn_icerst_in, numrir, kdlev = jpl ) 
    187188 
     
    192193      IF( id0 > 0 ) THEN   ! == case of a normal restart == ! 
    193194         !                 ! ------------------------------ ! 
    194           
     195         IF(.NOT.lxios_set) THEN 
     196            lrxios = lrxios.AND.lxios_sini 
     197         ELSE 
     198            IF(.NOT.lxios_sini) THEN 
     199               WRITE(ctmp1,*) 'E R R O R : XIOS can not be used to read SI3 restart from multiple files' 
     200               CALL ctl_stop( 'ice_rst_read:', ctmp1 ) 
     201            ENDIF 
     202         ENDIF 
     203 
     204         lrsi3_nemo = .TRUE.                       ! SI3 restart written by NEMO 
     205 
     206         IF(lrxios) THEN 
     207           crixios_context = 'si3_rst' 
     208           CALL iom_init( crixios_context, TRIM(cn_icerst_indir)//'/'//cn_icerst_in, ld_tmppatch = .false. ) 
     209           lxios_set = .TRUE. 
     210         ENDIF 
     211 
    195212         ! Time info 
    196          CALL iom_get( numrir, 'nn_fsbc', zfice ) 
    197          CALL iom_get( numrir, 'kt_ice' , ziter )     
     213         CALL iom_get( numrir, 'nn_fsbc', zfice, ldxios = lrxios ) 
     214         CALL iom_get( numrir, 'kt_ice' , ziter, ldxios = lrxios )     
    198215         IF(lwp) WRITE(numout,*) '   read ice restart file at time step    : ', ziter 
    199216         IF(lwp) WRITE(numout,*) '   in any case we force it to nit000 - 1 : ', nit000 - 1 
     
    210227 
    211228         ! --- mandatory fields --- !  
    212          CALL iom_get( numrir, jpdom_autoglo, 'v_i'  , v_i   ) 
    213          CALL iom_get( numrir, jpdom_autoglo, 'v_s'  , v_s   ) 
    214          CALL iom_get( numrir, jpdom_autoglo, 'sv_i' , sv_i  ) 
    215          CALL iom_get( numrir, jpdom_autoglo, 'a_i'  , a_i   ) 
    216          CALL iom_get( numrir, jpdom_autoglo, 't_su' , t_su  ) 
    217          CALL iom_get( numrir, jpdom_autoglo, 'u_ice', u_ice ) 
    218          CALL iom_get( numrir, jpdom_autoglo, 'v_ice', v_ice ) 
     229         CALL iom_get( numrir, jpdom_autoglo, 'v_i'  , v_i, ldxios = lrxios   ) 
     230         CALL iom_get( numrir, jpdom_autoglo, 'v_s'  , v_s, ldxios = lrxios   ) 
     231         CALL iom_get( numrir, jpdom_autoglo, 'sv_i' , sv_i, ldxios = lrxios  ) 
     232         CALL iom_get( numrir, jpdom_autoglo, 'a_i'  , a_i, ldxios = lrxios   ) 
     233         CALL iom_get( numrir, jpdom_autoglo, 't_su' , t_su, ldxios = lrxios  ) 
     234         CALL iom_get( numrir, jpdom_autoglo, 'u_ice', u_ice, ldxios = lrxios ) 
     235         CALL iom_get( numrir, jpdom_autoglo, 'v_ice', v_ice, ldxios = lrxios ) 
    219236         ! Snow enthalpy 
    220          DO jk = 1, nlay_s 
    221             WRITE(zchar1,'(I2.2)') jk 
    222             znam = 'e_s'//'_l'//zchar1 
    223             CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) 
    224             e_s(:,:,jk,:) = z3d(:,:,:) 
    225          END DO 
    226          ! Ice enthalpy 
    227          DO jk = 1, nlay_i 
    228             WRITE(zchar1,'(I2.2)') jk 
    229             znam = 'e_i'//'_l'//zchar1 
    230             CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) 
    231             e_i(:,:,jk,:) = z3d(:,:,:) 
    232          END DO 
     237         IF(lrsi3_nemo) THEN 
     238!NEMO read inerface 
     239            DO jk = 1, nlay_s 
     240               WRITE(zchar1,'(I2.2)') jk 
     241               znam = 'e_s'//'_l'//zchar1 
     242               CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) 
     243               e_s(:,:,jk,:) = z3d(:,:,:) 
     244            END DO 
     245            ! Ice enthalpy 
     246            DO jk = 1, nlay_i 
     247               WRITE(zchar1,'(I2.2)') jk 
     248               znam = 'e_i'//'_l'//zchar1 
     249               CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) 
     250               e_i(:,:,jk,:) = z3d(:,:,:) 
     251            END DO 
     252         ELSE 
     253!XIOS read interface 
     254            CALL iom_get( numrir, jpdom_autoglo, "e_s" , e_s ) 
     255            CALL iom_get( numrir, jpdom_autoglo, "e_i" , e_i )  
     256         ENDIF 
    233257         ! -- optional fields -- ! 
    234258         ! ice age 
    235259         id1 = iom_varid( numrir, 'oa_i' , ldstop = .FALSE. ) 
    236260         IF( id1 > 0 ) THEN                       ! fields exist 
    237             CALL iom_get( numrir, jpdom_autoglo, 'oa_i', oa_i ) 
     261            CALL iom_get( numrir, jpdom_autoglo, 'oa_i', oa_i, ldxios = lrxios ) 
    238262         ELSE                                     ! start from rest 
    239263            IF(lwp) WRITE(numout,*) '   ==>>   previous run without ice age output then set it to zero' 
     
    243267         id2 = iom_varid( numrir, 'a_ip' , ldstop = .FALSE. ) 
    244268         IF( id2 > 0 ) THEN                       ! fields exist 
    245             CALL iom_get( numrir, jpdom_autoglo, 'a_ip' , a_ip ) 
    246             CALL iom_get( numrir, jpdom_autoglo, 'v_ip' , v_ip ) 
     269            CALL iom_get( numrir, jpdom_autoglo, 'a_ip' , a_ip, ldxios = lrxios ) 
     270            CALL iom_get( numrir, jpdom_autoglo, 'v_ip' , v_ip, ldxios = lrxios ) 
    247271         ELSE                                     ! start from rest 
    248272            IF(lwp) WRITE(numout,*) '   ==>>   previous run without melt ponds output then set it to zero' 
     
    255279            id4 = iom_varid( numrir, 't1_ice'  , ldstop = .FALSE. ) 
    256280            IF( id3 > 0 .AND. id4 > 0 ) THEN         ! fields exist 
    257                CALL iom_get( numrir, jpdom_autoglo, 'cnd_ice', cnd_ice ) 
    258                CALL iom_get( numrir, jpdom_autoglo, 't1_ice' , t1_ice  ) 
     281               CALL iom_get( numrir, jpdom_autoglo, 'cnd_ice', cnd_ice, ldxios = lrxios ) 
     282               CALL iom_get( numrir, jpdom_autoglo, 't1_ice' , t1_ice, ldxios = lrxios  ) 
    259283            ELSE                                     ! start from rest 
    260284               IF(lwp) WRITE(numout,*) '   ==>>   previous run without conductivity output then set it to zero' 
     
    263287            ENDIF 
    264288         ENDIF 
    265  
     289         IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 
    266290         CALL iom_delay_rst( 'READ', 'ICE', numrir )   ! read only ice delayed global communication variables 
    267291 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/ICE/iceupdate.F90

    r11536 r11837  
    424424            ! 
    425425            IF( id1 > 0 ) THEN                       ! fields exist 
    426                CALL iom_get( numrir, jpdom_autoglo, 'snwice_mass'  , snwice_mass   ) 
    427                CALL iom_get( numrir, jpdom_autoglo, 'snwice_mass_b', snwice_mass_b ) 
     426               IF(lrxios) CALL iom_swap( TRIM(crixios_context) ) 
     427               CALL iom_get( numrir, jpdom_autoglo, 'snwice_mass'  , snwice_mass, ldxios = lrxios   ) 
     428               CALL iom_get( numrir, jpdom_autoglo, 'snwice_mass_b', snwice_mass_b, ldxios = lrxios ) 
     429               IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 
    428430            ELSE                                     ! start from rest 
    429431               IF(lwp) WRITE(numout,*) '   ==>>   previous run without snow-ice mass output then set it' 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/DIA/diahsb.F90

    r11536 r11837  
    256256      IF( TRIM(cdrw) == 'READ' ) THEN        ! Read/initialise  
    257257         IF( ln_rstart ) THEN                   !* Read the restart file 
     258            IF(lrxios) CALL iom_swap(crxios_context) 
    258259            ! 
    259260            IF(lwp) WRITE(numout,*) 
     
    276277               CALL iom_get( numror, jpdom_autoglo, 'ssh_sc_loc_ini', ssh_sc_loc_ini, ldxios = lrxios ) 
    277278            ENDIF 
     279            IF(lrxios) CALL iom_swap(cxios_context) 
    278280         ELSE 
    279281            IF(lwp) WRITE(numout,*) 
     
    377379      IF(lwxios) THEN 
    378380! define variables in restart file when writing with XIOS 
    379         CALL iom_set_rstw_var_active('frc_v') 
    380         CALL iom_set_rstw_var_active('frc_t') 
    381         CALL iom_set_rstw_var_active('frc_s') 
    382         CALL iom_set_rstw_var_active('surf_ini') 
    383         CALL iom_set_rstw_var_active('ssh_ini') 
    384         CALL iom_set_rstw_var_active('e3t_ini') 
    385         CALL iom_set_rstw_var_active('hc_loc_ini') 
    386         CALL iom_set_rstw_var_active('sc_loc_ini') 
     381        CALL iom_set_rstw_var_active(rst_wfields, 'frc_v') 
     382        CALL iom_set_rstw_var_active(rst_wfields, 'frc_t') 
     383        CALL iom_set_rstw_var_active(rst_wfields, 'frc_s') 
     384        CALL iom_set_rstw_var_active(rst_wfields, 'surf_ini') 
     385        CALL iom_set_rstw_var_active(rst_wfields, 'ssh_ini') 
     386        CALL iom_set_rstw_var_active(rst_wfields, 'e3t_ini') 
     387        CALL iom_set_rstw_var_active(rst_wfields, 'hc_loc_ini') 
     388        CALL iom_set_rstw_var_active(rst_wfields, 'sc_loc_ini') 
    387389        IF( ln_linssh ) THEN 
    388            CALL iom_set_rstw_var_active('ssh_hc_loc_ini') 
    389            CALL iom_set_rstw_var_active('ssh_sc_loc_ini') 
    390            CALL iom_set_rstw_var_active('frc_wn_t') 
    391            CALL iom_set_rstw_var_active('frc_wn_s') 
     390           CALL iom_set_rstw_var_active(rst_wfields, 'ssh_hc_loc_ini') 
     391           CALL iom_set_rstw_var_active(rst_wfields, 'ssh_sc_loc_ini') 
     392           CALL iom_set_rstw_var_active(rst_wfields, 'frc_wn_t') 
     393           CALL iom_set_rstw_var_active(rst_wfields, 'frc_wn_s') 
    392394        ENDIF 
    393395      ENDIF 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/DOM/daymod.F90

    r10068 r11837  
    145145      IF( lwxios ) THEN 
    146146! define variables in restart file when writing with XIOS 
    147           CALL iom_set_rstw_var_active('kt') 
    148           CALL iom_set_rstw_var_active('ndastp') 
    149           CALL iom_set_rstw_var_active('adatrj') 
    150           CALL iom_set_rstw_var_active('ntime') 
     147          CALL iom_set_rstw_var_active(rst_wfields, 'kt') 
     148          CALL iom_set_rstw_var_active(rst_wfields, 'ndastp') 
     149          CALL iom_set_rstw_var_active(rst_wfields, 'adatrj') 
     150          CALL iom_set_rstw_var_active(rst_wfields, 'ntime') 
    151151      ENDIF 
    152152 
     
    323323 
    324324      IF( TRIM(cdrw) == 'READ' ) THEN 
    325  
     325         IF(lrxios) CALL iom_swap(crxios_context) 
    326326         IF( iom_varid( numror, 'kt', ldstop = .FALSE. ) > 0 ) THEN 
    327327            ! Get Calendar informations 
     
    381381               ! note this is wrong if time step has changed during run 
    382382            ENDIF 
     383            IF(lrxios) CALL iom_swap(cxios_context) 
    383384         ELSE 
    384385            ! parameters corresponding to nit000 - 1 (as we start the step loop with a call to day) 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/DOM/domvvl.F90

    r11536 r11837  
    247247      IF(lwxios) THEN 
    248248! define variables in restart file when writing with XIOS 
    249          CALL iom_set_rstw_var_active('e3t_b') 
    250          CALL iom_set_rstw_var_active('e3t_n') 
     249         CALL iom_set_rstw_var_active(rst_wfields, 'e3t_b') 
     250         CALL iom_set_rstw_var_active(rst_wfields, 'e3t_n') 
    251251         !                                           ! ----------------------- ! 
    252252         IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN  ! z_tilde and layer cases ! 
    253253            !                                        ! ----------------------- ! 
    254             CALL iom_set_rstw_var_active('tilde_e3t_b') 
    255             CALL iom_set_rstw_var_active('tilde_e3t_n') 
     254            CALL iom_set_rstw_var_active(rst_wfields, 'tilde_e3t_b') 
     255            CALL iom_set_rstw_var_active(rst_wfields, 'tilde_e3t_n') 
    256256         END IF 
    257257         !                                           ! -------------!     
    258258         IF( ln_vvl_ztilde ) THEN                    ! z_tilde case ! 
    259259            !                                        ! ------------ ! 
    260             CALL iom_set_rstw_var_active('hdiv_lf') 
     260            CALL iom_set_rstw_var_active(rst_wfields, 'hdiv_lf') 
    261261         ENDIF 
    262262         ! 
     
    806806         IF( ln_rstart ) THEN                   !* Read the restart file 
    807807            CALL rst_read_open                  !  open the restart file if necessary 
     808            IF(lrxios) CALL iom_swap(crxios_context) 
    808809            CALL iom_get( numror, jpdom_autoglo, 'sshn'   , sshn, ldxios = lrxios    ) 
    809810            ! 
     
    881882            ENDIF 
    882883            ! 
     884            IF(lrxios) CALL iom_swap(cxios_context) 
     885            ! 
    883886         ELSE                                   !* Initialize at "rest" 
    884887            ! 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/DOM/iscplrst.F90

    r10425 r11837  
    5858      ! 
    5959      !                       ! get restart variable 
     60      IF(lrxios) CALL iom_swap(crxios_context) 
    6061      CALL iom_get( numror, jpdom_autoglo, 'tmask'  , ztmask_b, ldxios = lrxios   ) ! need to extrapolate T/S 
    6162      CALL iom_get( numror, jpdom_autoglo, 'umask'  , zumask_b, ldxios = lrxios   ) ! need to correct barotropic velocity 
     
    6667      CALL iom_get( numror, jpdom_autoglo, 'e3v_n'  , ze3v_b(:,:,:), ldxios = lrxios )  ! need to correct barotropic velocity 
    6768      CALL iom_get( numror, jpdom_autoglo, 'gdepw_n', zdepw_b(:,:,:), ldxios = lrxios ) ! need to interpol vertical profile (vvl) 
     69      IF(lrxios) CALL iom_swap(cxios_context) 
    6870      ! 
    6971      CALL iscpl_init()       ! read namelist 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/DYN/dynspg_ts.F90

    r11536 r11837  
    934934      IF( TRIM(cdrw) == 'READ' ) THEN        ! Read/initialise  
    935935         !                                   ! --------------- 
     936         IF(lrxios) CALL iom_swap(crxios_context) 
    936937         IF( ln_rstart .AND. ln_bt_fw .AND. (neuler/=0) ) THEN    !* Read the restart file 
    937938            CALL iom_get( numror, jpdom_autoglo, 'ub2_b'  , ub2_b  (:,:), ldxios = lrxios )    
     
    954955            ENDIF 
    955956#endif 
     957         IF(lrxios) CALL iom_swap(cxios_context) 
     958         ! 
    956959         ELSE                                   !* Start from rest 
    957960            IF(lwp) WRITE(numout,*) 
     
    10891092      IF( lwxios ) THEN 
    10901093! define variables in restart file when writing with XIOS 
    1091          CALL iom_set_rstw_var_active('ub2_b') 
    1092          CALL iom_set_rstw_var_active('vb2_b') 
    1093          CALL iom_set_rstw_var_active('un_bf') 
    1094          CALL iom_set_rstw_var_active('vn_bf') 
     1094         CALL iom_set_rstw_var_active(rst_wfields, 'ub2_b') 
     1095         CALL iom_set_rstw_var_active(rst_wfields, 'vb2_b') 
     1096         CALL iom_set_rstw_var_active(rst_wfields, 'un_bf') 
     1097         CALL iom_set_rstw_var_active(rst_wfields, 'vn_bf') 
    10951098         ! 
    10961099         IF (.NOT.ln_bt_av) THEN 
    1097             CALL iom_set_rstw_var_active('sshbb_e') 
    1098             CALL iom_set_rstw_var_active('ubb_e') 
    1099             CALL iom_set_rstw_var_active('vbb_e') 
    1100             CALL iom_set_rstw_var_active('sshb_e') 
    1101             CALL iom_set_rstw_var_active('ub_e') 
    1102             CALL iom_set_rstw_var_active('vb_e') 
     1100            CALL iom_set_rstw_var_active(rst_wfields, 'sshbb_e') 
     1101            CALL iom_set_rstw_var_active(rst_wfields, 'ubb_e') 
     1102            CALL iom_set_rstw_var_active(rst_wfields, 'vbb_e') 
     1103            CALL iom_set_rstw_var_active(rst_wfields, 'sshb_e') 
     1104            CALL iom_set_rstw_var_active(rst_wfields, 'ub_e') 
     1105            CALL iom_set_rstw_var_active(rst_wfields, 'vb_e') 
    11031106         ENDIF 
    11041107#if defined key_agrif 
    11051108         ! Save time integrated fluxes 
    11061109         IF ( .NOT.Agrif_Root() ) THEN 
    1107             CALL iom_set_rstw_var_active('ub2_i_b') 
    1108             CALL iom_set_rstw_var_active('vb2_i_b') 
     1110            CALL iom_set_rstw_var_active(rst_wfields, 'ub2_i_b') 
     1111            CALL iom_set_rstw_var_active(rst_wfields, 'vb2_i_b') 
    11091112         ENDIF 
    11101113#endif 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/IOM/in_out_manager.F90

    r11536 r11837  
    168168   LOGICAL       ::   lsp_area = .TRUE.     !: to make a control print over a specific area 
    169169   CHARACTER(lc) ::   cxios_context         !: context name used in xios 
    170    CHARACTER(lc) ::   crxios_context         !: context name used in xios to read restart 
    171    CHARACTER(lc) ::   cwxios_context        !: context name used in xios to write restart file 
     170   CHARACTER(lc) ::   crxios_context        !: context name used in xios to read NEMO restart 
     171   CHARACTER(lc) ::   cwxios_context        !: context name used in xios to write NEMO restart file 
     172   CHARACTER(lc) ::   crixios_context       !: context name used in xios to read SI3 restart 
     173   LOGICAL       ::   lrsi3_nemo            !: is SI3 irestart in nemo format 
    172174 
    173175   !!---------------------------------------------------------------------- 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/IOM/iom.F90

    r11554 r11837  
    4747   USE lib_fortran  
    4848   USE diurnal_bulk, ONLY : ln_diurnal_only, ln_diurnal 
     49#if defined key_si3 
     50   USE ice, ONLY: nlay_i, nlay_s 
     51#endif 
     52 
    4953 
    5054   IMPLICIT NONE 
     
    6165 
    6266   PRIVATE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d 
    63    PRIVATE iom_g0d, iom_g1d, iom_g2d, iom_g3d, iom_get_123d 
     67   PRIVATE iom_g0d, iom_g1d, iom_g2d, iom_g3d, iom_g4d, iom_get_123d 
    6468   PRIVATE iom_p1d, iom_p2d, iom_p3d 
    6569#if defined key_iomput 
     
    6973# endif 
    7074   PUBLIC iom_set_rstw_var_active, iom_set_rstw_core, iom_set_rst_vars 
     75   PRIVATE iom_add 
     76   INTEGER, PRIVATE :: numrst 
    7177 
    7278   INTERFACE iom_get 
    73       MODULE PROCEDURE iom_g0d, iom_g1d, iom_g2d, iom_g3d 
     79      MODULE PROCEDURE iom_g0d, iom_g1d, iom_g2d, iom_g3d, iom_g4d 
    7480   END INTERFACE 
    7581   INTERFACE iom_getatt 
     
    227233      ! 
    228234      ! automatic definitions of some of the xml attributs 
    229       IF( TRIM(cdname) == TRIM(crxios_context) ) THEN 
     235      IF( TRIM(cdname) == TRIM(crxios_context) .OR. TRIM(cdname) == TRIM(crixios_context) ) THEN 
     236          numrst = numror 
     237          IF(TRIM(cdname) == TRIM(crixios_context)) numrst = numrir  
    230238!set names of the fields in restart file IF using XIOS to read data 
    231239          CALL iom_set_rst_context(.TRUE.) 
    232240          CALL iom_set_rst_vars(rst_rfields) 
    233241!set which fields are to be read from restart file 
    234           CALL iom_set_rstr_active() 
     242          CALL iom_set_rstr_active(fname) 
    235243      ELSE IF( TRIM(cdname) == TRIM(cwxios_context) ) THEN 
    236244!set names of the fields in restart file IF using XIOS to write data 
     
    238246          CALL iom_set_rst_vars(rst_wfields) 
    239247!set which fields are to be written to a restart file 
    240           CALL iom_set_rstw_active(fname) 
     248          CALL iom_set_rstw_active(rst_wfields, fname) 
    241249      ELSE 
    242250          CALL set_xmlatt 
     
    259267   END SUBROUTINE iom_init 
    260268 
    261    SUBROUTINE iom_set_rstw_var_active(field) 
     269   SUBROUTINE iom_set_rstw_var_active(drst_wfields, field) 
    262270      !!--------------------------------------------------------------------- 
    263271      !!                   ***  SUBROUTINE  iom_set_rstw_var_active  *** 
     
    266274      !!--------------------------------------------------------------------- 
    267275   CHARACTER(len = *), INTENT(IN) :: field 
     276   TYPE(RST_FIELD),    INTENT(INOUT) :: drst_wfields(max_rst_fields) 
    268277   INTEGER :: i 
    269278   LOGICAL :: llis_set 
     
    274283 
    275284   DO i = 1, max_rst_fields 
    276        IF(TRIM(rst_wfields(i)%vname) == field) THEN  
    277           rst_wfields(i)%active = .TRUE. 
     285       IF(TRIM(drst_wfields(i)%vname) == field) THEN  
     286          drst_wfields(i)%active = .TRUE. 
    278287          llis_set = .TRUE. 
    279288          EXIT 
    280289       ENDIF 
    281290   ENDDO 
    282 !Warn if variable is not in defined in rst_wfields 
     291!Warn if variable is not in defined in drst_wfields 
    283292   IF(.NOT.llis_set) THEN 
    284293      WRITE(ctmp1,*) 'iom_set_rstw_var_active: variable ', field ,' is available for writing but not defined'  
     
    292301   END SUBROUTINE iom_set_rstw_var_active 
    293302 
    294    SUBROUTINE iom_set_rstr_active() 
     303   SUBROUTINE iom_set_rstr_active(rst_file) 
    295304      !!--------------------------------------------------------------------- 
    296305      !!                   ***  SUBROUTINE  iom_set_rstr_active  *** 
     
    308317   TYPE(xios_filegroup) :: filegroup_hdl 
    309318   INTEGER :: i 
    310    CHARACTER(lc)  ::   clpath 
    311  
    312         clpath = TRIM(cn_ocerst_indir) 
    313         IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 
    314         IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
    315            rst_file = TRIM(clpath)//TRIM(cn_ocerst_in) 
    316         ELSE 
    317            rst_file = TRIM(clpath)//'1_'//TRIM(cn_ocerst_in) 
    318         ENDIF 
     319 
    319320!set name of the restart file and enable available fields 
    320321        if(lwp) WRITE(numout,*) 'Setting restart filename (for XIOS) to: ',rst_file 
     
    327328        DO i = 1, max_rst_fields 
    328329         IF( TRIM(rst_rfields(i)%vname) /= "NO_NAME") THEN 
    329            IF( iom_varid( numror, TRIM(rst_rfields(i)%vname), ldstop = .FALSE. ) > 0 ) THEN 
     330           IF( iom_varid( numrst, TRIM(rst_rfields(i)%vname), ldstop = .FALSE. ) > 0 ) THEN 
     331                IF(TRIM(rst_rfields(i)%vname) == "e_s") lrsi3_nemo = .FALSE.       ! SI3 restart written by XIOS 
    330332                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_rfields(i)%vname)) 
    331333                SELECT CASE (TRIM(rst_rfields(i)%grid)) 
     334!                CASE ("grid_Ni_4D") 
     335!                   CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
     336!                       domain_ref="grid_N", axis_ref="nlay_i", axis_ref="numcat", operation = "instant") 
     337!                CASE ("grid_Ns_4D") 
     338!                   CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
     339!                       domain_ref="grid_N", axis_ref="nlay_s", axis_ref="numcat", operation = "instant") 
     340                 CASE ("grid_Ni_3D") 
     341                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
     342                        domain_ref="grid_N", axis_ref="numcat", operation = "instant") 
    332343                 CASE ("grid_N_3D") 
    333344                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
     
    361372   IF(cdmdl == "OPA") THEN 
    362373!from restart.F90 
    363    CALL iom_set_rstw_var_active("rdt") 
     374   CALL iom_set_rstw_var_active(rst_wfields, "rdt") 
    364375   IF ( .NOT. ln_diurnal_only ) THEN 
    365         CALL iom_set_rstw_var_active('ub'  ) 
    366         CALL iom_set_rstw_var_active('vb'  ) 
    367         CALL iom_set_rstw_var_active('tb'  ) 
    368         CALL iom_set_rstw_var_active('sb'  ) 
    369         CALL iom_set_rstw_var_active('sshb') 
     376        CALL iom_set_rstw_var_active(rst_wfields, 'ub'  ) 
     377        CALL iom_set_rstw_var_active(rst_wfields, 'vb'  ) 
     378        CALL iom_set_rstw_var_active(rst_wfields, 'tb'  ) 
     379        CALL iom_set_rstw_var_active(rst_wfields, 'sb'  ) 
     380        CALL iom_set_rstw_var_active(rst_wfields, 'sshb') 
    370381        ! 
    371         CALL iom_set_rstw_var_active('un'  ) 
    372         CALL iom_set_rstw_var_active('vn'  ) 
    373         CALL iom_set_rstw_var_active('tn'  ) 
    374         CALL iom_set_rstw_var_active('sn'  ) 
    375         CALL iom_set_rstw_var_active('sshn') 
    376         CALL iom_set_rstw_var_active('rhop') 
     382        CALL iom_set_rstw_var_active(rst_wfields, 'un'  ) 
     383        CALL iom_set_rstw_var_active(rst_wfields, 'vn'  ) 
     384        CALL iom_set_rstw_var_active(rst_wfields, 'tn'  ) 
     385        CALL iom_set_rstw_var_active(rst_wfields, 'sn'  ) 
     386        CALL iom_set_rstw_var_active(rst_wfields, 'sshn') 
     387        CALL iom_set_rstw_var_active(rst_wfields, 'rhop') 
    377388     ! extra variable needed for the ice sheet coupling 
    378389        IF ( ln_iscpl ) THEN 
    379              CALL iom_set_rstw_var_active('tmask') 
    380              CALL iom_set_rstw_var_active('umask') 
    381              CALL iom_set_rstw_var_active('vmask') 
    382              CALL iom_set_rstw_var_active('smask') 
    383              CALL iom_set_rstw_var_active('e3t_n') 
    384              CALL iom_set_rstw_var_active('e3u_n') 
    385              CALL iom_set_rstw_var_active('e3v_n') 
    386              CALL iom_set_rstw_var_active('gdepw_n') 
     390             CALL iom_set_rstw_var_active(rst_wfields, 'tmask') 
     391             CALL iom_set_rstw_var_active(rst_wfields, 'umask') 
     392             CALL iom_set_rstw_var_active(rst_wfields, 'vmask') 
     393             CALL iom_set_rstw_var_active(rst_wfields, 'smask') 
     394             CALL iom_set_rstw_var_active(rst_wfields, 'e3t_n') 
     395             CALL iom_set_rstw_var_active(rst_wfields, 'e3u_n') 
     396             CALL iom_set_rstw_var_active(rst_wfields, 'e3v_n') 
     397             CALL iom_set_rstw_var_active(rst_wfields, 'gdepw_n') 
    387398        END IF 
    388399      ENDIF 
    389       IF(ln_diurnal) CALL iom_set_rstw_var_active('Dsst') 
     400      IF(ln_diurnal) CALL iom_set_rstw_var_active(rst_wfields, 'Dsst') 
    390401!from trasbc.F90 
    391          CALL iom_set_rstw_var_active('sbc_hc_b') 
    392          CALL iom_set_rstw_var_active('sbc_sc_b') 
     402         CALL iom_set_rstw_var_active(rst_wfields, 'sbc_hc_b') 
     403         CALL iom_set_rstw_var_active(rst_wfields, 'sbc_sc_b') 
    393404   ENDIF 
    394405#else 
     
    407418      !!--------------------------------------------------------------------- 
    408419   TYPE(RST_FIELD), INTENT(INOUT) :: fields(max_rst_fields) 
    409    INTEGER :: i 
     420   INTEGER :: i, jk 
     421   CHARACTER(len=2)  ::   zchar 
     422   CHARACTER(len=25) ::   znam 
    410423 
    411424        i = 0 
    412         i = i + 1; fields(i)%vname="rdt";            fields(i)%grid="grid_scalar" 
    413         i = i + 1; fields(i)%vname="un";             fields(i)%grid="grid_N_3D" 
    414         i = i + 1; fields(i)%vname="ub";             fields(i)%grid="grid_N_3D" 
    415         i = i + 1; fields(i)%vname="vn";             fields(i)%grid="grid_N_3D" 
    416         i = i + 1; fields(i)%vname="vb";             fields(i)%grid="grid_N_3D"   
    417         i = i + 1; fields(i)%vname="tn";             fields(i)%grid="grid_N_3D" 
    418         i = i + 1; fields(i)%vname="tb";             fields(i)%grid="grid_N_3D" 
    419         i = i + 1; fields(i)%vname="sn";             fields(i)%grid="grid_N_3D" 
    420         i = i + 1; fields(i)%vname="sb";             fields(i)%grid="grid_N_3D" 
    421         i = i + 1; fields(i)%vname="sshn";           fields(i)%grid="grid_N" 
    422         i = i + 1; fields(i)%vname="sshb";           fields(i)%grid="grid_N" 
    423         i = i + 1; fields(i)%vname="rhop";           fields(i)%grid="grid_N_3D" 
    424         i = i + 1; fields(i)%vname="kt";             fields(i)%grid="grid_scalar" 
    425         i = i + 1; fields(i)%vname="ndastp";         fields(i)%grid="grid_scalar" 
    426         i = i + 1; fields(i)%vname="adatrj";         fields(i)%grid="grid_scalar" 
    427         i = i + 1; fields(i)%vname="utau_b";         fields(i)%grid="grid_N" 
    428         i = i + 1; fields(i)%vname="vtau_b";         fields(i)%grid="grid_N" 
    429         i = i + 1; fields(i)%vname="qns_b";          fields(i)%grid="grid_N" 
    430         i = i + 1; fields(i)%vname="emp_b";          fields(i)%grid="grid_N" 
    431         i = i + 1; fields(i)%vname="sfx_b";          fields(i)%grid="grid_N" 
    432         i = i + 1; fields(i)%vname="en" ;            fields(i)%grid="grid_N_3D"  
    433         i = i + 1; fields(i)%vname="avt_k";            fields(i)%grid="grid_N_3D" 
    434         i = i + 1; fields(i)%vname="avm_k";            fields(i)%grid="grid_N_3D" 
    435         i = i + 1; fields(i)%vname="dissl";          fields(i)%grid="grid_N_3D" 
    436         i = i + 1; fields(i)%vname="sbc_hc_b";       fields(i)%grid="grid_N" 
    437         i = i + 1; fields(i)%vname="sbc_sc_b";       fields(i)%grid="grid_N" 
    438         i = i + 1; fields(i)%vname="qsr_hc_b";       fields(i)%grid="grid_N_3D" 
    439         i = i + 1; fields(i)%vname="fraqsr_1lev";    fields(i)%grid="grid_N" 
    440         i = i + 1; fields(i)%vname="greenland_icesheet_mass" 
     425        i = iom_add(i); fields(i)%vname="rdt";            fields(i)%grid="grid_scalar" 
     426        i = iom_add(i); fields(i)%vname="un";             fields(i)%grid="grid_N_3D" 
     427        i = iom_add(i); fields(i)%vname="ub";             fields(i)%grid="grid_N_3D" 
     428        i = iom_add(i); fields(i)%vname="vn";             fields(i)%grid="grid_N_3D" 
     429        i = iom_add(i); fields(i)%vname="vb";             fields(i)%grid="grid_N_3D"   
     430        i = iom_add(i); fields(i)%vname="tn";             fields(i)%grid="grid_N_3D" 
     431        i = iom_add(i); fields(i)%vname="tb";             fields(i)%grid="grid_N_3D" 
     432        i = iom_add(i); fields(i)%vname="sn";             fields(i)%grid="grid_N_3D" 
     433        i = iom_add(i); fields(i)%vname="sb";             fields(i)%grid="grid_N_3D" 
     434        i = iom_add(i); fields(i)%vname="sshn";           fields(i)%grid="grid_N" 
     435        i = iom_add(i); fields(i)%vname="sshb";           fields(i)%grid="grid_N" 
     436        i = iom_add(i); fields(i)%vname="rhop";           fields(i)%grid="grid_N_3D" 
     437        i = iom_add(i); fields(i)%vname="kt";             fields(i)%grid="grid_scalar" 
     438        i = iom_add(i); fields(i)%vname="ndastp";         fields(i)%grid="grid_scalar" 
     439        i = iom_add(i); fields(i)%vname="adatrj";         fields(i)%grid="grid_scalar" 
     440        i = iom_add(i); fields(i)%vname="utau_b";         fields(i)%grid="grid_N" 
     441        i = iom_add(i); fields(i)%vname="vtau_b";         fields(i)%grid="grid_N" 
     442        i = iom_add(i); fields(i)%vname="qns_b";          fields(i)%grid="grid_N" 
     443        i = iom_add(i); fields(i)%vname="emp_b";          fields(i)%grid="grid_N" 
     444        i = iom_add(i); fields(i)%vname="sfx_b";          fields(i)%grid="grid_N" 
     445        i = iom_add(i); fields(i)%vname="en" ;            fields(i)%grid="grid_N_3D"  
     446        i = iom_add(i); fields(i)%vname="avt_k";            fields(i)%grid="grid_N_3D" 
     447        i = iom_add(i); fields(i)%vname="avm_k";            fields(i)%grid="grid_N_3D" 
     448        i = iom_add(i); fields(i)%vname="dissl";          fields(i)%grid="grid_N_3D" 
     449        i = iom_add(i); fields(i)%vname="sbc_hc_b";       fields(i)%grid="grid_N" 
     450        i = iom_add(i); fields(i)%vname="sbc_sc_b";       fields(i)%grid="grid_N" 
     451        i = iom_add(i); fields(i)%vname="qsr_hc_b";       fields(i)%grid="grid_N_3D" 
     452        i = iom_add(i); fields(i)%vname="fraqsr_1lev";    fields(i)%grid="grid_N" 
     453        i = iom_add(i); fields(i)%vname="greenland_icesheet_mass" 
    441454                                               fields(i)%grid="grid_scalar" 
    442         i = i + 1; fields(i)%vname="greenland_icesheet_timelapsed" 
     455        i = iom_add(i); fields(i)%vname="greenland_icesheet_timelapsed" 
    443456                                               fields(i)%grid="grid_scalar" 
    444         i = i + 1; fields(i)%vname="greenland_icesheet_mass_roc" 
     457        i = iom_add(i); fields(i)%vname="greenland_icesheet_mass_roc" 
    445458                                               fields(i)%grid="grid_scalar" 
    446         i = i + 1; fields(i)%vname="antarctica_icesheet_mass" 
     459        i = iom_add(i); fields(i)%vname="antarctica_icesheet_mass" 
    447460                                               fields(i)%grid="grid_scalar" 
    448         i = i + 1; fields(i)%vname="antarctica_icesheet_timelapsed" 
     461        i = iom_add(i); fields(i)%vname="antarctica_icesheet_timelapsed" 
    449462                                               fields(i)%grid="grid_scalar" 
    450         i = i + 1; fields(i)%vname="antarctica_icesheet_mass_roc" 
     463        i = iom_add(i); fields(i)%vname="antarctica_icesheet_mass_roc" 
    451464                                               fields(i)%grid="grid_scalar" 
    452         i = i + 1; fields(i)%vname="frc_v";          fields(i)%grid="grid_scalar" 
    453         i = i + 1; fields(i)%vname="frc_t";          fields(i)%grid="grid_scalar" 
    454         i = i + 1; fields(i)%vname="frc_s";          fields(i)%grid="grid_scalar" 
    455         i = i + 1; fields(i)%vname="frc_wn_t";       fields(i)%grid="grid_scalar" 
    456         i = i + 1; fields(i)%vname="frc_wn_s";       fields(i)%grid="grid_scalar" 
    457         i = i + 1; fields(i)%vname="ssh_ini";        fields(i)%grid="grid_N" 
    458         i = i + 1; fields(i)%vname="e3t_ini";        fields(i)%grid="grid_N_3D" 
    459         i = i + 1; fields(i)%vname="hc_loc_ini";     fields(i)%grid="grid_N_3D" 
    460         i = i + 1; fields(i)%vname="sc_loc_ini";     fields(i)%grid="grid_N_3D" 
    461         i = i + 1; fields(i)%vname="ssh_hc_loc_ini"; fields(i)%grid="grid_N" 
    462         i = i + 1; fields(i)%vname="ssh_sc_loc_ini"; fields(i)%grid="grid_N" 
    463         i = i + 1; fields(i)%vname="tilde_e3t_b";    fields(i)%grid="grid_N" 
    464         i = i + 1; fields(i)%vname="tilde_e3t_n";    fields(i)%grid="grid_N" 
    465         i = i + 1; fields(i)%vname="hdiv_lf";        fields(i)%grid="grid_N" 
    466         i = i + 1; fields(i)%vname="ub2_b";          fields(i)%grid="grid_N" 
    467         i = i + 1; fields(i)%vname="vb2_b";          fields(i)%grid="grid_N" 
    468         i = i + 1; fields(i)%vname="sshbb_e";        fields(i)%grid="grid_N" 
    469         i = i + 1; fields(i)%vname="ubb_e";          fields(i)%grid="grid_N" 
    470         i = i + 1; fields(i)%vname="vbb_e";          fields(i)%grid="grid_N" 
    471         i = i + 1; fields(i)%vname="sshb_e";         fields(i)%grid="grid_N" 
    472         i = i + 1; fields(i)%vname="ub_e";           fields(i)%grid="grid_N" 
    473         i = i + 1; fields(i)%vname="vb_e";           fields(i)%grid="grid_N" 
    474         i = i + 1; fields(i)%vname="fwf_isf_b";      fields(i)%grid="grid_N" 
    475         i = i + 1; fields(i)%vname="isf_sc_b";       fields(i)%grid="grid_N" 
    476         i = i + 1; fields(i)%vname="isf_hc_b";       fields(i)%grid="grid_N" 
    477         i = i + 1; fields(i)%vname="ssh_ibb";        fields(i)%grid="grid_N" 
    478         i = i + 1; fields(i)%vname="rnf_b";          fields(i)%grid="grid_N" 
    479         i = i + 1; fields(i)%vname="rnf_hc_b";       fields(i)%grid="grid_N" 
    480         i = i + 1; fields(i)%vname="rnf_sc_b";       fields(i)%grid="grid_N" 
    481         i = i + 1; fields(i)%vname="nn_fsbc";        fields(i)%grid="grid_scalar" 
    482         i = i + 1; fields(i)%vname="ssu_m";          fields(i)%grid="grid_N" 
    483         i = i + 1; fields(i)%vname="ssv_m";          fields(i)%grid="grid_N" 
    484         i = i + 1; fields(i)%vname="sst_m";          fields(i)%grid="grid_N" 
    485         i = i + 1; fields(i)%vname="sss_m";          fields(i)%grid="grid_N" 
    486         i = i + 1; fields(i)%vname="ssh_m";          fields(i)%grid="grid_N" 
    487         i = i + 1; fields(i)%vname="e3t_m";          fields(i)%grid="grid_N" 
    488         i = i + 1; fields(i)%vname="frq_m";          fields(i)%grid="grid_N" 
    489         i = i + 1; fields(i)%vname="avmb";           fields(i)%grid="grid_vector" 
    490         i = i + 1; fields(i)%vname="avtb";           fields(i)%grid="grid_vector" 
    491         i = i + 1; fields(i)%vname="ub2_i_b";        fields(i)%grid="grid_N" 
    492         i = i + 1; fields(i)%vname="vb2_i_b";        fields(i)%grid="grid_N" 
    493         i = i + 1; fields(i)%vname="ntime";          fields(i)%grid="grid_scalar" 
    494         i = i + 1; fields(i)%vname="Dsst";           fields(i)%grid="grid_scalar" 
    495         i = i + 1; fields(i)%vname="tmask";          fields(i)%grid="grid_N_3D" 
    496         i = i + 1; fields(i)%vname="umask";          fields(i)%grid="grid_N_3D" 
    497         i = i + 1; fields(i)%vname="vmask";          fields(i)%grid="grid_N_3D" 
    498         i = i + 1; fields(i)%vname="smask";          fields(i)%grid="grid_N_3D" 
    499         i = i + 1; fields(i)%vname="gdepw_n";        fields(i)%grid="grid_N_3D" 
    500         i = i + 1; fields(i)%vname="e3t_n";          fields(i)%grid="grid_N_3D" 
    501         i = i + 1; fields(i)%vname="e3u_n";          fields(i)%grid="grid_N_3D" 
    502         i = i + 1; fields(i)%vname="e3v_n";          fields(i)%grid="grid_N_3D" 
    503         i = i + 1; fields(i)%vname="surf_ini";       fields(i)%grid="grid_N" 
    504         i = i + 1; fields(i)%vname="e3t_b";          fields(i)%grid="grid_N_3D" 
    505         i = i + 1; fields(i)%vname="hmxl_n";         fields(i)%grid="grid_N_3D" 
    506         i = i + 1; fields(i)%vname="un_bf";          fields(i)%grid="grid_N" 
    507         i = i + 1; fields(i)%vname="vn_bf";          fields(i)%grid="grid_N" 
    508         i = i + 1; fields(i)%vname="hbl";            fields(i)%grid="grid_N" 
    509         i = i + 1; fields(i)%vname="hbli";           fields(i)%grid="grid_N" 
    510         i = i + 1; fields(i)%vname="wn";             fields(i)%grid="grid_N_3D" 
    511  
    512         IF( i-1 > max_rst_fields) THEN 
    513            WRITE(ctmp1,*) 'E R R O R : iom_set_rst_vars SIZE of RST_FIELD array is too small' 
    514            CALL ctl_stop( 'iom_set_rst_vars:', ctmp1 ) 
    515         ENDIF 
     465        i = iom_add(i); fields(i)%vname="frc_v";          fields(i)%grid="grid_scalar" 
     466        i = iom_add(i); fields(i)%vname="frc_t";          fields(i)%grid="grid_scalar" 
     467        i = iom_add(i); fields(i)%vname="frc_s";          fields(i)%grid="grid_scalar" 
     468        i = iom_add(i); fields(i)%vname="frc_wn_t";       fields(i)%grid="grid_scalar" 
     469        i = iom_add(i); fields(i)%vname="frc_wn_s";       fields(i)%grid="grid_scalar" 
     470        i = iom_add(i); fields(i)%vname="ssh_ini";        fields(i)%grid="grid_N" 
     471        i = iom_add(i); fields(i)%vname="e3t_ini";        fields(i)%grid="grid_N_3D" 
     472        i = iom_add(i); fields(i)%vname="hc_loc_ini";     fields(i)%grid="grid_N_3D" 
     473        i = iom_add(i); fields(i)%vname="sc_loc_ini";     fields(i)%grid="grid_N_3D" 
     474        i = iom_add(i); fields(i)%vname="ssh_hc_loc_ini"; fields(i)%grid="grid_N" 
     475        i = iom_add(i); fields(i)%vname="ssh_sc_loc_ini"; fields(i)%grid="grid_N" 
     476        i = iom_add(i); fields(i)%vname="tilde_e3t_b";    fields(i)%grid="grid_N" 
     477        i = iom_add(i); fields(i)%vname="tilde_e3t_n";    fields(i)%grid="grid_N" 
     478        i = iom_add(i); fields(i)%vname="hdiv_lf";        fields(i)%grid="grid_N" 
     479        i = iom_add(i); fields(i)%vname="ub2_b";          fields(i)%grid="grid_N" 
     480        i = iom_add(i); fields(i)%vname="vb2_b";          fields(i)%grid="grid_N" 
     481        i = iom_add(i); fields(i)%vname="sshbb_e";        fields(i)%grid="grid_N" 
     482        i = iom_add(i); fields(i)%vname="ubb_e";          fields(i)%grid="grid_N" 
     483        i = iom_add(i); fields(i)%vname="vbb_e";          fields(i)%grid="grid_N" 
     484        i = iom_add(i); fields(i)%vname="sshb_e";         fields(i)%grid="grid_N" 
     485        i = iom_add(i); fields(i)%vname="ub_e";           fields(i)%grid="grid_N" 
     486        i = iom_add(i); fields(i)%vname="vb_e";           fields(i)%grid="grid_N" 
     487        i = iom_add(i); fields(i)%vname="fwf_isf_b";      fields(i)%grid="grid_N" 
     488        i = iom_add(i); fields(i)%vname="isf_sc_b";       fields(i)%grid="grid_N" 
     489        i = iom_add(i); fields(i)%vname="isf_hc_b";       fields(i)%grid="grid_N" 
     490        i = iom_add(i); fields(i)%vname="ssh_ibb";        fields(i)%grid="grid_N" 
     491        i = iom_add(i); fields(i)%vname="rnf_b";          fields(i)%grid="grid_N" 
     492        i = iom_add(i); fields(i)%vname="rnf_hc_b";       fields(i)%grid="grid_N" 
     493        i = iom_add(i); fields(i)%vname="rnf_sc_b";       fields(i)%grid="grid_N" 
     494        i = iom_add(i); fields(i)%vname="nn_fsbc";        fields(i)%grid="grid_scalar" 
     495        i = iom_add(i); fields(i)%vname="ssu_m";          fields(i)%grid="grid_N" 
     496        i = iom_add(i); fields(i)%vname="ssv_m";          fields(i)%grid="grid_N" 
     497        i = iom_add(i); fields(i)%vname="sst_m";          fields(i)%grid="grid_N" 
     498        i = iom_add(i); fields(i)%vname="sss_m";          fields(i)%grid="grid_N" 
     499        i = iom_add(i); fields(i)%vname="ssh_m";          fields(i)%grid="grid_N" 
     500        i = iom_add(i); fields(i)%vname="e3t_m";          fields(i)%grid="grid_N" 
     501        i = iom_add(i); fields(i)%vname="frq_m";          fields(i)%grid="grid_N" 
     502        i = iom_add(i); fields(i)%vname="avmb";           fields(i)%grid="grid_vector" 
     503        i = iom_add(i); fields(i)%vname="avtb";           fields(i)%grid="grid_vector" 
     504        i = iom_add(i); fields(i)%vname="ub2_i_b";        fields(i)%grid="grid_N" 
     505        i = iom_add(i); fields(i)%vname="vb2_i_b";        fields(i)%grid="grid_N" 
     506        i = iom_add(i); fields(i)%vname="ntime";          fields(i)%grid="grid_scalar" 
     507        i = iom_add(i); fields(i)%vname="Dsst";           fields(i)%grid="grid_scalar" 
     508        i = iom_add(i); fields(i)%vname="tmask";          fields(i)%grid="grid_N_3D" 
     509        i = iom_add(i); fields(i)%vname="umask";          fields(i)%grid="grid_N_3D" 
     510        i = iom_add(i); fields(i)%vname="vmask";          fields(i)%grid="grid_N_3D" 
     511        i = iom_add(i); fields(i)%vname="smask";          fields(i)%grid="grid_N_3D" 
     512        i = iom_add(i); fields(i)%vname="gdepw_n";        fields(i)%grid="grid_N_3D" 
     513        i = iom_add(i); fields(i)%vname="e3t_n";          fields(i)%grid="grid_N_3D" 
     514        i = iom_add(i); fields(i)%vname="e3u_n";          fields(i)%grid="grid_N_3D" 
     515        i = iom_add(i); fields(i)%vname="e3v_n";          fields(i)%grid="grid_N_3D" 
     516        i = iom_add(i); fields(i)%vname="surf_ini";       fields(i)%grid="grid_N" 
     517        i = iom_add(i); fields(i)%vname="e3t_b";          fields(i)%grid="grid_N_3D" 
     518        i = iom_add(i); fields(i)%vname="hmxl_n";         fields(i)%grid="grid_N_3D" 
     519        i = iom_add(i); fields(i)%vname="un_bf";          fields(i)%grid="grid_N" 
     520        i = iom_add(i); fields(i)%vname="vn_bf";          fields(i)%grid="grid_N" 
     521        i = iom_add(i); fields(i)%vname="hbl";            fields(i)%grid="grid_N" 
     522        i = iom_add(i); fields(i)%vname="hbli";           fields(i)%grid="grid_N" 
     523        i = iom_add(i); fields(i)%vname="wn";             fields(i)%grid="grid_N_3D" 
     524#ifdef key_si3 
     525!ICE/icedia.F90 
     526        i = iom_add(i); fields(i)%vname="kt_ice";         fields(i)%grid="grid_scalar" 
     527        i = iom_add(i); fields(i)%vname="frc_voltop";     fields(i)%grid="grid_scalar" 
     528        i = iom_add(i); fields(i)%vname="frc_volbot";     fields(i)%grid="grid_scalar" 
     529        i = iom_add(i); fields(i)%vname="frc_temtop";     fields(i)%grid="grid_scalar" 
     530        i = iom_add(i); fields(i)%vname="frc_tembot";     fields(i)%grid="grid_scalar"  
     531        i = iom_add(i); fields(i)%vname="frc_sal";        fields(i)%grid="grid_scalar" 
     532        i = iom_add(i); fields(i)%vname="vol_loc_ini";    fields(i)%grid="grid_N" 
     533        i = iom_add(i); fields(i)%vname="tem_loc_ini";    fields(i)%grid="grid_N" 
     534        i = iom_add(i); fields(i)%vname="sal_loc_ini";    fields(i)%grid="grid_N" 
     535        i = iom_add(i); fields(i)%vname="sal_loc_ini";    fields(i)%grid="grid_N" 
     536!ICE/icedyn_adv_pra.F90 grid_Ni_3D - jpi,jpj,jpl  
     537        i = iom_add(i); fields(i)%vname="sxice";          fields(i)%grid="grid_Ni_3D" 
     538        i = iom_add(i); fields(i)%vname="syice";          fields(i)%grid="grid_Ni_3D" 
     539        i = iom_add(i); fields(i)%vname="sxxice";         fields(i)%grid="grid_Ni_3D" 
     540        i = iom_add(i); fields(i)%vname="syyice";         fields(i)%grid="grid_Ni_3D" 
     541        i = iom_add(i); fields(i)%vname="sxyice";         fields(i)%grid="grid_Ni_3D" 
     542        i = iom_add(i); fields(i)%vname="sxsn";           fields(i)%grid="grid_Ni_3D" 
     543        i = iom_add(i); fields(i)%vname="sysn";           fields(i)%grid="grid_Ni_3D" 
     544        i = iom_add(i); fields(i)%vname="sxxsn";          fields(i)%grid="grid_Ni_3D" 
     545        i = iom_add(i); fields(i)%vname="syysn";          fields(i)%grid="grid_Ni_3D" 
     546        i = iom_add(i); fields(i)%vname="sxysn";          fields(i)%grid="grid_Ni_3D" 
     547        i = iom_add(i); fields(i)%vname="sxa";            fields(i)%grid="grid_Ni_3D" 
     548        i = iom_add(i); fields(i)%vname="sya";            fields(i)%grid="grid_Ni_3D" 
     549        i = iom_add(i); fields(i)%vname="sxxa";           fields(i)%grid="grid_Ni_3D" 
     550        i = iom_add(i); fields(i)%vname="syya";           fields(i)%grid="grid_Ni_3D" 
     551        i = iom_add(i); fields(i)%vname="sxya";           fields(i)%grid="grid_Ni_3D" 
     552        i = iom_add(i); fields(i)%vname="sxsal";          fields(i)%grid="grid_Ni_3D" 
     553        i = iom_add(i); fields(i)%vname="sysal";          fields(i)%grid="grid_Ni_3D" 
     554        i = iom_add(i); fields(i)%vname="sxxsal";         fields(i)%grid="grid_Ni_3D" 
     555        i = iom_add(i); fields(i)%vname="syysal";         fields(i)%grid="grid_Ni_3D" 
     556        i = iom_add(i); fields(i)%vname="sxysal";         fields(i)%grid="grid_Ni_3D" 
     557        i = iom_add(i); fields(i)%vname="sxage";          fields(i)%grid="grid_Ni_3D" 
     558        i = iom_add(i); fields(i)%vname="syage";          fields(i)%grid="grid_Ni_3D" 
     559        i = iom_add(i); fields(i)%vname="sxxage";         fields(i)%grid="grid_Ni_3D" 
     560        i = iom_add(i); fields(i)%vname="syyage";         fields(i)%grid="grid_Ni_3D" 
     561        i = iom_add(i); fields(i)%vname="sxyage";         fields(i)%grid="grid_Ni_3D" 
     562!this part is in addition to 4D grids, to handle old format of SI3 resart 
     563!NEMO format restart 
     564        DO jk = 1, nlay_s 
     565           WRITE(zchar,'(I2.2)') jk 
     566           znam = 'sxc0'//'_l'//zchar 
     567           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     568           znam = 'syc0'//'_l'//zchar 
     569           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     570           znam = 'sxxc0'//'_l'//zchar 
     571           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     572           znam = 'syyc0'//'_l'//zchar 
     573           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     574           znam = 'sxyc0'//'_l'//zchar 
     575           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     576        END DO 
     577!XIOS format restart 
     578        i = iom_add(i); fields(i)%vname="sxc0";           fields(i)%grid="grid_Ns_4D" 
     579        i = iom_add(i); fields(i)%vname="syc0";           fields(i)%grid="grid_Ns_4D" 
     580        i = iom_add(i); fields(i)%vname="sxxc0";          fields(i)%grid="grid_Ns_4D" 
     581        i = iom_add(i); fields(i)%vname="syyc0";          fields(i)%grid="grid_Ns_4D" 
     582        i = iom_add(i); fields(i)%vname="sxxc0";          fields(i)%grid="grid_Ns_4D" 
     583        ! 
     584!NEMO format restart 
     585        DO jk = 1, nlay_i 
     586           WRITE(zchar,'(I2.2)') jk 
     587           znam = 'sxe'//'_l'//zchar 
     588           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     589           znam = 'sye'//'_l'//zchar   
     590           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     591           znam = 'sxxe'//'_l'//zchar 
     592           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     593           znam = 'syye'//'_l'//zchar 
     594           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     595           znam = 'sxye'//'_l'//zchar 
     596           i = iom_add(i); fields(i)%vname=znam;          fields(i)%grid="grid_Ni_3D" 
     597        ENDDO 
     598!XIOS format restart 
     599        i = iom_add(i); fields(i)%vname="sxe";           fields(i)%grid="grid_Ni_4D" 
     600        i = iom_add(i); fields(i)%vname="sye";           fields(i)%grid="grid_Ni_4D" 
     601        i = iom_add(i); fields(i)%vname="sxxe";          fields(i)%grid="grid_Ni_4D" 
     602        i = iom_add(i); fields(i)%vname="syye";          fields(i)%grid="grid_Ni_4D" 
     603        i = iom_add(i); fields(i)%vname="sxye";          fields(i)%grid="grid_Ni_4D" 
     604!common for both 
     605        i = iom_add(i); fields(i)%vname="sxap";          fields(i)%grid="grid_Ni_3D" 
     606        i = iom_add(i); fields(i)%vname="syap";          fields(i)%grid="grid_Ni_3D" 
     607        i = iom_add(i); fields(i)%vname="sxxap";         fields(i)%grid="grid_Ni_3D" 
     608        i = iom_add(i); fields(i)%vname="syyap";         fields(i)%grid="grid_Ni_3D" 
     609        i = iom_add(i); fields(i)%vname="sxyap";         fields(i)%grid="grid_Ni_3D" 
     610        i = iom_add(i); fields(i)%vname="sxvp";          fields(i)%grid="grid_Ni_3D" 
     611        i = iom_add(i); fields(i)%vname="syvp";          fields(i)%grid="grid_Ni_3D" 
     612        i = iom_add(i); fields(i)%vname="sxxvp";         fields(i)%grid="grid_Ni_3D" 
     613        i = iom_add(i); fields(i)%vname="syyvp";         fields(i)%grid="grid_Ni_3D" 
     614        i = iom_add(i); fields(i)%vname="sxyvp";         fields(i)%grid="grid_Ni_3D" 
     615        i = iom_add(i); fields(i)%vname="stress1_i";     fields(i)%grid="grid_N" 
     616        i = iom_add(i); fields(i)%vname="stress2_i";     fields(i)%grid="grid_N" 
     617        i = iom_add(i); fields(i)%vname="stress12_i";    fields(i)%grid="grid_N" 
     618        i = iom_add(i); fields(i)%vname="nn_fsbc";       fields(i)%grid="grid_scalar" 
     619        i = iom_add(i); fields(i)%vname="kt_ice";        fields(i)%grid="grid_scalar" 
     620        i = iom_add(i); fields(i)%vname="v_i";           fields(i)%grid="grid_Ni_3D" 
     621        i = iom_add(i); fields(i)%vname="v_s";           fields(i)%grid="grid_Ni_3D" 
     622        i = iom_add(i); fields(i)%vname="sv_i";          fields(i)%grid="grid_Ni_3D" 
     623        i = iom_add(i); fields(i)%vname="a_i";           fields(i)%grid="grid_Ni_3D" 
     624        i = iom_add(i); fields(i)%vname="t_su";          fields(i)%grid="grid_Ni_3D" 
     625        i = iom_add(i); fields(i)%vname="u_ice";         fields(i)%grid="grid_N" 
     626        i = iom_add(i); fields(i)%vname="v_ice";         fields(i)%grid="grid_N" 
     627!NEMO format restat 
     628        DO jk = 1, nlay_s 
     629           WRITE(zchar,'(I2.2)') jk 
     630           znam = 'e_s'//'_l'//zchar 
     631           i = iom_add(i); fields(i)%vname=znam;         fields(i)%grid="grid_Ni_3D" 
     632        END DO 
     633!XIOS format restart 
     634        i = iom_add(i); fields(i)%vname="e_s";           fields(i)%grid="grid_Ns_4D" 
     635!NEMO format restat 
     636        DO jk = 1, nlay_i 
     637           WRITE(zchar,'(I2.2)') jk 
     638           znam = 'e_i'//'_l'//zchar 
     639           i = iom_add(i); fields(i)%vname=znam;         fields(i)%grid="grid_Ni_3D" 
     640        END DO 
     641!XIOS format restart 
     642        i = iom_add(i); fields(i)%vname="e_i";           fields(i)%grid="grid_Ni_4D" 
     643!common for both 
     644        i = iom_add(i); fields(i)%vname="oa_i";          fields(i)%grid="grid_Ni_3D" 
     645        i = iom_add(i); fields(i)%vname="a_ip";          fields(i)%grid="grid_Ni_3D" 
     646        i = iom_add(i); fields(i)%vname="v_ip";          fields(i)%grid="grid_Ni_3D" 
     647        i = iom_add(i); fields(i)%vname="cnd_ice";       fields(i)%grid="grid_Ni_3D" 
     648        i = iom_add(i); fields(i)%vname="t1_ice";        fields(i)%grid="grid_Ni_3D" 
     649        i = iom_add(i); fields(i)%vname="snwice_mass";   fields(i)%grid="grid_N" 
     650        i = iom_add(i); fields(i)%vname="snwice_mass_b"; fields(i)%grid="grid_N" 
     651#endif 
    516652   END SUBROUTINE iom_set_rst_vars 
    517653 
    518654 
    519    SUBROUTINE iom_set_rstw_active(cdrst_file) 
     655   SUBROUTINE iom_set_rstw_active(drst_wfields, cdrst_file) 
    520656      !!--------------------------------------------------------------------- 
    521657      !!                   ***  SUBROUTINE iom_set_rstw_active   *** 
     
    525661      !!--------------------------------------------------------------------- 
    526662!sets enabled = .TRUE. for each field in restart file 
    527    CHARACTER(len=*) :: cdrst_file 
     663   CHARACTER(len=*), INTENT(IN) :: cdrst_file 
     664   TYPE(RST_FIELD),  INTENT(IN) :: drst_wfields(max_rst_fields) 
    528665#if defined key_iomput 
    529666   TYPE(xios_field) :: field_hdl 
     
    549686!define fields for restart context 
    550687        DO i = 1, max_rst_fields 
    551          IF( rst_wfields(i)%active ) THEN 
    552                 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_wfields(i)%vname)) 
    553                 SELECT CASE (TRIM(rst_wfields(i)%grid)) 
     688         IF( drst_wfields(i)%active ) THEN 
     689                CALL xios_add_child(file_hdl, field_hdl, TRIM(drst_wfields(i)%vname)) 
     690                SELECT CASE (TRIM(drst_wfields(i)%grid)) 
    554691                 CASE ("grid_N_3D") 
    555                     CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 
     692                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 
    556693                        domain_ref="grid_N", axis_ref="nav_lev", prec = 8, operation = "instant") 
    557694                 CASE ("grid_N") 
    558                     CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 
     695                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 
    559696                        domain_ref="grid_N", prec = 8, operation = "instant")  
    560697                 CASE ("grid_vector") 
    561                     CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 
     698                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 
    562699                         axis_ref="nav_lev", prec = 8, operation = "instant") 
    563700                 CASE ("grid_scalar") 
    564                     CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 
     701                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 
    565702                        scalar_ref = "grid_scalar", prec = 8, operation = "instant") 
    566703                END SELECT 
     
    588725   TYPE(xios_scalar)                 :: scalar_hdl  
    589726   TYPE(xios_scalargroup)            :: scalargroup_hdl  
     727   INTEGER                           :: ji 
    590728 
    591729     CALL xios_get_handle("domain_definition",domaingroup_hdl)  
     
    602740     CALL xios_get_handle("scalar_definition", scalargroup_hdl)  
    603741     CALL xios_add_child(scalargroup_hdl, scalar_hdl, "grid_scalar")  
     742#if defined key_si3 
     743     CALL xios_get_handle("axis_definition",axisgroup_hdl)  
     744     CALL xios_add_child(axisgroup_hdl, axis_hdl, "numcat") 
     745     CALL iom_set_axis_attr( "numcat", (/ (REAL(ji,wp), ji=1,jpl) /) ) 
     746     CALL xios_add_child(axisgroup_hdl, axis_hdl, "nlay_i") 
     747     CALL iom_set_axis_attr( "nlay_i", (/ (REAL(ji,wp), ji=1,nlay_i) /) ) 
     748     CALL xios_add_child(axisgroup_hdl, axis_hdl, "nlay_s") 
     749     CALL iom_set_axis_attr( "nlay_s", (/ (REAL(ji,wp), ji=1,nlay_s) /) ) 
     750#endif 
    604751#endif 
    605752   END SUBROUTINE iom_set_rst_context 
     
    614761#if defined key_iomput 
    615762      TYPE(xios_context) :: nemo_hdl 
    616  
     763       
    617764      IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
    618765        CALL xios_get_handle(TRIM(cdname),nemo_hdl) 
     
    9421089#if defined key_iomput 
    9431090         IF(lwp) WRITE(numout,*) 'XIOS RST READ (0D): ', trim(cdvar) 
    944          CALL iom_swap( TRIM(crxios_context) ) 
    9451091         CALL xios_recv_field( trim(cdvar), pvar) 
    946          CALL iom_swap( TRIM(cxios_context) ) 
    9471092#else 
    9481093         WRITE(ctmp1,*) 'Can not use XIOS in iom_g0d, file: '//trim(clname)//', var:'//trim(cdvar) 
     
    10101155      ENDIF 
    10111156   END SUBROUTINE iom_g3d 
     1157 
     1158   SUBROUTINE iom_g4d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr, ldxios ) 
     1159      INTEGER         , INTENT(in   )                             ::   kiomid    ! Identifier of the file 
     1160      INTEGER         , INTENT(in   )                             ::   kdom      ! Type of domain to be read 
     1161      CHARACTER(len=*), INTENT(in   )                             ::   cdvar     ! Name of the variable 
     1162      REAL(wp)        , INTENT(  out), DIMENSION(:,:,:,:)         ::   pvar      ! read field 
     1163      INTEGER         , INTENT(in   )                  , OPTIONAL ::   ktime     ! record number 
     1164      INTEGER         , INTENT(in   ), DIMENSION(4)    , OPTIONAL ::   kstart    ! start axis position of the reading  
     1165      INTEGER         , INTENT(in   ), DIMENSION(4)    , OPTIONAL ::   kcount    ! number of points in each axis 
     1166      LOGICAL         , INTENT(in   )                  , OPTIONAL ::   lrowattr  ! logical flag telling iom_get to 
     1167                                                                                 ! look for and use a file attribute 
     1168                                                                                 ! called open_ocean_jstart to set the start 
     1169                                                                                 ! value for the 2nd dimension (netcdf only) 
     1170      LOGICAL         , INTENT(in   ),               OPTIONAL ::   ldxios        ! read data using XIOS 
     1171      ! 
     1172      IF( kiomid > 0 ) THEN 
     1173         IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom       , cdvar        , pv_r4d=pvar,   & 
     1174              &                                                     ktime=ktime, kstart=kstart, kcount=kcount, & 
     1175              &                                                     lrowattr=lrowattr, ldxios=ldxios ) 
     1176      ENDIF 
     1177   END SUBROUTINE iom_g4d 
    10121178   !!---------------------------------------------------------------------- 
    10131179 
    10141180   SUBROUTINE iom_get_123d( kiomid, kdom  , cdvar ,   & 
    1015          &                  pv_r1d, pv_r2d, pv_r3d,   & 
     1181         &                  pv_r1d, pv_r2d, pv_r3d, pv_r4d,  & 
    10161182         &                  ktime , kstart, kcount,   & 
    10171183         &                  lrowattr, ldxios        ) 
     
    10291195      REAL(wp), DIMENSION(:,:)   , INTENT(  out), OPTIONAL ::   pv_r2d     ! read field (2D case) 
    10301196      REAL(wp), DIMENSION(:,:,:) , INTENT(  out), OPTIONAL ::   pv_r3d     ! read field (3D case) 
     1197      REAL(wp), DIMENSION(:,:,:,:),INTENT(  out), OPTIONAL ::   pv_r4d     ! read field (4D case) 
    10311198      INTEGER                    , INTENT(in   ), OPTIONAL ::   ktime      ! record number 
    10321199      INTEGER , DIMENSION(:)     , INTENT(in   ), OPTIONAL ::   kstart     ! start position of the reading in each axis  
     
    12931460#if defined key_iomput 
    12941461!would be good to be able to check which context is active and swap only if current is not restart 
    1295          CALL iom_swap( TRIM(crxios_context) )  
    1296          IF( PRESENT(pv_r3d) ) THEN 
     1462         IF( PRESENT(pv_r4d) ) THEN 
     1463            pv_r4d(:, :, :, :) = 0. 
     1464            if(lwp) write(numout,*) 'XIOS RST READ (4D): ',trim(cdvar) 
     1465            CALL xios_recv_field( trim(cdvar), pv_r4d) 
     1466            IF(idom /= jpdom_unknown ) then 
     1467                CALL lbc_lnk( 'iom', pv_r4d,'Z', -999., kfillmode = jpfillnothing) 
     1468            ENDIF 
     1469         ELSEIF( PRESENT(pv_r3d) ) THEN 
    12971470            pv_r3d(:, :, :) = 0. 
    12981471            if(lwp) write(numout,*) 'XIOS RST READ (3D): ',trim(cdvar) 
     
    13131486            CALL xios_recv_field( trim(cdvar), pv_r1d) 
    13141487         ENDIF 
    1315          CALL iom_swap( TRIM(cxios_context) ) 
    13161488#else 
    13171489         istop = istop + 1  
     
    13361508         IF( zscf /= 1.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) * zscf 
    13371509         IF( zofs /= 0.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) + zofs 
     1510      ELSEIF( PRESENT(pv_r4d) ) THEN 
     1511         IF( zscf /= 1.)   pv_r4d(:,:,:,:) = pv_r4d(:,:,:,:) * zscf 
     1512         IF( zofs /= 0.)   pv_r4d(:,:,:,:) = pv_r4d(:,:,:,:) + zofs 
    13381513      ENDIF 
    13391514      ! 
     
    23952570   END FUNCTION iom_sdate 
    23962571 
     2572   INTEGER FUNCTION iom_add(idm) 
     2573   INTEGER :: idm 
     2574 
     2575   iom_add = idm + 1 
     2576   IF( iom_add > max_rst_fields) THEN 
     2577     WRITE(ctmp1,*) 'E R R O R : iom_set_rst_vars SIZE of RST_FIELD array is too small' 
     2578     CALL ctl_stop( 'iom_add:', ctmp1 ) 
     2579   ENDIF 
     2580 
     2581   END FUNCTION iom_add 
     2582 
    23972583#else 
    23982584   !!---------------------------------------------------------------------- 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/IOM/iom_def.F90

    r10425 r11837  
    6767   END TYPE file_descriptor 
    6868   TYPE(file_descriptor), DIMENSION(jpmax_files), PUBLIC ::   iom_file !: array containing the info for all opened files 
    69    INTEGER, PARAMETER, PUBLIC                   :: max_rst_fields = 95 !: maximum number of restart variables defined in iom_set_rst_vars 
     69   INTEGER, PARAMETER, PUBLIC                   :: max_rst_fields = 360!: maximum number of restart variables defined in iom_set_rst_vars 
    7070   TYPE, PUBLIC :: RST_FIELD   
    7171    CHARACTER(len=30) :: vname = "NO_NAME" ! names of variables in restart file 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/IOM/restart.F90

    r11536 r11837  
    224224         IF( lrxios) THEN 
    225225             crxios_context = 'nemo_rst' 
    226              IF( .NOT.lxios_set ) THEN 
     226             IF( .NOT. lxios_set ) THEN 
    227227                 IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS' 
    228                  CALL iom_init( crxios_context, ld_tmppatch = .false. ) 
     228                 CALL iom_init( crxios_context, TRIM(clpath)//cn_ocerst_in, ld_tmppatch = .false. ) 
    229229                 lxios_set = .TRUE. 
    230230             ENDIF 
    231231         ENDIF 
    232232         IF( TRIM(Agrif_CFixed()) /= '0' .AND. lrxios) THEN 
    233              CALL iom_init( crxios_context, ld_tmppatch = .false. ) 
     233             CALL iom_init( crxios_context, TRIM(clpath)//cn_ocerst_in, ld_tmppatch = .false. ) 
    234234             IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS for AGRIF' 
    235235             lxios_set = .TRUE. 
     
    256256 
    257257      ! Check dynamics and tracer time-step consistency and force Euler restart if changed 
     258      IF(lrxios) CALL iom_swap(crxios_context) 
    258259      IF( iom_varid( numror, 'rdt', ldstop = .FALSE. ) > 0 )   THEN 
    259260         CALL iom_get( numror, 'rdt', zrdt, ldxios = lrxios ) 
     
    270271         rhop = rau0 
    271272         CALL iom_get( numror, jpdom_autoglo, 'tn'     , w3d, ldxios = lrxios )  
     273         IF(lrxios) CALL iom_swap(cxios_context) 
    272274         tsn(:,:,1,jp_tem) = w3d(:,:,1) 
    273275         RETURN  
     
    308310         ! 
    309311      ENDIF 
     312      IF(lrxios) CALL iom_swap(cxios_context) 
    310313      ! 
    311314   END SUBROUTINE rst_read 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/SBC/sbcapr.F90

    r11536 r11837  
    111111      ! 
    112112      IF( lwxios ) THEN 
    113          CALL iom_set_rstw_var_active('ssh_ibb') 
     113         CALL iom_set_rstw_var_active(rst_wfields, 'ssh_ibb') 
    114114      ENDIF 
    115115   END SUBROUTINE sbc_apr_init 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/SBC/sbcisf.F90

    r11536 r11837  
    206206         IF( ln_rstart .AND.    &                     ! Restart: read in restart file 
    207207            &   iom_varid( numror, 'fwf_isf_b', ldstop = .FALSE. ) > 0 ) THEN 
     208            IF(lrxios) CALL iom_swap(crxios_context) 
    208209            IF(lwp) WRITE(numout,*) '          nit000-1 isf tracer content forcing fields read in the restart file' 
    209210            CALL iom_get( numror, jpdom_autoglo, 'fwf_isf_b', fwfisf_b(:,:)         , ldxios = lrxios )   ! before salt content isf_tsc trend 
    210211            CALL iom_get( numror, jpdom_autoglo, 'isf_sc_b' , risf_tsc_b(:,:,jp_sal), ldxios = lrxios )   ! before salt content isf_tsc trend 
    211212            CALL iom_get( numror, jpdom_autoglo, 'isf_hc_b' , risf_tsc_b(:,:,jp_tem), ldxios = lrxios )   ! before salt content isf_tsc trend 
     213            IF(lrxios) CALL iom_swap(cxios_context) 
    212214         ELSE 
    213215            fwfisf_b(:,:)    = fwfisf(:,:) 
     
    402404 
    403405      IF( lwxios ) THEN 
    404           CALL iom_set_rstw_var_active('fwf_isf_b') 
    405           CALL iom_set_rstw_var_active('isf_hc_b') 
    406           CALL iom_set_rstw_var_active('isf_sc_b') 
     406          CALL iom_set_rstw_var_active(rst_wfields, 'fwf_isf_b') 
     407          CALL iom_set_rstw_var_active(rst_wfields, 'isf_hc_b') 
     408          CALL iom_set_rstw_var_active(rst_wfields, 'isf_sc_b') 
    407409      ENDIF 
    408410 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/SBC/sbcmod.F90

    r11536 r11837  
    351351      ! 
    352352      IF( lwxios ) THEN 
    353          CALL iom_set_rstw_var_active('utau_b') 
    354          CALL iom_set_rstw_var_active('vtau_b') 
    355          CALL iom_set_rstw_var_active('qns_b') 
     353         CALL iom_set_rstw_var_active(rst_wfields, 'utau_b') 
     354         CALL iom_set_rstw_var_active(rst_wfields, 'vtau_b') 
     355         CALL iom_set_rstw_var_active(rst_wfields, 'qns_b') 
    356356         ! The 3D heat content due to qsr forcing is treated in traqsr 
    357357         ! CALL iom_set_rstw_var_active('qsr_b') 
    358          CALL iom_set_rstw_var_active('emp_b') 
    359          CALL iom_set_rstw_var_active('sfx_b') 
     358         CALL iom_set_rstw_var_active(rst_wfields, 'emp_b') 
     359         CALL iom_set_rstw_var_active(rst_wfields, 'sfx_b') 
    360360      ENDIF 
    361361 
     
    499499         IF( ln_rstart .AND.    &                               !* Restart: read in restart file 
    500500            & iom_varid( numror, 'utau_b', ldstop = .FALSE. ) > 0 ) THEN 
     501            IF(lrxios) CALL iom_swap(crxios_context) 
    501502            IF(lwp) WRITE(numout,*) '          nit000-1 surface forcing fields red in the restart file' 
    502503            CALL iom_get( numror, jpdom_autoglo, 'utau_b', utau_b, ldxios = lrxios )   ! before i-stress  (U-point) 
     
    512513               sfx_b (:,:) = sfx(:,:) 
    513514            ENDIF 
     515            IF(lrxios) CALL iom_swap(cxios_context) 
    514516         ELSE                                                   !* no restart: set from nit000 values 
    515517            IF(lwp) WRITE(numout,*) '          nit000-1 surface forcing fields set to nit000' 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/SBC/sbcrnf.F90

    r11536 r11837  
    146146         IF( ln_rstart .AND.    &                               !* Restart: read in restart file 
    147147            & iom_varid( numror, 'rnf_b', ldstop = .FALSE. ) > 0 ) THEN 
     148            IF(lrxios) CALL iom_swap(crxios_context) 
    148149            IF(lwp) WRITE(numout,*) '          nit000-1 runoff forcing fields red in the restart file', lrxios 
    149150            CALL iom_get( numror, jpdom_autoglo, 'rnf_b', rnf_b, ldxios = lrxios )     ! before runoff 
    150151            CALL iom_get( numror, jpdom_autoglo, 'rnf_hc_b', rnf_tsc_b(:,:,jp_tem), ldxios = lrxios )   ! before heat content of runoff 
    151152            CALL iom_get( numror, jpdom_autoglo, 'rnf_sc_b', rnf_tsc_b(:,:,jp_sal), ldxios = lrxios )   ! before salinity content of runoff 
     153            IF(lrxios) CALL iom_swap(cxios_context) 
    152154         ELSE                                                   !* no restart: set from nit000 values 
    153155            IF(lwp) WRITE(numout,*) '          nit000-1 runoff forcing fields set to nit000' 
     
    467469      ! 
    468470      IF( lwxios ) THEN 
    469          CALL iom_set_rstw_var_active('rnf_b') 
    470          CALL iom_set_rstw_var_active('rnf_hc_b') 
    471          CALL iom_set_rstw_var_active('rnf_sc_b') 
     471         CALL iom_set_rstw_var_active(rst_wfields, 'rnf_b') 
     472         CALL iom_set_rstw_var_active(rst_wfields, 'rnf_hc_b') 
     473         CALL iom_set_rstw_var_active(rst_wfields, 'rnf_sc_b') 
    472474      ENDIF 
    473475 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/SBC/sbcssm.F90

    r10425 r11837  
    208208         ! 
    209209         IF( ln_rstart .AND. iom_varid( numror, 'nn_fsbc', ldstop = .FALSE. ) > 0 ) THEN 
     210            IF(lrxios) CALL iom_swap(crxios_context) 
    210211            l_ssm_mean = .TRUE. 
    211212            CALL iom_get( numror               , 'nn_fsbc', zf_sbc, ldxios = lrxios )    ! sbc frequency of previous run 
     
    222223               frq_m(:,:) = 1._wp   ! default definition 
    223224            ENDIF 
     225            IF(lrxios) CALL iom_swap(cxios_context) 
    224226            ! 
    225227            IF( zf_sbc /= REAL( nn_fsbc, wp ) ) THEN      ! nn_fsbc has changed between 2 runs 
     
    257259      ! 
    258260      IF( lwxios.AND.nn_fsbc > 1 ) THEN 
    259          CALL iom_set_rstw_var_active('nn_fsbc') 
    260          CALL iom_set_rstw_var_active('ssu_m') 
    261          CALL iom_set_rstw_var_active('ssv_m') 
    262          CALL iom_set_rstw_var_active('sst_m') 
    263          CALL iom_set_rstw_var_active('sss_m') 
    264          CALL iom_set_rstw_var_active('ssh_m') 
    265          CALL iom_set_rstw_var_active('e3t_m') 
    266          CALL iom_set_rstw_var_active('frq_m') 
     261         CALL iom_set_rstw_var_active(rst_wfields, 'nn_fsbc') 
     262         CALL iom_set_rstw_var_active(rst_wfields, 'ssu_m') 
     263         CALL iom_set_rstw_var_active(rst_wfields, 'ssv_m') 
     264         CALL iom_set_rstw_var_active(rst_wfields, 'sst_m') 
     265         CALL iom_set_rstw_var_active(rst_wfields, 'sss_m') 
     266         CALL iom_set_rstw_var_active(rst_wfields, 'ssh_m') 
     267         CALL iom_set_rstw_var_active(rst_wfields, 'e3t_m') 
     268         CALL iom_set_rstw_var_active(rst_wfields, 'frq_m') 
    267269      ENDIF 
    268270 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/TRA/traqsr.F90

    r11536 r11837  
    137137            IF(lwp) WRITE(numout,*) '          nit000-1 qsr tracer content forcing field read in the restart file' 
    138138            z1_2 = 0.5_wp 
     139            IF(lrxios) CALL iom_swap(crxios_context) 
    139140            CALL iom_get( numror, jpdom_autoglo, 'qsr_hc_b', qsr_hc_b, ldxios = lrxios )   ! before heat content trend due to Qsr flux 
     141            IF(lrxios) CALL iom_swap(cxios_context) 
    140142         ELSE                                           ! No restart or restart not found: Euler forward time stepping 
    141143            z1_2 = 1._wp 
     
    423425      ! 1st ocean level attenuation coefficient (used in sbcssm) 
    424426      IF( iom_varid( numror, 'fraqsr_1lev', ldstop = .FALSE. ) > 0 ) THEN 
     427         IF(lrxios) CALL iom_swap(crxios_context) 
    425428         CALL iom_get( numror, jpdom_autoglo, 'fraqsr_1lev'  , fraqsr_1lev, ldxios = lrxios  ) 
     429         IF(lrxios) CALL iom_swap(cxios_context) 
    426430      ELSE 
    427431         fraqsr_1lev(:,:) = 1._wp   ! default : no penetration 
     
    429433      ! 
    430434      IF( lwxios ) THEN 
    431          CALL iom_set_rstw_var_active('qsr_hc_b') 
    432          CALL iom_set_rstw_var_active('fraqsr_1lev') 
     435         CALL iom_set_rstw_var_active(rst_wfields, 'qsr_hc_b') 
     436         CALL iom_set_rstw_var_active(rst_wfields, 'fraqsr_1lev') 
    433437      ENDIF 
    434438      ! 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/TRA/trasbc.F90

    r10499 r11837  
    107107         IF( ln_rstart .AND.    &               ! Restart: read in restart file 
    108108              & iom_varid( numror, 'sbc_hc_b', ldstop = .FALSE. ) > 0 ) THEN 
     109            IF(lrxios) CALL iom_swap(crxios_context) 
    109110            IF(lwp) WRITE(numout,*) '          nit000-1 sbc tracer content field read in the restart file' 
    110111            zfact = 0.5_wp 
     
    112113            CALL iom_get( numror, jpdom_autoglo, 'sbc_hc_b', sbc_tsc_b(:,:,jp_tem), ldxios = lrxios )   ! before heat content sbc trend 
    113114            CALL iom_get( numror, jpdom_autoglo, 'sbc_sc_b', sbc_tsc_b(:,:,jp_sal), ldxios = lrxios )   ! before salt content sbc trend 
     115            IF(lrxios) CALL iom_swap(cxios_context) 
    114116         ELSE                                   ! No restart or restart not found: Euler forward time stepping 
    115117            zfact = 1._wp 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/ZDF/zdfgls.F90

    r11536 r11837  
    11331133      ! 
    11341134      IF( lwxios ) THEN 
    1135          CALL iom_set_rstw_var_active('en') 
    1136          CALL iom_set_rstw_var_active('avt_k') 
    1137          CALL iom_set_rstw_var_active('avm_k') 
    1138          CALL iom_set_rstw_var_active('hmxl_n') 
     1135         CALL iom_set_rstw_var_active(rst_wfields, 'en') 
     1136         CALL iom_set_rstw_var_active(rst_wfields, 'avt_k') 
     1137         CALL iom_set_rstw_var_active(rst_wfields, 'avm_k') 
     1138         CALL iom_set_rstw_var_active(rst_wfields, 'hmxl_n') 
    11391139      ENDIF 
    11401140      ! 
     
    11721172            ! 
    11731173            IF( MIN( id1, id2, id3, id4 ) > 0 ) THEN        ! all required arrays exist 
     1174               IF(lrxios) CALL iom_swap(crxios_context) 
    11741175               CALL iom_get( numror, jpdom_autoglo, 'en'    , en    , ldxios = lrxios ) 
    11751176               CALL iom_get( numror, jpdom_autoglo, 'avt_k' , avt_k , ldxios = lrxios ) 
    11761177               CALL iom_get( numror, jpdom_autoglo, 'avm_k' , avm_k , ldxios = lrxios ) 
    11771178               CALL iom_get( numror, jpdom_autoglo, 'hmxl_n', hmxl_n, ldxios = lrxios ) 
     1179               IF(lrxios) CALL iom_swap(cxios_context) 
    11781180            ELSE                         
    11791181               IF(lwp) WRITE(numout,*) 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/ZDF/zdfosm.F90

    r11536 r11837  
    15101510     ! 
    15111511     IF( lwxios ) THEN 
    1512         CALL iom_set_rstw_var_active('wn') 
    1513         CALL iom_set_rstw_var_active('hbl') 
    1514         CALL iom_set_rstw_var_active('hbli') 
     1512        CALL iom_set_rstw_var_active(rst_wfields, 'wn') 
     1513        CALL iom_set_rstw_var_active(rst_wfields, 'hbl') 
     1514        CALL iom_set_rstw_var_active(rst_wfields, 'hbli') 
    15151515     ENDIF 
    15161516   END SUBROUTINE zdf_osm_init 
     
    15431543     !!----------------------------------------------------------------------------- 
    15441544     IF( TRIM(cdrw) == 'READ'.AND. ln_rstart) THEN 
     1545        IF(lrxios) CALL iom_swap(crxios_context) 
    15451546        id1 = iom_varid( numror, 'wn'   , ldstop = .FALSE. ) 
    15461547        IF( id1 > 0 ) THEN                       ! 'wn' exists; read 
     
    15611562           WRITE(numout,*) ' ===>>>> : previous run without osmosis scheme, hbl computed from stratification' 
    15621563        END IF 
     1564        IF(lrxios) CALL iom_swap(cxios_context) 
    15631565     END IF 
    15641566 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/ZDF/zdfric.F90

    r11536 r11837  
    106106      ! 
    107107      IF( lwxios ) THEN 
    108          CALL iom_set_rstw_var_active('avt_k') 
    109          CALL iom_set_rstw_var_active('avm_k') 
     108         CALL iom_set_rstw_var_active(rst_wfields, 'avt_k') 
     109         CALL iom_set_rstw_var_active(rst_wfields, 'avm_k') 
    110110      ENDIF 
    111111   END SUBROUTINE zdf_ric_init 
     
    222222         !           !* Read the restart file 
    223223         IF( ln_rstart ) THEN 
     224            IF(lrxios) CALL iom_swap(crxios_context) 
    224225            id1 = iom_varid( numror, 'avt_k', ldstop = .FALSE. ) 
    225226            id2 = iom_varid( numror, 'avm_k', ldstop = .FALSE. ) 
     
    229230               CALL iom_get( numror, jpdom_autoglo, 'avm_k', avm_k, ldxios = lrxios ) 
    230231            ENDIF 
     232            IF(lrxios) CALL iom_swap(cxios_context) 
    231233         ENDIF 
    232234         !           !* otherwise Kz already set to the background value in zdf_phy_init 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/ZDF/zdftke.F90

    r11536 r11837  
    740740      ! 
    741741      IF( lwxios ) THEN 
    742          CALL iom_set_rstw_var_active('en') 
    743          CALL iom_set_rstw_var_active('avt_k') 
    744          CALL iom_set_rstw_var_active('avm_k') 
    745          CALL iom_set_rstw_var_active('dissl') 
     742         CALL iom_set_rstw_var_active(rst_wfields, 'en') 
     743         CALL iom_set_rstw_var_active(rst_wfields, 'avt_k') 
     744         CALL iom_set_rstw_var_active(rst_wfields, 'avm_k') 
     745         CALL iom_set_rstw_var_active(rst_wfields, 'dissl') 
    746746      ENDIF 
    747747   END SUBROUTINE zdf_tke_init 
     
    776776            ! 
    777777            IF( MIN( id1, id2, id3, id4 ) > 0 ) THEN      ! fields exist 
     778               IF(lrxios) CALL iom_swap(crxios_context) 
    778779               CALL iom_get( numror, jpdom_autoglo, 'en'   , en   , ldxios = lrxios ) 
    779780               CALL iom_get( numror, jpdom_autoglo, 'avt_k', avt_k, ldxios = lrxios ) 
    780781               CALL iom_get( numror, jpdom_autoglo, 'avm_k', avm_k, ldxios = lrxios ) 
    781782               CALL iom_get( numror, jpdom_autoglo, 'dissl', dissl, ldxios = lrxios ) 
     783               IF(lrxios) CALL iom_swap(cxios_context) 
    782784            ELSE                                          ! start TKE from rest 
    783785               IF(lwp) WRITE(numout,*) 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/step.F90

    r11536 r11837  
    311311      IF( kstp == nitend .OR. indic < 0 ) THEN  
    312312                      CALL iom_context_finalize(      cxios_context          ) ! needed for XIOS+AGRIF 
    313                       IF(lrxios) CALL iom_context_finalize(      crxios_context          ) 
     313                      IF(lrxios) THEN 
     314                         CALL iom_context_finalize(      crxios_context          ) 
     315#if defined key_si3 
     316                         CALL iom_context_finalize(      crixios_context          ) 
     317#endif 
     318                      ENDIF 
    314319         IF( ln_crs ) CALL iom_context_finalize( trim(cxios_context)//"_crs" ) !  
    315320      ENDIF 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/SAS/daymod.F90

    r10068 r11837  
    143143      CALL day( nit000 ) 
    144144      IF( lwxios ) THEN 
    145         CALL iom_set_rstw_var_active('kt') 
    146         CALL iom_set_rstw_var_active('ndastp') 
    147         CALL iom_set_rstw_var_active('adatrj') 
    148         CALL iom_set_rstw_var_active('ntime') 
     145        CALL iom_set_rstw_var_active(rst_wfields, 'kt') 
     146        CALL iom_set_rstw_var_active(rst_wfields, 'ndastp') 
     147        CALL iom_set_rstw_var_active(rst_wfields, 'adatrj') 
     148        CALL iom_set_rstw_var_active(rst_wfields, 'ntime') 
    149149      ENDIF 
    150150      ! 
     
    323323 
    324324         IF( iom_varid( numror, 'kt', ldstop = .FALSE. ) > 0 ) THEN 
     325            IF(lrxios) CALL iom_swap(crxios_context) 
    325326            ! Get Calendar informations 
    326327            CALL iom_get( numror, 'kt', zkt, ldxios = lrxios )   ! last time-step of previous run 
     
    379380               ! note this is wrong if time step has changed during run 
    380381            ENDIF 
     382            IF(lrxios) CALL iom_swap(cxios_context) 
    381383         ELSE 
    382384            ! parameters corresponding to nit000 - 1 (as we start the step loop with a call to day) 
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/SAS/step.F90

    r11536 r11837  
    140140      ENDIF 
    141141      IF( kstp == nitend .OR. indic < 0 ) THEN 
     142                  IF(lrxios) THEN 
     143#if defined key_si3 
     144                             CALL iom_context_finalize( crixios_context) 
     145#endif 
     146                             CALL iom_context_finalize( crxios_context) 
     147                  ENDIF 
    142148                             CALL iom_context_finalize( cxios_context ) ! needed for XIOS+AGRIF 
    143149      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.