]>
zdv2.bktei.com Git - BK-2020-03.git/blob - unitproc/python/bkt-humidity
   2 # Desc: Humidity conversion functions from EVA-2020-02-2 
   3 # Ref/Attrib: https://gitlab.com/baltakatei/ninfacyzga-01 
   5 def rel_to_abs(T
,P
,RH
): 
   6     """Returns absolute humidity given relative humidity. 
  11         Absolute temperature in units Kelvin (K). 
  13         Total pressure in units Pascals (Pa). 
  15         Relative humidity in units percent (%). 
  19     absolute_humidity : float 
  20         Absolute humidity in units [kg water vapor / kg dry air]. 
  24     1. Sonntag, D. "Advancements in the field of hygrometry". 1994. https://doi.org/10.1127/metz/3/1994/51 
  25     2. Green, D. "Perry's Chemical Engineers' Handbook" (8th Edition). Page "12-4". McGraw-Hill Professional Publishing. 2007. 
  28     Author: Steven Baltakatei Sandoval 
  40     # print('DEBUG:Input Temperature   (K)  :' + str(T)); 
  41     # print('DEBUG:Input Pressure      (Pa) :' + str(P)); 
  42     # print('DEBUG:Input Rel. Humidity (%)  :' + str(RH)); 
  44     # Set constants and initial conversions 
  45     epsilon 
= 0.62198 # (molar mass of water vapor) / (molar mass of dry air) 
  46     t 
= T 
- 273.15; # Celsius from Kelvin 
  47     P_hpa 
= P 
/ 100; # hectoPascals (hPa) from Pascals (Pa) 
  49     # Calculate e_w(T), saturation vapor pressure of water in a pure phase, in Pascals 
  50     ln_e_w 
= -6096*T
**-1 + 21.2409642 - 2.711193*10**-2*T 
+ 1.673952*10**-5*T
**2 + 2.433502*math
.log(T
); # Sonntag-1994 eq 7; e_w in Pascals 
  51     e_w 
= math
.exp(ln_e_w
); 
  52     e_w_hpa 
= e_w 
/ 100; # also save e_w in hectoPascals (hPa) 
  53     # print('DEBUG:ln_e_w:' + str(ln_e_w)); # debug 
  54     # print('DEBUG:e_w:' + str(e_w)); # debug 
  56     # Calculate f_w(P,T), enhancement factor for water 
  57     f_w 
= 1 + (10**-4*e_w_hpa
)/(273 + t
)*(((38 + 173*math
.exp(-t
/43))*(1 - (e_w_hpa 
/ P_hpa
))) + ((6.39 + 4.28*math
.exp(-t 
/ 107))*((P_hpa 
/ e_w_hpa
) - 1))); # Sonntag-1994 eq 22. 
  58     # print('DEBUG:f_w:' + str(f_w)); # debug 
  60     # Calculate e_prime_w(P,T), saturation vapor pressure of water in air-water mixture, in Pascals 
  61     e_prime_w 
= f_w 
* e_w
; # Sonntag-1994 eq 18 
  62     # print('DEBUG:e_prime_w:' + str(e_prime_w)); # debug 
  64     # Calculate e_prime, vapor pressure of water in air, in Pascals 
  65     e_prime 
= (RH 
/ 100) * e_prime_w
; 
  66     # print('DEBUG:e_prime:' + str(e_prime)); # debug 
  68     # Calculate r, the absolute humidity, in [kg water vapor / kg dry air] 
  69     r 
= (epsilon 
* e_prime
) / (P 
- e_prime
); 
  70     # print('DEBUG:r:' + str(r)); # debug 
  74 def rel_to_dpt(T
,P
,RH
): 
  75     """Returns dew point temperature given relative humidity. 
  80         Absolute temperature in units Kelvin (K). 
  82         Total pressure in units Pascals (Pa). 
  84         Relative humidity in units percent (%). 
  89         Dew point temperature in units Kelvin (K). 
  93     1. Sonntag, D. "Advancements in the field of hygrometry". 1994. https://doi.org/10.1127/metz/3/1994/51 
  94     2. Green, D. "Perry's Chemical Engineers' Handbook" (8th Edition). Page "12-4". McGraw-Hill Professional Publishing. 2007. 
  97     Author: Steven Baltakatei Sandoval 
 109     # print('DEBUG:Input Temperature   (K)  :' + str(T)); 
 110     # print('DEBUG:Input Pressure      (Pa) :' + str(P)); 
 111     # print('DEBUG:Input Rel. Humidity (%)  :' + str(RH)); 
 113     # Set constants and initial conversions 
 114     epsilon 
