Mixed-phase saturation adjustment

Mixed-phase saturation adjustment extends the warm-phase model to temperatures between the homogeneous ice nucleation temperature and the freezing point, where condensate may exist as a mixture of liquid and ice.

We assume instantaneous adjustment to an equilibrium in which vapor is at or below the saturation specific humidity over a temperature-dependent mixed surface. The mixed surface is parameterized by a liquid fraction λ that varies linearly with temperature between the homogeneous ice nucleation temperature and the freezing temperature Tᶠ.

Equilibrium surface model

Let T be temperature. Define the clamped temperature

\[T' = \mathrm{clamp}(T, T^h, T^f) ,\]

where $\mathrm{clamp}(x, x_{\min}, x_{\max})$ limits values of $x$ within range $[x_{\min}, x_{\max}]$, and the liquid fraction

\[\lambda(T) = \frac{T' - T^f}{T^h - T^f} , \qquad \lambda \in [0, 1] .\]

A value of $λ = 1$ corresponds to a pure liquid surface (warm side); $λ = 0$ corresponds to a pure ice surface (cold side). This model yields a mixed-phase surface with effective latent heat and heat-capacity difference that are linear blends of the pure-phase values, consistent with Pressel et al. (2015).

In Breeze, the equilibrium surface is constructed internally via PlanarMixedPhaseSurface(λ) using MixedPhaseEquilibrium, and is accessed by

using Breeze
using Breeze.Microphysics: MixedPhaseEquilibrium

FT = Float64
thermo = ThermodynamicConstants(FT)

# Define equilibrium with default temperatures (Tᶠ = 273.15 K, Tʰ = 233.15 K)
eq = MixedPhaseEquilibrium(FT)
MixedPhaseEquilibrium{Float64}(273.15, 233.15)

Saturation specific humidity across the mixed-phase range

We can compute the saturation specific humidity across the entire range from homogeneous ice nucleation up to freezing using the equilibrium model above:

using Breeze.Microphysics: equilibrium_saturation_specific_humidity

p = 101325.0
qᵗ = 0.012

Tᶠ = eq.freezing_temperature
Tʰ = eq.homogeneous_ice_nucleation_temperature
T = range(Tʰ - 10, Tᶠ + 10; length=81) # slightly beyond the mixed-phase range

qᵛ⁺ = [equilibrium_saturation_specific_humidity(Tʲ, p, qᵗ, thermo, eq) for Tʲ in T]
81-element Vector{Float64}:
 2.377053474519256e-5
 2.6076677427265768e-5
 2.8588705622201346e-5
 3.1323363759368965e-5
 3.429862037572027e-5
 3.753374708685489e-5
 4.104940193514636e-5
 4.4867717315009e-5
 4.9012392682486684e-5
 5.350879226363462e-5
 ⋮
 0.004971957002848185
 0.0052425026646400405
 0.005526119163425214
 0.00582336024456034
 0.006134800308871168
 0.0064610351445029005
 0.006802682689781641
 0.0071603838289523904
 0.007534803222792989

Optionally, we can visualize how qᵛ⁺ varies with temperature:

using CairoMakie

fig = Figure()
ax = Axis(fig[1, 1], xlabel="Temperature (K)", ylabel="qᵛ⁺ (kg kg⁻¹)")
lines!(ax, T, qᵛ⁺)
fig
Example block output

Liquid/ice partitioning of condensate

Under mixed-phase saturation adjustment, excess total moisture is partitioned between liquid and ice according to the temperature-dependent liquid fraction $λ(T)$ implied by the equilibrium surface. Given total moisture qᵗ and saturation specific humidity qᵛ⁺(T), the condensate amount is

\[q^{\mathrm{cond}} = \max(0, q^t - q^{v+}) , \qquad q^l = \lambda(T) q^{\mathrm{cond}} , \quad q^i = [1 - \lambda(T)] q^{\mathrm{cond}} .\]

# Compute partitioning across temperature range
T′ = clamp.(T, Tʰ, Tᶠ)
λ = @. (T′ - Tᶠ) / (Tʰ - Tᶠ)
qcond = @. max(0, qᵗ - qᵛ⁺)

qˡ = λ .* qcond
qⁱ = (1 .- λ) .* qcond

fig = Figure()
ax = Axis(fig[1, 1], xlabel="Temperature (K)", ylabel="Specific humidity (kg kg⁻¹)")
lines!(ax, T, qˡ, label="liquid")
lines!(ax, T, qⁱ, label="ice")
axislegend(ax, position=:lc)
fig
Example block output

Notes

  • Warm-phase saturation adjustment is recovered for T ≥ Tᶠ ($λ = 1$, all liquid) and ice-phase saturation for T ≤ Tʰ ($λ = 0$, all ice).
  • The moist static energy in Breeze includes both liquid and ice latent heats in mixed-phase conditions:

    \[e = cᵖᵐ T + g z - ℒˡᵣ qˡ - ℒⁱᵣ qⁱ .\]

For details about the saturation adjustment algorithm itself and moist static energy, see the Warm-phase saturation adjustement.