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

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 6808 for branches/NERC/dev_r5549_BDY_ZEROGRAD/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90 – NEMO

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

merge with trunk@6232 for consistency with SSB code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r5549_BDY_ZEROGRAD/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r5436 r6808  
    11MODULE dynspg_ts 
     2   !!====================================================================== 
     3   !!                   ***  MODULE  dynspg_ts  *** 
     4   !! Ocean dynamics:  surface pressure gradient trend, split-explicit scheme 
    25   !!====================================================================== 
    36   !! History :   1.0  ! 2004-12  (L. Bessieres, G. Madec)  Original code 
     
    1114   !!             3.5  ! 2013-07  (J. Chanut) Switch to Forward-backward time stepping 
    1215   !!             3.6  ! 2013-11  (A. Coward) Update for z-tilde compatibility 
     16   !!             3.7  ! 2015-11  (J. Chanut) free surface simplification 
    1317   !!--------------------------------------------------------------------- 
    14 #if defined key_dynspg_ts   ||   defined key_esopa 
     18 
    1519   !!---------------------------------------------------------------------- 
    16    !!   'key_dynspg_ts'         split explicit free surface 
    17    !!---------------------------------------------------------------------- 
    18    !!   dyn_spg_ts  : compute surface pressure gradient trend using a time- 
    19    !!                 splitting scheme and add to the general trend  
     20   !!   dyn_spg_ts     : compute surface pressure gradient trend using a time-splitting scheme  
     21   !!   dyn_spg_ts_init: initialisation of the time-splitting scheme 
     22   !!   ts_wgt         : set time-splitting weights for temporal averaging (or not) 
     23   !!   ts_rst         : read/write time-splitting fields in restart file 
    2024   !!---------------------------------------------------------------------- 
    2125   USE oce             ! ocean dynamics and tracers 
    2226   USE dom_oce         ! ocean space and time domain 
    2327   USE sbc_oce         ! surface boundary condition: ocean 
     28   USE zdf_oce         ! Bottom friction coefts 
    2429   USE sbcisf          ! ice shelf variable (fwfisf) 
    25    USE dynspg_oce      ! surface pressure gradient variables 
     30   USE sbcapr          ! surface boundary condition: atmospheric pressure 
     31   USE dynadv    , ONLY: ln_dynadv_vec 
    2632   USE phycst          ! physical constants 
    2733   USE dynvor          ! vorticity term 
     34   USE wet_dry         ! wetting/drying flux limter 
    2835   USE bdy_par         ! for lk_bdy 
    29    USE bdytides        ! open boundary condition data      
     36   USE bdytides        ! open boundary condition data 
    3037   USE bdydyn2d        ! open boundary conditions on barotropic variables 
    3138   USE sbctide         ! tides 
    3239   USE updtide         ! tide potential 
     40   ! 
     41   USE in_out_manager  ! I/O manager 
    3342   USE lib_mpp         ! distributed memory computing library 
    3443   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    3544   USE prtctl          ! Print control 
    36    USE in_out_manager  ! I/O manager 
    3745   USE iom             ! IOM library 
    3846   USE restart         ! only for lrst_oce 
    39    USE zdf_oce         ! Bottom friction coefts 
    4047   USE wrk_nemo        ! Memory Allocation 
    4148   USE timing          ! Timing     
    42    USE sbcapr          ! surface boundary condition: atmospheric pressure 
    43    USE dynadv, ONLY: ln_dynadv_vec 
     49   USE diatmb          ! Top,middle,bottom output 
    4450#if defined key_agrif 
    4551   USE agrif_opa_interp ! agrif 
     
    4955#endif 
    5056 
     57 
    5158   IMPLICIT NONE 
    5259   PRIVATE 
     
    6067   REAL(wp),SAVE :: rdtbt   ! Barotropic time step 
    6168 
    62    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: & 
    63                     wgtbtp1, &              ! Primary weights used for time filtering of barotropic variables 
    64                     wgtbtp2                 ! Secondary weights used for time filtering of barotropic variables 
    65  
    66    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  zwz          ! ff/h at F points 
    67    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftnw, ftne   ! triad of coriolis parameter 
    68    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftsw, ftse   ! (only used with een vorticity scheme) 
    69  
    70    ! Arrays below are saved to allow testing of the "no time averaging" option 
    71    ! If this option is not retained, these could be replaced by temporary arrays 
    72    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  sshbb_e, sshb_e, & ! Instantaneous barotropic arrays 
    73                                                    ubb_e, ub_e,     & 
    74                                                    vbb_e, vb_e 
     69   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) ::   wgtbtp1, wgtbtp2   !: 1st & 2nd weights used in time filtering of barotropic fields 
     70 
     71   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  zwz          !: ff/h at F points 
     72   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftnw, ftne   !: triad of coriolis parameter 
     73   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftsw, ftse   !: (only used with een vorticity scheme) 
     74 
     75   !! Time filtered arrays at baroclinic time step: 
     76   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   un_adv , vn_adv     !: Advection vel. at "now" barocl. step 
    7577 
    7678   !! * Substitutions 
    77 #  include "domzgr_substitute.h90" 
    7879#  include "vectopt_loop_substitute.h90" 
    7980   !!---------------------------------------------------------------------- 
     
    9192      !!---------------------------------------------------------------------- 
    9293      ierr(:) = 0 
    93  
    94       ALLOCATE( sshb_e(jpi,jpj), sshbb_e(jpi,jpj), & 
    95          &      ub_e(jpi,jpj)  , vb_e(jpi,jpj)   , & 
    96          &      ubb_e(jpi,jpj) , vbb_e(jpi,jpj)  , STAT= ierr(1) ) 
    97  
    98       ALLOCATE( wgtbtp1(3*nn_baro), wgtbtp2(3*nn_baro), zwz(jpi,jpj), STAT= ierr(2) ) 
    99  
    100       IF( ln_dynvor_een .or. ln_dynvor_een_old ) ALLOCATE( ftnw(jpi,jpj) , ftne(jpi,jpj) , &  
    101                                                     &      ftsw(jpi,jpj) , ftse(jpi,jpj) , STAT=ierr(3) ) 
    102  
    103       dyn_spg_ts_alloc = MAXVAL(ierr(:)) 
    104  
     94      ! 
     95      ALLOCATE( wgtbtp1(3*nn_baro), wgtbtp2(3*nn_baro), zwz(jpi,jpj), STAT=ierr(1) ) 
     96      ! 
     97      IF( ln_dynvor_een )   ALLOCATE( ftnw(jpi,jpj) , ftne(jpi,jpj) , &  
     98         &                            ftsw(jpi,jpj) , ftse(jpi,jpj) , STAT=ierr(2) ) 
     99         ! 
     100      ALLOCATE( un_adv(jpi,jpj), vn_adv(jpi,jpj)                    , STAT=ierr(3) ) 
     101      ! 
     102      dyn_spg_ts_alloc = MAXVAL( ierr(:) ) 
     103      ! 
    105104      IF( lk_mpp                )   CALL mpp_sum( dyn_spg_ts_alloc ) 
    106       IF( dyn_spg_ts_alloc /= 0 )   CALL ctl_warn('dynspg_oce_alloc: failed to allocate arrays') 
     105      IF( dyn_spg_ts_alloc /= 0 )   CALL ctl_warn('dyn_spg_ts_alloc: failed to allocate arrays') 
    107106      ! 
    108107   END FUNCTION dyn_spg_ts_alloc 
     108 
    109109 
    110110   SUBROUTINE dyn_spg_ts( kt ) 
    111111      !!---------------------------------------------------------------------- 
    112112      !! 
    113       !! ** Purpose :    
    114       !!      -Compute the now trend due to the explicit time stepping 
    115       !!      of the quasi-linear barotropic system.  
     113      !! ** Purpose : - Compute the now trend due to the explicit time stepping 
     114      !!              of the quasi-linear barotropic system, and add it to the 
     115      !!              general momentum trend.  
    116116      !! 
    117       !! ** Method  :   
     117      !! ** Method  : - split-explicit schem (time splitting) : 
    118118      !!      Barotropic variables are advanced from internal time steps 
    119119      !!      "n"   to "n+1" if ln_bt_fw=T 
     
    129129      !!      continuity equation taken at the baroclinic time steps. This  
    130130      !!      ensures tracers conservation. 
    131       !!      -Update 3d trend (ua, va) with barotropic component. 
     131      !!      - (ua, va) momentum trend updated with barotropic component. 
    132132      !! 
    133       !! References : Shchepetkin, A.F. and J.C. McWilliams, 2005:  
    134       !!              The regional oceanic modeling system (ROMS):  
    135       !!              a split-explicit, free-surface, 
    136       !!              topography-following-coordinate oceanic model.  
    137       !!              Ocean Modelling, 9, 347-404.  
     133      !! References : Shchepetkin and McWilliams, Ocean Modelling, 2005.  
    138134      !!--------------------------------------------------------------------- 
    139       ! 
    140135      INTEGER, INTENT(in)  ::   kt   ! ocean time-step index 
    141136      ! 
    142137      LOGICAL  ::   ll_fw_start        ! if true, forward integration  
    143138      LOGICAL  ::   ll_init             ! if true, special startup of 2d equations 
     139      LOGICAL  ::   ll_tmp1, ll_tmp2            ! local logical variables used in W/D 
    144140      INTEGER  ::   ji, jj, jk, jn        ! dummy loop indices 
    145141      INTEGER  ::   ikbu, ikbv, noffset      ! local integers 
     142      INTEGER  ::   iktu, iktv               ! local integers 
     143      REAL(wp) ::   zmdi 
    146144      REAL(wp) ::   zraur, z1_2dt_b, z2dt_bf    ! local scalars 
    147       REAL(wp) ::   zx1, zy1, zx2, zy2         !   -      - 
    148       REAL(wp) ::   z1_12, z1_8, z1_4, z1_2    !   -      - 
    149       REAL(wp) ::   zu_spg, zv_spg             !   -      - 
    150       REAL(wp) ::   zhura, zhvra               !   -      - 
    151       REAL(wp) ::   za0, za1, za2, za3           !   -      - 
    152       ! 
    153       REAL(wp), POINTER, DIMENSION(:,:) :: zun_e, zvn_e, zsshp2_e 
     145      REAL(wp) ::   zx1, zy1, zx2, zy2          !   -      - 
     146      REAL(wp) ::   z1_12, z1_8, z1_4, z1_2  !   -      - 
     147      REAL(wp) ::   zu_spg, zv_spg              !   -      - 
     148      REAL(wp) ::   zhura, zhvra          !   -      - 
     149      REAL(wp) ::   za0, za1, za2, za3    !   -      - 
     150      ! 
     151      REAL(wp), POINTER, DIMENSION(:,:) :: zsshp2_e 
    154152      REAL(wp), POINTER, DIMENSION(:,:) :: zu_trd, zv_trd, zu_frc, zv_frc, zssh_frc 
    155       REAL(wp), POINTER, DIMENSION(:,:) :: zu_sum, zv_sum, zwx, zwy, zhdiv 
     153      REAL(wp), POINTER, DIMENSION(:,:) :: zwx, zwy, zhdiv 
    156154      REAL(wp), POINTER, DIMENSION(:,:) :: zhup2_e, zhvp2_e, zhust_e, zhvst_e 
    157155      REAL(wp), POINTER, DIMENSION(:,:) :: zsshu_a, zsshv_a 
    158156      REAL(wp), POINTER, DIMENSION(:,:) :: zhf 
     157      REAL(wp), POINTER, DIMENSION(:,:) :: zcpx, zcpy                 ! Wetting/Dying gravity filter coef. 
     158      REAL(wp), POINTER, DIMENSION(:,:) :: wduflt1, wdvflt1           ! Wetting/Dying velocity filter coef. 
    159159      !!---------------------------------------------------------------------- 
    160160      ! 
     
    162162      ! 
    163163      !                                         !* Allocate temporary arrays 
    164       CALL wrk_alloc( jpi, jpj, zsshp2_e, zhdiv ) 
    165       CALL wrk_alloc( jpi, jpj, zu_trd, zv_trd, zun_e, zvn_e  ) 
    166       CALL wrk_alloc( jpi, jpj, zwx, zwy, zu_sum, zv_sum, zssh_frc, zu_frc, zv_frc) 
    167       CALL wrk_alloc( jpi, jpj, zhup2_e, zhvp2_e, zhust_e, zhvst_e) 
    168       CALL wrk_alloc( jpi, jpj, zsshu_a, zsshv_a                                   ) 
    169       CALL wrk_alloc( jpi, jpj, zhf ) 
    170       ! 
     164      CALL wrk_alloc( jpi,jpj,   zsshp2_e, zhdiv ) 
     165      CALL wrk_alloc( jpi,jpj,   zu_trd, zv_trd) 
     166      CALL wrk_alloc( jpi,jpj,   zwx, zwy, zssh_frc, zu_frc, zv_frc) 
     167      CALL wrk_alloc( jpi,jpj,   zhup2_e, zhvp2_e, zhust_e, zhvst_e) 
     168      CALL wrk_alloc( jpi,jpj,   zsshu_a, zsshv_a                  ) 
     169      CALL wrk_alloc( jpi,jpj,   zhf ) 
     170      IF( ln_wd ) CALL wrk_alloc( jpi, jpj, zcpx, zcpy, wduflt1, wdvflt1 ) 
     171      ! 
     172      zmdi=1.e+20                               !  missing data indicator for masking 
    171173      !                                         !* Local constant initialization 
    172174      z1_12 = 1._wp / 12._wp  
     
    175177      z1_2  = 0.5_wp      
    176178      zraur = 1._wp / rau0 
    177       ! 
    178       IF( kt == nit000 .AND. neuler == 0 ) THEN    ! reciprocal of baroclinic time step  
    179         z2dt_bf = rdt 
    180       ELSE 
    181         z2dt_bf = 2.0_wp * rdt 
     179      !                                            ! reciprocal of baroclinic time step  
     180      IF( kt == nit000 .AND. neuler == 0 ) THEN   ;   z2dt_bf =          rdt 
     181      ELSE                                        ;   z2dt_bf = 2.0_wp * rdt 
    182182      ENDIF 
    183183      z1_2dt_b = 1.0_wp / z2dt_bf  
    184184      ! 
    185       ll_init = ln_bt_av                           ! if no time averaging, then no specific restart  
     185      ll_init     = ln_bt_av                       ! if no time averaging, then no specific restart  
    186186      ll_fw_start = .FALSE. 
    187       ! 
    188                                                        ! time offset in steps for bdy data update 
    189       IF (.NOT.ln_bt_fw) THEN ; noffset=-2*nn_baro ; ELSE ;  noffset = 0 ; ENDIF 
     187      !                                            ! time offset in steps for bdy data update 
     188      IF( .NOT.ln_bt_fw ) THEN   ;   noffset = - nn_baro 
     189      ELSE                       ;   noffset =   0  
     190      ENDIF 
    190191      ! 
    191192      IF( kt == nit000 ) THEN                !* initialisation 
     
    196197         IF(lwp) WRITE(numout,*) 
    197198         ! 
    198          IF (neuler==0) ll_init=.TRUE. 
    199          ! 
    200          IF (ln_bt_fw.OR.(neuler==0)) THEN 
    201            ll_fw_start=.TRUE. 
    202            noffset = 0 
     199         IF( neuler == 0 )  ll_init=.TRUE. 
     200         ! 
     201         IF( ln_bt_fw .OR. neuler == 0 ) THEN 
     202            ll_fw_start =.TRUE. 
     203            noffset    = 0 
    203204         ELSE 
    204            ll_fw_start=.FALSE. 
     205            ll_fw_start =.FALSE. 
    205206         ENDIF 
    206207         ! 
    207208         ! Set averaging weights and cycle length: 
    208          CALL ts_wgt(ln_bt_av, ll_fw_start, icycle, wgtbtp1, wgtbtp2) 
    209          ! 
     209         CALL ts_wgt( ln_bt_av, ll_fw_start, icycle, wgtbtp1, wgtbtp2 ) 
    210210         ! 
    211211      ENDIF 
     
    218218      ! and update depths at T-F points (ht and zhf resp.) at each barotropic time step 
    219219      ! 
    220       IF ( kt == nit000 .OR. lk_vvl ) THEN 
    221          IF ( ln_dynvor_een_old ) THEN 
    222             DO jj = 1, jpjm1 
    223                DO ji = 1, jpim1 
    224                   zwz(ji,jj) =   ( ht(ji  ,jj+1) + ht(ji+1,jj+1) +                    & 
    225                         &          ht(ji  ,jj  ) + ht(ji+1,jj  )   ) / 4._wp   
    226                   IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = 1._wp / zwz(ji,jj) 
    227                END DO 
    228             END DO 
     220      IF( kt == nit000 .OR. .NOT.ln_linssh ) THEN 
     221         IF( ln_dynvor_een ) THEN               !==  EEN scheme  ==! 
     222            SELECT CASE( nn_een_e3f )              !* ff/e3 at F-point 
     223            CASE ( 0 )                                   ! original formulation  (masked averaging of e3t divided by 4) 
     224               DO jj = 1, jpjm1 
     225                  DO ji = 1, jpim1 
     226                     zwz(ji,jj) =   ( ht_n(ji  ,jj+1) + ht_n(ji+1,jj+1) +                    & 
     227                        &             ht_n(ji  ,jj  ) + ht_n(ji+1,jj  )   ) * 0.25_wp   
     228                     IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = ff(ji,jj) / zwz(ji,jj) 
     229                  END DO 
     230               END DO 
     231            CASE ( 1 )                                   ! new formulation  (masked averaging of e3t divided by the sum of mask) 
     232               DO jj = 1, jpjm1 
     233                  DO ji = 1, jpim1 
     234                     zwz(ji,jj) =   ( ht_n(ji  ,jj+1) + ht_n(ji+1,jj+1) +                     & 
     235                        &             ht_n(ji  ,jj  ) + ht_n(ji+1,jj  )   )                   & 
     236                        &       / ( MAX( 1._wp, tmask(ji  ,jj+1, 1) + tmask(ji+1,jj+1, 1) +    & 
     237                        &                       tmask(ji  ,jj  , 1) + tmask(ji+1,jj  , 1) ) ) 
     238                     IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = ff(ji,jj) / zwz(ji,jj) 
     239                  END DO 
     240               END DO 
     241            END SELECT 
    229242            CALL lbc_lnk( zwz, 'F', 1._wp ) 
    230             zwz(:,:) = ff(:,:) * zwz(:,:) 
    231  
     243            ! 
    232244            ftne(1,:) = 0._wp ; ftnw(1,:) = 0._wp ; ftse(1,:) = 0._wp ; ftsw(1,:) = 0._wp 
    233245            DO jj = 2, jpj 
    234                DO ji = fs_2, jpi   ! vector opt. 
     246               DO ji = 2, jpi 
    235247                  ftne(ji,jj) = zwz(ji-1,jj  ) + zwz(ji  ,jj  ) + zwz(ji  ,jj-1) 
    236248                  ftnw(ji,jj) = zwz(ji-1,jj-1) + zwz(ji-1,jj  ) + zwz(ji  ,jj  ) 
     
    239251               END DO 
    240252            END DO 
    241          ELSE IF ( ln_dynvor_een ) THEN 
    242             DO jj = 1, jpjm1 
    243                DO ji = 1, jpim1 
    244                   zwz(ji,jj) =   ( ht(ji  ,jj+1) + ht(ji+1,jj+1) +                     & 
    245                         &          ht(ji  ,jj  ) + ht(ji+1,jj  )   )                   & 
    246                         &      / ( MAX( 1.0_wp, tmask(ji  ,jj+1, 1) + tmask(ji+1,jj+1, 1) +    & 
    247                         &                       tmask(ji  ,jj  , 1) + tmask(ji+1,jj  , 1) ) ) 
    248                   IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = 1._wp / zwz(ji,jj) 
    249                END DO 
    250             END DO 
    251             CALL lbc_lnk( zwz, 'F', 1._wp ) 
    252             zwz(:,:) = ff(:,:) * zwz(:,:) 
    253  
    254             ftne(1,:) = 0._wp ; ftnw(1,:) = 0._wp ; ftse(1,:) = 0._wp ; ftsw(1,:) = 0._wp 
    255             DO jj = 2, jpj 
    256                DO ji = fs_2, jpi   ! vector opt. 
    257                   ftne(ji,jj) = zwz(ji-1,jj  ) + zwz(ji  ,jj  ) + zwz(ji  ,jj-1) 
    258                   ftnw(ji,jj) = zwz(ji-1,jj-1) + zwz(ji-1,jj  ) + zwz(ji  ,jj  ) 
    259                   ftse(ji,jj) = zwz(ji  ,jj  ) + zwz(ji  ,jj-1) + zwz(ji-1,jj-1) 
    260                   ftsw(ji,jj) = zwz(ji  ,jj-1) + zwz(ji-1,jj-1) + zwz(ji-1,jj  ) 
    261                END DO 
    262             END DO 
    263          ELSE 
     253            ! 
     254         ELSE                                !== all other schemes (ENE, ENS, MIX) 
    264255            zwz(:,:) = 0._wp 
    265             zhf(:,:) = 0. 
     256            zhf(:,:) = 0._wp 
    266257            IF ( .not. ln_sco ) THEN 
     258 
     259!!gm  agree the JC comment  : this should be done in a much clear way 
     260 
    267261! JC: It not clear yet what should be the depth at f-points over land in z-coordinate case 
    268262!     Set it to zero for the time being  
     
    276270 
    277271            DO jj = 1, jpjm1 
    278                zhf(:,jj) = zhf(:,jj)*(1._wp- umask(:,jj,1) * umask(:,jj+1,1)) 
     272               zhf(:,jj) = zhf(:,jj) * (1._wp- umask(:,jj,1) * umask(:,jj+1,1)) 
    279273            END DO 
    280274 
    281275            DO jk = 1, jpkm1 
    282276               DO jj = 1, jpjm1 
    283                   zhf(:,jj) = zhf(:,jj) + fse3f_n(:,jj,jk) * umask(:,jj,jk) * umask(:,jj+1,jk) 
     277                  zhf(:,jj) = zhf(:,jj) + e3f_n(:,jj,jk) * umask(:,jj,jk) * umask(:,jj+1,jk) 
    284278               END DO 
    285279            END DO 
     
    297291      ! If forward start at previous time step, and centered integration,  
    298292      ! then update averaging weights: 
    299       IF ((.NOT.ln_bt_fw).AND.((neuler==0).AND.(kt==nit000+1))) THEN 
     293      IF (.NOT.ln_bt_fw .AND.( neuler==0 .AND. kt==nit000+1 ) ) THEN 
    300294         ll_fw_start=.FALSE. 
    301295         CALL ts_wgt(ln_bt_av, ll_fw_start, icycle, wgtbtp1, wgtbtp2) 
     
    313307      ! 
    314308      DO jk = 1, jpkm1 
    315          zu_frc(:,:) = zu_frc(:,:) + fse3u_n(:,:,jk) * ua(:,:,jk) * umask(:,:,jk) 
    316          zv_frc(:,:) = zv_frc(:,:) + fse3v_n(:,:,jk) * va(:,:,jk) * vmask(:,:,jk)          
     309         zu_frc(:,:) = zu_frc(:,:) + e3u_n(:,:,jk) * ua(:,:,jk) * umask(:,:,jk) 
     310         zv_frc(:,:) = zv_frc(:,:) + e3v_n(:,:,jk) * va(:,:,jk) * vmask(:,:,jk)          
    317311      END DO 
    318312      ! 
    319       zu_frc(:,:) = zu_frc(:,:) * hur(:,:) 
    320       zv_frc(:,:) = zv_frc(:,:) * hvr(:,:) 
     313      zu_frc(:,:) = zu_frc(:,:) * r1_hu_n(:,:) 
     314      zv_frc(:,:) = zv_frc(:,:) * r1_hv_n(:,:) 
    321315      ! 
    322316      ! 
     
    332326      !                                   !* barotropic Coriolis trends (vorticity scheme dependent) 
    333327      !                                   ! -------------------------------------------------------- 
    334       zwx(:,:) = un_b(:,:) * hu(:,:) * e2u(:,:)        ! now fluxes  
    335       zwy(:,:) = vn_b(:,:) * hv(:,:) * e1v(:,:) 
     328      zwx(:,:) = un_b(:,:) * hu_n(:,:) * e2u(:,:)        ! now fluxes  
     329      zwy(:,:) = vn_b(:,:) * hv_n(:,:) * e1v(:,:) 
    336330      ! 
    337331      IF( ln_dynvor_ene .OR. ln_dynvor_mix ) THEN      ! energy conserving or mixed scheme 
    338332         DO jj = 2, jpjm1 
    339333            DO ji = fs_2, fs_jpim1   ! vector opt. 
    340                zy1 = ( zwy(ji,jj-1) + zwy(ji+1,jj-1) ) / e1u(ji,jj) 
    341                zy2 = ( zwy(ji,jj  ) + zwy(ji+1,jj  ) ) / e1u(ji,jj) 
    342                zx1 = ( zwx(ji-1,jj) + zwx(ji-1,jj+1) ) / e2v(ji,jj) 
    343                zx2 = ( zwx(ji  ,jj) + zwx(ji  ,jj+1) ) / e2v(ji,jj) 
     334               zy1 = ( zwy(ji,jj-1) + zwy(ji+1,jj-1) ) * r1_e1u(ji,jj) 
     335               zy2 = ( zwy(ji,jj  ) + zwy(ji+1,jj  ) ) * r1_e1u(ji,jj) 
     336               zx1 = ( zwx(ji-1,jj) + zwx(ji-1,jj+1) ) * r1_e2v(ji,jj) 
     337               zx2 = ( zwx(ji  ,jj) + zwx(ji  ,jj+1) ) * r1_e2v(ji,jj) 
    344338               ! energy conserving formulation for planetary vorticity term 
    345339               zu_trd(ji,jj) = z1_4 * ( zwz(ji  ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 
     
    352346            DO ji = fs_2, fs_jpim1   ! vector opt. 
    353347               zy1 =   z1_8 * ( zwy(ji  ,jj-1) + zwy(ji+1,jj-1) & 
    354                  &            + zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) / e1u(ji,jj) 
     348                 &            + zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) * r1_e1u(ji,jj) 
    355349               zx1 = - z1_8 * ( zwx(ji-1,jj  ) + zwx(ji-1,jj+1) & 
    356                  &            + zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) / e2v(ji,jj) 
     350                 &            + zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) * r1_e2v(ji,jj) 
    357351               zu_trd(ji,jj)  = zy1 * ( zwz(ji  ,jj-1) + zwz(ji,jj) ) 
    358352               zv_trd(ji,jj)  = zx1 * ( zwz(ji-1,jj  ) + zwz(ji,jj) ) 
     
    360354         END DO 
    361355         ! 
    362       ELSEIF ( ln_dynvor_een .or. ln_dynvor_een_old ) THEN  ! enstrophy and energy conserving scheme 
     356      ELSEIF ( ln_dynvor_een ) THEN  ! enstrophy and energy conserving scheme 
    363357         DO jj = 2, jpjm1 
    364358            DO ji = fs_2, fs_jpim1   ! vector opt. 
    365                zu_trd(ji,jj) = + z1_12 / e1u(ji,jj) * (  ftne(ji,jj  ) * zwy(ji  ,jj  ) & 
    366                 &                                      + ftnw(ji+1,jj) * zwy(ji+1,jj  ) & 
    367                 &                                      + ftse(ji,jj  ) * zwy(ji  ,jj-1) & 
    368                 &                                      + ftsw(ji+1,jj) * zwy(ji+1,jj-1) ) 
    369                zv_trd(ji,jj) = - z1_12 / e2v(ji,jj) * (  ftsw(ji,jj+1) * zwx(ji-1,jj+1) & 
    370                 &                                      + ftse(ji,jj+1) * zwx(ji  ,jj+1) & 
    371                 &                                      + ftnw(ji,jj  ) * zwx(ji-1,jj  ) & 
    372                 &                                      + ftne(ji,jj  ) * zwx(ji  ,jj  ) ) 
     359               zu_trd(ji,jj) = + z1_12 * r1_e1u(ji,jj) * (  ftne(ji,jj  ) * zwy(ji  ,jj  ) & 
     360                &                                         + ftnw(ji+1,jj) * zwy(ji+1,jj  ) & 
     361                &                                         + ftse(ji,jj  ) * zwy(ji  ,jj-1) & 
     362                &                                         + ftsw(ji+1,jj) * zwy(ji+1,jj-1) ) 
     363               zv_trd(ji,jj) = - z1_12 * r1_e2v(ji,jj) * (  ftsw(ji,jj+1) * zwx(ji-1,jj+1) & 
     364                &                                         + ftse(ji,jj+1) * zwx(ji  ,jj+1) & 
     365                &                                         + ftnw(ji,jj  ) * zwx(ji-1,jj  ) & 
     366                &                                         + ftne(ji,jj  ) * zwx(ji  ,jj  ) ) 
    373367            END DO 
    374368         END DO 
     
    378372      !                                   !* Right-Hand-Side of the barotropic momentum equation 
    379373      !                                   ! ---------------------------------------------------- 
    380       IF( lk_vvl ) THEN                         ! Variable volume : remove surface pressure gradient 
    381          DO jj = 2, jpjm1  
    382             DO ji = fs_2, fs_jpim1   ! vector opt. 
    383                zu_trd(ji,jj) = zu_trd(ji,jj) - grav * (  sshn(ji+1,jj  ) - sshn(ji  ,jj  )  ) / e1u(ji,jj) 
    384                zv_trd(ji,jj) = zv_trd(ji,jj) - grav * (  sshn(ji  ,jj+1) - sshn(ji  ,jj  )  ) / e2v(ji,jj) 
    385             END DO 
    386          END DO 
     374      IF( .NOT.ln_linssh ) THEN                 ! Variable volume : remove surface pressure gradient 
     375        IF( ln_wd ) THEN                        ! Calculating and applying W/D gravity filters 
     376          wduflt1(:,:) = 1.0_wp 
     377          wdvflt1(:,:) = 1.0_wp 
     378          DO jj = 2, jpjm1 
     379             DO ji = 2, jpim1 
     380                ll_tmp1 = MIN(sshn(ji,jj), sshn(ji+1,jj)) > MAX(-bathy(ji,jj), -bathy(ji+1,jj))   & 
     381                        & .and. MAX(sshn(ji,jj) + bathy(ji,jj), sshn(ji+1,jj) + bathy(ji+1,jj))   & 
     382                        &  > rn_wdmin1 + rn_wdmin2 
     383                ll_tmp2 = MAX(sshn(ji,jj), sshn(ji+1,jj)) > MAX(-bathy(ji,jj), -bathy(ji+1,jj))   & 
     384                        &                                   + rn_wdmin1 + rn_wdmin2 
     385                IF(ll_tmp1) THEN 
     386                  zcpx(ji,jj)    = 1.0_wp 
     387                ELSEIF(ll_tmp2) THEN 
     388                   ! no worries about sshn(ji+1,jj)-sshn(ji,jj) = 0, it won't happen here 
     389                  zcpx(ji,jj) = ABS((sshn(ji+1,jj) + bathy(ji+1,jj) - sshn(ji,jj) - bathy(ji,jj)) & 
     390                        &          /(sshn(ji+1,jj) - sshn(ji,jj))) 
     391                ELSE 
     392                  zcpx(ji,jj)    = 0._wp 
     393                  wduflt1(ji,jj) = 0.0_wp 
     394                END IF 
     395 
     396                ll_tmp1 = MIN(sshn(ji,jj), sshn(ji,jj+1)) > MAX(-bathy(ji,jj), -bathy(ji,jj+1))   & 
     397                        & .and. MAX(sshn(ji,jj) + bathy(ji,jj), sshn(ji,jj+1) + bathy(ji,jj+1))   & 
     398                        &  > rn_wdmin1 + rn_wdmin2 
     399                ll_tmp2 = MAX(sshn(ji,jj), sshn(ji,jj+1)) > MAX(-bathy(ji,jj), -bathy(ji,jj+1))   & 
     400                        &                                   + rn_wdmin1 + rn_wdmin2 
     401                IF(ll_tmp1) THEN 
     402                   zcpy(ji,jj)    = 1.0_wp 
     403                ELSEIF(ll_tmp2) THEN 
     404                   ! no worries about sshn(ji,jj+1)-sshn(ji,jj) = 0, it won't happen here 
     405                  zcpy(ji,jj) = ABS((sshn(ji,jj+1) + bathy(ji,jj+1) - sshn(ji,jj) - bathy(ji,jj)) & 
     406                        &          /(sshn(ji,jj+1) - sshn(ji,jj))) 
     407                ELSE 
     408                  zcpy(ji,jj)    = 0._wp 
     409                  wdvflt1(ji,jj) = 0.0_wp 
     410                ENDIF 
     411 
     412             END DO 
     413           END DO 
     414 
     415           CALL lbc_lnk( zcpx, 'U', 1._wp )    ;   CALL lbc_lnk( zcpy, 'V', 1._wp ) 
     416 
     417           DO jj = 2, jpjm1 
     418              DO ji = 2, jpim1 
     419                 zu_trd(ji,jj) = ( zu_trd(ji,jj) - grav * ( sshn(ji+1,jj  ) - sshn(ji  ,jj ) )   & 
     420                        &                        * r1_e1u(ji,jj) ) * zcpx(ji,jj) * wduflt1(ji,jj) 
     421                 zv_trd(ji,jj) = ( zv_trd(ji,jj) - grav * ( sshn(ji  ,jj+1) - sshn(ji  ,jj ) )   & 
     422                        &                        * r1_e2v(ji,jj) ) * zcpy(ji,jj) * wdvflt1(ji,jj) 
     423              END DO 
     424           END DO 
     425 
     426         ELSE 
     427 
     428           DO jj = 2, jpjm1 
     429              DO ji = fs_2, fs_jpim1   ! vector opt. 
     430                 zu_trd(ji,jj) = zu_trd(ji,jj) - grav * (  sshn(ji+1,jj  ) - sshn(ji  ,jj  )  ) * r1_e1u(ji,jj) 
     431                 zv_trd(ji,jj) = zv_trd(ji,jj) - grav * (  sshn(ji  ,jj+1) - sshn(ji  ,jj  )  ) * r1_e2v(ji,jj)  
     432              END DO 
     433           END DO 
     434        ENDIF 
     435 
    387436      ENDIF 
    388437 
    389438      DO jj = 2, jpjm1                          ! Remove coriolis term (and possibly spg) from barotropic trend 
    390439         DO ji = fs_2, fs_jpim1 
    391              zu_frc(ji,jj) = zu_frc(ji,jj) - zu_trd(ji,jj) * umask(ji,jj,1) 
    392              zv_frc(ji,jj) = zv_frc(ji,jj) - zv_trd(ji,jj) * vmask(ji,jj,1) 
     440             zu_frc(ji,jj) = zu_frc(ji,jj) - zu_trd(ji,jj) * ssumask(ji,jj) 
     441             zv_frc(ji,jj) = zv_frc(ji,jj) - zv_trd(ji,jj) * ssvmask(ji,jj) 
    393442          END DO 
    394443      END DO  
     
    416465      ! 
    417466      ! Note that the "unclipped" bottom friction parameter is used even with explicit drag 
    418       zu_frc(:,:) = zu_frc(:,:) + hur(:,:) * bfrua(:,:) * zwx(:,:) 
    419       zv_frc(:,:) = zv_frc(:,:) + hvr(:,:) * bfrva(:,:) * zwy(:,:) 
     467      IF( ln_wd ) THEN 
     468        zu_frc(:,:) = zu_frc(:,:) + MAX(r1_hu_n(:,:) * bfrua(:,:),-1._wp / rdtbt) * zwx(:,:) 
     469        zv_frc(:,:) = zv_frc(:,:) + MAX(r1_hv_n(:,:) * bfrva(:,:),-1._wp / rdtbt) * zwy(:,:) 
     470      ELSE 
     471        zu_frc(:,:) = zu_frc(:,:) + r1_hu_n(:,:) * bfrua(:,:) * zwx(:,:) 
     472        zv_frc(:,:) = zv_frc(:,:) + r1_hv_n(:,:) * bfrva(:,:) * zwy(:,:) 
     473      END IF 
     474      ! 
     475      !                                         ! Add top stress contribution from baroclinic velocities:       
     476      IF (ln_bt_fw) THEN 
     477         DO jj = 2, jpjm1 
     478            DO ji = fs_2, fs_jpim1   ! vector opt. 
     479               iktu = miku(ji,jj) 
     480               iktv = mikv(ji,jj) 
     481               zwx(ji,jj) = un(ji,jj,iktu) - un_b(ji,jj) ! NOW top baroclinic velocities 
     482               zwy(ji,jj) = vn(ji,jj,iktv) - vn_b(ji,jj) 
     483            END DO 
     484         END DO 
     485      ELSE 
     486         DO jj = 2, jpjm1 
     487            DO ji = fs_2, fs_jpim1   ! vector opt. 
     488               iktu = miku(ji,jj) 
     489               iktv = mikv(ji,jj) 
     490               zwx(ji,jj) = ub(ji,jj,iktu) - ub_b(ji,jj) ! BEFORE top baroclinic velocities 
     491               zwy(ji,jj) = vb(ji,jj,iktv) - vb_b(ji,jj) 
     492            END DO 
     493         END DO 
     494      ENDIF 
     495      ! 
     496      ! Note that the "unclipped" top friction parameter is used even with explicit drag 
     497      zu_frc(:,:) = zu_frc(:,:) + r1_hu_n(:,:) * tfrua(:,:) * zwx(:,:) 
     498      zv_frc(:,:) = zv_frc(:,:) + r1_hv_n(:,:) * tfrva(:,:) * zwy(:,:) 
    420499      !        
    421500      IF (ln_bt_fw) THEN                        ! Add wind forcing 
    422          zu_frc(:,:) =  zu_frc(:,:) + zraur * utau(:,:) * hur(:,:) 
    423          zv_frc(:,:) =  zv_frc(:,:) + zraur * vtau(:,:) * hvr(:,:) 
     501         zu_frc(:,:) =  zu_frc(:,:) + zraur * utau(:,:) * r1_hu_n(:,:) 
     502         zv_frc(:,:) =  zv_frc(:,:) + zraur * vtau(:,:) * r1_hv_n(:,:) 
    424503      ELSE 
    425          zu_frc(:,:) =  zu_frc(:,:) + zraur * z1_2 * ( utau_b(:,:) + utau(:,:) ) * hur(:,:) 
    426          zv_frc(:,:) =  zv_frc(:,:) + zraur * z1_2 * ( vtau_b(:,:) + vtau(:,:) ) * hvr(:,:) 
     504         zu_frc(:,:) =  zu_frc(:,:) + zraur * z1_2 * ( utau_b(:,:) + utau(:,:) ) * r1_hu_n(:,:) 
     505         zv_frc(:,:) =  zv_frc(:,:) + zraur * z1_2 * ( vtau_b(:,:) + vtau(:,:) ) * r1_hv_n(:,:) 
    427506      ENDIF   
    428507      ! 
     
    431510            DO jj = 2, jpjm1               
    432511               DO ji = fs_2, fs_jpim1   ! vector opt. 
    433                   zu_spg =  grav * (  ssh_ib (ji+1,jj  ) - ssh_ib (ji,jj) ) /e1u(ji,jj) 
    434                   zv_spg =  grav * (  ssh_ib (ji  ,jj+1) - ssh_ib (ji,jj) ) /e2v(ji,jj) 
     512                  zu_spg =  grav * (  ssh_ib (ji+1,jj  ) - ssh_ib (ji,jj) ) * r1_e1u(ji,jj) 
     513                  zv_spg =  grav * (  ssh_ib (ji  ,jj+1) - ssh_ib (ji,jj) ) * r1_e2v(ji,jj) 
    435514                  zu_frc(ji,jj) = zu_frc(ji,jj) + zu_spg 
    436515                  zv_frc(ji,jj) = zv_frc(ji,jj) + zv_spg 
     
    441520               DO ji = fs_2, fs_jpim1   ! vector opt. 
    442521                  zu_spg =  grav * z1_2 * (  ssh_ib (ji+1,jj  ) - ssh_ib (ji,jj)    & 
    443                       &                    + ssh_ibb(ji+1,jj  ) - ssh_ibb(ji,jj)  ) /e1u(ji,jj) 
     522                      &                    + ssh_ibb(ji+1,jj  ) - ssh_ibb(ji,jj)  ) * r1_e1u(ji,jj) 
    444523                  zv_spg =  grav * z1_2 * (  ssh_ib (ji  ,jj+1) - ssh_ib (ji,jj)    & 
    445                       &                    + ssh_ibb(ji  ,jj+1) - ssh_ibb(ji,jj)  ) /e2v(ji,jj) 
     524                      &                    + ssh_ibb(ji  ,jj+1) - ssh_ibb(ji,jj)  ) * r1_e2v(ji,jj) 
    446525                  zu_frc(ji,jj) = zu_frc(ji,jj) + zu_spg 
    447526                  zv_frc(ji,jj) = zv_frc(ji,jj) + zv_spg 
     
    454533      !                                         ! Surface net water flux and rivers 
    455534      IF (ln_bt_fw) THEN 
    456          zssh_frc(:,:) = zraur * ( emp(:,:) - rnf(:,:) + rdivisf * fwfisf(:,:) ) 
     535         zssh_frc(:,:) = zraur * ( emp(:,:) - rnf(:,:) + fwfisf(:,:) ) 
    457536      ELSE 
    458537         zssh_frc(:,:) = zraur * z1_2 * (  emp(:,:) + emp_b(:,:) - rnf(:,:) - rnf_b(:,:)   & 
    459                 &                        + rdivisf * ( fwfisf(:,:) + fwfisf_b(:,:) )       ) 
     538                &                        + fwfisf(:,:) + fwfisf_b(:,:)                     ) 
    460539      ENDIF 
    461540#if defined key_asminc 
     
    465544      ENDIF 
    466545#endif 
    467       !                                   !* Fill boundary data arrays with AGRIF 
    468       !                                   ! ------------------------------------- 
     546      !                                   !* Fill boundary data arrays for AGRIF 
     547      !                                   ! ------------------------------------ 
    469548#if defined key_agrif 
    470549         IF( .NOT.Agrif_Root() ) CALL agrif_dta_ts( kt ) 
     
    487566         vb_e   (:,:) = 0._wp 
    488567      ENDIF 
     568 
     569      IF( ln_wd ) THEN      !preserve the positivity of water depth 
     570                          !ssh[b,n,a] should have already been processed for this 
     571         sshbb_e(:,:) = MAX(sshbb_e(:,:), rn_wdmin1 - bathy(:,:)) 
     572         sshb_e(:,:)  = MAX(sshb_e(:,:) , rn_wdmin1 - bathy(:,:)) 
     573      ENDIF 
    489574      ! 
    490575      IF (ln_bt_fw) THEN                  ! FORWARD integration: start from NOW fields                     
    491          sshn_e(:,:) = sshn (:,:)             
    492          zun_e (:,:) = un_b (:,:)             
    493          zvn_e (:,:) = vn_b (:,:) 
    494          ! 
    495          hu_e  (:,:) = hu   (:,:)        
    496          hv_e  (:,:) = hv   (:,:)  
    497          hur_e (:,:) = hur  (:,:)     
    498          hvr_e (:,:) = hvr  (:,:) 
     576         sshn_e(:,:) =    sshn(:,:)             
     577         un_e  (:,:) =    un_b(:,:)             
     578         vn_e  (:,:) =    vn_b(:,:) 
     579         ! 
     580         hu_e  (:,:) =    hu_n(:,:)        
     581         hv_e  (:,:) =    hv_n(:,:)  
     582         hur_e (:,:) = r1_hu_n(:,:)     
     583         hvr_e (:,:) = r1_hv_n(:,:) 
    499584      ELSE                                ! CENTRED integration: start from BEFORE fields 
    500          sshn_e(:,:) = sshb (:,:) 
    501          zun_e (:,:) = ub_b (:,:)          
    502          zvn_e (:,:) = vb_b (:,:) 
    503          ! 
    504          hu_e  (:,:) = hu_b (:,:)        
    505          hv_e  (:,:) = hv_b (:,:)  
    506          hur_e (:,:) = hur_b(:,:)     
    507          hvr_e (:,:) = hvr_b(:,:) 
     585         sshn_e(:,:) =    sshb(:,:) 
     586         un_e  (:,:) =    ub_b(:,:)          
     587         vn_e  (:,:) =    vb_b(:,:) 
     588         ! 
     589         hu_e  (:,:) =    hu_b(:,:)        
     590         hv_e  (:,:) =    hv_b(:,:)  
     591         hur_e (:,:) = r1_hu_b(:,:)     
     592         hvr_e (:,:) = r1_hv_b(:,:) 
    508593      ENDIF 
    509594      ! 
     
    514599      va_b  (:,:) = 0._wp 
    515600      ssha  (:,:) = 0._wp       ! Sum for after averaged sea level 
    516       zu_sum(:,:) = 0._wp       ! Sum for now transport issued from ts loop 
    517       zv_sum(:,:) = 0._wp 
     601      un_adv(:,:) = 0._wp       ! Sum for now transport issued from ts loop 
     602      vn_adv(:,:) = 0._wp 
    518603      !                                             ! ==================== ! 
    519604      DO jn = 1, icycle                             !  sub-time-step loop  ! 
     
    523608         ! Update only tidal forcing at open boundaries 
    524609#if defined key_tide 
    525          IF ( lk_bdy .AND. lk_tide )      CALL bdy_dta_tides( kt, kit=jn, time_offset=(noffset+1) ) 
    526          IF ( ln_tide_pot .AND. lk_tide ) CALL upd_tide( kt, kit=jn, koffset=noffset ) 
     610         IF( lk_bdy      .AND. lk_tide )   CALL bdy_dta_tides( kt, kit=jn, time_offset= noffset+1 ) 
     611         IF( ln_tide_pot .AND. lk_tide )   CALL upd_tide     ( kt, kit=jn, time_offset= noffset  ) 
    527612#endif 
    528613         ! 
     
    539624 
    540625         ! Extrapolate barotropic velocities at step jit+0.5: 
    541          ua_e(:,:) = za1 * zun_e(:,:) + za2 * ub_e(:,:) + za3 * ubb_e(:,:) 
    542          va_e(:,:) = za1 * zvn_e(:,:) + za2 * vb_e(:,:) + za3 * vbb_e(:,:) 
    543  
    544          IF( lk_vvl ) THEN                                !* Update ocean depth (variable volume case only) 
     626         ua_e(:,:) = za1 * un_e(:,:) + za2 * ub_e(:,:) + za3 * ubb_e(:,:) 
     627         va_e(:,:) = za1 * vn_e(:,:) + za2 * vb_e(:,:) + za3 * vbb_e(:,:) 
     628 
     629         IF( .NOT.ln_linssh ) THEN                        !* Update ocean depth (variable volume case only) 
    545630            !                                             !  ------------------ 
    546631            ! Extrapolate Sea Level at step jit+0.5: 
     
    549634            DO jj = 2, jpjm1                                    ! Sea Surface Height at u- & v-points 
    550635               DO ji = 2, fs_jpim1   ! Vector opt. 
    551                   zwx(ji,jj) = z1_2 * umask(ji,jj,1)  * r1_e12u(ji,jj)     & 
    552                      &              * ( e12t(ji  ,jj) * zsshp2_e(ji  ,jj)  & 
    553                      &              +   e12t(ji+1,jj) * zsshp2_e(ji+1,jj) ) 
    554                   zwy(ji,jj) = z1_2 * vmask(ji,jj,1)  * r1_e12v(ji,jj)     & 
    555                      &              * ( e12t(ji,jj  ) * zsshp2_e(ji,jj  )  & 
    556                      &              +   e12t(ji,jj+1) * zsshp2_e(ji,jj+1) ) 
     636                  zwx(ji,jj) = z1_2 * ssumask(ji,jj)  * r1_e1e2u(ji,jj)     & 
     637                     &              * ( e1e2t(ji  ,jj) * zsshp2_e(ji  ,jj)  & 
     638                     &              +   e1e2t(ji+1,jj) * zsshp2_e(ji+1,jj) ) 
     639                  zwy(ji,jj) = z1_2 * ssvmask(ji,jj)  * r1_e1e2v(ji,jj)     & 
     640                     &              * ( e1e2t(ji,jj  ) * zsshp2_e(ji,jj  )  & 
     641                     &              +   e1e2t(ji,jj+1) * zsshp2_e(ji,jj+1) ) 
    557642               END DO 
    558643            END DO 
     
    561646            zhup2_e (:,:) = hu_0(:,:) + zwx(:,:)                ! Ocean depth at U- and V-points 
    562647            zhvp2_e (:,:) = hv_0(:,:) + zwy(:,:) 
     648            IF( ln_wd ) THEN 
     649              zhup2_e(:,:) = MAX(zhup2_e (:,:), rn_wdmin1) 
     650              zhvp2_e(:,:) = MAX(zhvp2_e (:,:), rn_wdmin1) 
     651            END IF 
    563652         ELSE 
    564             zhup2_e (:,:) = hu(:,:) 
    565             zhvp2_e (:,:) = hv(:,:) 
     653            zhup2_e (:,:) = hu_n(:,:) 
     654            zhvp2_e (:,:) = hv_n(:,:) 
    566655         ENDIF 
    567656         !                                                !* after ssh 
     
    574663         ! 
    575664#if defined key_agrif 
    576          ! Set fluxes during predictor step to ensure  
    577          ! volume conservation 
    578          IF( (.NOT.Agrif_Root()).AND.ln_bt_fw ) THEN 
     665         ! Set fluxes during predictor step to ensure volume conservation 
     666         IF( .NOT.Agrif_Root() .AND. ln_bt_fw ) THEN 
    579667            IF((nbondi == -1).OR.(nbondi == 2)) THEN 
    580668               DO jj=1,jpj 
     
    599687         ENDIF 
    600688#endif 
     689         IF( ln_wd ) CALL wad_lmt_bt(zwx, zwy, sshn_e, zssh_frc, rdtbt) 
    601690         ! 
    602691         ! Sum over sub-time-steps to compute advective velocities 
    603692         za2 = wgtbtp2(jn) 
    604          zu_sum  (:,:) = zu_sum  (:,:) + za2 * zwx  (:,:) / e2u  (:,:) 
    605          zv_sum  (:,:) = zv_sum  (:,:) + za2 * zwy  (:,:) / e1v  (:,:) 
     693         un_adv(:,:) = un_adv(:,:) + za2 * zwx(:,:) * r1_e2u(:,:) 
     694         vn_adv(:,:) = vn_adv(:,:) + za2 * zwy(:,:) * r1_e1v(:,:) 
    606695         ! 
    607696         ! Set next sea level: 
     
    609698            DO ji = fs_2, fs_jpim1   ! vector opt. 
    610699               zhdiv(ji,jj) = (   zwx(ji,jj) - zwx(ji-1,jj)   & 
    611                   &             + zwy(ji,jj) - zwy(ji,jj-1)   ) * r1_e12t(ji,jj) 
     700                  &             + zwy(ji,jj) - zwy(ji,jj-1)   ) * r1_e1e2t(ji,jj) 
    612701            END DO 
    613702         END DO 
    614          ssha_e(:,:) = (  sshn_e(:,:) - rdtbt * ( zssh_frc(:,:) + zhdiv(:,:) )  ) * tmask(:,:,1) 
     703         ssha_e(:,:) = (  sshn_e(:,:) - rdtbt * ( zssh_frc(:,:) + zhdiv(:,:) )  ) * ssmask(:,:) 
     704         IF( ln_wd ) ssha_e(:,:) = MAX(ssha_e(:,:), rn_wdmin1 - bathy(:,:))  
    615705         CALL lbc_lnk( ssha_e, 'T',  1._wp ) 
    616706 
    617707#if defined key_bdy 
    618          ! Duplicate sea level across open boundaries (this is only cosmetic if lk_vvl=.false.) 
    619          IF (lk_bdy) CALL bdy_ssh( ssha_e ) 
     708         ! Duplicate sea level across open boundaries (this is only cosmetic if linssh=T) 
     709         IF( lk_bdy )  CALL bdy_ssh( ssha_e ) 
    620710#endif 
    621711#if defined key_agrif 
    622          IF( .NOT.Agrif_Root() ) CALL agrif_ssh_ts( jn ) 
     712         IF( .NOT.Agrif_Root() )   CALL agrif_ssh_ts( jn ) 
    623713#endif 
    624714         !   
    625715         ! Sea Surface Height at u-,v-points (vvl case only) 
    626          IF ( lk_vvl ) THEN                                 
     716         IF( .NOT.ln_linssh ) THEN                                 
    627717            DO jj = 2, jpjm1 
    628718               DO ji = 2, jpim1      ! NO Vector Opt. 
    629                   zsshu_a(ji,jj) = z1_2 * umask(ji,jj,1)  * r1_e12u(ji,jj)  & 
    630                      &              * ( e12t(ji  ,jj  ) * ssha_e(ji  ,jj  ) & 
    631                      &              +   e12t(ji+1,jj  ) * ssha_e(ji+1,jj  ) ) 
    632                   zsshv_a(ji,jj) = z1_2 * vmask(ji,jj,1)  * r1_e12v(ji,jj)  & 
    633                      &              * ( e12t(ji  ,jj  ) * ssha_e(ji  ,jj  ) & 
    634                      &              +   e12t(ji  ,jj+1) * ssha_e(ji  ,jj+1) ) 
     719                  zsshu_a(ji,jj) = z1_2 * ssumask(ji,jj) * r1_e1e2u(ji,jj)    & 
     720                     &              * ( e1e2t(ji  ,jj  ) * ssha_e(ji  ,jj  ) & 
     721                     &              +   e1e2t(ji+1,jj  ) * ssha_e(ji+1,jj  ) ) 
     722                  zsshv_a(ji,jj) = z1_2 * ssvmask(ji,jj) * r1_e1e2v(ji,jj)    & 
     723                     &              * ( e1e2t(ji  ,jj  ) * ssha_e(ji  ,jj  ) & 
     724                     &              +   e1e2t(ji  ,jj+1) * ssha_e(ji  ,jj+1) ) 
    635725               END DO 
    636726            END DO 
     
    656746           za3=0.013_wp                     ! za3 = eps 
    657747         ENDIF 
    658  
     748         ! 
    659749         zsshp2_e(:,:) = za0 *  ssha_e(:,:) + za1 *  sshn_e (:,:) & 
    660750          &            + za2 *  sshb_e(:,:) + za3 *  sshbb_e(:,:) 
    661  
     751         IF( ln_wd ) THEN                   ! Calculating and applying W/D gravity filters 
     752           wduflt1(:,:) = 1._wp 
     753           wdvflt1(:,:) = 1._wp 
     754           DO jj = 2, jpjm1 
     755              DO ji = 2, jpim1 
     756                 ll_tmp1 = MIN( zsshp2_e(ji,jj), zsshp2_e(ji+1,jj) ) > MAX( -bathy(ji,jj), -bathy(ji+1,jj) ) & 
     757                        & .AND. MAX( zsshp2_e(ji,jj) + bathy(ji,jj), zsshp2_e(ji+1,jj) + bathy(ji+1,jj) )    & 
     758                        &                                  > rn_wdmin1 + rn_wdmin2 
     759                 ll_tmp2 = MAX( zsshp2_e(ji,jj), zsshp2_e(ji+1,jj) ) > MAX( -bathy(ji,jj), -bathy(ji+1,jj) ) & 
     760                        &                                  + rn_wdmin1 + rn_wdmin2 
     761                 IF(ll_tmp1) THEN 
     762                    zcpx(ji,jj) = 1._wp 
     763                 ELSE IF(ll_tmp2) THEN 
     764                    ! no worries about zsshp2_e(ji+1,jj)-zsshp2_e(ji,jj) = 0, it won't happen here 
     765                    zcpx(ji,jj) = ABS( (zsshp2_e(ji+1,jj) + bathy(ji+1,jj) - zsshp2_e(ji,jj) - bathy(ji,jj)) & 
     766                        &             / (zsshp2_e(ji+1,jj) - zsshp2_e(ji,jj)) ) 
     767                 ELSE 
     768                    zcpx(ji,jj)    = 0._wp 
     769                    wduflt1(ji,jj) = 0._wp 
     770                 END IF 
     771 
     772                 ll_tmp1 = MIN( zsshp2_e(ji,jj), zsshp2_e(ji,jj+1) ) > MAX( -bathy(ji,jj), -bathy(ji,jj+1) ) & 
     773                        & .AND. MAX( zsshp2_e(ji,jj) + bathy(ji,jj), zsshp2_e(ji,jj+1) + bathy(ji,jj+1) )    & 
     774                        &                                  > rn_wdmin1 + rn_wdmin2 
     775                 ll_tmp2 = MAX( zsshp2_e(ji,jj), zsshp2_e(ji,jj+1) ) > MAX( -bathy(ji,jj), -bathy(ji,jj+1) ) & 
     776                        &                                  + rn_wdmin1 + rn_wdmin2 
     777                 IF(ll_tmp1) THEN 
     778                    zcpy(ji,jj) = 1._wp 
     779                 ELSE IF(ll_tmp2) THEN 
     780                    ! no worries about zsshp2_e(ji,jj+1)-zsshp2_e(ji,jj) = 0, it won't happen here 
     781                    zcpy(ji,jj) = ABS( (zsshp2_e(ji,jj+1) + bathy(ji,jj+1) - zsshp2_e(ji,jj) - bathy(ji,jj)) & 
     782                        &             / (zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj)) ) 
     783                 ELSE 
     784                    zcpy(ji,jj)    = 0._wp 
     785                    wdvflt1(ji,jj) = 0._wp 
     786                 END IF 
     787              END DO 
     788            END DO 
     789            CALL lbc_lnk( zcpx, 'U', 1._wp )    ;   CALL lbc_lnk( zcpy, 'V', 1._wp ) 
     790         ENDIF 
    662791         ! 
    663792         ! Compute associated depths at U and V points: 
    664          IF ( lk_vvl.AND.(.NOT.ln_dynadv_vec) ) THEN       
     793         IF( .NOT.ln_linssh  .AND. .NOT.ln_dynadv_vec ) THEN   !* Vector form 
    665794            !                                         
    666795            DO jj = 2, jpjm1                             
    667796               DO ji = 2, jpim1 
    668                   zx1 = z1_2 * umask(ji  ,jj,1) *  r1_e12u(ji  ,jj)    & 
    669                      &      * ( e12t(ji  ,jj  ) * zsshp2_e(ji  ,jj)    & 
    670                      &      +   e12t(ji+1,jj  ) * zsshp2_e(ji+1,jj  ) ) 
    671                   zy1 = z1_2 * vmask(ji  ,jj,1) *  r1_e12v(ji  ,jj  )  & 
    672                      &       * ( e12t(ji ,jj  ) * zsshp2_e(ji  ,jj  )  & 
    673                      &       +   e12t(ji ,jj+1) * zsshp2_e(ji  ,jj+1) ) 
     797                  zx1 = z1_2 * ssumask(ji  ,jj) *  r1_e1e2u(ji  ,jj)    & 
     798                     &      * ( e1e2t(ji  ,jj  ) * zsshp2_e(ji  ,jj)    & 
     799                     &      +   e1e2t(ji+1,jj  ) * zsshp2_e(ji+1,jj  ) ) 
     800                  zy1 = z1_2 * ssvmask(ji  ,jj) *  r1_e1e2v(ji  ,jj  )  & 
     801                     &       * ( e1e2t(ji ,jj  ) * zsshp2_e(ji  ,jj  )  & 
     802                     &       +   e1e2t(ji ,jj+1) * zsshp2_e(ji  ,jj+1) ) 
    674803                  zhust_e(ji,jj) = hu_0(ji,jj) + zx1  
    675804                  zhvst_e(ji,jj) = hv_0(ji,jj) + zy1 
    676805               END DO 
    677806            END DO 
     807 
     808            IF( ln_wd ) THEN 
     809              zhust_e(:,:) = MAX(zhust_e (:,:), rn_wdmin1 ) 
     810              zhvst_e(:,:) = MAX(zhvst_e (:,:), rn_wdmin1 ) 
     811            END IF 
     812 
    678813         ENDIF 
    679814         ! 
    680815         ! Add Coriolis trend: 
    681          ! zwz array below or triads normally depend on sea level with key_vvl and should be updated 
     816         ! zwz array below or triads normally depend on sea level with ln_linssh=F and should be updated 
    682817         ! at each time step. We however keep them constant here for optimization. 
    683818         ! Recall that zwx and zwy arrays hold fluxes at this stage: 
     
    685820         ! zwy(:,:) = e1v(:,:) * va_e(:,:) * zhvp2_e(:,:) 
    686821         ! 
    687          IF( ln_dynvor_ene .OR. ln_dynvor_mix ) THEN      !==  energy conserving or mixed scheme  ==! 
     822         IF( ln_dynvor_ene .OR. ln_dynvor_mix ) THEN     !==  energy conserving or mixed scheme  ==! 
    688823            DO jj = 2, jpjm1 
    689824               DO ji = fs_2, fs_jpim1   ! vector opt. 
    690                   zy1 = ( zwy(ji  ,jj-1) + zwy(ji+1,jj-1) ) / e1u(ji,jj) 
    691                   zy2 = ( zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) / e1u(ji,jj) 
    692                   zx1 = ( zwx(ji-1,jj  ) + zwx(ji-1,jj+1) ) / e2v(ji,jj) 
    693                   zx2 = ( zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) / e2v(ji,jj) 
     825                  zy1 = ( zwy(ji  ,jj-1) + zwy(ji+1,jj-1) ) * r1_e1u(ji,jj) 
     826                  zy2 = ( zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) * r1_e1u(ji,jj) 
     827                  zx1 = ( zwx(ji-1,jj  ) + zwx(ji-1,jj+1) ) * r1_e2v(ji,jj) 
     828                  zx2 = ( zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) * r1_e2v(ji,jj) 
    694829                  zu_trd(ji,jj) = z1_4 * ( zwz(ji  ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 
    695830                  zv_trd(ji,jj) =-z1_4 * ( zwz(ji-1,jj  ) * zx1 + zwz(ji,jj) * zx2 ) 
     
    697832            END DO 
    698833            ! 
    699          ELSEIF ( ln_dynvor_ens ) THEN                    !==  enstrophy conserving scheme  ==! 
     834         ELSEIF ( ln_dynvor_ens ) THEN                   !==  enstrophy conserving scheme  ==! 
    700835            DO jj = 2, jpjm1 
    701836               DO ji = fs_2, fs_jpim1   ! vector opt. 
    702837                  zy1 =   z1_8 * ( zwy(ji  ,jj-1) + zwy(ji+1,jj-1) & 
    703                    &             + zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) / e1u(ji,jj) 
     838                   &             + zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) * r1_e1u(ji,jj) 
    704839                  zx1 = - z1_8 * ( zwx(ji-1,jj  ) + zwx(ji-1,jj+1) & 
    705                    &             + zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) / e2v(ji,jj) 
     840                   &             + zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) * r1_e2v(ji,jj) 
    706841                  zu_trd(ji,jj)  = zy1 * ( zwz(ji  ,jj-1) + zwz(ji,jj) ) 
    707842                  zv_trd(ji,jj)  = zx1 * ( zwz(ji-1,jj  ) + zwz(ji,jj) ) 
     
    709844            END DO 
    710845            ! 
    711          ELSEIF ( ln_dynvor_een .or. ln_dynvor_een_old ) THEN !==  energy and enstrophy conserving scheme  ==! 
     846         ELSEIF ( ln_dynvor_een ) THEN                  !==  energy and enstrophy conserving scheme  ==! 
    712847            DO jj = 2, jpjm1 
    713848               DO ji = fs_2, fs_jpim1   ! vector opt. 
    714                   zu_trd(ji,jj) = + z1_12 / e1u(ji,jj) * (  ftne(ji,jj  ) * zwy(ji  ,jj  ) & 
    715                      &                                    + ftnw(ji+1,jj) * zwy(ji+1,jj  ) & 
    716                      &                                    + ftse(ji,jj  ) * zwy(ji  ,jj-1) &  
    717                      &                                    + ftsw(ji+1,jj) * zwy(ji+1,jj-1) ) 
    718                   zv_trd(ji,jj) = - z1_12 / e2v(ji,jj) * (  ftsw(ji,jj+1) * zwx(ji-1,jj+1) &  
    719                      &                                    + ftse(ji,jj+1) * zwx(ji  ,jj+1) & 
    720                      &                                    + ftnw(ji,jj  ) * zwx(ji-1,jj  ) &  
    721                      &                                    + ftne(ji,jj  ) * zwx(ji  ,jj  ) ) 
     849                  zu_trd(ji,jj) = + z1_12 * r1_e1u(ji,jj) * (  ftne(ji,jj  ) * zwy(ji  ,jj  ) & 
     850                     &                                       + ftnw(ji+1,jj) * zwy(ji+1,jj  ) & 
     851                     &                                       + ftse(ji,jj  ) * zwy(ji  ,jj-1) &  
     852                     &                                       + ftsw(ji+1,jj) * zwy(ji+1,jj-1) ) 
     853                  zv_trd(ji,jj) = - z1_12 * r1_e2v(ji,jj) * (  ftsw(ji,jj+1) * zwx(ji-1,jj+1) &  
     854                     &                                       + ftse(ji,jj+1) * zwx(ji  ,jj+1) & 
     855                     &                                       + ftnw(ji,jj  ) * zwx(ji-1,jj  ) &  
     856                     &                                       + ftne(ji,jj  ) * zwx(ji  ,jj  ) ) 
    722857               END DO 
    723858            END DO 
     
    729864            DO jj = 2, jpjm1 
    730865               DO ji = fs_2, fs_jpim1   ! vector opt. 
    731                   zu_spg = grav * ( pot_astro(ji+1,jj) - pot_astro(ji,jj) ) / e1u(ji,jj) 
    732                   zv_spg = grav * ( pot_astro(ji,jj+1) - pot_astro(ji,jj) ) / e2v(ji,jj) 
     866                  zu_spg = grav * ( pot_astro(ji+1,jj) - pot_astro(ji,jj) ) * r1_e1u(ji,jj) 
     867                  zv_spg = grav * ( pot_astro(ji,jj+1) - pot_astro(ji,jj) ) * r1_e2v(ji,jj) 
    733868                  zu_trd(ji,jj) = zu_trd(ji,jj) + zu_spg 
    734869                  zv_trd(ji,jj) = zv_trd(ji,jj) + zv_spg 
     
    738873         ! 
    739874         ! Add bottom stresses: 
    740          zu_trd(:,:) = zu_trd(:,:) + bfrua(:,:) * zun_e(:,:) * hur_e(:,:) 
    741          zv_trd(:,:) = zv_trd(:,:) + bfrva(:,:) * zvn_e(:,:) * hvr_e(:,:) 
     875         zu_trd(:,:) = zu_trd(:,:) + bfrua(:,:) * un_e(:,:) * hur_e(:,:) 
     876         zv_trd(:,:) = zv_trd(:,:) + bfrva(:,:) * vn_e(:,:) * hvr_e(:,:) 
     877         ! 
     878         ! Add top stresses: 
     879         zu_trd(:,:) = zu_trd(:,:) + tfrua(:,:) * un_e(:,:) * hur_e(:,:) 
     880         zv_trd(:,:) = zv_trd(:,:) + tfrva(:,:) * vn_e(:,:) * hvr_e(:,:) 
    742881         ! 
    743882         ! Surface pressure trend: 
    744          DO jj = 2, jpjm1 
    745             DO ji = fs_2, fs_jpim1   ! vector opt. 
    746                ! Add surface pressure gradient 
    747                zu_spg = - grav * ( zsshp2_e(ji+1,jj) - zsshp2_e(ji,jj) ) / e1u(ji,jj) 
    748                zv_spg = - grav * ( zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj) ) / e2v(ji,jj) 
    749                zwx(ji,jj) = zu_spg 
    750                zwy(ji,jj) = zv_spg 
    751             END DO 
    752          END DO 
     883 
     884         IF( ln_wd ) THEN 
     885           DO jj = 2, jpjm1 
     886              DO ji = 2, jpim1  
     887                 ! Add surface pressure gradient 
     888                 zu_spg = - grav * ( zsshp2_e(ji+1,jj) - zsshp2_e(ji,jj) ) * r1_e1u(ji,jj) 
     889                 zv_spg = - grav * ( zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj) ) * r1_e2v(ji,jj) 
     890                 zwx(ji,jj) = zu_spg * zcpx(ji,jj)  
     891                 zwy(ji,jj) = zv_spg * zcpy(ji,jj) 
     892              END DO 
     893           END DO 
     894         ELSE 
     895           DO jj = 2, jpjm1 
     896              DO ji = fs_2, fs_jpim1   ! vector opt. 
     897                 ! Add surface pressure gradient 
     898                 zu_spg = - grav * ( zsshp2_e(ji+1,jj) - zsshp2_e(ji,jj) ) * r1_e1u(ji,jj) 
     899                 zv_spg = - grav * ( zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj) ) * r1_e2v(ji,jj) 
     900                 zwx(ji,jj) = zu_spg 
     901                 zwy(ji,jj) = zv_spg 
     902              END DO 
     903           END DO 
     904         END IF 
     905 
    753906         ! 
    754907         ! Set next velocities: 
    755          IF( ln_dynadv_vec .OR. (.NOT. lk_vvl) ) THEN    ! Vector form 
     908         IF( ln_dynadv_vec .OR. ln_linssh ) THEN   !* Vector form 
    756909            DO jj = 2, jpjm1 
    757910               DO ji = fs_2, fs_jpim1   ! vector opt. 
    758                   ua_e(ji,jj) = (                                zun_e(ji,jj)   &  
     911                  ua_e(ji,jj) = (                                 un_e(ji,jj)   &  
    759912                            &     + rdtbt * (                      zwx(ji,jj)   & 
    760913                            &                                 + zu_trd(ji,jj)   & 
    761914                            &                                 + zu_frc(ji,jj) ) &  
    762                             &   ) * umask(ji,jj,1) 
    763  
    764                   va_e(ji,jj) = (                                zvn_e(ji,jj)   & 
     915                            &   ) * ssumask(ji,jj) 
     916 
     917                  va_e(ji,jj) = (                                 vn_e(ji,jj)   & 
    765918                            &     + rdtbt * (                      zwy(ji,jj)   & 
    766919                            &                                 + zv_trd(ji,jj)   & 
    767920                            &                                 + zv_frc(ji,jj) ) & 
    768                             &   ) * vmask(ji,jj,1) 
    769                END DO 
    770             END DO 
    771  
    772          ELSE                 ! Flux form 
     921                            &   ) * ssvmask(ji,jj) 
     922               END DO 
     923            END DO 
     924            ! 
     925         ELSE                                      !* Flux form 
    773926            DO jj = 2, jpjm1 
    774927               DO ji = fs_2, fs_jpim1   ! vector opt. 
    775928 
    776                   zhura = umask(ji,jj,1)/(hu_0(ji,jj) + zsshu_a(ji,jj) + 1._wp - umask(ji,jj,1)) 
    777                   zhvra = vmask(ji,jj,1)/(hv_0(ji,jj) + zsshv_a(ji,jj) + 1._wp - vmask(ji,jj,1)) 
    778  
    779                   ua_e(ji,jj) = (                hu_e(ji,jj)  *  zun_e(ji,jj)   &  
     929                  IF( ln_wd ) THEN 
     930                    zhura = MAX(hu_0(ji,jj) + zsshu_a(ji,jj), rn_wdmin1) 
     931                    zhvra = MAX(hv_0(ji,jj) + zsshv_a(ji,jj), rn_wdmin1) 
     932                  ELSE 
     933                    zhura = hu_0(ji,jj) + zsshu_a(ji,jj) 
     934                    zhvra = hv_0(ji,jj) + zsshv_a(ji,jj) 
     935                  END IF 
     936                  zhura = ssumask(ji,jj)/(zhura + 1._wp - ssumask(ji,jj)) 
     937                  zhvra = ssvmask(ji,jj)/(zhvra + 1._wp - ssvmask(ji,jj)) 
     938 
     939                  ua_e(ji,jj) = (                hu_e(ji,jj)  *   un_e(ji,jj)   &  
    780940                            &     + rdtbt * ( zhust_e(ji,jj)  *    zwx(ji,jj)   &  
    781941                            &               + zhup2_e(ji,jj)  * zu_trd(ji,jj)   & 
    782                             &               +      hu(ji,jj)  * zu_frc(ji,jj) ) & 
     942                            &               +    hu_n(ji,jj)  * zu_frc(ji,jj) ) & 
    783943                            &   ) * zhura 
    784944 
    785                   va_e(ji,jj) = (                hv_e(ji,jj)  *  zvn_e(ji,jj)   & 
     945                  va_e(ji,jj) = (                hv_e(ji,jj)  *   vn_e(ji,jj)   & 
    786946                            &     + rdtbt * ( zhvst_e(ji,jj)  *    zwy(ji,jj)   & 
    787947                            &               + zhvp2_e(ji,jj)  * zv_trd(ji,jj)   & 
    788                             &               +      hv(ji,jj)  * zv_frc(ji,jj) ) & 
     948                            &               +    hv_n(ji,jj)  * zv_frc(ji,jj) ) & 
    789949                            &   ) * zhvra 
    790950               END DO 
     
    792952         ENDIF 
    793953         ! 
    794          IF( lk_vvl ) THEN                             !* Update ocean depth (variable volume case only) 
    795             !                                          !  ----------------------------------------------         
    796             hu_e (:,:) = hu_0(:,:) + zsshu_a(:,:) 
    797             hv_e (:,:) = hv_0(:,:) + zsshv_a(:,:) 
    798             hur_e(:,:) = umask(:,:,1) / ( hu_e(:,:) + 1._wp - umask(:,:,1) ) 
    799             hvr_e(:,:) = vmask(:,:,1) / ( hv_e(:,:) + 1._wp - vmask(:,:,1) ) 
     954         IF( .NOT.ln_linssh ) THEN                     !* Update ocean depth (variable volume case only) 
     955            IF( ln_wd ) THEN 
     956              hu_e (:,:) = MAX(hu_0(:,:) + zsshu_a(:,:), rn_wdmin1) 
     957              hv_e (:,:) = MAX(hv_0(:,:) + zsshv_a(:,:), rn_wdmin1) 
     958            ELSE 
     959              hu_e (:,:) = hu_0(:,:) + zsshu_a(:,:) 
     960              hv_e (:,:) = hv_0(:,:) + zsshv_a(:,:) 
     961            END IF 
     962            hur_e(:,:) = ssumask(:,:) / ( hu_e(:,:) + 1._wp - ssumask(:,:) ) 
     963            hvr_e(:,:) = ssvmask(:,:) / ( hv_e(:,:) + 1._wp - ssvmask(:,:) ) 
    800964            ! 
    801965         ENDIF 
    802          !                                                 !* domain lateral boundary 
    803          !                                                 !  ----------------------- 
    804          ! 
     966         !                                             !* domain lateral boundary 
    805967         CALL lbc_lnk_multi( ua_e, 'U', -1._wp, va_e , 'V', -1._wp ) 
    806  
     968         ! 
    807969#if defined key_bdy   
    808                                                            ! open boundaries 
    809          IF( lk_bdy ) CALL bdy_dyn2d( jn, ua_e, va_e, zun_e, zvn_e, hur_e, hvr_e, ssha_e ) 
     970         !                                                 ! open boundaries 
     971         IF( lk_bdy )   CALL bdy_dyn2d( jn, ua_e, va_e, un_e, vn_e, hur_e, hvr_e, ssha_e ) 
    810972#endif 
    811973#if defined key_agrif                                                            
     
    815977         !                                             !  ---- 
    816978         ubb_e  (:,:) = ub_e  (:,:) 
    817          ub_e   (:,:) = zun_e (:,:) 
    818          zun_e  (:,:) = ua_e  (:,:) 
     979         ub_e   (:,:) = un_e (:,:) 
     980         un_e   (:,:) = ua_e  (:,:) 
    819981         ! 
    820982         vbb_e  (:,:) = vb_e  (:,:) 
    821          vb_e   (:,:) = zvn_e (:,:) 
    822          zvn_e  (:,:) = va_e  (:,:) 
     983         vb_e   (:,:) = vn_e (:,:) 
     984         vn_e   (:,:) = va_e  (:,:) 
    823985         ! 
    824986         sshbb_e(:,:) = sshb_e(:,:) 
     
    829991         !                                             !  ---------------------- 
    830992         za1 = wgtbtp1(jn)                                     
    831          IF (( ln_dynadv_vec ).OR. (.NOT. lk_vvl)) THEN    ! Sum velocities 
     993         IF( ln_dynadv_vec .OR. ln_linssh ) THEN    ! Sum velocities 
    832994            ua_b  (:,:) = ua_b  (:,:) + za1 * ua_e  (:,:)  
    833995            va_b  (:,:) = va_b  (:,:) + za1 * va_e  (:,:)  
    834          ELSE                                ! Sum transports 
     996         ELSE                                              ! Sum transports 
    835997            ua_b  (:,:) = ua_b  (:,:) + za1 * ua_e  (:,:) * hu_e (:,:) 
    836998            va_b  (:,:) = va_b  (:,:) + za1 * va_e  (:,:) * hv_e (:,:) 
     
    8451007      ! ----------------------------------------------------------------------------- 
    8461008      ! 
    847       ! At this stage ssha holds a time averaged value 
    848       !                                                ! Sea Surface Height at u-,v- and f-points 
    849       IF( lk_vvl ) THEN                                ! (required only in key_vvl case) 
    850          DO jj = 1, jpjm1 
    851             DO ji = 1, jpim1      ! NO Vector Opt. 
    852                zsshu_a(ji,jj) = z1_2 * umask(ji,jj,1)  * r1_e12u(ji,jj) & 
    853                   &              * ( e12t(ji  ,jj) * ssha(ji  ,jj)    & 
    854                   &              +   e12t(ji+1,jj) * ssha(ji+1,jj) ) 
    855                zsshv_a(ji,jj) = z1_2 * vmask(ji,jj,1)  * r1_e12v(ji,jj) & 
    856                   &              * ( e12t(ji,jj  ) * ssha(ji,jj  )    & 
    857                   &              +   e12t(ji,jj+1) * ssha(ji,jj+1) ) 
    858             END DO 
    859          END DO 
    860          CALL lbc_lnk_multi( zsshu_a, 'U', 1._wp, zsshv_a, 'V', 1._wp ) ! Boundary conditions 
    861       ENDIF 
    862       ! 
    8631009      ! Set advection velocity correction: 
    864       IF (((kt==nit000).AND.(neuler==0)).OR.(.NOT.ln_bt_fw)) THEN      
    865          un_adv(:,:) = zu_sum(:,:)*hur(:,:) 
    866          vn_adv(:,:) = zv_sum(:,:)*hvr(:,:) 
     1010      zwx(:,:) = un_adv(:,:) 
     1011      zwy(:,:) = vn_adv(:,:) 
     1012      IF( ( kt == nit000 .AND. neuler==0 ) .OR. .NOT.ln_bt_fw ) THEN      
     1013         un_adv(:,:) = zwx(:,:) * r1_hu_n(:,:) 
     1014         vn_adv(:,:) = zwy(:,:) * r1_hv_n(:,:) 
    8671015      ELSE 
    868          un_adv(:,:) = z1_2 * ( ub2_b(:,:) + zu_sum(:,:)) * hur(:,:) 
    869          vn_adv(:,:) = z1_2 * ( vb2_b(:,:) + zv_sum(:,:)) * hvr(:,:) 
     1016         un_adv(:,:) = z1_2 * ( ub2_b(:,:) + zwx(:,:) ) * r1_hu_n(:,:) 
     1017         vn_adv(:,:) = z1_2 * ( vb2_b(:,:) + zwy(:,:) ) * r1_hv_n(:,:) 
    8701018      END IF 
    8711019 
    872       IF (ln_bt_fw) THEN ! Save integrated transport for next computation 
    873          ub2_b(:,:) = zu_sum(:,:) 
    874          vb2_b(:,:) = zv_sum(:,:) 
     1020      IF( ln_bt_fw ) THEN ! Save integrated transport for next computation 
     1021         ub2_b(:,:) = zwx(:,:) 
     1022         vb2_b(:,:) = zwy(:,:) 
    8751023      ENDIF 
    8761024      ! 
    8771025      ! Update barotropic trend: 
    878       IF (( ln_dynadv_vec ).OR. (.NOT. lk_vvl)) THEN 
     1026      IF( ln_dynadv_vec .OR. ln_linssh ) THEN 
    8791027         DO jk=1,jpkm1 
    8801028            ua(:,:,jk) = ua(:,:,jk) + ( ua_b(:,:) - ub_b(:,:) ) * z1_2dt_b 
     
    8821030         END DO 
    8831031      ELSE 
     1032         ! At this stage, ssha has been corrected: compute new depths at velocity points 
     1033         DO jj = 1, jpjm1 
     1034            DO ji = 1, jpim1      ! NO Vector Opt. 
     1035               zsshu_a(ji,jj) = z1_2 * umask(ji,jj,1)  * r1_e1e2u(ji,jj) & 
     1036                  &              * ( e1e2t(ji  ,jj) * ssha(ji  ,jj)    & 
     1037                  &              +   e1e2t(ji+1,jj) * ssha(ji+1,jj) ) 
     1038               zsshv_a(ji,jj) = z1_2 * vmask(ji,jj,1)  * r1_e1e2v(ji,jj) & 
     1039                  &              * ( e1e2t(ji,jj  ) * ssha(ji,jj  )    & 
     1040                  &              +   e1e2t(ji,jj+1) * ssha(ji,jj+1) ) 
     1041            END DO 
     1042         END DO 
     1043         CALL lbc_lnk_multi( zsshu_a, 'U', 1._wp, zsshv_a, 'V', 1._wp ) ! Boundary conditions 
     1044         ! 
    8841045         DO jk=1,jpkm1 
    885             ua(:,:,jk) = ua(:,:,jk) + hur(:,:) * ( ua_b(:,:) - ub_b(:,:) * hu_b(:,:) ) * z1_2dt_b 
    886             va(:,:,jk) = va(:,:,jk) + hvr(:,:) * ( va_b(:,:) - vb_b(:,:) * hv_b(:,:) ) * z1_2dt_b 
     1046            ua(:,:,jk) = ua(:,:,jk) + r1_hu_n(:,:) * ( ua_b(:,:) - ub_b(:,:) * hu_b(:,:) ) * z1_2dt_b 
     1047            va(:,:,jk) = va(:,:,jk) + r1_hv_n(:,:) * ( va_b(:,:) - vb_b(:,:) * hv_b(:,:) ) * z1_2dt_b 
    8871048         END DO 
    8881049         ! Save barotropic velocities not transport: 
    889          ua_b  (:,:) =  ua_b(:,:) / ( hu_0(:,:) + zsshu_a(:,:) + 1._wp - umask(:,:,1) ) 
    890          va_b  (:,:) =  va_b(:,:) / ( hv_0(:,:) + zsshv_a(:,:) + 1._wp - vmask(:,:,1) ) 
     1050         ua_b(:,:) =  ua_b(:,:) / ( hu_0(:,:) + zsshu_a(:,:) + 1._wp - ssumask(:,:) ) 
     1051         va_b(:,:) =  va_b(:,:) / ( hv_0(:,:) + zsshv_a(:,:) + 1._wp - ssvmask(:,:) ) 
    8911052      ENDIF 
    8921053      ! 
    8931054      DO jk = 1, jpkm1 
    8941055         ! Correct velocities: 
    895          un(:,:,jk) = ( un(:,:,jk) + un_adv(:,:) - un_b(:,:) )*umask(:,:,jk) 
    896          vn(:,:,jk) = ( vn(:,:,jk) + vn_adv(:,:) - vn_b(:,:) )*vmask(:,:,jk) 
     1056         un(:,:,jk) = ( un(:,:,jk) + un_adv(:,:) - un_b(:,:) ) * umask(:,:,jk) 
     1057         vn(:,:,jk) = ( vn(:,:,jk) + vn_adv(:,:) - vn_b(:,:) ) * vmask(:,:,jk) 
    8971058         ! 
    8981059      END DO 
     1060      ! 
     1061      CALL iom_put(  "ubar", un_adv(:,:)      )    ! barotropic i-current 
     1062      CALL iom_put(  "vbar", vn_adv(:,:)      )    ! barotropic i-current 
    8991063      ! 
    9001064#if defined key_agrif 
    9011065      ! Save time integrated fluxes during child grid integration 
    902       ! (used to update coarse grid transports) 
    903       ! Useless with 2nd order momentum schemes 
    904       ! 
    905       IF ( (.NOT.Agrif_Root()).AND.(ln_bt_fw) ) THEN 
    906          IF ( Agrif_NbStepint().EQ.0 ) THEN 
    907             ub2_i_b(:,:) = 0.e0 
    908             vb2_i_b(:,:) = 0.e0 
     1066      ! (used to update coarse grid transports at next time step) 
     1067      ! 
     1068      IF( .NOT.Agrif_Root() .AND. ln_bt_fw ) THEN 
     1069         IF( Agrif_NbStepint() == 0 ) THEN 
     1070            ub2_i_b(:,:) = 0._wp 
     1071            vb2_i_b(:,:) = 0._wp 
    9091072         END IF 
    9101073         ! 
     
    9131076         vb2_i_b(:,:) = vb2_i_b(:,:) + za1 * vb2_b(:,:) 
    9141077      ENDIF 
    915       ! 
    916       ! 
    9171078#endif       
    918       ! 
    9191079      !                                   !* write time-spliting arrays in the restart 
    920       IF(lrst_oce .AND.ln_bt_fw)   CALL ts_rst( kt, 'WRITE' ) 
    921       ! 
    922       CALL wrk_dealloc( jpi, jpj, zsshp2_e, zhdiv ) 
    923       CALL wrk_dealloc( jpi, jpj, zu_trd, zv_trd, zun_e, zvn_e ) 
    924       CALL wrk_dealloc( jpi, jpj, zwx, zwy, zu_sum, zv_sum, zssh_frc, zu_frc, zv_frc ) 
    925       CALL wrk_dealloc( jpi, jpj, zhup2_e, zhvp2_e, zhust_e, zhvst_e ) 
    926       CALL wrk_dealloc( jpi, jpj, zsshu_a, zsshv_a                                   ) 
    927       CALL wrk_dealloc( jpi, jpj, zhf ) 
    928       ! 
     1080      IF( lrst_oce .AND.ln_bt_fw )   CALL ts_rst( kt, 'WRITE' ) 
     1081      ! 
     1082      CALL wrk_dealloc( jpi,jpj,   zsshp2_e, zhdiv ) 
     1083      CALL wrk_dealloc( jpi,jpj,   zu_trd, zv_trd ) 
     1084      CALL wrk_dealloc( jpi,jpj,   zwx, zwy, zssh_frc, zu_frc, zv_frc ) 
     1085      CALL wrk_dealloc( jpi,jpj,   zhup2_e, zhvp2_e, zhust_e, zhvst_e ) 
     1086      CALL wrk_dealloc( jpi,jpj,   zsshu_a, zsshv_a                                   ) 
     1087      CALL wrk_dealloc( jpi,jpj,   zhf ) 
     1088      IF( ln_wd ) CALL wrk_dealloc( jpi, jpj, zcpx, zcpy, wduflt1, wdvflt1 ) 
     1089      ! 
     1090      IF ( ln_diatmb ) THEN 
     1091         CALL iom_put( "baro_u" , un_b*umask(:,:,1)+zmdi*(1-umask(:,:,1 ) ) )  ! Barotropic  U Velocity 
     1092         CALL iom_put( "baro_v" , vn_b*vmask(:,:,1)+zmdi*(1-vmask(:,:,1 ) ) )  ! Barotropic  V Velocity 
     1093      ENDIF 
    9291094      IF( nn_timing == 1 )  CALL timing_stop('dyn_spg_ts') 
    9301095      ! 
    9311096   END SUBROUTINE dyn_spg_ts 
     1097 
    9321098 
    9331099   SUBROUTINE ts_wgt( ll_av, ll_fw, jpit, zwgt1, zwgt2) 
     
    10081174   END SUBROUTINE ts_wgt 
    10091175 
     1176 
    10101177   SUBROUTINE ts_rst( kt, cdrw ) 
    10111178      !!--------------------------------------------------------------------- 
     
    10611228   END SUBROUTINE ts_rst 
    10621229 
    1063    SUBROUTINE dyn_spg_ts_init( kt ) 
     1230 
     1231   SUBROUTINE dyn_spg_ts_init 
    10641232      !!--------------------------------------------------------------------- 
    10651233      !!                   ***  ROUTINE dyn_spg_ts_init  *** 
     
    10671235      !! ** Purpose : Set time splitting options 
    10681236      !!---------------------------------------------------------------------- 
    1069       INTEGER         , INTENT(in) ::   kt         ! ocean time-step 
    1070       ! 
    1071       INTEGER  :: ji ,jj 
    1072       INTEGER  ::   ios                 ! Local integer output status for namelist read 
    1073       REAL(wp) :: zxr2, zyr2, zcmax 
    1074       REAL(wp), POINTER, DIMENSION(:,:) :: zcu 
    1075       !! 
    1076       NAMELIST/namsplit/ ln_bt_fw, ln_bt_av, ln_bt_nn_auto, & 
    1077       &                  nn_baro, rn_bt_cmax, nn_bt_flt 
     1237      INTEGER  ::   ji ,jj              ! dummy loop indices 
     1238      REAL(wp) ::   zxr2, zyr2, zcmax   ! local scalar 
     1239      REAL(wp), POINTER, DIMENSION(:,:) ::   zcu 
    10781240      !!---------------------------------------------------------------------- 
    10791241      ! 
    1080       REWIND( numnam_ref )              ! Namelist namsplit in reference namelist : time splitting parameters 
    1081       READ  ( numnam_ref, namsplit, IOSTAT = ios, ERR = 901) 
    1082 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsplit in reference namelist', lwp ) 
    1083  
    1084       REWIND( numnam_cfg )              ! Namelist namsplit in configuration namelist : time splitting parameters 
    1085       READ  ( numnam_cfg, namsplit, IOSTAT = ios, ERR = 902 ) 
    1086 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsplit in configuration namelist', lwp ) 
    1087       IF(lwm) WRITE ( numond, namsplit ) 
    1088       ! 
    1089       !         ! Max courant number for ext. grav. waves 
    1090       ! 
    1091       CALL wrk_alloc( jpi, jpj, zcu ) 
    1092       ! 
    1093       IF (lk_vvl) THEN  
    1094          DO jj = 1, jpj 
    1095             DO ji =1, jpi 
    1096                zxr2 = 1./(e1t(ji,jj)*e1t(ji,jj)) 
    1097                zyr2 = 1./(e2t(ji,jj)*e2t(ji,jj)) 
    1098                zcu(ji,jj) = sqrt(grav*ht_0(ji,jj)*(zxr2 + zyr2) ) 
    1099             END DO 
     1242      ! Max courant number for ext. grav. waves 
     1243      ! 
     1244      CALL wrk_alloc( jpi,jpj,   zcu ) 
     1245      ! 
     1246      DO jj = 1, jpj 
     1247         DO ji =1, jpi 
     1248            zxr2 = r1_e1t(ji,jj) * r1_e1t(ji,jj) 
     1249            zyr2 = r1_e2t(ji,jj) * r1_e2t(ji,jj) 
     1250            zcu(ji,jj) = SQRT( grav * ht_0(ji,jj) * (zxr2 + zyr2) ) 
    11001251         END DO 
    1101       ELSE 
    1102          DO jj = 1, jpj 
    1103             DO ji =1, jpi 
    1104                zxr2 = 1./(e1t(ji,jj)*e1t(ji,jj)) 
    1105                zyr2 = 1./(e2t(ji,jj)*e2t(ji,jj)) 
    1106                zcu(ji,jj) = sqrt(grav*ht(ji,jj)*(zxr2 + zyr2) ) 
    1107             END DO 
    1108          END DO 
    1109       ENDIF 
    1110  
    1111       zcmax = MAXVAL(zcu(:,:)) 
     1252      END DO 
     1253      ! 
     1254      zcmax = MAXVAL( zcu(:,:) ) 
    11121255      IF( lk_mpp )   CALL mpp_max( zcmax ) 
    11131256 
    11141257      ! Estimate number of iterations to satisfy a max courant number= rn_bt_cmax 
    1115       IF (ln_bt_nn_auto) nn_baro = CEILING( rdt / rn_bt_cmax * zcmax) 
     1258      IF( ln_bt_auto )  nn_baro = CEILING( rdt / rn_bt_cmax * zcmax) 
    11161259       
    1117       rdtbt = rdt / FLOAT(nn_baro) 
     1260      rdtbt = rdt / REAL( nn_baro , wp ) 
    11181261      zcmax = zcmax * rdtbt 
    11191262                     ! Print results 
     
    11211264      IF(lwp) WRITE(numout,*) 'dyn_spg_ts : split-explicit free surface' 
    11221265      IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    1123       IF( ln_bt_nn_auto ) THEN 
    1124          IF(lwp) WRITE(numout,*) '     ln_ts_nn_auto=.true. Automatically set nn_baro ' 
     1266      IF( ln_bt_auto ) THEN 
     1267         IF(lwp) WRITE(numout,*) '     ln_ts_auto=.true. Automatically set nn_baro ' 
    11251268         IF(lwp) WRITE(numout,*) '     Max. courant number allowed: ', rn_bt_cmax 
    11261269      ELSE 
    1127          IF(lwp) WRITE(numout,*) '     ln_ts_nn_auto=.false.: Use nn_baro in namelist ' 
     1270         IF(lwp) WRITE(numout,*) '     ln_ts_auto=.false.: Use nn_baro in namelist ' 
    11281271      ENDIF 
    11291272 
     
    11431286#if defined key_agrif 
    11441287      ! Restrict the use of Agrif to the forward case only 
    1145       IF ((.NOT.ln_bt_fw ).AND.(.NOT.Agrif_Root())) CALL ctl_stop( 'AGRIF not implemented if ln_bt_fw=.FALSE.' ) 
     1288      IF( .NOT.ln_bt_fw .AND. .NOT.Agrif_Root() )  CALL ctl_stop( 'AGRIF not implemented if ln_bt_fw=.FALSE.' ) 
    11461289#endif 
    11471290      ! 
    11481291      IF(lwp) WRITE(numout,*)    '     Time filter choice, nn_bt_flt: ', nn_bt_flt 
    11491292      SELECT CASE ( nn_bt_flt ) 
    1150            CASE( 0 )  ;   IF(lwp) WRITE(numout,*) '           Dirac' 
    1151            CASE( 1 )  ;   IF(lwp) WRITE(numout,*) '           Boxcar: width = nn_baro' 
    1152            CASE( 2 )  ;   IF(lwp) WRITE(numout,*) '           Boxcar: width = 2*nn_baro'  
    1153            CASE DEFAULT   ;   CALL ctl_stop( 'unrecognised value for nn_bt_flt: should 0,1,2' ) 
     1293         CASE( 0 )      ;   IF(lwp) WRITE(numout,*) '           Dirac' 
     1294         CASE( 1 )      ;   IF(lwp) WRITE(numout,*) '           Boxcar: width = nn_baro' 
     1295         CASE( 2 )      ;   IF(lwp) WRITE(numout,*) '           Boxcar: width = 2*nn_baro'  
     1296         CASE DEFAULT   ;   CALL ctl_stop( 'unrecognised value for nn_bt_flt: should 0,1,2' ) 
    11541297      END SELECT 
    11551298      ! 
     
    11591302      IF(lwp) WRITE(numout,*) '     Maximum Courant number is   :', zcmax 
    11601303      ! 
    1161       IF ((.NOT.ln_bt_av).AND.(.NOT.ln_bt_fw)) THEN 
     1304      IF( .NOT.ln_bt_av .AND. .NOT.ln_bt_fw ) THEN 
    11621305         CALL ctl_stop( 'dynspg_ts ERROR: No time averaging => only forward integration is possible' ) 
    11631306      ENDIF 
    1164       IF ( zcmax>0.9_wp ) THEN 
     1307      IF( zcmax>0.9_wp ) THEN 
    11651308         CALL ctl_stop( 'dynspg_ts ERROR: Maximum Courant number is greater than 0.9: Inc. nn_baro !' )           
    11661309      ENDIF 
    11671310      ! 
    1168       CALL wrk_dealloc( jpi, jpj, zcu ) 
     1311      CALL wrk_dealloc( jpi,jpj,  zcu ) 
    11691312      ! 
    11701313   END SUBROUTINE dyn_spg_ts_init 
    11711314 
    1172 #else 
    1173    !!--------------------------------------------------------------------------- 
    1174    !!   Default case :   Empty module   No split explicit free surface 
    1175    !!--------------------------------------------------------------------------- 
    1176 CONTAINS 
    1177    INTEGER FUNCTION dyn_spg_ts_alloc()    ! Dummy function 
    1178       dyn_spg_ts_alloc = 0 
    1179    END FUNCTION dyn_spg_ts_alloc 
    1180    SUBROUTINE dyn_spg_ts( kt )            ! Empty routine 
    1181       INTEGER, INTENT(in) :: kt 
    1182       WRITE(*,*) 'dyn_spg_ts: You should not have seen this print! error?', kt 
    1183    END SUBROUTINE dyn_spg_ts 
    1184    SUBROUTINE ts_rst( kt, cdrw )          ! Empty routine 
    1185       INTEGER         , INTENT(in) ::   kt         ! ocean time-step 
    1186       CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag 
    1187       WRITE(*,*) 'ts_rst    : You should not have seen this print! error?', kt, cdrw 
    1188    END SUBROUTINE ts_rst   
    1189    SUBROUTINE dyn_spg_ts_init( kt )       ! Empty routine 
    1190       INTEGER         , INTENT(in) ::   kt         ! ocean time-step 
    1191       WRITE(*,*) 'dyn_spg_ts_init   : You should not have seen this print! error?', kt 
    1192    END SUBROUTINE dyn_spg_ts_init 
    1193 #endif 
    1194     
    11951315   !!====================================================================== 
    11961316END MODULE dynspg_ts 
    1197  
    1198  
    1199  
Note: See TracChangeset for help on using the changeset viewer.