19 const doublereal* coeffs,
20 const std::string& my_name) :
27 " Cannot take 0 tmin as input. \n\n");
40 SpeciesThermoInterpType::operator=(b);
60 std::vector<std::string> SS;
66 SS.push_back(
"CPAir");
104 SS.push_back(
"CPN2");
126 for (ii=0; ii < SS.size(); ii++) {
127 name_map[SS[ii]]=(
new species);
130 name_map[SS[ii]]->nvib = -1;
131 name_map[SS[ii]]->cfs = -1;
132 name_map[SS[ii]]->mol_weight = -1;
134 name_map[SS[ii]]->theta[0] =0.0;
135 name_map[SS[ii]]->theta[1] =0.0;
136 name_map[SS[ii]]->theta[2] =0.0;
137 name_map[SS[ii]]->theta[3] =0.0;
138 name_map[SS[ii]]->theta[4] =0.0;
144 name_map[
"Air"]->cfs = 2.5;
145 name_map[
"Air"]->mol_weight=28.96;
146 name_map[
"Air"]->nvib=0;
149 name_map[
"CPAir"]->cfs = 2.5;
150 name_map[
"CPAir"]->mol_weight=28.96;
151 name_map[
"CPAir"]->nvib=0;
154 name_map[
"Ar"]->cfs = 1.5;
155 name_map[
"Ar"]->mol_weight=39.944;
156 name_map[
"Ar"]->nvib=0;
159 name_map[
"Ar+"]->cfs = 1.5;
160 name_map[
"Ar+"]->mol_weight=39.94345;
161 name_map[
"Ar+"]->nvib=0;
164 name_map[
"C"]->cfs = 1.5;
165 name_map[
"C"]->mol_weight=12.011;
166 name_map[
"C"]->nvib=0;
169 name_map[
"C+"]->cfs = 1.5;
170 name_map[
"C+"]->mol_weight=12.01045;
171 name_map[
"C+"]->nvib=0;
174 name_map[
"C2"]->cfs=2.5;
175 name_map[
"C2"]->mol_weight=24.022;
176 name_map[
"C2"]->nvib=1;
177 name_map[
"C2"]->theta[0]=2.6687e3;
180 name_map[
"C2H"]->cfs=2.5;
181 name_map[
"C2H"]->mol_weight=25.03;
182 name_map[
"C2H"]->nvib=3;
183 name_map[
"C2H"]->theta[0]=5.20100e+03;
184 name_map[
"C2H"]->theta[1]=7.20000e+03;
185 name_map[
"C2H"]->theta[2]=2.66100e+03;
188 name_map[
"C2H2"]->cfs=2.5;
189 name_map[
"C2H2"]->mol_weight=26.038;
190 name_map[
"C2H2"]->nvib=5;
191 name_map[
"C2H2"]->theta[0]=4.85290e+03;
192 name_map[
"C2H2"]->theta[1]=2.84000e+03;
193 name_map[
"C2H2"]->theta[2]=4.72490e+03;
194 name_map[
"C2H2"]->theta[3]=8.81830e+02;
195 name_map[
"C2H2"]->theta[4]=1.05080e+03;
198 name_map[
"C3"]->cfs=2.5;
199 name_map[
"C3"]->mol_weight=36.033;
200 name_map[
"C3"]->nvib=3;
201 name_map[
"C3"]->theta[0]=1.84500e+03;
202 name_map[
"C3"]->theta[1]=7.78700e+02;
203 name_map[
"C3"]->theta[2]=3.11760e+03;
206 name_map[
"CF"]->cfs=2.5;
207 name_map[
"CF"]->mol_weight=31.00940;
208 name_map[
"CF"]->nvib=1;
209 name_map[
"CF"]->theta[0]=1.88214e+03;
212 name_map[
"CF2"]->cfs=3;
213 name_map[
"CF2"]->mol_weight=50.00780;
214 name_map[
"CF2"]->nvib=3;
215 name_map[
"CF2"]->theta[0]=1.76120e+03;
216 name_map[
"CF2"]->theta[1]=9.56820e+02;
217 name_map[
"CF2"]->theta[2]=1.60000e+03;
220 name_map[
"CF3"]->cfs=3;
221 name_map[
"CF3"]->mol_weight=69.00620;
222 name_map[
"CF3"]->nvib=4;
223 name_map[
"CF3"]->theta[0]=1.56800e+03;
224 name_map[
"CF3"]->theta[1]=1.00900e+03;
225 name_map[
"CF3"]->theta[2]=1.81150e+03;
226 name_map[
"CF3"]->theta[3]=7.36680e+02;
229 name_map[
"CF4"]->cfs=3;
230 name_map[
"CF4"]->mol_weight=88.00460;
231 name_map[
"CF4"]->nvib=4;
232 name_map[
"CF4"]->theta[0]=1.30720e+03;
233 name_map[
"CF4"]->theta[1]=6.25892e+02;
234 name_map[
"CF4"]->theta[2]=1.84540e+03;
235 name_map[
"CF4"]->theta[3]=9.08950e+02;
238 name_map[
"CH"]->cfs=2.5;
239 name_map[
"CH"]->mol_weight=13.01900;
240 name_map[
"CH"]->nvib=1;
241 name_map[
"CH"]->theta[0]=4.11290e+03;
244 name_map[
"CH2"]->cfs=3;
245 name_map[
"CH2"]->mol_weight=14.02700;
246 name_map[
"CH2"]->nvib=3;
247 name_map[
"CH2"]->theta[0]=4.31650e+03;
248 name_map[
"CH2"]->theta[1]=1.95972e+03;
249 name_map[
"CH2"]->theta[2]=4.60432e+03;
252 name_map[
"CH3"]->cfs=3;
253 name_map[
"CH3"]->mol_weight=15.03500;
254 name_map[
"CH3"]->nvib=4;
255 name_map[
"CH3"]->theta[0]=4.31650e+03;
256 name_map[
"CH3"]->theta[1]=8.73370e+02;
257 name_map[
"CH3"]->theta[2]=4.54960e+03;
258 name_map[
"CH3"]->theta[3]=2.01150e+03;
261 name_map[
"CH4"]->cfs=3;
262 name_map[
"CH4"]->mol_weight=16.04300;
263 name_map[
"CH4"]->nvib=4;
264 name_map[
"CH4"]->theta[0]=4.19660e+03;
265 name_map[
"CH4"]->theta[1]=2.20620e+03;
266 name_map[
"CH4"]->theta[2]=4.34450e+03;
267 name_map[
"CH4"]->theta[3]=1.88600e+03;
270 name_map[
"Cl"]->cfs=1.5;
271 name_map[
"Cl"]->mol_weight=35.45300;
272 name_map[
"Cl"]->nvib=0;
275 name_map[
"Cl2"]->cfs=2.5;
276 name_map[
"Cl2"]->mol_weight=70.96;
277 name_map[
"Cl2"]->nvib=1;
278 name_map[
"Cl2"]->theta[0]=8.05355e+02;
281 name_map[
"CN"]->cfs=2.5;
282 name_map[
"CN"]->mol_weight=26.01900;
283 name_map[
"CN"]->nvib=1;
284 name_map[
"CN"]->theta[0]=2.97610e+03;
287 name_map[
"CN+"]->cfs=2.5;
288 name_map[
"CN+"]->mol_weight=26.01845;
289 name_map[
"CN+"]->nvib=1;
290 name_map[
"CN+"]->theta[0]=2.92520e+03;
293 name_map[
"CO"]->cfs=2.5;
294 name_map[
"CO"]->mol_weight=28.01100;
295 name_map[
"CO"]->nvib=1;
296 name_map[
"CO"]->theta[0]=3.12200e+03;
299 name_map[
"CO+"]->cfs=2.5;
300 name_map[
"CO+"]->mol_weight=28.01045;
301 name_map[
"CO+"]->nvib=1;
302 name_map[
"CO+"]->theta[0]=3.18800e+03;
305 name_map[
"CO2"]->cfs=2.5;
306 name_map[
"CO2"]->mol_weight=44.01100;
307 name_map[
"CO2"]->nvib=3;
308 name_map[
"CO2"]->theta[0]=1.91870e+03;
309 name_map[
"CO2"]->theta[1]=9.59660e+02;
310 name_map[
"CO2"]->theta[2]=3.38210e+03;
313 name_map[
"F"]->cfs=1.5;
314 name_map[
"F"]->mol_weight=18.99840;
315 name_map[
"F"]->nvib=0;
318 name_map[
"F2"]->cfs=2.5;
319 name_map[
"F2"]->mol_weight=37.99680;
320 name_map[
"F2"]->nvib=1;
321 name_map[
"F2"]->theta[0]=1.32020e+03;
324 name_map[
"H"]->cfs=1.5;
325 name_map[
"H"]->mol_weight=1;
326 name_map[
"H"]->nvib=0;
329 name_map[
"H+"]->cfs=1.5;
330 name_map[
"H+"]->mol_weight=1.00745;
331 name_map[
"H+"]->nvib=0;
334 name_map[
"H2"]->cfs=2.5;
335 name_map[
"H2"]->mol_weight=2.01600;
336 name_map[
"H2"]->nvib=1;
337 name_map[
"H2"]->theta[0]=6.33140e+03;
340 name_map[
"H2+"]->cfs=2.5;
341 name_map[
"H2+"]->mol_weight=2.01545;
342 name_map[
"H2+"]->nvib=1;
343 name_map[
"H2+"]->theta[0]=3.34280e+03;
346 name_map[
"H2O"]->cfs=3.0;
347 name_map[
"H2O"]->mol_weight=18.01600;
348 name_map[
"H2O"]->nvib=3;
349 name_map[
"H2O"]->theta[0]=5.26130e+03;
350 name_map[
"H2O"]->theta[1]=2.29460e+03;
351 name_map[
"H2O"]->theta[2]=5.40395e+03;
354 name_map[
"HCl"]->cfs=2.5;
355 name_map[
"HCl"]->mol_weight=36.46100;
356 name_map[
"HCl"]->nvib=1;
357 name_map[
"HCl"]->theta[0]=4.30330e+03;
360 name_map[
"HCN"]->cfs=2.5;
361 name_map[
"HCN"]->mol_weight=27.02700;
362 name_map[
"HCN"]->nvib=3;
363 name_map[
"HCN"]->theta[0]=3.01620e+03;
364 name_map[
"HCN"]->theta[1]=1.02660e+03;
365 name_map[
"HCN"]->theta[2]=4.76450e+03;
368 name_map[
"He"]->cfs=1.5;
369 name_map[
"He"]->mol_weight=4.00300;
370 name_map[
"He"]->nvib=0;
373 name_map[
"He+"]->cfs=1.5;
374 name_map[
"He+"]->mol_weight=4.00245;
375 name_map[
"He+"]->nvib=0;
378 name_map[
"N"]->cfs=1.5;
379 name_map[
"N"]->mol_weight=14.008;
380 name_map[
"N"]->nvib=0;
383 name_map[
"Ne"]->cfs=1.5;
384 name_map[
"Ne"]->mol_weight=20.17900;
385 name_map[
"Ne"]->nvib=0;
388 name_map[
"N+"]->cfs=1.5;
389 name_map[
"N+"]->mol_weight=14.00745;
390 name_map[
"N+"]->nvib=0;
393 name_map[
"N2"]->cfs=2.5;
394 name_map[
"N2"]->mol_weight=28.01600;
395 name_map[
"N2"]->nvib=1;
396 name_map[
"N2"]->theta[0]=3.39500e+03;
399 name_map[
"N2+"]->cfs=2.5;
400 name_map[
"N2+"]->mol_weight=28.01545;
401 name_map[
"N2+"]->nvib=1;
402 name_map[
"N2+"]->theta[0]=3.17580e+03;
405 name_map[
"CPN2"]->cfs=2.5;
406 name_map[
"CPN2"]->mol_weight=28.01600;
407 name_map[
"CPN2"]->nvib=0;
410 name_map[
"NCO"]->cfs=2.5;
411 name_map[
"NCO"]->mol_weight=42.01900;
412 name_map[
"NCO"]->nvib=3;
413 name_map[
"NCO"]->theta[0]=1.83600e+03;
414 name_map[
"NCO"]->theta[1]=7.67100e+02;
415 name_map[
"NCO"]->theta[2]=2.76800e+03;
418 name_map[
"NH"]->cfs=2.5;
419 name_map[
"NH"]->mol_weight=15.01600;
420 name_map[
"NH"]->nvib=1;
421 name_map[
"NH"]->theta[0]=4.72240e+03;
424 name_map[
"NH+"]->cfs=2.5;
425 name_map[
"NH+"]->mol_weight=15.01545;
426 name_map[
"NH+"]->nvib=0;
429 name_map[
"NH2"]->cfs=2.5;
430 name_map[
"NH2"]->mol_weight=16.02400;
431 name_map[
"NH2"]->nvib=0;
434 name_map[
"NH3"]->cfs=2.5;
435 name_map[
"NH3"]->mol_weight=17.03200;
436 name_map[
"NH3"]->nvib=4;
437 name_map[
"NH3"]->theta[0]=4.78100e+03;
438 name_map[
"NH3"]->theta[1]=1.47040e+03;
439 name_map[
"NH3"]->theta[2]=4.95440e+03;
440 name_map[
"NH3"]->theta[3]=2.34070e+03;
443 name_map[
"NO"]->cfs=2.5;
444 name_map[
"NO"]->mol_weight=30.00800;
445 name_map[
"NO"]->nvib=1;
446 name_map[
"NO"]->theta[0]=2.81700e+03;
449 name_map[
"NO+"]->cfs=2.5;
450 name_map[
"NO+"]->mol_weight=30.00745;
451 name_map[
"NO+"]->nvib=1;
452 name_map[
"NO+"]->theta[0]=3.42100e+03;
455 name_map[
"NO2"]->cfs=3;
456 name_map[
"NO2"]->mol_weight=46.00800;
457 name_map[
"NO2"]->nvib=3;
458 name_map[
"NO2"]->theta[0]=1.07900e+03;
459 name_map[
"NO2"]->theta[1]=1.90000e+03;
460 name_map[
"NO2"]->theta[2]=2.32700e+03;
463 name_map[
"O"]->cfs=1.5;
464 name_map[
"O"]->mol_weight=16.000;
465 name_map[
"O"]->nvib=0;
468 name_map[
"O+"]->cfs=1.5;
469 name_map[
"O+"]->mol_weight=15.99945;
470 name_map[
"O+"]->nvib=0;
473 name_map[
"O2"]->cfs=2.5;
474 name_map[
"O2"]->mol_weight=32.00000;
475 name_map[
"O2"]->nvib=1;
476 name_map[
"O2"]->theta[0]=2.23900e+03;
479 name_map[
"O2+"]->cfs=2.5;
480 name_map[
"O2+"]->mol_weight=31.99945;
481 name_map[
"O2+"]->nvib=1;
482 name_map[
"O2+"]->theta[0]=2.74120e+03;
485 name_map[
"OH"]->cfs=2.5;
486 name_map[
"OH"]->mol_weight=17.00800;
487 name_map[
"OH"]->nvib=1;
488 name_map[
"OH"]->theta[0]=5.37820e+03;
491 name_map[
"Si"]->cfs=1.5;
492 name_map[
"Si"]->mol_weight=28.08550;
493 name_map[
"Si"]->nvib=0;
496 name_map[
"SiO"]->cfs=2.5;
497 name_map[
"SiO"]->mol_weight=44.08550;
498 name_map[
"SiO"]->nvib=1;
499 name_map[
"SiO"]->theta[0]=1.78640e+03;
502 name_map[
"e"]->cfs=1.5;
503 name_map[
"e"]->mol_weight=0.00055;
504 name_map[
"e"]->nvib=0;
506 for (ii=0; ii < SS.size(); ii++) {
508 if (name_map[SS[ii]]->nvib == -1) {
509 std::cout << name_map[SS[ii]]->nvib << std::endl;
511 "nvib not initialized!. \n\n");
515 for (
int i=0; i<name_map[SS[ii]]->nvib; i++) {
516 if (name_map[SS[ii]]->theta[i] <= 0.0) {
518 "theta not initialized!. \n\n");
524 for (
int i=name_map[SS[ii]]->nvib; i<5; i++) {
525 if (name_map[SS[ii]]->theta[i] != 0.0) {
526 std::string err =
"bad theta value for "+SS[ii]+
"\n";
533 if (name_map[SS[ii]]->mol_weight == -1) {
534 std::cout << name_map[SS[ii]]->mol_weight << std::endl;
536 "mol_weight not initialized!. \n\n");
541 if (name_map[SS[ii]]->cfs == -1) {
542 std::cout << name_map[SS[ii]]->cfs << std::endl;
544 "cfs not initialized!. \n\n");
555 doublereal* cp_R, doublereal* h_RT,
556 doublereal* s_R)
const
559 std::map<std::string,species*>::iterator it;
565 if (name_map.find(sp_name) != name_map.end()) {
566 s = name_map.find(sp_name)->second;
569 "species properties not found!. \n\n");
573 doublereal ctr = 0.0;
580 for (
int i=0; i< s->nvib; i++) {
582 ctr +=
GasConstant * theta * (theta* exp(theta/tt[0])/(tt[0]*tt[0]))/((exp(theta/tt[0])-1) * (exp(theta/tt[0])-1));
589 doublereal hdivRT = 0.0;
590 doublereal sdivR = 0.0;
600 doublereal* cp_R, doublereal* h_RT,
601 doublereal* s_R)
const
609 doublereal& tlow, doublereal& thigh,
611 doublereal*
const coeffs)
const
620 for (
int i = 0; i < 9; i++) {
623 doublereal temp = coeffs[0];
629 if (name_map.find(sp_name) != name_map.end()) {
630 s = name_map.find(sp_name)->second;
633 "species properties not found!. \n\n");
640 for (
int i=0; i< s->nvib; i++) {
642 cvib +=
GasConstant * theta * (theta* exp(theta/temp)/(temp*temp))/((exp(theta/temp)-1) * (exp(theta/temp)-1));
Pure Virtual Base class for the thermodynamic manager for an individual species' reference state...
virtual void updateProperties(const doublereal *tt, doublereal *cp_R, doublereal *h_RT, doublereal *s_R) const
Update the properties for this species, given a temperature polynomial.
virtual int reportType() const
Returns an integer representing the type of parameterization.
size_t m_index
species index
void warn_deprecated(const std::string &method, const std::string &extra)
Print a warning indicating that method is deprecated.
virtual void modifyParameters(doublereal *coeffs)
Modify parameters for the standard state.
StatMech()
Empty constructor.
virtual void updatePropertiesTemp(const doublereal temp, doublereal *cp_R, doublereal *h_RT, doublereal *s_R) const
Compute the reference-state property of one species.
doublereal m_highT
Highest valid temperature.
virtual void reportParameters(size_t &n, int &type, doublereal &tlow, doublereal &thigh, doublereal &pref, doublereal *const coeffs) const
This utility function reports back the type of parameterization and all of the parameters for the spe...
Base class for exceptions thrown by Cantera classes.
Header for a single-species standard state object derived from.
int buildmap()
Build a series of maps for the properties needed for species.
doublereal m_lowT
lowest valid temperature
#define STAT
Properties derived from theoretical considerations This is implemented in the class statmech in StatM...
StatMech & operator=(const StatMech &b)
assignment operator
const doublereal GasConstant
Universal Gas Constant. [J/kmol/K].
virtual SpeciesThermoInterpType * duplMyselfAsSpeciesThermoInterpType() const
duplicator
doublereal m_Pref
Reference state pressure.