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

Changeset 14405


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

Alan's new code for when shear is switched on

File:
1 edited

Legend:

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

    r14404 r14405  
    288288      REAL(wp), DIMENSION(jpi,jpj) :: zdh   ! pycnocline depth - grid 
    289289      REAL(wp), DIMENSION(jpi,jpj) :: zdhdt ! BL depth tendency 
    290       REAL(wp), DIMENSION(jpi,jpj) :: zddhdt                                    ! correction to dhdt due to internal structure. 
    291290      REAL(wp), DIMENSION(jpi,jpj) :: zdtdz_bl_ext,zdsdz_bl_ext,zdbdz_bl_ext              ! external temperature/salinity and buoyancy gradients 
    292291      REAL(wp), DIMENSION(jpi,jpj) :: zdtdz_mle_ext,zdsdz_mle_ext,zdbdz_mle_ext              ! external temperature/salinity and buoyancy gradients 
     
    395394      ghams(:,:,:)   = 0._wp ; ghamu(:,:,:)   = 0._wp ; ghamv(:,:,:) = 0._wp 
    396395 
    397       zddhdt(:,:) = 0._wp 
    398       ! hbl = MAX(hbl,epsln) 
     396       ! hbl = MAX(hbl,epsln) 
    399397      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    400398      ! Calculate boundary layer scales 
     
    675673      CALL zdf_osm_vertical_average(imld-1, ibld-imld+1, zt_ml, zs_ml, zb_ml, zu_ml, zv_ml, zdt_ml, zds_ml, zdb_ml, zdu_ml, zdv_ml) 
    676674! Rate of change of hbl 
    677       CALL zdf_osm_calculate_dhdt( zdhdt, zddhdt ) 
     675      CALL zdf_osm_calculate_dhdt( zdhdt ) 
    678676      DO jj = 2, jpjm1 
    679677        DO ji = 2, jpim1 
     
    856854                    ghams(ji,jj,jk) = ghams(ji,jj,jk) - 0.045 * ( ( zws_ent * zdbdz_pyc(ji,jj,jk) ) * ztau_sc_u(ji,jj)**2 ) * MAX( ( 1.75 * zznd_pyc -0.15 * zznd_pyc**2 - 0.2 * zznd_pyc**3 ), 0.0 ) 
    857855                  END DO 
     856                  ! 
     857                  IF ( dh(ji,jj)  <  0.2*hbl(ji,jj) ) THEN 
     858                     zbuoy_pyc_sc = zalpha_pyc(ji,jj) * zdb_ml(ji,jj) / zdh(ji,jj) + zdbdz_bl_ext(ji,jj) 
     859                     zdelta_pyc = ( zvstr(ji,jj)**3 + zwstrc(ji,jj)**3 )**pthird / SQRT( MAX( zbuoy_pyc_sc, ( zvstr(ji,jj)**3 + zwstrc(ji,jj)**3 )**p2third / zdh(ji,jj)**2 ) ) 
    858860! 
    859                   zbuoy_pyc_sc = zalpha_pyc(ji,jj) * zdb_ml(ji,jj) / zdh(ji,jj) + zdbdz_bl_ext(ji,jj) 
    860                   zdelta_pyc = ( zvstr(ji,jj)**3 + zwstrc(ji,jj)**3 )**pthird / SQRT( MAX( zbuoy_pyc_sc, ( zvstr(ji,jj)**3 + zwstrc(ji,jj)**3 )**p2third / zdh(ji,jj)**2 ) ) 
     861                     zwt_pyc_sc_1 = 0.325 * ( zalpha_pyc(ji,jj) * zdt_ml(ji,jj) / zdh(ji,jj) + zdtdz_bl_ext(ji,jj) ) * zdelta_pyc**2 / zdh(ji,jj) 
    861862! 
    862                   zwt_pyc_sc_1 = 0.325 * ( zalpha_pyc(ji,jj) * zdt_ml(ji,jj) / zdh(ji,jj) + zdtdz_bl_ext(ji,jj) ) * zdelta_pyc**2 / zdh(ji,jj) 
     863                     zws_pyc_sc_1 = 0.325 * ( zalpha_pyc(ji,jj) * zds_ml(ji,jj) / zdh(ji,jj) + zdsdz_bl_ext(ji,jj) ) * zdelta_pyc**2 / zdh(ji,jj) 
    863864! 
    864                   zws_pyc_sc_1 = 0.325 * ( zalpha_pyc(ji,jj) * zds_ml(ji,jj) / zdh(ji,jj) + zdsdz_bl_ext(ji,jj) ) * zdelta_pyc**2 / zdh(ji,jj) 
     865                     zzeta_pyc = 0.15 - 0.175 / ( 1.0 + EXP( -3.5 * LOG10( -zhol(ji,jj) ) ) )  
     866                     DO jk = 2, ibld(ji,jj) 
     867                        zznd_pyc = -( gdepw_n(ji,jj,jk) - zhbl(ji,jj) ) / zdh(ji,jj) 
     868                        ghamt(ji,jj,jk) = ghamt(ji,jj,jk) + 0.05 * zwt_pyc_sc_1 * EXP( -0.25 * ( zznd_pyc / zzeta_pyc )**2 ) * zdh(ji,jj) / ( zvstr(ji,jj)**3 + zwstrc(ji,jj)**3 )**pthird 
    865869! 
    866                   zzeta_pyc = 0.15 - 0.175 / ( 1.0 + EXP( -3.5 * LOG10( -zhol(ji,jj) ) ) )  
    867                   DO jk = 2, ibld(ji,jj) 
    868                     zznd_pyc = -( gdepw_n(ji,jj,jk) - zhbl(ji,jj) ) / zdh(ji,jj) 
    869                     ghamt(ji,jj,jk) = ghamt(ji,jj,jk) + 0.05 * zwt_pyc_sc_1 * EXP( -0.25 * ( zznd_pyc / zzeta_pyc )**2 ) * zdh(ji,jj) / ( zvstr(ji,jj)**3 + zwstrc(ji,jj)**3 )**pthird 
    870 ! 
    871                     ghams(ji,jj,jk) = ghams(ji,jj,jk) + 0.05 * zws_pyc_sc_1 * EXP( -0.25 * ( zznd_pyc / zzeta_pyc )**2 ) * zdh(ji,jj) / ( zvstr(ji,jj)**3 + zwstrc(ji,jj)**3 )**pthird 
    872                   END DO 
     870                        ghams(ji,jj,jk) = ghams(ji,jj,jk) + 0.05 * zws_pyc_sc_1 * EXP( -0.25 * ( zznd_pyc / zzeta_pyc )**2 ) * zdh(ji,jj) / ( zvstr(ji,jj)**3 + zwstrc(ji,jj)**3 )**pthird 
     871                     END DO 
     872                  END IF 
    873873               ENDIF ! End of pycnocline                   
    874874             ELSE ! lconv test - stable conditions 
     
    912912       DO jj = 2, jpjm1 
    913913         DO ji = 2, jpim1 
    914            IF ( lpyc(ji,jj) ) THEN 
    915              IF ( j_ddh(ji,jj) == 0 ) THEN 
     914           IF( lconv(ji,jj) ) THEN 
     915             IF ( lpyc(ji,jj) ) THEN 
     916               IF ( j_ddh(ji,jj) == 0 ) THEN 
    916917! Place holding code. Parametrization needs checking for these conditions. 
    917918               zomega = ( 0.15 * zwstrl(ji,jj)**3 + zwstrc(ji,jj)**3 + 4.75 * ( zshear(ji,jj)* zhbl(ji,jj) ))**pthird 
     
    940941             END DO 
    941942           ENDIF  ! lpyc 
    942          END DO ! ji loop 
     943           ENDIF ! lconv 
     944        END DO ! ji loop 
    943945       END DO  ! jj loop 
    944946 
     
    10291031                       & + 0.3 * 0.1 * ( EXP( -zznd_d ) + EXP( -5.0 * ( 1.0 - zznd_ml ) ) ) * zsc_vw_1(ji,jj) 
    10301032               END DO 
     1033 
    10311034             ELSE 
    10321035               DO jk = 2, ibld(ji,jj) 
     
    10521055       END DO 
    10531056 
    1054        IF(ln_dia_osm) THEN 
     1057!        DO jj = 1, jpjm1 
     1058!          DO ji = 1, jpim1 
     1059!            IF ( lconv(ji,jj) ) THEN 
     1060!              IF ( lpyc(ji,jj) ) THEN 
     1061!                zd_cubic = ( 0.948 - 2.13 * zdh(ji,jj) / zhml(ji,jj) ) * zustar(ji,jj)**2 
     1062!                zc_cubic = -0.474 * zustar(ji,jj)**2 - zd_cubic 
     1063!                DO jk = imld(ji,jj), ibld(ji,jj) 
     1064!                  zznd_pyc = -( gdepw_n(ji,jj,jk) - zhbl(ji,jj) ) / zdh(ji,jj) 
     1065!                  ghamu(ji,jj,jk) = ghamu(ji,jj,jk) + 0.3 * ( zc_cubic * zznd_pyc**2 + zd_cubic * zznd_pyc**3 ) 
     1066!                END DO 
     1067!                zc_cubic= 3.0 * ff_t(ji,jj) * zustar(ji,jj) * zhml(ji,jj) 
     1068!                zd_cubic = -2.0 * ff_t(ji,jj) * zustar(ji,jj) * zhml(ji,jj) 
     1069!                DO jk = imld(ji,jj), ibld(ji,jj) 
     1070!                  zznd_pyc = -( gdepw_n(ji,jj,jk)-zhbl(ji,jj) ) / zdh(ji,jj) 
     1071!                  ghamv(ji,jj,jk) = ghamv(ji,jj,jk) + 0.3 * ( zc_cubic * zznd_pyc**2 + zd_cubic * zznd_pyc**3 ) 
     1072!                END DO 
     1073!              ENDIF 
     1074!            ENDIF 
     1075!          END DO 
     1076!        END DO 
     1077 
     1078       IF(ln_dSia_osm) THEN 
    10551079          IF ( iom_use("ghamu_f") ) CALL iom_put( "ghamu_f", wmask*ghamu ) 
    10561080          IF ( iom_use("ghamv_f") ) CALL iom_put( "ghamv_f", wmask*ghamv ) 
     
    13881412                 zdifpyc_n_sc(ji,jj) =  rn_dif_pyc * zvel_sc_ml * zdh(ji,jj) 
    13891413 
    1390                  IF ( lshear(ji,jj) .and. j_ddh(ji,jj) == 1 ) THEN 
     1414                 IF ( lshear(ji,jj) .AND. j_ddh(ji,jj) /= 2 ) THEN 
    13911415                   zdifpyc_n_sc(ji,jj) = zdifpyc_n_sc(ji,jj) + rn_vispyc_shr * ( zshear(ji,jj) * zhbl(ji,jj) )**pthird * zhbl(ji,jj) 
    13921416                 ENDIF 
     
    13981422                 zvispyc_n_sc(ji,jj) = 0.09 * zvel_sc_pyc * ( 1.0 - zhbl(ji,jj) / zdh(ji,jj) )**2 * ( 0.005 * ( zu_ml(ji,jj)-zu_bl(ji,jj) )**2 + 0.0075 * ( zv_ml(ji,jj)-zv_bl(ji,jj) )**2 ) / zdh(ji,jj) 
    13991423                 zvispyc_n_sc(ji,jj) = rn_vis_pyc * zvel_sc_ml * zdh(ji,jj) + zvispyc_n_sc(ji,jj) * zstab_fac 
    1400                  IF ( lshear(ji,jj) .and. j_ddh(ji,jj) == 1 ) THEN 
     1424                 IF ( lshear(ji,jj) .AND. j_ddh(ji,jj) /= 2 ) THEN 
    14011425                   zvispyc_n_sc(ji,jj) = zvispyc_n_sc(ji,jj) + rn_vispyc_shr * ( zshear(ji,jj) * zhbl(ji,jj ) )**pthird * zhbl(ji,jj) 
    14021426                 ENDIF 
     
    15081532      
    15091533     REAL(wp), DIMENSION(jpi,jpj) :: zekman 
    1510      REAL(wp) :: zri_p, zri_b   ! Richardson numbers 
     1534     REAL(wp), DIMENSION(jpi,jpj) :: zri_p, zri_b   ! Richardson numbers 
    15111535     REAL(wp) :: zshear_u, zshear_v, zwb_shr 
    15121536     REAL(wp) :: zwcor, zrf_conv, zrf_shear, zrf_langmuir, zr_stokes 
    15131537 
    1514      REAL, PARAMETER :: za_shr = 0.4, zb_shr = 6.5, za_wb_s = 0.1 
    1515      REAL, PARAMETER :: rn_ri_thres_a = 0.5, rn_ri_thresh_b = 0.59 
    1516      REAL, PARAMETER :: zalpha_c = 0.2, zalpha_lc = 0.04      
     1538     REAL, PARAMETER :: za_shr = 0.4, zb_shr = 6.5, za_wb_s = 0.8 
     1539     REAL, PARAMETER :: zalpha_c = 0.2, zalpha_lc = 0.03      
    15171540     REAL, PARAMETER :: zalpha_ls = 0.06, zalpha_s = 0.15 
    15181541     REAL, PARAMETER :: rn_ri_p_thresh = 27.0 
     1542     REAL, PARAMETER :: zri_c = 0.25 
     1543     REAL, PARAMETER :: zek = 4.0 
    15191544     REAL, PARAMETER :: zrot=0._wp  ! dummy rotation rate of surface stress. 
    15201545      
     
    15301555     END DO        
    15311556  
    1532      zekman(:,:) = EXP( - 4.0 * ABS( ff_t(:,:) ) * zhbl(:,:) / MAX(zustar(:,:), 1.e-8 ) ) 
     1557     zekman(:,:) = EXP( - zek * ABS( ff_t(:,:) ) * zhbl(:,:) / MAX(zustar(:,:), 1.e-8 ) ) 
    15331558      
    15341559     WHERE ( lconv ) 
     
    15431568         IF ( lconv(ji,jj) ) THEN 
    15441569            IF ( zdb_bl(ji,jj) > 0._wp ) THEN 
    1545               zri_p = MAX (  SQRT( zdb_bl(ji,jj) * zdh(ji,jj) / MAX( zdu_bl(ji,jj)**2 + zdv_bl(ji,jj)**2, 1.e-8) )  *  ( zhbl(ji,jj) / zdh(ji,jj) ) * ( zvstr(ji,jj) / MAX( zustar(ji,jj), 1.e-6 ) )**2 & 
     1570              zri_p(ji,jj) = MAX (  SQRT( zdb_bl(ji,jj) * zdh(ji,jj) / MAX( zdu_bl(ji,jj)**2 + zdv_bl(ji,jj)**2, 1.e-8) )  *  ( zhbl(ji,jj) / zdh(ji,jj) ) * ( zvstr(ji,jj) / MAX( zustar(ji,jj), 1.e-6 ) )**2 & 
    15461571                   & / MAX( zekman(ji,jj), 1.e-6 )  , 5._wp ) 
    15471572             
    1548               zri_b = zdb_ml(ji,jj) * zdh(ji,jj) / MAX( zdu_ml(ji,jj)**2 + zdv_ml(ji,jj)**2, 1.e-8 ) 
     1573              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 ) 
    15491574                         
    15501575              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 ) ) 
     1576! Stability Dependence 
     1577              zshear(ji,jj) = zshear(ji,jj) * EXP( -0.75 * MAX(0._wp,( zri_b(ji,jj) - zri_c ) / zri_c ) ) 
    15511578!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
    15521579! Test ensures j_ddh=0 is not selected. Change to zri_p<27 when  ! 
    15531580! full code available                                          ! 
    15541581!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
    1555               IF ( zri_p < -rn_ri_p_thresh .and. zshear(ji,jj) > 0._wp ) THEN 
     1582            IF ( zshear(ji,jj) > 1.e-10 ) THEN 
     1583              IF ( zri_p(ji,jj) < rn_ri_p_thresh ) THEN 
    15561584! Growing shear layer 
    15571585                j_ddh(ji,jj) = 0 
     
    15591587              ELSE 
    15601588                j_ddh(ji,jj) = 1 
    1561                 IF ( zri_b <= 1.5 .and. zshear(ji,jj) > 0._wp ) THEN 
     1589!                IF ( zri_b <= 1.5 .and. zshear(ji,jj) > 0._wp ) THEN 
    15621590! shear production large enough to determine layer charcteristics, but can't maintain a shear layer. 
    1563                   lshear(ji,jj) = .TRUE. 
    1564                 ELSE 
     1591                lshear(ji,jj) = .TRUE. 
     1592!                ELSE 
     1593              ENDIF 
     1594            ELSE 
     1595                j_ddh(ji,jj) = 2 
     1596                lshear(ji,jj) = .FALSE. 
     1597            ENDIF 
    15651598! Shear production may not be zero, but is small and doesn't determine characteristics of pycnocline. 
    1566                   zshear(ji,jj) = 0.5 * zshear(ji,jj) 
    1567                   lshear(ji,jj) = .FALSE. 
    1568                 ENDIF  
    1569               ENDIF                 
     1599!                  zshear(ji,jj) = 0.5 * zshear(ji,jj) 
     1600!                  lshear(ji,jj) = .FALSE. 
     1601!                ENDIF                 
    15701602            ELSE                ! zdb_bl test, note zshear set to zero 
    15711603              j_ddh(ji,jj) = 2 
     
    15941626            &                  * ( 1.0 + 4.0 * dstokes(ji,jj) / hbl(ji,jj) ) ) 
    15951627           END IF 
    1596            zwb_ent(ji,jj) = - 2.0 * 0.2 * zrf_conv * zwbav(ji,jj) & 
    1597                   &                  - 0.15 * zrf_shear * zustar(ji,jj)**3 /zhml(ji,jj) & 
    1598                   &         + zr_stokes * ( 0.15 * EXP( -1.5 * zla(ji,jj) ) * zrf_shear * zustar(ji,jj)**3 & 
    1599                   &                                         - zrf_langmuir * 0.03 * zwstrl(ji,jj)**3 ) / zhml(ji,jj) 
     1628           zwb_ent(ji,jj) = - 2.0 * zalpha_c * zrf_conv * zwbav(ji,jj) & 
     1629                  &                  - zalpha_s * zrf_shear * zustar(ji,jj)**3 /zhml(ji,jj) & 
     1630                  &         + zr_stokes * ( zalpha_s * EXP( -1.5 * zla(ji,jj) ) * zrf_shear * zustar(ji,jj)**3 & 
     1631                  &                                         - zrf_langmuir * zalpha_lc * zwstrl(ji,jj)**3 ) / zhml(ji,jj) 
    16001632             ! 
    16011633         ENDIF 
     
    16101642           IF ( lconv(ji,jj) ) THEN 
    16111643! Unstable OSBL 
    1612               zwb_shr = -za_wb_s * zshear(ji,jj) 
     1644              zwb_shr = -za_wb_s * zri_b(ji,jj) * zshear(ji,jj) 
    16131645              IF ( j_ddh(ji,jj) == 0 ) THEN 
    16141646 
    1615 ! Developing shear layer, additional shear production possible. 
    1616  
    1617                 zshear_u = MAX( zustar(ji,jj)**2 * zdu_ml(ji,jj) /  zhbl(ji,jj), 0._wp ) 
    1618                 zshear(ji,jj) = zshear(ji,jj) + zshear_u * ( 1.0 - MIN( zri_p / rn_ri_p_thresh, 1.d0 ) ) 
    1619                 zshear(ji,jj) = MIN( zshear(ji,jj), zshear_u ) 
     1647! ! Developing shear layer, additional shear production possible. 
     1648 
     1649!                 zshear_u = MAX( zustar(ji,jj)**2 * MAX( zdu_ml(ji,jj), 0._wp ) /  zhbl(ji,jj), 0._wp ) 
     1650!                 zshear(ji,jj) = zshear(ji,jj) + zshear_u * ( 1.0 - MIN( zri_p(ji,jj) / rn_ri_p_thresh, 1.d0 )**2 ) 
     1651!                 zshear(ji,jj) = MIN( zshear(ji,jj), zshear_u ) 
    16201652                 
    1621                 zwb_shr = -za_wb_s * zshear(ji,jj) 
     1653!                 zwb_shr = zwb_shr - 0.25 * MAX ( zshear_u, 0._wp) * ( 1.0 - MIN( zri_p(ji,jj) / rn_ri_p_thresh, 1._wp )**2 ) 
     1654!                 zwb_shr = MAX( zwb_shr, -0.25 * zshear_u ) 
    16221655                 
    16231656              ENDIF                 
    16241657              zwb_ent(ji,jj) = zwb_ent(ji,jj) + zwb_shr 
    1625               zwb_min(ji,jj) = zwb_ent(ji,jj) + zdh(ji,jj) / zhbl(ji,jj) * zwb0(ji,jj) 
     1658!              zwb_min(ji,jj) = zwb_ent(ji,jj) + zdh(ji,jj) / zhbl(ji,jj) * zwb0(ji,jj) 
    16261659           ELSE    ! IF ( lconv ) THEN - ENDIF 
    16271660! Stable OSBL  - shear production not coded for first attempt.            
    16281661           ENDIF  ! lconv 
    1629          ELSE  ! lshear 
    1630            IF ( lconv(ji,jj) ) THEN 
     1662         ENDIF  ! lshear 
     1663         IF ( lconv(ji,jj) ) THEN 
    16311664! Unstable OSBL 
    1632               zwb_shr = -za_wb_s * zshear(ji,jj) 
    1633               zwb_ent(ji,jj) = zwb_ent(ji,jj) + zwb_shr 
    1634               zwb_min(ji,jj) = zwb_ent(ji,jj) + zdh(ji,jj) / zhbl(ji,jj) * zwb0(ji,jj) 
    1635            ENDIF  ! lconv 
    1636          ENDIF    ! lshear 
     1665            zwb_min(ji,jj) = zwb_ent(ji,jj) + zdh(ji,jj) / zhbl(ji,jj) * zwb0(ji,jj) 
     1666         ENDIF  ! lconv 
    16371667       END DO   ! ji 
    16381668     END DO     ! jj 
     
    20332063    END SUBROUTINE zdf_osm_pycnocline_shear_profiles 
    20342064 
    2035    SUBROUTINE zdf_osm_calculate_dhdt( zdhdt, zddhdt ) 
     2065   SUBROUTINE zdf_osm_calculate_dhdt( zdhdt ) 
    20362066     !!--------------------------------------------------------------------- 
    20372067     !!                   ***  ROUTINE zdf_osm_calculate_dhdt  *** 
     
    20432073     !!---------------------------------------------------------------------- 
    20442074 
    2045     REAL(wp), DIMENSION(jpi,jpj) :: zdhdt, zddhdt        ! Rate of change of hbl 
     2075    REAL(wp), DIMENSION(jpi,jpj) :: zdhdt        ! Rate of change of hbl 
    20462076 
    20472077    INTEGER :: jj, ji 
    20482078    REAL(wp) :: zgamma_b_nd, zgamma_dh_nd, zpert, zpsi 
    2049     REAL(wp) :: zvel_max!, zwb_min 
    2050     REAL(wp) :: zzeta_m = 0.3 
    2051     REAL(wp) :: zgamma_c = 2.0 
    2052     REAL(wp) :: zdhoh = 0.1 
    2053     REAL(wp) :: alpha_bc = 0.5 
     2079    REAL(wp) :: zvel_max,zddhdt 
     2080    REAL(wp), PARAMETER :: zzeta_m = 0.3 
     2081    REAL(wp), PARAMETER :: zgamma_c = 2.0 
     2082    REAL(wp), PARAMETER :: zdhoh = 0.1 
     2083    REAL(wp), PARAMETER :: zalpha_b = 0.3 
    20542084    REAL, PARAMETER :: a_ddh = 2.5, a_ddh_2 = 3.5 ! also in pycnocline_depth 
    20552085  
     
    20732103                   ! OSBL is deepening, entrainment > restratification 
    20742104                   IF ( zdb_bl(ji,jj) > 0.0 .and. zdbdz_bl_ext(ji,jj) > 0.0 ) THEN 
    2075 ! *** Used for shear Needs to be changed to work stabily 
    2076 !                zgamma_b_nd = zdbdz_bl_ext * dh / zdb_ml 
    2077 !                zalpha_b = 6.7 * zgamma_b_nd / ( 1.0 + zgamma_b_nd ) 
    2078 !                zgamma_b = zgamma_b_nd / ( 0.12 * ( 1.25 + zgamma_b_nd ) ) 
    2079 !                za_1 = 1.0 / zgamma_b**2 - 0.017 
    2080 !                za_2 = 1.0 / zgamma_b**3 - 0.0025 
    2081 !                zpsi = zalpha_b * ( 1.0 + zgamma_b_nd ) * ( za_1 - 2.0 * za_2 * dh / hbl ) 
    2082                       zpsi = 0._wp 
    2083                       zdhdt(ji,jj) = -( zwb_ent(ji,jj) + 2.0 * zwb_fk_b(ji,jj) ) / ( zvel_max + MAX(zdb_bl(ji,jj), 1.0e-15) ) 
    2084                       zdhdt(ji,jj) = zdhdt(ji,jj)! - zpsi * ( -1.0 / zhml(ji,jj) + 2.4 * zdbdz_bl_ext(ji,jj) / zdb_ml(ji,jj) ) * zwb_min(ji,jj) * zdh(ji,jj) / zdb_bl(ji,jj) 
     2105                      zgamma_b_nd = zdbdz_bl_ext(ji,jj) + zdh(ji,jj) / zdb_ml(ji,jj) 
     2106                      zpsi = -zalpha_pyc(ji,jj) * ( zwb0(ji,jj) - ( zwb_min(ji,jj) + 2.0 * zwb_fk_b(ji,jj) ) ) * zdh(ji,jj) / zhbl(ji,jj) 
     2107                      zpsi = zpsi - 4.0 * ( 1.0 + zdh(ji,jj) /zhbl(ji,jj) ) * zgamma_b_nd * ( zwb_min(ji,jj) + 2.0 * zwb_fk_b(ji,jj) ) 
     2108                      zpsi = zalpha_b * MAX ( zpsi, 0._wp ) 
     2109                      zdhdt(ji,jj) = -( zwb_ent(ji,jj) + 2.0 * zwb_fk_b(ji,jj) ) / ( zvel_max + MAX(zdb_bl(ji,jj), 1.0e-15) ) + zpsi / MAX( zdb_bl(ji,jj), 1.e-15 ) 
    20852110                      IF ( j_ddh(ji,jj) == 1 ) THEN 
    20862111                        IF ( ( zwstrc(ji,jj) / zvstr(ji,jj) )**3 <= 0.5 ) THEN 
     
    20902115                        ENDIF 
    20912116! Relaxation to dh_ref = zari * hbl 
    2092                         zddhdt(ji,jj) = -a_ddh_2 * ( 1.0 - zdh(ji,jj) / ( zari * zhbl(ji,jj) ) ) * zwb_ent(ji,jj) / zdb_bl(ji,jj) 
     2117                        zddhdt = -a_ddh_2 * ( 1.0 - zdh(ji,jj) / ( zari * zhbl(ji,jj) ) ) * zwb_ent(ji,jj) / zdb_bl(ji,jj) 
    20932118                         
    2094                       ELSE  ! j_ddh == 0 
     2119                      ELSE IF ( j_ddh(ji,jj) == 0 ) THEN 
    20952120! Growing shear layer 
    2096                         zddhdt(ji,jj) = -a_ddh * ( 1.0 - zdh(ji,jj) / zhbl(ji,jj) ) * zwb_ent(ji,jj) / zdb_bl(ji,jj) 
     2121                        zddhdt = -a_ddh * ( 1.0 - 1.6 * zdh(ji,jj) / zhbl(ji,jj) ) * zwb_ent(ji,jj) / zdb_bl(ji,jj) 
     2122                        zddhdt = EXP( - 4.0 * ABS( ff_t(ji,jj) ) * zhbl(ji,jj) / MAX(zustar(ji,jj), 1.e-8 ) ) * zddhdt 
     2123                      ELSE 
     2124                        zddhdt = 0._wp 
    20972125                      ENDIF ! j_ddh 
    2098                         zdhdt(ji,jj) = zdhdt(ji,jj) ! + zpsi * zddhdt(ji,jj) 
     2126                      zdhdt(ji,jj) = zdhdt(ji,jj) + zalpha_b * ( zalpha_pyc(ji,jj) * zdb_ml(ji,jj) + 2.0 * zdbdz_bl_ext(ji,jj) * zdh(ji,jj) ) * zddhdt / zdb_bl(ji,jj) 
    20992127                   ELSE    ! zdb_bl >0 
    2100                       zdhdt(ji,jj) = -( zwb_ent(ji,jj) + 2.0 * zwb_fk_b(ji,jj) ) /  MAX( zvel_max, 1.0e-15) 
     2128                       zdhdt(ji,jj) = -( zwb_ent(ji,jj) + 2.0 * zwb_fk_b(ji,jj) ) /  MAX( zvel_max, 1.0e-15) 
    21012129                   ENDIF 
    21022130                ELSE   ! zwb_min + 2*zwb_fk_b < 0 
     
    23022330      INTEGER :: jj, ji 
    23032331      INTEGER :: inhml 
    2304       REAL(wp) :: zari, ztau, zdh_ref 
    2305       REAL, PARAMETER :: a_ddh_2 = 3.5 ! also in pycnocline_depth 
     2332      REAL(wp) :: zari, ztau, zdh_ref, zddhdt 
     2333      REAL, PARAMETER :: a_ddh = 2.5, a_ddh_2 = 3.5 ! also in pycnocline_depth 
    23062334 
    23072335    DO jj = 2, jpjm1 
     
    23102338         IF ( lshear(ji,jj) ) THEN 
    23112339            IF ( lconv(ji,jj) ) THEN 
     2340             IF ( zdb_bl(ji,jj) > 0._wp ) THEN 
    23122341              IF ( j_ddh(ji,jj) == 0 ) THEN 
    23132342! ddhdt for pycnocline determined in osm_calculate_dhdt 
    2314                 dh(ji,jj) = dh(ji,jj) + zddhdt(ji,jj) * rn_rdt 
     2343!                zddhdt = -a_ddh * ( 1.0 - 1.6 * zdh(ji,jj) / zhbl(ji,jj) ) * zwb_ent(ji,jj) / zdb_bl(ji,jj) 
     2344!                zddhdt = EXP( - 4.0 * ABS( ff_t(ji,jj) ) * zhbl(ji,jj) / MAX(zustar(ji,jj), 1.e-8 ) ) * zddhdt 
     2345! maximum limit for how thick the shear layer can grow relative to the thickness of the boundary kayer 
     2346!                dh(ji,jj) = MIN( dh(ji,jj) + zddhdt * rn_rdt, 0.625 * hbl(ji,jj) ) 
     2347                ztau = MAX( zdb_bl(ji,jj) * ( 0.625 * hbl(ji,jj) ) / ( a_ddh * MAX(-zwb_ent(ji,jj), 1.e-12) ), 2.0 * rn_rdt ) 
     2348                dh(ji,jj) = dh(ji,jj) * EXP( -rn_rdt / ztau ) + 0.625 * zhbl(ji,jj) * ( 1.0 - EXP( -rn_rdt / ztau ) ) 
     2349                IF ( dh(ji,jj) >= hbl(ji,jj) ) dh(ji,jj) = 0.8 * zhbl(ji,jj) 
    23152350              ELSE 
    23162351! Temporary (probably) Recalculate dh_ref to ensure dh doesn't go negative. Can't do this using zddhdt from calculate_dhdt  
     
    23242359                IF ( dh(ji,jj) >= hbl(ji,jj) ) dh(ji,jj) = zari * zhbl(ji,jj) 
    23252360              ENDIF 
    2326                 
     2361             ELSE 
     2362              ztau = MAX( MAX( hbl(ji,jj) / ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird, epsln), 2.0 * rn_rdt ) 
     2363              dh(ji,jj) = dh(ji,jj) * EXP( -rn_rdt / ztau ) + 0.2 * zhbl(ji,jj) * ( 1.0 - EXP( -rn_rdt / ztau ) ) 
     2364              IF ( dh(ji,jj) > hbl(ji,jj) ) dh(ji,jj) = 0.2 * hbl(ji,jj) 
     2365             ENDIF 
    23272366            ELSE ! lconv 
    23282367! Initially shear only for entraining OSBL. Stable code will be needed if extended to stable OSBL  
Note: See TracChangeset for help on using the changeset viewer.