subroutine register_ocean_zinit(cfg, schema)
!! `&ocean_zinit_nml`: z-level T/S initial-condition overlay (A2).
!! Default `enable = .false.` is a no-op (analytical IC unchanged).
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
character(len=:), pointer :: ps
g%name = "ocean_zinit"
g%doc = "Z-level T/S initial-condition overlay (A2)."
pl => cfg%ocean%zinit%enable
call g%add(nml_logical("enable", pl, &
"Master switch (default off; requires RDB_ENABLE_NETCDF=ON)"))
ps => cfg%ocean%zinit%source
call g%add(nml_enum("source", ps, &
"Where the T(z)/S(z) profile comes from: a "// &
"pre-regridded NetCDF, or the analytic affine "// &
"lin_* profile (no file)", &
allowed=[character(len=15) :: "file", "linear"]))
ps => cfg%ocean%zinit%file
call g%add(nml_string("file", ps, "Path to the model-grid T/S NetCDF"))
ps => cfg%ocean%zinit%t_var
call g%add(nml_string("t_var", ps, &
"Temperature variable-name override (blank tries temp/T/temperature)"))
ps => cfg%ocean%zinit%s_var
call g%add(nml_string("s_var", ps, &
"Salinity variable-name override (blank tries salt/S/salinity)"))
ps => cfg%ocean%zinit%z_var
call g%add(nml_string("z_var", ps, &
"Source-axis variable-name override (blank tries z_src/z/depth/lev)"))
pr => cfg%ocean%zinit%land_fill_t
call g%add(nml_real("land_fill_t", pr, "Fallback temperature for dry columns", units="degC"))
pr => cfg%ocean%zinit%land_fill_s
call g%add(nml_real("land_fill_s", pr, "Fallback salinity for dry columns", units="PSU"))
pr => cfg%ocean%zinit%lin_t_ref
call g%add(nml_real("lin_t_ref", pr, &
"source='linear': temperature at the z = 0 datum", units="degC"))
pr => cfg%ocean%zinit%lin_dt_dz
call g%add(nml_real("lin_dt_dz", pr, &
"source='linear': dT/dz, z positive UP (stable > 0)", &
units="degC/m"))
pr => cfg%ocean%zinit%lin_s_ref
call g%add(nml_real("lin_s_ref", pr, &
"source='linear': salinity at the z = 0 datum", units="PSU"))
pr => cfg%ocean%zinit%lin_ds_dz
call g%add(nml_real("lin_ds_dz", pr, &
"source='linear': dS/dz, z positive UP (stable < 0)", &
units="PSU/m"))
call schema%add_group(g)
end subroutine register_ocean_zinit