Hi,
Does anyone have an Excel-friendly equation they would be willing to share
that can convert Tdb and RH into Twb? We have metered data giving us Tdb,
RH, and Tdp, but we need to know wetbulb. We usually solve this problem
with an Excel psychrometric add-in, but we need to distribute this
spreadsheet to a client and cannot distribute the add-in at the same time.
We've tried a couple of multivariable regressions on the data, but because
it is nonlinear, it is not proving to be that straightforward. Next stop
might be a two-way lookup table, but that is kind of cumbersome and was
hoping to avoid it.
Any help much appreciated.
Sincerely,
Alec Stevens
You should be able to find these routines in the HVAC Toolkit book - sold by
ashrae. I don't have it handy so not sure if you can use the routine
directly in excel - you might need visual basic. I have done this previously
in matlab, C++
-Rohini
?Hi there,
Spreadsheet is attached that does exactly what you want to do. If you
unprotected the sheet you will see how the wb formula is used.
Regards
Dear Alec,
Here is a suite of VBA functions that are tested (except where indicated
otherwise) and have served me well. Most have been tested against the
ASHRAE Psychrometric Chart program and the results compare well. You?ll
have to be the final judge, depending on your accuracy and other needs.
p.s., They?re all IP units-based.
' Version 1.1 09/07/09
' These functions are written in Visual Basic for Excel.
' The routines are approximations based on empirical data as published
' in the ASHRAE document called "Computerized Algorithms for Psychrometric
Approximations".
' Input for all functions require the following units:
'
' ElevInFt = Elevation above sea level, feet
' pvs = vapor pressure at saturation, inches Hg
' pv = vapor pressure, inches Hg
' db = Dry Bulb Temperature, ?F
' wb = Wet Bulb Temperature, ?F
' rh = Relative humidity (0
' RH = Relative Humidity, decimal
' h = Enthalpy, btu/lb
' W = # H2O / # air
' Patm (Atmospheric Pressure) = psia
Function Cp_1(DB)
' Calculate specific heat of air (temp-corrected)
Cp_1 = -2.0921943E-14 * DB ^ 4 + 2.5588383E-11 * DB ^ 3 + 0.000000012900877
* DB ^ 2 + 0.0000058045267 * DB + 0.23955919
End Function
Function Cp_2(DB, W)
' Calculate specific heat of air (temp and moisture-corrected)
Cp_h = Cp_1(DB)
Cp_2 = Cp_h * DB + W * (1061 + 0.444 * DB)
End Function
Function Patm(ElevInFt)
' Calculate Atmospheric pressure (psia) given elevation in ft.
Patm = 14.696 * (1 - 0.0000068753 * ElevInFt) ^ 5.2559
End Function
Function Patm_hg(ElevInFt)
' Calculate Atmospheric pressure (in.Hg) given elevation in ft.
Patm_hg = Patm(ElevInFt) * 2.03602
End Function
Function DBfromW_RH(W, RH, ElevInFt)
' Calculate DB given W, RH, Elevation ASL
' validated 1/8/08 by JVDII
' Calculate Dewpoint (in F) for given W (this is the lowest possible
value for DB)
DB = DewPt2(ElevInFt, W)
P = Patm(ElevInFt)
Do
ps = Pws(DB)
RHtest = W * (P - W * P / (0.62198 + W)) / (0.62198 * ps)
DB = DB + 1
Loop Until RHtest < RH
DB = DB - 1.1
Do
ps = Pws(DB)
RHtest = W * (P - W * P / (0.62198 + W)) / (0.62198 * ps)
DB = DB + 0.1
Loop Until RHtest < RH
DB = DB - 0.1
DBfromW_RH = DB
End Function
Function Twb_h(DB, H, ElevInFt)
' Calculate DB given W, H, Elevation ASL
' Not validated yet.
WBtest = DB
Do
htest = 0.24 * WBtest + (1061 + 0.444 * WBtest) * HumRat3(WBtest,
WBtest, ElevInFt)
WBtest = WBtest - 1
Loop Until htest < H
WBtest = WBtest + 2
Do
htest = 0.24 * WBtest + (1061 + 0.444 * WBtest) * HumRat3(WBtest,
WBtest, ElevInFt)
WBtest = WBtest - 0.1
Loop Until htest < H WBtest = WBtest + 0.1 Twb_h = WBtest End Function Function Twb(DB, W, ElevInFt) ' Calculate WB given DB, W, Elevation ASL ' validated 1/8/08 by JVDII ' Start checking at 70F below DB WBtest = DB - 70 Wtest = 0 P_atm = Patm(ElevInFt) ' This macro uses the "For" structure in combination with the "Do" structure to prevent ' infinite looping when one of the cells used in calculation is undefined. For I = 1 To 70 P_ws = Pws(WBtest) wsat = (P_ws * 0.62198) / (P_atm - P_ws) wnum = (1093 - 0.556 * WBtest) * wsat - 0.24 * (DB - WBtest) wdenom = 1093 + 0.444 * DB - WBtest Wtest = wnum / wdenom If Wtest > W Then GoTo 100
WBtest = WBtest + 1
Next I
100 WBtest = WBtest - 1.1
Do
P_ws = Pws(WBtest)
wsat = (P_ws * 0.62198) / (P_atm - P_ws)
wnum = (1093 - 0.556 * WBtest) * wsat - 0.24 * (DB - WBtest)
wdenom = 1093 + 0.444 * DB - WBtest
Wtest = wnum / wdenom
WBtest = WBtest + 0.1
Loop Until Wtest > W
Twb = WBtest - 0.1
If Twb > DB Then Twb = DB
End Function
Function HumRat(DB6, WB, ElevInFt)
' Calculate Humidity Ratio (W) given DB, WB, Elevation ASL
' validated 1/8/08 by JVDII
wsat = (Pws(WB) * 0.62198) / (Patm(ElevInFt) - Pws(WB))
If WB > 32 Then
HumRat = ((1093 - 0.556 * WB) * wsat - Cp_1(DB6) * (DB6 - WB)) / (1093 +
0.444 * DB6 - WB)
Else
HumRat = ((1061 + 0.444 * WB - (-143.34 + 0.5 * (WB - 32))) * wsat -
Cp_1(DB6) * (DB6 - WB)) / (1061 + 0.444 * WB - (-143.34 + 0.5 * (WB - 32)))
End If
End Function
Function HumRat2(DB, RH, ElevInFt)
' Calculate Humidity Ratio (W) given dry bulb temp, relative humidity,
and elevation
' validated 1/8/08 by JVDII
atm = Patm_hg(ElevInFt)
wsat = Pvs(DB)
wtemp = 0.62198 * wsat / (atm - wsat)
HumRat2 = RH * wtemp
End Function
Function HumRat3(DB, WB, ElevInFt)
' Calculate Humidity Ratio (W) given dry bulb temp, wet bulb temp, and
elevation
' This form is used by the v() function
atm = Patm_hg(ElevInFt)
vp = Pv1(DB, WB, atm)
HumRat3 = 0.62198 * vp / (atm - vp)
End Function
Function Pws(Temp)
' Calculate Pws (psia) given temp in F
' Validated by JVDII
Rt = Temp + 459.67
If Rt > 491.67 Then
Pws = Exp(-10440.4 / Rt - 11.29465 - 0.027022355 * Rt + 0.00001289036 * Rt ^
2 - 0.000000002478068 * Rt ^ 3 + 6.5459673 * Log(Rt))
Else
Pws = Exp(-10214.165 / Rt - 4.8932428 - 0.0053765794 * Rt + 0.00000019202377
* Rt ^ 2 - 3.5575832E-10 * Rt ^ 3 + 9.0344688E-14 * Rt ^ 4 + 4.1635019 *
Log(Rt))
End If
End Function
Function log10(number)
' Calculate the Logarithm of a number to the base 10 (used in Pvs
function)
log10 = Log(number) / Log(10#)
End Function
Function Pvs(DB)
' Calculate vapor pressure (in. Hg) at saturation given dry bulb temp
' (Same as Pws, except uses in. HG for units and is applicable below
32F)
ta = (DB + 459.688) / 1.8
If ta > 273.16 Then
Z = 373.16 / ta
p1 = (Z - 1) * (-7.90298)
p2 = log10(Z) * 5.02808
p3 = ((10 ^ ((1 - (1 / Z)) * 11.344)) - 1) * (-0.00000013816)
p4 = ((10 ^ ((-3.49149) * (Z - 1))) - 1) * 0.0081328
Else
Z = 273.16 / ta
p1 = (-9.09718) * (Z - 1)
p2 = (-3.56654) * log10(Z)
p3 = 0.876793 * (1 - (1 / Z))
p4 = log10(0.0060273)
End If
Pvs = 29.921 * (10 ^ (p1 + p2 + p3 + p4))
End Function
Function Pv1(DB, WB, ElevInFt)
' Calculate Vapor Pressure given dry bulb temp, wet bulb temp, and
elevation
atm = Patm_hg(ElevInFt)
pvp = Pvs(WB)
Ws = (pvp / (atm - pvp)) * 0.62198
If WB <= 32# Then
Pv1 = pvp - 0.0005704 * atm * (DB - WB) / 1.8
Else
hl = 1093.049 + (0.441 * (DB - WB))
ch = 0.24 + (0.441 * Ws)
wh = Ws - (ch * (DB - WB) / hl)
Pv1 = atm * (wh / (0.62198 + wh))
End If
End Function
Function DewPt1(Pv)
' Calculate dew point temp. given Vapor Pressure
y = Log(Pv)
If Pv < 0.18036 Then
DewPt1 = 71.98 + (24.873 * y) + (0.8927 * y ^ 2)
Else
DewPt1 = 79.047 + (30.579 * y) + (1.8893 * y ^ 2)
End If
End Function
Function DewPt2(ElevInFt, W)
' Calculate dewpoint given Patm, Humidity ratio
P = Patm(ElevInFt)
Pw = (P * W) / (0.62198 + W)
alpha = Log(Pw)
DewPt2 = 100.45 + 33.193 * alpha + 2.319 * alpha ^ 2 + 0.17074 * alpha ^ 3 +
1.2063 * (Pw) ^ 0.1984
End Function
Function Enth(DB, WB, ElevInFt)
' Calculate Enthalpy given dry bulb temp, wet bulb temp, and elevation
Enth = (DB * 0.24) + ((1061 + (0.444 * DB)) * (W(DB, WB, ElevInFt)))
End Function
Function Enth2(DB, W)
' Calculate Enthalpy given dry bulb temp, humidity ratio
Enth2 = Cp_1(DB) * DB + W * (1061 + 0.444 * DB)
End Function
Function RH(DB, WB, ElevInFt)
' Doesn't work.........use RH2() until I figure it out
Rt = WB + 459.67
pt = Patm(ElevInFt)
wsat = (Pws(DB) * 0.62198) / (pt - Pws(DB))
wnum = (1093 - 0.556 * WB) * wsat - 0.24 * (DB - WB)
wdenom = 1093 + 0.444 * DB - WB
W_1 = wnum / wdenom
Pw = (W_1 * pt) / (0.62198 + W_1)
Rt = DB + 459.67
ps = Pws(Rt)
pa = pt - Pw
RH = (W_1 * pa) / (0.62198 * ps)
End Function
Function RH2(DB, WB, ElevInFt)
' Calculate relative humidity given dry bulb temp, wet bulb temp, and
elevation
atm = Patm_hg(ElevInFt)
RH2 = Pv1(DB, WB, ElevInFt) / Pvs(DB)
End Function
Function v(DB, WB, ElevInFt)
' Calculate Specific Volume given dry bulb temp, wet bulb temp, and
elevation
atm = Patm_hg(ElevInFt)
v = (0.754 * (DB + 459.7) * (1 + (7000 * HumRat3(DB, WB, ElevInFt) /
4360))) / atm
End Function
James V. Dirkes II, P.E., LEED AP
Alec,
ASHRAE also has wetbulb formula in the spreadsheets that come with the ASHRAE RP865 final report, which are being incorporated into Standard 140.
Jeff S. Haberl, Ph.D.,P.E., FASHRAE
Alec:
In the past, I wrote two programs in Turbo Pascal that calculates
thermal properties of moist air based on ASHRAE equations. They are
called PSY and PSY2. PSY2 takes values of Dry-bulb and Relative
Humidity under a particular pressure condition (in.Hg) and returns all
properties of that air including Relative Humidity.
I will attempt to send this PSY2.exe file but our university email
system blocks any .exe files from being sent over their system. So I
will remove the .exe from the file and you can re-name it later. You
can also try to unzip the attached PSY2.exe file.
If it doesn't work, let me know, and I will send it through other email
accounts to you directly. You may also try to download it from my
website: http://houseenergydoctor.arizona.edu
Nader V. Chalfoun, Ph.D., LEED AP, CEA
Dear Jeff,
Where might one find this report and the spreadsheets? I searched the
ASHRAE Web site for RP865 and came up empty.
James V. Dirkes II, P.E., LEED AP