VPD Tool — Scientific Methods & References

Equation set, numerical methods, assumptions, and annotated bibliography for cross-reference.

Contents 1. Definitions & Symbols 2. Saturation Vapor Pressure Models 3. Vapor Pressure Deficit (Air & Leaf) 4. Dew Point and Absolute Humidity 5. Station Pressure vs Altitude 6. Analytic Solvers & Numerics 7. Visualization & Color Mapping 8. Validation Strategy 9. Limits, Uncertainties & Notes 10. Code Mapping 11. References

1) Definitions & Symbols

SymbolMeaningUnits
\(T\)Air temperature°C
\(T_\ell\)Leaf temperature \(= T + \Delta T\)°C
\(\Delta T\)Leaf–air temperature difference°C
\(RH\)Relative humidity%
\(e_s(T)\)Saturation vapor pressure over water at \(T\)kPa
\(e(T,RH)\)Ambient water vapor partial pressurekPa
\(VPD\)Vapor Pressure DeficitkPa
\(P\)Station (ambient) pressurekPa
\(h\)Geopotential height (altitude)m
App unit policy. Calculations are performed internally in SI units (°C, kPa); displays allow °C/°F. Saturation pressure and VPD are reported in kPa throughout for consistency with FAO-56 and ASHRAE conventions.

2) Saturation Vapor Pressure Models

The app uses a Magnus–Tetens–type expression (FAO-56 form) for saturation vapor pressure over liquid water:

\( e_s(T) = 0.6108 \; \exp\!\left( \dfrac{17.27\,T}{T + 237.3} \right) \qquad\) [kPa]

This parameterization (Allen et al., 1998, FAO-56) is widely used in agronomy and evapotranspiration modeling. Alternative high-accuracy formulations include Buck (1981, 1996) and Sonntag (1990). For horticultural VPD ranges \(T \in [0, 40]^\circ\mathrm{C}\), the FAO-56 expression tracks these within ~0.1–0.3%, which is well below sensor and environmental variability for grow environments.

2.1 Alternative formulations (for cross-check)

3) Vapor Pressure Deficit (Air & Leaf)

Ambient water vapor partial pressure is \( e(T,RH) = \frac{RH}{100}\,e_s(T) \). Following standard definitions (FAO-56; Jones, Plants and Microclimate), VPD is the difference between saturation at a reference surface and the ambient vapor pressure.

3.1 Air VPD

\( VPD_{\mathrm{air}}(T,RH) = e_s(T)\,\Bigl(1 - \dfrac{RH}{100}\Bigr) \)   [kPa]

3.2 Leaf VPD (with leaf–air ΔT)

When a leaf is warmer than the air by \(\Delta T\), the app models the evaporative demand at the leaf surface as:

\( VPD_{\ell}(T, \Delta T, RH) = e_s(T+\Delta T) - \dfrac{RH}{100}\,e_s(T) \)   [kPa]

This assumes (i) leaf surface is near saturation at \(T_\ell\), (ii) ambient vapor pressure is governed by air \(T\) and \(RH\). It captures the first-order effect used in plant microclimate literature (e.g., Monteith & Unsworth; Jones). In high-advection or boundary-layer-limited regimes, canopy models may add aerodynamic resistances; the app intentionally uses the simpler diagnostic definition for speed and clarity in grow-room use.

4) Dew Point and Absolute Humidity

4.1 Dew point (August–Roche–Magnus form)

With \( a = 17.27 \) and \( b = 237.3^\circ\mathrm{C} \) (Alduchov & Eskridge, 1996/FAO-style), define \( \gamma(T,RH) = \ln(RH/100) + \dfrac{aT}{b+T} \).

\( T_d = \dfrac{b\,\gamma(T,RH)}{a - \gamma(T,RH)} \)   [°C]

4.2 Absolute humidity

Using ideal-gas relationships with \(R_d/R_v \approx 0.622\) leads to a convenient engineering form for absolute humidity (mass concentration of water vapor):

\( \rho_v = 216.7 \, \dfrac{e\;[\mathrm{hPa}]}{T\;[\mathrm{K}]} \)   [g m\(^{-3}\)]

