Specific-enthalpy <-> temperature inversions for the sea-ice thermodynamic column model.
!$acc routine seq: host scalars,
whole-array elemental calls, or per-point inside a
do concurrent device kernel.| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public, | parameter | :: | ICE_CP_BRINE | = | ICE_CP_ICE |
Heat capacity of brine pockets (J/kg/K). THE simplification:
set equal to |
| real(kind=wp), | public, | parameter | :: | ICE_CP_ICE | = | 2100.0_wp |
Heat capacity of fresh ice (J/kg/K) — SIS2 |
| real(kind=wp), | public, | parameter | :: | ICE_CP_WATER | = | 4200.0_wp |
Heat capacity of seawater as carried by the ICE model
(J/kg/K) — SIS2 |
| real(kind=wp), | public, | parameter | :: | ICE_DTF_DS | = | -0.054_wp |
Liquidus slope dT_f/dS (degC/PSU) — SIS2 DELIBERATELY NOT switched by |
| real(kind=wp), | public, | parameter | :: | ICE_ENTH_LIQ_0 | = | 0.0_wp |
Enthalpy of liquid fresh water at 0 degC (J/kg) — SIS2
|
| real(kind=wp), | public, | parameter | :: | ICE_LAT_FUS | = | 3.34e5_wp |
Latent heat of fusion (J/kg) — SIS2 |
| real(kind=wp), | public, | parameter | :: | ICE_LIQ_LIM | = | 0.99_wp |
|
| integer, | public, | parameter | :: | ICE_NK_MAX | = | 8 |
Compile-time cap on per-column local-array size (kappa-shear
|
Ice specific enthalpy (J/kg) from temperature + bulk salinity —
SIS2 enth_from_TS (SIS2_ice_thm.F90:1647). NOTE: here (and
only here) the freezing point uses max(0, s), per SIS2.
The SIS2 else branch at :1667-1671 (Cp_brine /= Cp_ice, the
T_fr*log(T_fr/T) form) is deliberately NOT ported — with
ICE_CP_BRINE == ICE_CP_ICE it is unreachable, and dropping it
keeps the map closed-form-invertible (see module docstring).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | t |
Ice temperature (degC). |
||
| real(kind=wp), | intent(in) | :: | s |
Ice bulk salinity (PSU). |
Enthalpy (J/kg) of liquid water at temperature t — SIS2
enthalpy_liquid (SIS2_ice_thm.F90:1691). s is unused in
this linear form; the argument is kept for SIS2 call-site
parity (enthalpy_liquid(T, S, ITV)).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | t |
Water temperature (degC). |
||
| real(kind=wp), | intent(in) | :: | s |
Ice bulk salinity (PSU) — unused, kept for call-site parity. |
Enthalpy (J/kg) of liquid water at the freezing point for
salinity s — SIS2 enthalpy_liquid_freeze (SIS2_ice_thm.F90:1679).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | s |
Ice bulk salinity (PSU). |
Freezing temperature (degC) of the ice brine at bulk salinity
s — SIS2 T_Freeze (SIS2_ice_thm.F90:1622), linear liquidus.
RAW s (no max(0,s) clamp) — faithful to SIS2, which clamps
only in enth_from_TS. Do not unify with ice_enth_from_ts’s
internal t_fr.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | s |
Ice bulk salinity (PSU). |
Ice temperature (degC) from specific enthalpy + bulk salinity —
SIS2 Temp_from_En_S (SIS2_ice_thm.F90:1830), Cp_ice ==
Cp_brine path only: the quadratic
ICE_CP_ICET2 - 2BBT + ICE_LAT_FUSt_fr = 0
solved for its smaller root. The SIS2 Newton/false-position
refinement (:1876-1933) is only needed when Cp_brine /= Cp_ice
and is deliberately NOT ported. Uses RAW s for t_fr (no max),
faithful to SIS2.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | en |
Ice specific enthalpy (J/kg). |
||
| real(kind=wp), | intent(in) | :: | s |
Ice bulk salinity (PSU). |