New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 14789 for NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU/src/OCE/DOM/domvvl.F90 – NEMO

Ignore:
Timestamp:
2021-05-05T13:18:04+02:00 (3 years ago)
Author:
mcastril
Message:

[2021/HPC-11_mcastril_HPDAonline_DiagGPU] Update externals

Location:
NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
         5^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8^/vendors/PPR@HEAD            ext/PPR 
        89 
        910# SETTE 
        10 ^/utils/CI/sette@13559        sette 
         11^/utils/CI/sette@14244        sette 
  • NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU/src/OCE/DOM/domvvl.F90

    r13497 r14789  
    22   !!====================================================================== 
    33   !!                       ***  MODULE domvvl   *** 
    4    !! Ocean :  
     4   !! Ocean : 
    55   !!====================================================================== 
    66   !! History :  2.0  !  2006-06  (B. Levier, L. Marie)  original code 
     
    99   !!            3.6  !  2014-11  (P. Mathiot) add ice shelf capability 
    1010   !!            4.1  !  2019-08  (A. Coward, D. Storkey) rename dom_vvl_sf_swp -> dom_vvl_sf_update for new timestepping 
    11    !!            4.x  ! 2020-02  (G. Madec, S. Techene) introduce ssh to h0 ratio 
     11   !!             -   ! 2020-02  (G. Madec, S. Techene) introduce ssh to h0 ratio 
    1212   !!---------------------------------------------------------------------- 
    1313 
     
    5050   REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:)   :: frq_rst_hdv                 ! retoring period for low freq. divergence 
    5151 
    52 #if defined key_qco 
     52#if defined key_qco   ||   defined key_linssh 
    5353   !!---------------------------------------------------------------------- 
    54    !!   'key_qco'      EMPTY MODULE      Quasi-Eulerian vertical coordonate 
     54   !!   'key_qco'                        Quasi-Eulerian vertical coordinate 
     55   !!       OR         EMPTY MODULE 
     56   !!   'key_linssh'                        Fix in time vertical coordinate 
    5557   !!---------------------------------------------------------------------- 
    5658#else 
     
    5860   !!   Default key      Old management of time varying vertical coordinate 
    5961   !!---------------------------------------------------------------------- 
    60     
     62 
    6163   !!---------------------------------------------------------------------- 
    6264   !!   dom_vvl_init     : define initial vertical scale factors, depths and column thickness 
     
    7375   PUBLIC  dom_vvl_sf_update  ! called by step.F90 
    7476   PUBLIC  dom_vvl_interpol   ! called by dynnxt.F90 
    75     
     77 
    7678   !! * Substitutions 
    7779#  include "do_loop_substitute.h90" 
     
    109111      !!---------------------------------------------------------------------- 
    110112      !!                ***  ROUTINE dom_vvl_init  *** 
    111       !!                    
     113      !! 
    112114      !! ** Purpose :  Initialization of all scale factors, depths 
    113115      !!               and water column heights 
     
    118120      !! ** Action  : - e3t_(n/b) and tilde_e3t_(n/b) 
    119121      !!              - Regrid: e3[u/v](:,:,:,Kmm) 
    120       !!                        e3[u/v](:,:,:,Kmm)        
    121       !!                        e3w(:,:,:,Kmm)            
     122      !!                        e3[u/v](:,:,:,Kmm) 
     123      !!                        e3w(:,:,:,Kmm) 
    122124      !!                        e3[u/v]w_b 
    123       !!                        e3[u/v]w_n       
     125      !!                        e3[u/v]w_n 
    124126      !!                        gdept(:,:,:,Kmm), gdepw(:,:,:,Kmm) and gde3w 
    125127      !!              - h(t/u/v)_0 
     
    151153      !!---------------------------------------------------------------------- 
    152154      !!                ***  ROUTINE dom_vvl_init  *** 
    153       !!                    
    154       !! ** Purpose :  Interpolation of all scale factors,  
     155      !! 
     156      !! ** Purpose :  Interpolation of all scale factors, 
    155157      !!               depths and water column heights 
    156158      !! 
     
    159161      !! ** Action  : - e3t_(n/b) and tilde_e3t_(n/b) 
    160162      !!              - Regrid: e3(u/v)_n 
    161       !!                        e3(u/v)_b        
    162       !!                        e3w_n            
    163       !!                        e3(u/v)w_b       
    164       !!                        e3(u/v)w_n       
     163      !!                        e3(u/v)_b 
     164      !!                        e3w_n 
     165      !!                        e3(u/v)w_b 
     166      !!                        e3(u/v)w_n 
    165167      !!                        gdept_n, gdepw_n and gde3w_n 
    166168      !!              - h(t/u/v)_0 
     
    180182      CALL dom_vvl_interpol( e3t(:,:,:,Kbb), e3u(:,:,:,Kbb), 'U' )    ! from T to U 
    181183      CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3u(:,:,:,Kmm), 'U' ) 
    182       CALL dom_vvl_interpol( e3t(:,:,:,Kbb), e3v(:,:,:,Kbb), 'V' )    ! from T to V  
     184      CALL dom_vvl_interpol( e3t(:,:,:,Kbb), e3v(:,:,:,Kbb), 'V' )    ! from T to V 
    183185      CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3v(:,:,:,Kmm), 'V' ) 
    184186      CALL dom_vvl_interpol( e3u(:,:,:,Kmm), e3f(:,:,:), 'F' )    ! from U to F 
    185       !                                ! Vertical interpolation of e3t,u,v  
     187      !                                ! Vertical interpolation of e3t,u,v 
    186188      CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3w (:,:,:,Kmm), 'W'  )  ! from T to W 
    187189      CALL dom_vvl_interpol( e3t(:,:,:,Kbb), e3w (:,:,:,Kbb), 'W'  ) 
     
    205207         !    zcoef = tmask - wmask    ! 0 everywhere tmask = wmask, ie everywhere expect at jk = mikt 
    206208         !                             ! 1 everywhere from mbkt to mikt + 1 or 1 (if no isf) 
    207          !                             ! 0.5 where jk = mikt      
     209         !                             ! 0.5 where jk = mikt 
    208210!!gm ???????   BUG ?  gdept(:,:,:,Kmm) as well as gde3w  does not include the thickness of ISF ?? 
    209211         zcoef = ( tmask(ji,jj,jk) - wmask(ji,jj,jk) ) 
    210212         gdepw(ji,jj,jk,Kmm) = gdepw(ji,jj,jk-1,Kmm) + e3t(ji,jj,jk-1,Kmm) 
    211213         gdept(ji,jj,jk,Kmm) =      zcoef  * ( gdepw(ji,jj,jk  ,Kmm) + 0.5 * e3w(ji,jj,jk,Kmm))  & 
    212             &                + (1-zcoef) * ( gdept(ji,jj,jk-1,Kmm) +       e3w(ji,jj,jk,Kmm))  
     214            &                + (1-zcoef) * ( gdept(ji,jj,jk-1,Kmm) +       e3w(ji,jj,jk,Kmm)) 
    213215         gde3w(ji,jj,jk) = gdept(ji,jj,jk,Kmm) - ssh(ji,jj,Kmm) 
    214216         gdepw(ji,jj,jk,Kbb) = gdepw(ji,jj,jk-1,Kbb) + e3t(ji,jj,jk-1,Kbb) 
    215217         gdept(ji,jj,jk,Kbb) =      zcoef  * ( gdepw(ji,jj,jk  ,Kbb) + 0.5 * e3w(ji,jj,jk,Kbb))  & 
    216             &                + (1-zcoef) * ( gdept(ji,jj,jk-1,Kbb) +       e3w(ji,jj,jk,Kbb))  
     218            &                + (1-zcoef) * ( gdept(ji,jj,jk-1,Kbb) +       e3w(ji,jj,jk,Kbb)) 
    217219      END_3D 
    218220      ! 
     
    273275            IF( cn_cfg == "orca" .OR. cn_cfg == "ORCA" ) THEN 
    274276               IF( nn_cfg == 3 ) THEN   ! ORCA2: Suppress ztilde in the Foxe Basin for ORCA2 
    275                   ii0 = 103 + nn_hls - 1   ;   ii1 = 111 + nn_hls - 1       
     277                  ii0 = 103 + nn_hls - 1   ;   ii1 = 111 + nn_hls - 1 
    276278                  ij0 = 128 + nn_hls       ;   ij1 = 135 + nn_hls 
    277279                  frq_rst_e3t( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) =  0.0_wp 
     
    282284      ENDIF 
    283285      ! 
    284       IF(lwxios) THEN 
    285 ! define variables in restart file when writing with XIOS 
    286          CALL iom_set_rstw_var_active('e3t_b') 
    287          CALL iom_set_rstw_var_active('e3t_n') 
    288          !                                           ! ----------------------- ! 
    289          IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN  ! z_tilde and layer cases ! 
    290             !                                        ! ----------------------- ! 
    291             CALL iom_set_rstw_var_active('tilde_e3t_b') 
    292             CALL iom_set_rstw_var_active('tilde_e3t_n') 
    293          END IF 
    294          !                                           ! -------------!     
    295          IF( ln_vvl_ztilde ) THEN                    ! z_tilde case ! 
    296             !                                        ! ------------ ! 
    297             CALL iom_set_rstw_var_active('hdiv_lf') 
    298          ENDIF 
    299          ! 
    300       ENDIF 
    301       ! 
    302286   END SUBROUTINE dom_vvl_zgr 
    303287 
    304288 
    305    SUBROUTINE dom_vvl_sf_nxt( kt, Kbb, Kmm, Kaa, kcall )  
     289   SUBROUTINE dom_vvl_sf_nxt( kt, Kbb, Kmm, Kaa, kcall ) 
    306290      !!---------------------------------------------------------------------- 
    307291      !!                ***  ROUTINE dom_vvl_sf_nxt  *** 
    308       !!                    
     292      !! 
    309293      !! ** Purpose :  - compute the after scale factors used in tra_zdf, dynnxt, 
    310294      !!                 tranxt and dynspg routines 
    311295      !! 
    312296      !! ** Method  :  - z_star case:  Repartition of ssh INCREMENT proportionnaly to the level thickness. 
    313       !!               - z_tilde_case: after scale factor increment =  
     297      !!               - z_tilde_case: after scale factor increment = 
    314298      !!                                    high frequency part of horizontal divergence 
    315299      !!                                  + retsoring towards the background grid 
     
    319303      !! 
    320304      !! ** Action  :  - hdiv_lf    : restoring towards full baroclinic divergence in z_tilde case 
    321       !!               - tilde_e3t_a: after increment of vertical scale factor  
     305      !!               - tilde_e3t_a: after increment of vertical scale factor 
    322306      !!                              in z_tilde case 
    323307      !!               - e3(t/u/v)_a 
     
    423407            un_td(ji,jj,jk) = rn_ahe3 * umask(ji,jj,jk) * e2_e1u(ji,jj)           & 
    424408               &            * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji+1,jj  ,jk) ) 
    425             vn_td(ji,jj,jk) = rn_ahe3 * vmask(ji,jj,jk) * e1_e2v(ji,jj)           &  
     409            vn_td(ji,jj,jk) = rn_ahe3 * vmask(ji,jj,jk) * e1_e2v(ji,jj)           & 
    426410               &            * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji  ,jj+1,jk) ) 
    427411            zwu(ji,jj) = zwu(ji,jj) + un_td(ji,jj,jk) 
     
    439423         !                               ! d - thickness diffusion transport: boundary conditions 
    440424         !                             (stored for tracer advction and continuity equation) 
    441          CALL lbc_lnk_multi( 'domvvl', un_td , 'U' , -1._wp, vn_td , 'V' , -1._wp) 
    442  
     425         CALL lbc_lnk( 'domvvl', un_td , 'U' , -1._wp, vn_td , 'V' , -1._wp) 
    443426         ! 4 - Time stepping of baroclinic scale factors 
    444427         ! --------------------------------------------- 
     
    453436         END_3D 
    454437         ! 
    455          llmsk(   1:Nis1,:,:) = .FALSE.   ! exclude halos from the checked region 
    456          llmsk(Nie1: jpi,:,:) = .FALSE. 
    457          llmsk(:,   1:Njs1,:) = .FALSE. 
    458          llmsk(:,Nje1: jpj,:) = .FALSE. 
     438         llmsk(     1:nn_hls,:,:) = .FALSE.   ! exclude halos from the checked region 
     439         llmsk(Nie0+1:  jpi,:,:) = .FALSE. 
     440         llmsk(:,     1:nn_hls,:) = .FALSE. 
     441         llmsk(:,Nje0+1:  jpj,:) = .FALSE. 
    459442         ! 
    460443         llmsk(Nis0:Nie0,Njs0:Nje0,:) = tmask(Nis0:Nie0,Njs0:Nje0,:) == 1._wp                  ! define only the inner domain 
     
    469452               WRITE(numout, *) 'at i, j, k=', ijk_max 
    470453               WRITE(numout, *) 'MIN( tilde_e3t_a(:,:,:) / e3t_0(:,:,:) ) =', z_tmin 
    471                WRITE(numout, *) 'at i, j, k=', ijk_min             
     454               WRITE(numout, *) 'at i, j, k=', ijk_min 
    472455               CALL ctl_stop( 'STOP', 'MAX( ABS( tilde_e3t_a(:,:,: ) ) / e3t_0(:,:,:) ) too high') 
    473456            ENDIF 
     
    585568      !!---------------------------------------------------------------------- 
    586569      !!                ***  ROUTINE dom_vvl_sf_update  *** 
    587       !!                    
    588       !! ** Purpose :  for z tilde case: compute time filter and swap of scale factors  
     570      !! 
     571      !! ** Purpose :  for z tilde case: compute time filter and swap of scale factors 
    589572      !!               compute all depths and related variables for next time step 
    590573      !!               write outputs and restart file 
     
    596579      !! ** Action  :  - tilde_e3t_(b/n) ready for next time step 
    597580      !!               - Recompute: 
    598       !!                    e3(u/v)_b        
    599       !!                    e3w(:,:,:,Kmm)            
    600       !!                    e3(u/v)w_b       
    601       !!                    e3(u/v)w_n       
     581      !!                    e3(u/v)_b 
     582      !!                    e3w(:,:,:,Kmm) 
     583      !!                    e3(u/v)w_b 
     584      !!                    e3(u/v)w_n 
    602585      !!                    gdept(:,:,:,Kmm), gdepw(:,:,:,Kmm)  and gde3w 
    603586      !!                    h(u/v) and h(u/v)r 
     
    630613            tilde_e3t_b(:,:,:) = tilde_e3t_n(:,:,:) 
    631614         ELSE 
    632             tilde_e3t_b(:,:,:) = tilde_e3t_n(:,:,:) &  
     615            tilde_e3t_b(:,:,:) = tilde_e3t_n(:,:,:) & 
    633616            &         + rn_atfp * ( tilde_e3t_b(:,:,:) - 2.0_wp * tilde_e3t_n(:,:,:) + tilde_e3t_a(:,:,:) ) 
    634617         ENDIF 
     
    642625      ! - ML - e3u(:,:,:,Kbb) and e3v(:,:,:,Kbb) are already computed in dynnxt 
    643626      ! - JC - hu(:,:,:,Kbb), hv(:,:,:,:,Kbb), hur_b, hvr_b also 
    644        
     627 
    645628      CALL dom_vvl_interpol( e3u(:,:,:,Kmm), e3f(:,:,:), 'F'  ) 
    646        
     629 
    647630      ! Vertical scale factor interpolations 
    648631      CALL dom_vvl_interpol( e3t(:,:,:,Kmm),  e3w(:,:,:,Kmm), 'W'  ) 
     
    663646         gdepw(ji,jj,jk,Kmm) = gdepw(ji,jj,jk-1,Kmm) + e3t(ji,jj,jk-1,Kmm) 
    664647         gdept(ji,jj,jk,Kmm) =    zcoef  * ( gdepw(ji,jj,jk  ,Kmm) + 0.5 * e3w(ji,jj,jk,Kmm) )  & 
    665              &             + (1-zcoef) * ( gdept(ji,jj,jk-1,Kmm) +       e3w(ji,jj,jk,Kmm) )  
     648             &             + (1-zcoef) * ( gdept(ji,jj,jk-1,Kmm) +       e3w(ji,jj,jk,Kmm) ) 
    666649         gde3w(ji,jj,jk) = gdept(ji,jj,jk,Kmm) - ssh(ji,jj,Kmm) 
    667650      END_3D 
     
    782765      !!--------------------------------------------------------------------- 
    783766      !!                   ***  ROUTINE dom_vvl_rst  *** 
    784       !!                      
     767      !! 
    785768      !! ** Purpose :   Read or write VVL file in restart file 
    786769      !! 
    787       !! ** Method  :   use of IOM library 
    788       !!                if the restart does not contain vertical scale factors, 
    789       !!                they are set to the _0 values 
    790       !!                if the restart does not contain vertical scale factors increments (z_tilde), 
    791       !!                they are set to 0. 
     770      !! ** Method  : * restart comes from a linear ssh simulation : 
     771      !!                   an attempt to read e3t_n stops simulation 
     772      !!              * restart comes from a z-star, z-tilde, or layer : 
     773      !!                   read e3t_n and e3t_b 
     774      !!              * restart comes from a z-star : 
     775      !!                   set tilde_e3t_n, tilde_e3t_n, and hdiv_lf to 0 
     776      !!              * restart comes from layer : 
     777      !!                   read tilde_e3t_n and tilde_e3t_b 
     778      !!                   set hdiv_lf to 0 
     779      !!              * restart comes from a z-tilde: 
     780      !!                   read tilde_e3t_n, tilde_e3t_b, and hdiv_lf 
     781      !! 
     782      !!              NB: if l_1st_euler = T (ln_1st_euler or ssh_b not found) 
     783      !!                   Kbb fields set to Kmm ones 
    792784      !!---------------------------------------------------------------------- 
    793785      INTEGER         , INTENT(in) ::   kt        ! ocean time-step 
     
    795787      CHARACTER(len=*), INTENT(in) ::   cdrw      ! "READ"/"WRITE" flag 
    796788      ! 
    797       INTEGER ::   ji, jj, jk 
    798       INTEGER ::   id1, id2, id3, id4, id5     ! local integers 
    799       !!---------------------------------------------------------------------- 
    800       ! 
    801       IF( TRIM(cdrw) == 'READ' ) THEN        ! Read/initialise  
    802          !                                   ! =============== 
    803          IF( ln_rstart ) THEN                   !* Read the restart file 
    804             CALL rst_read_open                  !  open the restart file if necessary 
    805             CALL iom_get( numror, jpdom_auto, 'sshn'   , ssh(:,:,Kmm), ldxios = lrxios    ) 
     789      INTEGER ::   ji, jj, jk      ! dummy loop indices 
     790      INTEGER ::   id3, id4, id5   ! local integers 
     791      !!---------------------------------------------------------------------- 
     792      ! 
     793      !                                      !=====================! 
     794      IF( TRIM(cdrw) == 'READ' ) THEN        !  Read / initialise  ! 
     795         !                                   !=====================! 
     796         ! 
     797         IF( ln_rstart ) THEN                   !==  Read the restart file  ==! 
    806798            ! 
    807             id1 = iom_varid( numror, 'e3t_b', ldstop = .FALSE. ) 
    808             id2 = iom_varid( numror, 'e3t_n', ldstop = .FALSE. ) 
    809             id3 = iom_varid( numror, 'tilde_e3t_b', ldstop = .FALSE. ) 
     799            CALL rst_read_open                                          !*  open the restart file if necessary 
     800            !                                         ! --------- ! 
     801            !                                         ! all cases ! 
     802            !                                         ! --------- ! 
     803            ! 
     804            id3 = iom_varid( numror, 'tilde_e3t_b', ldstop = .FALSE. )  !*  check presence 
    810805            id4 = iom_varid( numror, 'tilde_e3t_n', ldstop = .FALSE. ) 
    811             id5 = iom_varid( numror, 'hdiv_lf', ldstop = .FALSE. ) 
     806            id5 = iom_varid( numror, 'hdiv_lf'    , ldstop = .FALSE. ) 
    812807            ! 
    813             !                             ! --------- ! 
    814             !                             ! all cases ! 
    815             !                             ! --------- ! 
    816             ! 
    817             IF( MIN( id1, id2 ) > 0 ) THEN       ! all required arrays exist 
    818                CALL iom_get( numror, jpdom_auto, 'e3t_b', e3t(:,:,:,Kbb), ldxios = lrxios ) 
    819                CALL iom_get( numror, jpdom_auto, 'e3t_n', e3t(:,:,:,Kmm), ldxios = lrxios ) 
    820                ! needed to restart if land processor not computed  
    821                IF(lwp) write(numout,*) 'dom_vvl_rst : e3t(:,:,:,Kbb) and e3t(:,:,:,Kmm) found in restart files' 
    822                WHERE ( tmask(:,:,:) == 0.0_wp )  
    823                   e3t(:,:,:,Kmm) = e3t_0(:,:,:) 
     808            !                                                           !*  scale factors 
     809            IF(lwp) WRITE(numout,*)    '          Kmm scale factor read in the restart file' 
     810            CALL iom_get( numror, jpdom_auto, 'e3t_n', e3t(:,:,:,Kmm) ) 
     811            WHERE ( tmask(:,:,:) == 0.0_wp ) 
     812               e3t(:,:,:,Kmm) = e3t_0(:,:,:) 
     813            END WHERE 
     814            IF( l_1st_euler ) THEN                       ! euler 
     815               IF(lwp) WRITE(numout,*) '          Euler first time step : e3t(Kbb) = e3t(Kmm)' 
     816               e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 
     817            ELSE                                         ! leap frog 
     818               IF(lwp) WRITE(numout,*) '          Kbb scale factor read in the restart file' 
     819               CALL iom_get( numror, jpdom_auto, 'e3t_b', e3t(:,:,:,Kbb) ) 
     820               WHERE ( tmask(:,:,:) == 0.0_wp ) 
    824821                  e3t(:,:,:,Kbb) = e3t_0(:,:,:) 
    825822               END WHERE 
    826                IF( l_1st_euler ) THEN 
    827                   e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 
    828                ENDIF 
    829             ELSE IF( id1 > 0 ) THEN 
    830                IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kmm) not found in restart files' 
    831                IF(lwp) write(numout,*) 'e3t_n set equal to e3t_b.' 
    832                IF(lwp) write(numout,*) 'l_1st_euler is forced to true' 
    833                CALL iom_get( numror, jpdom_auto, 'e3t_b', e3t(:,:,:,Kbb), ldxios = lrxios ) 
    834                e3t(:,:,:,Kmm) = e3t(:,:,:,Kbb) 
    835                l_1st_euler = .true. 
    836             ELSE IF( id2 > 0 ) THEN 
    837                IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kbb) not found in restart files' 
    838                IF(lwp) write(numout,*) 'e3t_b set equal to e3t_n.' 
    839                IF(lwp) write(numout,*) 'l_1st_euler is forced to true' 
    840                CALL iom_get( numror, jpdom_auto, 'e3t_n', e3t(:,:,:,Kmm), ldxios = lrxios ) 
    841                e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 
    842                l_1st_euler = .true. 
    843             ELSE 
    844                IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kmm) not found in restart file' 
    845                IF(lwp) write(numout,*) 'Compute scale factor from sshn' 
    846                IF(lwp) write(numout,*) 'l_1st_euler is forced to true' 
    847                DO jk = 1, jpk 
    848                   e3t(:,:,jk,Kmm) =  e3t_0(:,:,jk) * ( ht_0(:,:) + ssh(:,:,Kmm) ) & 
    849                       &                          / ( ht_0(:,:) + 1._wp - ssmask(:,:) ) * tmask(:,:,jk)   & 
    850                       &          + e3t_0(:,:,jk)                               * (1._wp -tmask(:,:,jk)) 
    851                END DO 
    852                e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 
    853                l_1st_euler = .true. 
    854823            ENDIF 
    855             !                             ! ----------- ! 
    856             IF( ln_vvl_zstar ) THEN       ! z_star case ! 
    857                !                          ! ----------- ! 
     824            !                                         ! ------------ ! 
     825            IF( ln_vvl_zstar ) THEN                   ! z_star case ! 
     826               !                                      ! ------------ ! 
    858827               IF( MIN( id3, id4 ) > 0 ) THEN 
    859828                  CALL ctl_stop( 'dom_vvl_rst: z_star cannot restart from a z_tilde or layer run' ) 
    860829               ENDIF 
    861                !                          ! ----------------------- ! 
    862             ELSE                          ! z_tilde and layer cases ! 
    863                !                          ! ----------------------- ! 
    864                IF( MIN( id3, id4 ) > 0 ) THEN  ! all required arrays exist 
    865                   CALL iom_get( numror, jpdom_auto, 'tilde_e3t_b', tilde_e3t_b(:,:,:), ldxios = lrxios ) 
    866                   CALL iom_get( numror, jpdom_auto, 'tilde_e3t_n', tilde_e3t_n(:,:,:), ldxios = lrxios ) 
    867                ELSE                            ! one at least array is missing 
     830               !                                      ! ------------------------ ! 
     831            ELSE                                      !  z_tilde and layer cases ! 
     832               !                                      ! ------------------------ ! 
     833               ! 
     834               IF( id4 > 0 ) THEN                                       !*  scale factor increments 
     835                  IF(lwp) WRITE(numout,*)    '          Kmm scale factor increments read in the restart file' 
     836                  CALL iom_get( numror, jpdom_auto, 'tilde_e3t_n', tilde_e3t_n(:,:,:) ) 
     837                  IF( l_1st_euler ) THEN                 ! euler 
     838                     IF(lwp) WRITE(numout,*) '          Euler first time step : tilde_e3t(Kbb) = tilde_e3t(Kmm)' 
     839                     tilde_e3t_b(:,:,:) = tilde_e3t_n(:,:,:) 
     840                  ELSE                                   ! leap frog 
     841                     IF(lwp) WRITE(numout,*) '          Kbb scale factor increments read in the restart file' 
     842                     CALL iom_get( numror, jpdom_auto, 'tilde_e3t_b', tilde_e3t_b(:,:,:) ) 
     843                  ENDIF 
     844               ELSE 
    868845                  tilde_e3t_b(:,:,:) = 0.0_wp 
    869846                  tilde_e3t_n(:,:,:) = 0.0_wp 
    870847               ENDIF 
    871                !                          ! ------------ ! 
    872                IF( ln_vvl_ztilde ) THEN   ! z_tilde case ! 
    873                   !                       ! ------------ ! 
     848               !                                      ! ------------ ! 
     849               IF( ln_vvl_ztilde ) THEN               ! z_tilde case ! 
     850                  !                                   ! ------------ ! 
    874851                  IF( id5 > 0 ) THEN  ! required array exists 
    875                      CALL iom_get( numror, jpdom_auto, 'hdiv_lf', hdiv_lf(:,:,:), ldxios = lrxios ) 
     852                     CALL iom_get( numror, jpdom_auto, 'hdiv_lf', hdiv_lf(:,:,:) ) 
    876853                  ELSE                ! array is missing 
    877854                     hdiv_lf(:,:,:) = 0.0_wp 
     
    880857            ENDIF 
    881858            ! 
    882          ELSE                                   !* Initialize at "rest" 
     859         ELSE                                   !==  Initialize at "rest" with ssh  ==! 
    883860            ! 
    884  
    885             IF( ll_wd ) THEN   ! MJB ll_wd edits start here - these are essential  
    886                ! 
    887                IF( cn_cfg == 'wad' ) THEN 
    888                   ! Wetting and drying test case 
    889                   CALL usr_def_istate( gdept(:,:,:,Kbb), tmask, ts(:,:,:,:,Kbb), uu(:,:,:,Kbb), vv(:,:,:,Kbb), ssh(:,:,Kbb)  ) 
    890                   ts  (:,:,:,:,Kmm) = ts (:,:,:,:,Kbb)       ! set now values from to before ones 
    891                   ssh (:,:,Kmm)     = ssh(:,:,Kbb) 
    892                   uu   (:,:,:,Kmm)   = uu  (:,:,:,Kbb) 
    893                   vv   (:,:,:,Kmm)   = vv  (:,:,:,Kbb) 
    894                ELSE 
    895                   ! if not test case 
    896                   ssh(:,:,Kmm) = -ssh_ref 
    897                   ssh(:,:,Kbb) = -ssh_ref 
    898  
    899                   DO_2D( 1, 1, 1, 1 ) 
    900                      IF( ht_0(ji,jj)-ssh_ref <  rn_wdmin1 ) THEN ! if total depth is less than min depth 
    901                         ssh(ji,jj,Kbb) = rn_wdmin1 - (ht_0(ji,jj) ) 
    902                         ssh(ji,jj,Kmm) = rn_wdmin1 - (ht_0(ji,jj) ) 
    903                      ENDIF 
    904                   END_2D 
    905                ENDIF !If test case else 
    906  
    907                ! Adjust vertical metrics for all wad 
    908                DO jk = 1, jpk 
    909                   e3t(:,:,jk,Kmm) =  e3t_0(:,:,jk) * ( ht_0(:,:) + ssh(:,:,Kmm)  ) & 
    910                     &                            / ( ht_0(:,:) + 1._wp - ssmask(:,:) ) * tmask(:,:,jk)   & 
    911                     &            + e3t_0(:,:,jk) * ( 1._wp - tmask(:,:,jk) ) 
    912                END DO 
    913                e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 
    914  
    915                DO_2D( 1, 1, 1, 1 ) 
    916                   IF ( ht_0(ji,jj) .LE. 0.0 .AND. NINT( ssmask(ji,jj) ) .EQ. 1) THEN 
    917                      CALL ctl_stop( 'dom_vvl_rst: ht_0 must be positive at potentially wet points' ) 
    918                   ENDIF 
    919                END_2D 
    920                ! 
    921             ELSE 
    922                ! 
    923                ! Just to read set ssh in fact, called latter once vertical grid 
    924                ! is set up: 
    925 !               CALL usr_def_istate( gdept_0, tmask, ts(:,:,:,:,Kbb), uu(:,:,:,Kbb), vv(:,:,:,Kbb), ssh(:,:,Kbb)  ) 
    926 !               ! 
    927 !               DO jk=1,jpk 
    928 !                  e3t(:,:,jk,Kbb) =  e3t_0(:,:,jk) * ( ht_0(:,:) + ssh(:,:,Kbb) ) & 
    929 !                     &            / ( ht_0(:,:) + 1._wp -ssmask(:,:) ) * tmask(:,:,jk) 
    930 !               END DO 
    931 !               e3t(:,:,:,Kmm) = e3t(:,:,:,Kbb) 
    932                 ssh(:,:,Kmm)=0._wp 
    933                 e3t(:,:,:,Kmm)=e3t_0(:,:,:) 
    934                 e3t(:,:,:,Kbb)=e3t_0(:,:,:) 
    935                ! 
    936             END IF           ! end of ll_wd edits 
    937  
     861            DO jk = 1, jpk 
     862               e3t(:,:,jk,Kmm) =  e3t_0(:,:,jk) * ( 1._wp + ssh(:,:,Kmm) * r1_ht_0(:,:) * tmask(:,:,jk) ) 
     863            END DO 
     864            e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 
     865            ! 
    938866            IF( ln_vvl_ztilde .OR. ln_vvl_layer) THEN 
    939867               tilde_e3t_b(:,:,:) = 0._wp 
    940868               tilde_e3t_n(:,:,:) = 0._wp 
    941869               IF( ln_vvl_ztilde ) hdiv_lf(:,:,:) = 0._wp 
    942             END IF 
     870            ENDIF 
    943871         ENDIF 
    944          ! 
    945       ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN   ! Create restart file 
    946          !                                   ! =================== 
     872         !                                       !=======================! 
     873      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN       !  Create restart file  ! 
     874         !                                       !=======================! 
     875         ! 
    947876         IF(lwp) WRITE(numout,*) '---- dom_vvl_rst ----' 
    948          IF( lwxios ) CALL iom_swap(      cwxios_context          ) 
    949877         !                                           ! --------- ! 
    950878         !                                           ! all cases ! 
    951879         !                                           ! --------- ! 
    952          CALL iom_rstput( kt, nitrst, numrow, 'e3t_b', e3t(:,:,:,Kbb), ldxios = lwxios ) 
    953          CALL iom_rstput( kt, nitrst, numrow, 'e3t_n', e3t(:,:,:,Kmm), ldxios = lwxios ) 
     880         CALL iom_rstput( kt, nitrst, numrow, 'e3t_b', e3t(:,:,:,Kbb) ) 
     881         CALL iom_rstput( kt, nitrst, numrow, 'e3t_n', e3t(:,:,:,Kmm) ) 
    954882         !                                           ! ----------------------- ! 
    955883         IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN  ! z_tilde and layer cases ! 
    956884            !                                        ! ----------------------- ! 
    957             CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_b', tilde_e3t_b(:,:,:), ldxios = lwxios) 
    958             CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_n', tilde_e3t_n(:,:,:), ldxios = lwxios) 
     885            CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_b', tilde_e3t_b(:,:,:)) 
     886            CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_n', tilde_e3t_n(:,:,:)) 
    959887         END IF 
    960          !                                           ! -------------!     
     888         !                                           ! -------------! 
    961889         IF( ln_vvl_ztilde ) THEN                    ! z_tilde case ! 
    962890            !                                        ! ------------ ! 
    963             CALL iom_rstput( kt, nitrst, numrow, 'hdiv_lf', hdiv_lf(:,:,:), ldxios = lwxios) 
     891            CALL iom_rstput( kt, nitrst, numrow, 'hdiv_lf', hdiv_lf(:,:,:)) 
    964892         ENDIF 
    965893         ! 
    966          IF( lwxios ) CALL iom_swap(      cxios_context          ) 
    967894      ENDIF 
    968895      ! 
     
    973900      !!--------------------------------------------------------------------- 
    974901      !!                  ***  ROUTINE dom_vvl_ctl  *** 
    975       !!                 
     902      !! 
    976903      !! ** Purpose :   Control the consistency between namelist options 
    977904      !!                for vertical coordinate 
     
    982909         &              ln_vvl_zstar_at_eqtor      , rn_ahe3     , rn_rst_e3t            , & 
    983910         &              rn_lf_cutoff               , rn_zdef_max , ln_vvl_dbg                ! not yet implemented: ln_vvl_kepe 
    984       !!----------------------------------------------------------------------  
     911      !!---------------------------------------------------------------------- 
    985912      ! 
    986913      READ  ( numnam_ref, nam_vvl, IOSTAT = ios, ERR = 901) 
Note: See TracChangeset for help on using the changeset viewer.