register_epbl Subroutine

private subroutine register_epbl(cfg, schema)

&ocean_epbl (Reichl & Hallberg 2018 energetics-based PBL).

Arguments

Type IntentOptional Attributes Name
type(config_t), intent(in), target :: cfg
type(nml_schema_t), intent(inout) :: schema

Calls

proc~~register_epbl~~CallsGraph proc~register_epbl register_epbl proc~group_add nml_group_t%group_add proc~register_epbl->proc~group_add proc~nml_enum nml_enum proc~register_epbl->proc~nml_enum proc~nml_int nml_int proc~register_epbl->proc~nml_int proc~nml_logical nml_logical proc~register_epbl->proc~nml_logical proc~nml_real nml_real proc~register_epbl->proc~nml_real proc~schema_add_group nml_schema_t%schema_add_group proc~register_epbl->proc~schema_add_group error error proc~group_add->error proc~lower lower proc~group_add->proc~lower proc~schema_add_group->error proc~schema_add_group->proc~lower proc~move_group move_group proc~schema_add_group->proc~move_group

Called by

proc~~register_epbl~~CalledByGraph proc~register_epbl register_epbl proc~build_rdb_schema build_rdb_schema proc~build_rdb_schema->proc~register_epbl proc~read_config_from_string_impl read_config_from_string_impl proc~read_config_from_string_impl->proc~build_rdb_schema proc~read_config_impl read_config_impl proc~read_config_impl->proc~build_rdb_schema proc~read_config read_config proc~read_config->proc~read_config_impl proc~read_config_from_string read_config_from_string proc~read_config_from_string->proc~read_config_from_string_impl proc~build_pending_handle build_pending_handle proc~build_pending_handle->proc~read_config_from_string proc~rdb_ocean_create_from_string rdb_ocean_create_from_string proc~rdb_ocean_create_from_string->proc~build_pending_handle proc~rdb_ocean_create_pending rdb_ocean_create_pending proc~rdb_ocean_create_pending->proc~build_pending_handle

Variables

Type Visibility Attributes Name Initial
type(nml_group_t), private :: g
integer, private, pointer :: pi
logical, private, pointer :: pl
real(kind=wp), private, pointer :: pr
character(len=:), private, pointer :: ps

