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:
parent
970a320a84
commit
0e7ecdbb7b
5 changed files with 38 additions and 23 deletions
15
CHANGELOG.md
Normal file
15
CHANGELOG.md
Normal 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
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
(ns ^{:doc "Function to calculate wet bulb temperature (in ° C) given temperature in
|
(ns ^{:doc "Function to calculate wet bulb temperature (in ° C) given temperature in
|
||||||
° C and relative-humidity percentage (0...100)"
|
° 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 ° C) given this `temperature` in
|
"Returns wet bulb temperature (in ° C) given this `temperature` in
|
||||||
° C and `relative-humidity` percentage (0...100)"
|
° 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))))))
|
||||||
|
|
|
||||||
|
|
@ -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))))
|
||||||
|
|
|
||||||
|
|
@ -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)))))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue