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 14408 – NEMO

Changeset 14408


Ignore:
Timestamp:
2021-02-05T13:46:32+01:00 (3 years ago)
Author:
agn
Message:

All MJB corrections & Alan's modified code for zri_b
Included Alan's modified code for zri_b

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser_4.0/src/OCE/ZDF/zdfosm.F90

    r14407 r14408  
    308308      REAL(wp), DIMENSION(jpi,jpj) :: zdbds_mle    ! Magnitude of horizontal buoyancy gradient. 
    309309      ! Flux-gradient relationship variables 
    310       REAL(wp), DIMENSION(jpi, jpj) :: zshear, zri_i ! Shear production and interfacial richardon number. 
     310      REAL(wp), DIMENSION(jpi, jpj) :: zshear ! Shear production. 
    311311 
    312312      REAL(wp) :: zl_c,zl_l,zl_eps  ! Used to calculate turbulence length scale. 
     
    611611      CALL zdf_osm_velocity_rotation( zcos_wind, zsin_wind, zu_bl, zv_bl, zdu_bl, zdv_bl ) 
    612612! Determine the state of the OSBL, stable/unstable, shear/no shear 
    613       CALL zdf_osm_osbl_state( lconv, lshear, j_ddh, zwb_ent, zwb_min, zshear, zri_i ) 
     613      CALL zdf_osm_osbl_state( lconv, lshear, j_ddh, zwb_ent, zwb_min, zshear ) 
    614614 
    615615      IF ( ln_osm_mle ) THEN 
     
    766766               DO jk = 2, ibld(ji,jj) 
    767767                  zznd_d=gdepw_n(ji,jj,jk) / dstokes(ji,jj) 
    768                   ghamt(ji,jj,jk) = ghamt(ji,jj,jk) + 1.5 * EXP ( -0.9 * zznd_d ) & 
     768                  ghamt(ji,jj,jk) = ghamt(ji,jj,jk) + 2.15 * EXP ( -0.85 * zznd_d ) & 
    769769                       &          *                 ( 1.0 - EXP ( -4.0 * zznd_d ) ) * zsc_wth_1(ji,jj) 
    770770                  ! 
    771                   ghams(ji,jj,jk) = ghams(ji,jj,jk) + 1.5 * EXP ( -0.9 * zznd_d ) & 
     771                  ghams(ji,jj,jk) = ghams(ji,jj,jk) + 2.15 * EXP ( -0.85 * zznd_d ) & 
    772772                       &          *                 ( 1.0 - EXP ( -4.0 * zznd_d ) ) *  zsc_ws_1(ji,jj) 
    773773               END DO 
     
    817817 
    818818       WHERE ( lconv ) 
    819           zsc_wth_1 = zwbav * zwth0 * ( 1.0 + EXP ( 0.2 * zhol ) ) / ( zvstr**3 + 0.5 * zwstrc**3 + epsln ) 
    820           zsc_ws_1  = zwbav * zws0  * ( 1.0 + EXP ( 0.2 * zhol ) ) / ( zvstr**3 + 0.5 * zwstrc**3 + epsln ) 
     819          zsc_wth_1 = zwbav * zwth0 * ( 1.0 + EXP ( 0.2 * zhol ) ) * zhml / ( zvstr**3 + 0.5 * zwstrc**3 + epsln ) 
     820          zsc_ws_1  = zwbav * zws0  * ( 1.0 + EXP ( 0.2 * zhol ) ) * zhml / ( zvstr**3 + 0.5 * zwstrc**3 + epsln ) 
    821821       ELSEWHERE 
    822822          zsc_wth_1 = 0._wp 
     
    829829                DO jk = 2, imld(ji,jj) 
    830830                   zznd_ml = gdepw_n(ji,jj,jk) / zhml(ji,jj) 
    831                    ! calculate turbulent length scale 
    832                    zl_c = 0.9 * ( 1.0 - EXP ( - 7.0 * ( zznd_ml - zznd_ml**3 / 3.0 ) ) )                                           & 
    833                         &     * ( 1.0 - EXP ( -15.0 * (     1.1 - zznd_ml          ) ) ) 
    834                    zl_l = 2.0 * ( 1.0 - EXP ( - 2.0 * ( zznd_ml - zznd_ml**3 / 3.0 ) ) )                                           & 
    835                         &     * ( 1.0 - EXP ( - 5.0 * (     1.0 - zznd_ml          ) ) ) * ( 1.0 + dstokes(ji,jj) / zhml (ji,jj) ) 
     831                   ! calculate turbulent time scale 
     832                   zl_c = 0.9 * ( 1.0 - EXP ( - 5.0 * ( zznd_ml + zznd_ml**3 / 3.0 ) ) )                                           & 
     833                        &     * ( 1.0 - EXP ( -15.0 * (     1.2 - zznd_ml          ) ) ) 
     834                   zl_l = 2.0 * ( 1.0 - EXP ( - 2.0 * ( zznd_ml + zznd_ml**3 / 3.0 ) ) )                                           & 
     835                        &     * ( 1.0 - EXP ( - 8.0 * (     1.15 - zznd_ml          ) ) ) * ( 1.0 + dstokes(ji,jj) / zhml (ji,jj) ) 
    836836                   zl_eps = zl_l + ( zl_c - zl_l ) / ( 1.0 + EXP ( -3.0 * LOG10 ( - zhol(ji,jj) ) ) ) ** (3.0 / 2.0) 
    837837                   ! non-gradient buoyancy terms 
    838                    ghamt(ji,jj,jk) = ghamt(ji,jj,jk) + 0.3 * 0.5 * zsc_wth_1(ji,jj) * zl_eps * zhml(ji,jj) * zznd_ml/ ( 0.15 + zznd_ml ) 
    839                    ghams(ji,jj,jk) = ghams(ji,jj,jk) + 0.3 * 0.5 *  zsc_ws_1(ji,jj) * zl_eps * zhml(ji,jj) * zznd_ml / ( 0.15 + zznd_ml ) 
     838                   ghamt(ji,jj,jk) = ghamt(ji,jj,jk) + 0.3 * 0.4 * zsc_wth_1(ji,jj) * zl_eps / ( 0.15 + zznd_ml ) 
     839                   ghams(ji,jj,jk) = ghams(ji,jj,jk) + 0.3 * 0.4 *  zsc_ws_1(ji,jj) * zl_eps / ( 0.15 + zznd_ml ) 
    840840                END DO 
    841841                 
     
    846846                  zws_ent =  -0.003 * ( 0.15 * zvstr(ji,jj)**3 + zwstrc(ji,jj)**3 )**pthird * ( 1.0 - zdh(ji,jj) /zhbl(ji,jj) ) * zds_ml(ji,jj) 
    847847! Cubic profile used for buoyancy term 
    848                   za_cubic = 0.755 * ztau_sc_u(ji,jj) 
    849                   zb_cubic = 0.25 * ztau_sc_u(ji,jj) 
    850848                  DO jk = 2, ibld(ji,jj) 
    851849                    zznd_pyc = -( gdepw_n(ji,jj,jk) - zhbl(ji,jj) ) / zdh(ji,jj) 
     
    11291127       DO jj=2, jpjm1 
    11301128          DO ji = 2, jpim1 
    1131              ghamt(ji,jj,ibld(ji,jj)+ibld_ext) = 0._wp 
    1132              ghams(ji,jj,ibld(ji,jj)+ibld_ext) = 0._wp 
    1133              ghamu(ji,jj,ibld(ji,jj)+ibld_ext) = 0._wp 
    1134              ghamv(ji,jj,ibld(ji,jj)+ibld_ext) = 0._wp 
     1129             ghamt(ji,jj,ibld(ji,jj)) = 0._wp 
     1130             ghams(ji,jj,ibld(ji,jj)) = 0._wp 
     1131             ghamu(ji,jj,ibld(ji,jj)) = 0._wp 
     1132             ghamv(ji,jj,ibld(ji,jj)) = 0._wp 
    11351133          END DO       ! ji loop 
    11361134       END DO          ! jj loop 
     
    14351433                 zvispyc_s_sc(ji,jj) = 0.09 * ( zwb_min(ji,jj) + 0.0025 * zvel_sc_pyc * ( zhbl(ji,jj) / zdh(ji,jj) - 1.0 ) * ( zb_ml(ji,jj) - zb_bl(ji,jj) ) ) 
    14361434                 zvispyc_s_sc(ji,jj) = zvispyc_s_sc(ji,jj) * zstab_fac 
    1437                  zvispyc_s_sc(ji,jj) = MAX( zvispyc_s_sc(ji,jj), -0.5 * zvispyc_s_sc(ji,jj) ) 
     1435                 zvispyc_s_sc(ji,jj) = MAX( zvispyc_s_sc(ji,jj), -0.5 * zvispyc_n_sc(ji,jj) ) 
    14381436 
    14391437                 zbeta_d_sc(ji,jj) = 1.0 - ( ( zdifpyc_n_sc(ji,jj) + 1.4 * zdifpyc_s_sc(ji,jj) ) / ( zdifml_sc(ji,jj) + epsln ) )**p2third 
     
    15151513  END SUBROUTINE zdf_osm_diffusivity_viscosity 
    15161514   
    1517   SUBROUTINE zdf_osm_osbl_state( lconv, lshear, j_ddh, zwb_ent, zwb_min, zshear, zri_i ) 
     1515  SUBROUTINE zdf_osm_osbl_state( lconv, lshear, j_ddh, zwb_ent, zwb_min, zshear ) 
    15181516 
    15191517!!--------------------------------------------------------------------- 
     
    15321530     REAL(wp), DIMENSION(jpi,jpj) :: zwb_ent, zwb_min ! Buoyancy fluxes at base of well-mixed layer. 
    15331531     REAL(wp), DIMENSION(jpi,jpj) :: zshear  ! production of TKE due to shear across the pycnocline 
    1534      REAL(wp), DIMENSION(jpi,jpj) :: zri_i  ! Interfacial Richardson Number 
    15351532 
    15361533! Local Variables 
     
    15641561     zekman(:,:) = EXP( - zek * ABS( ff_t(:,:) ) * zhbl(:,:) / MAX(zustar(:,:), 1.e-8 ) ) 
    15651562      
    1566      WHERE ( lconv ) 
    1567        zri_i = zdb_ml * zhml**2 / MAX( ( zvstr**3 + 0.5 * zwstrc**3 )**p2third * zdh, 1.e-12 ) 
    1568      END WHERE 
    1569  
    15701563     zshear(:,:) = 0._wp 
    15711564     j_ddh(:,:) = 1      
     
    15781571                   & / MAX( zekman(ji,jj), 1.e-6 )  , 5._wp ) 
    15791572             
    1580               zri_b(ji,jj) = zdb_ml(ji,jj) * zdh(ji,jj) / ( MAX( zdu_ml(ji,jj), 1.e-5 )**2 + MAX( zdv_ml(ji,jj), 1.e-5)**2 ) 
    1581                          
     1573              IF ( ff_t(ji,jj) >= 0._wp ) THEN 
     1574                 !  Northern Hemisphere 
     1575                 zri_b(ji,jj) = zdb_ml(ji,jj) * zdh(ji,jj) / ( MAX( zdu_ml(ji,jj), 1.e-5 )**2 + MAX( -zdv_ml(ji,jj), 1.e-5)**2 ) 
     1576              ELSE 
     1577                  !  Southern Hemisphere 
     1578                 zri_b(ji,jj) = zdb_ml(ji,jj) * zdh(ji,jj) / ( MAX( zdu_ml(ji,jj), 1.e-5 )**2 + MAX( zdv_ml(ji,jj), 1.e-5)**2 ) 
     1579              ENDIF 
    15821580              zshear(ji,jj) = za_shr * zekman(ji,jj) * ( MAX( zustar(ji,jj)**2 * zdu_ml(ji,jj) / zhbl(ji,jj), 0._wp ) + zb_shr * MAX( -ff_t(ji,jj) * zustke(ji,jj) * dstokes(ji,jj) * zdv_ml(ji,jj) / zhbl(ji,jj), 0._wp ) ) 
    15831581! Stability Dependence 
     
    17961794      REAL(wp), DIMENSION(jpi,jpj)  :: znd_param 
    17971795      REAL(wp)                      :: zbuoy, ztmp, zpe_mle_layer 
    1798       REAL(wp)                      :: zpe_mle_ref, zwb_ent, zdbdz_mle_int 
     1796      REAL(wp)                      :: zpe_mle_ref, zdbdz_mle_int 
    17991797       
    18001798      znd_param(:,:) = 0._wp 
     
    18381836           DO ji = 2, jpim1 
    18391837             IF ( lconv(ji,jj) ) THEN 
    1840                zwb_ent = - 2.0 * 0.2 * zwbav(ji,jj) & 
    1841                   &                  - 0.15 * zustar(ji,jj)**3 /zhml(ji,jj) & 
    1842                   &         + ( 0.15 * EXP( -1.5 * zla(ji,jj) ) * zustar(ji,jj)**3 & 
    1843                   &         - 0.03 * zwstrl(ji,jj)**3 ) / zhml(ji,jj) 
    1844                IF ( -2.0 * zwb_fk(ji,jj) / zwb_ent > 0.5 ) THEN 
     1838               IF ( -2.0 * zwb_fk(ji,jj) / zwb_ent(ji,jj) > 0.5 ) THEN 
    18451839                 IF ( zhmle(ji,jj) > 1.2 * zhbl(ji,jj) ) THEN 
    18461840! MLE layer growing 
     
    19151909              jkb1 = MIN(jkb + 1, mbkt(ji,jj)) 
    19161910              zdtdz(ji,jj) = - ( tsn(ji,jj,jkb1,jp_tem) - tsn(ji,jj,jkb,jp_tem ) ) & 
    1917                    &   / e3t_n(ji,jj,ibld(ji,jj)) 
     1911                   &   / e3t_n(ji,jj,jkb) 
    19181912              zdsdz(ji,jj) = - ( tsn(ji,jj,jkb1,jp_sal) - tsn(ji,jj,jkb,jp_sal ) ) & 
    1919                    &   / e3t_n(ji,jj,ibld(ji,jj)) 
     1913                   &   / e3t_n(ji,jj,jkb) 
    19201914              zdbdz(ji,jj) = grav * zthermal * zdtdz(ji,jj) - grav * zbeta * zdsdz(ji,jj) 
    19211915           ELSE 
     
    19571951                   zbgrad = zalpha(ji,jj) * zdb_ml(ji,jj) * ztmp + zdbdz_bl_ext(ji,jj) 
    19581952                   zgamma_b_nd = zdbdz_bl_ext(ji,jj) * zdh(ji,jj) / MAX(zdb_ml(ji,jj), epsln) 
    1959                    DO jk = 2, ibld(ji,jj)+ibld_ext 
     1953                   DO jk = 2, ibld(ji,jj) 
    19601954                     znd = -( gdepw_n(ji,jj,jk) - zhbl(ji,jj) ) * ztmp 
    19611955                     IF ( znd <= zzeta_m ) THEN 
     
    21582152                    zpert = 2.0 * ( 1.0 + 0.0 * 2.0 * zvstr(ji,jj) * rn_rdt / hbl(ji,jj) ) * zvstr(ji,jj)**2 / hbl(ji,jj) 
    21592153                ELSE 
    2160                     zpert = MAX( 2.0 * zvstr(ji,jj)**2 / hbl(ji,jj), zdb_bl(ji,jj) ) 
     2154                    zpert = MAX( zvstr(ji,jj)**2 / hbl(ji,jj), zdb_bl(ji,jj) ) 
    21612155                ENDIF 
    21622156                zdhdt(ji,jj) = 2.0 * zdhdt(ji,jj) / MAX(zpert, epsln) 
     
    22052199                    zpert = 2.0 * zvstr(ji,jj)**2 / hbl(ji,jj) 
    22062200                ELSE 
    2207                     zpert = MAX( 2.0 * zvstr(ji,jj)**2 / hbl(ji,jj), zdb_bl(ji,jj) ) 
     2201                    zpert = MAX( zvstr(ji,jj)**2 / hbl(ji,jj), zdb_bl(ji,jj) ) 
    22082202                ENDIF 
    22092203                zdhdt(ji,jj) = 2.0 * zdhdt(ji,jj) / MAX(zpert, epsln) 
Note: See TracChangeset for help on using the changeset viewer.