Bodner et al. (2023) frontogenesis-arrest MLE timescale [s]:
ts = Cr · ds · |f| · h / w’u’
where the frontal-arrest length enters inline as |f|·h/w'u' and
w’u’ = max( (mstar·u³ + nstar·w³)^(2/3), min_wstar2 ),
w³ = max(0, -b0)·h (destabilizing buoyancy flux only)
ds = sqrt(0.5(dx²+dy²)) is the grid-scale front width. Because the
product is dimensionally a TIME, this drops straight into the FK
transport form uDml = ts·dyCu·idxCu·db·H² (the swap that turns
classic Fox-Kemper into Bodner). w'u' is floored so a quiescent,
unforced column (u→0, b0→0) never divides by zero.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | f_abs | |||
| real(kind=wp), | intent(in) | :: | ustar | |||
| real(kind=wp), | intent(in) | :: | h_vel | |||
| real(kind=wp), | intent(in) | :: | b0_face | |||
| real(kind=wp), | intent(in) | :: | ds | |||
| real(kind=wp), | intent(in) | :: | cr | |||
| real(kind=wp), | intent(in) | :: | mstar | |||
| real(kind=wp), | intent(in) | :: | nstar | |||
| real(kind=wp), | intent(in) | :: | min_wstar2 |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | private | :: | wpup | ||||
| real(kind=wp), | private | :: | wstar3 |
pure function mle_bodner_timescale(f_abs, ustar, h_vel, b0_face, ds, & cr, mstar, nstar, min_wstar2) result(ts) !$acc routine seq !! Bodner et al. (2023) frontogenesis-arrest MLE timescale [s]: !! ts = Cr · ds · |f| · h / w'u' !! where the frontal-arrest length enters inline as `|f|·h/w'u'` and !! w'u' = max( (mstar·u*³ + nstar·w*³)^(2/3), min_wstar2 ), !! w*³ = max(0, -b0)·h (destabilizing buoyancy flux only) !! `ds = sqrt(0.5(dx²+dy²))` is the grid-scale front width. Because the !! product is dimensionally a TIME, this drops straight into the FK !! transport form `uDml = ts·dyCu·idxCu·db·H²` (the swap that turns !! classic Fox-Kemper into Bodner). `w'u'` is floored so a quiescent, !! unforced column (u*→0, b0→0) never divides by zero. real(wp), intent(in) :: f_abs, ustar, h_vel, b0_face, ds real(wp), intent(in) :: cr, mstar, nstar, min_wstar2 real(wp) :: ts, wstar3, wpup wstar3 = max(0.0_wp, -b0_face)*h_vel wpup = max((mstar*ustar**3 + nstar*wstar3)**(2.0_wp/3.0_wp), min_wstar2) ts = cr*ds*f_abs*h_vel/wpup end function mle_bodner_timescale