mle_timescale Function

private pure function mle_timescale(f_abs, ustar, h_vel, ce, f_floor, use_mom_mixrate) result(ts)

FK restratification timescale [s].

Bare (default, T1 analytic gate): ts = Ce / max(|f|, f_floor) reproduces FK08 Psi_max = CeH^2|grad b|/|f| exactly.

FK11 momentum-mixrate (PRODUCTION-RECOMMENDED, use_mom_mixrate): mr = (vonKar * pi^2) * u^2 / (|f|H_vel^2 + 4(H_vel+h_neg)u) ts = Ce * (|f| + 2mr) / (|f|^2 + mr^2) The mr term regularises 1/|f| as f -> 0 and suppresses restrat under vigorous mixing. The bare form is the mr -> 0 limit.

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) :: ce
real(kind=wp), intent(in) :: f_floor
logical, intent(in) :: use_mom_mixrate

Return Value real(kind=wp)


Called by

proc~~mle_timescale~~CalledByGraph proc~mle_timescale mle_timescale proc~mle_compute_transports mle_compute_transports proc~mle_compute_transports->proc~mle_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 :: f_eff
real(kind=wp), private :: mr

Source Code

   pure function mle_timescale(f_abs, ustar, h_vel, ce, f_floor, use_mom_mixrate) result(ts)
      !$acc routine seq
      !! FK restratification timescale [s].
      !!
      !! Bare (default, T1 analytic gate):
      !!     ts = Ce / max(|f|, f_floor)
      !! reproduces FK08 Psi_max = Ce*H^2*|grad b|/|f| exactly.
      !!
      !! FK11 momentum-mixrate (PRODUCTION-RECOMMENDED, `use_mom_mixrate`):
      !!     mr = (vonKar * pi^2) * u*^2 / (|f|*H_vel^2 + 4*(H_vel+h_neg)*u*)
      !!     ts = Ce * (|f| + 2*mr) / (|f|^2 + mr^2)
      !! The mr term regularises 1/|f| as f -> 0 and suppresses restrat
      !! under vigorous mixing.  The bare form is the mr -> 0 limit.
      real(wp), intent(in) :: f_abs, ustar, h_vel, ce, f_floor
      logical, intent(in) :: use_mom_mixrate
      real(wp) :: ts, mr, f_eff
      if (use_mom_mixrate) then
         mr = (VONKAR*PI*PI)*ustar*ustar/ &
              (f_abs*h_vel*h_vel + 4.0_wp*(h_vel + H_NEGLECT)*ustar + H_NEGLECT)
         ts = ce*(f_abs + 2.0_wp*mr)/(f_abs*f_abs + mr*mr + H_NEGLECT)
      else
         f_eff = max(f_abs, f_floor)
         ts = ce/f_eff
      end if
   end function mle_timescale