mle_bodner_timescale Function

private pure function mle_bodner_timescale(f_abs, ustar, h_vel, b0_face, ds, cr, mstar, nstar, min_wstar2) result(ts)

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.

Arguments

Type IntentOptional 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

Return Value real(kind=wp)


Called by

proc~~mle_bodner_timescale~~CalledByGraph proc~mle_bodner_timescale mle_bodner_timescale proc~mle_compute_transports mle_compute_transports proc~mle_compute_transports->proc~mle_bodner_timescale proc~ocean_dyn_step_split ocean_dyn_step_split proc~ocean_dyn_step_split->proc~mle_compute_transports proc~engine_step engine_step proc~engine_step->proc~ocean_dyn_step_split proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_step proc~rdb_ocean_step rdb_ocean_step proc~rdb_ocean_step->proc~engine_step proc~driver_run driver_run proc~driver_run->proc~driver_run_ocean

Variables

Type Visibility Attributes Name Initial
real(kind=wp), private :: wpup
real(kind=wp), private :: wstar3

Source Code

   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