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 7991 for branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfric.F90 – NEMO

Ignore:
Timestamp:
2017-05-01T16:21:42+02:00 (7 years ago)
Author:
gm
Message:

#1880 (HPC-09) - step-5: OPA/ZDF shear production term computed outside closure schemes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfric.F90

    r7990 r7991  
    2121   USE oce            ! ocean dynamics and tracers variables 
    2222   USE dom_oce        ! ocean space and time domain variables 
    23    USE zdf_oce        ! ocean vertical physics 
     23   USE zdf_oce        ! vertical physics: variables 
     24   USE zdfsh2         ! vertical physics: shear production term of TKE 
    2425   USE phycst         ! physical constants 
    2526   USE sbc_oce,  ONLY :   taum 
     
    104105      INTEGER  ::   ji, jj, jk                 ! dummy loop indices 
    105106      LOGICAL  ::   ll_av_weight = .TRUE.      ! local logical 
    106       REAL(wp) ::   zsh2, zcfRi, zav, zustar   ! local scalars 
    107       REAL(wp), DIMENSION(jpi,jpj) ::   zdu2, zdv2, zh_ekm   ! 2D workspace 
     107      REAL(wp) ::   zcfRi, zav, zustar   ! local scalars 
     108      REAL(wp), DIMENSION(jpi,jpj)     ::   zh_ekm   ! 2D workspace 
     109      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zsh2     ! 3D     - 
    108110      !!---------------------------------------------------------------------- 
    109111      ! 
    110112      IF( nn_timing == 1 )   CALL timing_start('zdf_ric') 
    111113      ! 
    112       DO jk = 2, jpkm1        !==  avm and avt = F(Richardson number)  ==! 
    113          ! 
    114       IF( ll_av_weight ) THEN    !== viscosity weighted shear & stratification terms 
    115          ! 
    116          DO jj = 1, jpjm1           !* viscosity weighted shear term 
     114      !                       !==  avm and avt = F(Richardson number)  ==! 
     115      ! 
     116      !                          !* Shear production at uw- and vw-points (energy conserving form) 
     117      CALL zdf_sh2( zsh2 ) 
     118      ! 
     119      DO jk = 2, jpkm1           !* Vertical eddy viscosity and diffusivity coefficients 
     120         DO jj = 1, jpjm1 
    117121            DO ji = 1, jpim1 
    118                zdu2(ji,jj) = 0.5 * ( avm(ji,jj,jk  ) + avm(ji+1,jj,jk) ) * wumask(ji,jj,jk)      & 
    119                   &              * (  un(ji,jj,jk-1) -  un(ji  ,jj,jk) )                         & 
    120                   &              * (  ub(ji,jj,jk-1) -  ub(ji  ,jj,jk) ) / (  e3uw_n(ji,jj,jk) * e3uw_b(ji,jj,jk) ) 
    121                zdv2(ji,jj) = 0.5 * ( avm(ji,jj,jk  ) + avm(ji,jj+1,jk) ) * wumask(ji,jj,jk)      & 
    122                   &              * (  vn(ji,jj,jk-1) -  vn(ji,jj  ,jk) )                         & 
    123                   &              * (  vb(ji,jj,jk-1) -  vb(ji,jj  ,jk) ) / (  e3vw_n(ji,jj,jk) * e3vw_b(ji,jj,jk) ) 
    124             END DO 
    125          END DO 
    126          DO jj = 2, jpjm1 
    127             DO ji = 2, jpim1        !* Richardson number dependent coefficient 
    128                !                          ! shear of horizontal velocity 
    129                zsh2  =  ( zdu2(ji-1,jj) + zdu2(ji,jj) ) / MAX( 1._wp , umask(ji-1,jj,jk) + umask(ji,jj,jk) )   & 
    130                   &   + ( zdv2(ji,jj-1) + zdv2(ji,jj) ) / MAX( 1._wp , vmask(ji,jj-1,jk) + vmask(ji,jj,jk) )     
    131                !                          ! coefficient = F(richardson number) 
    132                zcfRi = 1._wp / (  1._wp + rn_alp * MAX(  0._wp , avt(ji,jj,jk) * rn2(ji,jj,jk) / ( zsh2 + 1.e-20 ) )  ) 
     122               !                          ! coefficient = F(richardson number) (avm-weighted Ri) 
     123               zcfRi = 1._wp / (  1._wp + rn_alp * MAX(  0._wp , avm(ji,jj,jk) * rn2(ji,jj,jk) / ( zsh2(ji,jj,jk) + 1.e-20 ) )  ) 
     124               zav   = rn_avmri * zcfRi**nn_ric 
    133125               ! 
    134                !                    !* Vertical eddy viscosity and diffusivity coefficients 
    135                zav = rn_avmri * zcfRi**nn_ric 
     126               !                          ! avm and avt coefficients 
    136127               avm(ji,jj,jk) = MAX(  zav         , avmb(jk)  ) * wmask(ji,jj,jk) 
    137128               avt(ji,jj,jk) = MAX(  zav * zcfRi , avtb(jk)  ) * wmask(ji,jj,jk) 
    138129            END DO 
    139130         END DO 
    140       ELSE                    !==  classical Richardson number definition  ==! 
    141          DO jj = 1, jpjm1           !* shear term 
    142             DO ji = 1, jpim1 
    143                zdu2(ji,jj) = 0.5 * (  un(ji,jj,jk-1) -  un(ji  ,jj,jk) )                         & 
    144                   &              * (  ub(ji,jj,jk-1) -  ub(ji  ,jj,jk) ) / (  e3uw_n(ji,jj,jk) * e3uw_b(ji,jj,jk) ) 
    145                zdv2(ji,jj) = 0.5 * (  vn(ji,jj,jk-1) -  vn(ji,jj  ,jk) )                         & 
    146                   &              * (  vb(ji,jj,jk-1) -  vb(ji,jj  ,jk) ) / (  e3vw_n(ji,jj,jk) * e3vw_b(ji,jj,jk) ) 
    147             END DO 
    148          END DO 
    149          DO jj = 2, jpjm1 
    150             DO ji = 2, jpim1        !* Richardson number dependent coefficient 
    151                !                          ! shear of horizontal velocity 
    152                zsh2  =  ( zdu2(ji-1,jj) + zdu2(ji,jj) ) / MAX( 1._wp , umask(ji-1,jj,jk) + umask(ji,jj,jk) )   & 
    153                   &   + ( zdv2(ji,jj-1) + zdv2(ji,jj) ) / MAX( 1._wp , vmask(ji,jj-1,jk) + vmask(ji,jj,jk) )     
    154                !                          ! coefficient = F(richardson number) 
    155                zcfRi = 1._wp / (  1._wp + rn_alp * MAX(  0._wp , rn2(ji,jj,jk) / ( zsh2 + 1.e-20 ) )  ) 
    156                ! 
    157                !                    !* Vertical eddy viscosity and diffusivity coefficients 
    158                zav = rn_avmri * zcfRi**nn_ric 
    159                avm(ji,jj,jk) = MAX(  zav         , avmb(jk)  ) * wmask(ji,jj,jk) 
    160                avt(ji,jj,jk) = MAX(  zav * zcfRi , avtb(jk)  ) * wmask(ji,jj,jk) 
    161             END DO 
    162          END DO 
    163       ENDIF 
    164          ! 
    165131      END DO 
     132      ! 
     133!!gm BUG <<<<====  This param can't work at low latitude  
     134!!gm               it provides there much to thick mixed layer ( summer 150m in GYRE configuration !!! ) 
    166135      ! 
    167136      IF( ln_mldw ) THEN      !==  set a minimum value in the Ekman layer  ==! 
     
    184153            END DO 
    185154         END DO 
    186       END IF 
     155      ENDIF 
    187156      ! 
    188157      IF( nn_timing == 1 )   CALL timing_stop('zdf_ric') 
Note: See TracChangeset for help on using the changeset viewer.