register_meke Subroutine

private subroutine register_meke(cfg, schema)

&ocean_meke (prognostic mesoscale eddy kinetic energy, [5]).

Arguments

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

Calls

proc~~register_meke~~CallsGraph proc~register_meke register_meke proc~group_add nml_group_t%group_add proc~register_meke->proc~group_add proc~nml_logical nml_logical proc~register_meke->proc~nml_logical proc~nml_real nml_real proc~register_meke->proc~nml_real proc~schema_add_group nml_schema_t%schema_add_group proc~register_meke->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_meke~~CalledByGraph proc~register_meke register_meke proc~build_rdb_schema build_rdb_schema proc~build_rdb_schema->proc~register_meke 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_meke(cfg, schema)
      !! `&ocean_meke` (prognostic mesoscale eddy kinetic energy, [5]).
      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_meke"
      g%doc = "Prognostic mesoscale eddy kinetic energy (GM<->eddy loop)."

      pl => cfg%ocean%meke%enable
      call g%add(nml_logical("enable", pl, &
                             "Master switch (requires &ocean_gm_nml enable; default off ⇒ no-op)"))
      pr => cfg%ocean%meke%gmcoeff
      call g%add(nml_real("gmcoeff", pr, "PE->MEKE conversion efficiency (< 0 ⇒ off)", units="nondim"))
      pr => cfg%ocean%meke%frcoeff
      call g%add(nml_real("frcoeff", pr, "Frictional mean->eddy conversion (< 0 ⇒ off; >=0 sources hvisc KE dissipation)", &
                          units="nondim"))
      pr => cfg%ocean%meke%bgsrc
      call g%add(nml_real("bgsrc", pr, "Background energy source", units="m^2/s^3"))
      pr => cfg%ocean%meke%damping
      call g%add(nml_real("damping", pr, "Linear MEKE dissipation rate", units="1/s"))
      pr => cfg%ocean%meke%kh
      call g%add(nml_real("kh", pr, "Background lateral diffusion of MEKE (< 0 ⇒ off)", units="m^2/s"))
      pr => cfg%ocean%meke%k4
      call g%add(nml_real("k4", pr, "Background biharmonic diffusion of MEKE (< 0 ⇒ off)", units="m^4/s"))
      pr => cfg%ocean%meke%khcoeff
      call g%add(nml_real("khcoeff", pr, "MEKE->Kh scaling (<= 0 ⇒ closure off)", units="nondim"))
      pr => cfg%ocean%meke%cd_scale
      call g%add(nml_real("cd_scale", pr, "Bottom/column eddy-velocity ratio", units="nondim"))
      pr => cfg%ocean%meke%cb
      call g%add(nml_real("cb", pr, "Coefficient in gamma_bot (bottomFac2)", units="nondim"))
      pr => cfg%ocean%meke%ct
      call g%add(nml_real("ct", pr, "Coefficient in gamma_bt (barotrFac2)", units="nondim"))
      pr => cfg%ocean%meke%min_gamma2
      call g%add(nml_real("min_gamma2", pr, "Floor on gamma_b^2/gamma_t^2", units="nondim"))
      pr => cfg%ocean%meke%uscale
      call g%add(nml_real("uscale", pr, "Background eddy velocity scale for bottom drag", units="m/s"))
      pr => cfg%ocean%meke%dtscale
      call g%add(nml_real("dtscale", pr, "Time-stepping acceleration factor", units="nondim"))
      pr => cfg%ocean%meke%khth_fac
      call g%add(nml_real("khth_fac", pr, "Geom-mean kh -> VarMix KhTh factor (0 ⇒ inert)", units="nondim"))
      pr => cfg%ocean%meke%khtr_fac
      call g%add(nml_real("khtr_fac", pr, "Geom-mean kh -> VarMix KhTr factor (0 ⇒ inert)", units="nondim"))
      pl => cfg%ocean%meke%backscatter
      call g%add(nml_logical("backscatter", pl, &
                             "Enable MEKE -> momentum harmonic backscatter (negative viscosity); default off ⇒ bit-identical"))
      pr => cfg%ocean%meke%backscatter_visc_coeff_ku
      call g%add(nml_real("backscatter_visc_coeff_ku", pr, &
                          "MEKE_VISCOSITY_COEFF_KU: harmonic backscatter efficiency Ku=coeff*sqrt(2*gt2*E)*Lmix (0 ⇒ inert)", &
                          units="nondim"))
      pr => cfg%ocean%meke%khmeke_fac
      call g%add(nml_real("khmeke_fac", pr, "meke%kh -> MEKE self-diffusivity factor", units="nondim"))
      pr => cfg%ocean%meke%advection_factor
      call g%add(nml_real("advection_factor", pr, "Barotropic-transport advection scaling (0 ⇒ off)", &
                          units="nondim"))
      pr => cfg%ocean%meke%cdrag
      call g%add(nml_real("cdrag", pr, "Bottom drag coefficient for MEKE", units="nondim"))
      pl => cfg%ocean%meke%use_bbl_drag
      call g%add(nml_logical("use_bbl_drag", pl, &
                             "Add resolved |u_bed|^2 to the MEKE bottom-drag rate (default off ⇒ bit-identical)"))
      pr => cfg%ocean%meke%alpha_deform
      call g%add(nml_real("alpha_deform", pr, "Weight on deformation length scale", units="nondim"))
      pr => cfg%ocean%meke%alpha_rhines
      call g%add(nml_real("alpha_rhines", pr, "Weight on Rhines length scale (v1 default 0 ⇒ inert)", &
                          units="nondim"))
      pr => cfg%ocean%meke%alpha_eady
      call g%add(nml_real("alpha_eady", pr, "Weight on Eady length scale (needs VarMix SN)", units="nondim"))
      pr => cfg%ocean%meke%alpha_frict
      call g%add(nml_real("alpha_frict", pr, "Weight on frictional-arrest length scale", units="nondim"))
      pr => cfg%ocean%meke%alpha_grid
      call g%add(nml_real("alpha_grid", pr, "Weight on grid length scale", units="nondim"))

      call schema%add_group(g)
   end subroutine register_meke