subroutine register_foxkemper(cfg, schema)
!! `&ocean_foxkemper` (Fox-Kemper et al. 2008/2011 mixed-layer-eddy
!! restratification, capability B5).
type(config_t), target, intent(in) :: cfg
type(nml_schema_t), intent(inout) :: schema
type(nml_group_t) :: g
logical, pointer :: pl
real(wp), pointer :: pr
g%name = "ocean_foxkemper"
g%doc = "Fox-Kemper mixed-layer-eddy restratification (B5)."
pl => cfg%ocean%foxkemper%enable
call g%add(nml_logical("enable", pl, &
"Master switch (off => bit-identity)"))
pr => cfg%ocean%foxkemper%ce
call g%add(nml_real("ce", pr, "FK08 coefficient Ce (0.06-0.08)"))
pr => cfg%ocean%foxkemper%f_floor
call g%add(nml_real("f_floor", pr, "|f| regularisation floor", units="1/s"))
pr => cfg%ocean%foxkemper%mld_decay_time
call g%add(nml_real("mld_decay_time", pr, &
"Running-mean MLD filter time-scale (0 = off, instantaneous MLD)", &
units="s"))
pr => cfg%ocean%foxkemper%tail_dh
call g%add(nml_real("tail_dh", pr, "mu cubic-tail extension (0 = exact mu)"))
pl => cfg%ocean%foxkemper%use_mom_mixrate
call g%add(nml_logical("use_mom_mixrate", pl, &
"FK11 momentum-mixrate timescale (PRODUCTION-RECOMMENDED) vs bare Ce/|f|"))
pl => cfg%ocean%foxkemper%resolution_taper
call g%add(nml_logical("resolution_taper", pl, &
"B2 res_fn hook (hard error if on without B2)"))
pl => cfg%ocean%foxkemper%use_bodner
call g%add(nml_logical("use_bodner", pl, &
"Bodner 2023 frontogenesis-arrest MLE (overrides ce/mixrate)"))
pr => cfg%ocean%foxkemper%cr
call g%add(nml_real("cr", pr, "Bodner 2023 efficiency coefficient Cr (0 = off)"))
pr => cfg%ocean%foxkemper%bodner_mstar
call g%add(nml_real("bodner_mstar", pr, "Bodner mechanical (u*) weight in w'u'"))
pr => cfg%ocean%foxkemper%bodner_nstar
call g%add(nml_real("bodner_nstar", pr, "Bodner convective (w*) weight in w'u'"))
pr => cfg%ocean%foxkemper%min_wstar2
call g%add(nml_real("min_wstar2", pr, "Floor on w'u' (1/0 armour)", units="m^2/s^2"))
call schema%add_group(g)
end subroutine register_foxkemper