&ocean_ice_nml: sea-ice model master switch + category/layer
counts (SIS2 port, PLAN_SEA_ICE.md). PR 0 scaffold — the knobs
size the gated ocean_sea_ice_t slot. PR 3c adds the v1 scalar
restoring atmospheric-forcing filler (air_temp/restore_lambda/
sw_down) that drives the column live in the driver. Default OFF
⇒ byte-identical.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | a_face_stress | = | .false. |
PR 62: weight the atmospheric stress AND the ice-ocean drag in
the EVP momentum balance by the face ice concentration
|
|
| integer, | public | :: | adv_substeps | = | 1 |
Advective sub-iterations per transport call (SIS2 |
|
| real(kind=wp), | public | :: | air_temp | = | 0.0_wp |
Prescribed slab-atmosphere air temperature (degC) for the v1
restoring atmospheric-forcing filler. |
|
| real(kind=wp), | public | :: | c0 | = | 20.0_wp |
SIS2 |
|
| real(kind=wp), | public | :: | cdw | = | 3.24e-3_wp |
SIS2 |
|
| real(kind=wp), | public | :: | cfl_trunc | = | 0.0_wp |
SIS2 |
|
| logical, | public | :: | cfl_trunc_dyn_its | = | .false. |
SIS2 |
|
| real(kind=wp), | public | :: | del_sh_min_scale | = | 2.0_wp |
SIS2 |
|
| logical, | public | :: | dynamics | = | .false. |
EVP rheology master switch ( |
|
| real(kind=wp), | public | :: | ec | = | 2.0_wp |
SIS2 |
|
| logical, | public | :: | enable | = | .false. |
Master switch. Off (default) ⇒ the sea-ice slot is never initialised, mapped, or stepped ⇒ byte-identical. |
|
| integer, | public | :: | evp_sub_steps | = | 432 |
SIS2 |
|
| real(kind=wp), | public | :: | hlim(MAX_ICE_HLIM_VALS) | = | -1.0_wp |
hardcoded SIS2 default table. |
|
| integer, | public | :: | ncat | = | 5 |
Number of ice thickness categories (category 0 = open water; SIS2 default 5). |
|
| integer, | public | :: | nk_ice | = | 2 |
Vertical ice layers per category (2 = Winton two-layer, v1). |
|
| real(kind=wp), | public | :: | p0 | = | 2.75e4_wp |
SIS2 |
|
| logical, | public | :: | project_ci | = | .false. |
SIS2 |
|
| real(kind=wp), | public | :: | restore_lambda | = | 0.0_wp |
Surface-flux restoring coefficient (W/m^2/K), i.e. dSF/dT of the linearized SEB. 0 (default) => a passive column (dsf_dt=0, sf_0=0): no thermostat, so no restoring drive. A production melt season uses ~20. NOTE: with restore_lambda=0 the seam fields are (0,0,sw_down) => the column feels only shortwave + basal flux. |
|
| real(kind=wp), | public | :: | rho_ocean | = | 1030.0_wp |
SIS2 |
|
| real(kind=wp), | public | :: | roll_factor | = | 1.0_wp |
SIS2 |
|
| logical, | public | :: | snow_ice | = | .false. |
Archimedes freeboard snow-ice conversion (SIS2
|
|
| real(kind=wp), | public | :: | snowfall | = | 0.0_wp |
Uniform frozen-precipitation rate onto the ice top (kg/m^2/s)
for the v1 restoring atmospheric-forcing filler (PR 26). Spread
onto the |
|
| real(kind=wp), | public | :: | sw_down | = | 0.0_wp |
Downwelling shortwave into the ice top (W/m^2) for the v1 filler. |
|
| real(kind=wp), | public | :: | tdamp | = | -0.2_wp |
SIS2 |
|
| logical, | public | :: | transport | = | .false. |
Enable horizontal category ice/snow transport
( |
type :: ocean_ice_config_t !! `&ocean_ice_nml`: sea-ice model master switch + category/layer !! counts (SIS2 port, `PLAN_SEA_ICE.md`). PR 0 scaffold — the knobs !! size the gated `ocean_sea_ice_t` slot. PR 3c adds the v1 scalar !! restoring atmospheric-forcing filler (`air_temp`/`restore_lambda`/ !! `sw_down`) that drives the column live in the driver. Default OFF !! ⇒ byte-identical. logical :: enable = .false. !! Master switch. Off (default) ⇒ the sea-ice slot is never !! initialised, mapped, or stepped ⇒ byte-identical. integer :: ncat = 5 !! Number of ice thickness categories (category 0 = open water; !! SIS2 default 5). real(wp) :: hlim(MAX_ICE_HLIM_VALS) = -1.0_wp !! PR-58: ITD category lower thickness edges (m), overriding the !! hardcoded SIS2 default table. `-1.0` sentinel (all entries) = !! unset. Semantics when set: `hlim(1..n)` where `n` is the !! leading non-sentinel run, `2 <= n <= ncat+1`, strictly !! increasing, `hlim(1) > 0`. Fills `h_lim(1..min(ncat+1,n))`; !! the remainder extrapolates by constant width, !! `h_lim(k) = 2*h_lim(k-1) - h_lim(k-2)`. Unset => the !! hardcoded SIS2 default table, byte-identical (default-off !! house rule). See `ice_hlim_count`/`ice_hlim_spec_is_valid`. integer :: nk_ice = 2 !! Vertical ice layers per category (2 = Winton two-layer, v1). real(wp) :: air_temp = 0.0_wp !! Prescribed slab-atmosphere air temperature (degC) for the v1 !! restoring atmospheric-forcing filler. `SF(T) = restore_lambda*(T - air_temp)`. real(wp) :: restore_lambda = 0.0_wp !! Surface-flux restoring coefficient (W/m^2/K), i.e. dSF/dT of the !! linearized SEB. 0 (default) => a passive column (dsf_dt=0, sf_0=0): !! no thermostat, so no restoring drive. A production melt season uses !! ~20. NOTE: with restore_lambda=0 the seam fields are (0,0,sw_down) !! => the column feels only shortwave + basal flux. real(wp) :: sw_down = 0.0_wp !! Downwelling shortwave into the ice top (W/m^2) for the v1 filler. real(wp) :: snowfall = 0.0_wp !! Uniform frozen-precipitation rate onto the ice top (kg/m^2/s) !! for the v1 restoring atmospheric-forcing filler (PR 26). Spread !! onto the `atm_fprec` seam exactly like `sw_down` -> `atm_sw_dn`. !! 0 (default) => byte-identical (`has_snowfall=.false.`, the new !! kernels never fire). ! ---- PR-27: snow-ice flooding ---- logical :: snow_ice = .false. !! Archimedes freeboard snow-ice conversion (SIS2 !! `ice_resize_SIS2` final block; diagnosed as SN2IC). When the !! snow load submerges the snow-ice interface, convert the !! submerged snow mass to ice in the top layer. Default OFF => !! byte-identical. ! ---- PR 4b: category ice transport + compress_ice ---- logical :: transport = .false. !! Enable horizontal category ice/snow transport !! (`rdb_ice_transport%ice_transport_step`) — SIS2's default !! (velocity, non-merged) `ice_cat_transport` path. Default OFF ⇒ !! byte-identical for every existing nml/test (house rule). integer :: adv_substeps = 1 !! Advective sub-iterations per transport call (SIS2 `NSTEPS_ADV`, !! default 1). `dt_adv = dt_therm / adv_substeps`. real(wp) :: roll_factor = 1.0_wp !! SIS2 `SEA_ICE_ROLL_FACTOR` — thin-ice rolling floor in !! `cell_ave_state_to_ice_state`. 0 disables rolling. ! ---- PR 5: C-grid EVP ice dynamics ---- logical :: dynamics = .false. !! EVP rheology master switch (`rdb_ice_evp%ice_evp_step`). !! Default off => byte-identical (the transport sampler keeps !! filling `u_ice`/`v_ice` from the ocean surface layer). logical :: a_face_stress = .false. !! PR 62: weight the atmospheric stress AND the ice-ocean drag in !! the EVP momentum balance by the face ice concentration !! `a_u = 0.5*(ci(i-1,j) + ci(i,j))` (same expression/edge !! convention as `ice_ocean_stress_flux_impl`'s `a_u`), giving the !! textbook `m du/dt = grad.sigma + a*(tau_a - tau_w)` (Hibler 1979 !! eq. 1) and an EXACTLY closing ice<->ocean momentum budget at !! every fractional cover, not just steady free drift. Both terms !! must be weighted together -- weighting the wind alone converts !! today's leak (zero at steady free drift) into a permanent one. !! Default off => byte-identical. real(wp) :: p0 = 2.75e4_wp !! SIS2 `ICE_STRENGTH_PSTAR` — ice-strength pressure constant [Pa]. real(wp) :: c0 = 20.0_wp !! SIS2 `ICE_STRENGTH_CSTAR` — ice-strength exponent constant [nondim]. real(wp) :: ec = 2.0_wp !! SIS2 `ICE_YIELD_ELLIPTICITY` — yield-curve axis ratio [nondim]. !! 0 => cavitating-fluid rheology (str_t/str_s stay exactly 0). real(wp) :: cdw = 3.24e-3_wp !! SIS2 `ICE_CDRAG_WATER` — ice-ocean drag coefficient [nondim]. real(wp) :: rho_ocean = 1030.0_wp !! SIS2 `RHO_OCEAN` — ice-drag reference density [kg/m^3]. !! Deliberately independent of the ocean's `rho0` (usually 1035). integer :: evp_sub_steps = 432 !! SIS2 `NSTEPS_DYN` — EVP subcycles per slow (outer) step. real(wp) :: del_sh_min_scale = 2.0_wp !! SIS2 `ICE_DEL_SH_MIN_SCALE` — viscosity-floor scale [nondim]. real(wp) :: tdamp = -0.2_wp !! SIS2 `ICE_TDAMP_ELASTIC`. `>0` => seconds; `==0` => !! `max(0.2*dt_slow, 3*dt)`; `<0` => `max(-tdamp*dt_slow, 3*dt)`. ! ---- PR 36: EVP velocity CFL truncation + PROJECT_ICE_CONCENTRATION ---- real(wp) :: cfl_trunc = 0.0_wp !! SIS2 `CFL_TRUNCATE` (SIS2 default **0.5**) — transport-CFL !! ceiling on the FINAL ice velocity the EVP call hands to !! transport: `|u| <= 0.95*cfl_trunc*areaT(donor)/(dt_transport* !! dy_cu)`. `0` (Roundabout default, house bit-identity rule) disables !! the clip entirely => byte-identical. Recommended production !! value 0.5 ("instability can occur past 0.5", SIS2). logical :: cfl_trunc_dyn_its = .false. !! SIS2 `CFL_TRUNC_DYN_ITS` (SIS2 default `.false.`, matches). !! Also clip `u_ice`/`v_ice` to the EXACT (no 0.95 back-off, no !! count) bound at the bottom of every EVP subcycle, not just the !! final velocity. Requires `cfl_trunc > 0`. logical :: project_ci = .false. !! SIS2 `PROJECT_ICE_CONCENTRATION` (SIS2 default **`.true.`**). !! Project the ice concentration forward along the current !! divergence each subcycle (`ci_proj = ci*exp(-t_cum*sh_dd)`) and !! recompute `pres_mice` from it, stiffening the rheology under !! convergence (and weakening it under divergence) within the !! call. `.false.` (Roundabout default, house bit-identity rule) holds !! `pres_mice` at its pre-loop value for all subcycles => byte-identical. end type ocean_ice_config_t