Wet-Bulb Temperature Calculator

Wet-bul temperature (°C):
-
Reference: Wet-bul temperature is computed using Davies–Jones (2008).
Davies–Jones, R. (2008). An Efficient and Accurate Method for Computing the Wet-Bulb Temperature along Pseudoadiabats.
Monthly Weather Review, 136(7), 2764–2785
import numpy as np from pyscript import when from js import document def TD(RH, TK): GC = 461.5 GCX = GC / (1000.0 * 4.186) LHV = (597.3 - 0.57 * (TK - 273.0)) / GCX TDK = TK * LHV / (LHV - TK * np.log(RH * 0.01)) return TDK def TW(tkk, tds, ps): svp1 = 6.112 svp2 = 17.67 svp3 = 29.65 svp4 = 243.5 ep2 = 0.622 A = 2675.0 C = 273.15 po = 1000.0 lam = 3.504 TK = tkk TC = TK - C TD = tds TDC = TD - C p = ps / 100.0 U = np.exp((svp2 * TDC) / (svp4 + TDC)) / np.exp((svp2 * TC) / (TC + svp4)) es = svp1 * np.exp(svp2 * TC / (TC + svp4)) if TK > C else svp1 * np.exp(22.514 - 6150.0 / TK) e = U * es TL = 1.0 / (1.0 / (TD - 56.0) + np.log(TK / TD) / 800.0) + 56.0 r = ep2 * e / (p - e) THDL = TK * (po / (p - e))**0.2854 * (TK / TL)**(0.28 * r) THE = THDL * np.exp((3036.0 / TL - 1.78) * r * (1.0 + 0.448 * r)) pi = (p / po)**(1.0 / lam) TE = THE * pi es_te = svp1 * np.exp(svp2 * (TE - C) / (TE - svp3)) if TE > C else svp1 * np.exp(22.514 - 6150.0 / TE) rs_te = ep2 * es_te / (p - es_te) k1_pi = -38.5 * pi**2 + 137.81 * pi - 53.737 k2_pi = -4.392 * pi**2 + 56.831 * pi - 0.384 cote = (C / TE)**lam D_pi = 1.0 / (0.1859 * pi / po + 0.6512) if cote > D_pi: d_este = svp2 * svp4 / (TE - C + svp4)**2 TW = TE - C - A * rs_te / (1.0 + A * rs_te * d_este) elif 1.0 <= cote <= D_pi: TW = k1_pi - k2_pi * cote elif 0.4 <= cote < 1.0: TW = (k1_pi - 1.21) - (k2_pi - 1.21) * cote else: TW = (k1_pi - 2.66) - (k2_pi - 1.21) * cote + 0.58 / cote return TW @when("click", "#calc-btn") def calTW(event): try: TKK = float(document.getElementById("T2").value) + 273.15 RH = float(document.getElementById("R2").value) TDK = TD(RH, TKK) TWC = TW(TKK, TDK, 101300) document.getElementById("output").innerText = f"{TWC:.1f}" except Exception: document.getElementById("output").innerText = "Invalid input." packages = ["numpy"]