1
2 """
3 Application class that implements pyFoamUpgradeDictionariesTo20
4 """
5
6 import sys,re
7 from os import path
8
9 from .UpgradeDictionariesTo17 import UpgradeDictionariesTo17,DictionaryUpgradeInfo
10
11 from PyFoam.RunDictionary.ParsedParameterFile import ParsedParameterFile
12 from PyFoam.Basics.DataStructures import DictProxy,TupleProxy
13 from PyFoam.Error import error,warning
14
19
21 return "reactionFile20"
22
24 return path.join("constant","reactions")
25
27 if "reactions" not in content:
28 return False
29 else:
30 return type(content["reactions"]) in [list]
31
33 specs=set(specNames)
34 lst=[]
35 for s,v in zip(raw[0::2],raw[1::2]):
36 lst.append([s,v])
37 specs.remove(s)
38
39 for s in specs:
40 lst.append([s,default])
41
42 return lst
43
45 newReactions=DictProxy()
46 rData=zip(*[content["reactions"][i::3] for i in range(3)])
47 cnt=1
48 for rType,scheme,parameters in rData:
49 name="reaction%d"%cnt
50 cnt+=1
51 r={}
52 r["type"]=rType
53 r["reaction"]='"'+str(scheme).strip()+'"'
54 if rType in ["irreversibleArrheniusReaction",
55 "reversibleArrheniusReaction"]:
56 r["A"]=parameters[0]
57 r["beta"]=parameters[1]
58 r["Ta"]=parameters[2]
59 elif rType in ["reversiblethirdBodyArrheniusReaction"]:
60 r["A"]=parameters[0][0]
61 r["beta"]=parameters[0][1]
62 r["Ta"]=parameters[0][2]
63 r["defaultEfficiency"]=parameters[1][0]
64 r["coeffs"]=self.makeCoeffList(parameters[1][1:],
65 parameters[1][0],
66 content["species"])
67 elif rType in ["reversibleArrheniusLindemannFallOffReaction"]:
68 r["k0"]={}
69 r["k0"]["A"]=parameters[0][0]
70 r["k0"]["beta"]=parameters[0][1]
71 r["k0"]["Ta"]=parameters[0][2]
72 r["kInf"]={}
73 r["kInf"]["A"]=parameters[1][0]
74 r["kInf"]["beta"]=parameters[1][1]
75 r["kInf"]["Ta"]=parameters[1][2]
76 r["F"]={}
77 r["thirdBodyEfficiencies"]={}
78 r["thirdBodyEfficiencies"]["defaultEfficiency"]=parameters[2][0]
79 r["thirdBodyEfficiencies"]["coeffs"]=self.makeCoeffList(parameters[2][1:],
80 parameters[2][0],
81 content["species"])
82 elif rType in ["reversibleArrheniusTroeFallOffReaction"]:
83 r["k0"]={}
84 r["k0"]["A"]=parameters[0][0]
85 r["k0"]["beta"]=parameters[0][1]
86 r["k0"]["Ta"]=parameters[0][2]
87 r["kInf"]={}
88 r["kInf"]["A"]=parameters[1][0]
89 r["kInf"]["beta"]=parameters[1][1]
90 r["kInf"]["Ta"]=parameters[1][2]
91 r["F"]={}
92 r["F"]["alpha"]=parameters[2][0]
93 r["F"]["Tsss"]=parameters[2][1]
94 r["F"]["Ts"]=parameters[2][2]
95 r["F"]["Tss"]=parameters[2][3]
96 r["thirdBodyEfficiencies"]={}
97 r["thirdBodyEfficiencies"]["defaultEfficiency"]=parameters[3][0]
98 r["thirdBodyEfficiencies"]["coeffs"]=self.makeCoeffList(parameters[3][1:],
99 parameters[3][0],
100 content["species"])
101 else:
102 r["unsupported"]=parameters
103 newReactions[name]=r
104 content["reactions"]=newReactions
105
109
112
114 return path.join("constant","polyMesh","blockMeshDict")
115
117 return "boundary" not in content
118
120 p=content["patches"]
121 bnd=[]
122 for t,n,f in zip(p[0::3],p[1::3],p[2::3]):
123 bnd+=[ n, { "type" : t,
124 "faces" : f }]
125 content["boundary"]=bnd
126
130
132 return "thermophysical20"
133
135 return path.join("constant","thermophysicalProperties")
136
138 return content["thermoType"].replace('>','').split('<')
139
141 tt=self.analyzeThermoType(content)
142 if len(tt)!=6:
143 return False
144
145 for nm in content:
146 data=content[nm]
147 if type(data) in [tuple,TupleProxy]:
148 if len(data)>4:
149 return True
150
151 return False
152
154 what,mix,trans,spec,therm,gas=self.analyzeThermoType(content)
155 for nm in content:
156 data=content[nm]
157 used=0
158
159 if type(data) not in [tuple,TupleProxy]:
160 continue
161 if len(data)<5:
162 continue
163
164 transDict={}
165 if trans=="constTransport":
166 transDict["Pr"]=data[-1-used]
167 transDict["mu"]=data[-2-used]
168 used+=2
169 elif trans=="sutherlandTransport":
170 transDict["Ts"]=data[-1-used]
171 transDict["As"]=data[-2-used]
172 used+=2
173 else:
174 error("Transport type",trans,"not implemented")
175
176 thermDict={}
177 if therm=="hConstThermo":
178 thermDict["Hf"]=data[-1-used]
179 thermDict["Cp"]=data[-2-used]
180 used+=2
181 elif therm=="eConstThermo":
182 thermDict["Hf"]=data[-1-used]
183 thermDict["Cv"]=data[-2-used]
184 used+=2
185 elif therm=="janafThermo":
186 thermDict["lowCpCoeffs"]=data[-7-used:-0-used]
187 thermDict["highCpCoeffs"]=data[-14-used:-7-used]
188 thermDict["Tcommon"]=data[-15-used]
189 thermDict["Thigh"]=data[-16-used]
190 thermDict["Tlow"]=data[-17-used]
191 used+=2*7+3
192 else:
193 error("Thermodynamics type",therm,"not implemented")
194
195 specDict={}
196 if spec=="specieThermo":
197 specDict["molWeight"]=data[-1-used]
198 specDict["nMoles"]=data[-2-used]
199 used+=2
200 else:
201 error("Specie type",spec,"not implemented")
202
203 if len(data)!=used+1:
204 warning("Not all data for",nm,"used")
205
206 comment=self.makeComment(data)
207 content[nm]={"specie":specDict,
208 "thermodynamics":thermDict,
209 "transport":transDict}
210 content.addDecoration(nm,comment)
211
212
213
214
215
216
217
222
224 return "thermophysicalData20"
225
227 return path.join("constant","thermoData")
228
230 if type(content) in [list]:
231 return True
232 else:
233 return False
234
236 lenData=2+2+(2*7+3)+2
237 rawData=zip(*[content[i::lenData] for i in range(lenData)])
238 content=DictProxy()
239 for d in rawData:
240 name=d[0]
241 data=d[2:]
242 used=0
243
244 specDict={}
245 specDict["nMoles"]=data[used]
246 specDict["molWeight"]=data[used+1]
247 used+=2
248
249 thermDict={}
250 thermDict["Tlow"]=data[used]
251 thermDict["Thigh"]=data[used+1]
252 thermDict["Tcommon"]=data[used+2]
253 thermDict["highCpCoeffs"]=list(data[used+3:used+3+7])
254 thermDict["lowCpCoeffs"]=list(data[used+3+7:used+3+2*7])
255 used+=2*7+3
256
257 transDict={}
258 transDict["As"]=data[used]
259 transDict["Ts"]=data[used+1]
260 used+=2
261
262 if len(data)!=used:
263 warning("Not all data for",name,"used:",used,len(data))
264
265 comment=self.makeComment(d)
266 content[name]={"specie":specDict,
267 "thermodynamics":thermDict,
268 "transport":transDict}
269 content.addDecoration(name,comment)
270 return content
271
290
291
292
293
294
295