$INCLUDE "Rapidq.inc"
DECLARE SUB calculate_drha
DECLARE SUB Closemain
DECLARE SUB Dummyproc
DECLARE SUB reset_form
DECLARE SUB save_file
DIM inout_label_Font AS QFONT
inout_label_Font.Name = "MS Sans Serif"
inout_label_Font.Size = 8
inout_label_Font.COLOR = clWindowText
inout_label_Font.AddStyles(fsBold,fsUnderLine)
DIM Label1_Font AS QFONT
Label1_Font.Name = "MS Sans Serif"
Label1_Font.Size = 8
Label1_Font.COLOR = clWindowText
Label1_Font.AddStyles(fsBold)
DIM SaveDialog AS QSAVEDIALOG
SaveDialog.Filter = "Text Files(*.TXT)|*.TXT|All Files(*.*)|*.*"
SaveDialog.FilterIndex = 1
DIM file1 AS QFILESTREAM
DIM a1 AS DOUBLE
DIM a2 AS DOUBLE
DIM a3 AS DOUBLE
DIM a4 AS DOUBLE
DIM a5 AS DOUBLE
DIM a6 AS DOUBLE
DIM acc AS DOUBLE
DIM atm AS DOUBLE
DIM b1 AS DOUBLE
DIM b2 AS DOUBLE
DIM b3 AS DOUBLE
DIM b4 AS DOUBLE
DIM db AS DOUBLE
DIM dp AS DOUBLE
DIM dx AS DOUBLE
DIM elev AS DOUBLE
DIM fmid AS DOUBLE
DIM h AS DOUBLE
DIM j AS DOUBLE
DIM nn AS DOUBLE
DIM p1 AS DOUBLE
DIM p2 AS DOUBLE
DIM p3 AS DOUBLE
DIM p4 AS DOUBLE
DIM psat AS DOUBLE
DIM pvp AS DOUBLE
DIM pvs AS DOUBLE
DIM rh AS DOUBLE
DIM rhpercent AS DOUBLE
DIM rtb AS DOUBLE
DIM savename AS STRING
DIM ta AS DOUBLE
DIM v AS DOUBLE
DIM vp AS DOUBLE
DIM w AS DOUBLE
DIM wb AS DOUBLE
DIM wh AS DOUBLE
DIM ws AS DOUBLE
DIM wsat AS DOUBLE
DIM wstar AS DOUBLE
DIM wtemp AS DOUBLE
DIM xmid AS DOUBLE
DIM y AS DOUBLE
DIM z AS DOUBLE
FUNCTION log10(number AS DOUBLE)AS DOUBLE
log10 = LOG(number) / LOG(10#)
END FUNCTION
FUNCTION psychro_atm(elev AS DOUBLE)AS DOUBLE
DIM el(21)AS DOUBLE, press(21)AS DOUBLE
el(1) = -1000: press(1) = 31.02
el(2) = -500: press(2) = 30.47
el(3) = 0: press(3) = 29.921
el(4) = 500: press(4) = 29.38
el(5) = 1000: press(5) = 28.86
el(6) = 2000: press(6) = 27.82
el(7) = 3000: press(7) = 26.82
el(8) = 4000: press(8) = 25.82
el(9) = 5000: press(9) = 24.9
el(10) = 6000: press(10) = 23.98
el(11) = 7000: press(11) = 23.09
el(12) = 8000: press(12) = 22.22
el(13) = 9000: press(13) = 21.39
el(14) = 10000: press(14) = 20.48
el(15) = 15000: press(15) = 16.89
el(16) = 20000: press(16) = 13.76
el(17) = 30000: press(17) = 8.9
el(18) = 40000: press(18) = 5.56
el(19) = 50000: press(19) = 3.44
el(20) = 60000: press(20) = 2.14
i = 1
WHILE elev > el(i)
i = i + 1
WEND
psychro_atm = press(i)
END FUNCTION
FUNCTION psychro_pvs(temp AS DOUBLE)AS DOUBLE
a1 = -7.90298
a2 = 5.02808
a3 = -0.00000013816
a4 = 11.344
a5 = 0.0081328
a6 = -3.49149
b1 = -9.09718
b2 = -3.56654
b3 = 0.876793
b4 = 0.0060273
ta = (temp + 459.688) / 1.8
IF ta > 273.16 THEN
z = 373.16 / ta
p1 = (z - 1) * a1
p2 = log10(z) * a2
p3 = ((10 ^ ((1 - (1 / z)) * a4)) - 1) * a3
p4 = ((10 ^ (a6 * (z - 1))) - 1) * a5
ELSE
z = 273.16 / ta
p1 = b1 * (z - 1)
p2 = b2 * log10(z)
p3 = b3 * (1 - (1 / z))
p4 = log10(b4)
END IF
psychro_pvs = 29.921 * (10 ^ (p1 + p2 + p3 + p4))
END FUNCTION
FUNCTION psychro_wrh(db AS DOUBLE, rh AS DOUBLE, atm AS DOUBLE)AS DOUBLE
wsat = psychro_pvs(db)
wtemp = 0.62198 * (wsat / (atm - wsat))
psychro_wrh = rh * wtemp
END FUNCTION
FUNCTION psychro_h_w(db AS DOUBLE, w AS DOUBLE)AS DOUBLE
psychro_h_w = (db * 0.24) + (1061 + (0.444 * db))* w
END FUNCTION
FUNCTION psychro_dp(pvp AS DOUBLE) AS DOUBLE
nn=pvp*0.491154
y = LOG(nn)
IF pvp < 0.18036 THEN
psychro_dp = 90.12 + (26.142 * y) + (0.8927 * y * y)
ELSE
psychro_dp = 100.45 + (33.193 * y) + (2.319 * y * y) + 0.17074*(y^3)+1.2063*((pvp*0.491154)^0.1984)
END IF
END FUNCTION
FUNCTION psychro_w_pvp(pair AS DOUBLE, pvp AS DOUBLE) AS DOUBLE
psychro_w_pvp = 0.622 * pvp / pair
END FUNCTION
FUNCTION psychro_pv1(db AS DOUBLE, wb AS DOUBLE, atm AS DOUBLE) AS DOUBLE
pvp = psychro_pvs(wb)
ws = (pvp / (atm - pvp)) * 0.62198
IF wb <= 32 THEN
wh=((1219.98+0.44*db-0.49*wb)*ws-0.24*(db-wb))/(1219.98+0.44*db-0.49*wb)
psychro_pv1 = atm * (wh / (0.62198 + wh))
ELSE
wh=((1093-0.556*wb)*ws-0.24*(db-wb))/(1093+0.444*db-wb)
psychro_pv1 = atm * (wh / (0.62198 + wh))
END IF
END FUNCTION
FUNCTION psychro_w(db AS DOUBLE, wb AS DOUBLE, atm AS DOUBLE) AS DOUBLE
vp = psychro_pv1(db, wb, atm)
psychro_w = 0.622 * vp / (atm - vp)
END FUNCTION
FUNCTION wet_bulb(db AS DOUBLE,dp AS DOUBLE,h AS DOUBLE,atm AS DOUBLE)AS DOUBLE
j=0
acc=0.0001
rtb=dp
dx=db-dp
WHILE j<40
j=j+1
dx=dx*0.5
xmid=rtb+dx
psat=psychro_pvs(xmid)
wstar=psychro_w_pvp(atm-psat, psat)
fmid=psychro_h_w(xmid, wstar)
IF ((h-fmid)>0.0)THEN
rtb=xmid
END IF
IF ABS(dx)<acc THEN
EXIT WHILE
END IF
WEND
wet_bulb=rtb
wb=rtb
END FUNCTION
FUNCTION psychro_v(db AS DOUBLE, wb AS DOUBLE, atm AS DOUBLE)AS DOUBLE
psychro_v = ((0.754 * (db + 459.7)* (1 + (7000 * psychro_w(db, wb, atm) / 4360))) / atm)
END FUNCTION
CREATE MainForm AS QFORM
CAPTION = "Bob G's (Osiyo) Free Software"
Top = 129
Left = 203
Width = 460
Height = 343
Center
Wndproc=Dummyproc
Onclose=Closemain
END CREATE
CREATE main_label AS QLABEL
PARENT = MainForm
Top = 3
Left = 93
Width = 32
Height = 13
CAPTION = "Calculate Psychrometric Properties of Air"
COLOR = &hC0C0C0
Font = Label1_Font
AutoSize = False
END CREATE
CREATE db_label AS QLABEL
PARENT = MainForm
Top = 51
Left = 22
Width = 32
Height = 13
CAPTION = "Dry Bulb Temp (F) : "
COLOR = &hC0C0C0
Font = Label1_Font
AutoSize = False
END CREATE
CREATE rh_label AS QLABEL
PARENT = MainForm
Top = 75
Left = 5
Width = 109
Height = 13
CAPTION = "Relative Humidity (%) : "
COLOR = &hC0C0C0
Font = Label1_Font
AutoSize = False
END CREATE
CREATE elev_label AS QLABEL
PARENT = MainForm
Top = 98
Left = 7
Width = 32
Height = 13
CAPTION = "Elev Above Sea (FT) : "
COLOR = &hC0C0C0
Font = Label1_Font
AutoSize = False
END CREATE
CREATE input_label AS QLABEL
PARENT = MainForm
Top = 30
Left = 51
Width = 32
Height = 13
CAPTION = "INPUTS"
COLOR = &hC0C0C0
Font = inout_label_Font
AutoSize = False
END CREATE
CREATE calc_btn AS QBUTTON
PARENT = MainForm
Top = 72
Left = 238
Width = 75
Height = 25
CAPTION = "CALCULATE"
OnClick = calculate_drha
END CREATE
CREATE reset_btn AS QBUTTON
PARENT = MainForm
Top = 72
Left = 358
Width = 75
Height = 25
CAPTION = "RESET"
OnClick = reset_form
END CREATE
CREATE db_edit AS QEDIT
PARENT = MainForm
Top = 48
Left = 136
Width = 49
Height = 21
Text = "70.0"
COLOR = &hFFFFFF
MaxLength = 5
AutoSize = False
END CREATE
CREATE rh_edit AS QEDIT
PARENT = MainForm
Top = 72
Left = 136
Width = 49
Height = 21
Text = "50.0"
COLOR = &hFFFFFF
MaxLength = 5
END CREATE
CREATE elev_edit AS QEDIT
PARENT = MainForm
Top = 96
Left = 135
Width = 49
Height = 21
Text = "1000"
COLOR = &hFFFFFF
MaxLength = 6
END CREATE
CREATE output_label AS QLABEL
PARENT = MainForm
Top = 129
Left = 182
Width = 32
Height = 13
CAPTION = "OUTPUTS"
COLOR = &hC0C0C0
Font = inout_label_Font
AutoSize = False
END CREATE
CREATE atm_label AS QLABEL
PARENT = MainForm
Top = 154
Left = 18
Width = 32
Height = 13
CAPTION = "Atmospheric Press (in.Hg) : "
COLOR = &hC0C0C0
Font = Label1_Font
AutoSize = False
END CREATE
CREATE svp_label AS QLABEL
PARENT = MainForm
Top = 179
Left = 6
Width = 32
Height = 13
CAPTION = "Saturated Vap Press (in.Hg) : "
COLOR = &hC0C0C0
Font = Label1_Font
AutoSize = False
END CREATE
CREATE pvp_label AS QLABEL
PARENT = MainForm
Top = 202
Left = 25
Width = 32
Height = 13
CAPTION = "Partial Vap Press (in.Hg) : "
COLOR = &hC0C0C0
Font = Label1_Font
AutoSize = False
END CREATE
CREATE hr_label AS QLABEL
PARENT = MainForm
Top = 226
Left = 44
Width = 32
Height = 13
CAPTION = "Humidity Ratio (lb/lb) : "
COLOR = &hC0C0C0
Font = Label1_Font
AutoSize = False
END CREATE
CREATE atm_edit AS QEDIT
PARENT = MainForm
Top = 150
Left = 179
Width = 49
Height = 21
Text = "0.0"
COLOR = &hFFFFFF
MaxLength = 7
AutoSize = False
ReadOnly = True
END CREATE
CREATE svp_edit AS QEDIT
PARENT = MainForm
Top = 174
Left = 179
Width = 49
Height = 21
Text = "0.0"
COLOR = &hFFFFFF
MaxLength = 7
ReadOnly = True
AutoSize = False
END CREATE
CREATE pvp_edit AS QEDIT
PARENT = MainForm
Top = 199
Left = 179
Width = 49
Height = 21
Text = "0.0"
COLOR = &hFFFFFF
MaxLength = 7
ReadOnly = True
AutoSize = False
END CREATE
CREATE hr_edit AS QEDIT
PARENT = MainForm
Top = 223
Left = 178
Width = 49
Height = 21
Text = "0.0"
COLOR = &hFFFFFF
MaxLength = 7
AutoSize = False
ReadOnly = True
END CREATE
CREATE svol_label AS QLABEL
PARENT = MainForm
Top = 154
Left = 250
Width = 32
Height = 13
CAPTION = "Specific Vol (cuft/lb) : "
COLOR = &hC0C0C0
Font = Label1_Font
AutoSize = False
END CREATE
CREATE dp_label AS QLABEL
PARENT = MainForm
Top = 179
Left = 291
Width = 32
Height = 13
CAPTION = "Dew Point (F) : "
COLOR = &hC0C0C0
Font = Label1_Font
AutoSize = False
END CREATE
CREATE wb_label AS QLABEL
PARENT = MainForm
Top = 202
Left = 297
Width = 32
Height = 13
CAPTION = "Wet Bulb (F) : "
COLOR = &hC0C0C0
Font = Label1_Font
AutoSize = False
END CREATE
CREATE ent_label AS QLABEL
PARENT = MainForm
Top = 227
Left = 266
Width = 32
Height = 13
CAPTION = "Enthalpy (BTU/lb) : "
COLOR = &hC0C0C0
Font = Label1_Font
END CREATE
CREATE svol_edit AS QEDIT
PARENT = MainForm
Top = 150
Left = 383
Width = 49
Height = 21
Text = "0.0"
COLOR = &hFFFFFF
MaxLength = 7
AutoSize = False
ReadOnly = True
END CREATE
CREATE dp_edit AS QEDIT
PARENT = MainForm
Top = 175
Left = 382
Width = 49
Height = 21
Text = "0.0"
COLOR = &hFFFFFF
MaxLength = 7
AutoSize = False
ReadOnly = True
END CREATE
CREATE wb_edit AS QEDIT
PARENT = MainForm
Top = 200
Left = 382
Width = 49
Height = 21
Text = "0.0"
COLOR = &hFFFFFF
MaxLength = 7
AutoSize = False
ReadOnly = True
END CREATE
CREATE ent_edit AS QEDIT
PARENT = MainForm
Top = 225
Left = 381
Width = 49
Height = 21
Text = "0.0"
COLOR = &hFFFFFF
MaxLength = 7
AutoSize = False
ReadOnly = True
END CREATE
CREATE file_btn AS QBUTTON
PARENT = MainForm
Top = 264
Left = 176
Width = 75
Height = 25
CAPTION = "Save to File"
OnClick = save_file
END CREATE
MainForm.SHOWMODAL
SUB calculate_drha
db=VAL(db_edit.Text)
elev=VAL(elev_edit.Text)
rhpercent=VAL(rh_edit.Text)
rh=rhpercent/100
atm=psychro_atm(elev)
atm_edit.Text = LEFT$((STR$(atm)),7)
pvs=psychro_pvs(db)
svp_edit.Text = LEFT$((STR$(pvs)),7)
pvp=pvs*rh
pvp_edit.TEXT = LEFT$((STR$(pvp)),7)
w=psychro_wrh(db, rh, atm)
hr_edit.Text = LEFT$((STR$(w)),7)
h=psychro_h_w(db, w)
ent_edit.TEXT = LEFT$((STR$(h)),7)
dp=psychro_dp(pvp)
dp_edit.Text = LEFT$((STR$(dp)),7)
IF rh <1.000 THEN
wb=wet_bulb(db,dp,h,atm)
ELSE
wb=db
END IF
wb_edit.Text = LEFT$((STR$(wb)),7)
v=psychro_v(db, wb, atm)
svol_edit.Text = LEFT$((STR$(v)),7)
END SUB
SUB Dummyproc
END SUB
SUB Closemain
Application.Terminate
END SUB
SUB reset_form
db_edit.Text = "70.0"
elev_edit.Text = "1000"
rh_edit.Text = "50.0"
atm_edit.Text = "0.0"
svp_edit.Text = "0.0"
pvp_edit.TEXT = "0.0"
hr_edit.Text = "0.0"
ent_edit.TEXT = "0.0"
dp_edit.Text = "0.0"
wb_edit.Text = "0.0"
svol_edit.Text = "0.0"
END SUB
SUB save_file
IF SaveDialog.EXECUTE THEN
savename = SaveDialog.FileName
IF UCASE$(RIGHT$(savename,4))<>".TXT" THEN
savename = savename + ".TXT"
END IF
sl1$ = "Dry Bulb Temp (F) : " + db_edit.Text
sl2$ = "Relative Humidity (%) : " + rh_edit.Text
sl3$ = "Elev Above Sea (FT) : " + elev_edit.Text
sl4$ = "Atmospheric Press (in.Hg) : " + atm_edit.Text
sl5$ = "Saturated Vap Press (in.Hg) : " + svp_edit.Text
sl6$ = "Partial Vap Press (in.Hg) : " + pvp_edit.TEXT
sl7$ = "Humidity Ratio (lb/lb) : " + hr_edit.Text
sl8$ = "Specific Vol (cuft/lb) : " + svol_edit.Text
sl9$ = "Dew Point (F) : " + dp_edit.Text
sl10$ = "Wet Bulb (F) : " + wb_edit.Text
sl11$ = "Enthalpy (BTU/lb) : " + ent_edit.TEXT
file1.OPEN(savename,fmCreate)
file1.WriteLine("Inputs Used ..............................")
file1.WriteLine("")
file1.WriteLine(sl1$)
file1.WriteLine(sl2$)
file1.WriteLine(sl3$)
file1.WriteLine("")
file1.WriteLine("")
file1.WriteLine("Calculated Results .......................")
file1.WriteLine("")
file1.WriteLine(sl4$)
file1.WriteLine(sl5$)
file1.WriteLine(sl6$)
file1.WriteLine(sl7$)
file1.WriteLine(sl8$)
file1.WriteLine(sl9$)
file1.WriteLine(sl10$)
file1.WriteLine(sl11$)
file1.WriteLine("")
file1.CLOSE
END IF
END SUB
|