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 7646 for trunk/NEMOGCM/NEMO/OPA_SRC/DYN – NEMO

Ignore:
Timestamp:
2017-02-06T10:25:03+01:00 (7 years ago)
Author:
timgraham
Message:

Merge of dev_merge_2016 into trunk. UPDATE TO ARCHFILES NEEDED for XIOS2.
LIM_SRC_s/limrhg.F90 to follow in next commit due to change of kind (I'm unable to do it in this commit).
Merged using the following steps:

1) svn merge --reintegrate svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/trunk .
2) Resolve minor conflicts in sette.sh and namelist_cfg for ORCA2LIM3 (due to a change in trunk after branch was created)
3) svn commit
4) svn switch svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/trunk
5) svn merge svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/branches/2016/dev_merge_2016 .
6) At this stage I checked out a clean copy of the branch to compare against what is about to be committed to the trunk.
6) svn commit #Commit code to the trunk

In this commit I have also reverted a change to Fcheck_archfile.sh which was causing problems on the Paris machine.

Location:
trunk/NEMOGCM/NEMO/OPA_SRC/DYN
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv.F90

    r6140 r7646  
    106106         WRITE(numout,*) 
    107107         WRITE(numout,*) 'dyn_adv_init : choice/control of the momentum advection scheme' 
    108          WRITE(numout,*) '~~~~~~~~~~~' 
    109          WRITE(numout,*) '       Namelist namdyn_adv : chose a advection formulation & scheme for momentum' 
    110          WRITE(numout,*) '          Vector/flux form (T/F)                           ln_dynadv_vec  = ', ln_dynadv_vec 
    111          WRITE(numout,*) '          = 0 standard scheme  ; =1 Hollingsworth scheme   nn_dynkeg      = ', nn_dynkeg 
    112          WRITE(numout,*) '          2nd order centred advection scheme               ln_dynadv_cen2 = ', ln_dynadv_cen2 
    113          WRITE(numout,*) '          3rd order UBS advection scheme                   ln_dynadv_ubs  = ', ln_dynadv_ubs 
    114          WRITE(numout,*) '          Sub timestepping of vertical advection           ln_dynzad_zts  = ', ln_dynzad_zts 
     108         WRITE(numout,*) '~~~~~~~~~~~~' 
     109         WRITE(numout,*) '   Namelist namdyn_adv : chose a advection formulation & scheme for momentum' 
     110         WRITE(numout,*) '      Vector/flux form (T/F)                           ln_dynadv_vec  = ', ln_dynadv_vec 
     111         WRITE(numout,*) '      = 0 standard scheme  ; =1 Hollingsworth scheme   nn_dynkeg      = ', nn_dynkeg 
     112         WRITE(numout,*) '      2nd order centred advection scheme               ln_dynadv_cen2 = ', ln_dynadv_cen2 
     113         WRITE(numout,*) '      3rd order UBS advection scheme                   ln_dynadv_ubs  = ', ln_dynadv_ubs 
     114         WRITE(numout,*) '      Sub timestepping of vertical advection           ln_dynzad_zts  = ', ln_dynzad_zts 
    115115      ENDIF 
    116116 
     
    134134      IF(lwp) THEN                    ! Print the choice 
    135135         WRITE(numout,*) 
    136          IF( nadv ==  0 )   WRITE(numout,*) '         vector form : keg + zad + vor is used'  
    137          IF( nadv ==  1 )   WRITE(numout,*) '         vector form : keg + zad_zts + vor is used' 
     136         IF( nadv ==  0 )   WRITE(numout,*) '      ===>>   vector form : keg + zad + vor is used'  
     137         IF( nadv ==  1 )   WRITE(numout,*) '      ===>>   vector form : keg + zad_zts + vor is used' 
    138138         IF( nadv ==  0 .OR. nadv ==  1 ) THEN 
    139             IF( nn_dynkeg == nkeg_C2  )   WRITE(numout,*) 'with Centered standard keg scheme' 
    140             IF( nn_dynkeg == nkeg_HW  )   WRITE(numout,*) 'with Hollingsworth keg scheme' 
     139            IF( nn_dynkeg == nkeg_C2  )   WRITE(numout,*) '              with Centered standard keg scheme' 
     140            IF( nn_dynkeg == nkeg_HW  )   WRITE(numout,*) '              with Hollingsworth keg scheme' 
    141141         ENDIF 
    142          IF( nadv ==  2 )   WRITE(numout,*) '         flux form   : 2nd order scheme is used' 
    143          IF( nadv ==  3 )   WRITE(numout,*) '         flux form   : UBS       scheme is used' 
     142         IF( nadv ==  2 )   WRITE(numout,*) '      ===>>   flux form   : 2nd order scheme is used' 
     143         IF( nadv ==  3 )   WRITE(numout,*) '      ===>>   flux form   : UBS       scheme is used' 
    144144      ENDIF 
    145145      ! 
  • trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90

    r6152 r7646  
    432432      INTEGER  ::   ji, jj, jk, jii, jjj                 ! dummy loop indices 
    433433      REAL(wp) ::   zcoef0, zuap, zvap, znad, ztmp       ! temporary scalars 
    434       LOGICAL  ::   ll_tmp1, ll_tmp2, ll_tmp3            ! local logical variables 
     434      LOGICAL  ::   ll_tmp1, ll_tmp2                     ! local logical variables 
    435435      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zhpi, zhpj 
    436436      REAL(wp), POINTER, DIMENSION(:,:)   ::  zcpx, zcpy !W/D pressure filter 
     
    438438      ! 
    439439      CALL wrk_alloc( jpi,jpj,jpk, zhpi, zhpj ) 
    440       IF(ln_wd) CALL wrk_alloc( jpi,jpj, zcpx, zcpy ) 
     440      IF( ln_wd ) CALL wrk_alloc( jpi,jpj, zcpx, zcpy ) 
    441441      ! 
    442442      IF( kt == nit000 ) THEN 
     
    451451      ENDIF 
    452452      ! 
    453       IF(ln_wd) THEN 
     453      IF( ln_wd ) THEN 
    454454        DO jj = 2, jpjm1 
    455455           DO ji = 2, jpim1  
    456              ll_tmp1 = MIN(sshn(ji,jj), sshn(ji+1,jj)) > MAX(-bathy(ji,jj), -bathy(ji+1,jj))  
    457              ll_tmp2 = MAX(sshn(ji,jj) + bathy(ji,jj), sshn(ji+1,jj) + bathy(ji+1,jj)) > rn_wdmin1 + rn_wdmin2 
    458              ll_tmp3 = MAX(sshn(ji,jj), sshn(ji+1,jj)) > MAX(-bathy(ji,jj), -bathy(ji+1,jj)) + & 
    459                                                        & rn_wdmin1 + rn_wdmin2 
    460  
    461              IF(ll_tmp1.AND.ll_tmp2) THEN 
     456             ll_tmp1 = MIN(   sshn(ji,jj)               ,   sshn(ji+1,jj) ) >                & 
     457                  &    MAX( -ht_wd(ji,jj)               , -ht_wd(ji+1,jj) ) .AND.            & 
     458                  &    MAX(   sshn(ji,jj) + ht_wd(ji,jj),   sshn(ji+1,jj) + ht_wd(ji+1,jj) ) & 
     459                  &                                                         > rn_wdmin1 + rn_wdmin2 
     460             ll_tmp2 = ( ABS( sshn(ji,jj)               -   sshn(ji+1,jj) ) > 1.E-12 ) .AND. (             & 
     461                  &    MAX(   sshn(ji,jj)               ,   sshn(ji+1,jj) ) >                & 
     462                  &    MAX( -ht_wd(ji,jj)               , -ht_wd(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 ) 
     463 
     464             IF(ll_tmp1) THEN 
    462465               zcpx(ji,jj) = 1.0_wp 
    463                wduflt(ji,jj) = 1.0_wp 
    464              ELSE IF(ll_tmp3) THEN 
    465                ! no worries about sshn(ji+1,jj)-sshn(ji,jj) = 0, it won't happen ! here 
    466                zcpx(ji,jj) = ABS((sshn(ji+1,jj) + bathy(ji+1,jj) - sshn(ji,jj) - bathy(ji,jj)) / & 
    467                            &     (sshn(ji+1,jj) - sshn(ji,jj))) 
    468                wduflt(ji,jj) = 1.0_wp 
     466             ELSE IF(ll_tmp2) THEN 
     467               ! no worries about  sshn(ji+1,jj) -  sshn(ji  ,jj) = 0, it won't happen ! here 
     468               zcpx(ji,jj) = ABS( (sshn(ji+1,jj) + ht_wd(ji+1,jj) - sshn(ji,jj) - ht_wd(ji,jj)) & 
     469                           &    / (sshn(ji+1,jj) -  sshn(ji  ,jj)) ) 
    469470             ELSE 
    470471               zcpx(ji,jj) = 0._wp 
    471                wduflt(ji,jj) = 0.0_wp 
    472472             END IF 
    473473       
    474              ll_tmp1 = MIN(sshn(ji,jj), sshn(ji,jj+1)) > MAX(-bathy(ji,jj), -bathy(ji,jj+1))  
    475              ll_tmp2 = MAX(sshn(ji,jj) + bathy(ji,jj), sshn(ji,jj+1) + bathy(ji,jj+1)) > rn_wdmin1 + rn_wdmin2 
    476              ll_tmp3 = MAX(sshn(ji,jj), sshn(ji,jj+1)) > MAX(-bathy(ji,jj), -bathy(ji,jj+1)) + & 
    477                                                        & rn_wdmin1 + rn_wdmin2 
    478  
    479              IF(ll_tmp1.AND.ll_tmp2) THEN 
     474             ll_tmp1 = MIN(   sshn(ji,jj)               ,   sshn(ji,jj+1) ) >                & 
     475                  &    MAX( -ht_wd(ji,jj)               , -ht_wd(ji,jj+1) ) .AND.            & 
     476                  &    MAX(   sshn(ji,jj) + ht_wd(ji,jj),   sshn(ji,jj+1) + ht_wd(ji,jj+1) ) & 
     477                  &                                                         > rn_wdmin1 + rn_wdmin2 
     478             ll_tmp2 = ( ABS( sshn(ji,jj)               -   sshn(ji,jj+1) ) > 1.E-12 ) .AND. (             & 
     479                  &    MAX(   sshn(ji,jj)               ,   sshn(ji,jj+1) ) >                & 
     480                  &    MAX( -ht_wd(ji,jj)               , -ht_wd(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 
     481 
     482             IF(ll_tmp1) THEN 
    480483               zcpy(ji,jj) = 1.0_wp 
    481                wdvflt(ji,jj) = 1.0_wp 
    482              ELSE IF(ll_tmp3) THEN 
    483                ! no worries about sshn(ji,jj+1)-sshn(ji,jj) = 0, it won't happen ! here 
    484                zcpy(ji,jj) = ABS((sshn(ji,jj+1) + bathy(ji,jj+1) - sshn(ji,jj) - bathy(ji,jj)) / & 
    485                            &     (sshn(ji,jj+1) - sshn(ji,jj))) 
    486                wdvflt(ji,jj) = 1.0_wp 
     484             ELSE IF(ll_tmp2) THEN 
     485               ! no worries about  sshn(ji,jj+1) -  sshn(ji,jj  ) = 0, it won't happen ! here 
     486               zcpy(ji,jj) = ABS( (sshn(ji,jj+1) + ht_wd(ji,jj+1) - sshn(ji,jj) - ht_wd(ji,jj)) & 
     487                           &    / (sshn(ji,jj+1) -  sshn(ji,jj  )) ) 
    487488             ELSE 
    488489               zcpy(ji,jj) = 0._wp 
    489                wdvflt(ji,jj) = 0.0_wp 
    490490             END IF 
    491491           END DO 
    492492        END DO 
    493493        CALL lbc_lnk( zcpx, 'U', 1._wp )    ;   CALL lbc_lnk( zcpy, 'V', 1._wp ) 
    494       ENDIF 
    495  
     494      END IF 
    496495 
    497496      ! Surface value 
     
    510509 
    511510 
    512             IF(ln_wd) THEN 
     511            IF( ln_wd ) THEN 
    513512 
    514513              zhpi(ji,jj,1) = zhpi(ji,jj,1) * zcpx(ji,jj) 
     
    541540                  &           * ( gde3w_n(ji  ,jj+1,jk) - gde3w_n(ji,jj,jk) ) * r1_e2v(ji,jj) 
    542541 
    543                IF(ln_wd) THEN 
     542               IF( ln_wd ) THEN 
    544543                 zhpi(ji,jj,jk) = zhpi(ji,jj,jk) * zcpx(ji,jj) 
    545544                 zhpj(ji,jj,jk) = zhpj(ji,jj,jk) * zcpy(ji,jj)  
     
    556555      ! 
    557556      CALL wrk_dealloc( jpi,jpj,jpk, zhpi, zhpj ) 
    558       IF(ln_wd) CALL wrk_dealloc( jpi,jpj, zcpx, zcpy ) 
     557      IF( ln_wd ) CALL wrk_dealloc( jpi,jpj, zcpx, zcpy ) 
    559558      ! 
    560559   END SUBROUTINE hpg_sco 
     
    701700      CALL wrk_alloc( jpi, jpj, jpk, drhox, drhoy, drhoz, drhou, drhov, drhow ) 
    702701      CALL wrk_alloc( jpi, jpj, jpk, rho_i, rho_j, rho_k,  zhpi,  zhpj        ) 
    703       IF(ln_wd) CALL wrk_alloc( jpi,jpj, zcpx, zcpy ) 
    704       ! 
    705       ! 
    706       IF(ln_wd) THEN 
     702      IF( ln_wd ) CALL wrk_alloc( jpi,jpj, zcpx, zcpy ) 
     703      ! 
     704      ! 
     705      IF( ln_wd ) THEN 
    707706        DO jj = 2, jpjm1 
    708707           DO ji = 2, jpim1  
    709              ll_tmp1 = MIN(sshn(ji,jj), sshn(ji+1,jj)) > MAX(-bathy(ji,jj), -bathy(ji+1,jj)) & 
    710                      & .and. MAX(sshn(ji,jj) + bathy(ji,jj), sshn(ji+1,jj) + bathy(ji+1,jj)) & 
    711                      &  > rn_wdmin1 + rn_wdmin2 
    712              ll_tmp2 = MAX(sshn(ji,jj), sshn(ji+1,jj)) > MAX(-bathy(ji,jj), -bathy(ji+1,jj)) +& 
    713                                                        & rn_wdmin1 + rn_wdmin2 
     708             ll_tmp1 = MIN(   sshn(ji,jj)               ,   sshn(ji+1,jj) ) >                & 
     709                  &    MAX( -ht_wd(ji,jj)               , -ht_wd(ji+1,jj) ) .AND.            & 
     710                  &    MAX(   sshn(ji,jj) + ht_wd(ji,jj),   sshn(ji+1,jj) + ht_wd(ji+1,jj) ) & 
     711                  &                                                         > rn_wdmin1 + rn_wdmin2 
     712             ll_tmp2 = ( ABS( sshn(ji,jj)               -   sshn(ji+1,jj) ) > 1.E-12 ) .AND. (             & 
     713                  &    MAX(   sshn(ji,jj)               ,   sshn(ji+1,jj) ) >                & 
     714                  &    MAX( -ht_wd(ji,jj)               , -ht_wd(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 ) 
    714715 
    715716             IF(ll_tmp1) THEN 
    716717               zcpx(ji,jj) = 1.0_wp 
    717718             ELSE IF(ll_tmp2) THEN 
    718                ! no worries about sshn(ji+1,jj)-sshn(ji,jj) = 0, it won't happen ! here 
    719                zcpx(ji,jj) = ABS((sshn(ji+1,jj) + bathy(ji+1,jj) - sshn(ji,jj) - bathy(ji,jj)) /& 
    720                            &     (sshn(ji+1,jj) - sshn(ji,jj))) 
     719               ! no worries about  sshn(ji+1,jj) -  sshn(ji  ,jj) = 0, it won't happen ! here 
     720               zcpx(ji,jj) = ABS( (sshn(ji+1,jj) + ht_wd(ji+1,jj) - sshn(ji,jj) - ht_wd(ji,jj)) & 
     721                           &    / (sshn(ji+1,jj) -  sshn(ji  ,jj)) ) 
    721722             ELSE 
    722723               zcpx(ji,jj) = 0._wp 
    723724             END IF 
    724725       
    725              ll_tmp1 = MIN(sshn(ji,jj), sshn(ji,jj+1)) > MAX(-bathy(ji,jj), -bathy(ji,jj+1)) & 
    726                      & .and. MAX(sshn(ji,jj) + bathy(ji,jj), sshn(ji,jj+1) + bathy(ji,jj+1)) & 
    727                      &  > rn_wdmin1 + rn_wdmin2 
    728              ll_tmp2 = MAX(sshn(ji,jj), sshn(ji,jj+1)) > MAX(-bathy(ji,jj), -bathy(ji,jj+1)) +& 
    729                                                        & rn_wdmin1 + rn_wdmin2 
     726             ll_tmp1 = MIN(   sshn(ji,jj)               ,   sshn(ji,jj+1) ) >                & 
     727                  &    MAX( -ht_wd(ji,jj)               , -ht_wd(ji,jj+1) ) .AND.            & 
     728                  &    MAX(   sshn(ji,jj) + ht_wd(ji,jj),   sshn(ji,jj+1) + ht_wd(ji,jj+1) ) & 
     729                  &                                                         > rn_wdmin1 + rn_wdmin2 
     730             ll_tmp2 = ( ABS( sshn(ji,jj)               -   sshn(ji,jj+1) ) > 1.E-12 ) .AND. (             & 
     731                  &    MAX(   sshn(ji,jj)               ,   sshn(ji,jj+1) ) >                & 
     732                  &    MAX( -ht_wd(ji,jj)               , -ht_wd(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 
    730733 
    731734             IF(ll_tmp1) THEN 
    732735               zcpy(ji,jj) = 1.0_wp 
    733736             ELSE IF(ll_tmp2) THEN 
    734                ! no worries about sshn(ji,jj+1)-sshn(ji,jj) = 0, it won't happen ! here 
    735                zcpy(ji,jj) = ABS((sshn(ji,jj+1) + bathy(ji,jj+1) - sshn(ji,jj) - bathy(ji,jj)) /& 
    736                            &     (sshn(ji,jj+1) - sshn(ji,jj))) 
     737               ! no worries about  sshn(ji,jj+1) -  sshn(ji,jj  ) = 0, it won't happen ! here 
     738               zcpy(ji,jj) = ABS( (sshn(ji,jj+1) + ht_wd(ji,jj+1) - sshn(ji,jj) - ht_wd(ji,jj)) & 
     739                           &    / (sshn(ji,jj+1) -  sshn(ji,jj  )) ) 
    737740             ELSE 
    738741               zcpy(ji,jj) = 0._wp 
     
    741744        END DO 
    742745        CALL lbc_lnk( zcpx, 'U', 1._wp )    ;   CALL lbc_lnk( zcpy, 'V', 1._wp ) 
    743       ENDIF 
    744  
     746      END IF 
    745747 
    746748      IF( kt == nit000 ) THEN 
     
    913915            zhpi(ji,jj,1) = ( rho_k(ji+1,jj  ,1) - rho_k(ji,jj,1) - rho_i(ji,jj,1) ) * r1_e1u(ji,jj) 
    914916            zhpj(ji,jj,1) = ( rho_k(ji  ,jj+1,1) - rho_k(ji,jj,1) - rho_j(ji,jj,1) ) * r1_e2v(ji,jj) 
    915             IF(ln_wd) THEN 
     917            IF( ln_wd ) THEN 
    916918              zhpi(ji,jj,1) = zhpi(ji,jj,1) * zcpx(ji,jj) 
    917919              zhpj(ji,jj,1) = zhpj(ji,jj,1) * zcpy(ji,jj)  
     
    936938                  &           + (  ( rho_k(ji,jj+1,jk) - rho_k(ji,jj,jk  ) )    & 
    937939                  &               -( rho_j(ji,jj  ,jk) - rho_j(ji,jj,jk-1) )  ) * r1_e2v(ji,jj) 
    938                IF(ln_wd) THEN 
     940               IF( ln_wd ) THEN 
    939941                 zhpi(ji,jj,jk) = zhpi(ji,jj,jk) * zcpx(ji,jj) 
    940942                 zhpj(ji,jj,jk) = zhpj(ji,jj,jk) * zcpy(ji,jj)  
     
    950952      CALL wrk_dealloc( jpi, jpj, jpk, drhox, drhoy, drhoz, drhou, drhov, drhow ) 
    951953      CALL wrk_dealloc( jpi, jpj, jpk, rho_i, rho_j, rho_k,  zhpi,  zhpj        ) 
    952       IF(ln_wd) CALL wrk_dealloc( jpi,jpj, zcpx, zcpy ) 
     954      IF( ln_wd ) CALL wrk_dealloc( jpi,jpj, zcpx, zcpy ) 
    953955      ! 
    954956   END SUBROUTINE hpg_djc 
     
    987989      CALL wrk_alloc( jpi,jpj,jpk,   zdept, zrhh ) 
    988990      CALL wrk_alloc( jpi,jpj,       zsshu_n, zsshv_n ) 
    989       IF(ln_wd) CALL wrk_alloc( jpi,jpj, zcpx, zcpy ) 
     991      IF( ln_wd ) CALL wrk_alloc( jpi,jpj, zcpx, zcpy ) 
    990992      ! 
    991993      IF( kt == nit000 ) THEN 
     
    10001002      IF( ln_linssh )   znad = 0._wp 
    10011003 
    1002       IF(ln_wd) THEN 
     1004      IF( ln_wd ) THEN 
    10031005        DO jj = 2, jpjm1 
    10041006           DO ji = 2, jpim1  
    1005              ll_tmp1 = MIN(sshn(ji,jj), sshn(ji+1,jj)) > MAX(-bathy(ji,jj), -bathy(ji+1,jj)) & 
    1006                      & .and. MAX(sshn(ji,jj) + bathy(ji,jj), sshn(ji+1,jj) + bathy(ji+1,jj)) & 
    1007                      &  > rn_wdmin1 + rn_wdmin2 
    1008              ll_tmp2 = MAX(sshn(ji,jj), sshn(ji+1,jj)) > MAX(-bathy(ji,jj), -bathy(ji+1,jj)) +& 
    1009                                                        & rn_wdmin1 + rn_wdmin2 
     1007             ll_tmp1 = MIN(   sshn(ji,jj)               ,   sshn(ji+1,jj) ) >                & 
     1008                  &    MAX( -ht_wd(ji,jj)               , -ht_wd(ji+1,jj) ) .AND.            & 
     1009                  &    MAX(   sshn(ji,jj) + ht_wd(ji,jj),   sshn(ji+1,jj) + ht_wd(ji+1,jj) ) & 
     1010                  &                                                         > rn_wdmin1 + rn_wdmin2 
     1011             ll_tmp2 = ( ABS( sshn(ji,jj)               -   sshn(ji+1,jj) ) > 1.E-12 ) .AND. (             & 
     1012                  &    MAX(   sshn(ji,jj)               ,   sshn(ji+1,jj) ) >                & 
     1013                  &    MAX( -ht_wd(ji,jj)               , -ht_wd(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 ) 
    10101014 
    10111015             IF(ll_tmp1) THEN 
    10121016               zcpx(ji,jj) = 1.0_wp 
    10131017             ELSE IF(ll_tmp2) THEN 
    1014                ! no worries about sshn(ji+1,jj)-sshn(ji,jj) = 0, it won't happen ! here 
    1015                zcpx(ji,jj) = ABS((sshn(ji+1,jj) + bathy(ji+1,jj) - sshn(ji,jj) - bathy(ji,jj)) /& 
    1016                            &     (sshn(ji+1,jj) - sshn(ji,jj))) 
     1018               ! no worries about  sshn(ji+1,jj) -  sshn(ji  ,jj) = 0, it won't happen ! here 
     1019               zcpx(ji,jj) = ABS( (sshn(ji+1,jj) + ht_wd(ji+1,jj) - sshn(ji,jj) - ht_wd(ji,jj)) & 
     1020                           &    / (sshn(ji+1,jj) -  sshn(ji  ,jj)) ) 
    10171021             ELSE 
    10181022               zcpx(ji,jj) = 0._wp 
    10191023             END IF 
    10201024       
    1021              ll_tmp1 = MIN(sshn(ji,jj), sshn(ji,jj+1)) > MAX(-bathy(ji,jj), -bathy(ji,jj+1)) & 
    1022                      & .and. MAX(sshn(ji,jj) + bathy(ji,jj), sshn(ji,jj+1) + bathy(ji,jj+1)) & 
    1023                      &  > rn_wdmin1 + rn_wdmin2 
    1024              ll_tmp2 = MAX(sshn(ji,jj), sshn(ji,jj+1)) > MAX(-bathy(ji,jj), -bathy(ji,jj+1)) +& 
    1025                                                        & rn_wdmin1 + rn_wdmin2 
    1026  
    1027              IF(ll_tmp1.OR.ll_tmp2) THEN 
     1025             ll_tmp1 = MIN(   sshn(ji,jj)               ,   sshn(ji,jj+1) ) >                & 
     1026                  &    MAX( -ht_wd(ji,jj)               , -ht_wd(ji,jj+1) ) .AND.            & 
     1027                  &    MAX(   sshn(ji,jj) + ht_wd(ji,jj),   sshn(ji,jj+1) + ht_wd(ji,jj+1) ) & 
     1028                  &                                                         > rn_wdmin1 + rn_wdmin2 
     1029             ll_tmp2 = ( ABS( sshn(ji,jj)               -   sshn(ji,jj+1) ) > 1.E-12 ) .AND. (             & 
     1030                  &    MAX(   sshn(ji,jj)               ,   sshn(ji,jj+1) ) >                & 
     1031                  &    MAX( -ht_wd(ji,jj)               , -ht_wd(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 
     1032 
     1033             IF(ll_tmp1) THEN 
    10281034               zcpy(ji,jj) = 1.0_wp 
    10291035             ELSE IF(ll_tmp2) THEN 
    1030                ! no worries about sshn(ji,jj+1)-sshn(ji,jj) = 0, it won't happen ! here 
    1031                zcpy(ji,jj) = ABS((sshn(ji,jj+1) + bathy(ji,jj+1) - sshn(ji,jj) - bathy(ji,jj)) /& 
    1032                            &     (sshn(ji,jj+1) - sshn(ji,jj))) 
     1036               ! no worries about  sshn(ji,jj+1) -  sshn(ji,jj  ) = 0, it won't happen ! here 
     1037               zcpy(ji,jj) = ABS( (sshn(ji,jj+1) + ht_wd(ji,jj+1) - sshn(ji,jj) - ht_wd(ji,jj)) & 
     1038                           &    / (sshn(ji,jj+1) -  sshn(ji,jj  )) ) 
    10331039             ELSE 
    10341040               zcpy(ji,jj) = 0._wp 
     
    10371043        END DO 
    10381044        CALL lbc_lnk( zcpx, 'U', 1._wp )    ;   CALL lbc_lnk( zcpy, 'V', 1._wp ) 
    1039       ENDIF 
     1045      END IF 
    10401046 
    10411047      ! Clean 3-D work arrays 
     
    10461052      DO jj = 1, jpj 
    10471053        DO ji = 1, jpi 
    1048           jk = mbathy(ji,jj) 
     1054          jk = mbkt(ji,jj)+1 
    10491055          IF(     jk <=  0   ) THEN   ;   zrhh(ji,jj,    :   ) = 0._wp 
    10501056          ELSEIF( jk ==  1   ) THEN   ;   zrhh(ji,jj,jk+1:jpk) = rhd(ji,jj,jk) 
     
    12211227                 zdpdx2 = zcoef0 * r1_e1u(ji,jj) * REAL(jis-jid, wp) * (zpwes + zpwed) 
    12221228               ENDIF 
    1223                IF(ln_wd) THEN 
     1229               IF( ln_wd ) THEN 
    12241230                  zdpdx1 = zdpdx1 * zcpx(ji,jj) 
    12251231                  zdpdx2 = zdpdx2 * zcpx(ji,jj) 
     
    12801286                  zdpdy2 = zcoef0 * r1_e2v(ji,jj) * REAL(jjs-jjd, wp) * (zpnss + zpnsd ) 
    12811287               ENDIF 
    1282                IF(ln_wd) THEN 
     1288               IF( ln_wd ) THEN 
    12831289                  zdpdy1 = zdpdy1 * zcpy(ji,jj) 
    12841290                  zdpdy2 = zdpdy2 * zcpy(ji,jj) 
     
    12951301      CALL wrk_dealloc( jpi,jpj,jpk,   zdept, zrhh ) 
    12961302      CALL wrk_dealloc( jpi,jpj,       zsshu_n, zsshv_n ) 
    1297       IF(ln_wd) CALL wrk_dealloc( jpi,jpj, zcpx, zcpy ) 
     1303      IF( ln_wd ) CALL wrk_dealloc( jpi,jpj, zcpx, zcpy ) 
    12981304      ! 
    12991305   END SUBROUTINE hpg_prj 
  • trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynkeg.F90

    r5328 r7646  
    2424   USE wrk_nemo        ! Memory Allocation 
    2525   USE timing          ! Timing 
     26   USE bdy_oce         ! ocean open boundary conditions 
    2627 
    2728   IMPLICIT NONE 
     
    7879      REAL(wp), POINTER, DIMENSION(:,:,:) :: zhke 
    7980      REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrdu, ztrdv  
     81      INTEGER  ::   jb                 ! dummy loop indices 
     82      INTEGER  ::   ii, ij, igrd, ib_bdy   ! local integers 
     83      INTEGER  ::   fu, fv 
    8084      !!---------------------------------------------------------------------- 
    8185      ! 
     
    98102      zhke(:,:,jpk) = 0._wp 
    99103       
     104      IF (ln_bdy) THEN 
     105         ! Maria Luneva & Fred Wobus: July-2016 
     106         ! compensate for lack of turbulent kinetic energy on liquid bdy points 
     107         DO ib_bdy = 1, nb_bdy 
     108            IF( cn_dyn3d(ib_bdy) /= 'none' ) THEN 
     109               igrd = 2           ! Copying normal velocity into points outside bdy 
     110               DO jb = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 
     111                  DO jk = 1, jpkm1 
     112                     ii   = idx_bdy(ib_bdy)%nbi(jb,igrd) 
     113                     ij   = idx_bdy(ib_bdy)%nbj(jb,igrd) 
     114                     fu   = NINT( idx_bdy(ib_bdy)%flagu(jb,igrd) ) 
     115                     un(ii-fu,ij,jk) = un(ii,ij,jk) * umask(ii,ij,jk) 
     116                  END DO 
     117               END DO 
     118               ! 
     119               igrd = 3           ! Copying normal velocity into points outside bdy 
     120               DO jb = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 
     121                  DO jk = 1, jpkm1 
     122                     ii   = idx_bdy(ib_bdy)%nbi(jb,igrd) 
     123                     ij   = idx_bdy(ib_bdy)%nbj(jb,igrd) 
     124                     fv   = NINT( idx_bdy(ib_bdy)%flagv(jb,igrd) ) 
     125                     vn(ii,ij-fv,jk) = vn(ii,ij,jk) * vmask(ii,ij,jk) 
     126                  END DO 
     127               END DO 
     128            ENDIF 
     129         ENDDO   
     130      ENDIF  
     131 
    100132      SELECT CASE ( kscheme )             !== Horizontal kinetic energy at T-point  ==! 
    101133      ! 
     
    133165         ! 
    134166      END SELECT 
     167 
     168      IF (ln_bdy) THEN 
     169         ! restore velocity masks at points outside boundary 
     170         un(:,:,:) = un(:,:,:) * umask(:,:,:) 
     171         vn(:,:,:) = vn(:,:,:) * vmask(:,:,:) 
     172      ENDIF       
     173 
     174 
    135175      ! 
    136176      DO jk = 1, jpkm1                    !==  grad( KE ) added to the general momentum trends  ==! 
  • trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf.F90

    r6140 r7646  
    110110         WRITE(numout,*) 
    111111         WRITE(numout,*) 'dyn_ldf_init : Choice of the lateral diffusive operator on dynamics' 
    112          WRITE(numout,*) '~~~~~~~~~~~' 
    113          WRITE(numout,*) '       Namelist nam_dynldf : set lateral mixing parameters (type, direction, coefficients)' 
    114          WRITE(numout,*) '          laplacian operator          ln_dynldf_lap = ', ln_dynldf_lap 
    115          WRITE(numout,*) '          bilaplacian operator        ln_dynldf_blp = ', ln_dynldf_blp 
    116          WRITE(numout,*) '          iso-level                   ln_dynldf_lev = ', ln_dynldf_lev 
    117          WRITE(numout,*) '          horizontal (geopotential)   ln_dynldf_hor = ', ln_dynldf_hor 
    118          WRITE(numout,*) '          iso-neutral                 ln_dynldf_iso = ', ln_dynldf_iso 
     112         WRITE(numout,*) '~~~~~~~~~~~~' 
     113         WRITE(numout,*) '   Namelist nam_dynldf : set lateral mixing parameters (type, direction, coefficients)' 
     114         WRITE(numout,*) '      laplacian operator          ln_dynldf_lap = ', ln_dynldf_lap 
     115         WRITE(numout,*) '      bilaplacian operator        ln_dynldf_blp = ', ln_dynldf_blp 
     116         WRITE(numout,*) '      iso-level                   ln_dynldf_lev = ', ln_dynldf_lev 
     117         WRITE(numout,*) '      horizontal (geopotential)   ln_dynldf_hor = ', ln_dynldf_hor 
     118         WRITE(numout,*) '      iso-neutral                 ln_dynldf_iso = ', ln_dynldf_iso 
    119119      ENDIF 
    120120      !                                   ! use of lateral operator or not 
     
    180180      IF(lwp) THEN 
    181181         WRITE(numout,*) 
    182          IF( nldf == np_no_ldf )   WRITE(numout,*) '              NO lateral viscosity' 
    183          IF( nldf == np_lap    )   WRITE(numout,*) '              iso-level laplacian operator' 
    184          IF( nldf == np_lap_i  )   WRITE(numout,*) '              rotated laplacian operator with iso-level background' 
    185          IF( nldf == np_blp    )   WRITE(numout,*) '              iso-level bi-laplacian operator' 
     182         IF( nldf == np_no_ldf )   WRITE(numout,*) '      ===>>   NO lateral viscosity' 
     183         IF( nldf == np_lap    )   WRITE(numout,*) '      ===>>   iso-level laplacian operator' 
     184         IF( nldf == np_lap_i  )   WRITE(numout,*) '      ===>>   rotated laplacian operator with iso-level background' 
     185         IF( nldf == np_blp    )   WRITE(numout,*) '      ===>>   iso-level bi-laplacian operator' 
    186186      ENDIF 
    187187      ! 
  • trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90

    r6140 r7646  
    3232   USE dynspg_ts      ! surface pressure gradient: split-explicit scheme 
    3333   USE domvvl         ! variable volume 
    34    USE bdy_oce        ! ocean open boundary conditions 
     34   USE bdy_oce   , ONLY: ln_bdy 
    3535   USE bdydta         ! ocean open boundary conditions 
    3636   USE bdydyn         ! ocean open boundary conditions 
     
    7777      !!              * Apply lateral boundary conditions on after velocity  
    7878      !!             at the local domain boundaries through lbc_lnk call, 
    79       !!             at the one-way open boundaries (lk_bdy=T), 
     79      !!             at the one-way open boundaries (ln_bdy=T), 
    8080      !!             at the AGRIF zoom   boundaries (lk_agrif=T) 
    8181      !! 
     
    147147      CALL lbc_lnk( va, 'V', -1. )  
    148148      ! 
    149 # if defined key_bdy 
    150149      !                                !* BDY open boundaries 
    151       IF( lk_bdy .AND. ln_dynspg_exp )   CALL bdy_dyn( kt ) 
    152       IF( lk_bdy .AND. ln_dynspg_ts  )   CALL bdy_dyn( kt, dyn3d_only=.true. ) 
     150      IF( ln_bdy .AND. ln_dynspg_exp )   CALL bdy_dyn( kt ) 
     151      IF( ln_bdy .AND. ln_dynspg_ts  )   CALL bdy_dyn( kt, dyn3d_only=.true. ) 
    153152 
    154153!!$   Do we need a call to bdy_vol here?? 
    155       ! 
    156 # endif 
    157154      ! 
    158155      IF( l_trddyn ) THEN             ! prepare the atf trend computation + some diagnostics 
  • trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg.F90

    r6981 r7646  
    8888      ! 
    8989      IF(      ln_apr_dyn                                                &   ! atmos. pressure 
    90          .OR.  ( .NOT.ln_dynspg_ts .AND. (ln_tide_pot .AND. lk_tide) )   &   ! tide potential (no time slitting) 
     90         .OR.  ( .NOT.ln_dynspg_ts .AND. (ln_tide_pot .AND. ln_tide) )   &   ! tide potential (no time slitting) 
    9191         .OR.  nn_ice_embd == 2  ) THEN                                      ! embedded sea-ice 
    9292         ! 
     
    111111         ! 
    112112         !                                    !==  tide potential forcing term  ==! 
    113          IF( .NOT.ln_dynspg_ts .AND. ( ln_tide_pot .AND. lk_tide )  ) THEN   ! N.B. added directly at sub-time-step in ts-case 
     113         IF( .NOT.ln_dynspg_ts .AND. ( ln_tide_pot .AND. ln_tide )  ) THEN   ! N.B. added directly at sub-time-step in ts-case 
    114114            ! 
    115115            CALL upd_tide( kt )                      ! update tide potential 
     
    216216      IF(lwp) THEN 
    217217         WRITE(numout,*) 
    218          IF( nspg == np_EXP )   WRITE(numout,*) '     explicit free surface' 
    219          IF( nspg == np_TS  )   WRITE(numout,*) '     free surface with time splitting scheme' 
    220          IF( nspg == np_NO  )   WRITE(numout,*) '     No surface surface pressure gradient trend in momentum Eqs.' 
     218         IF( nspg == np_EXP )   WRITE(numout,*) '      ===>>   explicit free surface' 
     219         IF( nspg == np_TS  )   WRITE(numout,*) '      ===>>   free surface with time splitting scheme' 
     220         IF( nspg == np_NO  )   WRITE(numout,*) '      ===>>   No surface surface pressure gradient trend in momentum Eqs.' 
    221221      ENDIF 
    222222      ! 
  • trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r6152 r7646  
    1515   !!             3.6  ! 2013-11  (A. Coward) Update for z-tilde compatibility 
    1616   !!             3.7  ! 2015-11  (J. Chanut) free surface simplification 
     17   !!              -   ! 2016-12  (G. Madec, E. Clementi) update for Stoke-Drift divergence 
    1718   !!--------------------------------------------------------------------- 
    1819 
     
    3334   USE dynvor          ! vorticity term 
    3435   USE wet_dry         ! wetting/drying flux limter 
    35    USE bdy_par         ! for lk_bdy 
     36   USE bdy_oce         ! open boundary 
    3637   USE bdytides        ! open boundary condition data 
    3738   USE bdydyn2d        ! open boundary conditions on barotropic variables 
    3839   USE sbctide         ! tides 
    3940   USE updtide         ! tide potential 
     41   USE sbcwave         ! surface wave 
    4042   ! 
    4143   USE in_out_manager  ! I/O manager 
     
    6971   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) ::   wgtbtp1, wgtbtp2   !: 1st & 2nd weights used in time filtering of barotropic fields 
    7072 
    71    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  zwz          !: ff/h at F points 
     73   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  zwz          !: ff_f/h at F points 
    7274   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftnw, ftne   !: triad of coriolis parameter 
    7375   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftsw, ftse   !: (only used with een vorticity scheme) 
     
    156158      REAL(wp), POINTER, DIMENSION(:,:) :: zhf 
    157159      REAL(wp), POINTER, DIMENSION(:,:) :: zcpx, zcpy                 ! Wetting/Dying gravity filter coef. 
    158       REAL(wp), POINTER, DIMENSION(:,:) :: wduflt1, wdvflt1           ! Wetting/Dying velocity filter coef. 
    159160      !!---------------------------------------------------------------------- 
    160161      ! 
     
    168169      CALL wrk_alloc( jpi,jpj,   zsshu_a, zsshv_a                  ) 
    169170      CALL wrk_alloc( jpi,jpj,   zhf ) 
    170       IF( ln_wd ) CALL wrk_alloc( jpi, jpj, zcpx, zcpy, wduflt1, wdvflt1 ) 
     171      IF( ln_wd ) CALL wrk_alloc( jpi, jpj, zcpx, zcpy ) 
    171172      ! 
    172173      zmdi=1.e+20                               !  missing data indicator for masking 
     
    220221      IF( kt == nit000 .OR. .NOT.ln_linssh ) THEN 
    221222         IF( ln_dynvor_een ) THEN               !==  EEN scheme  ==! 
    222             SELECT CASE( nn_een_e3f )              !* ff/e3 at F-point 
     223            SELECT CASE( nn_een_e3f )              !* ff_f/e3 at F-point 
    223224            CASE ( 0 )                                   ! original formulation  (masked averaging of e3t divided by 4) 
    224225               DO jj = 1, jpjm1 
     
    226227                     zwz(ji,jj) =   ( ht_n(ji  ,jj+1) + ht_n(ji+1,jj+1) +                    & 
    227228                        &             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                     IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = ff_f(ji,jj) / zwz(ji,jj) 
    229230                  END DO 
    230231               END DO 
     
    236237                        &       / ( MAX( 1._wp, tmask(ji  ,jj+1, 1) + tmask(ji+1,jj+1, 1) +    & 
    237238                        &                       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                     IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = ff_f(ji,jj) / zwz(ji,jj) 
    239240                  END DO 
    240241               END DO 
     
    255256            zwz(:,:) = 0._wp 
    256257            zhf(:,:) = 0._wp 
    257             IF ( .not. ln_sco ) THEN 
    258  
    259 !!gm  agree the JC comment  : this should be done in a much clear way 
    260  
    261 ! JC: It not clear yet what should be the depth at f-points over land in z-coordinate case 
    262 !     Set it to zero for the time being  
    263 !              IF( rn_hmin < 0._wp ) THEN    ;   jk = - INT( rn_hmin )                                      ! from a nb of level 
    264 !              ELSE                          ;   jk = MINLOC( gdepw_0, mask = gdepw_0 > rn_hmin, dim = 1 )  ! from a depth 
    265 !              ENDIF 
    266 !              zhf(:,:) = gdepw_0(:,:,jk+1) 
    267             ELSE 
    268                zhf(:,:) = hbatf(:,:) 
    269             END IF 
    270  
    271             DO jj = 1, jpjm1 
    272                zhf(:,jj) = zhf(:,jj) * (1._wp- umask(:,jj,1) * umask(:,jj+1,1)) 
    273             END DO 
     258             
     259!!gm  assume 0 in both cases (xhich is almost surely WRONG ! ) as hvatf has been removed  
     260!!gm    A priori a better value should be something like : 
     261!!gm          zhf(i,j) = masked sum of  ht(i,j) , ht(i+1,j) , ht(i,j+1) , (i+1,j+1)  
     262!!gm                     divided by the sum of the corresponding mask  
     263!!gm  
     264!!             
     265              IF ( .not. ln_sco ) THEN 
     266   
     267   !!gm  agree the JC comment  : this should be done in a much clear way 
     268   
     269   ! JC: It not clear yet what should be the depth at f-points over land in z-coordinate case 
     270   !     Set it to zero for the time being  
     271   !              IF( rn_hmin < 0._wp ) THEN    ;   jk = - INT( rn_hmin )                                      ! from a nb of level 
     272   !              ELSE                          ;   jk = MINLOC( gdepw_0, mask = gdepw_0 > rn_hmin, dim = 1 )  ! from a depth 
     273   !              ENDIF 
     274   !              zhf(:,:) = gdepw_0(:,:,jk+1) 
     275               ELSE 
     276                 !zhf(:,:) = hbatf(:,:) 
     277                 DO jj = 1, jpjm1 
     278                   DO ji = 1, jpim1 
     279                     zhf(ji,jj) = MAX( 0._wp,                                & 
     280                                & ( ht_0(ji  ,jj  )*tmask(ji  ,jj  ,1) +     & 
     281                                &   ht_0(ji+1,jj  )*tmask(ji+1,jj  ,1) +     & 
     282                                &   ht_0(ji  ,jj+1)*tmask(ji  ,jj+1,1) +     & 
     283                                &   ht_0(ji+1,jj+1)*tmask(ji+1,jj+1,1) ) /   & 
     284                                & ( tmask(ji  ,jj  ,1) + tmask(ji+1,jj  ,1) +& 
     285                                &   tmask(ji  ,jj+1,1) + tmask(ji+1,jj+1,1) +& 
     286                                &   rsmall  ) ) 
     287                   END DO 
     288                 END DO 
     289              END IF 
     290   
     291              DO jj = 1, jpjm1 
     292                 zhf(:,jj) = zhf(:,jj) * (1._wp- umask(:,jj,1) * umask(:,jj+1,1)) 
     293              END DO 
     294!!gm end 
    274295 
    275296            DO jk = 1, jpkm1 
     
    285306               END DO 
    286307            END DO 
    287             zwz(:,:) = ff(:,:) * zwz(:,:) 
     308            zwz(:,:) = ff_f(:,:) * zwz(:,:) 
    288309         ENDIF 
    289310      ENDIF 
     
    324345         END DO 
    325346      END DO 
     347       
     348!!gm  Question here when removing the Vertically integrated trends, we remove the vertically integrated NL trends on momentum.... 
     349!!gm  Is it correct to do so ?   I think so... 
     350       
     351       
    326352      !                                   !* barotropic Coriolis trends (vorticity scheme dependent) 
    327353      !                                   ! -------------------------------------------------------- 
     
    374400      IF( .NOT.ln_linssh ) THEN                 ! Variable volume : remove surface pressure gradient 
    375401        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 
     402           DO jj = 2, jpjm1 
     403              DO ji = 2, jpim1  
     404                ll_tmp1 = MIN(   sshn(ji,jj)               ,   sshn(ji+1,jj) ) >                & 
     405                     &    MAX( -ht_wd(ji,jj)               , -ht_wd(ji+1,jj) ) .AND.            & 
     406                     &    MAX(   sshn(ji,jj) + ht_wd(ji,jj),   sshn(ji+1,jj) + ht_wd(ji+1,jj) ) & 
     407                     &                                                         > rn_wdmin1 + rn_wdmin2 
     408                ll_tmp2 = ( ABS( sshn(ji+1,jj)             -   sshn(ji  ,jj))  > 1.E-12 ).AND.( & 
     409                     &    MAX(   sshn(ji,jj)               ,   sshn(ji+1,jj) ) >                & 
     410                     &    MAX( -ht_wd(ji,jj)               , -ht_wd(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 ) 
     411    
    385412                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))) 
     413                  zcpx(ji,jj) = 1.0_wp 
     414                ELSE IF(ll_tmp2) THEN 
     415                  ! no worries about  sshn(ji+1,jj) -  sshn(ji  ,jj) = 0, it won't happen ! here 
     416                  zcpx(ji,jj) = ABS( (sshn(ji+1,jj) + ht_wd(ji+1,jj) - sshn(ji,jj) - ht_wd(ji,jj)) & 
     417                              &    / (sshn(ji+1,jj) -  sshn(ji  ,jj)) ) 
    391418                ELSE 
    392                   zcpx(ji,jj)    = 0._wp 
    393                   wduflt1(ji,jj) = 0.0_wp 
     419                  zcpx(ji,jj) = 0._wp 
    394420                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 
     421          
     422                ll_tmp1 = MIN(   sshn(ji,jj)               ,   sshn(ji,jj+1) ) >                & 
     423                     &    MAX( -ht_wd(ji,jj)               , -ht_wd(ji,jj+1) ) .AND.            & 
     424                     &    MAX(   sshn(ji,jj) + ht_wd(ji,jj),   sshn(ji,jj+1) + ht_wd(ji,jj+1) ) & 
     425                     &                                                         > rn_wdmin1 + rn_wdmin2 
     426                ll_tmp2 = ( ABS( sshn(ji,jj)               -   sshn(ji,jj+1))  > 1.E-12 ).AND.( & 
     427                     &    MAX(   sshn(ji,jj)               ,   sshn(ji,jj+1) ) >                & 
     428                     &    MAX( -ht_wd(ji,jj)               , -ht_wd(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 
     429    
    401430                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))) 
     431                  zcpy(ji,jj) = 1.0_wp 
     432                ELSE IF(ll_tmp2) THEN 
     433                  ! no worries about  sshn(ji,jj+1) -  sshn(ji,jj  ) = 0, it won't happen ! here 
     434                  zcpy(ji,jj) = ABS( (sshn(ji,jj+1) + ht_wd(ji,jj+1) - sshn(ji,jj) - ht_wd(ji,jj)) & 
     435                              &    / (sshn(ji,jj+1) -  sshn(ji,jj  )) ) 
    407436                ELSE 
    408                   zcpy(ji,jj)    = 0._wp 
    409                   wdvflt1(ji,jj) = 0.0_wp 
    410                 ENDIF 
    411  
    412              END DO 
     437                  zcpy(ji,jj) = 0._wp 
     438                END IF 
     439              END DO 
    413440           END DO 
    414  
    415            CALL lbc_lnk( zcpx, 'U', 1._wp )    ;   CALL lbc_lnk( zcpy, 'V', 1._wp ) 
    416  
     441  
    417442           DO jj = 2, jpjm1 
    418443              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) 
     444                 zu_trd(ji,jj) = zu_trd(ji,jj) - grav * ( sshn(ji+1,jj  ) - sshn(ji  ,jj ) )   & 
     445                        &                        * r1_e1u(ji,jj) * zcpx(ji,jj) 
     446                 zv_trd(ji,jj) = zv_trd(ji,jj) - grav * ( sshn(ji  ,jj+1) - sshn(ji  ,jj ) )   & 
     447                        &                        * r1_e2v(ji,jj) * zcpy(ji,jj) 
    423448              END DO 
    424449           END DO 
     
    474499      ! 
    475500      !                                         ! Add top stress contribution from baroclinic velocities:       
    476       IF (ln_bt_fw) THEN 
     501      IF( ln_bt_fw ) THEN 
    477502         DO jj = 2, jpjm1 
    478503            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    538563                &                        + fwfisf(:,:) + fwfisf_b(:,:)                     ) 
    539564      ENDIF 
     565      ! 
     566      IF( ln_sdw ) THEN                         ! Stokes drift divergence added if necessary 
     567         zssh_frc(:,:) = zssh_frc(:,:) + div_sd(:,:) 
     568      ENDIF 
     569      ! 
    540570#if defined key_asminc 
    541571      !                                         ! Include the IAU weighted SSH increment 
     
    567597      ENDIF 
    568598 
    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 
    574599      ! 
    575600      IF (ln_bt_fw) THEN                  ! FORWARD integration: start from NOW fields                     
     
    608633         ! Update only tidal forcing at open boundaries 
    609634#if defined key_tide 
    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   ) 
     635         IF( ln_bdy      .AND. ln_tide )   CALL bdy_dta_tides( kt, kit=jn, time_offset= noffset+1 ) 
     636         IF( ln_tide_pot .AND. ln_tide )   CALL upd_tide     ( kt, kit=jn, time_offset= noffset   ) 
    612637#endif 
    613638         ! 
     
    646671            zhup2_e (:,:) = hu_0(:,:) + zwx(:,:)                ! Ocean depth at U- and V-points 
    647672            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 
    652673         ELSE 
    653674            zhup2_e (:,:) = hu_n(:,:) 
     
    702723         END DO 
    703724         ssha_e(:,:) = (  sshn_e(:,:) - rdtbt * ( zssh_frc(:,:) + zhdiv(:,:) )  ) * ssmask(:,:) 
    704          IF( ln_wd ) ssha_e(:,:) = MAX(ssha_e(:,:), rn_wdmin1 - bathy(:,:))  
     725          
    705726         CALL lbc_lnk( ssha_e, 'T',  1._wp ) 
    706727 
    707 #if defined key_bdy 
    708728         ! Duplicate sea level across open boundaries (this is only cosmetic if linssh=T) 
    709          IF( lk_bdy )   CALL bdy_ssh( ssha_e ) 
    710 #endif 
     729         IF( ln_bdy )   CALL bdy_ssh( ssha_e ) 
    711730#if defined key_agrif 
    712731         IF( .NOT.Agrif_Root() )   CALL agrif_ssh_ts( jn ) 
     
    750769          &            + za2 *  sshb_e(:,:) + za3 *  sshbb_e(:,:) 
    751770         IF( ln_wd ) THEN                   ! Calculating and applying W/D gravity filters 
    752            wduflt1(:,:) = 1._wp 
    753            wdvflt1(:,:) = 1._wp 
    754771           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 
     772              DO ji = 2, jpim1  
     773                ll_tmp1 = MIN( zsshp2_e(ji,jj)               , zsshp2_e(ji+1,jj) ) >                & 
     774                     &    MAX(   -ht_wd(ji,jj)               ,   -ht_wd(ji+1,jj) ) .AND.            & 
     775                     &    MAX( zsshp2_e(ji,jj) + ht_wd(ji,jj), zsshp2_e(ji+1,jj) + ht_wd(ji+1,jj) ) & 
     776                     &                                                             > rn_wdmin1 + rn_wdmin2 
     777                ll_tmp2 = (ABS(zsshp2_e(ji,jj)               - zsshp2_e(ji+1,jj))  > 1.E-12 ).AND.( & 
     778                     &    MAX( zsshp2_e(ji,jj)               , zsshp2_e(ji+1,jj) ) >                & 
     779                     &    MAX(   -ht_wd(ji,jj)               ,   -ht_wd(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 ) 
     780    
     781                IF(ll_tmp1) THEN 
     782                  zcpx(ji,jj) = 1.0_wp 
     783                ELSE IF(ll_tmp2) THEN 
     784                  ! no worries about  zsshp2_e(ji+1,jj) - zsshp2_e(ji  ,jj) = 0, it won't happen ! here 
     785                  zcpx(ji,jj) = ABS( (zsshp2_e(ji+1,jj) +    ht_wd(ji+1,jj) - zsshp2_e(ji,jj) - ht_wd(ji,jj)) & 
     786                              &    / (zsshp2_e(ji+1,jj) - zsshp2_e(ji  ,jj)) ) 
     787                ELSE 
     788                  zcpx(ji,jj) = 0._wp 
     789                END IF 
     790          
     791                ll_tmp1 = MIN( zsshp2_e(ji,jj)               , zsshp2_e(ji,jj+1) ) >                & 
     792                     &    MAX(   -ht_wd(ji,jj)               ,   -ht_wd(ji,jj+1) ) .AND.            & 
     793                     &    MAX( zsshp2_e(ji,jj) + ht_wd(ji,jj), zsshp2_e(ji,jj+1) + ht_wd(ji,jj+1) ) & 
     794                     &                                                             > rn_wdmin1 + rn_wdmin2 
     795                ll_tmp2 = (ABS(zsshp2_e(ji,jj)               - zsshp2_e(ji,jj+1))  > 1.E-12 ).AND.( & 
     796                     &    MAX( zsshp2_e(ji,jj)               , zsshp2_e(ji,jj+1) ) >                & 
     797                     &    MAX(   -ht_wd(ji,jj)               ,   -ht_wd(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 
     798    
     799                IF(ll_tmp1) THEN 
     800                  zcpy(ji,jj) = 1.0_wp 
     801                ELSE IF(ll_tmp2) THEN 
     802                  ! no worries about  zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj  ) = 0, it won't happen ! here 
     803                  zcpy(ji,jj) = ABS( (zsshp2_e(ji,jj+1) +    ht_wd(ji,jj+1) - zsshp2_e(ji,jj) - ht_wd(ji,jj)) & 
     804                              &    / (zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj  )) ) 
     805                ELSE 
     806                  zcpy(ji,jj) = 0._wp 
     807                END IF 
    787808              END DO 
    788             END DO 
    789             CALL lbc_lnk( zcpx, 'U', 1._wp )    ;   CALL lbc_lnk( zcpy, 'V', 1._wp ) 
    790          ENDIF 
     809           END DO 
     810         END IF 
    791811         ! 
    792812         ! Compute associated depths at U and V points: 
     
    806826            END DO 
    807827 
    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  
    813828         ENDIF 
    814829         ! 
     
    861876         ! 
    862877         ! Add tidal astronomical forcing if defined 
    863          IF ( lk_tide.AND.ln_tide_pot ) THEN 
     878         IF ( ln_tide .AND. ln_tide_pot ) THEN 
    864879            DO jj = 2, jpjm1 
    865880               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    967982         CALL lbc_lnk_multi( ua_e, 'U', -1._wp, va_e , 'V', -1._wp ) 
    968983         ! 
    969 #if defined key_bdy   
    970984         !                                                 ! open boundaries 
    971          IF( lk_bdy )   CALL bdy_dyn2d( jn, ua_e, va_e, un_e, vn_e, hur_e, hvr_e, ssha_e ) 
    972 #endif 
     985         IF( ln_bdy )   CALL bdy_dyn2d( jn, ua_e, va_e, un_e, vn_e, hur_e, hvr_e, ssha_e ) 
    973986#if defined key_agrif                                                            
    974987         IF( .NOT.Agrif_Root() )  CALL agrif_dyn_ts( jn )  ! Agrif 
     
    10861099      CALL wrk_dealloc( jpi,jpj,   zsshu_a, zsshv_a                                   ) 
    10871100      CALL wrk_dealloc( jpi,jpj,   zhf ) 
    1088       IF( ln_wd ) CALL wrk_dealloc( jpi, jpj, zcpx, zcpy, wduflt1, wdvflt1 ) 
     1101      IF( ln_wd ) CALL wrk_dealloc( jpi, jpj, zcpx, zcpy ) 
    10891102      ! 
    10901103      IF ( ln_diatmb ) THEN 
     
    12481261            zxr2 = r1_e1t(ji,jj) * r1_e1t(ji,jj) 
    12491262            zyr2 = r1_e2t(ji,jj) * r1_e2t(ji,jj) 
    1250             zcu(ji,jj) = SQRT( grav * ht_0(ji,jj) * (zxr2 + zyr2) ) 
     1263            zcu(ji,jj) = SQRT( grav * MAX(ht_0(ji,jj),0._wp) * (zxr2 + zyr2) ) 
    12511264         END DO 
    12521265      END DO 
  • trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90

    r6140 r7646  
    1717   !!            3.7  ! 2014-04  (G. Madec) trend simplification: suppress jpdyn_trd_dat vorticity  
    1818   !!             -   ! 2014-06  (G. Madec) suppression of velocity curl from in-core memory 
     19   !!             -   ! 2016-12  (G. Madec, E. Clementi) add Stokes-Coriolis trends (ln_stcor=T) 
    1920   !!---------------------------------------------------------------------- 
    2021 
     
    3233   USE trd_oce        ! trends: ocean variables 
    3334   USE trddyn         ! trend manager: dynamics 
     35   USE sbcwave        ! Surface Waves (add Stokes-Coriolis force) 
     36   USE sbc_oce , ONLY : ln_stcor    ! use Stoke-Coriolis force 
    3437   ! 
    3538   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
     
    7780#  include "vectopt_loop_substitute.h90" 
    7881   !!---------------------------------------------------------------------- 
    79    !! NEMO/OPA 3.7 , NEMO Consortium (2014) 
     82   !! NEMO/OPA 3.7 , NEMO Consortium (2016) 
    8083   !! $Id$ 
    8184   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    108111            ztrdu(:,:,:) = ua(:,:,:) 
    109112            ztrdv(:,:,:) = va(:,:,:) 
    110             CALL vor_ene( kt, nrvm, ua, va )                      ! relative vorticity or metric trend 
     113            CALL vor_ene( kt, nrvm, un , vn , ua, va )                    ! relative vorticity or metric trend 
    111114            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    112115            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     
    114117            ztrdu(:,:,:) = ua(:,:,:) 
    115118            ztrdv(:,:,:) = va(:,:,:) 
    116             CALL vor_ene( kt, ncor, ua, va )                      ! planetary vorticity trend 
     119            CALL vor_ene( kt, ncor, un , vn , ua, va )                    ! planetary vorticity trend 
    117120            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    118121            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    119122            CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 
    120          ELSE 
    121             CALL vor_ene( kt, ntot, ua, va )                ! total vorticity trend 
     123         ELSE                                               ! total vorticity trend 
     124                             CALL vor_ene( kt, ntot, un , vn , ua, va )   ! total vorticity trend 
     125            IF( ln_stcor )   CALL vor_ene( kt, ncor, usd, vsd, ua, va )   ! add the Stokes-Coriolis trend 
    122126         ENDIF 
    123127         ! 
     
    126130            ztrdu(:,:,:) = ua(:,:,:) 
    127131            ztrdv(:,:,:) = va(:,:,:) 
    128             CALL vor_ens( kt, nrvm, ua, va )                      ! relative vorticity or metric trend 
     132            CALL vor_ens( kt, nrvm, un , vn , ua, va )            ! relative vorticity or metric trend 
    129133            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    130134            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     
    132136            ztrdu(:,:,:) = ua(:,:,:) 
    133137            ztrdv(:,:,:) = va(:,:,:) 
    134             CALL vor_ens( kt, ncor, ua, va )                      ! planetary vorticity trend 
     138            CALL vor_ens( kt, ncor, un , vn , ua, va )            ! planetary vorticity trend 
    135139            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    136140            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    137141            CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 
    138          ELSE 
    139             CALL vor_ens( kt, ntot, ua, va )                ! total vorticity trend 
     142         ELSE                                               ! total vorticity trend 
     143                             CALL vor_ens( kt, ntot, un , vn , ua, va )  ! total vorticity trend 
     144            IF( ln_stcor )   CALL vor_ens( kt, ncor, usd, vsd, ua, va )  ! add the Stokes-Coriolis trend 
    140145         ENDIF 
    141146         ! 
     
    144149            ztrdu(:,:,:) = ua(:,:,:) 
    145150            ztrdv(:,:,:) = va(:,:,:) 
    146             CALL vor_ens( kt, nrvm, ua, va )                      ! relative vorticity or metric trend (ens) 
     151            CALL vor_ens( kt, nrvm, un , vn , ua, va )            ! relative vorticity or metric trend (ens) 
    147152            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    148153            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     
    150155            ztrdu(:,:,:) = ua(:,:,:) 
    151156            ztrdv(:,:,:) = va(:,:,:) 
    152             CALL vor_ene( kt, ncor, ua, va )                      ! planetary vorticity trend (ene) 
     157            CALL vor_ene( kt, ncor, un , vn , ua, va )            ! planetary vorticity trend (ene) 
    153158            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    154159            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    155160            CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 
    156          ELSE 
    157             CALL vor_ens( kt, nrvm, ua, va )                ! relative vorticity or metric trend (ens) 
    158             CALL vor_ene( kt, ncor, ua, va )                ! planetary vorticity trend (ene) 
     161         ELSE                                               ! total vorticity trend 
     162                             CALL vor_ens( kt, nrvm, un , vn , ua, va )   ! relative vorticity or metric trend (ens) 
     163                             CALL vor_ene( kt, ncor, un , vn , ua, va )   ! planetary vorticity trend (ene) 
     164            IF( ln_stcor )   CALL vor_ene( kt, ncor, usd, vsd, ua, va )   ! add the Stokes-Coriolis trend 
    159165        ENDIF 
    160166         ! 
     
    163169            ztrdu(:,:,:) = ua(:,:,:) 
    164170            ztrdv(:,:,:) = va(:,:,:) 
    165             CALL vor_een( kt, nrvm, ua, va )                      ! relative vorticity or metric trend 
     171            CALL vor_een( kt, nrvm, un , vn , ua, va )            ! relative vorticity or metric trend 
    166172            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    167173            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     
    169175            ztrdu(:,:,:) = ua(:,:,:) 
    170176            ztrdv(:,:,:) = va(:,:,:) 
    171             CALL vor_een( kt, ncor, ua, va )                      ! planetary vorticity trend 
     177            CALL vor_een( kt, ncor, un , vn , ua, va )            ! planetary vorticity trend 
    172178            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    173179            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    174180            CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 
    175          ELSE 
    176             CALL vor_een( kt, ntot, ua, va )                ! total vorticity trend 
     181         ELSE                                               ! total vorticity trend 
     182                             CALL vor_een( kt, ntot, un , vn , ua, va )   ! total vorticity trend 
     183            IF( ln_stcor )   CALL vor_ene( kt, ncor, usd, vsd, ua, va )   ! add the Stokes-Coriolis trend 
    177184         ENDIF 
    178185         ! 
     
    190197 
    191198 
    192    SUBROUTINE vor_ene( kt, kvor, pua, pva ) 
     199   SUBROUTINE vor_ene( kt, kvor, pun, pvn, pua, pva ) 
    193200      !!---------------------------------------------------------------------- 
    194201      !!                  ***  ROUTINE vor_ene  *** 
     
    210217      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    211218      !!---------------------------------------------------------------------- 
    212       INTEGER , INTENT(in   )                         ::   kt     ! ocean time-step index 
    213       INTEGER , INTENT(in   )                         ::   kvor   ! =ncor (planetary) ; =ntot (total) ; 
    214       !                                                           ! =nrvm (relative vorticity or metric) 
    215       REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua    ! total u-trend 
    216       REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pva    ! total v-trend 
     219      INTEGER , INTENT(in   )                         ::   kt          ! ocean time-step index 
     220      INTEGER , INTENT(in   )                         ::   kvor        ! =ncor (planetary) ; =ntot (total) ; 
     221      !                                                                ! =nrvm (relative vorticity or metric) 
     222      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pun, pvn    ! now velocities 
     223      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua, pva    ! total v-trend 
    217224      ! 
    218225      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
     
    223230      IF( nn_timing == 1 )  CALL timing_start('vor_ene') 
    224231      ! 
    225       CALL wrk_alloc( jpi, jpj, zwx, zwy, zwz )  
     232      CALL wrk_alloc( jpi,jpj,  zwx, zwy, zwz )  
    226233      ! 
    227234      IF( kt == nit000 ) THEN 
     
    237244         SELECT CASE( kvor )                 !==  vorticity considered  ==! 
    238245         CASE ( np_COR )                           !* Coriolis (planetary vorticity) 
    239             zwz(:,:) = ff(:,:)  
     246            zwz(:,:) = ff_f(:,:)  
    240247         CASE ( np_RVO )                           !* relative vorticity 
    241248            DO jj = 1, jpjm1 
    242249               DO ji = 1, fs_jpim1   ! vector opt. 
    243                   zwz(ji,jj) = (  e2v(ji+1,jj  ) * vn(ji+1,jj  ,jk) - e2v(ji,jj) * vn(ji,jj,jk)    & 
    244                      &          - e1u(ji  ,jj+1) * un(ji  ,jj+1,jk) + e1u(ji,jj) * un(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
     250                  zwz(ji,jj) = (  e2v(ji+1,jj  ) * pvn(ji+1,jj  ,jk) - e2v(ji,jj) * pvn(ji,jj,jk)    & 
     251                     &          - e1u(ji  ,jj+1) * pun(ji  ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    245252               END DO 
    246253            END DO 
     
    248255            DO jj = 1, jpjm1 
    249256               DO ji = 1, fs_jpim1   ! vector opt. 
    250                   zwz(ji,jj) = (   ( vn(ji+1,jj  ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
    251                        &         - ( un(ji  ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji  ,jj+1) - e1u(ji,jj) )   )   & 
     257                  zwz(ji,jj) = (   ( pvn(ji+1,jj  ,jk) + pvn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
     258                       &         - ( pun(ji  ,jj+1,jk) + pun (ji,jj,jk) ) * ( e1u(ji  ,jj+1) - e1u(ji,jj) )   )   & 
    252259                       &     * 0.5 * r1_e1e2f(ji,jj) 
    253260               END DO 
     
    256263            DO jj = 1, jpjm1 
    257264               DO ji = 1, fs_jpim1   ! vector opt. 
    258                   zwz(ji,jj) = ff(ji,jj) + (  e2v(ji+1,jj  ) * vn(ji+1,jj  ,jk) - e2v(ji,jj) * vn(ji,jj,jk)    & 
    259                      &                      - e1u(ji  ,jj+1) * un(ji  ,jj+1,jk) + e1u(ji,jj) * un(ji,jj,jk)  ) & 
     265                  zwz(ji,jj) = ff_f(ji,jj) + (  e2v(ji+1,jj  ) * pvn(ji+1,jj  ,jk) - e2v(ji,jj) * pvn(ji,jj,jk)    & 
     266                     &                      - e1u(ji  ,jj+1) * pun(ji  ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk)  ) & 
    260267                     &                   * r1_e1e2f(ji,jj) 
    261268               END DO 
     
    264271            DO jj = 1, jpjm1 
    265272               DO ji = 1, fs_jpim1   ! vector opt. 
    266                   zwz(ji,jj) = ff(ji,jj)                                                                        & 
    267                        &     + (   ( vn(ji+1,jj  ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
    268                        &         - ( un(ji  ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji  ,jj+1) - e1u(ji,jj) )   )   & 
     273                  zwz(ji,jj) = ff_f(ji,jj)                                                                        & 
     274                       &     + (   ( pvn(ji+1,jj  ,jk) + pvn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
     275                       &         - ( pun(ji  ,jj+1,jk) + pun (ji,jj,jk) ) * ( e1u(ji  ,jj+1) - e1u(ji,jj) )   )   & 
    269276                       &     * 0.5 * r1_e1e2f(ji,jj) 
    270277               END DO 
     
    284291         IF( ln_sco ) THEN 
    285292            zwz(:,:) = zwz(:,:) / e3f_n(:,:,jk) 
    286             zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * un(:,:,jk) 
    287             zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 
     293            zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * pun(:,:,jk) 
     294            zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * pvn(:,:,jk) 
    288295         ELSE 
    289             zwx(:,:) = e2u(:,:) * un(:,:,jk) 
    290             zwy(:,:) = e1v(:,:) * vn(:,:,jk) 
     296            zwx(:,:) = e2u(:,:) * pun(:,:,jk) 
     297            zwy(:,:) = e1v(:,:) * pvn(:,:,jk) 
    291298         ENDIF 
    292299         !                                   !==  compute and add the vorticity term trend  =! 
     
    311318 
    312319 
    313    SUBROUTINE vor_ens( kt, kvor, pua, pva ) 
     320   SUBROUTINE vor_ens( kt, kvor, pun, pvn, pua, pva ) 
    314321      !!---------------------------------------------------------------------- 
    315322      !!                ***  ROUTINE vor_ens  *** 
     
    331338      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    332339      !!---------------------------------------------------------------------- 
    333       INTEGER , INTENT(in   )                         ::   kt     ! ocean time-step index 
    334       INTEGER , INTENT(in   )                         ::   kvor   ! =ncor (planetary) ; =ntot (total) ; 
    335          !                                                        ! =nrvm (relative vorticity or metric) 
    336       REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua    ! total u-trend 
    337       REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pva    ! total v-trend 
     340      INTEGER , INTENT(in   )                         ::   kt          ! ocean time-step index 
     341      INTEGER , INTENT(in   )                         ::   kvor        ! =ncor (planetary) ; =ntot (total) ; 
     342         !                                                             ! =nrvm (relative vorticity or metric) 
     343      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pun, pvn    ! now velocities 
     344      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua, pva    ! total v-trend 
    338345      ! 
    339346      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     
    344351      IF( nn_timing == 1 )  CALL timing_start('vor_ens') 
    345352      ! 
    346       CALL wrk_alloc( jpi, jpj, zwx, zwy, zwz )  
     353      CALL wrk_alloc( jpi,jpj,  zwx, zwy, zwz )  
    347354      ! 
    348355      IF( kt == nit000 ) THEN 
     
    357364         SELECT CASE( kvor )                 !==  vorticity considered  ==! 
    358365         CASE ( np_COR )                           !* Coriolis (planetary vorticity) 
    359             zwz(:,:) = ff(:,:)  
     366            zwz(:,:) = ff_f(:,:)  
    360367         CASE ( np_RVO )                           !* relative vorticity 
    361368            DO jj = 1, jpjm1 
    362369               DO ji = 1, fs_jpim1   ! vector opt. 
    363                   zwz(ji,jj) = (  e2v(ji+1,jj  ) * vn(ji+1,jj  ,jk) - e2v(ji,jj) * vn(ji,jj,jk)    & 
    364                      &          - e1u(ji  ,jj+1) * un(ji  ,jj+1,jk) + e1u(ji,jj) * un(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
     370                  zwz(ji,jj) = (  e2v(ji+1,jj  ) * pvn(ji+1,jj  ,jk) - e2v(ji,jj) * pvn(ji,jj,jk)    & 
     371                     &          - e1u(ji  ,jj+1) * pun(ji  ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    365372               END DO 
    366373            END DO 
     
    368375            DO jj = 1, jpjm1 
    369376               DO ji = 1, fs_jpim1   ! vector opt. 
    370                   zwz(ji,jj) = (   ( vn(ji+1,jj  ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
    371                        &         - ( un(ji  ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji  ,jj+1) - e1u(ji,jj) )   )   & 
     377                  zwz(ji,jj) = (   ( pvn(ji+1,jj  ,jk) + pvn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
     378                       &         - ( pun(ji  ,jj+1,jk) + pun (ji,jj,jk) ) * ( e1u(ji  ,jj+1) - e1u(ji,jj) )   )   & 
    372379                       &     * 0.5 * r1_e1e2f(ji,jj) 
    373380               END DO 
     
    376383            DO jj = 1, jpjm1 
    377384               DO ji = 1, fs_jpim1   ! vector opt. 
    378                   zwz(ji,jj) = ff(ji,jj) + (  e2v(ji+1,jj  ) * vn(ji+1,jj  ,jk) - e2v(ji,jj) * vn(ji,jj,jk)    & 
    379                      &                      - e1u(ji  ,jj+1) * un(ji  ,jj+1,jk) + e1u(ji,jj) * un(ji,jj,jk)  ) & 
     385                  zwz(ji,jj) = ff_f(ji,jj) + (  e2v(ji+1,jj  ) * pvn(ji+1,jj  ,jk) - e2v(ji,jj) * pvn(ji,jj,jk)    & 
     386                     &                      - e1u(ji  ,jj+1) * pun(ji  ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk)  ) & 
    380387                     &                   * r1_e1e2f(ji,jj) 
    381388               END DO 
     
    384391            DO jj = 1, jpjm1 
    385392               DO ji = 1, fs_jpim1   ! vector opt. 
    386                   zwz(ji,jj) = ff(ji,jj)                                                                       & 
    387                        &     + (   ( vn(ji+1,jj  ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
    388                        &         - ( un(ji  ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji  ,jj+1) - e1u(ji,jj) )   )   & 
     393                  zwz(ji,jj) = ff_f(ji,jj)                                                                       & 
     394                       &     + (   ( pvn(ji+1,jj  ,jk) + pvn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
     395                       &         - ( pun(ji  ,jj+1,jk) + pun (ji,jj,jk) ) * ( e1u(ji  ,jj+1) - e1u(ji,jj) )   )   & 
    389396                       &     * 0.5 * r1_e1e2f(ji,jj) 
    390397               END DO 
     
    404411         IF( ln_sco ) THEN                   !==  horizontal fluxes  ==! 
    405412            zwz(:,:) = zwz(:,:) / e3f_n(:,:,jk) 
    406             zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * un(:,:,jk) 
    407             zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 
     413            zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * pun(:,:,jk) 
     414            zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * pvn(:,:,jk) 
    408415         ELSE 
    409             zwx(:,:) = e2u(:,:) * un(:,:,jk) 
    410             zwy(:,:) = e1v(:,:) * vn(:,:,jk) 
     416            zwx(:,:) = e2u(:,:) * pun(:,:,jk) 
     417            zwy(:,:) = e1v(:,:) * pvn(:,:,jk) 
    411418         ENDIF 
    412419         !                                   !==  compute and add the vorticity term trend  =! 
     
    431438 
    432439 
    433    SUBROUTINE vor_een( kt, kvor, pua, pva ) 
     440   SUBROUTINE vor_een( kt, kvor, pun, pvn, pua, pva ) 
    434441      !!---------------------------------------------------------------------- 
    435442      !!                ***  ROUTINE vor_een  *** 
     
    448455      !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 
    449456      !!---------------------------------------------------------------------- 
    450       INTEGER , INTENT(in   )                         ::   kt     ! ocean time-step index 
    451       INTEGER , INTENT(in   )                         ::   kvor   ! =ncor (planetary) ; =ntot (total) ; =nrvm (relative or metric) 
    452       REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua    ! total u-trend 
    453       REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pva    ! total v-trend 
     457      INTEGER , INTENT(in   )                         ::   kt          ! ocean time-step index 
     458      INTEGER , INTENT(in   )                         ::   kvor        ! =ncor (planetary) ; =ntot (total) ; 
     459         !                                                             ! =nrvm (relative vorticity or metric) 
     460      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pun, pvn    ! now velocities 
     461      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua, pva    ! total v-trend 
    454462      ! 
    455463      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     
    506514            DO jj = 1, jpjm1 
    507515               DO ji = 1, fs_jpim1   ! vector opt. 
    508                   zwz(ji,jj) = ff(ji,jj) * z1_e3f(ji,jj) 
     516                  zwz(ji,jj) = ff_f(ji,jj) * z1_e3f(ji,jj) 
    509517               END DO 
    510518            END DO 
     
    512520            DO jj = 1, jpjm1 
    513521               DO ji = 1, fs_jpim1   ! vector opt. 
    514                   zwz(ji,jj) = (  e2v(ji+1,jj  ) * vn(ji+1,jj  ,jk) - e2v(ji,jj) * vn(ji,jj,jk)    & 
    515                      &          - e1u(ji  ,jj+1) * un(ji  ,jj+1,jk) + e1u(ji,jj) * un(ji,jj,jk)  ) & 
     522                  zwz(ji,jj) = (  e2v(ji+1,jj  ) * pvn(ji+1,jj  ,jk) - e2v(ji,jj) * pvn(ji,jj,jk)    & 
     523                     &          - e1u(ji  ,jj+1) * pun(ji  ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk)  ) & 
    516524                     &       * r1_e1e2f(ji,jj) * z1_e3f(ji,jj) 
    517525               END DO 
     
    520528            DO jj = 1, jpjm1 
    521529               DO ji = 1, fs_jpim1   ! vector opt. 
    522                   zwz(ji,jj) = (   ( vn(ji+1,jj  ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
    523                        &         - ( un(ji  ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji  ,jj+1) - e1u(ji,jj) )   )   & 
     530                  zwz(ji,jj) = (   ( pvn(ji+1,jj  ,jk) + pvn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
     531                       &         - ( pun(ji  ,jj+1,jk) + pun (ji,jj,jk) ) * ( e1u(ji  ,jj+1) - e1u(ji,jj) )   )   & 
    524532                       &     * 0.5 * r1_e1e2f(ji,jj) * z1_e3f(ji,jj) 
    525533               END DO 
     
    528536            DO jj = 1, jpjm1 
    529537               DO ji = 1, fs_jpim1   ! vector opt. 
    530                   zwz(ji,jj) = (  ff(ji,jj) + (  e2v(ji+1,jj  ) * vn(ji+1,jj  ,jk) - e2v(ji,jj) * vn(ji,jj,jk)    & 
    531                      &                         - e1u(ji  ,jj+1) * un(ji  ,jj+1,jk) + e1u(ji,jj) * un(ji,jj,jk)  ) & 
     538                  zwz(ji,jj) = (  ff_f(ji,jj) + (  e2v(ji+1,jj  ) * pvn(ji+1,jj  ,jk) - e2v(ji,jj) * pvn(ji,jj,jk)    & 
     539                     &                           - e1u(ji  ,jj+1) * pun(ji  ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk)  ) & 
    532540                     &                      * r1_e1e2f(ji,jj)    ) * z1_e3f(ji,jj) 
    533541               END DO 
     
    536544            DO jj = 1, jpjm1 
    537545               DO ji = 1, fs_jpim1   ! vector opt. 
    538                   zwz(ji,jj) = (  ff(ji,jj)                                                                        & 
    539                        &        + (   ( vn(ji+1,jj  ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
    540                        &            - ( un(ji  ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji  ,jj+1) - e1u(ji,jj) )   )   & 
     546                  zwz(ji,jj) = (  ff_f(ji,jj)                                                                        & 
     547                       &        + (   ( pvn(ji+1,jj  ,jk) + pvn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
     548                       &            - ( pun(ji  ,jj+1,jk) + pun (ji,jj,jk) ) * ( e1u(ji  ,jj+1) - e1u(ji,jj) )   )   & 
    541549                       &        * 0.5 * r1_e1e2f(ji,jj)   ) * z1_e3f(ji,jj) 
    542550               END DO 
     
    557565         ! 
    558566         !                                   !==  horizontal fluxes  ==! 
    559          zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * un(:,:,jk) 
    560          zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 
     567         zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * pun(:,:,jk) 
     568         zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * pvn(:,:,jk) 
    561569 
    562570         !                                   !==  compute and add the vorticity term trend  =! 
     
    626634         WRITE(numout,*) 'dyn_vor_init : vorticity term : read namelist and control the consistency' 
    627635         WRITE(numout,*) '~~~~~~~~~~~~' 
    628          WRITE(numout,*) '        Namelist namdyn_vor : choice of the vorticity term scheme' 
    629          WRITE(numout,*) '           energy    conserving scheme                    ln_dynvor_ene = ', ln_dynvor_ene 
    630          WRITE(numout,*) '           enstrophy conserving scheme                    ln_dynvor_ens = ', ln_dynvor_ens 
    631          WRITE(numout,*) '           mixed enstrophy/energy conserving scheme       ln_dynvor_mix = ', ln_dynvor_mix 
    632          WRITE(numout,*) '           enstrophy and energy conserving scheme         ln_dynvor_een = ', ln_dynvor_een 
    633          WRITE(numout,*) '              e3f = averaging /4 (=0) or /sum(tmask) (=1)    nn_een_e3f = ', nn_een_e3f 
    634          WRITE(numout,*) '           masked (=T) or unmasked(=F) vorticity          ln_dynvor_msk = ', ln_dynvor_msk 
     636         WRITE(numout,*) '   Namelist namdyn_vor : choice of the vorticity term scheme' 
     637         WRITE(numout,*) '      energy    conserving scheme                    ln_dynvor_ene = ', ln_dynvor_ene 
     638         WRITE(numout,*) '      enstrophy conserving scheme                    ln_dynvor_ens = ', ln_dynvor_ens 
     639         WRITE(numout,*) '      mixed enstrophy/energy conserving scheme       ln_dynvor_mix = ', ln_dynvor_mix 
     640         WRITE(numout,*) '      enstrophy and energy conserving scheme         ln_dynvor_een = ', ln_dynvor_een 
     641         WRITE(numout,*) '         e3f = averaging /4 (=0) or /sum(tmask) (=1)    nn_een_e3f = ', nn_een_e3f 
     642         WRITE(numout,*) '      masked (=T) or unmasked(=F) vorticity          ln_dynvor_msk = ', ln_dynvor_msk 
    635643      ENDIF 
    636644 
     
    639647      ! at angles with three ocean points and one land point 
    640648      IF(lwp) WRITE(numout,*) 
    641       IF(lwp) WRITE(numout,*) '           namlbc: change fmask value in the angles (T)   ln_vorlat = ', ln_vorlat 
     649      IF(lwp) WRITE(numout,*) '      change fmask value in the angles (T)           ln_vorlat = ', ln_vorlat 
    642650      IF( ln_vorlat .AND. ( ln_dynvor_ene .OR. ln_dynvor_ens .OR. ln_dynvor_mix ) ) THEN 
    643651         DO jk = 1, jpk 
     
    666674      ncor = np_COR 
    667675      IF( ln_dynadv_vec ) THEN      
    668          IF(lwp) WRITE(numout,*) '         Vector form advection : vorticity = Coriolis + relative vorticity' 
     676         IF(lwp) WRITE(numout,*) '      ===>>   Vector form advection : vorticity = Coriolis + relative vorticity' 
    669677         nrvm = np_RVO        ! relative vorticity 
    670678         ntot = np_CRV        ! relative + planetary vorticity 
    671679      ELSE                         
    672          IF(lwp) WRITE(numout,*) '         Flux form advection   : vorticity = Coriolis + metric term' 
     680         IF(lwp) WRITE(numout,*) '      ===>>   Flux form advection   : vorticity = Coriolis + metric term' 
    673681         nrvm = np_MET        ! metric term 
    674682         ntot = np_CME        ! Coriolis + metric term 
     
    677685      IF(lwp) THEN                   ! Print the choice 
    678686         WRITE(numout,*) 
    679          IF( nvor_scheme ==  np_ENE )   WRITE(numout,*) '         vorticity scheme ==>> energy conserving scheme' 
    680          IF( nvor_scheme ==  np_ENS )   WRITE(numout,*) '         vorticity scheme ==>> enstrophy conserving scheme' 
    681          IF( nvor_scheme ==  np_MIX )   WRITE(numout,*) '         vorticity scheme ==>> mixed enstrophy/energy conserving scheme' 
    682          IF( nvor_scheme ==  np_EEN )   WRITE(numout,*) '         vorticity scheme ==>> energy and enstrophy conserving scheme' 
     687         IF( nvor_scheme ==  np_ENE )   WRITE(numout,*) '      ===>>  energy conserving scheme' 
     688         IF( nvor_scheme ==  np_ENS )   WRITE(numout,*) '      ===>>  enstrophy conserving scheme' 
     689         IF( nvor_scheme ==  np_MIX )   WRITE(numout,*) '      ===>>  mixed enstrophy/energy conserving scheme' 
     690         IF( nvor_scheme ==  np_EEN )   WRITE(numout,*) '      ===>>  energy and enstrophy conserving scheme' 
    683691      ENDIF 
    684692      ! 
  • trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf.F90

    r6140 r7646  
    119119         WRITE(numout,*) 'dyn_zdf_init : vertical dynamics physics scheme' 
    120120         WRITE(numout,*) '~~~~~~~~~~~' 
    121          IF( nzdf ==  0 )   WRITE(numout,*) '              Explicit time-splitting scheme' 
    122          IF( nzdf ==  1 )   WRITE(numout,*) '              Implicit (euler backward) scheme' 
     121         IF( nzdf ==  0 )   WRITE(numout,*) '      ===>>   Explicit time-splitting scheme' 
     122         IF( nzdf ==  1 )   WRITE(numout,*) '      ===>>   Implicit (euler backward) scheme' 
    123123      ENDIF 
    124124      ! 
  • trunk/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90

    r6152 r7646  
    2222   USE divhor         ! horizontal divergence 
    2323   USE phycst         ! physical constants 
    24    USE bdy_oce        !  
    25    USE bdy_par        ! 
     24   USE bdy_oce   , ONLY: ln_bdy, bdytmask 
    2625   USE bdydyn2d       ! bdy_ssh routine 
    2726#if defined key_agrif 
     
    8887      ENDIF 
    8988      ! 
    90       CALL div_hor( kt )                              ! Horizontal divergence 
    91       ! 
    92       z2dt = 2._wp * rdt                              ! set time step size (Euler/Leapfrog) 
     89      z2dt = 2._wp * rdt                          ! set time step size (Euler/Leapfrog) 
    9390      IF( neuler == 0 .AND. kt == nit000 )   z2dt = rdt 
     91      zcoef = 0.5_wp * r1_rau0 
    9492 
    9593      !                                           !------------------------------! 
    9694      !                                           !   After Sea Surface Height   ! 
    9795      !                                           !------------------------------! 
     96      IF(ln_wd) THEN 
     97         CALL wad_lmt(sshb, zcoef * (emp_b(:,:) + emp(:,:)), z2dt) 
     98      ENDIF 
     99 
     100      CALL div_hor( kt )                               ! Horizontal divergence 
     101      ! 
    98102      zhdiv(:,:) = 0._wp 
    99103      DO jk = 1, jpkm1                                 ! Horizontal divergence of barotropic transports 
     
    104108      ! compute the vertical velocity which can be used to compute the non-linear terms of the momentum equations. 
    105109      !  
    106       zcoef = 0.5_wp * r1_rau0 
    107  
    108       IF(ln_wd) CALL wad_lmt(sshb, zcoef * (emp_b(:,:) + emp(:,:)), z2dt) 
    109  
    110110      ssha(:,:) = (  sshb(:,:) - z2dt * ( zcoef * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) )  ) * ssmask(:,:) 
    111111 
     
    116116         CALL agrif_ssh( kt ) 
    117117# endif 
    118 # if defined key_bdy 
    119          IF( lk_bdy ) THEN 
     118         IF( ln_bdy ) THEN 
    120119            CALL lbc_lnk( ssha, 'T', 1. )    ! Not sure that's necessary 
    121120            CALL bdy_ssh( ssha )             ! Duplicate sea level across open boundaries 
    122121         ENDIF 
    123 # endif 
    124122      ENDIF 
    125123 
     
    211209      ENDIF 
    212210 
    213 #if defined key_bdy 
    214       IF( lk_bdy ) THEN 
     211      IF( ln_bdy ) THEN 
    215212         DO jk = 1, jpkm1 
    216213            wn(:,:,jk) = wn(:,:,jk) * bdytmask(:,:) 
    217214         END DO 
    218215      ENDIF 
    219 #endif 
    220216      ! 
    221217      IF( nn_timing == 1 )  CALL timing_stop('wzv') 
  • trunk/NEMOGCM/NEMO/OPA_SRC/DYN/wet_dry.F90

    r6152 r7646  
    1  
    21MODULE wet_dry 
    32   !!============================================================================== 
     
    76   !! only effects if wetting/drying is on (ln_wd == .true.) 
    87   !!============================================================================== 
    9    !! History :    
    10    !!  NEMO      3.6  ! 2014-09  ((H.Liu)  Original code 
     8   !! History :  3.6  ! 2014-09  ((H.Liu)  Original code 
    119   !!                 ! will add the runoff and periodic BC case later 
    1210   !!---------------------------------------------------------------------- 
     
    3331   !! --------------------------------------------------------------------- 
    3432 
    35    REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) ::   wduflt, wdvflt !: u- and v- filter 
    3633   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) ::   wdmask         !: u- and v- limiter  
     34   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) ::   ht_wd          !: wetting and drying t-pt depths 
     35                                                                     !  (can include negative depths) 
    3736 
    3837   LOGICAL,  PUBLIC  ::   ln_wd       !: Wetting/drying activation switch (T:on,F:off) 
     
    7776         WRITE(numout,*) 
    7877         WRITE(numout,*) 'wad_init : Wetting and drying initialization through namelist read' 
    79          WRITE(numout,*) '~~~~~~~ ' 
     78         WRITE(numout,*) '~~~~~~~~' 
    8079         WRITE(numout,*) '   Namelist namwad' 
    8180         WRITE(numout,*) '      Logical activation                 ln_wd      = ', ln_wd 
     
    8483         WRITE(numout,*) '      land elevation threshold         rn_wdld      = ', rn_wdld 
    8584         WRITE(numout,*) '      Max iteration for W/D limiter    nn_wdit      = ', nn_wdit 
    86        ENDIF 
    87  
     85      ENDIF 
     86      ! 
    8887      IF(ln_wd) THEN 
    89          ALLOCATE( wduflt(jpi,jpj), wdvflt(jpi,jpj), wdmask(jpi,jpj), STAT=ierr ) 
     88         ALLOCATE( wdmask(jpi,jpj), ht_wd(jpi,jpj), STAT=ierr ) 
    9089         IF( ierr /= 0 ) CALL ctl_stop('STOP', 'wad_init : Array allocation error') 
    9190      ENDIF 
     91      ! 
    9292   END SUBROUTINE wad_init 
     93 
    9394 
    9495   SUBROUTINE wad_lmt( sshb1, sshemp, z2dt ) 
     
    107108      ! 
    108109      INTEGER  ::   ji, jj, jk, jk1     ! dummy loop indices 
    109       INTEGER  ::   zflag               ! local scalar 
     110      INTEGER  ::   jflag               ! local scalar 
    110111      REAL(wp) ::   zcoef, zdep1, zdep2 ! local scalars 
    111112      REAL(wp) ::   zzflxp, zzflxn      ! local scalars 
     
    116117      REAL(wp), POINTER,  DIMENSION(:,:) ::   zflxu,  zflxv            ! local 2D workspace 
    117118      REAL(wp), POINTER,  DIMENSION(:,:) ::   zflxu1, zflxv1           ! local 2D workspace 
    118  
    119119      !!---------------------------------------------------------------------- 
    120120      ! 
     
    131131        !IF(lwp) WRITE(numout,*) 'wad_lmt : wetting/drying limiters and velocity limiting' 
    132132        
    133         zflag  = 0 
     133        jflag  = 0 
    134134        zdepwd = 50._wp   !maximum depth on which that W/D could possibly happen 
    135135 
     
    145145        ! Horizontal Flux in u and v direction 
    146146        DO jk = 1, jpkm1   
    147            DO jj = 1, jpjm1 
    148               DO ji = 1, jpim1 
     147           DO jj = 1, jpj 
     148              DO ji = 1, jpi 
    149149                 zflxu(ji,jj) = zflxu(ji,jj) + e3u_n(ji,jj,jk) * un(ji,jj,jk) * umask(ji,jj,jk) 
    150150                 zflxv(ji,jj) = zflxv(ji,jj) + e3v_n(ji,jj,jk) * vn(ji,jj,jk) * vmask(ji,jj,jk) 
     
    156156        zflxv(:,:) = zflxv(:,:) * e1v(:,:) 
    157157        
    158         DO jj = 2, jpjm1 
    159            DO ji = 2, jpim1  
    160  
    161              IF(tmask(ji, jj, 1) < 0.5_wp) CYCLE   ! we don't care about land cells 
    162              IF(bathy(ji,jj) > zdepwd) CYCLE       ! and cells which will unlikely go dried out 
     158        wdmask(:,:) = 1 
     159        DO jj = 2, jpj 
     160           DO ji = 2, jpi  
     161 
     162             IF( tmask(ji, jj, 1) < 0.5_wp ) CYCLE   ! we don't care about land cells 
     163             IF( ht_wd(ji,jj) > zdepwd )      CYCLE   ! and cells which are unlikely to dry 
    163164 
    164165              zflxp(ji,jj) = max(zflxu(ji,jj), 0._wp) - min(zflxu(ji-1,jj),   0._wp) + & 
     
    167168                           & min(zflxv(ji,jj), 0._wp) - max(zflxv(ji,  jj-1), 0._wp)  
    168169 
    169               zdep2 = bathy(ji,jj) + sshb1(ji,jj) - rn_wdmin1 
    170               IF(zdep2 < 0._wp) THEN  !add more safty, but not necessary 
    171                 !zdep2 = 0._wp 
    172                 sshb1(ji,jj) = rn_wdmin1 - bathy(ji,jj) 
     170              zdep2 = ht_wd(ji,jj) + sshb1(ji,jj) - rn_wdmin1 
     171              IF(zdep2 .le. 0._wp) THEN  !add more safty, but not necessary 
     172                sshb1(ji,jj) = rn_wdmin1 - ht_wd(ji,jj) 
     173                IF(zflxu(ji,  jj) > 0._wp) zwdlmtu(ji  ,jj) = 0._wp 
     174                IF(zflxu(ji-1,jj) < 0._wp) zwdlmtu(ji-1,jj) = 0._wp 
     175                IF(zflxv(ji,  jj) > 0._wp) zwdlmtv(ji  ,jj) = 0._wp 
     176                IF(zflxv(ji,jj-1) < 0._wp) zwdlmtv(ji,jj-1) = 0._wp  
     177                wdmask(ji,jj) = 0._wp 
    173178              END IF 
    174179           ENDDO 
     
    182187           zflxu1(:,:) = zflxu(:,:) * zwdlmtu(:,:) 
    183188           zflxv1(:,:) = zflxv(:,:) * zwdlmtv(:,:) 
    184            
    185            DO jj = 2, jpjm1 
    186               DO ji = 2, jpim1  
     189           jflag = 0     ! flag indicating if any further iterations are needed 
     190           
     191           DO jj = 2, jpj 
     192              DO ji = 2, jpi  
    187193         
    188                  wdmask(ji,jj) = 0 
    189                  IF(tmask(ji, jj, 1) < 0.5_wp) CYCLE  
    190                  IF(bathy(ji,jj) > zdepwd) CYCLE 
     194                 IF( tmask(ji, jj, 1) < 0.5_wp ) CYCLE  
     195                 IF( ht_wd(ji,jj) > zdepwd )      CYCLE 
    191196         
    192197                 ztmp = e1e2t(ji,jj) 
     
    198203           
    199204                 zdep1 = (zzflxp + zzflxn) * z2dt / ztmp 
    200                  zdep2 = bathy(ji,jj) + sshb1(ji,jj) - rn_wdmin1 - z2dt * sshemp(ji,jj)  ! this one can be moved out of the loop 
    201            
    202                  IF(zdep1 > zdep2) THEN 
    203                    zflag = 1 
    204                    wdmask(ji, jj) = 1 
     205                 zdep2 = ht_wd(ji,jj) + sshb1(ji,jj) - rn_wdmin1 - z2dt * sshemp(ji,jj) 
     206           
     207                 IF( zdep1 > zdep2 ) THEN 
     208                   wdmask(ji, jj) = 0 
    205209                   zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zflxp(ji,jj) * z2dt ) 
    206                    zcoef = max(zcoef, 0._wp) 
     210                   !zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zzflxp * z2dt ) 
     211                   ! flag if the limiter has been used but stop flagging if the only 
     212                   ! changes have zeroed the coefficient since further iterations will 
     213                   ! not change anything 
     214                   IF( zcoef > 0._wp ) THEN 
     215                      jflag = 1  
     216                   ELSE 
     217                      zcoef = 0._wp 
     218                   ENDIF 
    207219                   IF(jk1 > nn_wdit) zcoef = 0._wp 
    208220                   IF(zflxu1(ji,  jj) > 0._wp) zwdlmtu(ji  ,jj) = zcoef 
    209221                   IF(zflxu1(ji-1,jj) < 0._wp) zwdlmtu(ji-1,jj) = zcoef 
    210222                   IF(zflxv1(ji,  jj) > 0._wp) zwdlmtv(ji  ,jj) = zcoef 
    211                    IF(zflxv1(ji,jj-1) < 0._wp) zwdlmtv(ji-1,jj) = zcoef 
     223                   IF(zflxv1(ji,jj-1) < 0._wp) zwdlmtv(ji,jj-1) = zcoef 
    212224                 END IF 
    213225              END DO ! ji loop 
     
    217229           CALL lbc_lnk( zwdlmtv, 'V', 1. ) 
    218230 
    219            IF(lk_mpp) CALL mpp_max(zflag)   !max over the global domain 
    220  
    221            IF(zflag == 0) EXIT 
    222            
    223            zflag = 0     ! flag indicating if any further iteration is needed? 
     231           IF(lk_mpp) CALL mpp_max(jflag)   !max over the global domain 
     232 
     233           IF(jflag == 0) EXIT 
     234           
    224235        END DO  ! jk1 loop 
    225236        
     
    231242        CALL lbc_lnk( un, 'U', -1. ) 
    232243        CALL lbc_lnk( vn, 'V', -1. ) 
    233         
    234         IF(zflag == 1 .AND. lwp) WRITE(numout,*) 'Need more iterations in wad_lmt!!!' 
     244      ! 
     245        un_b(:,:) = un_b(:,:) * zwdlmtu(:, :) 
     246        vn_b(:,:) = vn_b(:,:) * zwdlmtv(:, :) 
     247        CALL lbc_lnk( un_b, 'U', -1. ) 
     248        CALL lbc_lnk( vn_b, 'V', -1. ) 
     249        
     250        IF(jflag == 1 .AND. lwp) WRITE(numout,*) 'Need more iterations in wad_lmt!!!' 
    235251        
    236252        !IF( ln_rnf      )   CALL sbc_rnf_div( hdivn )          ! runoffs (update hdivn field) 
     
    240256        CALL wrk_dealloc( jpi, jpj, zflxp, zflxn, zflxu, zflxv, zflxu1, zflxv1 ) 
    241257        CALL wrk_dealloc( jpi, jpj, zwdlmtu, zwdlmtv) 
    242       ! 
    243       END IF 
    244  
     258        ! 
     259      ENDIF 
     260      ! 
    245261      IF( nn_timing == 1 )  CALL timing_stop('wad_lmt') 
     262      ! 
    246263   END SUBROUTINE wad_lmt 
     264 
    247265 
    248266   SUBROUTINE wad_lmt_bt( zflxu, zflxv, sshn_e, zssh_frc, rdtbt ) 
     
    260278      ! 
    261279      INTEGER  ::   ji, jj, jk, jk1     ! dummy loop indices 
    262       INTEGER  ::   zflag         ! local scalar 
     280      INTEGER  ::   jflag               ! local scalar 
    263281      REAL(wp) ::   z2dt 
    264282      REAL(wp) ::   zcoef, zdep1, zdep2 ! local scalars 
     
    269287      REAL(wp), POINTER,  DIMENSION(:,:) ::   zflxp,  zflxn            ! local 2D workspace 
    270288      REAL(wp), POINTER,  DIMENSION(:,:) ::   zflxu1, zflxv1           ! local 2D workspace 
    271  
    272       !!---------------------------------------------------------------------- 
    273       ! 
    274  
     289      !!---------------------------------------------------------------------- 
     290      ! 
    275291      IF( nn_timing == 1 )  CALL timing_start('wad_lmt_bt') 
    276292 
     
    284300        !IF(lwp) WRITE(numout,*) 'wad_lmt_bt : wetting/drying limiters and velocity limiting' 
    285301        
    286         zflag  = 0 
     302        jflag  = 0 
    287303        zdepwd = 50._wp   !maximum depth that ocean cells can have W/D processes 
    288304 
     
    291307        zflxp(:,:)   = 0._wp 
    292308        zflxn(:,:)   = 0._wp 
    293         !zflxu(:,:)   = 0._wp 
    294         !zflxv(:,:)   = 0._wp 
    295309 
    296310        zwdlmtu(:,:)  = 1._wp 
     
    299313        ! Horizontal Flux in u and v direction 
    300314        
    301         !zflxu(:,:) = zflxu(:,:) * e2u(:,:) 
    302         !zflxv(:,:) = zflxv(:,:) * e1v(:,:) 
    303         
    304         DO jj = 2, jpjm1 
    305            DO ji = 2, jpim1  
    306  
    307              IF(tmask(ji, jj, 1) < 0.5_wp) CYCLE   ! we don't care about land cells 
    308              IF(bathy(ji,jj) > zdepwd) CYCLE       ! and cells which will unlikely go dried out 
     315        DO jj = 2, jpj 
     316           DO ji = 2, jpi  
     317 
     318             IF( tmask(ji, jj, 1 ) < 0.5_wp) CYCLE   ! we don't care about land cells 
     319             IF( ht_wd(ji,jj) > zdepwd )      CYCLE   ! and cells which are unlikely to dry 
    309320 
    310321              zflxp(ji,jj) = max(zflxu(ji,jj), 0._wp) - min(zflxu(ji-1,jj),   0._wp) + & 
     
    313324                           & min(zflxv(ji,jj), 0._wp) - max(zflxv(ji,  jj-1), 0._wp)  
    314325 
    315               zdep2 = bathy(ji,jj) + sshn_e(ji,jj) - rn_wdmin1 
    316               IF(zdep2 < 0._wp) THEN  !add more safty, but not necessary 
    317                 !zdep2 = 0._wp 
    318                sshn_e(ji,jj) = rn_wdmin1 - bathy(ji,jj) 
     326              zdep2 = ht_wd(ji,jj) + sshn_e(ji,jj) - rn_wdmin1 
     327              IF(zdep2 .le. 0._wp) THEN  !add more safety, but not necessary 
     328                sshn_e(ji,jj) = rn_wdmin1 - ht_wd(ji,jj) 
     329                IF(zflxu(ji,  jj) > 0._wp) zwdlmtu(ji  ,jj) = 0._wp 
     330                IF(zflxu(ji-1,jj) < 0._wp) zwdlmtu(ji-1,jj) = 0._wp 
     331                IF(zflxv(ji,  jj) > 0._wp) zwdlmtv(ji  ,jj) = 0._wp 
     332                IF(zflxv(ji,jj-1) < 0._wp) zwdlmtv(ji,jj-1) = 0._wp  
    319333              END IF 
    320334           ENDDO 
     
    328342           zflxu1(:,:) = zflxu(:,:) * zwdlmtu(:,:) 
    329343           zflxv1(:,:) = zflxv(:,:) * zwdlmtv(:,:) 
    330            
    331            DO jj = 2, jpjm1 
    332               DO ji = 2, jpim1  
     344           jflag = 0     ! flag indicating if any further iterations are needed 
     345           
     346           DO jj = 2, jpj 
     347              DO ji = 2, jpi  
    333348         
    334                  wdmask(ji,jj) = 0 
    335                  IF(tmask(ji, jj, 1) < 0.5_wp) CYCLE  
    336                  IF(bathy(ji,jj) > zdepwd) CYCLE 
     349                 IF( tmask(ji, jj, 1 ) < 0.5_wp) CYCLE  
     350                 IF( ht_wd(ji,jj) > zdepwd )      CYCLE 
    337351         
    338352                 ztmp = e1e2t(ji,jj) 
     
    344358           
    345359                 zdep1 = (zzflxp + zzflxn) * z2dt / ztmp 
    346                  zdep2 = bathy(ji,jj) + sshn_e(ji,jj) - rn_wdmin1   ! this one can be moved out of the loop 
    347                  zdep2 = zdep2 - z2dt * zssh_frc(ji,jj) 
     360                 zdep2 = ht_wd(ji,jj) + sshn_e(ji,jj) - rn_wdmin1 - z2dt * zssh_frc(ji,jj) 
    348361           
    349362                 IF(zdep1 > zdep2) THEN 
    350                    zflag = 1 
    351                    !wdmask(ji, jj) = 1 
    352363                   zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zflxp(ji,jj) * z2dt ) 
    353                    zcoef = max(zcoef, 0._wp) 
     364                   !zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zzflxp * z2dt ) 
     365                   ! flag if the limiter has been used but stop flagging if the only 
     366                   ! changes have zeroed the coefficient since further iterations will 
     367                   ! not change anything 
     368                   IF( zcoef > 0._wp ) THEN 
     369                      jflag = 1  
     370                   ELSE 
     371                      zcoef = 0._wp 
     372                   ENDIF 
    354373                   IF(jk1 > nn_wdit) zcoef = 0._wp 
    355374                   IF(zflxu1(ji,  jj) > 0._wp) zwdlmtu(ji  ,jj) = zcoef 
    356375                   IF(zflxu1(ji-1,jj) < 0._wp) zwdlmtu(ji-1,jj) = zcoef 
    357376                   IF(zflxv1(ji,  jj) > 0._wp) zwdlmtv(ji  ,jj) = zcoef 
    358                    IF(zflxv1(ji,jj-1) < 0._wp) zwdlmtv(ji-1,jj) = zcoef 
     377                   IF(zflxv1(ji,jj-1) < 0._wp) zwdlmtv(ji,jj-1) = zcoef 
    359378                 END IF 
    360379              END DO ! ji loop 
     
    364383           CALL lbc_lnk( zwdlmtv, 'V', 1. ) 
    365384 
    366            IF(lk_mpp) CALL mpp_max(zflag)   !max over the global domain 
    367  
    368            IF(zflag == 0) EXIT 
    369            
    370            zflag = 0     ! flag indicating if any further iteration is needed? 
     385           IF(lk_mpp) CALL mpp_max(jflag)   !max over the global domain 
     386 
     387           IF(jflag == 0) EXIT 
     388           
    371389        END DO  ! jk1 loop 
    372390        
     
    377395        CALL lbc_lnk( zflxv, 'V', -1. ) 
    378396        
    379         IF(zflag == 1 .AND. lwp) WRITE(numout,*) 'Need more iterations in wad_lmt_bt!!!' 
     397        IF(jflag == 1 .AND. lwp) WRITE(numout,*) 'Need more iterations in wad_lmt_bt!!!' 
    380398        
    381399        !IF( ln_rnf      )   CALL sbc_rnf_div( hdivn )          ! runoffs (update hdivn field) 
     
    385403        CALL wrk_dealloc( jpi, jpj, zflxp, zflxn, zflxu1, zflxv1 ) 
    386404        CALL wrk_dealloc( jpi, jpj, zwdlmtu, zwdlmtv) 
    387       ! 
     405        ! 
    388406      END IF 
    389407 
    390408      IF( nn_timing == 1 )  CALL timing_stop('wad_lmt') 
    391409   END SUBROUTINE wad_lmt_bt 
     410 
     411   !!============================================================================== 
    392412END MODULE wet_dry 
Note: See TracChangeset for help on using the changeset viewer.