From f9d83fd2301e2e331d557aea9e27138fbb29149c Mon Sep 17 00:00:00 2001
From: Brian Groenke <brian.groenke@awi.de>
Date: Wed, 1 Jan 2025 19:50:34 +0100
Subject: [PATCH] Add uutility functions for humidity

---
 src/Physics/Surface/SEB/seb_utils.jl | 23 +++++++++++++++++++++++
 src/Physics/Surface/Surface.jl       |  1 +
 2 files changed, 24 insertions(+)
 create mode 100755 src/Physics/Surface/SEB/seb_utils.jl

diff --git a/src/Physics/Surface/SEB/seb_utils.jl b/src/Physics/Surface/SEB/seb_utils.jl
new file mode 100755
index 00000000..a1a1bd56
--- /dev/null
+++ b/src/Physics/Surface/SEB/seb_utils.jl
@@ -0,0 +1,23 @@
+"""
+    relative_to_specific_humidity(r_h, pr, Ts, Tair)
+
+Derives specific humidity from measured relative humidity, air pressure, and soil/air temperatures.
+"""
+relative_to_specific_humidity(r_h, pr, Ts, Tair) = 0.622*(r_h/100)*vapor_pressure(Tair, Ts) / pr
+
+# saturation vapor pressure
+"""
+    vapor_pressure(T, a₁, a₂, a₃)
+
+Saturation vapor pressure as a function of air temperature with empirical
+coefficients a₁, a₂, and a₃.
+"""
+vapor_pressure(T, a₁, a₂, a₃) = a₁*exp(a₂*T/(T+a₃))
+
+# saturation vapor pressure for frozen vs. unfrozen conditions
+"""
+    vapor_pressure(Tair, Ts)
+
+Saturation vapor pressure from air and soil temperature, accounting for both frozen (<0°C) and unfrozen conditions.
+"""
+vapor_pressure(Tair, Ts) = Ts < zero(Ts) ? vapor_pressure(Tair, 611.0, 22.46, 272.62) : vapor_pressure(Tair, 611.0, 17.62, 243.12)
diff --git a/src/Physics/Surface/Surface.jl b/src/Physics/Surface/Surface.jl
index 4bcf47e3..08458577 100644
--- a/src/Physics/Surface/Surface.jl
+++ b/src/Physics/Surface/Surface.jl
@@ -17,6 +17,7 @@ import Flatten
 
 # Surface energy balance
 export SurfaceEnergyBalance, SEBParams
+export relative_to_specific_humidity, vapor_pressure
 include("SEB/seb.jl")
 
 export SurfaceWaterBalance
-- 
GitLab