Initial release.

Computes:

1. :absolute-humidity
2. :actual-vapour-pressure
3. :dew-point-celsius
4. :pressure-millibars
5. :pressure-pascals
6. :relative-humidity
7. :saturation-vapour-pressure
8. :temperature-celsius
9. :temperature-kelvin
10. :volume
11. :wet-bulb-temperature
This commit is contained in:
Simon Brooke 2026-08-12 14:18:43 +01:00
parent 970a320a84
commit 0e7ecdbb7b
5 changed files with 38 additions and 23 deletions

15
CHANGELOG.md Normal file
View file

@ -0,0 +1,15 @@
# humidity: Change Log
## Releae 0.1.0 12<sup>th</sup> August 2026
Initial release.
Computes:
1. :absolute-humidity
2. :actual-vapour-pressure
3. :dew-point-celsius
4. :pressure-millibars
5. :pressure-pascals
6. :relative-humidity
7. :saturation-vapour-pressure :temperature-celsius :temperature-kelvin :volume

View file

@ -1,4 +1,4 @@
(defproject humidity "0.1.0-SNAPSHOT" (defproject humidity "0.1.0"
:cloverage {:output "docs/cloverage" :cloverage {:output "docs/cloverage"
:ns-exclude-regex [#"beowulf\.gendoc" #"beowulf\.scratch"]} :ns-exclude-regex [#"beowulf\.gendoc" #"beowulf\.scratch"]}
:codox {:metadata {:doc "**TODO**: write docs" :codox {:metadata {:doc "**TODO**: write docs"

View file

@ -1,7 +1,7 @@
(ns ^{:doc "Function to calculate wet bulb temperature (in &deg; C) given temperature in (ns ^{:doc "Function to calculate wet bulb temperature (in &deg; C) given temperature in
&deg; C and relative-humidity percentage (0...100)" &deg; C and relative-humidity percentage (0...100)"
:author "simon"} :author "simon"}
humidity.wet-bulb humidity.wet-bulb
(:require [clojure.math :refer [atan]] (:require [clojure.math :refer [atan]]
[humidity.utils :refer [expt]])) [humidity.utils :refer [expt]]))
@ -25,7 +25,6 @@
;;; USA. ;;; USA.
;;; ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(def ^:const magic-numbers (def ^:const magic-numbers
"The magic numbers (empirical constants) from the derived expression. It "The magic numbers (empirical constants) from the derived expression. It
bothers me that all these formulae depend on 'empirical constants', *and* bothers me that all these formulae depend on 'empirical constants', *and*
@ -38,13 +37,13 @@
(defn wet-bulb-temperature (defn wet-bulb-temperature
"Returns wet bulb temperature (in &deg; C) given this `temperature` in "Returns wet bulb temperature (in &deg; C) given this `temperature` in
&deg; C and `relative-humidity` percentage (0...100)" &deg; C and `relative-humidity` percentage (0...100)"
[&{:keys [temperature relative-humidity]}] [& {:keys [temperature-celsius relative-humidity]}]
(when (when
(and temperature relative-humidity) (and temperature-celsius relative-humidity)
(let [T temperature (let [T temperature-celsius
RHP relative-humidity] RHP relative-humidity]
(+ (* T (atan (* (C 1) (expt (+ RHP (C 2)) 1/2)))) (+ (* T (atan (* (C 1) (expt (+ RHP (C 2)) 1/2))))
(atan (+ T RHP)) (atan (+ T RHP))
(- 0 (atan (- RHP (C 3)))) (- 0 (atan (- RHP (C 3))))
(* (C 4) (expt RHP 3/2) (atan (* (C 5) RHP))) (* (C 4) (expt RHP 3/2) (atan (* (C 5) RHP)))
(- 0 (C 6)))))) (- 0 (C 6))))))

View file

@ -27,15 +27,16 @@
(deftest resolution-test (deftest resolution-test
(testing "resolution") (testing "resolution")
(let [expected {:absolute-humidity 3953.618101887827, (let [expected {:absolute-humidity 3953.618101887827,
:pressure-pascals 101325, :actual-vapour-pressure 4765.10094206357,
:temperature-celsius 35,
:dew-point-celsius 35.00000000000001, :dew-point-celsius 35.00000000000001,
:pressure-millibars 1013.25, :pressure-millibars 1013.25,
:volume 1.1281347245103424, :pressure-pascals 101325,
:temperature-kelvin 308.15,
:relative-humidity 100, :relative-humidity 100,
:saturation-vapour-pressure 5622.488734516426, :saturation-vapour-pressure 5622.488734516426,
:actual-vapour-pressure 4765.10094206357} :temperature-celsius 35,
:temperature-kelvin 308.15,
:volume 1.1281347245103424,
:wet-bulb-temperature 35.11625928298915}
packet {:relative-humidity 100 :temperature-celsius 35} packet {:relative-humidity 100 :temperature-celsius 35}
actual (resolution packet)] actual (resolution packet)]
(is (= actual expected)))) (is (= actual expected))))

View file

@ -28,7 +28,7 @@
(let [expected 13.7 (let [expected 13.7
temperature 20 temperature 20
rel-humidity 50 rel-humidity 50
actual (wet-bulb-temperature :temperature temperature :relative-humidity rel-humidity)] actual (wet-bulb-temperature :temperature-celsius temperature :relative-humidity rel-humidity)]
(println (format "Expected: %s; actual: %s" expected actual)) (println (format "Expected: %s; actual: %s" expected actual))
(is (< (abs (- expected actual)) 0.001)))) (is (< (abs (- expected actual)) 0.001))))
@ -37,7 +37,7 @@
max-expected 33 max-expected 33
temperature 37 temperature 37
rel-humidity 70 rel-humidity 70
actual (wet-bulb-temperature :temperature temperature :relative-humidity rel-humidity)] actual (wet-bulb-temperature :temperature-celsius temperature :relative-humidity rel-humidity)]
(println (format "Expected: %s...%s; actual: %s" min-expected max-expected actual)) (println (format "Expected: %s...%s; actual: %s" min-expected max-expected actual))
(is (< min-expected actual max-expected))) (is (< min-expected actual max-expected)))
@ -45,7 +45,7 @@
max-expected 36 max-expected 36
temperature 39.7 temperature 39.7
rel-humidity 70 rel-humidity 70
actual (wet-bulb-temperature :temperature temperature :relative-humidity rel-humidity)] actual (wet-bulb-temperature :temperature-celsius temperature :relative-humidity rel-humidity)]
(println (format "Expected: %s...%s; actual: %s" min-expected max-expected actual)) (println (format "Expected: %s...%s; actual: %s" min-expected max-expected actual))
(is (< min-expected actual max-expected))) (is (< min-expected actual max-expected)))
@ -53,7 +53,7 @@
max-expected 34 max-expected 34
temperature 40 temperature 40
rel-humidity 60 rel-humidity 60
actual (wet-bulb-temperature :temperature temperature :relative-humidity rel-humidity)] actual (wet-bulb-temperature :temperature-celsius temperature :relative-humidity rel-humidity)]
(println (format "Expected: %s...%s; actual: %s" min-expected max-expected actual)) (println (format "Expected: %s...%s; actual: %s" min-expected max-expected actual))
(is (< min-expected actual max-expected))) (is (< min-expected actual max-expected)))
@ -61,6 +61,6 @@
max-expected 35 max-expected 35
temperature 51 temperature 51
rel-humidity 30 rel-humidity 30
actual (wet-bulb-temperature :temperature temperature :relative-humidity rel-humidity)] actual (wet-bulb-temperature :temperature-celsius temperature :relative-humidity rel-humidity)]
(println (format "Expected: %s...%s; actual: %s" min-expected max-expected actual)) (println (format "Expected: %s...%s; actual: %s" min-expected max-expected actual))
(is (< min-expected actual max-expected))))) (is (< min-expected actual max-expected)))))