Skip to content

Commit

Permalink
Added latent heat of sublimation routines
Browse files Browse the repository at this point in the history
  • Loading branch information
tluettm committed Oct 7, 2024
1 parent c229529 commit 75a61e5
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 0 deletions.
3 changes: 3 additions & 0 deletions PySDM/backends/impl_numba/methods/deposition_methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ def body(
lambdaK = formulae.diffusion_ice_kinetics__lambdaK(temperature, pressure)
thermal_conductivity = formulae.diffusion_ice_kinetics__K(Ka_const, radius, lambdaK, temperature, rho)

latent_heat_sub = formulae.latent_heat_sublimation__ls(temperature)


saturation_ratio_ice = (
ambient_humidity[cid] / ambient_water_activity[cid]
)
Expand Down
2 changes: 2 additions & 0 deletions PySDM/formulae.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ def __init__( # pylint: disable=too-many-locals
condensation_coordinate: str = "VolumeLogarithm",
saturation_vapour_pressure: str = "FlatauWalkoCotton",
latent_heat: str = "Kirchhoff",
latent_heat_sublimation: str = "MurphyKoop",
hygroscopicity: str = "KappaKoehlerLeadingTerms",
drop_growth: str = "Mason1971",
surface_tension: str = "Constant",
Expand Down Expand Up @@ -75,6 +76,7 @@ def __init__( # pylint: disable=too-many-locals
self.diffusion_ice_kinetics = diffusion_ice_kinetics
self.diffusion_ice_capacity = diffusion_ice_capacity
self.latent_heat = latent_heat
self.latent_heat_sublimation = latent_heat_sublimation
self.diffusion_thermics = diffusion_thermics
self.ventilation = ventilation
self.state_variable_triplet = state_variable_triplet
Expand Down
1 change: 1 addition & 0 deletions PySDM/physics/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
isotope_diffusivity_ratios,
isotope_relaxation_timescale,
latent_heat,
latent_heat_sublimation,
optical_albedo,
optical_depth,
particle_advection,
Expand Down
8 changes: 8 additions & 0 deletions PySDM/physics/constants_defaults.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@
l_l19_a = 0.167 * si.dimensionless
l_l19_b = 3.65e-4 / si.kelvin


# Thermal diffusivity constants from Lowe et al. (2019)
k_l19_a = 4.2e-3 * si.joules / si.metres / si.seconds / si.kelvins
k_l19_b = 1.0456 * si.dimensionless
Expand Down Expand Up @@ -168,6 +169,13 @@
MK05_LIQ_C12 = 1 * si.K
MK05_LIQ_C13 = 0.014025 / si.K

# Latent heat of sublimation from Murphy and Koop (2005)
MK05_SUB_C1 = 46782.5 * si.joule / si.mole
MK05_SUB_C2 = 35.8925 * si.joule / si.mole / si.kelvin
MK05_SUB_C3 = 0.07414 * si.joule / si.mole / si.kelvin**2
MK05_SUB_C4 = 541.5 * si.joule / si.mole
MK05_SUB_C5 = 123.75 * si.kelvin

# standard pressure and temperature (ICAO)
T_STP = (sci.zero_Celsius + 15) * si.kelvin
p_STP = 101325 * si.pascal
Expand Down
6 changes: 6 additions & 0 deletions PySDM/physics/latent_heat_sublimation/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
"""
formulations of latent heat of sublimation temperature dependence (or lack thereof)
"""

from .constant import Constant
from .murphy_koop_2005 import MurphyKoop
12 changes: 12 additions & 0 deletions PySDM/physics/latent_heat_sublimation/constant.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
"""
temperature-independent latent heat of sublimation
"""


class Constant: # pylint: disable=too-few-public-methods
def __init__(self, _):
pass

@staticmethod
def ls(const, T): # pylint: disable=unused-argument
return const.l_tri
12 changes: 12 additions & 0 deletions PySDM/physics/latent_heat_sublimation/murphy_koop_2005.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
"""
temperature-dependent latent heat of sublimation from Murphy and Koop (2005) Eq. (5)
"""


class MurphyKoop: # pylint: disable=too-few-public-methods
def __init__(self, _):
pass

@staticmethod
def ls(const, T): # pylint: disable=unused-argument
return (const.MK05_SUB_C1 + const.MK05_SUB_C2 * T - const.MK05_SUB_C3 * T**2. + const.MK05_SUB_C4 * np.exp(-(T/const.MK05_SUB_C5)**2.)) / const.Mv

0 comments on commit 75a61e5

Please sign in to comment.