Cantera  2.0
StatMech.cpp
Go to the documentation of this file.
1 /**
2  * @file StatMech.cpp
3  * \link Cantera::SpeciesThermoInterpType SpeciesThermoInterpType\endlink
4  */
5 
6 // Copyright 2007 Sandia National Laboratories
7 
9 #include <vector>
10 #include <map>
11 
12 namespace Cantera
13 {
14 StatMech::StatMech()
15  : m_lowT(0.1), m_highT(1.0),
16  m_Pref(1.0E5), m_index(0) {}
17 
18 StatMech::StatMech(int n, doublereal tlow, doublereal thigh,
19  doublereal pref,
20  const doublereal* coeffs,
21  const std::string& my_name) :
22  m_lowT(tlow),
23  m_highT(thigh),
24  m_Pref(pref),
25  m_index(n),
26  sp_name(my_name)
27 {
28  // should error on zero -- cannot take ln(0)
29  if (m_lowT <= 0.0) {
30  throw CanteraError("Error in StatMech.cpp",
31  " Cannot take 0 tmin as input. \n\n");
32  }
33  buildmap();
34 }
35 
36 StatMech::StatMech(const StatMech& b) :
37  m_lowT(b.m_lowT),
38  m_highT(b.m_highT),
39  m_Pref(b.m_Pref),
40  m_index(b.m_index)
41 {
42 
43 }
44 
45 StatMech& StatMech::operator=(const StatMech& b)
46 {
47  if (&b != this) {
48  m_lowT = b.m_lowT;
49  m_highT = b.m_highT;
50  m_Pref = b.m_Pref;
51  m_index = b.m_index;
52  }
53  return *this;
54 }
55 
56 StatMech::~StatMech()
57 {
58 }
59 
60 SpeciesThermoInterpType*
61 StatMech::duplMyselfAsSpeciesThermoInterpType() const
62 {
63  return new StatMech(*this);
64 }
65 
66 doublereal StatMech::minTemp() const
67 {
68  return m_lowT;
69 }
70 
71 doublereal StatMech::maxTemp() const
72 {
73  return m_highT;
74 }
75 
76 doublereal StatMech::refPressure() const
77 {
78  return m_Pref;
79 }
80 
81 int StatMech::reportType() const
82 {
83  return STAT;
84 }
85 
86 size_t StatMech::speciesIndex() const
87 {
88  return m_index;
89 }
90 
91 int StatMech::buildmap()
92 {
93 
94  // build vector of strings
95  std::vector<std::string> SS;
96 
97  // now just iterate over name map to place each
98  // string in a key
99 
100  SS.push_back("Air");
101  SS.push_back("CPAir");
102  SS.push_back("Ar");
103  SS.push_back("Ar+");
104  SS.push_back("C");
105  SS.push_back("C+");
106  SS.push_back("C2");
107  SS.push_back("C2H");
108  SS.push_back("C2H2");
109  SS.push_back("C3");
110  SS.push_back("CF");
111  SS.push_back("CF2");
112  SS.push_back("CF3");
113  SS.push_back("CF4");
114  SS.push_back("CH");
115  SS.push_back("CH2");
116  SS.push_back("CH3");
117  SS.push_back("CH4");
118  SS.push_back("Cl");
119  SS.push_back("Cl2");
120  SS.push_back("CN");
121  SS.push_back("CN+");
122  SS.push_back("CO");
123  SS.push_back("CO+");
124  SS.push_back("CO2");
125  SS.push_back("F");
126  SS.push_back("F2");
127  SS.push_back("H");
128  SS.push_back("H+");
129  SS.push_back("H2");
130  SS.push_back("H2+");
131  SS.push_back("H2O");
132  SS.push_back("HCl");
133  SS.push_back("HCN");
134  SS.push_back("He");
135  SS.push_back("He+");
136  SS.push_back("N");
137  SS.push_back("N+");
138  SS.push_back("N2");
139  SS.push_back("CPN2");
140  SS.push_back("N2+");
141  SS.push_back("Ne");
142  SS.push_back("NCO");
143  SS.push_back("NH");
144  SS.push_back("NH+");
145  SS.push_back("NH2");
146  SS.push_back("NH3");
147  SS.push_back("NO");
148  SS.push_back("NO+");
149  SS.push_back("NO2");
150  SS.push_back("O");
151  SS.push_back("O+");
152  SS.push_back("O2");
153  SS.push_back("O2+");
154  SS.push_back("OH");
155  SS.push_back("Si");
156  SS.push_back("SiO");
157  SS.push_back("e");
158 
159  // now place each species in a map
160  size_t ii;
161  for (ii=0; ii < SS.size(); ii++) {
162  name_map[SS[ii]]=(new species);
163 
164  // init to crazy defaults
165  name_map[SS[ii]]->nvib = -1;
166  name_map[SS[ii]]->cfs = -1;
167  name_map[SS[ii]]->mol_weight = -1;
168 
169  name_map[SS[ii]]->theta[0] =0.0;
170  name_map[SS[ii]]->theta[1] =0.0;
171  name_map[SS[ii]]->theta[2] =0.0;
172  name_map[SS[ii]]->theta[3] =0.0;
173  name_map[SS[ii]]->theta[4] =0.0;
174  }
175 
176  // now set all species information
177 
178  // build Air
179  name_map["Air"]->cfs = 2.5;
180  name_map["Air"]->mol_weight=28.96;
181  name_map["Air"]->nvib=0;
182 
183  // build CPAir
184  name_map["CPAir"]->cfs = 2.5;
185  name_map["CPAir"]->mol_weight=28.96;
186  name_map["CPAir"]->nvib=0;
187 
188  // build Ar
189  name_map["Ar"]->cfs = 1.5;
190  name_map["Ar"]->mol_weight=39.944;
191  name_map["Ar"]->nvib=0;
192 
193  // build Ar+
194  name_map["Ar+"]->cfs = 1.5;
195  name_map["Ar+"]->mol_weight=39.94345;
196  name_map["Ar+"]->nvib=0;
197 
198  // build C
199  name_map["C"]->cfs = 1.5;
200  name_map["C"]->mol_weight=12.011;
201  name_map["C"]->nvib=0;
202 
203  // build C+
204  name_map["C+"]->cfs = 1.5;
205  name_map["C+"]->mol_weight=12.01045;
206  name_map["C+"]->nvib=0;
207 
208  // C2
209  name_map["C2"]->cfs=2.5;
210  name_map["C2"]->mol_weight=24.022;
211  name_map["C2"]->nvib=1;
212  name_map["C2"]->theta[0]=2.6687e3;
213 
214  // C2H
215  name_map["C2H"]->cfs=2.5;
216  name_map["C2H"]->mol_weight=25.03;
217  name_map["C2H"]->nvib=3;
218  name_map["C2H"]->theta[0]=5.20100e+03;
219  name_map["C2H"]->theta[1]=7.20000e+03;
220  name_map["C2H"]->theta[2]=2.66100e+03;
221 
222  // C2H2
223  name_map["C2H2"]->cfs=2.5;
224  name_map["C2H2"]->mol_weight=26.038;
225  name_map["C2H2"]->nvib=5;
226  name_map["C2H2"]->theta[0]=4.85290e+03;
227  name_map["C2H2"]->theta[1]=2.84000e+03;
228  name_map["C2H2"]->theta[2]=4.72490e+03;
229  name_map["C2H2"]->theta[3]=8.81830e+02;
230  name_map["C2H2"]->theta[4]=1.05080e+03;
231 
232  // C3
233  name_map["C3"]->cfs=2.5;
234  name_map["C3"]->mol_weight=36.033;
235  name_map["C3"]->nvib=3;
236  name_map["C3"]->theta[0]=1.84500e+03;
237  name_map["C3"]->theta[1]=7.78700e+02;
238  name_map["C3"]->theta[2]=3.11760e+03;
239 
240  // CF
241  name_map["CF"]->cfs=2.5;
242  name_map["CF"]->mol_weight=31.00940;
243  name_map["CF"]->nvib=1;
244  name_map["CF"]->theta[0]=1.88214e+03;
245 
246  // CF2
247  name_map["CF2"]->cfs=3;
248  name_map["CF2"]->mol_weight=50.00780;
249  name_map["CF2"]->nvib=3;
250  name_map["CF2"]->theta[0]=1.76120e+03;
251  name_map["CF2"]->theta[1]=9.56820e+02;
252  name_map["CF2"]->theta[2]=1.60000e+03;
253 
254  // CF3
255  name_map["CF3"]->cfs=3;
256  name_map["CF3"]->mol_weight=69.00620;
257  name_map["CF3"]->nvib=4;
258  name_map["CF3"]->theta[0]=1.56800e+03;
259  name_map["CF3"]->theta[1]=1.00900e+03;
260  name_map["CF3"]->theta[2]=1.81150e+03;
261  name_map["CF3"]->theta[3]=7.36680e+02;
262 
263  // CF4
264  name_map["CF4"]->cfs=3;
265  name_map["CF4"]->mol_weight=88.00460;
266  name_map["CF4"]->nvib=4;
267  name_map["CF4"]->theta[0]=1.30720e+03;
268  name_map["CF4"]->theta[1]=6.25892e+02;
269  name_map["CF4"]->theta[2]=1.84540e+03;
270  name_map["CF4"]->theta[3]=9.08950e+02;
271 
272  // CH
273  name_map["CH"]->cfs=2.5;
274  name_map["CH"]->mol_weight=13.01900;
275  name_map["CH"]->nvib=1;
276  name_map["CH"]->theta[0]=4.11290e+03;
277 
278  // CH2
279  name_map["CH2"]->cfs=3;
280  name_map["CH2"]->mol_weight=14.02700;
281  name_map["CH2"]->nvib=3;
282  name_map["CH2"]->theta[0]=4.31650e+03;
283  name_map["CH2"]->theta[1]=1.95972e+03;
284  name_map["CH2"]->theta[2]=4.60432e+03;
285 
286  // CH3
287  name_map["CH3"]->cfs=3;
288  name_map["CH3"]->mol_weight=15.03500;
289  name_map["CH3"]->nvib=4;
290  name_map["CH3"]->theta[0]=4.31650e+03;
291  name_map["CH3"]->theta[1]=8.73370e+02;
292  name_map["CH3"]->theta[2]=4.54960e+03;
293  name_map["CH3"]->theta[3]=2.01150e+03;
294 
295  // CH4
296  name_map["CH4"]->cfs=3;
297  name_map["CH4"]->mol_weight=16.04300;
298  name_map["CH4"]->nvib=4;
299  name_map["CH4"]->theta[0]=4.19660e+03;
300  name_map["CH4"]->theta[1]=2.20620e+03;
301  name_map["CH4"]->theta[2]=4.34450e+03;
302  name_map["CH4"]->theta[3]=1.88600e+03;
303 
304  // Cl
305  name_map["Cl"]->cfs=1.5;
306  name_map["Cl"]->mol_weight=35.45300;
307  name_map["Cl"]->nvib=0;
308 
309  // Cl2
310  name_map["Cl2"]->cfs=2.5;
311  name_map["Cl2"]->mol_weight=70.96;
312  name_map["Cl2"]->nvib=1;
313  name_map["Cl2"]->theta[0]=8.05355e+02;
314 
315  // CN
316  name_map["CN"]->cfs=2.5;
317  name_map["CN"]->mol_weight=26.01900;
318  name_map["CN"]->nvib=1;
319  name_map["CN"]->theta[0]=2.97610e+03;
320 
321  // CN+
322  name_map["CN+"]->cfs=2.5;
323  name_map["CN+"]->mol_weight=26.01845;
324  name_map["CN+"]->nvib=1;
325  name_map["CN+"]->theta[0]=2.92520e+03;
326 
327  // CO
328  name_map["CO"]->cfs=2.5;
329  name_map["CO"]->mol_weight=28.01100;
330  name_map["CO"]->nvib=1;
331  name_map["CO"]->theta[0]=3.12200e+03;
332 
333  // CO+
334  name_map["CO+"]->cfs=2.5;
335  name_map["CO+"]->mol_weight=28.01045;
336  name_map["CO+"]->nvib=1;
337  name_map["CO+"]->theta[0]=3.18800e+03;
338 
339  // CO2
340  name_map["CO2"]->cfs=2.5;
341  name_map["CO2"]->mol_weight=44.01100;
342  name_map["CO2"]->nvib=3;
343  name_map["CO2"]->theta[0]=1.91870e+03;
344  name_map["CO2"]->theta[1]=9.59660e+02;
345  name_map["CO2"]->theta[2]=3.38210e+03;
346 
347  // F
348  name_map["F"]->cfs=1.5;
349  name_map["F"]->mol_weight=18.99840;
350  name_map["F"]->nvib=0;
351 
352  // F2
353  name_map["F2"]->cfs=2.5;
354  name_map["F2"]->mol_weight=37.99680;
355  name_map["F2"]->nvib=1;
356  name_map["F2"]->theta[0]=1.32020e+03;
357 
358  // H
359  name_map["H"]->cfs=1.5;
360  name_map["H"]->mol_weight=1;
361  name_map["H"]->nvib=0;
362 
363  // H+
364  name_map["H+"]->cfs=1.5;
365  name_map["H+"]->mol_weight=1.00745;
366  name_map["H+"]->nvib=0;
367 
368  // H2
369  name_map["H2"]->cfs=2.5;
370  name_map["H2"]->mol_weight=2.01600;
371  name_map["H2"]->nvib=1;
372  name_map["H2"]->theta[0]=6.33140e+03;
373 
374  // H2+
375  name_map["H2+"]->cfs=2.5;
376  name_map["H2+"]->mol_weight=2.01545;
377  name_map["H2+"]->nvib=1;
378  name_map["H2+"]->theta[0]=3.34280e+03;
379 
380  // H2O
381  name_map["H2O"]->cfs=3.0;
382  name_map["H2O"]->mol_weight=18.01600;
383  name_map["H2O"]->nvib=3;
384  name_map["H2O"]->theta[0]=5.26130e+03;
385  name_map["H2O"]->theta[1]=2.29460e+03;
386  name_map["H2O"]->theta[2]=5.40395e+03;
387 
388  // HCl
389  name_map["HCl"]->cfs=2.5;
390  name_map["HCl"]->mol_weight=36.46100;
391  name_map["HCl"]->nvib=1;
392  name_map["HCl"]->theta[0]=4.30330e+03;
393 
394  // HCN
395  name_map["HCN"]->cfs=2.5;
396  name_map["HCN"]->mol_weight=27.02700;
397  name_map["HCN"]->nvib=3;
398  name_map["HCN"]->theta[0]=3.01620e+03;
399  name_map["HCN"]->theta[1]=1.02660e+03;
400  name_map["HCN"]->theta[2]=4.76450e+03;
401 
402  // He
403  name_map["He"]->cfs=1.5;
404  name_map["He"]->mol_weight=4.00300;
405  name_map["He"]->nvib=0;
406 
407  // He+
408  name_map["He+"]->cfs=1.5;
409  name_map["He+"]->mol_weight=4.00245;
410  name_map["He+"]->nvib=0;
411 
412  // N
413  name_map["N"]->cfs=1.5;
414  name_map["N"]->mol_weight=14.008;
415  name_map["N"]->nvib=0;
416 
417  // Ne
418  name_map["Ne"]->cfs=1.5;
419  name_map["Ne"]->mol_weight=20.17900;
420  name_map["Ne"]->nvib=0;
421 
422  // N+
423  name_map["N+"]->cfs=1.5;
424  name_map["N+"]->mol_weight=14.00745;
425  name_map["N+"]->nvib=0;
426 
427  // N2
428  name_map["N2"]->cfs=2.5;
429  name_map["N2"]->mol_weight=28.01600;
430  name_map["N2"]->nvib=1;
431  name_map["N2"]->theta[0]=3.39500e+03;
432 
433  // N2+
434  name_map["N2+"]->cfs=2.5;
435  name_map["N2+"]->mol_weight=28.01545;
436  name_map["N2+"]->nvib=1;
437  name_map["N2+"]->theta[0]=3.17580e+03;
438 
439  // CPN2
440  name_map["CPN2"]->cfs=2.5;
441  name_map["CPN2"]->mol_weight=28.01600;
442  name_map["CPN2"]->nvib=0;
443 
444  // NCO
445  name_map["NCO"]->cfs=2.5;
446  name_map["NCO"]->mol_weight=42.01900;
447  name_map["NCO"]->nvib=3;
448  name_map["NCO"]->theta[0]=1.83600e+03;
449  name_map["NCO"]->theta[1]=7.67100e+02;
450  name_map["NCO"]->theta[2]=2.76800e+03;
451 
452  // NH
453  name_map["NH"]->cfs=2.5;
454  name_map["NH"]->mol_weight=15.01600;
455  name_map["NH"]->nvib=1;
456  name_map["NH"]->theta[0]=4.72240e+03;
457 
458  // NH+
459  name_map["NH+"]->cfs=2.5;
460  name_map["NH+"]->mol_weight=15.01545;
461  name_map["NH+"]->nvib=0;
462 
463  // NH2
464  name_map["NH2"]->cfs=2.5;
465  name_map["NH2"]->mol_weight=16.02400;
466  name_map["NH2"]->nvib=0;
467 
468  // NH3
469  name_map["NH3"]->cfs=2.5;
470  name_map["NH3"]->mol_weight=17.03200;
471  name_map["NH3"]->nvib=4;
472  name_map["NH3"]->theta[0]=4.78100e+03;
473  name_map["NH3"]->theta[1]=1.47040e+03;
474  name_map["NH3"]->theta[2]=4.95440e+03;
475  name_map["NH3"]->theta[3]=2.34070e+03;
476 
477  // NO
478  name_map["NO"]->cfs=2.5;
479  name_map["NO"]->mol_weight=30.00800;
480  name_map["NO"]->nvib=1;
481  name_map["NO"]->theta[0]=2.81700e+03;
482 
483  // NO+
484  name_map["NO+"]->cfs=2.5;
485  name_map["NO+"]->mol_weight=30.00745;
486  name_map["NO+"]->nvib=1;
487  name_map["NO+"]->theta[0]=3.42100e+03;
488 
489  // NO2
490  name_map["NO2"]->cfs=3;
491  name_map["NO2"]->mol_weight=46.00800;
492  name_map["NO2"]->nvib=3;
493  name_map["NO2"]->theta[0]=1.07900e+03;
494  name_map["NO2"]->theta[1]=1.90000e+03;
495  name_map["NO2"]->theta[2]=2.32700e+03;
496 
497  // O
498  name_map["O"]->cfs=1.5;
499  name_map["O"]->mol_weight=16.000;
500  name_map["O"]->nvib=0;
501 
502  // O+
503  name_map["O+"]->cfs=1.5;
504  name_map["O+"]->mol_weight=15.99945;
505  name_map["O+"]->nvib=0;
506 
507  // O2
508  name_map["O2"]->cfs=2.5;
509  name_map["O2"]->mol_weight=32.00000;
510  name_map["O2"]->nvib=1;
511  name_map["O2"]->theta[0]=2.23900e+03;
512 
513  // O2
514  name_map["O2+"]->cfs=2.5;
515  name_map["O2+"]->mol_weight=31.99945;
516  name_map["O2+"]->nvib=1;
517  name_map["O2+"]->theta[0]=2.74120e+03;
518 
519  // OH
520  name_map["OH"]->cfs=2.5;
521  name_map["OH"]->mol_weight=17.00800;
522  name_map["OH"]->nvib=1;
523  name_map["OH"]->theta[0]=5.37820e+03;
524 
525  // Si
526  name_map["Si"]->cfs=1.5;
527  name_map["Si"]->mol_weight=28.08550;
528  name_map["Si"]->nvib=0;
529 
530  // SiO
531  name_map["SiO"]->cfs=2.5;
532  name_map["SiO"]->mol_weight=44.08550;
533  name_map["SiO"]->nvib=1;
534  name_map["SiO"]->theta[0]=1.78640e+03;
535 
536  // electron
537  name_map["e"]->cfs=1.5;
538  name_map["e"]->mol_weight=0.00055;
539  name_map["e"]->nvib=0;
540 
541  for (ii=0; ii < SS.size(); ii++) {
542  // check nvib was initalized for all species
543  if (name_map[SS[ii]]->nvib == -1) {
544  std::cout << name_map[SS[ii]]->nvib << std::endl;
545  throw CanteraError("Error in StatMech.cpp",
546  "nvib not initialized!. \n\n");
547 
548  } else {
549  // check that theta is initalized
550  for (int i=0; i<name_map[SS[ii]]->nvib; i++) {
551  if (name_map[SS[ii]]->theta[i] <= 0.0) {
552  throw CanteraError("Error in StatMech.cpp",
553  "theta not initalized!. \n\n");
554  }
555  }
556 
557  // check that no non-zero theta exist
558  // for any theta larger than nvib!
559  for (int i=name_map[SS[ii]]->nvib; i<5; i++) {
560  if (name_map[SS[ii]]->theta[i] != 0.0) {
561  std::string err = "bad theta value for "+SS[ii]+"\n";
562  throw CanteraError("StatMech.cpp",err);
563  }
564  } // done with for loop
565  }
566 
567  // check mol weight was initialized for all species
568  if (name_map[SS[ii]]->mol_weight == -1) {
569  std::cout << name_map[SS[ii]]->mol_weight << std::endl;
570  throw CanteraError("Error in StatMech.cpp",
571  "mol_weight not initialized!. \n\n");
572 
573  }
574 
575  // cfs was initialized for all species
576  if (name_map[SS[ii]]->cfs == -1) {
577  std::cout << name_map[SS[ii]]->cfs << std::endl;
578  throw CanteraError("Error in StatMech.cpp",
579  "cfs not initialized!. \n\n");
580 
581  }
582 
583  } // done with sanity checks
584 
585  // mark it zero, dude
586  return 0;
587 }
588 
589 void StatMech::updateProperties(const doublereal* tt,
590  doublereal* cp_R, doublereal* h_RT,
591  doublereal* s_R) const
592 {
593 
594  std::map<std::string,species*>::iterator it;
595 
596  // get species name, to gather species properties
597  species* s;
598 
599  // pointer to map location of particular species
600  if (name_map.find(sp_name) != name_map.end()) {
601  s = name_map.find(sp_name)->second;
602  } else {
603  //std::cout << sp_name << std::endl;
604  throw CanteraError("StatMech.cpp",
605  "species properties not found!. \n\n");
606  }
607 
608  // translational + rotational specific heat
609  doublereal ctr = 0.0;
610  double theta = 0.0;
611 
612  // 5/2 * R for molecules, 3/2 * R for atoms
613  ctr += GasConstant * s->cfs;
614 
615  // vibrational energy
616  for (int i=0; i< s->nvib; i++) {
617  theta = s->theta[i];
618  ctr += GasConstant * theta * (theta* exp(theta/tt[0])/(tt[0]*tt[0]))/((exp(theta/tt[0])-1) * (exp(theta/tt[0])-1));
619  }
620 
621  // Cp = Cv + R
622  doublereal cpdivR = ctr/GasConstant + 1;
623 
624  // ACTUNG: fix enthalpy and entropy
625  doublereal hdivRT = 0.0;
626  doublereal sdivR = 0.0;
627 
628  // return the computed properties in the location in the output
629  // arrays for this species
630  cp_R[m_index] = cpdivR;
631  h_RT[m_index] = hdivRT;
632  s_R [m_index] = sdivR;
633 }
634 
635 void StatMech::updatePropertiesTemp(const doublereal temp,
636  doublereal* cp_R, doublereal* h_RT,
637  doublereal* s_R) const
638 {
639  double tPoly[1];
640  tPoly[0] = temp;
641  updateProperties(tPoly, cp_R, h_RT, s_R);
642 }
643 
644 void StatMech::reportParameters(size_t& n, int& type,
645  doublereal& tlow, doublereal& thigh,
646  doublereal& pref,
647  doublereal* const coeffs) const
648 {
649  species* s;
650 
651  n = m_index;
652  type = STAT;
653  tlow = m_lowT;
654  thigh = m_highT;
655  pref = m_Pref;
656  for (int i = 0; i < 9; i++) {
657  coeffs[i] = 0.0;
658  }
659  doublereal temp = coeffs[0];
660  coeffs[1] = m_lowT;
661  coeffs[2] = m_highT;
662 
663  // get species name, to gather species properties
664  // pointer to map location of particular species
665  if (name_map.find(sp_name) != name_map.end()) {
666  s = name_map.find(sp_name)->second;
667  } else {
668  //std::cout << sp_name << std::endl;
669  throw CanteraError("StatMech.cpp",
670  "species properties not found!. \n\n");
671  }
672 
673  double theta = 0.0;
674  doublereal cvib = 0;
675 
676  // vibrational energy
677  for (int i=0; i< s->nvib; i++) {
678  theta = s->theta[i];
679  cvib += GasConstant * theta * (theta* exp(theta/temp)/(temp*temp))/((exp(theta/temp)-1) * (exp(theta/temp)-1));
680  }
681 
682  // load vibrational energy
683  coeffs[3] = GasConstant * s->cfs;
684  coeffs[4] = cvib;
685 
686 }
687 
688 void StatMech::modifyParameters(doublereal* coeffs)
689 {
690 }
691 
692 }