register_ocean_tdrag Subroutine

private subroutine register_ocean_tdrag(cfg, schema)

&ocean_tdrag_nml: ice-shelf TOP-drag selector + coefficients. form enum mirrors parse_tdrag_variant in rdb_ocean_top_drag.

Arguments

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

Calls

proc~~register_ocean_tdrag~~CallsGraph proc~register_ocean_tdrag register_ocean_tdrag proc~group_add nml_group_t%group_add proc~register_ocean_tdrag->proc~group_add proc~nml_enum nml_enum proc~register_ocean_tdrag->proc~nml_enum proc~nml_logical nml_logical proc~register_ocean_tdrag->proc~nml_logical proc~nml_real nml_real proc~register_ocean_tdrag->proc~nml_real proc~schema_add_group nml_schema_t%schema_add_group proc~register_ocean_tdrag->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_ocean_tdrag~~CalledByGraph proc~register_ocean_tdrag register_ocean_tdrag proc~build_rdb_schema build_rdb_schema proc~build_rdb_schema->proc~register_ocean_tdrag 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
character(len=:), private, pointer :: ps

Source Code

   subroutine register_ocean_tdrag(cfg, schema)
      !! `&ocean_tdrag_nml`: ice-shelf TOP-drag selector + coefficients.
      !! `form` enum mirrors `parse_tdrag_variant` in rdb_ocean_top_drag.
      type(config_t), target, intent(in) :: cfg
      type(nml_schema_t), intent(inout) :: schema
      type(nml_group_t) :: g
      real(wp), pointer :: pr
      character(len=:), pointer :: ps
      logical, pointer :: pl

      g%name = "ocean_tdrag"
      g%doc = "Ice-shelf top-drag selector + coefficients (mirror of &ocean_bdrag_nml)."
      pl => cfg%ocean%tdrag%enable
      call g%add(nml_logical("enable", pl, &
                             "Enable the ice-shelf top drag (requires "// &
                             "&ocean_cavity_dyn_nml enable)"))
      ps => cfg%ocean%tdrag%form
      call g%add(nml_enum("form", ps, "Top-drag variant", &
                          allowed=[character(len=9) :: "quadratic", "linear"]))
      pr => cfg%ocean%tdrag%cd
      call g%add(nml_real("cd", pr, &
                          "Quadratic top-drag coefficient (0 disables); must equal "// &
                          "&ocean_cavity_melt_nml cdrag_top when melt is on", &
                          min=0.0_wp))
      pr => cfg%ocean%tdrag%r
      call g%add(nml_real("r", pr, "Linear Rayleigh top-drag coefficient (0 disables)", &
                          units="1/s", min=0.0_wp))
      pr => cfg%ocean%tdrag%htbl
      call g%add(nml_real("htbl", pr, &
                          "Top-boundary-layer thickness for distributed drag "// &
                          "(0 = layer-nz only)", units="m", min=0.0_wp))
      pr => cfg%ocean%tdrag%bg_vel
      call g%add(nml_real("bg_vel", pr, &
                          "Background velocity floor in the quadratic top-drag speed", &
                          units="m/s", min=0.0_wp))
      pr => cfg%ocean%tdrag%tbl_thick_min
      call g%add(nml_real("tbl_thick_min", pr, &
                          "Minimum effective TBL thickness (0 = fall back to h_min)", &
                          units="m", min=0.0_wp))
      pl => cfg%ocean%tdrag%implicit
      call g%add(nml_logical("implicit", pl, &
                             "Backward-Euler top drag inside the drag kernel "// &
                             "(stable for thin top layers)"))
      call schema%add_group(g)
   end subroutine register_ocean_tdrag