Initial-condition overlay + EOS reference state. Drives the analytical configurations (eady-front, geostrophic- adjustment, …) plus the linear-EOS reference values that the rest of the ocean dyn step reads.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | S_ref | = | 35.0_wp |
Linear-EOS reference salinity (PSU) — the S at which the haline anomaly term vanishes. |
|
| real(kind=wp), | public | :: | T_ref | = | 10.0_wp |
Linear-EOS reference temperature (°C) — the T at which the thermal anomaly term vanishes. |
|
| real(kind=wp), | public | :: | alpha_T | = | 1.7e-4_wp |
Linear-EOS thermal-expansion coefficient, DIMENSIONAL
(kg/m³ per °C) — see |
|
| real(kind=wp), | public | :: | beta_S | = | 7.6e-4_wp |
Linear-EOS haline contraction coefficient, DIMENSIONAL (kg/m³ per PSU). UNITS TRAP. Roundabout’s linear EOS is written as the DENSITY-ANOMALY form rho = rho_0 + beta_S·(S − S_ref) − alpha_T·(T − T_ref) so rho = rho_0·(1 − alpha·(T − T_ref) + beta·(S − S_ref)) with alpha in 1/°C and beta in 1/PSU. Convert by
multiplying through by alpha_T = rho_0 · alpha beta_S = rho_0 · beta e.g. ISOMIP+ (alpha = 3.733e-5 1/°C, beta = 7.843e-4 1/PSU,
rho_0 = 1027.51) becomes |
|
| real(kind=wp), | public | :: | eady_T_ref | = | 10.0_wp |
Reference temperature (°C) for the Eady IC at z=0, y=y_mid. |
|
| real(kind=wp), | public | :: | eady_dT_dy | = | -2.0e-5_wp |
Meridional gradient of T (°C/m) for the Eady IC. |
|
| real(kind=wp), | public | :: | eady_dT_dz | = | 0.01_wp |
Vertical stratification (°C/m) for the Eady IC. |
|
| real(kind=wp), | public | :: | eady_pert_amp | = | 1.0e-3_wp |
Amplitude (°C) of the random temperature perturbation seeded into the Eady IC to break symmetry. |
|
| integer, | public | :: | eady_pert_seed | = | 12345 |
RNG seed for the Eady IC perturbation. |
|
| real(kind=wp), | public | :: | ga_eta_amp | = | 1.0_wp |
Geostrophic-adjustment IC: amplitude (m) of the Gaussian SSH bump. |
|
| real(kind=wp), | public | :: | ga_length_scale | = | 50000.0_wp |
Geostrophic-adjustment IC: e-folding scale (m) of the Gaussian SSH bump. |
|
| real(kind=wp), | public | :: | ga_x_center | = | -1.0_wp |
x-coordinate (m) of the bump centre. Negative ⇒ auto (basin midpoint). |
|
| real(kind=wp), | public | :: | ga_y_center | = | -1.0_wp |
y-coordinate (m) of the bump centre. Negative ⇒ auto (basin midpoint). |
|
| character(len=32), | public | :: | ic_config | = | "" |
IC overlay tag. “” (default) keeps the analytical T(z) + zero-velocity IC. “eady” runs the Eady-front overlay; “geostrophic_adjustment” drops a Gaussian SSH bump on an f-plane; “baroclinic_jet” runs the two-layer reduced-gravity baroclinic-instability jet (SIM_DETAILS.md §5). |
|
| real(kind=wp), | public | :: | interface_amp | = | 200.0_wp |
Baroclinic-jet IC: interface displacement amplitude Δξ (m). Spec “tuned” default 200 m; faithful uses 100 m. |
|
| real(kind=wp), | public | :: | jet_half_width | = | 40000.0_wp |
Baroclinic-jet IC ( |
|
| real(kind=wp), | public | :: | layer_rho_init(MAX_OCEAN_LAYER_RHO_INIT) | = | -1.0_wp |
Per-layer initial density (kg/m³), |
|
| real(kind=wp), | public | :: | pert_amp_frac | = | 0.2_wp |
Baroclinic-jet IC: front-localised meander amplitude as a
fraction of Δξ ( |
|
| integer, | public | :: | pert_nx | = | 3 |
Baroclinic-jet IC: zonal perturbation wavenumber (integer number
of wavelengths across the periodic domain). Integer so the
analytic x-continuation wraps exactly ( |
|
| real(kind=wp), | public | :: | rho_0 | = | 1035.0_wp |
Reference density (kg/m³) for the linear EOS and Boussinesq
PGF — the density at |
|
| real(kind=wp), | public | :: | rho_lightest | = | -1.0_wp |
Linear density-range IC — MOM6 |
|
| real(kind=wp), | public | :: | rho_range | = | 2.0_wp |
Linear density-range IC: total top-to-bottom density contrast
(kg/m³), MOM6 |
|
| real(kind=wp), | public | :: | upper_layer_rest | = | 500.0_wp |
Baroclinic-jet IC: rest thickness of the upper (surface, k=2)
layer H₁ (m). The lower (bed, k=1) rest thickness is
|
type :: ocean_ic_config_t !! Initial-condition overlay + EOS reference state. Drives !! the analytical configurations (eady-front, geostrophic- !! adjustment, …) plus the linear-EOS reference values that !! the rest of the ocean dyn step reads. character(len=32) :: ic_config = "" !! IC overlay tag. "" (default) keeps the analytical T(z) !! + zero-velocity IC. "eady" runs the Eady-front overlay; !! "geostrophic_adjustment" drops a Gaussian SSH bump on an !! f-plane; "baroclinic_jet" runs the two-layer reduced-gravity !! baroclinic-instability jet (SIM_DETAILS.md §5). real(wp) :: alpha_T = 1.7e-4_wp !! Linear-EOS thermal-expansion coefficient, **DIMENSIONAL** !! (kg/m³ per °C) — see `beta_S` for the conversion from the !! fractional 1/°C coefficient most protocols quote. real(wp) :: beta_S = 7.6e-4_wp !! Linear-EOS haline contraction coefficient, **DIMENSIONAL** !! (kg/m³ per PSU). !! !! UNITS TRAP. Roundabout's linear EOS is written as the !! DENSITY-ANOMALY form !! !! rho = rho_0 + beta_S·(S − S_ref) − alpha_T·(T − T_ref) !! !! so `alpha_T`/`beta_S` carry kg/m³ per unit T/S. Most !! protocols (ISOMIP+, Asay-Davis et al. 2016 among them) quote !! the FRACTIONAL coefficients of the equivalent form !! !! rho = rho_0·(1 − alpha·(T − T_ref) + beta·(S − S_ref)) !! !! with alpha in 1/°C and beta in 1/PSU. Convert by !! multiplying through by `rho_0`: !! !! alpha_T = rho_0 · alpha beta_S = rho_0 · beta !! !! e.g. ISOMIP+ (alpha = 3.733e-5 1/°C, beta = 7.843e-4 1/PSU, !! rho_0 = 1027.51) becomes `alpha_T = 3.8356948e-2`, !! `beta_S = 8.0587609e-1`. Feeding the fractional numbers !! straight in under-states the density response ~1000×, which !! looks like a plausible but far too weakly stratified run. real(wp) :: T_ref = 10.0_wp !! Linear-EOS reference temperature (°C) — the T at which the !! thermal anomaly term vanishes. real(wp) :: S_ref = 35.0_wp !! Linear-EOS reference salinity (PSU) — the S at which the !! haline anomaly term vanishes. real(wp) :: rho_0 = 1035.0_wp !! Reference density (kg/m³) for the linear EOS and Boussinesq !! PGF — the density at `(T_ref, S_ref)`. real(wp) :: layer_rho_init(MAX_OCEAN_LAYER_RHO_INIT) = -1.0_wp !! Per-layer initial density (kg/m³), `k=1` bed → `k=nz` !! surface, mirroring MOM6's `COORD_CONFIG="gprime"` IC. Any !! positive value bypasses the EOS-derived init and writes the !! user-specified densities straight into `ms%rho_layer` at the !! end of `ocean_state_seed_from_cfg`. Count of non-sentinel !! (>= 0) entries must equal `nz_layers`. Default `-1.0` !! sentinel ⇒ existing init path (bit-identical). real(wp) :: rho_lightest = -1.0_wp !! Linear density-range IC — MOM6 `COORD_CONFIG="linear"` !! analogue. When `>= 0`, generates `nz_layers` linearly-spaced !! layer densities spanning `[rho_lightest, rho_lightest + !! rho_range]` and writes them into `ms%rho_layer` (bed `k=1` !! heaviest → surface `k=nz` lightest), reusing the !! `layer_rho_init` write path — so the column scales by just !! bumping `nz_layers`, no hand-listed densities. Mutually !! exclusive with `layer_rho_init`. Default `-1.0` sentinel ⇒ !! off (bit-identical). real(wp) :: rho_range = 2.0_wp !! Linear density-range IC: total top-to-bottom density contrast !! (kg/m³), MOM6 `DENSITY_RANGE` (default 2.0). Read only when !! `rho_lightest >= 0`. real(wp) :: eady_dT_dy = -2.0e-5_wp !! Meridional gradient of T (°C/m) for the Eady IC. real(wp) :: eady_dT_dz = 0.01_wp !! Vertical stratification (°C/m) for the Eady IC. real(wp) :: eady_T_ref = 10.0_wp !! Reference temperature (°C) for the Eady IC at z=0, y=y_mid. real(wp) :: eady_pert_amp = 1.0e-3_wp !! Amplitude (°C) of the random temperature perturbation !! seeded into the Eady IC to break symmetry. integer :: eady_pert_seed = 12345 !! RNG seed for the Eady IC perturbation. real(wp) :: ga_eta_amp = 1.0_wp !! Geostrophic-adjustment IC: amplitude (m) of the Gaussian !! SSH bump. real(wp) :: ga_length_scale = 50000.0_wp !! Geostrophic-adjustment IC: e-folding scale (m) of the !! Gaussian SSH bump. real(wp) :: ga_x_center = -1.0_wp !! x-coordinate (m) of the bump centre. Negative ⇒ auto !! (basin midpoint). real(wp) :: ga_y_center = -1.0_wp !! y-coordinate (m) of the bump centre. Negative ⇒ auto !! (basin midpoint). real(wp) :: jet_half_width = 40000.0_wp !! Baroclinic-jet IC (`ic_config="baroclinic_jet"`): tanh jet !! half-width L (m). Spec "tuned" default 40 km; the Julia- !! faithful case uses 100 km. Read only for the baroclinic-jet IC. real(wp) :: interface_amp = 200.0_wp !! Baroclinic-jet IC: interface displacement amplitude Δξ (m). !! Spec "tuned" default 200 m; faithful uses 100 m. real(wp) :: pert_amp_frac = 0.2_wp !! Baroclinic-jet IC: front-localised meander amplitude as a !! fraction of Δξ (`A_pert = pert_amp_frac·Δξ`). Spec default 0.2. integer :: pert_nx = 3 !! Baroclinic-jet IC: zonal perturbation wavenumber (integer number !! of wavelengths across the periodic domain). Integer so the !! analytic x-continuation wraps exactly (`k_x·L_x = 2π·pert_nx`). !! Spec default 3. real(wp) :: upper_layer_rest = 500.0_wp !! Baroclinic-jet IC: rest thickness of the upper (surface, k=2) !! layer H₁ (m). The lower (bed, k=1) rest thickness is !! `max_depth − upper_layer_rest`. Spec §4 default 500 m !! (H₂ = 1500 m over the 2000 m column). end type ocean_ic_config_t