17 const doublereal* coeffs,
18 const std::string& my_name) :
25 " Cannot take 0 tmin as input. \n\n");
38 SpeciesThermoInterpType::operator=(b);
58 std::vector<std::string> SS;
64 SS.push_back(
"CPAir");
102 SS.push_back(
"CPN2");
124 for (ii=0; ii < SS.size(); ii++) {
125 name_map[SS[ii]]=(
new species);
128 name_map[SS[ii]]->nvib = -1;
129 name_map[SS[ii]]->cfs = -1;
130 name_map[SS[ii]]->mol_weight = -1;
132 name_map[SS[ii]]->theta[0] =0.0;
133 name_map[SS[ii]]->theta[1] =0.0;
134 name_map[SS[ii]]->theta[2] =0.0;
135 name_map[SS[ii]]->theta[3] =0.0;
136 name_map[SS[ii]]->theta[4] =0.0;
142 name_map[
"Air"]->cfs = 2.5;
143 name_map[
"Air"]->mol_weight=28.96;
144 name_map[
"Air"]->nvib=0;
147 name_map[
"CPAir"]->cfs = 2.5;
148 name_map[
"CPAir"]->mol_weight=28.96;
149 name_map[
"CPAir"]->nvib=0;
152 name_map[
"Ar"]->cfs = 1.5;
153 name_map[
"Ar"]->mol_weight=39.944;
154 name_map[
"Ar"]->nvib=0;
157 name_map[
"Ar+"]->cfs = 1.5;
158 name_map[
"Ar+"]->mol_weight=39.94345;
159 name_map[
"Ar+"]->nvib=0;
162 name_map[
"C"]->cfs = 1.5;
163 name_map[
"C"]->mol_weight=12.011;
164 name_map[
"C"]->nvib=0;
167 name_map[
"C+"]->cfs = 1.5;
168 name_map[
"C+"]->mol_weight=12.01045;
169 name_map[
"C+"]->nvib=0;
172 name_map[
"C2"]->cfs=2.5;
173 name_map[
"C2"]->mol_weight=24.022;
174 name_map[
"C2"]->nvib=1;
175 name_map[
"C2"]->theta[0]=2.6687e3;
178 name_map[
"C2H"]->cfs=2.5;
179 name_map[
"C2H"]->mol_weight=25.03;
180 name_map[
"C2H"]->nvib=3;
181 name_map[
"C2H"]->theta[0]=5.20100e+03;
182 name_map[
"C2H"]->theta[1]=7.20000e+03;
183 name_map[
"C2H"]->theta[2]=2.66100e+03;
186 name_map[
"C2H2"]->cfs=2.5;
187 name_map[
"C2H2"]->mol_weight=26.038;
188 name_map[
"C2H2"]->nvib=5;
189 name_map[
"C2H2"]->theta[0]=4.85290e+03;
190 name_map[
"C2H2"]->theta[1]=2.84000e+03;
191 name_map[
"C2H2"]->theta[2]=4.72490e+03;
192 name_map[
"C2H2"]->theta[3]=8.81830e+02;
193 name_map[
"C2H2"]->theta[4]=1.05080e+03;
196 name_map[
"C3"]->cfs=2.5;
197 name_map[
"C3"]->mol_weight=36.033;
198 name_map[
"C3"]->nvib=3;
199 name_map[
"C3"]->theta[0]=1.84500e+03;
200 name_map[
"C3"]->theta[1]=7.78700e+02;
201 name_map[
"C3"]->theta[2]=3.11760e+03;
204 name_map[
"CF"]->cfs=2.5;
205 name_map[
"CF"]->mol_weight=31.00940;
206 name_map[
"CF"]->nvib=1;
207 name_map[
"CF"]->theta[0]=1.88214e+03;
210 name_map[
"CF2"]->cfs=3;
211 name_map[
"CF2"]->mol_weight=50.00780;
212 name_map[
"CF2"]->nvib=3;
213 name_map[
"CF2"]->theta[0]=1.76120e+03;
214 name_map[
"CF2"]->theta[1]=9.56820e+02;
215 name_map[
"CF2"]->theta[2]=1.60000e+03;
218 name_map[
"CF3"]->cfs=3;
219 name_map[
"CF3"]->mol_weight=69.00620;
220 name_map[
"CF3"]->nvib=4;
221 name_map[
"CF3"]->theta[0]=1.56800e+03;
222 name_map[
"CF3"]->theta[1]=1.00900e+03;
223 name_map[
"CF3"]->theta[2]=1.81150e+03;
224 name_map[
"CF3"]->theta[3]=7.36680e+02;
227 name_map[
"CF4"]->cfs=3;
228 name_map[
"CF4"]->mol_weight=88.00460;
229 name_map[
"CF4"]->nvib=4;
230 name_map[
"CF4"]->theta[0]=1.30720e+03;
231 name_map[
"CF4"]->theta[1]=6.25892e+02;
232 name_map[
"CF4"]->theta[2]=1.84540e+03;
233 name_map[
"CF4"]->theta[3]=9.08950e+02;
236 name_map[
"CH"]->cfs=2.5;
237 name_map[
"CH"]->mol_weight=13.01900;
238 name_map[
"CH"]->nvib=1;
239 name_map[
"CH"]->theta[0]=4.11290e+03;
242 name_map[
"CH2"]->cfs=3;
243 name_map[
"CH2"]->mol_weight=14.02700;
244 name_map[
"CH2"]->nvib=3;
245 name_map[
"CH2"]->theta[0]=4.31650e+03;
246 name_map[
"CH2"]->theta[1]=1.95972e+03;
247 name_map[
"CH2"]->theta[2]=4.60432e+03;
250 name_map[
"CH3"]->cfs=3;
251 name_map[
"CH3"]->mol_weight=15.03500;
252 name_map[
"CH3"]->nvib=4;
253 name_map[
"CH3"]->theta[0]=4.31650e+03;
254 name_map[
"CH3"]->theta[1]=8.73370e+02;
255 name_map[
"CH3"]->theta[2]=4.54960e+03;
256 name_map[
"CH3"]->theta[3]=2.01150e+03;
259 name_map[
"CH4"]->cfs=3;
260 name_map[
"CH4"]->mol_weight=16.04300;
261 name_map[
"CH4"]->nvib=4;
262 name_map[
"CH4"]->theta[0]=4.19660e+03;
263 name_map[
"CH4"]->theta[1]=2.20620e+03;
264 name_map[
"CH4"]->theta[2]=4.34450e+03;
265 name_map[
"CH4"]->theta[3]=1.88600e+03;
268 name_map[
"Cl"]->cfs=1.5;
269 name_map[
"Cl"]->mol_weight=35.45300;
270 name_map[
"Cl"]->nvib=0;
273 name_map[
"Cl2"]->cfs=2.5;
274 name_map[
"Cl2"]->mol_weight=70.96;
275 name_map[
"Cl2"]->nvib=1;
276 name_map[
"Cl2"]->theta[0]=8.05355e+02;
279 name_map[
"CN"]->cfs=2.5;
280 name_map[
"CN"]->mol_weight=26.01900;
281 name_map[
"CN"]->nvib=1;
282 name_map[
"CN"]->theta[0]=2.97610e+03;
285 name_map[
"CN+"]->cfs=2.5;
286 name_map[
"CN+"]->mol_weight=26.01845;
287 name_map[
"CN+"]->nvib=1;
288 name_map[
"CN+"]->theta[0]=2.92520e+03;
291 name_map[
"CO"]->cfs=2.5;
292 name_map[
"CO"]->mol_weight=28.01100;
293 name_map[
"CO"]->nvib=1;
294 name_map[
"CO"]->theta[0]=3.12200e+03;
297 name_map[
"CO+"]->cfs=2.5;
298 name_map[
"CO+"]->mol_weight=28.01045;
299 name_map[
"CO+"]->nvib=1;
300 name_map[
"CO+"]->theta[0]=3.18800e+03;
303 name_map[
"CO2"]->cfs=2.5;
304 name_map[
"CO2"]->mol_weight=44.01100;
305 name_map[
"CO2"]->nvib=3;
306 name_map[
"CO2"]->theta[0]=1.91870e+03;
307 name_map[
"CO2"]->theta[1]=9.59660e+02;
308 name_map[
"CO2"]->theta[2]=3.38210e+03;
311 name_map[
"F"]->cfs=1.5;
312 name_map[
"F"]->mol_weight=18.99840;
313 name_map[
"F"]->nvib=0;
316 name_map[
"F2"]->cfs=2.5;
317 name_map[
"F2"]->mol_weight=37.99680;
318 name_map[
"F2"]->nvib=1;
319 name_map[
"F2"]->theta[0]=1.32020e+03;
322 name_map[
"H"]->cfs=1.5;
323 name_map[
"H"]->mol_weight=1;
324 name_map[
"H"]->nvib=0;
327 name_map[
"H+"]->cfs=1.5;
328 name_map[
"H+"]->mol_weight=1.00745;
329 name_map[
"H+"]->nvib=0;
332 name_map[
"H2"]->cfs=2.5;
333 name_map[
"H2"]->mol_weight=2.01600;
334 name_map[
"H2"]->nvib=1;
335 name_map[
"H2"]->theta[0]=6.33140e+03;
338 name_map[
"H2+"]->cfs=2.5;
339 name_map[
"H2+"]->mol_weight=2.01545;
340 name_map[
"H2+"]->nvib=1;
341 name_map[
"H2+"]->theta[0]=3.34280e+03;
344 name_map[
"H2O"]->cfs=3.0;
345 name_map[
"H2O"]->mol_weight=18.01600;
346 name_map[
"H2O"]->nvib=3;
347 name_map[
"H2O"]->theta[0]=5.26130e+03;
348 name_map[
"H2O"]->theta[1]=2.29460e+03;
349 name_map[
"H2O"]->theta[2]=5.40395e+03;
352 name_map[
"HCl"]->cfs=2.5;
353 name_map[
"HCl"]->mol_weight=36.46100;
354 name_map[
"HCl"]->nvib=1;
355 name_map[
"HCl"]->theta[0]=4.30330e+03;
358 name_map[
"HCN"]->cfs=2.5;
359 name_map[
"HCN"]->mol_weight=27.02700;
360 name_map[
"HCN"]->nvib=3;
361 name_map[
"HCN"]->theta[0]=3.01620e+03;
362 name_map[
"HCN"]->theta[1]=1.02660e+03;
363 name_map[
"HCN"]->theta[2]=4.76450e+03;
366 name_map[
"He"]->cfs=1.5;
367 name_map[
"He"]->mol_weight=4.00300;
368 name_map[
"He"]->nvib=0;
371 name_map[
"He+"]->cfs=1.5;
372 name_map[
"He+"]->mol_weight=4.00245;
373 name_map[
"He+"]->nvib=0;
376 name_map[
"N"]->cfs=1.5;
377 name_map[
"N"]->mol_weight=14.008;
378 name_map[
"N"]->nvib=0;
381 name_map[
"Ne"]->cfs=1.5;
382 name_map[
"Ne"]->mol_weight=20.17900;
383 name_map[
"Ne"]->nvib=0;
386 name_map[
"N+"]->cfs=1.5;
387 name_map[
"N+"]->mol_weight=14.00745;
388 name_map[
"N+"]->nvib=0;
391 name_map[
"N2"]->cfs=2.5;
392 name_map[
"N2"]->mol_weight=28.01600;
393 name_map[
"N2"]->nvib=1;
394 name_map[
"N2"]->theta[0]=3.39500e+03;
397 name_map[
"N2+"]->cfs=2.5;
398 name_map[
"N2+"]->mol_weight=28.01545;
399 name_map[
"N2+"]->nvib=1;
400 name_map[
"N2+"]->theta[0]=3.17580e+03;
403 name_map[
"CPN2"]->cfs=2.5;
404 name_map[
"CPN2"]->mol_weight=28.01600;
405 name_map[
"CPN2"]->nvib=0;
408 name_map[
"NCO"]->cfs=2.5;
409 name_map[
"NCO"]->mol_weight=42.01900;
410 name_map[
"NCO"]->nvib=3;
411 name_map[
"NCO"]->theta[0]=1.83600e+03;
412 name_map[
"NCO"]->theta[1]=7.67100e+02;
413 name_map[
"NCO"]->theta[2]=2.76800e+03;
416 name_map[
"NH"]->cfs=2.5;
417 name_map[
"NH"]->mol_weight=15.01600;
418 name_map[
"NH"]->nvib=1;
419 name_map[
"NH"]->theta[0]=4.72240e+03;
422 name_map[
"NH+"]->cfs=2.5;
423 name_map[
"NH+"]->mol_weight=15.01545;
424 name_map[
"NH+"]->nvib=0;
427 name_map[
"NH2"]->cfs=2.5;
428 name_map[
"NH2"]->mol_weight=16.02400;
429 name_map[
"NH2"]->nvib=0;
432 name_map[
"NH3"]->cfs=2.5;
433 name_map[
"NH3"]->mol_weight=17.03200;
434 name_map[
"NH3"]->nvib=4;
435 name_map[
"NH3"]->theta[0]=4.78100e+03;
436 name_map[
"NH3"]->theta[1]=1.47040e+03;
437 name_map[
"NH3"]->theta[2]=4.95440e+03;
438 name_map[
"NH3"]->theta[3]=2.34070e+03;
441 name_map[
"NO"]->cfs=2.5;
442 name_map[
"NO"]->mol_weight=30.00800;
443 name_map[
"NO"]->nvib=1;
444 name_map[
"NO"]->theta[0]=2.81700e+03;
447 name_map[
"NO+"]->cfs=2.5;
448 name_map[
"NO+"]->mol_weight=30.00745;
449 name_map[
"NO+"]->nvib=1;
450 name_map[
"NO+"]->theta[0]=3.42100e+03;
453 name_map[
"NO2"]->cfs=3;
454 name_map[
"NO2"]->mol_weight=46.00800;
455 name_map[
"NO2"]->nvib=3;
456 name_map[
"NO2"]->theta[0]=1.07900e+03;
457 name_map[
"NO2"]->theta[1]=1.90000e+03;
458 name_map[
"NO2"]->theta[2]=2.32700e+03;
461 name_map[
"O"]->cfs=1.5;
462 name_map[
"O"]->mol_weight=16.000;
463 name_map[
"O"]->nvib=0;
466 name_map[
"O+"]->cfs=1.5;
467 name_map[
"O+"]->mol_weight=15.99945;
468 name_map[
"O+"]->nvib=0;
471 name_map[
"O2"]->cfs=2.5;
472 name_map[
"O2"]->mol_weight=32.00000;
473 name_map[
"O2"]->nvib=1;
474 name_map[
"O2"]->theta[0]=2.23900e+03;
477 name_map[
"O2+"]->cfs=2.5;
478 name_map[
"O2+"]->mol_weight=31.99945;
479 name_map[
"O2+"]->nvib=1;
480 name_map[
"O2+"]->theta[0]=2.74120e+03;
483 name_map[
"OH"]->cfs=2.5;
484 name_map[
"OH"]->mol_weight=17.00800;
485 name_map[
"OH"]->nvib=1;
486 name_map[
"OH"]->theta[0]=5.37820e+03;
489 name_map[
"Si"]->cfs=1.5;
490 name_map[
"Si"]->mol_weight=28.08550;
491 name_map[
"Si"]->nvib=0;
494 name_map[
"SiO"]->cfs=2.5;
495 name_map[
"SiO"]->mol_weight=44.08550;
496 name_map[
"SiO"]->nvib=1;
497 name_map[
"SiO"]->theta[0]=1.78640e+03;
500 name_map[
"e"]->cfs=1.5;
501 name_map[
"e"]->mol_weight=0.00055;
502 name_map[
"e"]->nvib=0;
504 for (ii=0; ii < SS.size(); ii++) {
506 if (name_map[SS[ii]]->nvib == -1) {
507 std::cout << name_map[SS[ii]]->nvib << std::endl;
509 "nvib not initialized!. \n\n");
513 for (
int i=0; i<name_map[SS[ii]]->nvib; i++) {
514 if (name_map[SS[ii]]->theta[i] <= 0.0) {
516 "theta not initialized!. \n\n");
522 for (
int i=name_map[SS[ii]]->nvib; i<5; i++) {
523 if (name_map[SS[ii]]->theta[i] != 0.0) {
524 std::string err =
"bad theta value for "+SS[ii]+
"\n";
531 if (name_map[SS[ii]]->mol_weight == -1) {
532 std::cout << name_map[SS[ii]]->mol_weight << std::endl;
534 "mol_weight not initialized!. \n\n");
539 if (name_map[SS[ii]]->cfs == -1) {
540 std::cout << name_map[SS[ii]]->cfs << std::endl;
542 "cfs not initialized!. \n\n");
553 doublereal* cp_R, doublereal* h_RT,
554 doublereal* s_R)
const
557 std::map<std::string,species*>::iterator it;
563 if (name_map.find(sp_name) != name_map.end()) {
564 s = name_map.find(sp_name)->second;
568 "species properties not found!. \n\n");
572 doublereal ctr = 0.0;
579 for (
int i=0; i< s->nvib; i++) {
581 ctr +=
GasConstant * theta * (theta* exp(theta/tt[0])/(tt[0]*tt[0]))/((exp(theta/tt[0])-1) * (exp(theta/tt[0])-1));
588 doublereal hdivRT = 0.0;
589 doublereal sdivR = 0.0;
599 doublereal* cp_R, doublereal* h_RT,
600 doublereal* s_R)
const
608 doublereal& tlow, doublereal& thigh,
610 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;
634 "species properties not found!. \n\n");
641 for (
int i=0; i< s->nvib; i++) {
643 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.