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"
:ns-exclude-regex [#"beowulf\.gendoc" #"beowulf\.scratch"]}
:codox {:metadata {:doc "**TODO**: write docs"

View file

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

View file

@ -27,15 +27,16 @@
(deftest resolution-test
(testing "resolution")
(let [expected {:absolute-humidity 3953.618101887827,
:pressure-pascals 101325,
:temperature-celsius 35,
:actual-vapour-pressure 4765.10094206357,
:dew-point-celsius 35.00000000000001,
:pressure-millibars 1013.25,
:volume 1.1281347245103424,
:temperature-kelvin 308.15,
:pressure-pascals 101325,
:relative-humidity 100,
: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}
actual (resolution packet)]
(is (= actual expected))))

View file

@ -28,7 +28,7 @@
(let [expected 13.7
temperature 20
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))
(is (< (abs (- expected actual)) 0.001))))
@ -37,7 +37,7 @@
max-expected 33
temperature 37
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))
(is (< min-expected actual max-expected)))
@ -45,7 +45,7 @@
max-expected 36
temperature 39.7
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))
(is (< min-expected actual max-expected)))
@ -53,7 +53,7 @@
max-expected 34
temperature 40
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))
(is (< min-expected actual max-expected)))
@ -61,6 +61,6 @@
max-expected 35
temperature 51
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))
(is (< min-expected actual max-expected)))))