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 6225 for branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90 – NEMO

Ignore:
Timestamp:
2016-01-08T10:35:19+01:00 (8 years ago)
Author:
jamesharle
Message:

Update MPP_BDY_UPDATE branch to be consistent with head of trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90

    r4624 r6225  
    88   !!            3.3  !  2011-10  (M. Leclair) totally rewrote domvvl: 
    99   !!                                          vvl option includes z_star and z_tilde coordinates 
     10   !!            3.6  !  2014-11  (P. Mathiot) add ice shelf capability 
    1011   !!---------------------------------------------------------------------- 
    11    !!   'key_vvl'                              variable volume 
    12    !!---------------------------------------------------------------------- 
     12 
    1313   !!---------------------------------------------------------------------- 
    1414   !!   dom_vvl_init     : define initial vertical scale factors, depths and column thickness 
     
    1818   !!   dom_vvl_rst      : read/write restart file 
    1919   !!   dom_vvl_ctl      : Check the vvl options 
    20    !!   dom_vvl_orca_fix : Recompute some area-weighted interpolations of vertical scale factors  
    21    !!                    : to account for manual changes to e[1,2][u,v] in some Straits  
    2220   !!---------------------------------------------------------------------- 
    23    !! * Modules used 
    2421   USE oce             ! ocean dynamics and tracers 
     22   USE phycst          ! physical constant 
    2523   USE dom_oce         ! ocean space and time domain 
    2624   USE sbc_oce         ! ocean surface boundary condition 
     25   USE wet_dry         ! wetting and drying 
     26   USE restart         ! ocean restart 
     27   ! 
    2728   USE in_out_manager  ! I/O manager 
    2829   USE iom             ! I/O manager library 
    29    USE restart         ! ocean restart 
    3030   USE lib_mpp         ! distributed memory computing library 
    3131   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
     
    3636   PRIVATE 
    3737 
    38    !! * Routine accessibility 
    3938   PUBLIC  dom_vvl_init       ! called by domain.F90 
    4039   PUBLIC  dom_vvl_sf_nxt     ! called by step.F90 
    4140   PUBLIC  dom_vvl_sf_swp     ! called by step.F90 
    4241   PUBLIC  dom_vvl_interpol   ! called by dynnxt.F90 
    43    PRIVATE dom_vvl_orca_fix   ! called by dom_vvl_interpol 
    44  
    45    !!* Namelist nam_vvl 
    46    LOGICAL , PUBLIC                                      :: ln_vvl_zstar              ! zstar  vertical coordinate 
    47    LOGICAL , PUBLIC                                      :: ln_vvl_ztilde             ! ztilde vertical coordinate 
    48    LOGICAL , PUBLIC                                      :: ln_vvl_layer              ! level  vertical coordinate 
    49    LOGICAL , PUBLIC                                      :: ln_vvl_ztilde_as_zstar    ! ztilde vertical coordinate 
    50    LOGICAL , PUBLIC                                      :: ln_vvl_zstar_at_eqtor     ! ztilde vertical coordinate 
    51    LOGICAL , PUBLIC                                      :: ln_vvl_kepe               ! kinetic/potential energy transfer 
    52    !                                                                                           ! conservation: not used yet 
    53    REAL(wp)                                              :: rn_ahe3                   ! thickness diffusion coefficient 
    54    REAL(wp)                                              :: rn_rst_e3t                ! ztilde to zstar restoration timescale [days] 
    55    REAL(wp)                                              :: rn_lf_cutoff              ! cutoff frequency for low-pass filter  [days] 
    56    REAL(wp)                                              :: rn_zdef_max               ! maximum fractional e3t deformation 
    57    LOGICAL , PUBLIC                                      :: ln_vvl_dbg                ! debug control prints 
    58  
    59    !! * Module variables 
    60    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: un_td, vn_td                       ! thickness diffusion transport 
    61    REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hdiv_lf                            ! low frequency part of hz divergence 
    62    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tilde_e3t_b, tilde_e3t_n           ! baroclinic scale factors 
    63    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tilde_e3t_a, dtilde_e3t_a          ! baroclinic scale factors 
    64    REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:)   :: frq_rst_e3t                        ! retoring period for scale factors 
    65    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 
    6663 
    6764   !! * Substitutions 
    68 #  include "domzgr_substitute.h90" 
    6965#  include "vectopt_loop_substitute.h90" 
    7066   !!---------------------------------------------------------------------- 
    71    !! NEMO/OPA 3.3 , NEMO-Consortium (2010)  
     67   !! NEMO/OPA 3.7 , NEMO-Consortium (2015)  
    7268   !! $Id$ 
    7369   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    7470   !!---------------------------------------------------------------------- 
    75  
    7671CONTAINS 
    7772 
     
    8075      !!                ***  FUNCTION dom_vvl_alloc  *** 
    8176      !!---------------------------------------------------------------------- 
    82       IF( ln_vvl_zstar ) dom_vvl_alloc = 0 
     77      IF( ln_vvl_zstar )   dom_vvl_alloc = 0 
    8378      IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 
    8479         ALLOCATE( tilde_e3t_b(jpi,jpj,jpk)  , tilde_e3t_n(jpi,jpj,jpk) , tilde_e3t_a(jpi,jpj,jpk) ,   & 
     
    8782         IF( lk_mpp             )   CALL mpp_sum ( dom_vvl_alloc ) 
    8883         IF( dom_vvl_alloc /= 0 )   CALL ctl_warn('dom_vvl_alloc: failed to allocate arrays') 
    89          un_td = 0.0_wp 
    90          vn_td = 0.0_wp 
     84         un_td = 0._wp 
     85         vn_td = 0._wp 
    9186      ENDIF 
    9287      IF( ln_vvl_ztilde ) THEN 
     
    9590         IF( dom_vvl_alloc /= 0 )   CALL ctl_warn('dom_vvl_alloc: failed to allocate arrays') 
    9691      ENDIF 
    97  
     92      ! 
    9893   END FUNCTION dom_vvl_alloc 
    9994 
     
    109104      !!               - interpolate scale factors 
    110105      !! 
    111       !! ** Action  : - fse3t_(n/b) and tilde_e3t_(n/b) 
    112       !!              - Regrid: fse3(u/v)_n 
    113       !!                        fse3(u/v)_b        
    114       !!                        fse3w_n            
    115       !!                        fse3(u/v)w_b       
    116       !!                        fse3(u/v)w_n       
    117       !!                        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 
    118113      !!              - h(t/u/v)_0 
    119114      !!              - frq_rst_e3t and frq_rst_hdv 
     
    121116      !! Reference  : Leclair, M., and G. Madec, 2011, Ocean Modelling. 
    122117      !!---------------------------------------------------------------------- 
    123       USE phycst,  ONLY : rpi, rsmall, rad 
    124       !! * Local declarations 
    125       INTEGER ::   ji,jj,jk 
     118      INTEGER ::   ji, jj, jk 
    126119      INTEGER ::   ii0, ii1, ij0, ij1 
    127       !!---------------------------------------------------------------------- 
    128       IF( nn_timing == 1 )  CALL timing_start('dom_vvl_init') 
    129  
     120      REAL(wp)::   zcoef 
     121      !!---------------------------------------------------------------------- 
     122      ! 
     123      IF( nn_timing == 1 )   CALL timing_start('dom_vvl_init') 
     124      ! 
    130125      IF(lwp) WRITE(numout,*) 
    131126      IF(lwp) WRITE(numout,*) 'dom_vvl_init : Variable volume activated' 
    132127      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 
    133  
    134       ! choose vertical coordinate (z_star, z_tilde or layer) 
    135       ! ========================== 
    136       CALL dom_vvl_ctl 
    137  
    138       ! Allocate module arrays 
    139       ! ====================== 
     128      ! 
     129      CALL dom_vvl_ctl     ! choose vertical coordinate (z_star, z_tilde or layer) 
     130      ! 
     131      !                    ! Allocate module arrays 
    140132      IF( dom_vvl_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'dom_vvl_init : unable to allocate arrays' ) 
    141  
    142       ! Read or initialize fse3t_(b/n), tilde_e3t_(b/n) and hdiv_lf (and e3t_a(jpk)) 
    143       ! ============================================================================ 
     133      ! 
     134      !                    ! Read or initialize e3t_(b/n), tilde_e3t_(b/n) and hdiv_lf 
    144135      CALL dom_vvl_rst( nit000, 'READ' ) 
    145       fse3t_a(:,:,jpk) = e3t_0(:,:,jpk) 
    146  
    147       ! Reconstruction of all vertical scale factors at now and before time steps 
    148       ! ============================================================================= 
    149       ! Horizontal scale factor interpolations 
    150       ! -------------------------------------- 
    151       CALL dom_vvl_interpol( fse3t_b(:,:,:), fse3u_b(:,:,:), 'U' ) 
    152       CALL dom_vvl_interpol( fse3t_b(:,:,:), fse3v_b(:,:,:), 'V' ) 
    153       CALL dom_vvl_interpol( fse3t_n(:,:,:), fse3u_n(:,:,:), 'U' ) 
    154       CALL dom_vvl_interpol( fse3t_n(:,:,:), fse3v_n(:,:,:), 'V' ) 
    155       CALL dom_vvl_interpol( fse3u_n(:,:,:), fse3f_n(:,:,:), 'F' ) 
    156       ! Vertical scale factor interpolations 
    157       ! ------------------------------------ 
    158       CALL dom_vvl_interpol( fse3t_n(:,:,:), fse3w_n (:,:,:), 'W'  ) 
    159       CALL dom_vvl_interpol( fse3u_n(:,:,:), fse3uw_n(:,:,:), 'UW' ) 
    160       CALL dom_vvl_interpol( fse3v_n(:,:,:), fse3vw_n(:,:,:), 'VW' ) 
    161       CALL dom_vvl_interpol( fse3t_b(:,:,:), fse3w_b (:,:,:), 'W'  ) 
    162       CALL dom_vvl_interpol( fse3u_b(:,:,:), fse3uw_b(:,:,:), 'UW' ) 
    163       CALL dom_vvl_interpol( fse3v_b(:,:,:), fse3vw_b(:,:,:), 'VW' ) 
    164       ! t- and w- points depth 
    165       ! ---------------------- 
    166       fsdept_n(:,:,1) = 0.5_wp * fse3w_n(:,:,1) 
    167       fsdepw_n(:,:,1) = 0.0_wp 
    168       fsde3w_n(:,:,1) = fsdept_n(:,:,1) - sshn(:,:) 
    169       fsdept_b(:,:,1) = 0.5_wp * fse3w_b(:,:,1) 
    170       fsdepw_b(:,:,1) = 0.0_wp 
    171       DO jk = 2, jpk 
    172          fsdept_n(:,:,jk) = fsdept_n(:,:,jk-1) + fse3w_n(:,:,jk) 
    173          fsdepw_n(:,:,jk) = fsdepw_n(:,:,jk-1) + fse3t_n(:,:,jk-1) 
    174          fsde3w_n(:,:,jk) = fsdept_n(:,:,jk  ) - sshn   (:,:) 
    175          fsdept_b(:,:,jk) = fsdept_b(:,:,jk-1) + fse3w_b(:,:,jk) 
    176          fsdepw_b(:,:,jk) = fsdepw_b(:,:,jk-1) + fse3t_b(:,:,jk-1) 
     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 
     160         DO jj = 1,jpj 
     161            DO ji = 1,jpi 
     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))  
     174            END DO 
     175         END DO 
    177176      END DO 
    178  
    179       ! Before depth and Inverse of the local depth of the water column at u- and v- points 
    180       ! ----------------------------------------------------------------------------------- 
    181       hu_b(:,:) = 0. 
    182       hv_b(:,:) = 0. 
    183       DO jk = 1, jpkm1 
    184          hu_b(:,:) = hu_b(:,:) + fse3u_b(:,:,jk) * umask(:,:,jk) 
    185          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) 
    186190      END DO 
    187       hur_b(:,:) = umask(:,:,1) / ( hu_b(:,:) + 1. - umask(:,:,1) ) 
    188       hvr_b(:,:) = vmask(:,:,1) / ( hv_b(:,:) + 1. - vmask(:,:,1) ) 
    189  
    190       ! Restoring frequencies for z_tilde coordinate 
    191       ! ============================================ 
     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) 
    192199      IF( ln_vvl_ztilde ) THEN 
    193          ! Values in days provided via the namelist; use rsmall to avoid possible division by zero errors with faulty settings 
    194          frq_rst_e3t(:,:) = 2.0_wp * rpi / ( MAX( rn_rst_e3t  , rsmall ) * 86400.0_wp ) 
    195          frq_rst_hdv(:,:) = 2.0_wp * rpi / ( MAX( rn_lf_cutoff, rsmall ) * 86400.0_wp ) 
    196          IF( ln_vvl_ztilde_as_zstar ) THEN 
    197             ! Ignore namelist settings and use these next two to emulate z-star using z-tilde 
    198             frq_rst_e3t(:,:) = 0.0_wp  
    199             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 
    200209         ENDIF 
    201          IF ( ln_vvl_zstar_at_eqtor ) THEN 
     210         IF ( ln_vvl_zstar_at_eqtor ) THEN   ! use z-star in vicinity of the Equator 
    202211            DO jj = 1, jpj 
    203212               DO ji = 1, jpi 
     213!!gm  case |gphi| >= 6 degrees is useless   initialized just above by default 
    204214                  IF( ABS(gphit(ji,jj)) >= 6.) THEN 
    205215                     ! values outside the equatorial band and transition zone (ztilde) 
    206216                     frq_rst_e3t(ji,jj) =  2.0_wp * rpi / ( MAX( rn_rst_e3t  , rsmall ) * 86400.e0_wp ) 
    207217                     frq_rst_hdv(ji,jj) =  2.0_wp * rpi / ( MAX( rn_lf_cutoff, rsmall ) * 86400.e0_wp ) 
    208                   ELSEIF( ABS(gphit(ji,jj)) <= 2.5) THEN 
     218                  ELSEIF( ABS(gphit(ji,jj)) <= 2.5) THEN    ! Equator strip ==> z-star 
    209219                     ! values inside the equatorial band (ztilde as zstar) 
    210220                     frq_rst_e3t(ji,jj) =  0.0_wp 
    211221                     frq_rst_hdv(ji,jj) =  1.0_wp / rdt 
    212                   ELSE 
    213                      ! 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) 
    214224                     frq_rst_e3t(ji,jj) = 0.0_wp + (frq_rst_e3t(ji,jj)-0.0_wp)*0.5_wp   & 
    215225                        &            * (  1.0_wp - COS( rad*(ABS(gphit(ji,jj))-2.5_wp)  & 
     
    222232               END DO 
    223233            END DO 
    224             IF( cp_cfg == "orca" .AND. jp_cfg == 3 ) THEN 
    225                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        
    226236               ij0 = 128   ;   ij1 = 135   ;    
    227237               frq_rst_e3t( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) =  0.0_wp 
     
    230240         ENDIF 
    231241      ENDIF 
    232  
     242      ! 
    233243      IF( nn_timing == 1 )  CALL timing_stop('dom_vvl_init') 
    234  
     244      ! 
    235245   END SUBROUTINE dom_vvl_init 
    236246 
     
    254264      !!               - tilde_e3t_a: after increment of vertical scale factor  
    255265      !!                              in z_tilde case 
    256       !!               - fse3(t/u/v)_a 
     266      !!               - e3(t/u/v)_a 
    257267      !! 
    258268      !! Reference  : Leclair, M., and Madec, G. 2011, Ocean Modelling. 
    259269      !!---------------------------------------------------------------------- 
    260       REAL(wp), POINTER, DIMENSION(:,:,:) :: ze3t 
    261       REAL(wp), POINTER, DIMENSION(:,:  ) :: zht, z_scale, zwu, zwv, zhdiv 
    262       !! * Arguments 
    263       INTEGER, INTENT( in )                  :: kt                    ! time step 
    264       INTEGER, INTENT( in ), OPTIONAL        :: kcall                 ! optional argument indicating call sequence 
    265       !! * Local declarations 
    266       INTEGER                                :: ji, jj, jk            ! dummy loop indices 
    267       INTEGER , DIMENSION(3)                 :: ijk_max, ijk_min      ! temporary integers 
    268       REAL(wp)                               :: z2dt                  ! temporary scalars 
    269       REAL(wp)                               :: z_tmin, z_tmax        ! temporary scalars 
    270       LOGICAL                                :: ll_do_bclinic         ! temporary logical 
    271       !!---------------------------------------------------------------------- 
    272       IF( nn_timing == 1 )  CALL timing_start('dom_vvl_sf_nxt') 
    273       CALL wrk_alloc( jpi, jpj, zht, z_scale, zwu, zwv, zhdiv ) 
    274       CALL wrk_alloc( jpi, jpj, jpk, ze3t                     ) 
    275  
    276       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 
    277289         IF(lwp) WRITE(numout,*) 
    278290         IF(lwp) WRITE(numout,*) 'dom_vvl_sf_nxt : compute after scale factors' 
     
    282294      ll_do_bclinic = .TRUE. 
    283295      IF( PRESENT(kcall) ) THEN 
    284          IF ( kcall == 2 .AND. ln_vvl_ztilde ) ll_do_bclinic = .FALSE. 
     296         IF( kcall == 2 .AND. ln_vvl_ztilde )  ll_do_bclinic = .FALSE. 
    285297      ENDIF 
    286298 
     
    288300      ! After acale factors at t-points ! 
    289301      ! ******************************* ! 
    290  
    291302      !                                                ! --------------------------------------------- ! 
    292                                                        ! z_star coordinate and barotropic z-tilde part ! 
     303      !                                                ! z_star coordinate and barotropic z-tilde part ! 
    293304      !                                                ! --------------------------------------------- ! 
    294  
    295       z_scale(:,:) = ( ssha(:,:) - sshb(:,:) ) * tmask(:,:,1) / ( ht_0(:,:) + sshn(:,:) + 1. - tmask(:,:,1) ) 
     305      ! 
     306      z_scale(:,:) = ( ssha(:,:) - sshb(:,:) ) * ssmask(:,:) / ( ht_0(:,:) + sshn(:,:) + 1. - ssmask(:,:) ) 
    296307      DO jk = 1, jpkm1 
    297          ! formally this is the same as fse3t_a = e3t_0*(1+ssha/ht_0) 
    298          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) 
    299310      END DO 
    300  
     311      ! 
    301312      IF( ln_vvl_ztilde .OR. ln_vvl_layer .AND. ll_do_bclinic ) THEN   ! z_tilde or layer coordinate ! 
    302313         !                                                            ! ------baroclinic part------ ! 
    303  
    304314         ! I - initialization 
    305315         ! ================== 
     
    307317         ! 1 - barotropic divergence 
    308318         ! ------------------------- 
    309          zhdiv(:,:) = 0. 
    310          zht(:,:)   = 0. 
     319         zhdiv(:,:) = 0._wp 
     320         zht(:,:)   = 0._wp 
    311321         DO jk = 1, jpkm1 
    312             zhdiv(:,:) = zhdiv(:,:) + fse3t_n(:,:,jk) * hdivn(:,:,jk) 
    313             zht  (:,:) = zht  (:,:) + fse3t_n(:,:,jk) * tmask(:,:,jk) 
    314          END DO 
    315          zhdiv(:,:) = zhdiv(:,:) / ( zht(:,:) + 1. - tmask(:,:,1) ) 
     322            zhdiv(:,:) = zhdiv(:,:) + e3t_n(:,:,jk) * hdivn(:,:,jk) 
     323            zht  (:,:) = zht  (:,:) + e3t_n(:,:,jk) * tmask(:,:,jk) 
     324         END DO 
     325         zhdiv(:,:) = zhdiv(:,:) / ( zht(:,:) + 1. - tmask_i(:,:) ) 
    316326 
    317327         ! 2 - Low frequency baroclinic horizontal divergence  (z-tilde case only) 
    318328         ! -------------------------------------------------- 
    319329         IF( ln_vvl_ztilde ) THEN 
    320             IF( kt .GT. nit000 ) THEN 
     330            IF( kt > nit000 ) THEN 
    321331               DO jk = 1, jpkm1 
    322332                  hdiv_lf(:,:,jk) = hdiv_lf(:,:,jk) - rdt * frq_rst_hdv(:,:)   & 
    323                      &          * ( hdiv_lf(:,:,jk) - fse3t_n(:,:,jk) * ( hdivn(:,:,jk) - zhdiv(:,:) ) ) 
     333                     &          * ( hdiv_lf(:,:,jk) - e3t_n(:,:,jk) * ( hdivn(:,:,jk) - zhdiv(:,:) ) ) 
    324334               END DO 
    325335            ENDIF 
    326          END IF 
     336         ENDIF 
    327337 
    328338         ! II - after z_tilde increments of vertical scale factors 
    329339         ! ======================================================= 
    330          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 
    331341 
    332342         ! 1 - High frequency divergence term 
     
    334344         IF( ln_vvl_ztilde ) THEN     ! z_tilde case 
    335345            DO jk = 1, jpkm1 
    336                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) ) 
    337347            END DO 
    338348         ELSE                         ! layer case 
    339349            DO jk = 1, jpkm1 
    340                tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) -   fse3t_n(:,:,jk) * ( hdivn(:,:,jk) - zhdiv(:,:) ) 
    341             END DO 
    342          END IF 
     350               tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) -   e3t_n(:,:,jk) * ( hdivn(:,:,jk) - zhdiv(:,:) ) * tmask(:,:,jk) 
     351            END DO 
     352         ENDIF 
    343353 
    344354         ! 2 - Restoring term (z-tilde case only) 
     
    348358               tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) - frq_rst_e3t(:,:) * tilde_e3t_b(:,:,jk) 
    349359            END DO 
    350          END IF 
     360         ENDIF 
    351361 
    352362         ! 3 - Thickness diffusion term 
    353363         ! ---------------------------- 
    354          zwu(:,:) = 0.0_wp 
    355          zwv(:,:) = 0.0_wp 
    356          ! a - first derivative: diffusive fluxes 
    357          DO jk = 1, jpkm1 
     364         zwu(:,:) = 0._wp 
     365         zwv(:,:) = 0._wp 
     366         DO jk = 1, jpkm1        ! a - first derivative: diffusive fluxes 
    358367            DO jj = 1, jpjm1 
    359368               DO ji = 1, fs_jpim1   ! vector opt. 
    360                   un_td(ji,jj,jk) = rn_ahe3 * umask(ji,jj,jk) * re2u_e1u(ji,jj) & 
    361                                   & * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji+1,jj  ,jk) ) 
    362                   vn_td(ji,jj,jk) = rn_ahe3 * vmask(ji,jj,jk) * re1v_e2v(ji,jj) &  
    363                                   & * ( 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) ) 
    364373                  zwu(ji,jj) = zwu(ji,jj) + un_td(ji,jj,jk) 
    365374                  zwv(ji,jj) = zwv(ji,jj) + vn_td(ji,jj,jk) 
     
    367376            END DO 
    368377         END DO 
    369          ! b - correction for last oceanic u-v points 
    370          DO jj = 1, jpj 
     378         DO jj = 1, jpj          ! b - correction for last oceanic u-v points 
    371379            DO ji = 1, jpi 
    372380               un_td(ji,jj,mbku(ji,jj)) = un_td(ji,jj,mbku(ji,jj)) - zwu(ji,jj) 
     
    374382            END DO 
    375383         END DO 
    376          ! c - second derivative: divergence of diffusive fluxes 
    377          DO jk = 1, jpkm1 
     384         DO jk = 1, jpkm1        ! c - second derivative: divergence of diffusive fluxes 
    378385            DO jj = 2, jpjm1 
    379386               DO ji = fs_2, fs_jpim1   ! vector opt. 
    380387                  tilde_e3t_a(ji,jj,jk) = tilde_e3t_a(ji,jj,jk) + (   un_td(ji-1,jj  ,jk) - un_td(ji,jj,jk)    & 
    381388                     &                                          +     vn_td(ji  ,jj-1,jk) - vn_td(ji,jj,jk)    & 
    382                      &                                            ) * r1_e12t(ji,jj) 
     389                     &                                            ) * r1_e1e2t(ji,jj) 
    383390               END DO 
    384391            END DO 
    385392         END DO 
    386          ! d - thickness diffusion transport: boundary conditions 
    387          !     (stored for tracer advction and continuity equation) 
    388          CALL lbc_lnk( un_td , 'U' , -1.) 
    389          CALL lbc_lnk( vn_td , 'V' , -1.) 
     393         !                       ! d - thickness diffusion transport: boundary conditions 
     394         !                             (stored for tracer advction and continuity equation) 
     395         CALL lbc_lnk( un_td , 'U' , -1._wp) 
     396         CALL lbc_lnk( vn_td , 'V' , -1._wp) 
    390397 
    391398         ! 4 - Time stepping of baroclinic scale factors 
     
    398405            z2dt = 2.0_wp * rdt 
    399406         ENDIF 
    400          CALL lbc_lnk( tilde_e3t_a(:,:,:), 'T', 1. ) 
     407         CALL lbc_lnk( tilde_e3t_a(:,:,:), 'T', 1._wp ) 
    401408         tilde_e3t_a(:,:,:) = tilde_e3t_b(:,:,:) + z2dt * tmask(:,:,:) * tilde_e3t_a(:,:,:) 
    402409 
    403410         ! Maximum deformation control 
    404411         ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    405          ze3t(:,:,jpk) = 0.0_wp 
     412         ze3t(:,:,jpk) = 0._wp 
    406413         DO jk = 1, jpkm1 
    407414            ze3t(:,:,jk) = tilde_e3t_a(:,:,jk) / e3t_0(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) 
     
    412419         IF( lk_mpp )   CALL mpp_min( z_tmin )                 ! min over the global domain 
    413420         ! - ML - test: for the moment, stop simulation for too large e3_t variations 
    414          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 
    415422            IF( lk_mpp ) THEN 
    416423               CALL mpp_maxloc( ze3t, tmask, z_tmax, ijk_max(1), ijk_max(2), ijk_max(3) ) 
     
    453460            zht(:,:)  = zht(:,:) + tilde_e3t_a(:,:,jk) * tmask(:,:,jk) 
    454461         END DO 
    455          z_scale(:,:) =  - zht(:,:) / ( ht_0(:,:) + sshn(:,:) + 1. - tmask(:,:,1) ) 
     462         z_scale(:,:) =  - zht(:,:) / ( ht_0(:,:) + sshn(:,:) + 1. - ssmask(:,:) ) 
    456463         DO jk = 1, jpkm1 
    457             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) 
    458465         END DO 
    459466 
     
    463470      !                                           ! ---baroclinic part--------- ! 
    464471         DO jk = 1, jpkm1 
    465             fse3t_a(:,:,jk) = fse3t_a(:,:,jk) + dtilde_e3t_a(:,:,jk) 
     472            e3t_a(:,:,jk) = e3t_a(:,:,jk) + dtilde_e3t_a(:,:,jk) * tmask(:,:,jk) 
    466473         END DO 
    467474      ENDIF 
     
    478485         zht(:,:) = 0.0_wp 
    479486         DO jk = 1, jpkm1 
    480             zht(:,:) = zht(:,:) + fse3t_n(:,:,jk) * tmask(:,:,jk) 
     487            zht(:,:) = zht(:,:) + e3t_n(:,:,jk) * tmask(:,:,jk) 
    481488         END DO 
    482489         z_tmax = MAXVAL( tmask(:,:,1) * tmask_i(:,:) * ABS( ht_0(:,:) + sshn(:,:) - zht(:,:) ) ) 
    483490         IF( lk_mpp ) CALL mpp_max( z_tmax )                                ! max over the global domain 
    484          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 
    485492         ! 
    486493         zht(:,:) = 0.0_wp 
    487494         DO jk = 1, jpkm1 
    488             zht(:,:) = zht(:,:) + fse3t_a(:,:,jk) * tmask(:,:,jk) 
     495            zht(:,:) = zht(:,:) + e3t_a(:,:,jk) * tmask(:,:,jk) 
    489496         END DO 
    490497         z_tmax = MAXVAL( tmask(:,:,1) * tmask_i(:,:) * ABS( ht_0(:,:) + ssha(:,:) - zht(:,:) ) ) 
    491498         IF( lk_mpp ) CALL mpp_max( z_tmax )                                ! max over the global domain 
    492          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 
    493500         ! 
    494501         zht(:,:) = 0.0_wp 
    495502         DO jk = 1, jpkm1 
    496             zht(:,:) = zht(:,:) + fse3t_b(:,:,jk) * tmask(:,:,jk) 
     503            zht(:,:) = zht(:,:) + e3t_b(:,:,jk) * tmask(:,:,jk) 
    497504         END DO 
    498505         z_tmax = MAXVAL( tmask(:,:,1) * tmask_i(:,:) * ABS( ht_0(:,:) + sshb(:,:) - zht(:,:) ) ) 
    499506         IF( lk_mpp ) CALL mpp_max( z_tmax )                                ! max over the global domain 
    500          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 
    501508         ! 
    502509         z_tmax = MAXVAL( tmask(:,:,1) *  ABS( sshb(:,:) ) ) 
     
    517524      ! *********************************** ! 
    518525 
    519       CALL dom_vvl_interpol( fse3t_a(:,:,:), fse3u_a(:,:,:), 'U' ) 
    520       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' ) 
    521528 
    522529      ! *********************************** ! 
     
    524531      ! *********************************** ! 
    525532 
    526       hu_a(:,:) = 0._wp                        ! Ocean depth at U-points 
    527       hv_a(:,:) = 0._wp                        ! Ocean depth at V-points 
    528       DO jk = 1, jpkm1 
    529          hu_a(:,:) = hu_a(:,:) + fse3u_a(:,:,jk) * umask(:,:,jk) 
    530          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) 
    531538      END DO 
    532539      !                                        ! Inverse of the local depth 
    533       hur_a(:,:) = 1._wp / ( hu_a(:,:) + 1._wp - umask(:,:,1) ) * umask(:,:,1) 
    534       hvr_a(:,:) = 1._wp / ( hv_a(:,:) + 1._wp - vmask(:,:,1) ) * vmask(:,:,1) 
    535  
    536       CALL wrk_dealloc( jpi, jpj, zht, z_scale, zwu, zwv, zhdiv ) 
    537       CALL wrk_dealloc( jpi, jpj, jpk, ze3t                     ) 
    538  
     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      ! 
    539547      IF( nn_timing == 1 )  CALL timing_stop('dom_vvl_sf_nxt') 
    540  
     548      ! 
    541549   END SUBROUTINE dom_vvl_sf_nxt 
    542550 
     
    554562      !!               - recompute depths and water height fields 
    555563      !! 
    556       !! ** 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 
    557565      !!               - Recompute: 
    558       !!                    fse3(u/v)_b        
    559       !!                    fse3w_n            
    560       !!                    fse3(u/v)w_b       
    561       !!                    fse3(u/v)w_n       
    562       !!                    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 
    563571      !!                    h(u/v) and h(u/v)r 
    564572      !! 
     
    566574      !!              Leclair, M., and G. Madec, 2011, Ocean Modelling. 
    567575      !!---------------------------------------------------------------------- 
    568       !! * Arguments 
    569       INTEGER, INTENT( in )               :: kt       ! time step 
    570       !! * Local declarations 
    571       REAL(wp), POINTER, DIMENSION(:,:,:) :: z_e3t_def 
    572       INTEGER                             :: jk       ! dummy loop indices 
    573       !!---------------------------------------------------------------------- 
    574  
     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      ! 
    575584      IF( nn_timing == 1 )  CALL timing_start('dom_vvl_sf_swp') 
    576       ! 
    577       CALL wrk_alloc( jpi, jpj, jpk, z_e3t_def                ) 
    578585      ! 
    579586      IF( kt == nit000 )   THEN 
     
    585592      ! Time filter and swap of scale factors 
    586593      ! ===================================== 
    587       ! - ML - fse3(t/u/v)_b are allready computed in dynnxt. 
     594      ! - ML - e3(t/u/v)_b are allready computed in dynnxt. 
    588595      IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 
    589596         IF( neuler == 0 .AND. kt == nit000 ) THEN 
     
    595602         tilde_e3t_n(:,:,:) = tilde_e3t_a(:,:,:) 
    596603      ENDIF 
    597       fsdept_b(:,:,:) = fsdept_n(:,:,:) 
    598       fsdepw_b(:,:,:) = fsdepw_n(:,:,:) 
    599  
    600       fse3t_n(:,:,:) = fse3t_a(:,:,:) 
    601       fse3u_n(:,:,:) = fse3u_a(:,:,:) 
    602       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(:,:,:) 
    603610 
    604611      ! Compute all missing vertical scale factor and depths 
     
    606613      ! Horizontal scale factor interpolations 
    607614      ! -------------------------------------- 
    608       ! - ML - fse3u_b and fse3v_b are allready computed in dynnxt 
     615      ! - ML - e3u_b and e3v_b are allready computed in dynnxt 
    609616      ! - JC - hu_b, hv_b, hur_b, hvr_b also 
    610       CALL dom_vvl_interpol( fse3u_n(:,:,:), fse3f_n (:,:,:), 'F'  ) 
     617       
     618      CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:), 'F'  ) 
     619       
    611620      ! Vertical scale factor interpolations 
    612       ! ------------------------------------ 
    613       CALL dom_vvl_interpol( fse3t_n(:,:,:), fse3w_n (:,:,:), 'W'  ) 
    614       CALL dom_vvl_interpol( fse3u_n(:,:,:), fse3uw_n(:,:,:), 'UW' ) 
    615       CALL dom_vvl_interpol( fse3v_n(:,:,:), fse3vw_n(:,:,:), 'VW' ) 
    616       CALL dom_vvl_interpol( fse3t_b(:,:,:), fse3w_b (:,:,:), 'W'  ) 
    617       CALL dom_vvl_interpol( fse3u_b(:,:,:), fse3uw_b(:,:,:), 'UW' ) 
    618       CALL dom_vvl_interpol( fse3v_b(:,:,:), fse3vw_b(:,:,:), 'VW' ) 
    619       ! t- and w- points depth 
    620       ! ---------------------- 
    621       fsdept_n(:,:,1) = 0.5_wp * fse3w_n(:,:,1) 
    622       fsdepw_n(:,:,1) = 0.0_wp 
    623       fsde3w_n(:,:,1) = fsdept_n(:,:,1) - sshn(:,:) 
     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(:,:) 
    624632      DO jk = 2, jpk 
    625          fsdept_n(:,:,jk) = fsdept_n(:,:,jk-1) + fse3w_n(:,:,jk) 
    626          fsdepw_n(:,:,jk) = fsdepw_n(:,:,jk-1) + fse3t_n(:,:,jk-1) 
    627          fsde3w_n(:,:,jk) = fsdept_n(:,:,jk  ) - sshn   (:,:) 
     633         DO jj = 1,jpj 
     634            DO ji = 1,jpi 
     635              !    zcoef = (tmask(ji,jj,jk) - wmask(ji,jj,jk))   ! 0 everywhere tmask = wmask, ie everywhere expect at jk = mikt 
     636                                                                 ! 1 for jk = mikt 
     637               zcoef = (tmask(ji,jj,jk) - wmask(ji,jj,jk)) 
     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) 
     642            END DO 
     643         END DO 
    628644      END DO 
    629       ! Local depth and Inverse of the local depth of the water column at u- and v- points 
    630       ! ---------------------------------------------------------------------------------- 
    631       hu (:,:) = hu_a (:,:) 
    632       hv (:,:) = hv_a (:,:) 
    633  
    634       ! Inverse of the local depth 
    635       hur(:,:) = hur_a(:,:) 
    636       hvr(:,:) = hvr_a(:,:) 
    637  
    638       ! Local depth of the water column at t- points 
    639       ! -------------------------------------------- 
    640       ht(:,:) = 0. 
    641       DO jk = 1, jpkm1 
    642          ht(:,:) = ht(:,:) + fse3t_n(:,:,jk) * tmask(:,:,jk) 
     645 
     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) 
    643654      END DO 
    644655 
    645656      ! Write outputs 
    646657      ! ============= 
    647       z_e3t_def(:,:,:) = ( ( fse3t_n(:,:,:) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100 * tmask(:,:,:) ) ** 2 
    648       CALL iom_put( "cellthc" , fse3t_n  (:,:,:) ) 
    649       CALL iom_put( "tpt_dep" , fsde3w_n (:,:,:) ) 
    650       CALL iom_put( "e3tdef"  , z_e3t_def(:,:,:) ) 
     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(:,:,:) ) 
     663      IF( iom_use("e3tdef") )   & 
     664         CALL iom_put( "e3tdef", ( ( e3t_n(:,:,:) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100. * tmask(:,:,:) ) ** 2 ) 
    651665 
    652666      ! write restart file 
    653667      ! ================== 
    654       IF( lrst_oce ) CALL dom_vvl_rst( kt, 'WRITE' ) 
    655       ! 
    656       CALL wrk_dealloc( jpi, jpj, jpk, z_e3t_def ) 
    657       ! 
    658       IF( nn_timing == 1 )  CALL timing_stop('dom_vvl_sf_swp') 
    659  
     668      IF( lrst_oce )   CALL dom_vvl_rst( kt, 'WRITE' ) 
     669      ! 
     670      IF( nn_timing == 1 )   CALL timing_stop('dom_vvl_sf_swp') 
     671      ! 
    660672   END SUBROUTINE dom_vvl_sf_swp 
    661673 
     
    671683      !!                - vertical interpolation: simple averaging 
    672684      !!---------------------------------------------------------------------- 
    673       !! * Arguments 
    674       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( in    ) ::  pe3_in     ! input e3 to be interpolated 
    675       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) ::  pe3_out    ! output interpolated e3 
    676       CHARACTER(LEN=*), INTENT( in )                    ::  pout       ! grid point of out scale factors 
    677       !                                                                !   =  'U', 'V', 'W, 'F', 'UW' or 'VW' 
    678       !! * Local declarations 
    679       INTEGER ::   ji, jj, jk                                          ! dummy loop indices 
    680       LOGICAL ::   l_is_orca                                           ! local logical 
    681       !!---------------------------------------------------------------------- 
    682       IF( nn_timing == 1 )  CALL timing_start('dom_vvl_interpol') 
    683          ! 
    684       l_is_orca = .FALSE. 
    685       IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) l_is_orca = .TRUE.      ! ORCA R2 configuration - will need to correct some locations 
    686  
    687       SELECT CASE ( pout ) 
    688          !               ! ------------------------------------- ! 
    689       CASE( 'U' )        ! interpolation from T-point to U-point ! 
    690          !               ! ------------------------------------- ! 
    691          ! 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 
    692705         DO jk = 1, jpk 
    693706            DO jj = 1, jpjm1 
    694707               DO ji = 1, fs_jpim1   ! vector opt. 
    695                   pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * r1_e12u(ji,jj)                                   & 
    696                      &                       * (   e12t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) )     & 
    697                      &                           + 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) ) ) 
    698711               END DO 
    699712            END DO 
    700713         END DO 
    701          ! 
    702          IF( l_is_orca ) CALL dom_vvl_orca_fix( pe3_in, pe3_out, pout ) 
    703          ! boundary conditions 
    704          CALL lbc_lnk( pe3_out(:,:,:), 'U', 1. ) 
     714         CALL lbc_lnk( pe3_out(:,:,:), 'U', 1._wp ) 
    705715         pe3_out(:,:,:) = pe3_out(:,:,:) + e3u_0(:,:,:) 
    706          !               ! ------------------------------------- ! 
    707       CASE( 'V' )        ! interpolation from T-point to V-point ! 
    708          !               ! ------------------------------------- ! 
    709          ! horizontal surface weighted interpolation 
     716         ! 
     717      CASE( 'V' )                   !* from T- to V-point : hor. surface weighted mean 
    710718         DO jk = 1, jpk 
    711719            DO jj = 1, jpjm1 
    712720               DO ji = 1, fs_jpim1   ! vector opt. 
    713                   pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk) * r1_e12v(ji,jj)                                   & 
    714                      &                       * (   e12t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) )     & 
    715                      &                           + 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) ) ) 
    716724               END DO 
    717725            END DO 
    718726         END DO 
    719          ! 
    720          IF( l_is_orca ) CALL dom_vvl_orca_fix( pe3_in, pe3_out, pout ) 
    721          ! boundary conditions 
    722          CALL lbc_lnk( pe3_out(:,:,:), 'V', 1. ) 
     727         CALL lbc_lnk( pe3_out(:,:,:), 'V', 1._wp ) 
    723728         pe3_out(:,:,:) = pe3_out(:,:,:) + e3v_0(:,:,:) 
    724          !               ! ------------------------------------- ! 
    725       CASE( 'F' )        ! interpolation from U-point to F-point ! 
    726          !               ! ------------------------------------- ! 
    727          ! horizontal surface weighted interpolation 
     729         ! 
     730      CASE( 'F' )                   !* from U-point to F-point : hor. surface weighted mean 
    728731         DO jk = 1, jpk 
    729732            DO jj = 1, jpjm1 
    730733               DO ji = 1, fs_jpim1   ! vector opt. 
    731                   pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk) * r1_e12f(ji,jj)               & 
    732                      &                       * (   e12u(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3u_0(ji,jj  ,jk) )     & 
    733                      &                           + 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) ) ) 
    734738               END DO 
    735739            END DO 
    736740         END DO 
    737          ! 
    738          IF( l_is_orca ) CALL dom_vvl_orca_fix( pe3_in, pe3_out, pout ) 
    739          ! boundary conditions 
    740          CALL lbc_lnk( pe3_out(:,:,:), 'F', 1. ) 
     741         CALL lbc_lnk( pe3_out(:,:,:), 'F', 1._wp ) 
    741742         pe3_out(:,:,:) = pe3_out(:,:,:) + e3f_0(:,:,:) 
    742          !               ! ------------------------------------- ! 
    743       CASE( 'W' )        ! interpolation from T-point to W-point ! 
    744          !               ! ------------------------------------- ! 
    745          ! vertical simple interpolation 
     743         ! 
     744      CASE( 'W' )                   !* from T- to W-point : vertical simple mean 
     745         ! 
    746746         pe3_out(:,:,1) = e3w_0(:,:,1) + pe3_in(:,:,1) - e3t_0(:,:,1) 
    747          ! - 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 
    748749         DO jk = 2, jpk 
    749             pe3_out(:,:,jk) = e3w_0(:,:,jk) + ( 1.0_wp - 0.5_wp * tmask(:,:,jk) ) * ( pe3_in(:,:,jk-1) - e3t_0(:,:,jk-1) )   & 
    750                &                            +            0.5_wp * tmask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3t_0(:,:,jk  ) ) 
    751          END DO 
    752          !               ! -------------------------------------- ! 
    753       CASE( 'UW' )       ! interpolation from U-point to UW-point ! 
    754          !               ! -------------------------------------- ! 
    755          ! 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         ! 
    756758         pe3_out(:,:,1) = e3uw_0(:,:,1) + pe3_in(:,:,1) - e3u_0(:,:,1) 
    757759         ! - 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 
    758761         DO jk = 2, jpk 
    759             pe3_out(:,:,jk) = e3uw_0(:,:,jk) + ( 1.0_wp - 0.5_wp * umask(:,:,jk) ) * ( pe3_in(:,:,jk-1) - e3u_0(:,:,jk-1) )   & 
    760                &                             +            0.5_wp * umask(:,:,jk)   * ( pe3_in(:,:,jk  ) - e3u_0(:,:,jk  ) ) 
    761          END DO 
    762          !               ! -------------------------------------- ! 
    763       CASE( 'VW' )       ! interpolation from V-point to VW-point ! 
    764          !               ! -------------------------------------- ! 
    765          ! 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         ! 
    766770         pe3_out(:,:,1) = e3vw_0(:,:,1) + pe3_in(:,:,1) - e3v_0(:,:,1) 
    767771         ! - 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 
    768773         DO jk = 2, jpk 
    769             pe3_out(:,:,jk) = e3vw_0(:,:,jk) + ( 1.0_wp - 0.5_wp * vmask(:,:,jk) ) * ( pe3_in(:,:,jk-1) - e3v_0(:,:,jk-1) )   & 
    770                &                             +            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  ) ) 
    771778         END DO 
    772779      END SELECT 
    773780      ! 
    774  
    775       IF( nn_timing == 1 )  CALL timing_stop('dom_vvl_interpol') 
    776  
     781      IF( nn_timing == 1 )   CALL timing_stop('dom_vvl_interpol') 
     782      ! 
    777783   END SUBROUTINE dom_vvl_interpol 
     784 
    778785 
    779786   SUBROUTINE dom_vvl_rst( kt, cdrw ) 
     
    789796      !!                they are set to 0. 
    790797      !!---------------------------------------------------------------------- 
    791       !! * Arguments 
    792798      INTEGER         , INTENT(in) ::   kt     ! ocean time-step 
    793799      CHARACTER(len=*), INTENT(in) ::   cdrw   ! "READ"/"WRITE" flag 
    794       !! * Local declarations 
    795       INTEGER ::   jk 
     800      ! 
     801      INTEGER ::   ji, jj, jk 
    796802      INTEGER ::   id1, id2, id3, id4, id5     ! local integers 
    797803      !!---------------------------------------------------------------------- 
     
    804810            CALL iom_get( numror, jpdom_autoglo, 'sshn'   , sshn    ) 
    805811            ! 
    806             id1 = iom_varid( numror, 'fse3t_b', ldstop = .FALSE. ) 
    807             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. ) 
    808814            id3 = iom_varid( numror, 'tilde_e3t_b', ldstop = .FALSE. ) 
    809815            id4 = iom_varid( numror, 'tilde_e3t_n', ldstop = .FALSE. ) 
    810             id5 = iom_varid( numror, 'hdif_lf', ldstop = .FALSE. ) 
     816            id5 = iom_varid( numror, 'hdiv_lf', ldstop = .FALSE. ) 
    811817            !                             ! --------- ! 
    812818            !                             ! all cases ! 
    813819            !                             ! --------- ! 
    814820            IF( MIN( id1, id2 ) > 0 ) THEN       ! all required arrays exist 
    815                CALL iom_get( numror, jpdom_autoglo, 'fse3t_b', fse3t_b(:,:,:) ) 
    816                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(:,:,:) ) 
     823               ! needed to restart if land processor not computed  
     824               IF(lwp) write(numout,*) 'dom_vvl_rst : e3t_b and e3t_n found in restart files' 
     825               WHERE ( tmask(:,:,:) == 0.0_wp )  
     826                  e3t_n(:,:,:) = e3t_0(:,:,:) 
     827                  e3t_b(:,:,:) = e3t_0(:,:,:) 
     828               END WHERE 
    817829               IF( neuler == 0 ) THEN 
    818                   fse3t_b(:,:,:) = fse3t_n(:,:,:) 
     830                  e3t_b(:,:,:) = e3t_n(:,:,:) 
    819831               ENDIF 
    820832            ELSE IF( id1 > 0 ) THEN 
    821                IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : fse3t_b not found in restart files' 
    822                IF(lwp) write(numout,*) 'fse3t_b set equal to fse3t_n.' 
     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.' 
    823835               IF(lwp) write(numout,*) 'neuler is forced to 0' 
    824                fse3t_b(:,:,:) = fse3t_n(:,:,:) 
     836               CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t_b(:,:,:) ) 
     837               e3t_n(:,:,:) = e3t_b(:,:,:) 
     838               neuler = 0 
     839            ELSE IF( id2 > 0 ) THEN 
     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.' 
     842               IF(lwp) write(numout,*) 'neuler is forced to 0' 
     843               CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t_n(:,:,:) ) 
     844               e3t_b(:,:,:) = e3t_n(:,:,:) 
    825845               neuler = 0 
    826846            ELSE 
    827                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' 
    828848               IF(lwp) write(numout,*) 'Compute scale factor from sshn' 
    829849               IF(lwp) write(numout,*) 'neuler is forced to 0' 
    830                DO jk=1,jpk 
    831                   fse3t_n(:,:,jk) =  e3t_0(:,:,jk) * ( ht_0(:,:) + sshn(:,:) ) & 
    832                       &                            / ( ht_0(:,:) + 1._wp - tmask(:,:,1) ) * tmask(:,:,jk) & 
    833                       &            + 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)) 
    834854               END DO 
    835                fse3t_b(:,:,:) = fse3t_n(:,:,:) 
     855               e3t_b(:,:,:) = e3t_n(:,:,:) 
    836856               neuler = 0 
    837857            ENDIF 
     
    864884            ! 
    865885         ELSE                                   !* Initialize at "rest" 
    866             fse3t_b(:,:,:) = e3t_0(:,:,:) 
    867             fse3t_n(:,:,:) = e3t_0(:,:,:) 
     886            e3t_b(:,:,:) = e3t_0(:,:,:) 
     887            e3t_n(:,:,:) = e3t_0(:,:,:) 
    868888            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 
    869905            IF( ln_vvl_ztilde .OR. ln_vvl_layer) THEN 
    870906               tilde_e3t_b(:,:,:) = 0.0_wp 
     
    873909            END IF 
    874910         ENDIF 
    875  
     911         ! 
    876912      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN   ! Create restart file 
    877913         !                                   ! =================== 
     
    880916         !                                           ! all cases ! 
    881917         !                                           ! --------- ! 
    882          CALL iom_rstput( kt, nitrst, numrow, 'fse3t_b', fse3t_b(:,:,:) ) 
    883          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(:,:,:) ) 
    884920         !                                           ! ----------------------- ! 
    885921         IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN  ! z_tilde and layer cases ! 
     
    893929            CALL iom_rstput( kt, nitrst, numrow, 'hdiv_lf', hdiv_lf(:,:,:) ) 
    894930         ENDIF 
    895  
    896       ENDIF 
     931         ! 
     932      ENDIF 
     933      ! 
    897934      IF( nn_timing == 1 )  CALL timing_stop('dom_vvl_rst') 
    898  
     935      ! 
    899936   END SUBROUTINE dom_vvl_rst 
    900937 
     
    907944      !!                for vertical coordinate 
    908945      !!---------------------------------------------------------------------- 
    909       INTEGER ::   ioptio 
    910       INTEGER ::   ios 
    911  
     946      INTEGER ::   ioptio, ios 
     947      !! 
    912948      NAMELIST/nam_vvl/ ln_vvl_zstar, ln_vvl_ztilde, ln_vvl_layer, ln_vvl_ztilde_as_zstar, & 
    913                       & ln_vvl_zstar_at_eqtor      , rn_ahe3     , rn_rst_e3t            , & 
    914                       & 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 
    915951      !!----------------------------------------------------------------------  
    916  
     952      ! 
    917953      REWIND( numnam_ref )              ! Namelist nam_vvl in reference namelist :  
    918954      READ  ( numnam_ref, nam_vvl, IOSTAT = ios, ERR = 901) 
    919955901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_vvl in reference namelist', lwp ) 
    920  
     956      ! 
    921957      REWIND( numnam_cfg )              ! Namelist nam_vvl in configuration namelist : Parameters of the run 
    922958      READ  ( numnam_cfg, nam_vvl, IOSTAT = ios, ERR = 902 ) 
    923959902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_vvl in configuration namelist', lwp ) 
    924960      IF(lwm) WRITE ( numond, nam_vvl ) 
    925  
     961      ! 
    926962      IF(lwp) THEN                    ! Namelist print 
    927963         WRITE(numout,*) 
     
    956992         WRITE(numout,*) '                                         ln_vvl_dbg     = ', ln_vvl_dbg 
    957993      ENDIF 
    958  
     994      ! 
    959995      ioptio = 0                      ! Parameter control 
    960       IF( ln_vvl_ztilde_as_zstar ) ln_vvl_ztilde = .true. 
    961       IF( ln_vvl_zstar           )        ioptio = ioptio + 1 
    962       IF( ln_vvl_ztilde          )        ioptio = ioptio + 1 
    963       IF( ln_vvl_layer           )        ioptio = ioptio + 1 
    964  
     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      ! 
    9651001      IF( ioptio /= 1 )   CALL ctl_stop( 'Choose ONE vertical coordinate in namelist nam_vvl' ) 
    966  
     1002      IF( .NOT. ln_vvl_zstar .AND. ln_isf ) CALL ctl_stop( 'Only vvl_zstar has been tested with ice shelf cavity' ) 
     1003      ! 
    9671004      IF(lwp) THEN                   ! Print the choice 
    9681005         WRITE(numout,*) 
     
    9751012         ! IF( .NOT. ln_vvl_kepe ) WRITE(numout,*) '              kinetic to potential energy transfer : option not used' 
    9761013      ENDIF 
    977  
     1014      ! 
    9781015#if defined key_agrif 
    979       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' ) 
    9801017#endif 
    981  
     1018      ! 
    9821019   END SUBROUTINE dom_vvl_ctl 
    983  
    984    SUBROUTINE dom_vvl_orca_fix( pe3_in, pe3_out, pout ) 
    985       !!--------------------------------------------------------------------- 
    986       !!                   ***  ROUTINE dom_vvl_orca_fix  *** 
    987       !!                      
    988       !! ** Purpose :   Correct surface weighted, horizontally interpolated,  
    989       !!                scale factors at locations that have been individually 
    990       !!                modified in domhgr. Such modifications break the 
    991       !!                relationship between e12t and e1u*e2u etc. 
    992       !!                Recompute some scale factors ignoring the modified metric. 
    993       !!---------------------------------------------------------------------- 
    994       !! * Arguments 
    995       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( in    ) ::  pe3_in     ! input e3 to be interpolated 
    996       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) ::  pe3_out    ! output interpolated e3 
    997       CHARACTER(LEN=*), INTENT( in )                    ::  pout       ! grid point of out scale factors 
    998       !                                                                !   =  'U', 'V', 'W, 'F', 'UW' or 'VW' 
    999       !! * Local declarations 
    1000       INTEGER ::   ji, jj, jk                                          ! dummy loop indices 
    1001       INTEGER ::   ij0, ij1, ii0, ii1                                  ! dummy loop indices 
    1002       !! acc 
    1003       !! Hmm with the time splitting these "fixes" seem to do more harm than good. Temporarily disabled for 
    1004       !! the ORCA2 tests (by changing jp_cfg test from 2 to 3) pending further investigations 
    1005       !!  
    1006       !                                                ! ===================== 
    1007       IF( cp_cfg == "orca" .AND. jp_cfg == 3 ) THEN    ! ORCA R2 configuration 
    1008          !                                             ! ===================== 
    1009       !! acc 
    1010          IF( nn_cla == 0 ) THEN 
    1011             ! 
    1012             ii0 = 139   ;   ii1 = 140        ! Gibraltar Strait (e2u was modified) 
    1013             ij0 = 102   ;   ij1 = 102 
    1014             DO jk = 1, jpkm1 
    1015                DO jj = mj0(ij0), mj1(ij1) 
    1016                   DO ji = mi0(ii0), mi1(ii1) 
    1017                      SELECT CASE ( pout ) 
    1018                      CASE( 'U' ) 
    1019                         pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1020                        &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1021                        &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1022                        &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1023                      CASE( 'F' ) 
    1024                         pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1025                        &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1026                        &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1027                        &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1028                      END SELECT 
    1029                   END DO 
    1030                END DO 
    1031             END DO 
    1032             ! 
    1033             ii0 = 160   ;   ii1 = 160        ! Bab el Mandeb (e2u and e1v were modified) 
    1034             ij0 =  88   ;   ij1 =  88 
    1035             DO jk = 1, jpkm1 
    1036                DO jj = mj0(ij0), mj1(ij1) 
    1037                   DO ji = mi0(ii0), mi1(ii1) 
    1038                      SELECT CASE ( pout ) 
    1039                      CASE( 'U' ) 
    1040                         pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1041                        &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1042                        &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1043                        &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1044                      CASE( 'V' ) 
    1045                         pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1046                        &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1047                        &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1048                        &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1049                      CASE( 'F' ) 
    1050                         pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1051                        &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1052                        &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1053                        &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1054                      END SELECT 
    1055                   END DO 
    1056                END DO 
    1057             END DO 
    1058          ENDIF 
    1059  
    1060          ii0 = 145   ;   ii1 = 146        ! Danish Straits (e2u was modified) 
    1061          ij0 = 116   ;   ij1 = 116 
    1062          DO jk = 1, jpkm1 
    1063             DO jj = mj0(ij0), mj1(ij1) 
    1064                DO ji = mi0(ii0), mi1(ii1) 
    1065                   SELECT CASE ( pout ) 
    1066                   CASE( 'U' ) 
    1067                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1068                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1069                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1070                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1071                   CASE( 'F' ) 
    1072                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1073                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1074                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1075                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1076                   END SELECT 
    1077                END DO 
    1078             END DO 
    1079          END DO 
    1080       ENDIF 
    1081       ! 
    1082          !                                             ! ===================== 
    1083       IF( cp_cfg == "orca" .AND. jp_cfg == 1 ) THEN    ! ORCA R1 configuration 
    1084          !                                             ! ===================== 
    1085          ! 
    1086          ii0 = 281   ;   ii1 = 282        ! Gibraltar Strait (e2u was modified) 
    1087          ij0 = 200   ;   ij1 = 200 
    1088          DO jk = 1, jpkm1 
    1089             DO jj = mj0(ij0), mj1(ij1) 
    1090                DO ji = mi0(ii0), mi1(ii1) 
    1091                   SELECT CASE ( pout ) 
    1092                   CASE( 'U' ) 
    1093                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1094                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1095                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1096                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1097                   CASE( 'F' ) 
    1098                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1099                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1100                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1101                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1102                   END SELECT 
    1103                END DO 
    1104             END DO 
    1105          END DO 
    1106          ! 
    1107          ii0 = 314   ;   ii1 = 315        ! Bhosporus Strait (e2u was modified) 
    1108          ij0 = 208   ;   ij1 = 208 
    1109          DO jk = 1, jpkm1 
    1110             DO jj = mj0(ij0), mj1(ij1) 
    1111                DO ji = mi0(ii0), mi1(ii1) 
    1112                   SELECT CASE ( pout ) 
    1113                   CASE( 'U' ) 
    1114                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        &   
    1115                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1116                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1117                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1118                   CASE( 'F' ) 
    1119                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    &   
    1120                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1121                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1122                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1123                   END SELECT 
    1124                END DO 
    1125             END DO 
    1126          END DO 
    1127          ! 
    1128          ii0 =  44   ;   ii1 =  44        ! Lombok Strait (e1v was modified) 
    1129          ij0 = 124   ;   ij1 = 125 
    1130          DO jk = 1, jpkm1 
    1131             DO jj = mj0(ij0), mj1(ij1) 
    1132                DO ji = mi0(ii0), mi1(ii1) 
    1133                   SELECT CASE ( pout ) 
    1134                   CASE( 'V' ) 
    1135                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1136                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1137                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1138                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1139                   END SELECT 
    1140                END DO 
    1141             END DO 
    1142          END DO 
    1143          ! 
    1144          ii0 =  48   ;   ii1 =  48        ! Sumba Strait (e1v was modified) [closed from bathy_11 on] 
    1145          ij0 = 124   ;   ij1 = 125 
    1146          DO jk = 1, jpkm1 
    1147             DO jj = mj0(ij0), mj1(ij1) 
    1148                DO ji = mi0(ii0), mi1(ii1) 
    1149                   SELECT CASE ( pout ) 
    1150                   CASE( 'V' ) 
    1151                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1152                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1153                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1154                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1155                   END SELECT 
    1156                END DO 
    1157             END DO 
    1158          END DO 
    1159          ! 
    1160          ii0 =  53   ;   ii1 =  53        ! Ombai Strait (e1v was modified) 
    1161          ij0 = 124   ;   ij1 = 125 
    1162          DO jk = 1, jpkm1 
    1163             DO jj = mj0(ij0), mj1(ij1) 
    1164                DO ji = mi0(ii0), mi1(ii1) 
    1165                   SELECT CASE ( pout ) 
    1166                   CASE( 'V' ) 
    1167                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1168                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1169                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1170                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1171                   END SELECT 
    1172                END DO 
    1173             END DO 
    1174          END DO 
    1175          ! 
    1176          ii0 =  56   ;   ii1 =  56        ! Timor Passage (e1v was modified) 
    1177          ij0 = 124   ;   ij1 = 125 
    1178          DO jk = 1, jpkm1 
    1179             DO jj = mj0(ij0), mj1(ij1) 
    1180                DO ji = mi0(ii0), mi1(ii1) 
    1181                   SELECT CASE ( pout ) 
    1182                   CASE( 'V' ) 
    1183                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1184                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1185                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1186                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1187                   END SELECT 
    1188                END DO 
    1189             END DO 
    1190          END DO 
    1191          ! 
    1192          ii0 =  55   ;   ii1 =  55        ! West Halmahera Strait (e1v was modified) 
    1193          ij0 = 141   ;   ij1 = 142 
    1194          DO jk = 1, jpkm1 
    1195             DO jj = mj0(ij0), mj1(ij1) 
    1196                DO ji = mi0(ii0), mi1(ii1) 
    1197                   SELECT CASE ( pout ) 
    1198                   CASE( 'V' ) 
    1199                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1200                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1201                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1202                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1203                   END SELECT 
    1204                END DO 
    1205             END DO 
    1206          END DO 
    1207          ! 
    1208          ii0 =  58   ;   ii1 =  58        ! East Halmahera Strait (e1v was modified) 
    1209          ij0 = 141   ;   ij1 = 142 
    1210          DO jk = 1, jpkm1 
    1211             DO jj = mj0(ij0), mj1(ij1) 
    1212                DO ji = mi0(ii0), mi1(ii1) 
    1213                   SELECT CASE ( pout ) 
    1214                   CASE( 'V' ) 
    1215                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1216                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1217                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1218                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1219                   END SELECT 
    1220                END DO 
    1221             END DO 
    1222          END DO 
    1223       ENDIF 
    1224          !                                             ! ===================== 
    1225       IF( cp_cfg == "orca" .AND. jp_cfg == 05 ) THEN   ! ORCA R05 configuration 
    1226          !                                             ! ===================== 
    1227          ! 
    1228          ii0 = 563   ;   ii1 = 564        ! Gibraltar Strait (e2u was modified) 
    1229          ij0 = 327   ;   ij1 = 327 
    1230          DO jk = 1, jpkm1 
    1231             DO jj = mj0(ij0), mj1(ij1) 
    1232                DO ji = mi0(ii0), mi1(ii1) 
    1233                   SELECT CASE ( pout ) 
    1234                   CASE( 'U' ) 
    1235                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1236                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1237                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1238                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1239                   CASE( 'F' ) 
    1240                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1241                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1242                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1243                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1244                   END SELECT 
    1245                END DO 
    1246             END DO 
    1247          END DO 
    1248          ! 
    1249          ii0 = 627   ;   ii1 = 628        ! Bosphorus Strait (e2u was modified) 
    1250          ij0 = 343   ;   ij1 = 343 
    1251          DO jk = 1, jpkm1 
    1252             DO jj = mj0(ij0), mj1(ij1) 
    1253                DO ji = mi0(ii0), mi1(ii1) 
    1254                   SELECT CASE ( pout ) 
    1255                   CASE( 'U' ) 
    1256                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        &   
    1257                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1258                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1259                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1260                   CASE( 'F' ) 
    1261                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    &   
    1262                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1263                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1264                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1265                   END SELECT 
    1266                END DO 
    1267             END DO 
    1268          END DO 
    1269          ! 
    1270          ii0 =  93   ;   ii1 =  94        ! Sumba Strait (e2u was modified) 
    1271          ij0 = 232   ;   ij1 = 232 
    1272          DO jk = 1, jpkm1 
    1273             DO jj = mj0(ij0), mj1(ij1) 
    1274                DO ji = mi0(ii0), mi1(ii1) 
    1275                   SELECT CASE ( pout ) 
    1276                   CASE( 'U' ) 
    1277                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1278                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1279                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1280                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1281                   CASE( 'F' ) 
    1282                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1283                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1284                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1285                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1286                   END SELECT 
    1287                END DO 
    1288             END DO 
    1289          END DO 
    1290          ! 
    1291          ii0 = 103   ;   ii1 = 103        ! Ombai Strait (e2u was modified) 
    1292          ij0 = 232   ;   ij1 = 232 
    1293          DO jk = 1, jpkm1 
    1294             DO jj = mj0(ij0), mj1(ij1) 
    1295                DO ji = mi0(ii0), mi1(ii1) 
    1296                   SELECT CASE ( pout ) 
    1297                   CASE( 'U' ) 
    1298                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1299                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1300                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1301                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1302                   CASE( 'F' ) 
    1303                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1304                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1305                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1306                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1307                   END SELECT 
    1308                END DO 
    1309             END DO 
    1310          END DO 
    1311          ! 
    1312          ii0 =  15   ;   ii1 =  15        ! Palk Strait (e2u was modified) 
    1313          ij0 = 270   ;   ij1 = 270 
    1314          DO jk = 1, jpkm1 
    1315             DO jj = mj0(ij0), mj1(ij1) 
    1316                DO ji = mi0(ii0), mi1(ii1) 
    1317                   SELECT CASE ( pout ) 
    1318                   CASE( 'U' ) 
    1319                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk)                                        & 
    1320                     &                    * (   e1t(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3t_0(ji  ,jj,jk) ) & 
    1321                     &                    +     e1t(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3t_0(ji+1,jj,jk) ) & 
    1322                     &                      ) / e1u(ji,jj)   +   e3u_0(ji,jj,jk) 
    1323                   CASE( 'F' ) 
    1324                      pe3_out(ji,jj,jk) = 0.5_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk)                    & 
    1325                     &                    * (   e1u(ji  ,jj) * ( pe3_in(ji  ,jj,jk) - e3u_0(ji  ,jj,jk) ) & 
    1326                     &                    +     e1u(ji+1,jj) * ( pe3_in(ji+1,jj,jk) - e3u_0(ji+1,jj,jk) ) & 
    1327                     &                      ) / e1f(ji,jj)   +   e3f_0(ji,jj,jk) 
    1328                   END SELECT 
    1329                END DO 
    1330             END DO 
    1331          END DO 
    1332          ! 
    1333          ii0 =  87   ;   ii1 =  87        ! Lombok Strait (e1v was modified) 
    1334          ij0 = 232   ;   ij1 = 233 
    1335          DO jk = 1, jpkm1 
    1336             DO jj = mj0(ij0), mj1(ij1) 
    1337                DO ji = mi0(ii0), mi1(ii1) 
    1338                   SELECT CASE ( pout ) 
    1339                   CASE( 'V' ) 
    1340                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1341                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1342                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1343                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1344                   END SELECT 
    1345                END DO 
    1346             END DO 
    1347          END DO 
    1348          ! 
    1349          ii0 = 662   ;   ii1 = 662        ! Bab el Mandeb (e1v was modified) 
    1350          ij0 = 276   ;   ij1 = 276 
    1351          DO jk = 1, jpkm1 
    1352             DO jj = mj0(ij0), mj1(ij1) 
    1353                DO ji = mi0(ii0), mi1(ii1) 
    1354                   SELECT CASE ( pout ) 
    1355                   CASE( 'V' ) 
    1356                      pe3_out(ji,jj,jk) = 0.5_wp * vmask(ji,jj,jk)                                        & 
    1357                     &                    * (   e2t(ji,jj  ) * ( pe3_in(ji,jj  ,jk) - e3t_0(ji,jj  ,jk) ) & 
    1358                     &                    +     e2t(ji,jj+1) * ( pe3_in(ji,jj+1,jk) - e3t_0(ji,jj+1,jk) ) & 
    1359                     &                      ) / e2v(ji,jj)   +   e3v_0(ji,jj,jk) 
    1360                   END SELECT 
    1361                END DO 
    1362             END DO 
    1363          END DO 
    1364       ENDIF 
    1365    END SUBROUTINE dom_vvl_orca_fix 
    13661020 
    13671021   !!====================================================================== 
    13681022END MODULE domvvl 
    1369  
    1370  
    1371  
Note: See TracChangeset for help on using the changeset viewer.