Skip to content

Commit f5d82d9

Browse files
authored
Merge pull request #14049 from drjfloyd/master
FDS Verification: python script for exact solution for tga_analysis.fds
2 parents aa74661 + 8bbcf39 commit f5d82d9

File tree

2 files changed

+679
-782
lines changed

2 files changed

+679
-782
lines changed
Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
import math
2+
3+
def cp_w(tmp):
4+
cp = -0.394796083E+05/tmp**2+0.575573102E+03/tmp+0.931782653E+00+0.722271300E-02*tmp-0.734256000E-05*tmp**2+0.495504000E-08*tmp**3-0.133693000E-11*tmp**4
5+
cp = cp * 8314.472/18.01528
6+
7+
cp=2000
8+
9+
return cp
10+
11+
def h_w(tmp):
12+
h = 0.394796083E+05/tmp+0.575573102E+03*math.log(tmp)+0.931782653E+00*tmp+0.722271300E-02/2*tmp**2-0.734256000E-05/3*tmp**3+0.495504000E-08/4*tmp**4-0.133693000E-11/5*tmp**5-0.330397431E+05
13+
h = h * 8314.472/18.01528
14+
15+
h = 2000 * tmp
16+
17+
return h
18+
19+
20+
y1 = 0.9
21+
y2 = 0
22+
yr = 0
23+
yw = 0.1
24+
25+
cp1 = 1000
26+
cp2 = 1000
27+
cpr = 1000
28+
cpw = 4184
29+
rho10 = 500
30+
rho20 = 500
31+
rhor0 = 200
32+
rhow0 = 1000
33+
hor1 = 1000*1000
34+
hor2 = 1000*1000
35+
horw = 2500 * 1000
36+
ref_t1 = 315 + 273.15
37+
ref_t2 = 430 + 273.15
38+
ref_tw = 100 + 273.15
39+
ref_r1 = 0.0056
40+
ref_r2 = 0.0075
41+
ref_rw = 0.0016
42+
rgas = 8.314472
43+
refrate = 10/60
44+
m12f = 0.4
45+
m2rf = 0.15
46+
hoc = 14988.3674E3
47+
48+
cpg = 179.4778852
49+
50+
e = math.exp(1)
51+
52+
e1 = e * ref_r1 * rgas * ref_t1**2/refrate
53+
a1 = e * ref_r1 * math.exp(e1/(rgas*ref_t1))
54+
55+
e2 = e * ref_r2 * rgas * ref_t2**2/refrate
56+
a2 = e * ref_r2 * math.exp(e2/(rgas*ref_t2))
57+
58+
ew = e * ref_rw * rgas * ref_tw**2/refrate
59+
aw = e * ref_rw * math.exp(ew/(rgas*ref_tw))
60+
61+
rho_s = y1/rho10 + yw/rhow0
62+
rho_s = 1/rho_s
63+
m0 = rho_s * 1E-6
64+
m1 = y1 * m0
65+
m2 = 0
66+
mr = 0
67+
rho1 = y1 * rho_s
68+
rho2 = 0
69+
rho3 = 0
70+
rhow = yw * rho_s
71+
mw = yw * m0
72+
msum = m1 + m2 + mr + mw
73+
dtdt = 5/60
74+
dt = 1
75+
76+
t = 0
77+
Temp = 20
78+
twrite = 12
79+
mcc =0
80+
dsc = 0
81+
mlr1 = 0
82+
mlr2 = 0
83+
mlrr = 0
84+
mlrw = 0
85+
TempMax = 800
86+
87+
h_w_ref = h_w(ref_tw)
88+
89+
f = open('tga_analysis_exact.csv','w')
90+
91+
f.write('s,C,g/g,g/g,g/g,g/g,g/g,1/s,1/s,1/s,1/s,1/s,W/g,W/g\n')
92+
f.write('Time,Temp,Total Mass,component 1 Mass,water Mass,component 2 Mass,residue Mass,Total MLR, component 1 MLR, water MLR, component 2 MLR, residue MLR,MCC,DSC\n')
93+
94+
outstr=[str('{:.4e}'.format(t)),str('{:.4e}'.format(Temp)),str('{:.4e}'.format(msum/m0)),str('{:.4e}'.format(m1/m0)),str('{:.4e}'.format(mw/m0)),str('{:.4e}'.format(m2/m0)),str('{:.4e}'.format(mr/m0)),str('{:.4e}'.format(0)),str('{:.4e}'.format(0)),str('{:.4e}'.format(0)),str('{:.4e}'.format(0)),str('{:.4e}'.format(0)),str('{:.4e}'.format(0)),str('{:.4e}'.format(0))]
95+
outstr2 = ','.join(outstr)+'\n'
96+
f.write(outstr2)
97+
98+
while True:
99+
TempK = Temp + 273.15
100+
m1p = m1
101+
m2p = m2
102+
mrp = mr
103+
mwp = mw
104+
105+
rr1 = rho1 * a1 * math.exp(-e1/(rgas*TempK))
106+
rr2 = rho2 * a2 * math.exp(-e2/(rgas*TempK))
107+
rrw = rhow * aw * math.exp(-ew/(rgas*TempK))
108+
109+
drho1 = rr1 * dt
110+
drho2 = rr2 * dt
111+
drhow = rrw * dt
112+
113+
rho1n = max(0,rho1 - drho1)
114+
rho2n = max(0,rho2 - drho2)
115+
rhown = max(0,rhow - drhow)
116+
117+
m1 = m1p * rho1n / (rho1+1E-60)
118+
m2 = m2p * rho2n / (rho2+1E-60) + m12f * (m1p - m1)
119+
mf1 = (1-m12f) * (m1p - m1)
120+
mr = mr + m2rf * m2p * (1- rho2n / (rho2+1E-60))
121+
mf2 = (1-m2rf) * m2p * (1- rho2n / (rho2+1E-60))
122+
mf = mf1 + mf2
123+
mw = mw * rhown / (rhow+1E-60)
124+
msum = m1 + m2 + mr + mw
125+
126+
y1 = m1/(msum + 1E-60)
127+
y2 = m2/(msum + 1E-60)
128+
yr = mr/(msum + 1E-60)
129+
yw = mw/(msum + 1E-60)
130+
131+
rho_s = y1/(rho10+1E-60) + y2/(rho20+1E-60) + yr/(rhor0+1E-60) + yw/(rhow0+1E-60)
132+
133+
if (rho_s > 0):
134+
rho_s = 1/rho_s
135+
136+
rho1 = y1 * rho_s
137+
rho2 = y2 * rho_s
138+
rhor = yr * rho_s
139+
rhow = yw * rho_s
140+
if (rho1<=0): rho1n = 0
141+
if (rho2<=0): rho2n = 0
142+
if (rhor<=0): rhorn = 0
143+
if (rhow<=0): rhown = 0
144+
mlr1 = (m1p - m1 )/(dt*(m0+1E-60))
145+
mlr2 = (m2p - m2 )/(dt*(m0+1E-60))
146+
mlrr = (mrp - mr )/(dt*(m0+1E-60))
147+
mlrw = (mwp - mw )/(dt*(m0+1E-60))
148+
mlrtot = mlr1 + mlr2 + mlrr + mlrw
149+
150+
mcc = hoc * mf / dt * 0.001 / m0
151+
152+
t = t + dt
153+
Temp = Temp + dtdt*dt
154+
155+
dsc = dtdt * dt * (y1 * cp1 + y2 * cp2 + yr * cpr + yw * cpw) * msum /(m0 * 1000)
156+
dsc = dsc + (m1p - m1) * (hor1 - (TempK - ref_t1) * (cpg - cp1) * (1 - m12f)) / (m0 * 1000)
157+
dsc = dsc + (mr - mrp)/m2rf * (hor2 - (TempK - ref_t2) * (cpg - cp2) * (1 - m2rf)) / (m0 * 1000)
158+
h_w_TempK = h_w(TempK)
159+
dsc = dsc + (mwp - mw) * (horw + h_w_TempK - h_w_ref - (TempK - ref_tw) * cpw) / (m0 * 1000)
160+
161+
if (t >= twrite):
162+
outstr=[str('{:.4e}'.format(t)),str('{:.4e}'.format(Temp)),str('{:.4e}'.format(msum/m0)),str('{:.4e}'.format(m1/m0)),str('{:.4e}'.format(mw/m0)),str('{:.4e}'.format(m2/m0)),str('{:.4e}'.format(mr/m0)),str('{:.4e}'.format(mlrtot)),str('{:.4e}'.format(mlr1)),str('{:.4e}'.format(mlr2)),str('{:.4e}'.format(mlrw)),str('{:.4e}'.format(mlrr)),str('{:.4e}'.format(mcc)),str('{:.4e}'.format(dsc))]
163+
outstr2 = ','.join(outstr)+'\n'
164+
f.write(outstr2)
165+
twrite = twrite+12
166+
if (TempK >= TempMax):
167+
break
168+
169+
170+

0 commit comments

Comments
 (0)