Source Code

   subroutine register_epbl(cfg, schema)
      !! `&ocean_epbl` (Reichl & Hallberg 2018 energetics-based PBL).
      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
      integer, pointer :: pi
      character(len=:), pointer :: ps

      g%name = "ocean_epbl"
      g%doc = "RH18 energetics-based planetary boundary layer."

      pl => cfg%ocean%epbl%enable
      call g%add(nml_logical("enable", pl, &
                             "Master switch (replaces the KPP overlay; requires use_closure)"))
      ps => cfg%ocean%epbl%mstar_scheme
      call g%add(nml_enum("mstar_scheme", ps, "Surface TKE mstar scheme", &
                          allowed=[character(len=8) :: "constant", "om4", "rh18"]))
      pr => cfg%ocean%epbl%mstar
      call g%add(nml_real("mstar", pr, "Constant-scheme mstar"))
      pr => cfg%ocean%epbl%mstar_cap
      call g%add(nml_real("mstar_cap", pr, "Cap for OM4/RH18 mstar; off when < 0"))
      pr => cfg%ocean%epbl%mstar_coef1
      call g%add(nml_real("mstar_coef1", pr, "OM4 stabilizing coefficient"))
      pr => cfg%ocean%epbl%c_ek
      call g%add(nml_real("c_ek", pr, "OM4 Ekman coefficient"))
      pr => cfg%ocean%epbl%mstar_conv_adj
      call g%add(nml_real("mstar_conv_adj", pr, "Convective mstar reduction in [0,1]"))
      pr => cfg%ocean%epbl%rh18_cn1
      call g%add(nml_real("rh18_cn1", pr, "RH18 mstar fit coefficient cn1"))
      pr => cfg%ocean%epbl%rh18_cn2
      call g%add(nml_real("rh18_cn2", pr, "RH18 mstar fit coefficient cn2"))
      pr => cfg%ocean%epbl%rh18_cn3
      call g%add(nml_real("rh18_cn3", pr, "RH18 mstar fit coefficient cn3"))
      pr => cfg%ocean%epbl%rh18_cs1
      call g%add(nml_real("rh18_cs1", pr, "RH18 mstar fit coefficient cs1"))
      pr => cfg%ocean%epbl%rh18_cs2
      call g%add(nml_real("rh18_cs2", pr, "RH18 mstar fit coefficient cs2"))
      pr => cfg%ocean%epbl%nstar
      call g%add(nml_real("nstar", pr, "Convective PE -> TKE efficiency"))
      pr => cfg%ocean%epbl%tke_decay
      call g%add(nml_real("tke_decay", pr, "Ekman-depth / TKE-decay-scale ratio"))
      pr => cfg%ocean%epbl%wstar_ustar_coef
      call g%add(nml_real("wstar_ustar_coef", pr, "Convective weight in the velocity scale"))
      ps => cfg%ocean%epbl%vel_scale_scheme
      call g%add(nml_enum("vel_scale_scheme", ps, "Velocity-scale scheme", &
                          allowed=[character(len=9) :: "cube_root", "rh18"]))
      pr => cfg%ocean%epbl%vstar_scale_fac
      call g%add(nml_real("vstar_scale_fac", pr, "Overall vstar multiplier"))
      pr => cfg%ocean%epbl%vstar_surf_fac
      call g%add(nml_real("vstar_surf_fac", pr, "RH18 mechanical surface vstar factor"))
      pr => cfg%ocean%epbl%von_karman
      call g%add(nml_real("von_karman", pr, "von Karman kappa in Kd = vstar*kappa*mixlen"))
      pr => cfg%ocean%epbl%ekman_scale_coef
      call g%add(nml_real("ekman_scale_coef", pr, "Rotational mixing-length rolloff"))
      pr => cfg%ocean%epbl%min_mix_len
      call g%add(nml_real("min_mix_len", pr, "Mixing-length floor", units="m"))
      pr => cfg%ocean%epbl%mixlen_exponent
      call g%add(nml_real("mixlen_exponent", pr, "Shape-function exponent"))
      pr => cfg%ocean%epbl%translay_scale
      call g%add(nml_real("translay_scale", pr, "Transition-layer shape floor (in [0,1) when iterating)"))
      pl => cfg%ocean%epbl%mld_iteration
      call g%add(nml_logical("mld_iteration", pl, "Self-consistent MLD root-find"))
      pr => cfg%ocean%epbl%mld_tol
      call g%add(nml_real("mld_tol", pr, "MLD convergence tolerance", units="m"))
      pi => cfg%ocean%epbl%mld_max_its
      call g%add(nml_int("mld_max_its", pi, "Max MLD iterations", min=1))
      pl => cfg%ocean%epbl%mld_bisection
      call g%add(nml_logical("mld_bisection", pl, "Bisection instead of false position"))
      pl => cfg%ocean%epbl%mld_use_prev_guess
      call g%add(nml_logical("mld_use_prev_guess", pl, "Seed from the previous step's MLD"))
      pr => cfg%ocean%epbl%omega
      call g%add(nml_real("omega", pr, "Earth rotation rate", units="1/s"))
      pr => cfg%ocean%epbl%omega_frac
      call g%add(nml_real("omega_frac", pr, "Blend |f| with 2*Omega"))
      pr => cfg%ocean%epbl%prandtl
      call g%add(nml_real("prandtl", pr, "Kv = prandtl*Kd into the momentum solve"))
      ps => cfg%ocean%epbl%combine
      call g%add(nml_enum("combine", ps, "Combine vs interior closure kv/kt", &
                          allowed=[character(len=3) :: "add", "max"]))
      pl => cfg%ocean%epbl%tke_diags
      call g%add(nml_logical("tke_diags", pl, "Compute per-column TKE budget diagnostics"))
      pl => cfg%ocean%epbl%use_lt
      call g%add(nml_logical("use_lt", pl, "Langmuir-turbulence enhancement (LF17 wind-only)"))
      ps => cfg%ocean%epbl%lt_scheme
      call g%add(nml_enum("lt_scheme", ps, "Langmuir enhancement scheme", &
                          allowed=[character(len=8) :: "rescale", "additive"]))
      pr => cfg%ocean%epbl%lt_enhance_coef
      call g%add(nml_real("lt_enhance_coef", pr, "Langmuir enhancement coefficient"))
      pr => cfg%ocean%epbl%lt_enhance_exp
      call g%add(nml_real("lt_enhance_exp", pr, "Langmuir-number exponent"))
      pr => cfg%ocean%epbl%lt_max_enhance
      call g%add(nml_real("lt_max_enhance", pr, "Cap on the multiplicative enhancement"))
      pr => cfg%ocean%epbl%la_frac_hbl
      call g%add(nml_real("la_frac_hbl", pr, "Stokes SL-average depth fraction"))
      pr => cfg%ocean%epbl%lt_lac1
      call g%add(nml_real("lt_lac1", pr, "Stability-modified La coefficient 1"))
      pr => cfg%ocean%epbl%lt_lac2
      call g%add(nml_real("lt_lac2", pr, "Stability-modified La coefficient 2"))
      pr => cfg%ocean%epbl%lt_lac3
      call g%add(nml_real("lt_lac3", pr, "Stability-modified La coefficient 3"))
      pr => cfg%ocean%epbl%lt_lac4
      call g%add(nml_real("lt_lac4", pr, "Stability-modified La coefficient 4"))
      pr => cfg%ocean%epbl%lt_lac5
      call g%add(nml_real("lt_lac5", pr, "Stability-modified La coefficient 5"))

      call schema%add_group(g)
   end subroutine register_epbl