Turbulent Langmuir number La = sqrt(u*/u_s_SL): the Stokes
drift averaged over the surface layer of thickness zsl
under the Phillips spectrum, in the singularity-safe form
(Breivik et al. 2016 with Webb & Fox-Kemper 2015 directional
spreading). No MIN_LANGMUIR / LA_DEPTH_MIN floors — those
belong to MOM6’s profile-averaging wave paths, not LF17.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | ustar_w |
Water-side u* (m/s). |
||
| real(kind=wp), | intent(in) | :: | zsl |
Surface-layer average depth (m) = la_frac_hbl * BLD. |
||
| real(kind=wp), | intent(in) | :: | ustokes |
From |
||
| real(kind=wp), | intent(in) | :: | kphil |
From |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | private | :: | r1 | ||||
| real(kind=wp), | private | :: | r3 | ||||
| real(kind=wp), | private | :: | r5 | ||||
| real(kind=wp), | private | :: | root2kz | ||||
| real(kind=wp), | private | :: | ustokes_sl | ||||
| real(kind=wp), | private | :: | xkz |
pure function epbl_lf17_la(ustar_w, zsl, ustokes, kphil) result(la) !! Turbulent Langmuir number La = sqrt(u*/u_s_SL): the Stokes !! drift averaged over the surface layer of thickness `zsl` !! under the Phillips spectrum, in the singularity-safe form !! (Breivik et al. 2016 with Webb & Fox-Kemper 2015 directional !! spreading). No MIN_LANGMUIR / LA_DEPTH_MIN floors — those !! belong to MOM6's profile-averaging wave paths, not LF17. !$acc routine seq real(wp), intent(in) :: ustar_w !! Water-side u* (m/s). real(wp), intent(in) :: zsl !! Surface-layer average depth (m) = la_frac_hbl * BLD. real(wp), intent(in) :: ustokes, kphil !! From `epbl_lf17_wave_state`. real(wp) :: la real(wp) :: xkz, root2kz, r1, r3, r5, ustokes_sl xkz = kphil*zsl root2kz = sqrt(2.0_wp*xkz) r1 = (0.302_wp - 1.68_wp*xkz)*one_m_exp_x(2.0_wp*xkz) r3 = (0.1264_wp + 0.64_wp*xkz)*one_m_exp_x(5.12_wp*xkz) if (root2kz > 1.0e-3_wp) then r5 = sqrt(LT_PI)*(root2kz*(-0.84_wp*erfc(root2kz) + & 0.2_wp*erfc(1.6_wp*root2kz)) + & 0.1182_wp*(erfc(1.6_wp*root2kz) - erfc(root2kz))/root2kz) else r5 = -0.64_wp*sqrt(LT_PI)*root2kz + & (-0.14184_wp + 1.0839648_wp*root2kz*root2kz) end if ! Floor is a pure numerical guard (UStokes_sl -> 0+ for very ! deep surface layers); La then goes huge and the enhancement ! vanishes, which is the correct limit. ustokes_sl = max(ustokes*(0.715_wp + r1 + r3 + r5), 1.0e-10_wp) la = sqrt(ustar_w/ustokes_sl) end function epbl_lf17_la