= 0.62198 # (molar mass of water vapor) / (molar mass of dry air) 
 115     t 
= T 
- 273.15; # Celsius from Kelvin 
 116     P_hpa 
= P 
/ 100; # hectoPascals (hPa) from Pascals (Pa) 
 118     # Calculate e_w(T), saturation vapor pressure of water in a pure phase, in Pascals 
 119     ln_e_w 
= -6096*T
**-1 + 21.2409642 - 2.711193*10**-2*T 
+ 1.673952*10**-5*T
**2 + 2.433502*math
.log(T
); # Sonntag-1994 eq 7; e_w in Pascals 
 120     e_w 
= math
.exp(ln_e_w
); 
 121     e_w_hpa 
= e_w 
/ 100; # also save e_w in hectoPascals (hPa) 
 122     # print('DEBUG:ln_e_w:' + str(ln_e_w)); # debug 
 123     # print('DEBUG:e_w:' + str(e_w)); # debug 
 125     # Calculate f_w(P,T), enhancement factor for water 
 126     f_w 
= 1 + (10**-4*e_w_hpa
)/(273 + t
)*(((38 + 173*math
.exp(-t
/43))*(1 - (e_w_hpa 
/ P_hpa
))) + ((6.39 + 4.28*math
.exp(-t 
/ 107))*((P_hpa 
/ e_w_hpa
) - 1))); # Sonntag-1994 eq 22. 
 127     # print('DEBUG:f_w:' + str(f_w)); # debug 
 129     # Calculate e_prime_w(P,T), saturation vapor pressure of water in air-water mixture, in Pascals 
 130     e_prime_w 
= f_w 
* e_w
; # Sonntag-1994 eq 18 
 131     # print('DEBUG:e_prime_w:' + str(e_prime_w)); # debug 
 133     # Calculate e_prime, vapor pressure of water in air, in Pascals 
 134     e_prime 
= (RH 
/ 100) * e_prime_w
; 
 135     # print('DEBUG:e_prime:' + str(e_prime)); # debug 
 137     n 
= 0; repeat_flag 
= True; 
 138     while repeat_flag 
== True: 
 139         # print('DEBUG:n:' + str(n)); # debug 
 141         # Calculate f_w_td, the enhancement factor for water at dew point temperature. 
 143             f 
= 1.0016 + 3.15*10**-6*P_hpa 
- (0.074 / P_hpa
); # Sonntag-1994 eq 24 
 144             f_w_td 
= f
; # initial approximation 
 146             t_d_prev 
= float(t_d
); # save previous t_d value for later comparison 
 147             f_w_td 
= 1 + (10**-4*e_w_hpa
)/(273 + t_d
)*(((38 + 173*math
.exp(-t_d
/43))*(1 - (e_w_hpa 
/ P_hpa
))) + ((6.39 + 4.28*math
.exp(-t_d 
/ 107))*((P_hpa 
/ e_w_hpa
) - 1))); # Sonntag-1994 eq 22. 
 148         # print('DEBUG:f_w_td:' + str(f_w_td)); # debug 
 150         # Calculate e, the vapor pressure of water in the pure phase, in Pascals 
 151         e 
= (e_prime 
/ f_w_td
); # Sonntag-1994 eq 9 and 20 
 152         # print('DEBUG:e:' + str(e)); # debug 
 154         # Calculate y, an intermediate dew point calculation variable 
 155         y 
= math
.log(e 
/ 611.213); 
 156         # print('DEBUG:y:' + str(y)); # debug 
 158         # Calculate t_d, the dew point temperature in degrees Celsius 
 159         t_d 
= 13.715*y 
+ 8.4262*10**-1*y
**2 + 1.9048*10**-2*y
**3 + 7.8158*10**-3*y
**4;# Sonntag-1994 eq 10 
 160         # print('DEBUG:t_d:' + str(t_d)); # debug 
 167             t_d_diff 
= math
.fabs(t_d 
- t_d_prev
); 
 168             # print('DEBUG:t_d     :' + str(t_d)); # debug 
 169             # print('DEBUG:t_d_prev:' + str(t_d_prev)); # debug 
 170             # print('DEBUG:t_d_diff:' + str(t_d_diff)); # debug 
 176         # Calculate T_d, the dew point temperature in Kelvin 
 178         # print('DEBUG:T_d:' + str(T_d)); # debug 
 181             return T_d
; # good enough 
 183         # update loop counter