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 6808 for branches/NERC/dev_r5549_BDY_ZEROGRAD/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90 – NEMO

Ignore:
Timestamp:
2016-07-19T10:38:35+02:00 (8 years ago)
Author:
jamesharle
Message:

merge with trunk@6232 for consistency with SSB code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r5549_BDY_ZEROGRAD/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90

    r5506 r6808  
    1010   !!            3.6  !  2014-11  (P. Mathiot) add ice shelf capability 
    1111   !!---------------------------------------------------------------------- 
    12    !!   'key_vvl'                              variable volume 
    13    !!---------------------------------------------------------------------- 
     12 
    1413   !!---------------------------------------------------------------------- 
    1514   !!   dom_vvl_init     : define initial vertical scale factors, depths and column thickness 
     
    1918   !!   dom_vvl_rst      : read/write restart file 
    2019   !!   dom_vvl_ctl      : Check the vvl options 
    21    !!   dom_vvl_orca_fix : Recompute some area-weighted interpolations of vertical scale factors  
    22    !!                    : to account for manual changes to e[1,2][u,v] in some Straits  
    2320   !!---------------------------------------------------------------------- 
    24    !! * Modules used 
    2521   USE oce             ! ocean dynamics and tracers 
     22   USE phycst          ! physical constant 
    2623   USE dom_oce         ! ocean space and time domain 
    2724   USE sbc_oce         ! ocean surface boundary condition 
     25   USE wet_dry         ! wetting and drying 
     26   USE restart         ! ocean restart 
     27   ! 
    2828   USE in_out_manager  ! I/O manager 
    2929   USE iom             ! I/O manager library 
    30    USE restart         ! ocean restart 
    3130   USE lib_mpp         ! distributed memory computing library 
    3231   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
     
    3736   PRIVATE 
    3837 
    39    !! * Routine accessibility 
    4038   PUBLIC  dom_vvl_init       ! called by domain.F90 
    4139   PUBLIC  dom_vvl_sf_nxt     ! called by step.F90 
    4240   PUBLIC  dom_vvl_sf_swp     ! called by step.F90 
    4341   PUBLIC  dom_vvl_interpol   ! called by dynnxt.F90 
    44    PRIVATE dom_vvl_orca_fix   ! called by dom_vvl_interpol 
    45  
    46    !!* Namelist nam_vvl 
    47    LOGICAL , PUBLIC                                      :: ln_vvl_zstar = .FALSE.              ! zstar  vertical coordinate 
    48    LOGICAL , PUBLIC                                      :: ln_vvl_ztilde = .FALSE.             ! ztilde vertical coordinate 
    49    LOGICAL , PUBLIC                                      :: ln_vvl_layer = .FALSE.              ! level  vertical coordinate 
    50    LOGICAL , PUBLIC                                      :: ln_vvl_ztilde_as_zstar = .FALSE.    ! ztilde vertical coordinate 
    51    LOGICAL , PUBLIC                                      :: ln_vvl_zstar_at_eqtor = .FALSE.     ! ztilde vertical coordinate 
    52    LOGICAL , PUBLIC                                      :: ln_vvl_kepe = .FALSE.               ! kinetic/potential energy transfer 
    53    !                                                                                            ! conservation: not used yet 
    54    REAL(wp)                                              :: rn_ahe3                   ! thickness diffusion coefficient 
    55    REAL(wp)                                              :: rn_rst_e3t                ! ztilde to zstar restoration timescale [days] 
    56    REAL(wp)                                              :: rn_lf_cutoff              ! cutoff frequency for low-pass filter  [days] 
    57    REAL(wp)                                              :: rn_zdef_max               ! maximum fractional e3t deformation 
    58    LOGICAL , PUBLIC                                      :: ln_vvl_dbg = .FALSE.      ! debug control prints 
    59  
    60    !! * Module variables 
    61    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: un_td, vn_td                       ! thickness diffusion transport 
    62    REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hdiv_lf                            ! low frequency part of hz divergence 
    63    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tilde_e3t_b, tilde_e3t_n           ! baroclinic scale factors 
    64    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tilde_e3t_a, dtilde_e3t_a          ! baroclinic scale factors 
    65    REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:)   :: frq_rst_e3t                        ! retoring period for scale factors 
    66    REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:)   :: frq_rst_hdv                        ! retoring period for low freq. divergence 
     42 
     43   !                                                      !!* Namelist nam_vvl 
     44   LOGICAL , PUBLIC :: ln_vvl_zstar           = .FALSE.    ! zstar  vertical coordinate 
     45   LOGICAL , PUBLIC :: ln_vvl_ztilde          = .FALSE.    ! ztilde vertical coordinate 
     46   LOGICAL , PUBLIC :: ln_vvl_layer           = .FALSE.    ! level  vertical coordinate 
     47   LOGICAL , PUBLIC :: ln_vvl_ztilde_as_zstar = .FALSE.    ! ztilde vertical coordinate 
     48   LOGICAL , PUBLIC :: ln_vvl_zstar_at_eqtor  = .FALSE.    ! ztilde vertical coordinate 
     49   LOGICAL , PUBLIC :: ln_vvl_kepe            = .FALSE.    ! kinetic/potential energy transfer 
     50   !                                                       ! conservation: not used yet 
     51   REAL(wp)         :: rn_ahe3                             ! thickness diffusion coefficient 
     52   REAL(wp)         :: rn_rst_e3t                          ! ztilde to zstar restoration timescale [days] 
     53   REAL(wp)         :: rn_lf_cutoff                        ! cutoff frequency for low-pass filter  [days] 
     54   REAL(wp)         :: rn_zdef_max                         ! maximum fractional e3t deformation 
     55   LOGICAL , PUBLIC :: ln_vvl_dbg = .FALSE.                ! debug control prints 
     56 
     57   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: un_td, vn_td                ! thickness diffusion transport 
     58   REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hdiv_lf                     ! low frequency part of hz divergence 
     59   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tilde_e3t_b, tilde_e3t_n    ! baroclinic scale factors 
     60   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tilde_e3t_a, dtilde_e3t_a   ! baroclinic scale factors 
     61   REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:)   :: frq_rst_e3t                 ! retoring period for scale factors 
     62   REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:)   :: frq_rst_hdv                 ! retoring period for low freq. divergence 
    6763 
    6864   !! * Substitutions 
    69 #  include "domzgr_substitute.h90" 
    7065#  include "vectopt_loop_substitute.h90" 
    7166   !!---------------------------------------------------------------------- 
    72    !! NEMO/OPA 3.3 , NEMO-Consortium (2010)  
     67   !! NEMO/OPA 3.7 , NEMO-Consortium (2015)  
    7368   !! $Id$ 
    7469   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    7570   !!---------------------------------------------------------------------- 
    76  
    7771CONTAINS 
    7872 
     
    8175      !!                ***  FUNCTION dom_vvl_alloc  *** 
    8276      !!---------------------------------------------------------------------- 
    83       IF( ln_vvl_zstar ) dom_vvl_alloc = 0 
     77      IF( ln_vvl_zstar )   dom_vvl_alloc = 0 
    8478      IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 
    8579         ALLOCATE( tilde_e3t_b(jpi,jpj,jpk)  , tilde_e3t_n(jpi,jpj,jpk) , tilde_e3t_a(jpi,jpj,jpk) ,   & 
     
    8882         IF( lk_mpp             )   CALL mpp_sum ( dom_vvl_alloc ) 
    8983         IF( dom_vvl_alloc /= 0 )   CALL ctl_warn('dom_vvl_alloc: failed to allocate arrays') 
    90          un_td = 0.0_wp 
    91          vn_td = 0.0_wp 
     84         un_td = 0._wp 
     85         vn_td = 0._wp 
    9286      ENDIF 
    9387      IF( ln_vvl_ztilde ) THEN 
     
    9690         IF( dom_vvl_alloc /= 0 )   CALL ctl_warn('dom_vvl_alloc: failed to allocate arrays') 
    9791      ENDIF 
    98  
     92      ! 
    9993   END FUNCTION dom_vvl_alloc 
    10094 
     
    110104      !!               - interpolate scale factors 
    111105      !! 
    112       !! ** Action  : - fse3t_(n/b) and tilde_e3t_(n/b) 
    113       !!              - Regrid: fse3(u/v)_n 
    114       !!                        fse3(u/v)_b        
    115       !!                        fse3w_n            
    116       !!                        fse3(u/v)w_b       
    117       !!                        fse3(u/v)w_n       
    118       !!                        fsdept_n, fsdepw_n and fsde3w_n 
     106      !! ** Action  : - e3t_(n/b) and tilde_e3t_(n/b) 
     107      !!              - Regrid: e3(u/v)_n 
     108      !!                        e3(u/v)_b        
     109      !!                        e3w_n            
     110      !!                        e3(u/v)w_b       
     111      !!                        e3(u/v)w_n       
     112      !!                        gdept_n, gdepw_n and gde3w_n 
    119113      !!              - h(t/u/v)_0 
    120114      !!              - frq_rst_e3t and frq_rst_hdv 
     
    122116      !! Reference  : Leclair, M., and G. Madec, 2011, Ocean Modelling. 
    123117      !!---------------------------------------------------------------------- 
    124       USE phycst,  ONLY : rpi, rsmall, rad 
    125       !! * Local declarations 
    126       INTEGER ::   ji,jj,jk 
     118      INTEGER ::   ji, jj, jk 
    127119      INTEGER ::   ii0, ii1, ij0, ij1 
    128120      REAL(wp)::   zcoef 
    129121      !!---------------------------------------------------------------------- 
    130       IF( nn_timing == 1 )  CALL timing_start('dom_vvl_init') 
    131  
     122      ! 
     123      IF( nn_timing == 1 )   CALL timing_start('dom_vvl_init') 
     124      ! 
    132125      IF(lwp) WRITE(numout,*) 
    133126      IF(lwp) WRITE(numout,*) 'dom_vvl_init : Variable volume activated' 
    134127      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 
    135  
    136       ! choose vertical coordinate (z_star, z_tilde or layer) 
    137       ! ========================== 
    138       CALL dom_vvl_ctl 
    139  
    140       ! Allocate module arrays 
    141       ! ====================== 
     128      ! 
     129      CALL dom_vvl_ctl     ! choose vertical coordinate (z_star, z_tilde or layer) 
     130      ! 
     131      !                    ! Allocate module arrays 
    142132      IF( dom_vvl_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'dom_vvl_init : unable to allocate arrays' ) 
    143  
    144       ! Read or initialize fse3t_(b/n), tilde_e3t_(b/n) and hdiv_lf (and e3t_a(jpk)) 
    145       ! ============================================================================ 
     133      ! 
     134      !                    ! Read or initialize e3t_(b/n), tilde_e3t_(b/n) and hdiv_lf 
    146135      CALL dom_vvl_rst( nit000, 'READ' ) 
    147       fse3t_a(:,:,jpk) = e3t_0(:,:,jpk) 
    148  
    149       ! Reconstruction of all vertical scale factors at now and before time steps 
    150       ! ============================================================================= 
    151       ! Horizontal scale factor interpolations 
    152       ! -------------------------------------- 
    153       CALL dom_vvl_interpol( fse3t_b(:,:,:), fse3u_b(:,:,:), 'U' ) 
    154       CALL dom_vvl_interpol( fse3t_b(:,:,:), fse3v_b(:,:,:), 'V' ) 
    155       CALL dom_vvl_interpol( fse3t_n(:,:,:), fse3u_n(:,:,:), 'U' ) 
    156       CALL dom_vvl_interpol( fse3t_n(:,:,:), fse3v_n(:,:,:), 'V' ) 
    157       CALL dom_vvl_interpol( fse3u_n(:,:,:), fse3f_n(:,:,:), 'F' ) 
    158       ! Vertical scale factor interpolations 
    159       ! ------------------------------------ 
    160       CALL dom_vvl_interpol( fse3t_n(:,:,:), fse3w_n (:,:,:), 'W'  ) 
    161       CALL dom_vvl_interpol( fse3u_n(:,:,:), fse3uw_n(:,:,:), 'UW' ) 
    162       CALL dom_vvl_interpol( fse3v_n(:,:,:), fse3vw_n(:,:,:), 'VW' ) 
    163       CALL dom_vvl_interpol( fse3t_b(:,:,:), fse3w_b (:,:,:), 'W'  ) 
    164       CALL dom_vvl_interpol( fse3u_b(:,:,:), fse3uw_b(:,:,:), 'UW' ) 
    165       CALL dom_vvl_interpol( fse3v_b(:,:,:), fse3vw_b(:,:,:), 'VW' ) 
    166       ! t- and w- points depth 
    167       ! ---------------------- 
    168       ! set the isf depth as it is in the initial step 
    169       fsdept_n(:,:,1) = 0.5_wp * fse3w_n(:,:,1) 
    170       fsdepw_n(:,:,1) = 0.0_wp 
    171       fsde3w_n(:,:,1) = fsdept_n(:,:,1) - sshn(:,:) 
    172       fsdept_b(:,:,1) = 0.5_wp * fse3w_b(:,:,1) 
    173       fsdepw_b(:,:,1) = 0.0_wp 
    174  
    175       DO jk = 2, jpk 
     136      e3t_a(:,:,jpk) = e3t_0(:,:,jpk)  ! last level always inside the sea floor set one for all 
     137      ! 
     138      !                    !== Set of all other vertical scale factors  ==!  (now and before) 
     139      !                                ! Horizontal interpolation of e3t 
     140      CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b(:,:,:), 'U' )    ! from T to U 
     141      CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 
     142      CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b(:,:,:), 'V' )    ! from T to V  
     143      CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 
     144      CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:), 'F' )    ! from U to F 
     145      !                                ! Vertical interpolation of e3t,u,v  
     146      CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n (:,:,:), 'W'  )  ! from T to W 
     147      CALL dom_vvl_interpol( e3t_b(:,:,:), e3w_b (:,:,:), 'W'  ) 
     148      CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' )  ! from U to UW 
     149      CALL dom_vvl_interpol( e3u_b(:,:,:), e3uw_b(:,:,:), 'UW' ) 
     150      CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' )  ! from V to UW 
     151      CALL dom_vvl_interpol( e3v_b(:,:,:), e3vw_b(:,:,:), 'VW' ) 
     152      ! 
     153      !                    !==  depth of t and w-point  ==!   (set the isf depth as it is in the initial timestep) 
     154      gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1)       ! reference to the ocean surface (used for MLD and light penetration) 
     155      gdepw_n(:,:,1) = 0.0_wp 
     156      gde3w_n(:,:,1) = gdept_n(:,:,1) - sshn(:,:)  ! reference to a common level z=0 for hpg 
     157      gdept_b(:,:,1) = 0.5_wp * e3w_b(:,:,1) 
     158      gdepw_b(:,:,1) = 0.0_wp 
     159      DO jk = 2, jpk                               ! vertical sum 
    176160         DO jj = 1,jpj 
    177161            DO ji = 1,jpi 
    178               !    zcoef = (tmask(ji,jj,jk) - wmask(ji,jj,jk))   ! 0 everywhere tmask = wmask, ie everywhere expect at jk = mikt 
    179                                                      ! 1 everywhere from mbkt to mikt + 1 or 1 (if no isf) 
    180                                                      ! 0.5 where jk = mikt   
    181                zcoef = (tmask(ji,jj,jk) - wmask(ji,jj,jk)) 
    182                fsdepw_n(ji,jj,jk) = fsdepw_n(ji,jj,jk-1) + fse3t_n(ji,jj,jk-1) 
    183                fsdept_n(ji,jj,jk) =      zcoef  * ( fsdepw_n(ji,jj,jk  ) + 0.5 * fse3w_n(ji,jj,jk))  & 
    184                    &                + (1-zcoef) * ( fsdept_n(ji,jj,jk-1) +       fse3w_n(ji,jj,jk))  
    185                fsde3w_n(ji,jj,jk) = fsdept_n(ji,jj,jk) - sshn(ji,jj) 
    186                fsdepw_b(ji,jj,jk) = fsdepw_b(ji,jj,jk-1) + fse3t_b(ji,jj,jk-1) 
    187                fsdept_b(ji,jj,jk) =      zcoef  * ( fsdepw_b(ji,jj,jk  ) + 0.5 * fse3w_b(ji,jj,jk))  & 
    188                    &                + (1-zcoef) * ( fsdept_b(ji,jj,jk-1) +       fse3w_b(ji,jj,jk))  
     162               !    zcoef = tmask - wmask    ! 0 everywhere tmask = wmask, ie everywhere expect at jk = mikt 
     163               !                             ! 1 everywhere from mbkt to mikt + 1 or 1 (if no isf) 
     164               !                             ! 0.5 where jk = mikt      
     165!!gm ???????   BUG ?  gdept_n as well as gde3w_n  does not include the thickness of ISF ?? 
     166               zcoef = ( tmask(ji,jj,jk) - wmask(ji,jj,jk) ) 
     167               gdepw_n(ji,jj,jk) = gdepw_n(ji,jj,jk-1) + e3t_n(ji,jj,jk-1) 
     168               gdept_n(ji,jj,jk) =      zcoef  * ( gdepw_n(ji,jj,jk  ) + 0.5 * e3w_n(ji,jj,jk))  & 
     169                  &                + (1-zcoef) * ( gdept_n(ji,jj,jk-1) +       e3w_n(ji,jj,jk))  
     170               gde3w_n(ji,jj,jk) = gdept_n(ji,jj,jk) - sshn(ji,jj) 
     171               gdepw_b(ji,jj,jk) = gdepw_b(ji,jj,jk-1) + e3t_b(ji,jj,jk-1) 
     172               gdept_b(ji,jj,jk) =      zcoef  * ( gdepw_b(ji,jj,jk  ) + 0.5 * e3w_b(ji,jj,jk))  & 
     173                  &                + (1-zcoef) * ( gdept_b(ji,jj,jk-1) +       e3w_b(ji,jj,jk))  
    189174            END DO 
    190175         END DO 
    191176      END DO 
    192  
    193       ! Before depth and Inverse of the local depth of the water column at u- and v- points 
    194       ! ----------------------------------------------------------------------------------- 
    195       hu_b(:,:) = 0. 
    196       hv_b(:,:) = 0. 
    197       DO jk = 1, jpkm1 
    198          hu_b(:,:) = hu_b(:,:) + fse3u_b(:,:,jk) * umask(:,:,jk) 
    199          hv_b(:,:) = hv_b(:,:) + fse3v_b(:,:,jk) * vmask(:,:,jk) 
     177      ! 
     178      !                    !==  thickness of the water column  !!   (ocean portion only) 
     179      ht_n(:,:) = e3t_n(:,:,1) * tmask(:,:,1)   !!gm  BUG  :  this should be 1/2 * e3w(k=1) .... 
     180      hu_b(:,:) = e3u_b(:,:,1) * umask(:,:,1) 
     181      hu_n(:,:) = e3u_n(:,:,1) * umask(:,:,1) 
     182      hv_b(:,:) = e3v_b(:,:,1) * vmask(:,:,1) 
     183      hv_n(:,:) = e3v_n(:,:,1) * vmask(:,:,1) 
     184      DO jk = 2, jpkm1 
     185         ht_n(:,:) = ht_n(:,:) + e3t_n(:,:,jk) * tmask(:,:,jk) 
     186         hu_b(:,:) = hu_b(:,:) + e3u_b(:,:,jk) * umask(:,:,jk) 
     187         hu_n(:,:) = hu_n(:,:) + e3u_n(:,:,jk) * umask(:,:,jk) 
     188         hv_b(:,:) = hv_b(:,:) + e3v_b(:,:,jk) * vmask(:,:,jk) 
     189         hv_n(:,:) = hv_n(:,:) + e3v_n(:,:,jk) * vmask(:,:,jk) 
    200190      END DO 
    201       hur_b(:,:) = umask_i(:,:) / ( hu_b(:,:) + 1. - umask_i(:,:) ) 
    202       hvr_b(:,:) = vmask_i(:,:) / ( hv_b(:,:) + 1. - vmask_i(:,:) ) 
    203  
    204       ! Restoring frequencies for z_tilde coordinate 
    205       ! ============================================ 
     191      ! 
     192      !                    !==  inverse of water column thickness   ==!   (u- and v- points) 
     193      r1_hu_b(:,:) = ssumask(:,:) / ( hu_b(:,:) + 1._wp - ssumask(:,:) )    ! _i mask due to ISF 
     194      r1_hu_n(:,:) = ssumask(:,:) / ( hu_n(:,:) + 1._wp - ssumask(:,:) ) 
     195      r1_hv_b(:,:) = ssvmask(:,:) / ( hv_b(:,:) + 1._wp - ssvmask(:,:) ) 
     196      r1_hv_n(:,:) = ssvmask(:,:) / ( hv_n(:,:) + 1._wp - ssvmask(:,:) ) 
     197 
     198      !                    !==   z_tilde coordinate case  ==!   (Restoring frequencies) 
    206199      IF( ln_vvl_ztilde ) THEN 
    207          ! Values in days provided via the namelist; use rsmall to avoid possible division by zero errors with faulty settings 
    208          frq_rst_e3t(:,:) = 2.0_wp * rpi / ( MAX( rn_rst_e3t  , rsmall ) * 86400.0_wp ) 
    209          frq_rst_hdv(:,:) = 2.0_wp * rpi / ( MAX( rn_lf_cutoff, rsmall ) * 86400.0_wp ) 
    210          IF( ln_vvl_ztilde_as_zstar ) THEN 
    211             ! Ignore namelist settings and use these next two to emulate z-star using z-tilde 
    212             frq_rst_e3t(:,:) = 0.0_wp  
    213             frq_rst_hdv(:,:) = 1.0_wp / rdt 
     200!!gm : idea: add here a READ in a file of custumized restoring frequency 
     201         !                                   ! Values in days provided via the namelist 
     202         !                                   ! use rsmall to avoid possible division by zero errors with faulty settings 
     203         frq_rst_e3t(:,:) = 2._wp * rpi / ( MAX( rn_rst_e3t  , rsmall ) * 86400.0_wp ) 
     204         frq_rst_hdv(:,:) = 2._wp * rpi / ( MAX( rn_lf_cutoff, rsmall ) * 86400.0_wp ) 
     205         ! 
     206         IF( ln_vvl_ztilde_as_zstar ) THEN   ! z-star emulation using z-tile 
     207            frq_rst_e3t(:,:) = 0._wp               !Ignore namelist settings 
     208            frq_rst_hdv(:,:) = 1._wp / rdt 
    214209         ENDIF 
    215          IF ( ln_vvl_zstar_at_eqtor ) THEN 
     210         IF ( ln_vvl_zstar_at_eqtor ) THEN   ! use z-star in vicinity of the Equator 
    216211            DO jj = 1, jpj 
    217212               DO ji = 1, jpi 
     213!!gm  case |gphi| >= 6 degrees is useless   initialized just above by default 
    218214                  IF( ABS(gphit(ji,jj)) >= 6.) THEN 
    219215                     ! values outside the equatorial band and transition zone (ztilde) 
    220216                     frq_rst_e3t(ji,jj) =  2.0_wp * rpi / ( MAX( rn_rst_e3t  , rsmall ) * 86400.e0_wp ) 
    221217                     frq_rst_hdv(ji,jj) =  2.0_wp * rpi / ( MAX( rn_lf_cutoff, rsmall ) * 86400.e0_wp ) 
    222                   ELSEIF( ABS(gphit(ji,jj)) <= 2.5) THEN 
     218                  ELSEIF( ABS(gphit(ji,jj)) <= 2.5) THEN    ! Equator strip ==> z-star 
    223219                     ! values inside the equatorial band (ztilde as zstar) 
    224220                     frq_rst_e3t(ji,jj) =  0.0_wp 
    225221                     frq_rst_hdv(ji,jj) =  1.0_wp / rdt 
    226                   ELSE 
    227                      ! values in the transition band (linearly vary from ztilde to ztilde as zstar values) 
     222                  ELSE                                      ! transition band (2.5 to 6 degrees N/S) 
     223                     !                                      ! (linearly transition from z-tilde to z-star) 
    228224                     frq_rst_e3t(ji,jj) = 0.0_wp + (frq_rst_e3t(ji,jj)-0.0_wp)*0.5_wp   & 
    229225                        &            * (  1.0_wp - COS( rad*(ABS(gphit(ji,jj))-2.5_wp)  & 
     
    236232               END DO 
    237233            END DO 
    238             IF( cp_cfg == "orca" .AND. jp_cfg == 3 ) THEN 
    239                ii0 = 103   ;   ii1 = 111        ! Suppress ztilde in the Foxe Basin for ORCA2 
     234            IF( cp_cfg == "orca" .AND. jp_cfg == 3 ) THEN   ! ORCA2: Suppress ztilde in the Foxe Basin for ORCA2 
     235               ii0 = 103   ;   ii1 = 111        
    240236               ij0 = 128   ;   ij1 = 135   ;    
    241237               frq_rst_e3t( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) =  0.0_wp 
     
    244240         ENDIF 
    245241      ENDIF 
    246  
     242      ! 
    247243      IF( nn_timing == 1 )  CALL timing_stop('dom_vvl_init') 
    248  
     244      ! 
    249245   END SUBROUTINE dom_vvl_init 
    250246 
     
    268264      !!               - tilde_e3t_a: after increment of vertical scale factor  
    269265      !!                              in z_tilde case 
    270       !!               - fse3(t/u/v)_a 
     266      !!               - e3(t/u/v)_a 
    271267      !! 
    272268      !! Reference  : Leclair, M., and Madec, G. 2011, Ocean Modelling. 
    273269      !!---------------------------------------------------------------------- 
    274       REAL(wp), POINTER, DIMENSION(:,:,:) :: ze3t 
    275       REAL(wp), POINTER, DIMENSION(:,:  ) :: zht, z_scale, zwu, zwv, zhdiv 
    276       !! * Arguments 
    277       INTEGER, INTENT( in )                  :: kt                    ! time step 
    278       INTEGER, INTENT( in ), OPTIONAL        :: kcall                 ! optional argument indicating call sequence 
    279       !! * Local declarations 
    280       INTEGER                                :: ji, jj, jk            ! dummy loop indices 
    281       INTEGER , DIMENSION(3)                 :: ijk_max, ijk_min      ! temporary integers 
    282       REAL(wp)                               :: z2dt                  ! temporary scalars 
    283       REAL(wp)                               :: z_tmin, z_tmax        ! temporary scalars 
    284       LOGICAL                                :: ll_do_bclinic         ! temporary logical 
    285       !!---------------------------------------------------------------------- 
    286       IF( nn_timing == 1 )  CALL timing_start('dom_vvl_sf_nxt') 
    287       CALL wrk_alloc( jpi, jpj, zht, z_scale, zwu, zwv, zhdiv ) 
    288       CALL wrk_alloc( jpi, jpj, jpk, ze3t                     ) 
    289  
    290       IF(kt == nit000)   THEN 
     270      INTEGER, INTENT( in )           ::   kt      ! time step 
     271      INTEGER, INTENT( in ), OPTIONAL ::   kcall   ! optional argument indicating call sequence 
     272      ! 
     273      INTEGER                ::   ji, jj, jk            ! dummy loop indices 
     274      INTEGER , DIMENSION(3) ::   ijk_max, ijk_min      ! temporary integers 
     275      REAL(wp)               ::   z2dt, z_tmin, z_tmax  ! local scalars 
     276      LOGICAL                ::   ll_do_bclinic         ! local logical 
     277      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ze3t 
     278      REAL(wp), POINTER, DIMENSION(:,:  ) ::   zht, z_scale, zwu, zwv, zhdiv 
     279      !!---------------------------------------------------------------------- 
     280      ! 
     281      IF( ln_linssh )   RETURN      ! No calculation in linear free surface 
     282      ! 
     283      IF( nn_timing == 1 )   CALL timing_start('dom_vvl_sf_nxt') 
     284      ! 
     285      CALL wrk_alloc( jpi,jpj,zht,   z_scale, zwu, zwv, zhdiv ) 
     286      CALL wrk_alloc( jpi,jpj,jpk,   ze3t ) 
     287 
     288      IF( kt == nit000 ) THEN 
    291289         IF(lwp) WRITE(numout,*) 
    292290         IF(lwp) WRITE(numout,*) 'dom_vvl_sf_nxt : compute after scale factors' 
     
    296294      ll_do_bclinic = .TRUE. 
    297295      IF( PRESENT(kcall) ) THEN 
    298          IF ( kcall == 2 .AND. ln_vvl_ztilde ) ll_do_bclinic = .FALSE. 
     296         IF( kcall == 2 .AND. ln_vvl_ztilde )  ll_do_bclinic = .FALSE. 
    299297      ENDIF 
    300298 
     
    302300      ! After acale factors at t-points ! 
    303301      ! ******************************* ! 
    304  
    305302      !                                                ! --------------------------------------------- ! 
    306                                                        ! z_star coordinate and barotropic z-tilde part ! 
     303      !                                                ! z_star coordinate and barotropic z-tilde part ! 
    307304      !                                                ! --------------------------------------------- ! 
    308  
     305      ! 
    309306      z_scale(:,:) = ( ssha(:,:) - sshb(:,:) ) * ssmask(:,:) / ( ht_0(:,:) + sshn(:,:) + 1. - ssmask(:,:) ) 
    310307      DO jk = 1, jpkm1 
    311          ! formally this is the same as fse3t_a = e3t_0*(1+ssha/ht_0) 
    312          fse3t_a(:,:,jk) = fse3t_b(:,:,jk) + fse3t_n(:,:,jk) * z_scale(:,:) * tmask(:,:,jk) 
     308         ! formally this is the same as e3t_a = e3t_0*(1+ssha/ht_0) 
     309         e3t_a(:,:,jk) = e3t_b(:,:,jk) + e3t_n(:,:,jk) * z_scale(:,:) * tmask(:,:,jk) 
    313310      END DO 
    314  
     311      ! 
    315312      IF( ln_vvl_ztilde .OR. ln_vvl_layer .AND. ll_do_bclinic ) THEN   ! z_tilde or layer coordinate ! 
    316313         !                                                            ! ------baroclinic part------ ! 
    317  
    318314         ! I - initialization 
    319315         ! ================== 
     
    321317         ! 1 - barotropic divergence 
    322318         ! ------------------------- 
    323          zhdiv(:,:) = 0. 
    324          zht(:,:)   = 0. 
     319         zhdiv(:,:) = 0._wp 
     320         zht(:,:)   = 0._wp 
    325321         DO jk = 1, jpkm1 
    326             zhdiv(:,:) = zhdiv(:,:) + fse3t_n(:,:,jk) * hdivn(:,:,jk) 
    327             zht  (:,:) = zht  (:,:) + fse3t_n(:,:,jk) * tmask(:,:,jk) 
     322            zhdiv(:,:) = zhdiv(:,:) + e3t_n(:,:,jk) * hdivn(:,:,jk) 
     323            zht  (:,:) = zht  (:,:) + e3t_n(:,:,jk) * tmask(:,:,jk) 
    328324         END DO 
    329325         zhdiv(:,:) = zhdiv(:,:) / ( zht(:,:) + 1. - tmask_i(:,:) ) 
     
    332328         ! -------------------------------------------------- 
    333329         IF( ln_vvl_ztilde ) THEN 
    334             IF( kt .GT. nit000 ) THEN 
     330            IF( kt > nit000 ) THEN 
    335331               DO jk = 1, jpkm1 
    336332                  hdiv_lf(:,:,jk) = hdiv_lf(:,:,jk) - rdt * frq_rst_hdv(:,:)   & 
    337                      &          * ( hdiv_lf(:,:,jk) - fse3t_n(:,:,jk) * ( hdivn(:,:,jk) - zhdiv(:,:) ) ) 
     333                     &          * ( hdiv_lf(:,:,jk) - e3t_n(:,:,jk) * ( hdivn(:,:,jk) - zhdiv(:,:) ) ) 
    338334               END DO 
    339335            ENDIF 
    340          END IF 
     336         ENDIF 
    341337 
    342338         ! II - after z_tilde increments of vertical scale factors 
    343339         ! ======================================================= 
    344          tilde_e3t_a(:,:,:) = 0.0_wp  ! tilde_e3t_a used to store tendency terms 
     340         tilde_e3t_a(:,:,:) = 0._wp  ! tilde_e3t_a used to store tendency terms 
    345341 
    346342         ! 1 - High frequency divergence term 
     
    348344         IF( ln_vvl_ztilde ) THEN     ! z_tilde case 
    349345            DO jk = 1, jpkm1 
    350                tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) - ( fse3t_n(:,:,jk) * ( hdivn(:,:,jk) - zhdiv(:,:) ) - hdiv_lf(:,:,jk) ) 
     346               tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) - ( e3t_n(:,:,jk) * ( hdivn(:,:,jk) - zhdiv(:,:) ) - hdiv_lf(:,:,jk) ) 
    351347            END DO 
    352348         ELSE                         ! layer case 
    353349            DO jk = 1, jpkm1 
    354                tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) -   fse3t_n(:,:,jk) * ( hdivn(:,:,jk) - zhdiv(:,:) ) * tmask(:,:,jk) 
    355             END DO 
    356          END IF 
     350               tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) -   e3t_n(:,:,jk) * ( hdivn(:,:,jk) - zhdiv(:,:) ) * tmask(:,:,jk) 
     351            END DO 
     352         ENDIF 
    357353 
    358354         ! 2 - Restoring term (z-tilde case only) 
     
    362358               tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) - frq_rst_e3t(:,:) * tilde_e3t_b(:,:,jk) 
    363359            END DO 
    364          END IF 
     360         ENDIF 
    365361 
    366362         ! 3 - Thickness diffusion term 
    367363         ! ---------------------------- 
    368          zwu(:,:) = 0.0_wp 
    369          zwv(:,:) = 0.0_wp 
    370          ! a - first derivative: diffusive fluxes 
    371          DO jk = 1, jpkm1 
     364         zwu(:,:) = 0._wp 
     365         zwv(:,:) = 0._wp 
     366         DO jk = 1, jpkm1        ! a - first derivative: diffusive fluxes 
    372367            DO jj = 1, jpjm1 
    373368               DO ji = 1, fs_jpim1   ! vector opt. 
    374                   un_td(ji,jj,jk) = rn_ahe3 * umask(ji,jj,jk) * re2u_e1u(ji,jj) & 
    375                                   & * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji+1,jj  ,jk) ) 
    376                   vn_td(ji,jj,jk) = rn_ahe3 * vmask(ji,jj,jk) * re1v_e2v(ji,jj) &  
    377                                   & * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji  ,jj+1,jk) ) 
     369                  un_td(ji,jj,jk) = rn_ahe3 * umask(ji,jj,jk) * e2_e1u(ji,jj)          & 
     370                     &            * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji+1,jj  ,jk) ) 
     371                  vn_td(ji,jj,jk) = rn_ahe3 * vmask(ji,jj,jk) * e1_e2v(ji,jj)          &  
     372                     &            * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji  ,jj+1,jk) ) 
    378373                  zwu(ji,jj) = zwu(ji,jj) + un_td(ji,jj,jk) 
    379374                  zwv(ji,jj) = zwv(ji,jj) + vn_td(ji,jj,jk) 
     
    381376            END DO 
    382377         END DO 
    383          ! b - correction for last oceanic u-v points 
    384          DO jj = 1, jpj 
     378         DO jj = 1, jpj          ! b - correction for last oceanic u-v points 
    385379            DO ji = 1, jpi 
    386380               un_td(ji,jj,mbku(ji,jj)) = un_td(ji,jj,mbku(ji,jj)) - zwu(ji,jj) 
     
    388382            END DO 
    389383         END DO 
    390          ! c - second derivative: divergence of diffusive fluxes 
    391          DO jk = 1, jpkm1 
     384         DO jk = 1, jpkm1        ! c - second derivative: divergence of diffusive fluxes 
    392385            DO jj = 2, jpjm1 
    393386               DO ji = fs_2, fs_jpim1   ! vector opt. 
    394387                  tilde_e3t_a(ji,jj,jk) = tilde_e3t_a(ji,jj,jk) + (   un_td(ji-1,jj  ,jk) - un_td(ji,jj,jk)    & 
    395388                     &                                          +     vn_td(ji  ,jj-1,jk) - vn_td(ji,jj,jk)    & 
    396                      &                                            ) * r1_e12t(ji,jj) 
     389                     &                                            ) * r1_e1e2t(ji,jj) 
    397390               END DO 
    398391            END DO 
    399392         END DO 
    400          ! d - thickness diffusion transport: boundary conditions 
    401          !     (stored for tracer advction and continuity equation) 
     393         !                       ! d - thickness diffusion transport: boundary conditions 
     394         !                             (stored for tracer advction and continuity equation) 
    402395         CALL lbc_lnk( un_td , 'U' , -1._wp) 
    403396         CALL lbc_lnk( vn_td , 'V' , -1._wp) 
     
    417410         ! Maximum deformation control 
    418411         ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    419          ze3t(:,:,jpk) = 0.0_wp 
     412         ze3t(:,:,jpk) = 0._wp 
    420413         DO jk = 1, jpkm1 
    421414            ze3t(:,:,jk) = tilde_e3t_a(:,:,jk) / e3t_0(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) 
     
    426419         IF( lk_mpp )   CALL mpp_min( z_tmin )                 ! min over the global domain 
    427420         ! - ML - test: for the moment, stop simulation for too large e3_t variations 
    428          IF( ( z_tmax .GT. rn_zdef_max ) .OR. ( z_tmin .LT. - rn_zdef_max ) ) THEN 
     421         IF( ( z_tmax >  rn_zdef_max ) .OR. ( z_tmin < - rn_zdef_max ) ) THEN 
    429422            IF( lk_mpp ) THEN 
    430423               CALL mpp_maxloc( ze3t, tmask, z_tmax, ijk_max(1), ijk_max(2), ijk_max(3) ) 
     
    469462         z_scale(:,:) =  - zht(:,:) / ( ht_0(:,:) + sshn(:,:) + 1. - ssmask(:,:) ) 
    470463         DO jk = 1, jpkm1 
    471             dtilde_e3t_a(:,:,jk) = dtilde_e3t_a(:,:,jk) + fse3t_n(:,:,jk) * z_scale(:,:) * tmask(:,:,jk) 
     464            dtilde_e3t_a(:,:,jk) = dtilde_e3t_a(:,:,jk) + e3t_n(:,:,jk) * z_scale(:,:) * tmask(:,:,jk) 
    472465         END DO 
    473466 
     
    477470      !                                           ! ---baroclinic part--------- ! 
    478471         DO jk = 1, jpkm1 
    479             fse3t_a(:,:,jk) = fse3t_a(:,:,jk) + dtilde_e3t_a(:,:,jk) * tmask(:,:,jk) 
     472            e3t_a(:,:,jk) = e3t_a(:,:,jk) + dtilde_e3t_a(:,:,jk) * tmask(:,:,jk) 
    480473         END DO 
    481474      ENDIF 
     
    492485         zht(:,:) = 0.0_wp 
    493486         DO jk = 1, jpkm1 
    494             zht(:,:) = zht(:,:) + fse3t_n(:,:,jk) * tmask(:,:,jk) 
     487            zht(:,:) = zht(:,:) + e3t_n(:,:,jk) * tmask(:,:,jk) 
    495488         END DO 
    496489         z_tmax = MAXVAL( tmask(:,:,1) * tmask_i(:,:) * ABS( ht_0(:,:) + sshn(:,:) - zht(:,:) ) ) 
    497490         IF( lk_mpp ) CALL mpp_max( z_tmax )                                ! max over the global domain 
    498          IF( lwp    ) WRITE(numout, *) kt,' MAXVAL(abs(ht_0+sshn-SUM(fse3t_n))) =', z_tmax 
     491         IF( lwp    ) WRITE(numout, *) kt,' MAXVAL(abs(ht_0+sshn-SUM(e3t_n))) =', z_tmax 
    499492         ! 
    500493         zht(:,:) = 0.0_wp 
    501494         DO jk = 1, jpkm1 
    502             zht(:,:) = zht(:,:) + fse3t_a(:,:,jk) * tmask(:,:,jk) 
     495            zht(:,:) = zht(:,:) + e3t_a(:,:,jk) * tmask(:,:,jk) 
    503496         END DO 
    504497         z_tmax = MAXVAL( tmask(:,:,1) * tmask_i(:,:) * ABS( ht_0(:,:) + ssha(:,:) - zht(:,:) ) ) 
    505498         IF( lk_mpp ) CALL mpp_max( z_tmax )                                ! max over the global domain 
    506          IF( lwp    ) WRITE(numout, *) kt,' MAXVAL(abs(ht_0+ssha-SUM(fse3t_a))) =', z_tmax 
     499         IF( lwp    ) WRITE(numout, *) kt,' MAXVAL(abs(ht_0+ssha-SUM(e3t_a))) =', z_tmax 
    507500         ! 
    508501         zht(:,:) = 0.0_wp 
    509502         DO jk = 1, jpkm1 
    510             zht(:,:) = zht(:,:) + fse3t_b(:,:,jk) * tmask(:,:,jk) 
     503            zht(:,:) = zht(:,:) + e3t_b(:,:,jk) * tmask(:,:,jk) 
    511504         END DO 
    512505         z_tmax = MAXVAL( tmask(:,:,1) * tmask_i(:,:) * ABS( ht_0(:,:) + sshb(:,:) - zht(:,:) ) ) 
    513506         IF( lk_mpp ) CALL mpp_max( z_tmax )                                ! max over the global domain 
    514          IF( lwp    ) WRITE(numout, *) kt,' MAXVAL(abs(ht_0+sshb-SUM(fse3t_b))) =', z_tmax 
     507         IF( lwp    ) WRITE(numout, *) kt,' MAXVAL(abs(ht_0+sshb-SUM(e3t_b))) =', z_tmax 
    515508         ! 
    516509         z_tmax = MAXVAL( tmask(:,:,1) *  ABS( sshb(:,:) ) ) 
     
    531524      ! *********************************** ! 
    532525 
    533       CALL dom_vvl_interpol( fse3t_a(:,:,:), fse3u_a(:,:,:), 'U' ) 
    534       CALL dom_vvl_interpol( fse3t_a(:,:,:), fse3v_a(:,:,:), 'V' ) 
     526      CALL dom_vvl_interpol( e3t_a(:,:,:), e3u_a(:,:,:), 'U' ) 
     527      CALL dom_vvl_interpol( e3t_a(:,:,:), e3v_a(:,:,:), 'V' ) 
    535528 
    536529      ! *********************************** ! 
     
    538531      ! *********************************** ! 
    539532 
    540       hu_a(:,:) = 0._wp                        ! Ocean depth at U-points 
    541       hv_a(:,:) = 0._wp                        ! Ocean depth at V-points 
    542       DO jk = 1, jpkm1 
    543          hu_a(:,:) = hu_a(:,:) + fse3u_a(:,:,jk) * umask(:,:,jk) 
    544          hv_a(:,:) = hv_a(:,:) + fse3v_a(:,:,jk) * vmask(:,:,jk) 
     533      hu_a(:,:) = e3u_a(:,:,1) * umask(:,:,1) 
     534      hv_a(:,:) = e3v_a(:,:,1) * vmask(:,:,1) 
     535      DO jk = 2, jpkm1 
     536         hu_a(:,:) = hu_a(:,:) + e3u_a(:,:,jk) * umask(:,:,jk) 
     537         hv_a(:,:) = hv_a(:,:) + e3v_a(:,:,jk) * vmask(:,:,jk) 
    545538      END DO 
    546539      !                                        ! Inverse of the local depth 
    547       hur_a(:,:) = 1._wp / ( hu_a(:,:) + 1._wp - umask_i(:,:) ) * umask_i(:,:) 
    548       hvr_a(:,:) = 1._wp / ( hv_a(:,:) + 1._wp - vmask_i(:,:) ) * vmask_i(:,:) 
    549  
    550       CALL wrk_dealloc( jpi, jpj, zht, z_scale, zwu, zwv, zhdiv ) 
    551       CALL wrk_dealloc( jpi, jpj, jpk, ze3t                     ) 
    552  
     540!!gm BUG ?  don't understand the use of umask_i here ..... 
     541      r1_hu_a(:,:) = ssumask(:,:) / ( hu_a(:,:) + 1._wp - ssumask(:,:) ) 
     542      r1_hv_a(:,:) = ssvmask(:,:) / ( hv_a(:,:) + 1._wp - ssvmask(:,:) ) 
     543      ! 
     544      CALL wrk_dealloc( jpi,jpj,       zht, z_scale, zwu, zwv, zhdiv ) 
     545      CALL wrk_dealloc( jpi,jpj,jpk,   ze3t ) 
     546      ! 
    553547      IF( nn_timing == 1 )  CALL timing_stop('dom_vvl_sf_nxt') 
    554  
     548      ! 
    555549   END SUBROUTINE dom_vvl_sf_nxt 
    556550 
     
    568562      !!               - recompute depths and water height fields 
    569563      !! 
    570       !! ** Action  :  - fse3t_(b/n), tilde_e3t_(b/n) and fse3(u/v)_n ready for next time step 
     564      !! ** Action  :  - e3t_(b/n), tilde_e3t_(b/n) and e3(u/v)_n ready for next time step 
    571565      !!               - Recompute: 
    572       !!                    fse3(u/v)_b        
    573       !!                    fse3w_n            
    574       !!                    fse3(u/v)w_b       
    575       !!                    fse3(u/v)w_n       
    576       !!                    fsdept_n, fsdepw_n  and fsde3w_n 
     566      !!                    e3(u/v)_b        
     567      !!                    e3w_n            
     568      !!                    e3(u/v)w_b       
     569      !!                    e3(u/v)w_n       
     570      !!                    gdept_n, gdepw_n  and gde3w_n 
    577571      !!                    h(u/v) and h(u/v)r 
    578572      !! 
     
    580574      !!              Leclair, M., and G. Madec, 2011, Ocean Modelling. 
    581575      !!---------------------------------------------------------------------- 
    582       !! * Arguments 
    583       INTEGER, INTENT( in )               :: kt       ! time step 
    584       !! * Local declarations 
    585       INTEGER                             :: ji,jj,jk       ! dummy loop indices 
    586       REAL(wp)                            :: zcoef 
    587       !!---------------------------------------------------------------------- 
    588  
     576      INTEGER, INTENT( in ) ::   kt   ! time step 
     577      ! 
     578      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     579      REAL(wp) ::   zcoef        ! local scalar 
     580      !!---------------------------------------------------------------------- 
     581      ! 
     582      IF( ln_linssh )   RETURN      ! No calculation in linear free surface 
     583      ! 
    589584      IF( nn_timing == 1 )  CALL timing_start('dom_vvl_sf_swp') 
    590585      ! 
     
    597592      ! Time filter and swap of scale factors 
    598593      ! ===================================== 
    599       ! - ML - fse3(t/u/v)_b are allready computed in dynnxt. 
     594      ! - ML - e3(t/u/v)_b are allready computed in dynnxt. 
    600595      IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 
    601596         IF( neuler == 0 .AND. kt == nit000 ) THEN 
     
    607602         tilde_e3t_n(:,:,:) = tilde_e3t_a(:,:,:) 
    608603      ENDIF 
    609       fsdept_b(:,:,:) = fsdept_n(:,:,:) 
    610       fsdepw_b(:,:,:) = fsdepw_n(:,:,:) 
    611  
    612       fse3t_n(:,:,:) = fse3t_a(:,:,:) 
    613       fse3u_n(:,:,:) = fse3u_a(:,:,:) 
    614       fse3v_n(:,:,:) = fse3v_a(:,:,:) 
     604      gdept_b(:,:,:) = gdept_n(:,:,:) 
     605      gdepw_b(:,:,:) = gdepw_n(:,:,:) 
     606 
     607      e3t_n(:,:,:) = e3t_a(:,:,:) 
     608      e3u_n(:,:,:) = e3u_a(:,:,:) 
     609      e3v_n(:,:,:) = e3v_a(:,:,:) 
    615610 
    616611      ! Compute all missing vertical scale factor and depths 
     
    618613      ! Horizontal scale factor interpolations 
    619614      ! -------------------------------------- 
    620       ! - ML - fse3u_b and fse3v_b are allready computed in dynnxt 
     615      ! - ML - e3u_b and e3v_b are allready computed in dynnxt 
    621616      ! - JC - hu_b, hv_b, hur_b, hvr_b also 
    622       CALL dom_vvl_interpol( fse3u_n(:,:,:), fse3f_n (:,:,:), 'F'  ) 
     617       
     618      CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:), 'F'  ) 
     619       
    623620      ! Vertical scale factor interpolations 
    624       ! ------------------------------------ 
    625       CALL dom_vvl_interpol( fse3t_n(:,:,:), fse3w_n (:,:,:), 'W'  ) 
    626       CALL dom_vvl_interpol( fse3u_n(:,:,:), fse3uw_n(:,:,:), 'UW' ) 
    627       CALL dom_vvl_interpol( fse3v_n(:,:,:), fse3vw_n(:,:,:), 'VW' ) 
    628       CALL dom_vvl_interpol( fse3t_b(:,:,:), fse3w_b (:,:,:), 'W'  ) 
    629       CALL dom_vvl_interpol( fse3u_b(:,:,:), fse3uw_b(:,:,:), 'UW' ) 
    630       CALL dom_vvl_interpol( fse3v_b(:,:,:), fse3vw_b(:,:,:), 'VW' ) 
    631       ! t- and w- points depth 
    632       ! ---------------------- 
    633       ! set the isf depth as it is in the initial step 
    634       fsdept_n(:,:,1) = 0.5_wp * fse3w_n(:,:,1) 
    635       fsdepw_n(:,:,1) = 0.0_wp 
    636       fsde3w_n(:,:,1) = fsdept_n(:,:,1) - sshn(:,:) 
    637  
     621      CALL dom_vvl_interpol( e3t_n(:,:,:),  e3w_n(:,:,:), 'W'  ) 
     622      CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' ) 
     623      CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' ) 
     624      CALL dom_vvl_interpol( e3t_b(:,:,:),  e3w_b(:,:,:), 'W'  ) 
     625      CALL dom_vvl_interpol( e3u_b(:,:,:), e3uw_b(:,:,:), 'UW' ) 
     626      CALL dom_vvl_interpol( e3v_b(:,:,:), e3vw_b(:,:,:), 'VW' ) 
     627 
     628      ! t- and w- points depth (set the isf depth as it is in the initial step) 
     629      gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 
     630      gdepw_n(:,:,1) = 0.0_wp 
     631      gde3w_n(:,:,1) = gdept_n(:,:,1) - sshn(:,:) 
    638632      DO jk = 2, jpk 
    639633         DO jj = 1,jpj 
     
    642636                                                                 ! 1 for jk = mikt 
    643637               zcoef = (tmask(ji,jj,jk) - wmask(ji,jj,jk)) 
    644                fsdepw_n(ji,jj,jk) = fsdepw_n(ji,jj,jk-1) + fse3t_n(ji,jj,jk-1) 
    645                fsdept_n(ji,jj,jk) =      zcoef  * ( fsdepw_n(ji,jj,jk  ) + 0.5 * fse3w_n(ji,jj,jk))  & 
    646                    &                + (1-zcoef) * ( fsdept_n(ji,jj,jk-1) +       fse3w_n(ji,jj,jk))  
    647                fsde3w_n(ji,jj,jk) = fsdept_n(ji,jj,jk) - sshn(ji,jj) 
     638               gdepw_n(ji,jj,jk) = gdepw_n(ji,jj,jk-1) + e3t_n(ji,jj,jk-1) 
     639               gdept_n(ji,jj,jk) =    zcoef  * ( gdepw_n(ji,jj,jk  ) + 0.5 * e3w_n(ji,jj,jk) )  & 
     640                   &             + (1-zcoef) * ( gdept_n(ji,jj,jk-1) +       e3w_n(ji,jj,jk) )  
     641               gde3w_n(ji,jj,jk) = gdept_n(ji,jj,jk) - sshn(ji,jj) 
    648642            END DO 
    649643         END DO 
    650644      END DO 
    651645 
    652       ! Local depth and Inverse of the local depth of the water column at u- and v- points 
    653       ! ---------------------------------------------------------------------------------- 
    654       hu (:,:) = hu_a (:,:) 
    655       hv (:,:) = hv_a (:,:) 
    656  
    657       ! Inverse of the local depth 
    658       hur(:,:) = hur_a(:,:) 
    659       hvr(:,:) = hvr_a(:,:) 
    660  
    661       ! Local depth of the water column at t- points 
    662       ! -------------------------------------------- 
    663       ht(:,:) = 0. 
    664       DO jk = 1, jpkm1 
    665          ht(:,:) = ht(:,:) + fse3t_n(:,:,jk) * tmask(:,:,jk) 
     646      ! Local depth and Inverse of the local depth of the water 
     647      ! ------------------------------------------------------- 
     648      hu_n(:,:) = hu_a(:,:)   ;   r1_hu_n(:,:) = r1_hu_a(:,:) 
     649      hv_n(:,:) = hv_a(:,:)   ;   r1_hv_n(:,:) = r1_hv_a(:,:) 
     650      ! 
     651      ht_n(:,:) = e3t_n(:,:,1) * tmask(:,:,1) 
     652      DO jk = 2, jpkm1 
     653         ht_n(:,:) = ht_n(:,:) + e3t_n(:,:,jk) * tmask(:,:,jk) 
    666654      END DO 
    667655 
    668656      ! Write outputs 
    669657      ! ============= 
    670       CALL iom_put(     "e3t" , fse3t_n  (:,:,:) ) 
    671       CALL iom_put(     "e3u" , fse3u_n  (:,:,:) ) 
    672       CALL iom_put(     "e3v" , fse3v_n  (:,:,:) ) 
    673       CALL iom_put(     "e3w" , fse3w_n  (:,:,:) ) 
    674       CALL iom_put( "tpt_dep" , fsde3w_n (:,:,:) ) 
     658      CALL iom_put(     "e3t",   e3t_n(:,:,:) ) 
     659      CALL iom_put(     "e3u",   e3u_n(:,:,:) ) 
     660      CALL iom_put(     "e3v",   e3v_n(:,:,:) ) 
     661      CALL iom_put(     "e3w",   e3w_n(:,:,:) ) 
     662      CALL iom_put( "tpt_dep", gde3w_n(:,:,:) ) 
    675663      IF( iom_use("e3tdef") )   & 
    676          CALL iom_put( "e3tdef"  , ( ( fse3t_n(:,:,:) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100 * tmask(:,:,:) ) ** 2 ) 
     664         CALL iom_put( "e3tdef", ( ( e3t_n(:,:,:) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100. * tmask(:,:,:) ) ** 2 ) 
    677665 
    678666      ! write restart file 
    679667      ! ================== 
    680       IF( lrst_oce ) CALL dom_vvl_rst( kt, 'WRITE' ) 
    681       ! 
    682       IF( nn_timing == 1 )  CALL timing_stop('dom_vvl_sf_swp') 
    683  
     668      IF( lrst_oce )   CALL dom_vvl_rst( kt, 'WRITE' ) 
     669      ! 
     670      IF( nn_timing == 1 )   CALL timing_stop('dom_vvl_sf_swp') 
     671      ! 
    684672   END SUBROUTINE dom_vvl_sf_swp 
    685673 
     
    695683      !!                - vertical interpolation: simple averaging 
    696684      !!---------------------------------------------------------------------- 
    697       !! * Arguments 
    698       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( in    ) ::  pe3_in     ! input e3 to be interpolated 
    699       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) ::  pe3_out    ! output interpolated e3 
    700       CHARACTER(LEN=*), INTENT( in )                    ::  pout       ! grid point of out scale factors 
    701       !                                                                !   =  'U', 'V', 'W, 'F', 'UW' or 'VW' 
    702       !! * Local declarations 
    703       INTEGER ::   ji, jj, jk                                          ! dummy loop indices 
    704       LOGICAL ::   l_is_orca                                           ! local logical 
    705       !!---------------------------------------------------------------------- 
    706       IF( nn_timing == 1 )  CALL timing_start('dom_vvl_interpol') 
    707          ! 
    708       l_is_orca = .FALSE. 
    709       IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) l_is_orca = .TRUE.      ! ORCA R2 configuration - will need to correct some locations 
    710  
    711       SELECT CASE ( pout ) 
    712          !               ! ------------------------------------- ! 
    713       CASE( 'U' )        ! interpolation from T-point to U-point ! 
    714          !               ! ------------------------------------- ! 
    715          ! horizontal surface weighted interpolation 
     685      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in   ) ::  pe3_in    ! input e3 to be interpolated 
     686      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::  pe3_out   ! output interpolated e3 
     687      CHARACTER(LEN=*)                , INTENT(in   ) ::  pout      ! grid point of out scale factors 
     688      !                                                             !   =  'U', 'V', 'W, 'F', 'UW' or 'VW' 
     689      ! 
     690      INTEGER ::   ji, jj, jk                                       ! dummy loop indices 
     691      REAL(wp) ::  zlnwd                                            ! =1./0. when ln_wd = T/F 
     692      !!---------------------------------------------------------------------- 
     693      ! 
     694      IF( nn_timing == 1 )   CALL timing_start('dom_vvl_interpol') 
     695      ! 
     696      IF(ln_wd) THEN 
     697        zlnwd = 1.0_wp 
     698      ELSE 
     699        zlnwd = 0.0_wp 
     700      END IF 
     701      ! 
     702      SELECT CASE ( pout )    !==  type of interpolation  ==! 
     703         ! 
     704      CASE( 'U' )                   !* from T- to U-point : hor. surface weighted mean 
    716705         DO jk = 1, jpk 
    717706            DO jj = 1, jpjm1 
    718707               DO ji = 1, fs_jpim1   ! vector opt. 
    719                   pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * r1_e12u(ji,jj)                                   & 
    720                      &                       * (   e12t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) )     & 
    721                      &                           + e12t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) ) 
     708                  pe3_out(ji,jj,jk) = 0.5_wp * (  umask(ji,jj,jk) * (1.0_wp - zlnwd) + zlnwd ) * r1_e1e2u(ji,jj)   & 
     709                     &                       * (   e1e2t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) )     & 
     710                     &                           + e1e2t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) ) 
    722711               END DO 
    723712            END DO 
    724713         END DO 
    725          ! 
    726          IF( l_is_orca ) CALL dom_vvl_orca_fix( pe3_in, pe3_out, pout ) 
    727          ! boundary conditions 
    728714         CALL lbc_lnk( pe3_out(:,:,:), 'U', 1._wp ) 
    729715         pe3_out(:,:,:) = pe3_out(:,:,:) + e3u_0(:,:,:) 
    730          !               ! ------------------------------------- ! 
    731       CASE( 'V' )        ! interpolation from T-point to V-point ! 
    732          !               ! ------------------------------------- ! 
    733          ! horizontal surface weighted interpolation 
     716         ! 
     717      CASE( 'V' )                   !* from T- to V-point : hor. surface weighted mean 
    734718         DO jk = 1, jpk 
    735719            DO jj = 1, jpjm1 
    736720               DO ji = 1, fs_jpim1   ! vector opt. 
    737                   pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk) * r1_e12v(ji,jj)                                   & 
    738                      &                       * (   e12t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) )     & 
    739                      &                           + e12t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) ) 
     721                  pe3_out(ji,jj,jk) = 0.5_wp * ( vmask(ji,jj,jk)  * (1.0_wp - zlnwd) + zlnwd ) * r1_e1e2v(ji,jj)   & 
     722                     &                       * (   e1e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) )     & 
     723                     &                           + e1e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) ) 
    740724               END DO 
    741725            END DO 
    742726         END DO 
    743          ! 
    744          IF( l_is_orca ) CALL dom_vvl_orca_fix( pe3_in, pe3_out, pout ) 
    745          ! boundary conditions 
    746727         CALL lbc_lnk( pe3_out(:,:,:), 'V', 1._wp ) 
    747728         pe3_out(:,:,:) = pe3_out(:,:,:) + e3v_0(:,:,:) 
    748          !               ! ------------------------------------- ! 
    749       CASE( 'F' )        ! interpolation from U-point to F-point ! 
    750          !               ! ------------------------------------- ! 
    751          ! horizontal surface weighted interpolation 
     729         ! 
     730      CASE( 'F' )                   !* from U-point to F-point : hor. surface weighted mean 
    752731         DO jk = 1, jpk 
    753732            DO jj = 1, jpjm1 
    754733               DO ji = 1, fs_jpim1   ! vector opt. 
    755                   pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk) * r1_e12f(ji,jj)               & 
    756                      &                       * (   e12u(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3u_0(ji,jj  ,jk) )     & 
    757                      &                           + e12u(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3u_0(ji,jj+1,jk) ) ) 
     734                  pe3_out(ji,jj,jk) = 0.5_wp * (  umask(ji,jj,jk) * umask(ji,jj+1,jk) * (1.0_wp - zlnwd) + zlnwd ) & 
     735                     &                       *    r1_e1e2f(ji,jj)                                                  & 
     736                     &                       * (   e1e2u(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3u_0(ji,jj  ,jk) )     & 
     737                     &                           + e1e2u(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3u_0(ji,jj+1,jk) ) ) 
    758738               END DO 
    759739            END DO 
    760740         END DO 
    761          ! 
    762          IF( l_is_orca ) CALL dom_vvl_orca_fix( pe3_in, pe3_out, pout ) 
    763          ! boundary conditions 
    764741         CALL lbc_lnk( pe3_out(:,:,:), 'F', 1._wp ) 
    765742         pe3_out(:,:,:) = pe3_out(:,:,:) + e3f_0(:,:,:) 
    766          !               ! ------------------------------------- ! 
    767       CASE( 'W' )        ! interpolation from T-point to W-point ! 
    768          !               ! ------------------------------------- ! 
    769          ! vertical simple interpolation 
     743         ! 
     744      CASE( 'W' )                   !* from T- to W-point : vertical simple mean 
     745         ! 
    770746         pe3_out(:,:,1) = e3w_0(:,:,1) + pe3_in(:,:,1) - e3t_0(:,:,1) 
    771          ! - ML - The use of mask in this formaula enables the special treatment of the last w- point without indirect adressing 
     747         ! - ML - The use of mask in this formulea enables the special treatment of the last w-point without indirect adressing 
     748!!gm BUG? use here wmask in case of ISF ?  to be checked 
    772749         DO jk = 2, jpk 
    773             pe3_out(:,:,jk) = e3w_0(:,:,jk) + ( 1.0_wp - 0.5_wp * tmask(:,:,jk) ) * ( pe3_in(:,:,jk-1) - e3t_0(:,:,jk-1) )   & 
    774                &                            +            0.5_wp * tmask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3t_0(:,:,jk  ) ) 
    775          END DO 
    776          !               ! -------------------------------------- ! 
    777       CASE( 'UW' )       ! interpolation from U-point to UW-point ! 
    778          !               ! -------------------------------------- ! 
    779          ! vertical simple interpolation 
     750            pe3_out(:,:,jk) = e3w_0(:,:,jk) + ( 1.0_wp - 0.5_wp * ( tmask(:,:,jk) * (1.0_wp - zlnwd) + zlnwd ) )   & 
     751               &                            * ( pe3_in(:,:,jk-1) - e3t_0(:,:,jk-1) )                               & 
     752               &                            +            0.5_wp * ( tmask(:,:,jk) * (1.0_wp - zlnwd) + zlnwd )     & 
     753               &                            * ( pe3_in(:,:,jk  ) - e3t_0(:,:,jk  ) ) 
     754         END DO 
     755         ! 
     756      CASE( 'UW' )                  !* from U- to UW-point : vertical simple mean 
     757         ! 
    780758         pe3_out(:,:,1) = e3uw_0(:,:,1) + pe3_in(:,:,1) - e3u_0(:,:,1) 
    781759         ! - ML - The use of mask in this formaula enables the special treatment of the last w- point without indirect adressing 
     760!!gm BUG? use here wumask in case of ISF ?  to be checked 
    782761         DO jk = 2, jpk 
    783             pe3_out(:,:,jk) = e3uw_0(:,:,jk) + ( 1.0_wp - 0.5_wp * umask(:,:,jk) ) * ( pe3_in(:,:,jk-1) - e3u_0(:,:,jk-1) )   & 
    784                &                             +            0.5_wp * umask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3u_0(:,:,jk  ) ) 
    785          END DO 
    786          !               ! -------------------------------------- ! 
    787       CASE( 'VW' )       ! interpolation from V-point to VW-point ! 
    788          !               ! -------------------------------------- ! 
    789          ! vertical simple interpolation 
     762            pe3_out(:,:,jk) = e3uw_0(:,:,jk) + ( 1.0_wp - 0.5_wp * ( umask(:,:,jk) * (1.0_wp - zlnwd) + zlnwd ) )  & 
     763               &                             * ( pe3_in(:,:,jk-1) - e3u_0(:,:,jk-1) )                              & 
     764               &                             +            0.5_wp * ( umask(:,:,jk) * (1.0_wp - zlnwd) + zlnwd )    & 
     765               &                             * ( pe3_in(:,:,jk  ) - e3u_0(:,:,jk  ) ) 
     766         END DO 
     767         ! 
     768      CASE( 'VW' )                  !* from V- to VW-point : vertical simple mean 
     769         ! 
    790770         pe3_out(:,:,1) = e3vw_0(:,:,1) + pe3_in(:,:,1) - e3v_0(:,:,1) 
    791771         ! - ML - The use of mask in this formaula enables the special treatment of the last w- point without indirect adressing 
     772!!gm BUG? use here wvmask in case of ISF ?  to be checked 
    792773         DO jk = 2, jpk 
    793             pe3_out(:,:,jk) = e3vw_0(:,:,jk) + ( 1.0_wp - 0.5_wp * vmask(:,:,jk) ) * ( pe3_in(:,:,jk-1) - e3v_0(:,:,jk-1) )   & 
    794                &                             +            0.5_wp * vmask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3v_0(:,:,jk  ) ) 
     774            pe3_out(:,:,jk) = e3vw_0(:,:,jk) + ( 1.0_wp - 0.5_wp * ( vmask(:,:,jk) * (1.0_wp - zlnwd) + zlnwd ) )  & 
     775               &                             * ( pe3_in(:,:,jk-1) - e3v_0(:,:,jk-1) )                              & 
     776               &                             +            0.5_wp * ( vmask(:,:,jk) * (1.0_wp - zlnwd) + zlnwd )    & 
     777               &                             * ( pe3_in(:,:,jk  ) - e3v_0(:,:,jk  ) ) 
    795778         END DO 
    796779      END SELECT 
    797780      ! 
    798  
    799       IF( nn_timing == 1 )  CALL timing_stop('dom_vvl_interpol') 
    800  
     781      IF( nn_timing == 1 )   CALL timing_stop('dom_vvl_interpol') 
     782      ! 
    801783   END SUBROUTINE dom_vvl_interpol 
     784 
    802785 
    803786   SUBROUTINE dom_vvl_rst( kt, cdrw ) 
     
    813796      !!                they are set to 0. 
    814797      !!---------------------------------------------------------------------- 
    815       !! * Arguments 
    816798      INTEGER         , INTENT(in) ::   kt     ! ocean time-step 
    817799      CHARACTER(len=*), INTENT(in) ::   cdrw   ! "READ"/"WRITE" flag 
    818       !! * Local declarations 
    819       INTEGER ::   jk 
     800      ! 
     801      INTEGER ::   ji, jj, jk 
    820802      INTEGER ::   id1, id2, id3, id4, id5     ! local integers 
    821803      !!---------------------------------------------------------------------- 
     
    828810            CALL iom_get( numror, jpdom_autoglo, 'sshn'   , sshn    ) 
    829811            ! 
    830             id1 = iom_varid( numror, 'fse3t_b', ldstop = .FALSE. ) 
    831             id2 = iom_varid( numror, 'fse3t_n', ldstop = .FALSE. ) 
     812            id1 = iom_varid( numror, 'e3t_b', ldstop = .FALSE. ) 
     813            id2 = iom_varid( numror, 'e3t_n', ldstop = .FALSE. ) 
    832814            id3 = iom_varid( numror, 'tilde_e3t_b', ldstop = .FALSE. ) 
    833815            id4 = iom_varid( numror, 'tilde_e3t_n', ldstop = .FALSE. ) 
     
    837819            !                             ! --------- ! 
    838820            IF( MIN( id1, id2 ) > 0 ) THEN       ! all required arrays exist 
    839                CALL iom_get( numror, jpdom_autoglo, 'fse3t_b', fse3t_b(:,:,:) ) 
    840                CALL iom_get( numror, jpdom_autoglo, 'fse3t_n', fse3t_n(:,:,:) ) 
     821               CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t_b(:,:,:) ) 
     822               CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t_n(:,:,:) ) 
    841823               ! needed to restart if land processor not computed  
    842                IF(lwp) write(numout,*) 'dom_vvl_rst : fse3t_b and fse3t_n found in restart files' 
     824               IF(lwp) write(numout,*) 'dom_vvl_rst : e3t_b and e3t_n found in restart files' 
    843825               WHERE ( tmask(:,:,:) == 0.0_wp )  
    844                   fse3t_n(:,:,:) = e3t_0(:,:,:) 
    845                   fse3t_b(:,:,:) = e3t_0(:,:,:) 
     826                  e3t_n(:,:,:) = e3t_0(:,:,:) 
     827                  e3t_b(:,:,:) = e3t_0(:,:,:) 
    846828               END WHERE 
    847829               IF( neuler == 0 ) THEN 
    848                   fse3t_b(:,:,:) = fse3t_n(:,:,:) 
     830                  e3t_b(:,:,:) = e3t_n(:,:,:) 
    849831               ENDIF 
    850832            ELSE IF( id1 > 0 ) THEN 
    851                IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : fse3t_n not found in restart files' 
    852                IF(lwp) write(numout,*) 'fse3t_n set equal to fse3t_b.' 
     833               IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t_n not found in restart files' 
     834               IF(lwp) write(numout,*) 'e3t_n set equal to e3t_b.' 
    853835               IF(lwp) write(numout,*) 'neuler is forced to 0' 
    854                CALL iom_get( numror, jpdom_autoglo, 'fse3t_b', fse3t_b(:,:,:) ) 
    855                fse3t_n(:,:,:) = fse3t_b(:,:,:) 
     836               CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t_b(:,:,:) ) 
     837               e3t_n(:,:,:) = e3t_b(:,:,:) 
    856838               neuler = 0 
    857839            ELSE IF( id2 > 0 ) THEN 
    858                IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : fse3t_b not found in restart files' 
    859                IF(lwp) write(numout,*) 'fse3t_b set equal to fse3t_n.' 
     840               IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t_b not found in restart files' 
     841               IF(lwp) write(numout,*) 'e3t_b set equal to e3t_n.' 
    860842               IF(lwp) write(numout,*) 'neuler is forced to 0' 
    861                CALL iom_get( numror, jpdom_autoglo, 'fse3t_n', fse3t_n(:,:,:) ) 
    862                fse3t_b(:,:,:) = fse3t_n(:,:,:) 
     843               CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t_n(:,:,:) ) 
     844               e3t_b(:,:,:) = e3t_n(:,:,:) 
    863845               neuler = 0 
    864846            ELSE 
    865                IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : fse3t_n not found in restart file' 
     847               IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t_n not found in restart file' 
    866848               IF(lwp) write(numout,*) 'Compute scale factor from sshn' 
    867849               IF(lwp) write(numout,*) 'neuler is forced to 0' 
    868                DO jk=1,jpk 
    869                   fse3t_n(:,:,jk) =  e3t_0(:,:,jk) * ( ht_0(:,:) + sshn(:,:) ) & 
    870                       &                            / ( ht_0(:,:) + 1._wp - ssmask(:,:) ) * tmask(:,:,jk) & 
    871                       &            + e3t_0(:,:,jk) * (1._wp -tmask(:,:,jk)) 
     850               DO jk = 1, jpk 
     851                  e3t_n(:,:,jk) =  e3t_0(:,:,jk) * ( ht_0(:,:) + sshn(:,:) ) & 
     852                      &                          / ( ht_0(:,:) + 1._wp - ssmask(:,:) ) * tmask(:,:,jk)  & 
     853                      &          + e3t_0(:,:,jk)                              * (1._wp -tmask(:,:,jk)) 
    872854               END DO 
    873                fse3t_b(:,:,:) = fse3t_n(:,:,:) 
     855               e3t_b(:,:,:) = e3t_n(:,:,:) 
    874856               neuler = 0 
    875857            ENDIF 
     
    902884            ! 
    903885         ELSE                                   !* Initialize at "rest" 
    904             fse3t_b(:,:,:) = e3t_0(:,:,:) 
    905             fse3t_n(:,:,:) = e3t_0(:,:,:) 
     886            e3t_b(:,:,:) = e3t_0(:,:,:) 
     887            e3t_n(:,:,:) = e3t_0(:,:,:) 
    906888            sshn(:,:) = 0.0_wp 
     889 
     890            IF( ln_wd ) THEN 
     891              DO jj = 1, jpj 
     892                DO ji = 1, jpi 
     893                  IF( e3t_0(ji,jj,1) <= 0.5_wp * rn_wdmin1 ) THEN 
     894                     e3t_b(ji,jj,:) = 0.5_wp * rn_wdmin1  
     895                     e3t_n(ji,jj,:) = 0.5_wp * rn_wdmin1  
     896                     e3t_a(ji,jj,:) = 0.5_wp * rn_wdmin1  
     897                     sshb(ji,jj) = rn_wdmin1 - bathy(ji,jj) 
     898                     sshn(ji,jj) = rn_wdmin1 - bathy(ji,jj) 
     899                     ssha(ji,jj) = rn_wdmin1 - bathy(ji,jj) 
     900                  ENDIF 
     901                ENDDO 
     902              ENDDO 
     903            END IF 
     904 
    907905            IF( ln_vvl_ztilde .OR. ln_vvl_layer) THEN 
    908906               tilde_e3t_b(:,:,:) = 0.0_wp 
     
    911909            END IF 
    912910         ENDIF 
    913  
     911         ! 
    914912      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN   ! Create restart file 
    915913         !                                   ! =================== 
     
    918916         !                                           ! all cases ! 
    919917         !                                           ! --------- ! 
    920          CALL iom_rstput( kt, nitrst, numrow, 'fse3t_b', fse3t_b(:,:,:) ) 
    921          CALL iom_rstput( kt, nitrst, numrow, 'fse3t_n', fse3t_n(:,:,:) ) 
     918         CALL iom_rstput( kt, nitrst, numrow, 'e3t_b', e3t_b(:,:,:) ) 
     919         CALL iom_rstput( kt, nitrst, numrow, 'e3t_n', e3t_n(:,:,:) ) 
    922920         !                                           ! ----------------------- ! 
    923921         IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN  ! z_tilde and layer cases ! 
     
    931929            CALL iom_rstput( kt, nitrst, numrow, 'hdiv_lf', hdiv_lf(:,:,:) ) 
    932930         ENDIF 
    933  
    934       ENDIF 
     931         ! 
     932      ENDIF 
     933      ! 
    935934      IF( nn_timing == 1 )  CALL timing_stop('dom_vvl_rst') 
    936  
     935      ! 
    937936   END SUBROUTINE dom_vvl_rst 
    938937 
     
    945944      !!                for vertical coordinate 
    946945      !!---------------------------------------------------------------------- 
    947       INTEGER ::   ioptio 
    948       INTEGER ::   ios 
    949  
     946      INTEGER ::   ioptio, ios 
     947      !! 
    950948      NAMELIST/nam_vvl/ ln_vvl_zstar, ln_vvl_ztilde, ln_vvl_layer, ln_vvl_ztilde_as_zstar, & 
    951                       & ln_vvl_zstar_at_eqtor      , rn_ahe3     , rn_rst_e3t            , & 
    952                       & rn_lf_cutoff               , rn_zdef_max , ln_vvl_dbg                ! not yet implemented: ln_vvl_kepe 
     949         &              ln_vvl_zstar_at_eqtor      , rn_ahe3     , rn_rst_e3t            , & 
     950         &              rn_lf_cutoff               , rn_zdef_max , ln_vvl_dbg                ! not yet implemented: ln_vvl_kepe 
    953951      !!----------------------------------------------------------------------  
    954  
     952      ! 
    955953      REWIND( numnam_ref )              ! Namelist nam_vvl in reference namelist :  
    956954      READ  ( numnam_ref, nam_vvl, IOSTAT = ios, ERR = 901) 
    957955901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_vvl in reference namelist', lwp ) 
    958  
     956      ! 
    959957      REWIND( numnam_cfg )              ! Namelist nam_vvl in configuration namelist : Parameters of the run 
    960958      READ  ( numnam_cfg, nam_vvl, IOSTAT = ios, ERR = 902 ) 
    961959902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_vvl in configuration namelist', lwp ) 
    962960      IF(lwm) WRITE ( numond, nam_vvl ) 
    963  
     961      ! 
    964962      IF(lwp) THEN                    ! Namelist print 
    965963         WRITE(numout,*) 
     
    994992         WRITE(numout,*) '                                         ln_vvl_dbg     = ', ln_vvl_dbg 
    995993      ENDIF 
    996  
     994      ! 
    997995      ioptio = 0                      ! Parameter control 
    998       IF( ln_vvl_ztilde_as_zstar ) ln_vvl_ztilde = .true. 
    999       IF( ln_vvl_zstar           )        ioptio = ioptio + 1 
    1000       IF( ln_vvl_ztilde          )        ioptio = ioptio + 1 
    1001       IF( ln_vvl_layer           )        ioptio = ioptio + 1 
    1002  
     996      IF( ln_vvl_ztilde_as_zstar )   ln_vvl_ztilde = .true. 
     997      IF( ln_vvl_zstar           )   ioptio = ioptio + 1 
     998      IF( ln_vvl_ztilde          )   ioptio = ioptio + 1 
     999      IF( ln_vvl_layer           )   ioptio = ioptio + 1 
     1000      ! 
    10031001      IF( ioptio /= 1 )   CALL ctl_stop( 'Choose ONE vertical coordinate in namelist nam_vvl' ) 
    1004       IF( .NOT. ln_vvl_zstar .AND. nn_isf .NE. 0) CALL ctl_stop( 'Only vvl_zstar has been tested with ice shelf cavity' ) 
    1005  
     1002      IF( .NOT. ln_vvl_zstar .AND. ln_isf ) CALL ctl_stop( 'Only vvl_zstar has been tested with ice shelf cavity' ) 
     1003      ! 
    10061004      IF(lwp) THEN                   ! Print the choice 
    10071005         WRITE(numout,*) 
     
    10141012         ! IF( .NOT. ln_vvl_kepe ) WRITE(numout,*) '              kinetic to potential energy transfer : option not used' 
    10151013      ENDIF 
    1016  
     1014      ! 
    10171015#if defined key_agrif 
    1018       IF (.NOT.Agrif_Root()) CALL ctl_stop( 'AGRIF not implemented with non-linear free surface (key_vvl)' ) 
     1016      IF(.NOT.Agrif_Root() )   CALL ctl_stop( 'AGRIF not implemented with non-linear free surface' ) 
    10191017#endif 
    1020  
     1018      ! 
    10211019   END SUBROUTINE dom_vvl_ctl 
    1022  
    1023    SUBROUTINE dom_vvl_orca_fix( pe3_in, pe3_out, pout ) 
    1024       !!--------------------------------------------------------------------- 
    1025       !!                   ***  ROUTINE dom_vvl_orca_fix  *** 
    1026       !!                      
    1027       !! ** Purpose :   Correct surface weighted, horizontally interpolated,  
    1028       !!                scale factors at locations that have been individually 
    1029       !!                modified in domhgr. Such modifications break the 
    1030       !!                relationship between e12t and e1u*e2u etc. 
    1031       !!                Recompute some scale factors ignoring the modified metric. 
    1032       !!---------------------------------------------------------------------- 
    1033       !! * Arguments 
    1034       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( in    ) ::  pe3_in     ! input e3 to be interpolated 
    1035       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) ::  pe3_out    ! output interpolated e3 
    1036       CHARACTER(LEN=*), INTENT( in )                    ::  pout       ! grid point of out scale factors 
    1037       !                                                                !   =  'U', 'V', 'W, 'F', 'UW' or 'VW' 
    1038       !! * Local declarations 
    1039       INTEGER ::   ji, jj, jk                                          ! dummy loop indices 
    1040       INTEGER ::   ij0, ij1, ii0, ii1                                  ! dummy loop indices 
    1041       INTEGER ::   isrow                                               ! index for ORCA1 starting row 
    1042       !! acc 
    1043       !! Hmm with the time splitting these "fixes" seem to do more harm than good. Temporarily disabled for 
    1044       !! the ORCA2 tests (by changing jp_cfg test from 2 to 3) pending further investigations 
    1045       !!  
    1046       !                                                ! ===================== 
    1047       IF( cp_cfg == "orca" .AND. jp_cfg == 3 ) THEN    ! ORCA R2 configuration 
    1048          !                                             ! ===================== 
    1049       !! acc 
    1050          IF( nn_cla == 0 ) THEN 
    1051             ! 
    1052             ii0 = 139   ;   ii1 = 140        ! Gibraltar Strait (e2u was modified) 
    1053             ij0 = 102   ;   ij1 = 102 
    1054             DO jk = 1, jpkm1 
    1055                DO jj = mj0(ij0), mj1(ij1) 
    1056                   DO ji = mi0(ii0), mi1(ii1) 
    1057                      SELECT CASE ( pout ) 
    1058                      CASE( 'U' ) 
    1059                         pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1060                        &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1061                        &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1062                        &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1063                      CASE( 'F' ) 
    1064                         pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1065                        &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1066                        &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1067                        &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1068                      END SELECT 
    1069                   END DO 
    1070                END DO 
    1071             END DO 
    1072             ! 
    1073             ii0 = 160   ;   ii1 = 160        ! Bab el Mandeb (e2u and e1v were modified) 
    1074             ij0 =  88   ;   ij1 =  88 
    1075             DO jk = 1, jpkm1 
    1076                DO jj = mj0(ij0), mj1(ij1) 
    1077                   DO ji = mi0(ii0), mi1(ii1) 
    1078                      SELECT CASE ( pout ) 
    1079                      CASE( 'U' ) 
    1080                         pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1081                        &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1082                        &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1083                        &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1084                      CASE( 'V' ) 
    1085                         pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1086                        &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1087                        &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1088                        &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1089                      CASE( 'F' ) 
    1090                         pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1091                        &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1092                        &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1093                        &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1094                      END SELECT 
    1095                   END DO 
    1096                END DO 
    1097             END DO 
    1098          ENDIF 
    1099  
    1100          ii0 = 145   ;   ii1 = 146        ! Danish Straits (e2u was modified) 
    1101          ij0 = 116   ;   ij1 = 116 
    1102          DO jk = 1, jpkm1 
    1103             DO jj = mj0(ij0), mj1(ij1) 
    1104                DO ji = mi0(ii0), mi1(ii1) 
    1105                   SELECT CASE ( pout ) 
    1106                   CASE( 'U' ) 
    1107                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1108                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1109                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1110                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1111                   CASE( 'F' ) 
    1112                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1113                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1114                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1115                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1116                   END SELECT 
    1117                END DO 
    1118             END DO 
    1119          END DO 
    1120       ENDIF 
    1121       ! 
    1122          !                                             ! ===================== 
    1123       IF( cp_cfg == "orca" .AND. jp_cfg == 1 ) THEN    ! ORCA R1 configuration 
    1124          !                                             ! ===================== 
    1125          ! This dirty section will be suppressed by simplification process: 
    1126          ! all this will come back in input files 
    1127          ! Currently these hard-wired indices relate to configuration with 
    1128          ! extend grid (jpjglo=332) 
    1129          ! which had a grid-size of 362x292. 
    1130          isrow = 332 - jpjglo 
    1131          ! 
    1132          ii0 = 282           ;   ii1 = 283        ! Gibraltar Strait (e2u was modified) 
    1133          ij0 = 241 - isrow   ;   ij1 = 241 - isrow 
    1134          DO jk = 1, jpkm1 
    1135             DO jj = mj0(ij0), mj1(ij1) 
    1136                DO ji = mi0(ii0), mi1(ii1) 
    1137                   SELECT CASE ( pout ) 
    1138                   CASE( 'U' ) 
    1139                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1140                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1141                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1142                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1143                   CASE( 'F' ) 
    1144                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1145                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1146                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1147                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1148                   END SELECT 
    1149                END DO 
    1150             END DO 
    1151          END DO 
    1152          ! 
    1153          ii0 = 314           ;   ii1 = 315        ! Bhosporus Strait (e2u was modified) 
    1154          ij0 = 248 - isrow   ;   ij1 = 248 - isrow 
    1155          DO jk = 1, jpkm1 
    1156             DO jj = mj0(ij0), mj1(ij1) 
    1157                DO ji = mi0(ii0), mi1(ii1) 
    1158                   SELECT CASE ( pout ) 
    1159                   CASE( 'U' ) 
    1160                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        &   
    1161                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1162                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1163                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1164                   CASE( 'F' ) 
    1165                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    &   
    1166                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1167                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1168                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1169                   END SELECT 
    1170                END DO 
    1171             END DO 
    1172          END DO 
    1173          ! 
    1174          ii0 =  44           ;   ii1 =  44        ! Lombok Strait (e1v was modified) 
    1175          ij0 = 164 - isrow   ;   ij1 = 165 - isrow 
    1176          DO jk = 1, jpkm1 
    1177             DO jj = mj0(ij0), mj1(ij1) 
    1178                DO ji = mi0(ii0), mi1(ii1) 
    1179                   SELECT CASE ( pout ) 
    1180                   CASE( 'V' ) 
    1181                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1182                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1183                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1184                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1185                   END SELECT 
    1186                END DO 
    1187             END DO 
    1188          END DO 
    1189          ! 
    1190          ii0 =  48           ;   ii1 =  48        ! Sumba Strait (e1v was modified) [closed from bathy_11 on] 
    1191          ij0 = 164 - isrow   ;   ij1 = 165 - isrow 
    1192          DO jk = 1, jpkm1 
    1193             DO jj = mj0(ij0), mj1(ij1) 
    1194                DO ji = mi0(ii0), mi1(ii1) 
    1195                   SELECT CASE ( pout ) 
    1196                   CASE( 'V' ) 
    1197                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1198                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1199                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1200                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1201                   END SELECT 
    1202                END DO 
    1203             END DO 
    1204          END DO 
    1205          ! 
    1206          ii0 =  53          ;   ii1 =  53        ! Ombai Strait (e1v was modified) 
    1207          ij0 = 164 - isrow  ;   ij1 = 165  - isrow   
    1208          DO jk = 1, jpkm1 
    1209             DO jj = mj0(ij0), mj1(ij1) 
    1210                DO ji = mi0(ii0), mi1(ii1) 
    1211                   SELECT CASE ( pout ) 
    1212                   CASE( 'V' ) 
    1213                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1214                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1215                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1216                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1217                   END SELECT 
    1218                END DO 
    1219             END DO 
    1220          END DO 
    1221          ! 
    1222          ii0 =  56            ;   ii1 =  56        ! Timor Passage (e1v was modified) 
    1223          ij0 = 164 - isrow    ;   ij1 = 165  - isrow   
    1224          DO jk = 1, jpkm1 
    1225             DO jj = mj0(ij0), mj1(ij1) 
    1226                DO ji = mi0(ii0), mi1(ii1) 
    1227                   SELECT CASE ( pout ) 
    1228                   CASE( 'V' ) 
    1229                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1230                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1231                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1232                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1233                   END SELECT 
    1234                END DO 
    1235             END DO 
    1236          END DO 
    1237          ! 
    1238          ii0 =  55            ;   ii1 =  55        ! West Halmahera Strait (e1v was modified) 
    1239          ij0 = 181 - isrow    ;   ij1 = 182 - isrow   
    1240          DO jk = 1, jpkm1 
    1241             DO jj = mj0(ij0), mj1(ij1) 
    1242                DO ji = mi0(ii0), mi1(ii1) 
    1243                   SELECT CASE ( pout ) 
    1244                   CASE( 'V' ) 
    1245                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1246                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1247                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1248                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1249                   END SELECT 
    1250                END DO 
    1251             END DO 
    1252          END DO 
    1253          ! 
    1254          ii0 =  58            ;   ii1 =  58        ! East Halmahera Strait (e1v was modified) 
    1255          ij0 = 181 - isrow    ;   ij1 = 182 - isrow   
    1256          DO jk = 1, jpkm1 
    1257             DO jj = mj0(ij0), mj1(ij1) 
    1258                DO ji = mi0(ii0), mi1(ii1) 
    1259                   SELECT CASE ( pout ) 
    1260                   CASE( 'V' ) 
    1261                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1262                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1263                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1264                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1265                   END SELECT 
    1266                END DO 
    1267             END DO 
    1268          END DO 
    1269       ENDIF 
    1270          !                                             ! ===================== 
    1271       IF( cp_cfg == "orca" .AND. jp_cfg == 05 ) THEN   ! ORCA R05 configuration 
    1272          !                                             ! ===================== 
    1273          ! 
    1274          ii0 = 563   ;   ii1 = 564        ! Gibraltar Strait (e2u was modified) 
    1275          ij0 = 327   ;   ij1 = 327 
    1276          DO jk = 1, jpkm1 
    1277             DO jj = mj0(ij0), mj1(ij1) 
    1278                DO ji = mi0(ii0), mi1(ii1) 
    1279                   SELECT CASE ( pout ) 
    1280                   CASE( 'U' ) 
    1281                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1282                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1283                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1284                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1285                   CASE( 'F' ) 
    1286                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1287                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1288                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1289                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1290                   END SELECT 
    1291                END DO 
    1292             END DO 
    1293          END DO 
    1294          ! 
    1295          ii0 = 627   ;   ii1 = 628        ! Bosphorus Strait (e2u was modified) 
    1296          ij0 = 343   ;   ij1 = 343 
    1297          DO jk = 1, jpkm1 
    1298             DO jj = mj0(ij0), mj1(ij1) 
    1299                DO ji = mi0(ii0), mi1(ii1) 
    1300                   SELECT CASE ( pout ) 
    1301                   CASE( 'U' ) 
    1302                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        &   
    1303                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1304                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1305                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1306                   CASE( 'F' ) 
    1307                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    &   
    1308                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1309                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1310                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1311                   END SELECT 
    1312                END DO 
    1313             END DO 
    1314          END DO 
    1315          ! 
    1316          ii0 =  93   ;   ii1 =  94        ! Sumba Strait (e2u was modified) 
    1317          ij0 = 232   ;   ij1 = 232 
    1318          DO jk = 1, jpkm1 
    1319             DO jj = mj0(ij0), mj1(ij1) 
    1320                DO ji = mi0(ii0), mi1(ii1) 
    1321                   SELECT CASE ( pout ) 
    1322                   CASE( 'U' ) 
    1323                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1324                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1325                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1326                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1327                   CASE( 'F' ) 
    1328                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1329                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1330                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1331                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1332                   END SELECT 
    1333                END DO 
    1334             END DO 
    1335          END DO 
    1336          ! 
    1337          ii0 = 103   ;   ii1 = 103        ! Ombai Strait (e2u was modified) 
    1338          ij0 = 232   ;   ij1 = 232 
    1339          DO jk = 1, jpkm1 
    1340             DO jj = mj0(ij0), mj1(ij1) 
    1341                DO ji = mi0(ii0), mi1(ii1) 
    1342                   SELECT CASE ( pout ) 
    1343                   CASE( 'U' ) 
    1344                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1345                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1346                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1347                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1348                   CASE( 'F' ) 
    1349                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1350                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1351                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1352                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1353                   END SELECT 
    1354                END DO 
    1355             END DO 
    1356          END DO 
    1357          ! 
    1358          ii0 =  15   ;   ii1 =  15        ! Palk Strait (e2u was modified) 
    1359          ij0 = 270   ;   ij1 = 270 
    1360          DO jk = 1, jpkm1 
    1361             DO jj = mj0(ij0), mj1(ij1) 
    1362                DO ji = mi0(ii0), mi1(ii1) 
    1363                   SELECT CASE ( pout ) 
    1364                   CASE( 'U' ) 
    1365                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1366                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1367                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1368                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1369                   CASE( 'F' ) 
    1370                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1371                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1372                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1373                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1374                   END SELECT 
    1375                END DO 
    1376             END DO 
    1377          END DO 
    1378          ! 
    1379          ii0 =  87   ;   ii1 =  87        ! Lombok Strait (e1v was modified) 
    1380          ij0 = 232   ;   ij1 = 233 
    1381          DO jk = 1, jpkm1 
    1382             DO jj = mj0(ij0), mj1(ij1) 
    1383                DO ji = mi0(ii0), mi1(ii1) 
    1384                   SELECT CASE ( pout ) 
    1385                   CASE( 'V' ) 
    1386                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1387                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1388                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1389                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1390                   END SELECT 
    1391                END DO 
    1392             END DO 
    1393          END DO 
    1394          ! 
    1395          ii0 = 662   ;   ii1 = 662        ! Bab el Mandeb (e1v was modified) 
    1396          ij0 = 276   ;   ij1 = 276 
    1397          DO jk = 1, jpkm1 
    1398             DO jj = mj0(ij0), mj1(ij1) 
    1399                DO ji = mi0(ii0), mi1(ii1) 
    1400                   SELECT CASE ( pout ) 
    1401                   CASE( 'V' ) 
    1402                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1403                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1404                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1405                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1406                   END SELECT 
    1407                END DO 
    1408             END DO 
    1409          END DO 
    1410       ENDIF 
    1411    END SUBROUTINE dom_vvl_orca_fix 
    14121020 
    14131021   !!====================================================================== 
    14141022END MODULE domvvl 
    1415  
    1416  
    1417  
Note: See TracChangeset for help on using the changeset viewer.