Regularised the calling signature of the calculator functions.
This commit is contained in:
parent
37689df3e2
commit
91343b9c10
3 changed files with 38 additions and 30 deletions
|
|
@ -2,41 +2,47 @@
|
||||||
(:require [humidity.absolute :refer [abs-humidity]]
|
(:require [humidity.absolute :refer [abs-humidity]]
|
||||||
[humidity.constants :refer [celsius-offset Pa]]
|
[humidity.constants :refer [celsius-offset Pa]]
|
||||||
[humidity.relative :refer [rel-humidity]]
|
[humidity.relative :refer [rel-humidity]]
|
||||||
[humidity.saturation-vp :as saturation-vp]
|
[humidity.saturation-vp :refer [saturation-vp]]
|
||||||
[humidity.utils :refer [?assoc]]
|
[humidity.utils :refer [?assoc]]
|
||||||
[humidity.wet-bulb :refer [wet-bulb-temperature]]))
|
[humidity.wet-bulb :as wb]))
|
||||||
|
|
||||||
(defn resolve-humidity
|
(defn resolve-humidity
|
||||||
"Resolve humidity equations given the data in this packet."
|
"Resolve humidity equations given the data in this packet."
|
||||||
[& {:keys [temperature temperature-celsius temperature-kelvin relative-humidity
|
[& {:keys [absolute-humidity pressure-pascals pressure-millibars
|
||||||
pressure-pascals pressure-millibars saturation-vapour-pressure] :as packet}]
|
relative-humidity saturation-vapour-pressure temperature
|
||||||
|
temperature-celsius temperature-kelvin wet-bulb-temperature] :as packet}]
|
||||||
(println packet)
|
(println packet)
|
||||||
(if temperature (resolve-humidity (assoc (dissoc packet :temperature) :temperature-celsius temperature))
|
(if temperature (resolve-humidity
|
||||||
|
(assoc (dissoc packet :temperature)
|
||||||
|
:temperature-celsius temperature))
|
||||||
(?assoc packet
|
(?assoc packet
|
||||||
|
:absolute-humidity (when-not absolute-humidity
|
||||||
|
(abs-humidity packet))
|
||||||
|
:pressure-pascals (when-not pressure-pascals
|
||||||
|
(if pressure-millibars
|
||||||
|
(* pressure-millibars 100) Pa))
|
||||||
|
:pressure-millibars (when-not pressure-millibars
|
||||||
|
(if pressure-pascals
|
||||||
|
(/ pressure-pascals 100) (/ Pa 100)))
|
||||||
|
:relative-humidity (when-not relative-humidity
|
||||||
|
(rel-humidity packet))
|
||||||
|
:saturation-vapour-pressure (when-not saturation-vapour-pressure
|
||||||
|
(saturation-vp packet))
|
||||||
:temperature-celsius (when
|
:temperature-celsius (when
|
||||||
(and temperature-kelvin (not temperature-celsius))
|
(and temperature-kelvin
|
||||||
|
(not temperature-celsius))
|
||||||
(- temperature-kelvin celsius-offset))
|
(- temperature-kelvin celsius-offset))
|
||||||
:temperature-kelvin (when
|
:temperature-kelvin (when
|
||||||
(and temperature-celsius (not temperature-kelvin))
|
(and temperature-celsius
|
||||||
|
(not temperature-kelvin))
|
||||||
(+ temperature-celsius celsius-offset))
|
(+ temperature-celsius celsius-offset))
|
||||||
:wet-bulb-temperature (when
|
:wet-bulb-temperature (when-not wet-bulb-temperature
|
||||||
(and temperature-celsius relative-humidity)
|
(wb/wet-bulb-temperature packet)))))
|
||||||
(wet-bulb-temperature temperature-celsius relative-humidity))
|
|
||||||
:absolute-humidity (abs-humidity :relative-humidity relative-humidity
|
|
||||||
:saturation-vapour-pressure saturation-vapour-pressure
|
|
||||||
:temperature-kelvin temperature-kelvin)
|
|
||||||
:pressure-pascals (when-not pressure-pascals
|
|
||||||
(if pressure-millibars (* pressure-millibars 100) Pa))
|
|
||||||
:pressure-millibars (when-not pressure-millibars
|
|
||||||
(if pressure-pascals (/ pressure-pascals 100) (/ Pa 100)))
|
|
||||||
:relative-humidity (when-not relative-humidity (rel-humidity packet))
|
|
||||||
:saturation-vapour-pressure (saturation-vp/saturation-vp packet))))
|
|
||||||
|
|
||||||
|
|
||||||
(defn resolution
|
(defn resolution
|
||||||
"Repeatedly run `resolve-humidity`, q.v., until we can infer no further
|
"Repeatedly run `resolve-humidity`, q.v., until we can infer no further
|
||||||
information."
|
information."
|
||||||
[packet]
|
[& {:keys [] :as packet}]
|
||||||
(loop [p packet]
|
(loop [p packet]
|
||||||
(let [p' (resolve-humidity p)]
|
(let [p' (resolve-humidity p)]
|
||||||
(if (= (keys p) (keys p')) p
|
(if (= (keys p) (keys p')) p
|
||||||
|
|
|
||||||
|
|
@ -17,11 +17,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)"
|
||||||
[temperature relative-humidity]
|
[&{:keys [temperature relative-humidity]}]
|
||||||
|
(when
|
||||||
|
(and temperature relative-humidity)
|
||||||
(let [T temperature
|
(let [T temperature
|
||||||
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))))))
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
(let [expected 13.7
|
(let [expected 13.7
|
||||||
temperature 20
|
temperature 20
|
||||||
rel-humidity 50
|
rel-humidity 50
|
||||||
actual (wet-bulb-temperature temperature rel-humidity)]
|
actual (wet-bulb-temperature :temperature 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))))
|
||||||
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
max-expected 33
|
max-expected 33
|
||||||
temperature 37
|
temperature 37
|
||||||
rel-humidity 70
|
rel-humidity 70
|
||||||
actual (wet-bulb-temperature temperature rel-humidity)]
|
actual (wet-bulb-temperature :temperature 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)))
|
||||||
|
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
max-expected 36
|
max-expected 36
|
||||||
temperature 39.7
|
temperature 39.7
|
||||||
rel-humidity 70
|
rel-humidity 70
|
||||||
actual (wet-bulb-temperature temperature rel-humidity)]
|
actual (wet-bulb-temperature :temperature 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)))
|
||||||
|
|
||||||
|
|
@ -34,7 +34,7 @@
|
||||||
max-expected 34
|
max-expected 34
|
||||||
temperature 40
|
temperature 40
|
||||||
rel-humidity 60
|
rel-humidity 60
|
||||||
actual (wet-bulb-temperature temperature rel-humidity)]
|
actual (wet-bulb-temperature :temperature 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)))
|
||||||
|
|
||||||
|
|
@ -42,6 +42,6 @@
|
||||||
max-expected 35
|
max-expected 35
|
||||||
temperature 51
|
temperature 51
|
||||||
rel-humidity 30
|
rel-humidity 30
|
||||||
actual (wet-bulb-temperature temperature rel-humidity)]
|
actual (wet-bulb-temperature :temperature 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