Here \(e\) is vapor pressure in hPa (1 kPa = 10 hPa) and \(T\) is absolute temperature in Kelvin. The constant 216.7 follows from the universal gas constant and molecular weights (WMO/ASHRAE tables).

5) Station Pressure vs Altitude

For convenience, the app computes an approximate station pressure from altitude using the US Standard Atmosphere barometric formula:

\( P(h) = 101.325 \,\Bigl(1 - 2.25577\times10^{-5}\,h\Bigr)^{5.2559} \)   [kPa]

This is used for pressure-aware psychrometric displays and (optionally) to explore sensitivity. Note: in classical thermodynamics, the saturation vapor pressure over a plane water surface is primarily a function of temperature, with only minor dependence on total pressure over the altitude range of interest. Some growers prefer a heuristic “pressure scaling” of \(e_s\) for intuition; the app exposes it only as a lightweight approximation and does not claim it is required for VPD computation.

6) Analytic Solvers & Numerics

6.1 Solve RH for a target VPD (fixed T)

From \( VPD = e_s(T)\,(1 - RH/100) \Rightarrow RH = 100\,\bigl(1 - VPD/e_s(T)\bigr) \).

6.2 Solve T for a target VPD (fixed RH)

There is no closed form for \(T\) in the Magnus expression. The app uses a stable bounded search on \(T\in[5,45]^\circ\mathrm{C}\) with a small step for widget responsiveness. A Newton–Raphson variant was profiled but the bounded sweep is more robust on-device and avoids rare divergence at extreme RH.

6.3 Numerics & stability

7) Visualization & Color Mapping

Heatmaps use the perceptually uniform Viridis palette with green near the stage’s “ideal” band midpoint. The app computes a band-relative signed distance \( s = \dfrac{VPD - \text{mid}}{\text{half}} \in [-2,2] \) and maps \(s\) into Viridis parameter \(t\) such that \(t\approx 0.72\) (green) at \(s=0\), shifting toward indigo (\(s\ll0\), humid) and yellow (\(s\gg0\), dry).

The heatmap image is pre-rendered to an off-screen RGBA buffer once per size/altitude bucket and stage (not every frame). Isolines (every 0.2 kPa) and the cursor halo are vector overlays, which are cheap to redraw.

Why Viridis? Unlike “rainbow” maps, Viridis is near-perceptually-uniform in lightness and color, improves readability for color-vision-deficient users, and preserves ordinal structure (van der Walt & Smith, 2015).

8) Validation Strategy

9) Limits, Uncertainties & Notes

10) Code Mapping (traceability)

ConceptEquationCode
Saturation vapor pressure\(e_s(T)=0.6108\exp(\frac{17.27T}{T+237.3})\)VPDCalc.svp_kPa(T)
Station pressure from altitude\(P(h)=101.325(1-2.25577\cdot10^{-5}h)^{5.2559}\)VPDCalc.pressureFromAltitude_kPa(h)
Air VPD\(e_s(T)(1-RH/100)\)VPDCalc.vpdAir_kPa(T,RH,alt)
Leaf VPD\(e_s(T+\Delta T) - (RH/100)e_s(T)\)VPDCalc.vpdLeaf_kPa(T,RH,ΔT,alt)
Dew point\(T_d=\frac{b\gamma}{a-\gamma}\)VPDCalc.dewPointC(T,RH)
Absolute humidity\(\rho_v=216.7\,e[\mathrm{hPa}]/(T[\mathrm{K}])\)VPDCalc.absoluteHumidity_gm3(T,RH)
Solve RH for target VPD\(RH=100(1-\mathrm{VPD}/e_s(T))\)VPDCalc.solveRH_for(...)
Solve T for target VPDbounded search on \(T\)VPDCalc.solveTemp_for(...)
Isoline plotting\(RH(T)\) inversion per target VPDVPDChart.drawIsolines(...)
Viridis mappingband-relative \(s\mapsto t\)viridisVec/viridisCenteredVec

11) References (annotated)