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]]
|
||||
[humidity.constants :refer [celsius-offset Pa]]
|
||||
[humidity.relative :refer [rel-humidity]]
|
||||
[humidity.saturation-vp :as saturation-vp]
|
||||
[humidity.saturation-vp :refer [saturation-vp]]
|
||||
[humidity.utils :refer [?assoc]]
|
||||
[humidity.wet-bulb :refer [wet-bulb-temperature]]))
|
||||
[humidity.wet-bulb :as wb]))
|
||||
|
||||
(defn resolve-humidity
|
||||
"Resolve humidity equations given the data in this packet."
|
||||
[& {:keys [temperature temperature-celsius temperature-kelvin relative-humidity
|
||||
pressure-pascals pressure-millibars saturation-vapour-pressure] :as packet}]
|
||||
[& {:keys [absolute-humidity pressure-pascals pressure-millibars
|
||||
relative-humidity saturation-vapour-pressure temperature
|
||||
temperature-celsius temperature-kelvin wet-bulb-temperature] :as 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
|
||||
: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
|
||||
(and temperature-kelvin (not temperature-celsius))
|
||||
(and temperature-kelvin
|
||||
(not temperature-celsius))
|
||||
(- temperature-kelvin celsius-offset))
|
||||
:temperature-kelvin (when
|
||||
(and temperature-celsius (not temperature-kelvin))
|
||||
(and temperature-celsius
|
||||
(not temperature-kelvin))
|
||||
(+ temperature-celsius celsius-offset))
|
||||
:wet-bulb-temperature (when
|
||||
(and temperature-celsius relative-humidity)
|
||||
(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))))
|
||||
|
||||
:wet-bulb-temperature (when-not wet-bulb-temperature
|
||||
(wb/wet-bulb-temperature packet)))))
|
||||
|
||||
(defn resolution
|
||||
"Repeatedly run `resolve-humidity`, q.v., until we can infer no further
|
||||
information."
|
||||
[packet]
|
||||
[& {:keys [] :as packet}]
|
||||
(loop [p packet]
|
||||
(let [p' (resolve-humidity p)]
|
||||
(if (= (keys p) (keys p')) p
|
||||
|
|
|
|||
|
|
@ -17,11 +17,13 @@
|
|||
(defn wet-bulb-temperature
|
||||
"Returns wet bulb temperature (in ° C) given this `temperature` in
|
||||
° C and `relative-humidity` percentage (0...100)"
|
||||
[temperature relative-humidity]
|
||||
(let [T temperature
|
||||
[&{:keys [temperature relative-humidity]}]
|
||||
(when
|
||||
(and temperature relative-humidity)
|
||||
(let [T temperature
|
||||
RHP relative-humidity]
|
||||
(+ (* T (atan (* (C 1) (expt (+ RHP (C 2)) 1/2))))
|
||||
(atan (+ T RHP))
|
||||
(- 0 (atan (- RHP (C 3))))
|
||||
(* (C 4) (expt RHP 3/2) (atan (* (C 5) RHP)))
|
||||
(- 0 (C 6)))))
|
||||
(- 0 (C 6))))))
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
(let [expected 13.7
|
||||
temperature 20
|
||||
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))
|
||||
(is (< (abs (- expected actual)) 0.001))))
|
||||
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
max-expected 33
|
||||
temperature 37
|
||||
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))
|
||||
(is (< min-expected actual max-expected)))
|
||||
|
||||
|
|
@ -25,7 +25,7 @@
|
|||
max-expected 36
|
||||
temperature 39.7
|
||||
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))
|
||||
(is (< min-expected actual max-expected)))
|
||||
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
max-expected 34
|
||||
temperature 40
|
||||
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))
|
||||
(is (< min-expected actual max-expected)))
|
||||
|
||||
|
|
@ -42,6 +42,6 @@
|
|||
max-expected 35
|
||||
temperature 51
|
||||
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))
|
||||
(is (< min-expected actual max-expected)))))
|
||||
(is (< min-expected actual max-expected)))))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue