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 6041 for branches/2015/dev_r5776_UKMO2_OBS_efficiency_improvs/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90 – NEMO

Ignore:
Timestamp:
2015-12-14T10:06:06+01:00 (8 years ago)
Author:
timgraham
Message:

Merged head of trunk into branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5776_UKMO2_OBS_efficiency_improvs/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90

    r5776 r6041  
    2828   !!            3.6  !  2014-11  (P. Mathiot) add ice shelf capability 
    2929   !!---------------------------------------------------------------------- 
    30 #if defined key_zdftke   ||   defined key_esopa 
     30#if defined key_zdftke 
    3131   !!---------------------------------------------------------------------- 
    3232   !!   'key_zdftke'                                   TKE vertical physics 
     
    102102#  include "vectopt_loop_substitute.h90" 
    103103   !!---------------------------------------------------------------------- 
    104    !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
     104   !! NEMO/OPA 3.7 , NEMO Consortium (2015) 
    105105   !! $Id$ 
    106106   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    117117         &      e_pdl(jpi,jpj,jpk) , e_ric(jpi,jpj,jpk) ,                          & 
    118118#endif 
    119          &      apdlr(jpi,jpj,jpk) , htau  (jpi,jpj)    , dissl(jpi,jpj,jpk) ,     &  
    120          &      STAT= zdf_tke_alloc      ) 
     119         &      htau  (jpi,jpj)    , dissl(jpi,jpj,jpk) ,     &  
     120         &      apdlr(jpi,jpj,jpk) ,                                           STAT= zdf_tke_alloc      ) 
    121121         ! 
    122122      IF( lk_mpp             )   CALL mpp_sum ( zdf_tke_alloc ) 
     
    232232      REAL(wp) ::   zzd_up, zzd_lw                  !    -         - 
    233233!!bfr      REAL(wp) ::   zebot                           !    -         - 
    234       INTEGER , POINTER, DIMENSION(:,:  ) :: imlc 
    235       REAL(wp), POINTER, DIMENSION(:,:  ) :: zhlc 
    236       REAL(wp), POINTER, DIMENSION(:,:,:) :: zpelc, zdiag, zd_up, zd_lw, z3du, z3dv 
     234      INTEGER , POINTER, DIMENSION(:,:  ) ::   imlc 
     235      REAL(wp), POINTER, DIMENSION(:,:  ) ::   zhlc 
     236      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zpelc, zdiag, zd_up, zd_lw, z3du, z3dv 
    237237      REAL(wp)                            ::   zri  !   local Richardson number 
    238238      !!-------------------------------------------------------------------- 
     
    240240      IF( nn_timing == 1 )  CALL timing_start('tke_tke') 
    241241      ! 
    242       CALL wrk_alloc( jpi,jpj, imlc )    ! integer 
    243       CALL wrk_alloc( jpi,jpj, zhlc )  
    244       CALL wrk_alloc( jpi,jpj,jpk, zpelc, zdiag, zd_up, zd_lw, z3du, z3dv )  
     242      CALL wrk_alloc( jpi,jpj,       imlc )    ! integer 
     243      CALL wrk_alloc( jpi,jpj,       zhlc )  
     244      CALL wrk_alloc( jpi,jpj,jpk,   zpelc, zdiag, zd_up, zd_lw, z3du, z3dv )  
    245245      ! 
    246246      zbbrau = rn_ebb / rau0       ! Local constant initialisation 
     
    256256         DO jj = 2, jpjm1            ! en(mikt(ji,jj))   = rn_emin 
    257257            DO ji = fs_2, fs_jpim1   ! vector opt. 
    258                en(ji,jj,mikt(ji,jj))=rn_emin * tmask(ji,jj,1) 
     258               en(ji,jj,mikt(ji,jj)) = rn_emin * tmask(ji,jj,1) 
    259259            END DO 
    260260         END DO 
     
    277277      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    278278      !                     en(bot)   = (rn_ebb0/rau0)*0.5*sqrt(u_botfr^2+v_botfr^2) (min value rn_emin) 
    279 !CDIR NOVERRCHK 
    280279!!    DO jj = 2, jpjm1 
    281 !CDIR NOVERRCHK 
    282280!!       DO ji = fs_2, fs_jpim1   ! vector opt. 
    283281!!          ztx2 = bfrua(ji-1,jj) * ub(ji-1,jj,mbku(ji-1,jj)) + & 
     
    318316         END DO 
    319317         zcof = 0.016 / SQRT( zrhoa * zcdrag ) 
    320 !CDIR NOVERRCHK 
    321318         DO jk = 2, jpkm1         !* TKE Langmuir circulation source term added to en 
    322 !CDIR NOVERRCHK 
    323             DO jj = 2, jpjm1 
    324 !CDIR NOVERRCHK 
     319            DO jj = 2, jpjm1 
    325320               DO ji = fs_2, fs_jpim1   ! vector opt. 
    326321                  zus  = zcof * SQRT( taum(ji,jj) )           ! Stokes drift 
     
    348343               z3du(ji,jj,jk) = 0.5 * ( avm(ji,jj,jk  ) + avm(ji+1,jj,jk) )   & 
    349344                  &                 * (  un(ji,jj,jk-1) -  un(ji  ,jj,jk) )   & 
    350                   &                 * (  ub(ji,jj,jk-1) -  ub(ji  ,jj,jk) ) / (  fse3uw_n(ji,jj,jk) * fse3uw_b(ji,jj,jk) ) 
     345                  &                 * (  ub(ji,jj,jk-1) -  ub(ji  ,jj,jk) ) * wumask(ji,jj,jk) & 
     346                  &                 / (  fse3uw_n(ji,jj,jk) * fse3uw_b(ji,jj,jk) ) 
    351347               z3dv(ji,jj,jk) = 0.5 * ( avm(ji,jj,jk  ) + avm(ji,jj+1,jk) )   & 
    352348                  &                 * (  vn(ji,jj,jk-1) -  vn(ji,jj  ,jk) )   & 
    353                   &                 * (  vb(ji,jj,jk-1) -  vb(ji,jj  ,jk) ) / (  fse3vw_n(ji,jj,jk) * fse3vw_b(ji,jj,jk) ) 
     349                  &                 * (  vb(ji,jj,jk-1) -  vb(ji,jj  ,jk) ) * wvmask(ji,jj,jk) & 
     350                  &                 / (  fse3vw_n(ji,jj,jk) * fse3vw_b(ji,jj,jk) ) 
    354351            END DO 
    355352         END DO 
     
    374371         ! 
    375372      ENDIF 
    376          !          
     373      !          
    377374      DO jk = 2, jpkm1           !* Matrix and right hand side in en 
    378375         DO jj = 2, jpjm1 
     
    406403         END DO 
    407404      END DO 
    408       ! 
    409       ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
    410       DO jj = 2, jpjm1 
     405      DO jj = 2, jpjm1                             ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
    411406         DO ji = fs_2, fs_jpim1   ! vector opt. 
    412407            zd_lw(ji,jj,2) = en(ji,jj,2) - zd_lw(ji,jj,2) * en(ji,jj,1)    ! Surface boudary conditions on tke 
     
    420415         END DO 
    421416      END DO 
    422       ! 
    423       ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
    424       DO jj = 2, jpjm1 
     417      DO jj = 2, jpjm1                             ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
    425418         DO ji = fs_2, fs_jpim1   ! vector opt. 
    426419            en(ji,jj,jpkm1) = zd_lw(ji,jj,jpkm1) / zdiag(ji,jj,jpkm1) 
     
    463456         END DO 
    464457      ELSEIF( nn_etau == 3 ) THEN       !* penetration belox the mixed layer (HF variability) 
    465 !CDIR NOVERRCHK 
    466458         DO jk = 2, jpkm1 
    467 !CDIR NOVERRCHK 
    468             DO jj = 2, jpjm1 
    469 !CDIR NOVERRCHK 
     459            DO jj = 2, jpjm1 
    470460               DO ji = fs_2, fs_jpim1   ! vector opt. 
    471461                  ztx2 = utau(ji-1,jj  ) + utau(ji,jj) 
     
    482472      CALL lbc_lnk( en, 'W', 1. )      ! Lateral boundary conditions (sign unchanged) 
    483473      ! 
    484       CALL wrk_dealloc( jpi,jpj, imlc )    ! integer 
    485       CALL wrk_dealloc( jpi,jpj, zhlc )  
    486       CALL wrk_dealloc( jpi,jpj,jpk, zpelc, zdiag, zd_up, zd_lw, z3du, z3dv )  
     474      CALL wrk_dealloc( jpi,jpj,       imlc )    ! integer 
     475      CALL wrk_dealloc( jpi,jpj,       zhlc )  
     476      CALL wrk_dealloc( jpi,jpj,jpk,   zpelc, zdiag, zd_up, zd_lw, z3du, z3dv )  
    487477      ! 
    488478      IF( nn_timing == 1 )  CALL timing_stop('tke_tke') 
     
    528518      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    529519      REAL(wp) ::   zrn2, zraug, zcoef, zav     ! local scalars 
    530       REAL(wp) ::   zdku, zri, zsqen     !   -      - 
     520      REAL(wp) ::   zdku, zri, zsqen            !   -      - 
    531521      REAL(wp) ::   zdkv, zemxl, zemlm, zemlp   !   -      - 
    532522      REAL(wp), POINTER, DIMENSION(:,:,:) :: zmpdl, zmxlm, zmxld 
     
    558548      ENDIF 
    559549      ! 
    560 !CDIR NOVERRCHK 
    561550      DO jk = 2, jpkm1              ! interior value : l=sqrt(2*e/n^2) 
    562 !CDIR NOVERRCHK 
    563          DO jj = 2, jpjm1 
    564 !CDIR NOVERRCHK 
     551         DO jj = 2, jpjm1 
    565552            DO ji = fs_2, fs_jpim1   ! vector opt. 
    566553               zrn2 = MAX( rn2(ji,jj,jk), rsmall ) 
    567                zmxlm(ji,jj,jk) = MAX(  rmxl_min,  SQRT( 2._wp * en(ji,jj,jk) / zrn2 ) ) 
     554               zmxlm(ji,jj,jk) = MAX(  rmxl_min,  SQRT( 2._wp * en(ji,jj,jk) / zrn2 )  ) 
    568555            END DO 
    569556         END DO 
     
    572559      !                     !* Physical limits for the mixing length 
    573560      ! 
    574       zmxld(:,:,1 ) = zmxlm(:,:,1)   ! surface set to the minimum value  
     561      zmxld(:,:, 1 ) = zmxlm(:,:,1)   ! surface set to the minimum value  
    575562      zmxld(:,:,jpk) = rmxl_min       ! last level  set to the minimum value 
    576563      ! 
    577564      SELECT CASE ( nn_mxl ) 
    578565      ! 
     566 !!gm Not sure of that coding for ISF.... 
    579567      ! where wmask = 0 set zmxlm == fse3w 
    580568      CASE ( 0 )           ! bounded by the distance to surface and bottom 
     
    635623            END DO 
    636624         END DO 
    637 !CDIR NOVERRCHK 
    638625         DO jk = 2, jpkm1 
    639 !CDIR NOVERRCHK 
    640             DO jj = 2, jpjm1 
    641 !CDIR NOVERRCHK 
     626            DO jj = 2, jpjm1 
    642627               DO ji = fs_2, fs_jpim1   ! vector opt. 
    643628                  zemlm = MIN ( zmxld(ji,jj,jk),  zmxlm(ji,jj,jk) ) 
     
    659644      !                     !  Vertical eddy viscosity and diffusivity  (avmu, avmv, avt) 
    660645      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    661 !CDIR NOVERRCHK 
    662646      DO jk = 1, jpkm1            !* vertical eddy viscosity & diffivity at w-points 
    663 !CDIR NOVERRCHK 
    664          DO jj = 2, jpjm1 
    665 !CDIR NOVERRCHK 
     647         DO jj = 2, jpjm1 
    666648            DO ji = fs_2, fs_jpim1   ! vector opt. 
    667649               zsqen = SQRT( en(ji,jj,jk) ) 
     
    692674# if defined key_c1d 
    693675                  e_pdl(ji,jj,jk) = apdlr(ji,jj,jk) * wmask(ji,jj,jk)    ! c1d configuration : save masked Prandlt number 
     676!!gm bug NO zri here.... 
     677!!gm remove the specific diag for c1d ! 
    694678                  e_ric(ji,jj,jk) = zri * wmask(ji,jj,jk)                            ! c1d config. : save Ri 
    695679# endif 
Note: See TracChangeset for help on using the changeset viewer.