-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpsychrometrics.h
438 lines (386 loc) · 20.1 KB
/
psychrometrics.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
// This psychrometrics package is used to demonstrate psychrometric calculations.
// It contains C functions to calculate dew point temperature, wet bulb temperature,
// relative humidity, humidity ratio, partial pressure of water vapor, moist air
// enthalpy, moist air volume, specific volume, and degree of saturation, given
// dry bulb temperature and another psychrometric variable. The code also includes
// functions for standard atmosphere calculation.
// The functions implement formulae found in the 2005 ASHRAE Handbook of Fundamentals.
// This version of the library works in SI units.
//
// For a more description of the functions, see Numerical Logics' web site at
// www.numlog.ca/psychrometrics
//
// Numerical Logics Inc. has made every effort to ensure that the code is
// adequate, hower makes no representation with respect to its accuracy. Use at your
// own risk. Should you notice any error, or if you have suggestions on how to
// improve the code, please notifiy Numerical Logics by email (contact info can be
// found at www.numlog.ca).
//
// Copyright © 2011 Numerical Logics Inc., www.numlog.ca
//
//-----------------------------------------------------------------------------
//
// Legal notice
//
// This file is provided for free. You can redistribute it and/or
// modify it under the terms of the GNU General Public
// License as published by the Free Software Foundation
// (version 3 or later).
//
// This source code is distributed in the hope that it will be useful
// but WITHOUT ANY WARRANTY; without even the implied
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE. See the GNU General Public License for more
// details.
//
// You should have received a copy of the GNU General Public License
// along with this code. If not, see <http://www.gnu.org/licenses/>.
//
//-----------------------------------------------------------------------------
//
#ifndef PSYCHROMETRICS_H
#define PSYCHROMETRICS_H
//*****************************************************************************
// Conversions between dew point, wet bulb, and relative humidity
//*****************************************************************************
///////////////////////////////////////////////////////////////////////////////
// Wet-bulb temperature given dry-bulb temperature and dew-point temperature
// ASHRAE Fundamentals (2005) ch. 6
//
double GetTWetBulbFromTDewPoint // (o) Wet bulb temperature [C]
( double TDryBulb // (i) Dry bulb temperature [C]
, double TDewPoint // (i) Dew point temperature [C]
, double Pressure // (i) Atmospheric pressure [Pa]
);
///////////////////////////////////////////////////////////////////////////////
// Wet-bulb temperature given dry-bulb temperature and relative humidity
// ASHRAE Fundamentals (2005) ch. 6
//
double GetTWetBulbFromRelHum // (o) Wet bulb temperature [C]
( double TDryBulb // (i) Dry bulb temperature [C] //
, double RelHum // (i) Relative humidity [0-1] //
, double Pressure // (i) Atmospheric pressure [Pa] //
);
///////////////////////////////////////////////////////////////////////////////
// Relative Humidity given dry-bulb temperature and dew-point temperature
// ASHRAE Fundamentals (2005) ch. 6
//
double GetRelHumFromTDewPoint // (o) Relative humidity [0-1]
( double TDryBulb // (i) Dry bulb temperature [C]
, double TDewPoint // (i) Dew point temperature [C]
);
///////////////////////////////////////////////////////////////////////////////
// Relative Humidity given dry-bulb temperature and wet bulb temperature
// ASHRAE Fundamentals (2005) ch. 6
//
double GetRelHumFromTWetBulb // (o) Relative humidity [0-1]
( double TDryBulb // (i) Dry bulb temperature [C]
, double TWetBulb // (i) Wet bulb temperature [C]
, double Pressure // (i) Atmospheric pressure [Pa]
);
///////////////////////////////////////////////////////////////////////////////
// Dew Point Temperature given dry bulb temperature and relative humidity
// ASHRAE Fundamentals (2005) ch. 6 eqn 24
//
double GetTDewPointFromRelHum // (o) Dew Point temperature [C]
( double TDryBulb // (i) Dry bulb temperature [C]
, double RelHum // (i) Relative humidity [0-1]
);
///////////////////////////////////////////////////////////////////////////////
// Dew Point Temperature given dry bulb temperature and wet bulb temperature
// ASHRAE Fundamentals (2005) ch. 6
//
double GetTDewPointFromTWetBulb // (o) Dew Point temperature [C]
( double TDryBulb // (i) Dry bulb temperature [C]
, double TWetBulb // (i) Wet bulb temperature [C]
, double Pressure // (i) Atmospheric pressure [Pa]
);
//*****************************************************************************
// Conversions between dew point, or relative humidity and vapor pressure
//*****************************************************************************
///////////////////////////////////////////////////////////////////////////////
// Partial pressure of water vapor as a function of relative humidity and
// temperature in C
// ASHRAE Fundamentals (2005) ch. 6, eqn. 24
//
double GetVapPresFromRelHum // (o) Partial pressure of water vapor in moist air [Pa]
( double TDryBulb // (i) Dry bulb temperature [C]
, double RelHum // (i) Relative humidity [0-1]
);
///////////////////////////////////////////////////////////////////////////////
// Relative Humidity given dry bulb temperature and vapor pressure
// ASHRAE Fundamentals (2005) ch. 6, eqn. 24
//
double GetRelHumFromVapPres // (o) Relative humidity [0-1]
( double TDryBulb // (i) Dry bulb temperature [C]
, double VapPres // (i) Partial pressure of water vapor in moist air [Pa]
);
///////////////////////////////////////////////////////////////////////////////
// Dew point temperature given vapor pressure and dry bulb temperature
// ASHRAE Fundamentals (2005) ch. 6, eqn. 37 and 38
//
double GetTDewPointFromVapPres // (o) Dew Point temperature [C]
( double TDryBulb // (i) Dry bulb temperature [C]
, double VapPres // (i) Partial pressure of water vapor in moist air [Pa]
);
///////////////////////////////////////////////////////////////////////////////
// Vapor pressure given dew point temperature
// ASHRAE Fundamentals (2005) ch. 6 eqn. 36
//
double GetVapPresFromTDewPoint // (o) Partial pressure of water vapor in moist air [Pa]
( double TDewPoint // (i) Dew point temperature [C]
);
//*******************************************************************************
// Conversions from wet bulb temperature, dew point temperature,
// or relative humidity to humidity ratio
//*****************************************************************************
///////////////////////////////////////////////////////////////////////////////
// Wet bulb temperature given humidity ratio
// ASHRAE Fundamentals (2005) ch. 6 eqn. 35
//
double GetTWetBulbFromHumRatio // (o) Wet bulb temperature [C]
( double TDryBulb // (i) Dry bulb temperature [C]
, double HumRatio // (i) Humidity ratio [kgH2O/kgAIR]
, double Pressure // (i) Atmospheric pressure [Pa]
);
///////////////////////////////////////////////////////////////////////////////
// Humidity ratio given wet bulb temperature and dry bulb temperature
// ASHRAE Fundamentals (2005) ch. 6 eqn. 35
//
double GetHumRatioFromTWetBulb // (o) Humidity Ratio [kgH2O/kgAIR]
( double TDryBulb // (i) Dry bulb temperature [C]
, double TWetBulb // (i) Wet bulb temperature [C]
, double Pressure // (i) Atmospheric pressure [Pa]
);
///////////////////////////////////////////////////////////////////////////////
// Humidity ratio given relative humidity
// ASHRAE Fundamentals (2005) ch. 6 eqn. 38
//
double GetHumRatioFromRelHum // (o) Humidity Ratio [kgH2O/kgAIR]
( double TDryBulb // (i) Dry bulb temperature [C]
, double RelHum // (i) Relative humidity [0-1]
, double Pressure // (i) Atmospheric pressure [Pa]
);
///////////////////////////////////////////////////////////////////////////////
// Relative humidity given humidity ratio
// ASHRAE Fundamentals (2005) ch. 6
//
double GetRelHumFromHumRatio // (o) Relative humidity [0-1]
( double TDryBulb // (i) Dry bulb temperature [C]
, double HumRatio // (i) Humidity ratio [kgH2O/kgAIR]
, double Pressure // (i) Atmospheric pressure [Pa]
);
///////////////////////////////////////////////////////////////////////////////
// Humidity ratio given dew point temperature and pressure.
// ASHRAE Fundamentals (2005) ch. 6 eqn. 22
//
double GetHumRatioFromTDewPoint // (o) Humidity Ratio [kgH2O/kgAIR]
( double TDewPoint // (i) Dew point temperature [C]
, double Pressure // (i) Atmospheric pressure [Pa]
);
///////////////////////////////////////////////////////////////////////////////
// Dew point temperature given dry bulb temperature, humidity ratio, and pressure
// ASHRAE Fundamentals (2005) ch. 6
//
double GetTDewPointFromHumRatio // (o) Dew Point temperature [C]
( double TDryBulb // (i) Dry bulb temperature [C]
, double HumRatio // (i) Humidity ratio [kgH2O/kgAIR]
, double Pressure // (i) Atmospheric pressure [Pa]
);
//*****************************************************************************
// Conversions between humidity ratio and vapor pressure
//*****************************************************************************
///////////////////////////////////////////////////////////////////////////////
// Humidity ratio given water vapor pressure and atmospheric pressure
// ASHRAE Fundamentals (2005) ch. 6 eqn. 22
//
double GetHumRatioFromVapPres // (o) Humidity Ratio [kgH2O/kgAIR]
( double VapPres // (i) Partial pressure of water vapor in moist air [Pa]
, double Pressure // (i) Atmospheric pressure [Pa]
);
///////////////////////////////////////////////////////////////////////////////
// Vapor pressure given humidity ratio and pressure
// ASHRAE Fundamentals (2005) ch. 6 eqn. 22
//
double GetVapPresFromHumRatio // (o) Partial pressure of water vapor in moist air [Pa]
( double HumRatio // (i) Humidity ratio [kgH2O/kgAIR]
, double Pressure // (i) Atmospheric pressure [Pa]
);
//*****************************************************************************
// Dry Air Calculations
//*****************************************************************************
///////////////////////////////////////////////////////////////////////////////
// Dry air enthalpy given dry bulb temperature.
// ASHRAE Fundamentals (2005) ch. 6 eqn. 30
//
double GetDryAirEnthalpy // (o) Dry air enthalpy [J/kg]
( double TDryBulb // (i) Dry bulb temperature [C]
);
///////////////////////////////////////////////////////////////////////////////
// Dry air density given dry bulb temperature and pressure.
// ASHRAE Fundamentals (2005) ch. 6 eqn. 28
//
double GetDryAirDensity // (o) Dry air density [kg/m3]
( double TDryBulb // (i) Dry bulb temperature [C]
, double Pressure // (i) Atmospheric pressure [Pa]
);
///////////////////////////////////////////////////////////////////////////////
// Dry air volume given dry bulb temperature and pressure.
// ASHRAE Fundamentals (2005) ch. 6 eqn. 28
//
double GetDryAirVolume // (o) Dry air volume [m3/kg]
( double TDryBulb // (i) Dry bulb temperature [C]
, double Pressure // (i) Atmospheric pressure [Pa]
);
//*****************************************************************************
// Saturated Air Calculations
//*****************************************************************************
///////////////////////////////////////////////////////////////////////////////
// Saturation vapor pressure as a function of temperature
// ASHRAE Fundamentals (2005) ch. 6 eqn. 5, 6
//
double GetSatVapPres // (o) Vapor Pressure of saturated air [Pa]
( double TDryBulb // (i) Dry bulb temperature [C]
);
///////////////////////////////////////////////////////////////////////////////
// Humidity ratio of saturated air given dry bulb temperature and pressure.
// ASHRAE Fundamentals (2005) ch. 6 eqn. 23
//
double GetSatHumRatio // (o) Humidity ratio of saturated air [kgH2O/kgAIR]
( double TDryBulb // (i) Dry bulb temperature [C]
, double Pressure // (i) Atmospheric pressure [Pa]
);
///////////////////////////////////////////////////////////////////////////////
// Saturated air enthalpy given dry bulb temperature.
// ASHRAE Fundamentals (2005) ch. 6 eqn. 32
//
double GetSatAirEnthalpy // (o) Saturated air enthalpy [J/kg]
( double TDryBulb // (i) Dry bulb temperature [C]
, double Pressure // (i) Atmospheric pressure [Pa]
);
//*****************************************************************************
// Moist Air Calculations
//*****************************************************************************
///////////////////////////////////////////////////////////////////////////////
// Vapor pressure deficit in Pa given humidity ratio, dry bulb temperature, and
// pressure.
// See Oke (1987) eqn. 2.13a
//
double GetVPD // (o) Vapor pressure deficit [Pa]
( double TDryBulb // (i) Dry bulb temperature [C]
, double HumRatio // (i) Humidity ratio [kgH2O/kgAIR]
, double Pressure // (i) Atmospheric pressure [Pa]
);
///////////////////////////////////////////////////////////////////////////////
// ASHRAE Fundamentals (2005) ch. 6 eqn. 12
//
double GetDegreeOfSaturation // (o) Degree of saturation []
( double TDryBulb // (i) Dry bulb temperature [C]
, double HumRatio // (i) Humidity ratio [kgH2O/kgAIR]
, double Pressure // (i) Atmospheric pressure [Pa]
);
///////////////////////////////////////////////////////////////////////////////
// Moist air enthalpy given dry bulb temperature and humidity ratio
// ASHRAE Fundamentals (2005) ch. 6 eqn. 32
//
double GetMoistAirEnthalpy // (o) Moist Air Enthalpy [J/kg]
( double TDryBulb // (i) Dry bulb temperature [C]
, double HumRatio // (i) Humidity ratio [kgH2O/kgAIR]
);
///////////////////////////////////////////////////////////////////////////////
// Moist air volume given dry bulb temperature, humidity ratio, and pressure.
// ASHRAE Fundamentals (2005) ch. 6 eqn. 28
//
double GetMoistAirVolume // (o) Specific Volume [m3/kg]
( double TDryBulb // (i) Dry bulb temperature [C]
, double HumRatio // (i) Humidity ratio [kgH2O/kgAIR]
, double Pressure // (i) Atmospheric pressure [Pa]
);
///////////////////////////////////////////////////////////////////////////////
// Moist air density given humidity ratio, dry bulb temperature, and pressure
// ASHRAE Fundamentals (2005) ch. 6 6.8 eqn. 11
//
double GetMoistAirDensity // (o) Moist air density [kg/m3]
( double TDryBulb // (i) Dry bulb temperature [C]
, double HumRatio // (i) Humidity ratio [kgH2O/kgAIR]
, double Pressure // (i) Atmospheric pressure [Pa]
);
//*****************************************************************************
// Functions to set all psychrometric values
//*****************************************************************************
void CalcPsychrometricsFromTWetBulb
( double *TDewPoint // (o) Dew point temperature [C]
, double *RelHum // (o) Relative humidity [0-1]
, double *HumRatio // (o) Humidity ratio [kgH2O/kgAIR]
, double *VapPres // (o) Partial pressure of water vapor in moist air [Pa]
, double *MoistAirEnthalpy // (o) Moist air enthalpy [J/kg]
, double *MoistAirVolume // (o) Specific volume [m3/kg]
, double *DegSaturation // (o) Degree of saturation []
, double TDryBulb // (i) Dry bulb temperature [C]
, double Pressure // (i) Atmospheric pressure [Pa]
, double TWetBulb // (i) Wet bulb temperature [C]
);
void CalcPsychrometricsFromTDewPoint
( double *TWetBulb // (o) Wet bulb temperature [C]
, double *RelHum // (o) Relative humidity [0-1]
, double *HumRatio // (o) Humidity ratio [kgH2O/kgAIR]
, double *VapPres // (o) Partial pressure of water vapor in moist air [Pa]
, double *MoistAirEnthalpy // (o) Moist air enthalpy [J/kg]
, double *MoistAirVolume // (o) Specific volume [m3/kg]
, double *DegSaturation // (o) Degree of saturation []
, double TDryBulb // (i) Dry bulb temperature [C]
, double Pressure // (i) Atmospheric pressure [Pa]
, double TDewPoint // (i) Dew point temperature [C]
);
void CalcPsychrometricsFromRelHum
( double *TWetBulb // (o) Wet bulb temperature [C]
, double *TDewPoint // (o) Dew point temperature [C]
, double *HumRatio // (o) Humidity ratio [kgH2O/kgAIR]
, double *VapPres // (o) Partial pressure of water vapor in moist air [Pa]
, double *MoistAirEnthalpy // (o) Moist air enthalpy [J/kg]
, double *MoistAirVolume // (o) Specific volume [m3/kg]
, double *DegSaturation // (o) Degree of saturation []
, double TDryBulb // (i) Dry bulb temperature [C]
, double Pressure // (i) Atmospheric pressure [Pa]
, double RelHum // (i) Relative humidity [0-1]
);
//*****************************************************************************
// Standard atmosphere
//*****************************************************************************
///////////////////////////////////////////////////////////////////////////////
// Standard atmosphere barometric pressure, given the elevation (altitude)
// ASHRAE Fundamentals (2005) ch. 6 eqn. 3
//
double GetStandardAtmPressure // (o) standard atmosphere barometric pressure [Pa]
( double Altitude // (i) altitude [m]
);
///////////////////////////////////////////////////////////////////////////////
// Standard atmosphere temperature, given the elevation (altitude)
// ASHRAE Fundamentals (2005) ch. 6 eqn. 4
//
double GetStandardAtmTemperature // (o) standard atmosphere dry bulb temperature [C]
( double Altitude // (i) altitude [m]
);
///////////////////////////////////////////////////////////////////////////////
// Sea level pressure from observed station pressure
// Note: the standard procedure for the US is to use for TDryBulb the average
// of the current station temperature and the station temperature from 12 hours ago
// Hess SL, Introduction to theoretical meteorology, Holt Rinehart and Winston, NY 1959,
// ch. 6.5; Stull RB, Meteorology for scientists and engineers, 2nd edition,
// Brooks/Cole 2000, ch. 1.
//
double GetSeaLevelPressure // (o) sea level barometric pressure [Pa]
( double StnPressure // (i) observed station pressure [Pa]
, double Altitude // (i) altitude above sea level [m]
, double TDryBulb // (i) dry bulb temperature [°C]
);
///////////////////////////////////////////////////////////////////////////////
// Station pressure from sea level pressure
// This is just the previous function, reversed
//
double GetStationPressure // (o) station pressure [Pa]
( double SeaLevelPressure // (i) sea level barometric pressure [Pa]
, double Altitude // (i) altitude above sea level [m]
, double TDryBulb // (i) dry bulb temperature [°C]
);
#endif