register_ddiff Subroutine

private subroutine register_ddiff(cfg, schema)

&ocean_ddiff (double diffusion: salt fingering + diffusive convection, CVMix_ddiff-style).

Arguments

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

Calls

proc~~register_ddiff~~CallsGraph proc~register_ddiff register_ddiff proc~group_add nml_group_t%group_add proc~register_ddiff->proc~group_add proc~nml_logical nml_logical proc~register_ddiff->proc~nml_logical proc~nml_real nml_real proc~register_ddiff->proc~nml_real proc~schema_add_group nml_schema_t%schema_add_group proc~register_ddiff->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_ddiff~~CalledByGraph proc~register_ddiff register_ddiff proc~build_rdb_schema build_rdb_schema proc~build_rdb_schema->proc~register_ddiff 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
logical, private, pointer :: pl
real(kind=wp), private, pointer :: pr

Source Code

   subroutine register_ddiff(cfg, schema)
      !! `&ocean_ddiff` (double diffusion: salt fingering + diffusive
      !! convection, CVMix_ddiff-style).
      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_ddiff"
      g%doc = "Double diffusion: salt fingering + diffusive convection (folded into the heat/salt split)."

      pl => cfg%ocean%ddiff%enable
      call g%add(nml_logical("enable", pl, &
                             "Master switch (requires thermodynamics)"))
      pr => cfg%ocean%ddiff%strat_param_max
      call g%add(nml_real("strat_param_max", pr, &
                          "R_rho salt-fingering cutoff (STRAT_PARAM_MAX)"))
      pr => cfg%ocean%ddiff%kappa_ddiff_s
      call g%add(nml_real("kappa_ddiff_s", pr, &
                          "Leading salt-fingering diffusivity K_f (KAPPA_DDIFF_S)", &
                          units="m^2/s"))
      pr => cfg%ocean%ddiff%ddiff_exp1
      call g%add(nml_real("ddiff_exp1", pr, "Inner fingering exponent (DDIFF_EXP1)"))
      pr => cfg%ocean%ddiff%ddiff_exp2
      call g%add(nml_real("ddiff_exp2", pr, "Outer fingering exponent (DDIFF_EXP2)"))
      pr => cfg%ocean%ddiff%param1
      call g%add(nml_real("param1", pr, "MC76 convection exterior coeff (KAPPA_DDIFF_PARAM1)"))
      pr => cfg%ocean%ddiff%param2
      call g%add(nml_real("param2", pr, "MC76 convection middle coeff (KAPPA_DDIFF_PARAM2)"))
      pr => cfg%ocean%ddiff%param3
      call g%add(nml_real("param3", pr, "MC76 convection interior coeff (KAPPA_DDIFF_PARAM3)"))
      pr => cfg%ocean%ddiff%mol_diff
      call g%add(nml_real("mol_diff", pr, &
                          "Molecular diffusivity scaling convection (MOL_DIFF)", &
                          units="m^2/s"))
      pl => cfg%ocean%ddiff%use_k90
      call g%add(nml_logical("use_k90", pl, &
                             "Convection form: MC76 (default) vs Kelley-90"))

      call schema%add_group(g)
   end subroutine register_ddiff