register_ocean_sponge Subroutine

private subroutine register_ocean_sponge(cfg, schema)

&ocean_sponge_nml: the map-driven sponge (PR-23). Default enable = .false. ⇒ the legacy &ocean_bc_nml band kernels run unchanged ⇒ bit-identical. No damp_max / idamp_file / *_var keys in v1 — those validate and do nothing until PR-23b adds their consumer (CLAUDE.md trap class “dead knobs”).

Arguments

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

Calls

proc~~register_ocean_sponge~~CallsGraph proc~register_ocean_sponge register_ocean_sponge proc~group_add nml_group_t%group_add proc~register_ocean_sponge->proc~group_add proc~nml_enum nml_enum proc~register_ocean_sponge->proc~nml_enum proc~nml_int nml_int proc~register_ocean_sponge->proc~nml_int proc~nml_logical nml_logical proc~register_ocean_sponge->proc~nml_logical proc~nml_real nml_real proc~register_ocean_sponge->proc~nml_real proc~schema_add_group nml_schema_t%schema_add_group proc~register_ocean_sponge->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_sponge~~CalledByGraph proc~register_ocean_sponge register_ocean_sponge proc~build_rdb_schema build_rdb_schema proc~build_rdb_schema->proc~register_ocean_sponge 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_ocean_sponge(cfg, schema)
      !! `&ocean_sponge_nml`: the map-driven sponge (PR-23). Default
      !! `enable = .false.` ⇒ the legacy `&ocean_bc_nml` band kernels run
      !! unchanged ⇒ bit-identical. No `damp_max` / `idamp_file` / `*_var`
      !! keys in v1 — those validate and do nothing until PR-23b adds their
      !! consumer (CLAUDE.md trap class "dead knobs").
      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_sponge"
      g%doc = "Map-driven sponge: per-cell Idamp + 3-D reference state (PR-23)."
      pl => cfg%ocean%sponge%enable
      call g%add(nml_logical("enable", pl, &
                             "Master switch (default off; legacy band kernels run when off)"))
      ps => cfg%ocean%sponge%damp_source
      call g%add(nml_enum("damp_source", ps, &
                          "How idamp_h/u/v are filled", &
                          allowed=[character(len=4) :: "band", "file"]))
      ps => cfg%ocean%sponge%target_source
      call g%add(nml_enum("target_source", ps, &
                          "Reference-state source", &
                          allowed=[character(len=8) :: "ic", "linear_z", "file"]))
      ps => cfg%ocean%sponge%ramp
      call g%add(nml_enum("ramp", ps, &
                          "Band ramp shape from the sponge wall inward "// &
                          "('linear' is ISOMIP+ Eq. 20)", &
                          allowed=[character(len=6) :: "cosine", "linear"]))
      pr => cfg%ocean%sponge%lin_t_ref
      call g%add(nml_real("lin_t_ref", pr, &
                          "target_source='linear_z': T at the z = 0 datum", units="degC"))
      pr => cfg%ocean%sponge%lin_dt_dz
      call g%add(nml_real("lin_dt_dz", pr, &
                          "target_source='linear_z': dT/dz, z positive UP "// &
                          "(stable => > 0)", units="degC/m"))
      pr => cfg%ocean%sponge%lin_s_ref
      call g%add(nml_real("lin_s_ref", pr, &
                          "target_source='linear_z': S at the z = 0 datum", units="PSU"))
      pr => cfg%ocean%sponge%lin_ds_dz
      call g%add(nml_real("lin_ds_dz", pr, &
                          "target_source='linear_z': dS/dz, z positive UP "// &
                          "(stable => < 0)", units="PSU/m"))
      pl => cfg%ocean%sponge%relax_uv
      call g%add(nml_logical("relax_uv", pl, &
                             "Relax u/v toward u_ref/v_ref"))
      pl => cfg%ocean%sponge%relax_tracers
      call g%add(nml_logical("relax_tracers", pl, &
                             "Relax every registered tracer toward its 3-D reference field"))
      pl => cfg%ocean%sponge%relax_h
      call g%add(nml_logical("relax_h", pl, &
                             "Interior-interface thickness damping (NOT IMPLEMENTED in v1 — "// &
                             "deferred to PR-23b, requires vcoord_type='lagrangian')"))
      pi => cfg%ocean%sponge%west_width
      call g%add(nml_int("west_width", pi, &
                         "Per-edge band-width override, cells (<0 => inherit "// &
                         "&ocean_bc_nml sponge_width)"))
      pi => cfg%ocean%sponge%east_width
      call g%add(nml_int("east_width", pi, "as west_width"))
      pi => cfg%ocean%sponge%south_width
      call g%add(nml_int("south_width", pi, "as west_width"))
      pi => cfg%ocean%sponge%north_width
      call g%add(nml_int("north_width", pi, "as west_width"))
      pr => cfg%ocean%sponge%west_strength
      call g%add(nml_real("west_strength", pr, &
                          "Per-edge peak relaxation-rate override (<0 => inherit "// &
                          "&ocean_bc_nml sponge_strength)", units="1/s"))
      pr => cfg%ocean%sponge%east_strength
      call g%add(nml_real("east_strength", pr, "as west_strength", units="1/s"))
      pr => cfg%ocean%sponge%south_strength
      call g%add(nml_real("south_strength", pr, "as west_strength", units="1/s"))
      pr => cfg%ocean%sponge%north_strength
      call g%add(nml_real("north_strength", pr, "as west_strength", units="1/s"))
      call schema%add_group(g)
   end subroutine register_ocean_sponge