From ccfc47eb79ca0efb6cf671f4accef9b898fb8579 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Tue, 11 Aug 2026 10:41:58 +0100 Subject: [PATCH] Now with (apparently) working absolute humidity --- README.md | 4 +++- src/humidity/core.clj | 20 ++++++-------------- src/humidity/utils.clj | 8 -------- 3 files changed, 9 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 0381bc6..16ee733 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ # humidity -Functions to compute relative humidity, absolute humidity, wet bulb temperature, given pressure and absolute temperature. \ No newline at end of file +Functions to compute relative humidity, absolute humidity, wet bulb +temperature, and other values related to humidity of air, given +partial data diff --git a/src/humidity/core.clj b/src/humidity/core.clj index 893bd93..2f23add 100644 --- a/src/humidity/core.clj +++ b/src/humidity/core.clj @@ -7,8 +7,8 @@ (defn resolve-humidity "Resolve humidity equations given the data in this packet." - [& {:keys [temperature temperature-celsius temperature-kelvin relative-humidity - pressure-kilopascals pressure-millibars] :as packet}] + [& {:keys [temperature temperature-celsius temperature-kelvin relative-humidity + pressure-kilopascals pressure-millibars saturation-pressure] :as packet}] (println packet) (if temperature (resolve-humidity (assoc (dissoc packet :temperature) :temperature-celsius temperature)) (?assoc packet @@ -21,8 +21,9 @@ :wet-bulb-temperature (when (and temperature-celsius relative-humidity) (wet-bulb-temperature temperature-celsius relative-humidity)) - :absolute-humidity (when (and temperature-celsius relative-humidity) - (abs-humidity temperature-celsius relative-humidity)) + :absolute-humidity (abs-humidity :relative-humidity relative-humidity + :saturation-pressure saturation-pressure + :temperature-kelvin temperature-kelvin) :pressure-kilopascals (when-not pressure-kilopascals (if pressure-millibars (/ pressure-millibars 10) 100)) :pressure-millibars (when-not pressure-millibars @@ -30,15 +31,6 @@ :saturation-pressure (saturation-vp/saturation-vp packet)))) -;; the example in the paper gives this as 13.7 -(wet-bulb-temperature 20 50) -;; by definition, this must equal 35 -(wet-bulb-temperature 35 100) -;; from published graphs, I interpolatethis in the range 33...35 -(wet-bulb-temperature 40 70) - -;; (resolve-humidity {:relative-humidity 100 :temperature 35}) - (defn resolution "Repeatedly run `resolve-humidity`, q.v., until we can infer no further information." @@ -46,4 +38,4 @@ (loop [p packet] (let [p' (resolve-humidity p)] (if (= (keys p) (keys p')) p - (recur p'))))) \ No newline at end of file + (recur p'))))) diff --git a/src/humidity/utils.clj b/src/humidity/utils.clj index 1fef5ca..d0a0569 100644 --- a/src/humidity/utils.clj +++ b/src/humidity/utils.clj @@ -1,14 +1,6 @@ (ns ^{:doc "Utility functions for humidity calculation"} humidity.utils (:require [clojure.math :refer [pow]])) -(def ^:const celsius-offset - "Value of 0° Celsius in ° Kelvin" - 273.15) - -(def ^:const e - "Base of natural logarithms" - 2.71828) - (defmacro expt "Clojure.math `pow` function does not allow ratios as exponents;