chemkinReader.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 \*---------------------------------------------------------------------------*/
25 
26 #include "chemkinReader.H"
27 #include "IFstream.H"
28 #include "atomicWeights.H"
29 #include "ReactionProxy.H"
30 #include "IrreversibleReaction.H"
31 #include "ReversibleReaction.H"
33 #include "ArrheniusReactionRate.H"
35 #include "FallOffReactionRate.H"
38 #include "TroeFallOffFunction.H"
39 #include "SRIFallOffFunction.H"
41 #include "JanevReactionRate.H"
44 
45 
46 /* * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * */
47 
48 const char* Foam::chemkinReader::reactionTypeNames[4] =
49 {
50  "irreversible",
51  "reversible",
52  "nonEquilibriumReversible",
53  "unknownReactionType"
54 };
55 
56 const char* Foam::chemkinReader::reactionRateTypeNames[8] =
57 {
58  "Arrhenius",
59  "thirdBodyArrhenius",
60  "unimolecularFallOff",
61  "chemicallyActivatedBimolecular",
62  "LandauTeller",
63  "Janev",
64  "powerSeries",
65  "unknownReactionRateType"
66 };
67 
68 const char* Foam::chemkinReader::fallOffFunctionNames[4] =
69 {
70  "Lindemann",
71  "Troe",
72  "SRI",
73  "unknownFallOffFunctionType"
74 };
75 
76 void Foam::chemkinReader::initReactionKeywordTable()
77 {
78  reactionKeywordTable_.insert("M", thirdBodyReactionType);
79  reactionKeywordTable_.insert("LOW", unimolecularFallOffReactionType);
80  reactionKeywordTable_.insert
81  (
82  "HIGH",
83  chemicallyActivatedBimolecularReactionType
84  );
85  reactionKeywordTable_.insert("TROE", TroeReactionType);
86  reactionKeywordTable_.insert("SRI", SRIReactionType);
87  reactionKeywordTable_.insert("LT", LandauTellerReactionType);
88  reactionKeywordTable_.insert("RLT", reverseLandauTellerReactionType);
89  reactionKeywordTable_.insert("JAN", JanevReactionType);
90  reactionKeywordTable_.insert("FIT1", powerSeriesReactionRateType);
91  reactionKeywordTable_.insert("HV", radiationActivatedReactionType);
92  reactionKeywordTable_.insert("TDEP", speciesTempReactionType);
93  reactionKeywordTable_.insert("EXCI", energyLossReactionType);
94  reactionKeywordTable_.insert("MOME", plasmaMomentumTransfer);
95  reactionKeywordTable_.insert("XSMI", collisionCrossSection);
96  reactionKeywordTable_.insert("REV", nonEquilibriumReversibleReactionType);
97  reactionKeywordTable_.insert("DUPLICATE", duplicateReactionType);
98  reactionKeywordTable_.insert("DUP", duplicateReactionType);
99  reactionKeywordTable_.insert("FORD", speciesOrderForward);
100  reactionKeywordTable_.insert("RORD", speciesOrderReverse);
101  reactionKeywordTable_.insert("UNITS", UnitsOfReaction);
102  reactionKeywordTable_.insert("END", end);
103 }
104 
105 
106 Foam::scalar Foam::chemkinReader::molecularWeight
107 (
108  const List<specieElement>& specieComposition
109 ) const
110 {
111  scalar molWt = 0.0;
112 
113  forAll(specieComposition, i)
114  {
115  label nAtoms = specieComposition[i].nAtoms();
116  const word& elementName = specieComposition[i].name();
117 
118  if (isotopeAtomicWts_.found(elementName))
119  {
120  molWt += nAtoms*isotopeAtomicWts_[elementName];
121  }
122  else if (atomicWeights.found(elementName))
123  {
124  molWt += nAtoms*atomicWeights[elementName];
125  }
126  else
127  {
129  << "Unknown element " << elementName
130  << " on line " << lineNo_-1 << nl
131  << " specieComposition: " << specieComposition
132  << exit(FatalError);
133  }
134  }
135 
136  return molWt;
137 }
138 
139 
140 void Foam::chemkinReader::checkCoeffs
141 (
142  const scalarList& reactionCoeffs,
143  const char* reactionRateName,
144  const label nCoeffs
145 ) const
146 {
147  if (reactionCoeffs.size() != nCoeffs)
148  {
150  << "Wrong number of coefficients for the " << reactionRateName
151  << " rate expression on line "
152  << lineNo_-1 << ", should be "
153  << nCoeffs << " but " << reactionCoeffs.size() << " supplied." << nl
154  << "Coefficients are "
155  << reactionCoeffs << nl
156  << exit(FatalError);
157  }
158 }
159 
160 template<class ReactionRateType>
161 void Foam::chemkinReader::addReactionType
162 (
163  const reactionType rType,
164  DynamicList<specieCoeffs>& lhs,
165  DynamicList<specieCoeffs>& rhs,
166  const ReactionRateType& rr
167 )
168 {
169  switch (rType)
170  {
171  case irreversible:
172  {
173  reactions_.append
174  (
175  new IrreversibleReaction<thermoPhysics, ReactionRateType>
176  (
177  ReactionProxy<thermoPhysics>
178  (
179  speciesTable_,
180  speciesThermoList(),
181  lhs.shrink(),
182  rhs.shrink()
183  ),
184  rr
185  )
186  );
187  }
188  break;
189 
190  case reversible:
191  {
192  reactions_.append
193  (
194  new ReversibleReaction<thermoPhysics, ReactionRateType>
195  (
196  ReactionProxy<thermoPhysics>
197  (
198  speciesTable_,
199  speciesThermoList(),
200  lhs.shrink(),
201  rhs.shrink()
202  ),
203  rr
204  )
205  );
206  }
207  break;
208 
209  default:
210 
211  if (rType < 3)
212  {
214  << "Reaction type " << reactionTypeNames[rType]
215  << " on line " << lineNo_-1
216  << " not handled by this function"
217  << exit(FatalError);
218  }
219  else
220  {
222  << "Unknown reaction type " << rType
223  << " on line " << lineNo_-1
224  << exit(FatalError);
225  }
226  }
227 }
228 
229 template<template<class, class> class PressureDependencyType>
230 void Foam::chemkinReader::addPressureDependentReaction
231 (
232  const reactionType rType,
233  const fallOffFunctionType fofType,
234  DynamicList<specieCoeffs>& lhs,
235  DynamicList<specieCoeffs>& rhs,
236  const scalarList& efficiencies,
237  const scalarList& k0Coeffs,
238  const scalarList& kInfCoeffs,
239  const HashTable<scalarList>& reactionCoeffsTable,
240  const scalar Afactor0,
241  const scalar AfactorInf,
242  const scalar RR
243 )
244 {
245  checkCoeffs(k0Coeffs, "k0", 3);
246  checkCoeffs(kInfCoeffs, "kInf", 3);
247 
248  switch (fofType)
249  {
250  case Lindemann:
251  {
252  addReactionType
253  (
254  rType,
255  lhs, rhs,
256  PressureDependencyType
257  <ArrheniusReactionRate, LindemannFallOffFunction>
258  (
259  ArrheniusReactionRate
260  (
261  Afactor0*k0Coeffs[0],
262  k0Coeffs[1],
263  k0Coeffs[2]/RR
264  ),
265  ArrheniusReactionRate
266  (
267  AfactorInf*kInfCoeffs[0],
268  kInfCoeffs[1],
269  kInfCoeffs[2]/RR
270  ),
271  LindemannFallOffFunction(),
272  thirdBodyEfficiencies(speciesTable_, efficiencies)
273  )
274  );
275  break;
276  }
277  case Troe:
278  {
279  scalarList TroeCoeffs
280  (
281  reactionCoeffsTable[fallOffFunctionNames[fofType]]
282  );
283 
284  if (TroeCoeffs.size() != 4 && TroeCoeffs.size() != 3)
285  {
287  << "Wrong number of coefficients for Troe rate expression"
288  " on line " << lineNo_-1 << ", should be 3 or 4 but "
289  << TroeCoeffs.size() << " supplied." << nl
290  << "Coefficients are "
291  << TroeCoeffs << nl
292  << exit(FatalError);
293  }
294 
295  if (TroeCoeffs.size() == 3)
296  {
297  TroeCoeffs.setSize(4);
298  TroeCoeffs[3] = great;
299  }
300 
301  addReactionType
302  (
303  rType,
304  lhs, rhs,
305  PressureDependencyType
306  <ArrheniusReactionRate, TroeFallOffFunction>
307  (
308  ArrheniusReactionRate
309  (
310  Afactor0*k0Coeffs[0],
311  k0Coeffs[1],
312  k0Coeffs[2]/RR
313  ),
314  ArrheniusReactionRate
315  (
316  AfactorInf*kInfCoeffs[0],
317  kInfCoeffs[1],
318  kInfCoeffs[2]/RR
319  ),
320  TroeFallOffFunction
321  (
322  TroeCoeffs[0],
323  TroeCoeffs[1],
324  TroeCoeffs[2],
325  TroeCoeffs[3]
326  ),
327  thirdBodyEfficiencies(speciesTable_, efficiencies)
328  )
329  );
330  break;
331  }
332  case SRI:
333  {
334  scalarList SRICoeffs
335  (
336  reactionCoeffsTable[fallOffFunctionNames[fofType]]
337  );
338 
339  if (SRICoeffs.size() != 5 && SRICoeffs.size() != 3)
340  {
342  << "Wrong number of coefficients for SRI rate expression"
343  " on line " << lineNo_-1 << ", should be 3 or 5 but "
344  << SRICoeffs.size() << " supplied." << nl
345  << "Coefficients are "
346  << SRICoeffs << nl
347  << exit(FatalError);
348  }
349 
350  if (SRICoeffs.size() == 3)
351  {
352  SRICoeffs.setSize(5);
353  SRICoeffs[3] = 1.0;
354  SRICoeffs[4] = 0.0;
355  }
356 
357  addReactionType
358  (
359  rType,
360  lhs, rhs,
361  PressureDependencyType
362  <ArrheniusReactionRate, SRIFallOffFunction>
363  (
364  ArrheniusReactionRate
365  (
366  Afactor0*k0Coeffs[0],
367  k0Coeffs[1],
368  k0Coeffs[2]/RR
369  ),
370  ArrheniusReactionRate
371  (
372  AfactorInf*kInfCoeffs[0],
373  kInfCoeffs[1],
374  kInfCoeffs[2]/RR
375  ),
376  SRIFallOffFunction
377  (
378  SRICoeffs[0],
379  SRICoeffs[1],
380  SRICoeffs[2],
381  SRICoeffs[3],
382  SRICoeffs[4]
383  ),
384  thirdBodyEfficiencies(speciesTable_, efficiencies)
385  )
386  );
387  break;
388  }
389  default:
390  {
392  << "Fall-off function type "
393  << fallOffFunctionNames[fofType]
394  << " on line " << lineNo_-1
395  << " not implemented"
396  << exit(FatalError);
397  }
398  }
399 }
400 
401 
402 void Foam::chemkinReader::addReaction
403 (
404  DynamicList<specieCoeffs>& lhs,
405  DynamicList<specieCoeffs>& rhs,
406  const scalarList& efficiencies,
407  const reactionType rType,
408  const reactionRateType rrType,
409  const fallOffFunctionType fofType,
410  const scalarList& ArrheniusCoeffs,
411  HashTable<scalarList>& reactionCoeffsTable,
412  const scalar RR
413 )
414 {
415  checkCoeffs(ArrheniusCoeffs, "Arrhenius", 3);
416 
417  scalarList nAtoms(elementNames_.size(), 0.0);
418 
419  forAll(lhs, i)
420  {
421  const List<specieElement>& specieComposition =
422  speciesComposition_[speciesTable_[lhs[i].index]];
423 
424  forAll(specieComposition, j)
425  {
426  label elementi = elementIndices_[specieComposition[j].name()];
427  nAtoms[elementi] +=
428  lhs[i].stoichCoeff*specieComposition[j].nAtoms();
429  }
430  }
431 
432  forAll(rhs, i)
433  {
434  const List<specieElement>& specieComposition =
435  speciesComposition_[speciesTable_[rhs[i].index]];
436 
437  forAll(specieComposition, j)
438  {
439  label elementi = elementIndices_[specieComposition[j].name()];
440  nAtoms[elementi] -=
441  rhs[i].stoichCoeff*specieComposition[j].nAtoms();
442  }
443  }
444 
445 
446  // Calculate the unit conversion factor for the A coefficient
447  // for the change from mol/cm^3 to kmol/m^3 concentration units
448  const scalar concFactor = 0.001;
449  scalar sumExp = 0.0;
450  forAll(lhs, i)
451  {
452  sumExp += lhs[i].exponent;
453  }
454  scalar Afactor = pow(concFactor, sumExp - 1.0);
455 
456  scalar AfactorRev = Afactor;
457 
458  if (rType == nonEquilibriumReversible)
459  {
460  sumExp = 0.0;
461  forAll(rhs, i)
462  {
463  sumExp += rhs[i].exponent;
464  }
465  AfactorRev = pow(concFactor, sumExp - 1.0);
466  }
467 
468  switch (rrType)
469  {
470  case Arrhenius:
471  {
472  if (rType == nonEquilibriumReversible)
473  {
474  const scalarList& reverseArrheniusCoeffs =
475  reactionCoeffsTable[reactionTypeNames[rType]];
476 
477  checkCoeffs(reverseArrheniusCoeffs, "reverse Arrhenius", 3);
478 
479  reactions_.append
480  (
481  new NonEquilibriumReversibleReaction
482  <
483  thermoPhysics,
484  ArrheniusReactionRate
485  >
486  (
487  ReactionProxy<thermoPhysics>
488  (
489  speciesTable_,
490  speciesThermoList(),
491  lhs.shrink(),
492  rhs.shrink()
493  ),
494  ArrheniusReactionRate
495  (
496  Afactor*ArrheniusCoeffs[0],
497  ArrheniusCoeffs[1],
498  ArrheniusCoeffs[2]/RR
499  ),
500  ArrheniusReactionRate
501  (
502  AfactorRev*reverseArrheniusCoeffs[0],
503  reverseArrheniusCoeffs[1],
504  reverseArrheniusCoeffs[2]/RR
505  )
506  )
507  );
508  }
509  else
510  {
511  addReactionType
512  (
513  rType,
514  lhs, rhs,
515  ArrheniusReactionRate
516  (
517  Afactor*ArrheniusCoeffs[0],
518  ArrheniusCoeffs[1],
519  ArrheniusCoeffs[2]/RR
520  )
521  );
522  }
523  break;
524  }
525  case thirdBodyArrhenius:
526  {
527  if (rType == nonEquilibriumReversible)
528  {
529  const scalarList& reverseArrheniusCoeffs =
530  reactionCoeffsTable[reactionTypeNames[rType]];
531 
532  checkCoeffs(reverseArrheniusCoeffs, "reverse Arrhenius", 3);
533 
534  reactions_.append
535  (
536  new NonEquilibriumReversibleReaction
537  <
538  thermoPhysics,
539  thirdBodyArrheniusReactionRate
540  >
541  (
542  ReactionProxy<thermoPhysics>
543  (
544  speciesTable_,
545  speciesThermoList(),
546  lhs.shrink(),
547  rhs.shrink()
548  ),
549  thirdBodyArrheniusReactionRate
550  (
551  Afactor*concFactor*ArrheniusCoeffs[0],
552  ArrheniusCoeffs[1],
553  ArrheniusCoeffs[2]/RR,
554  thirdBodyEfficiencies(speciesTable_, efficiencies)
555  ),
556  thirdBodyArrheniusReactionRate
557  (
558  AfactorRev*concFactor*reverseArrheniusCoeffs[0],
559  reverseArrheniusCoeffs[1],
560  reverseArrheniusCoeffs[2]/RR,
561  thirdBodyEfficiencies(speciesTable_, efficiencies)
562  )
563  )
564  );
565  }
566  else
567  {
568  addReactionType
569  (
570  rType,
571  lhs, rhs,
572  thirdBodyArrheniusReactionRate
573  (
574  Afactor*concFactor*ArrheniusCoeffs[0],
575  ArrheniusCoeffs[1],
576  ArrheniusCoeffs[2]/RR,
577  thirdBodyEfficiencies(speciesTable_, efficiencies)
578  )
579  );
580  }
581  break;
582  }
583  case unimolecularFallOff:
584  {
585  addPressureDependentReaction<FallOffReactionRate>
586  (
587  rType,
588  fofType,
589  lhs,
590  rhs,
591  efficiencies,
592  reactionCoeffsTable[reactionRateTypeNames[rrType]],
593  ArrheniusCoeffs,
594  reactionCoeffsTable,
595  concFactor*Afactor,
596  Afactor,
597  RR
598  );
599  break;
600  }
601  case chemicallyActivatedBimolecular:
602  {
603  addPressureDependentReaction<ChemicallyActivatedReactionRate>
604  (
605  rType,
606  fofType,
607  lhs,
608  rhs,
609  efficiencies,
610  ArrheniusCoeffs,
611  reactionCoeffsTable[reactionRateTypeNames[rrType]],
612  reactionCoeffsTable,
613  Afactor,
614  Afactor/concFactor,
615  RR
616  );
617  break;
618  }
619  case LandauTeller:
620  {
621  const scalarList& LandauTellerCoeffs =
622  reactionCoeffsTable[reactionRateTypeNames[rrType]];
623  checkCoeffs(LandauTellerCoeffs, "Landau-Teller", 2);
624 
625  if (rType == nonEquilibriumReversible)
626  {
627  const scalarList& reverseArrheniusCoeffs =
628  reactionCoeffsTable[reactionTypeNames[rType]];
629  checkCoeffs(reverseArrheniusCoeffs, "reverse Arrhenius", 3);
630 
631  const scalarList& reverseLandauTellerCoeffs =
632  reactionCoeffsTable
633  [
634  word(reactionTypeNames[rType])
635  + reactionRateTypeNames[rrType]
636  ];
637  checkCoeffs(LandauTellerCoeffs, "reverse Landau-Teller", 2);
638 
639  reactions_.append
640  (
641  new NonEquilibriumReversibleReaction
642  <
643  thermoPhysics,
644  LandauTellerReactionRate
645  >
646  (
647  ReactionProxy<thermoPhysics>
648  (
649  speciesTable_,
650  speciesThermoList(),
651  lhs.shrink(),
652  rhs.shrink()
653  ),
654  LandauTellerReactionRate
655  (
656  Afactor*ArrheniusCoeffs[0],
657  ArrheniusCoeffs[1],
658  ArrheniusCoeffs[2]/RR,
659  LandauTellerCoeffs[0],
660  LandauTellerCoeffs[1]
661  ),
662  LandauTellerReactionRate
663  (
664  AfactorRev*reverseArrheniusCoeffs[0],
665  reverseArrheniusCoeffs[1],
666  reverseArrheniusCoeffs[2]/RR,
667  reverseLandauTellerCoeffs[0],
668  reverseLandauTellerCoeffs[1]
669  )
670  )
671  );
672  }
673  else
674  {
675  addReactionType
676  (
677  rType,
678  lhs, rhs,
679  LandauTellerReactionRate
680  (
681  Afactor*ArrheniusCoeffs[0],
682  ArrheniusCoeffs[1],
683  ArrheniusCoeffs[2]/RR,
684  LandauTellerCoeffs[0],
685  LandauTellerCoeffs[1]
686  )
687  );
688  }
689  break;
690  }
691  case Janev:
692  {
693  const scalarList& JanevCoeffs =
694  reactionCoeffsTable[reactionRateTypeNames[rrType]];
695 
696  checkCoeffs(JanevCoeffs, "Janev", 9);
697 
698  addReactionType
699  (
700  rType,
701  lhs, rhs,
702  JanevReactionRate
703  (
704  Afactor*ArrheniusCoeffs[0],
705  ArrheniusCoeffs[1],
706  ArrheniusCoeffs[2]/RR,
707  FixedList<scalar, 9>(JanevCoeffs)
708  )
709  );
710  break;
711  }
712  case powerSeries:
713  {
714  const scalarList& powerSeriesCoeffs =
715  reactionCoeffsTable[reactionRateTypeNames[rrType]];
716 
717  checkCoeffs(powerSeriesCoeffs, "power-series", 4);
718 
719  addReactionType
720  (
721  rType,
722  lhs, rhs,
723  powerSeriesReactionRate
724  (
725  Afactor*ArrheniusCoeffs[0],
726  ArrheniusCoeffs[1],
727  ArrheniusCoeffs[2]/RR,
728  FixedList<scalar, 4>(powerSeriesCoeffs)
729  )
730  );
731  break;
732  }
733  case unknownReactionRateType:
734  {
736  << "Internal error on line " << lineNo_-1
737  << ": reaction rate type has not been set"
738  << exit(FatalError);
739  break;
740  }
741  default:
742  {
744  << "Reaction rate type index " << rrType
745  << " on line " << lineNo_-1
746  << " unknown"
747  << exit(FatalError);
748  }
749  }
750 
751 
752  forAll(nAtoms, i)
753  {
754  if (mag(nAtoms[i]) > imbalanceTol_)
755  {
757  << "Elemental imbalance of " << mag(nAtoms[i])
758  << " in " << elementNames_[i]
759  << " in reaction" << nl
760  << reactions_.last() << nl
761  << " on line " << lineNo_-1
762  << exit(FatalError);
763  }
764  }
765 
766  lhs.clear();
767  rhs.clear();
768  reactionCoeffsTable.clear();
769 }
770 
771 
772 void Foam::chemkinReader::read
773 (
774  const fileName& CHEMKINFileName,
775  const fileName& thermoFileName,
776  const fileName& transportFileName
777 )
778 {
781 
782  transportDict_.read(IFstream(transportFileName)());
783 
784  if (thermoFileName != fileName::null)
785  {
786  std::ifstream thermoStream(thermoFileName.c_str());
787 
788  if (!thermoStream)
789  {
791  << "file " << thermoFileName << " not found"
792  << exit(FatalError);
793  }
794 
795  yy_buffer_state* bufferPtr(yy_create_buffer(&thermoStream, yyBufSize));
796  yy_switch_to_buffer(bufferPtr);
797 
798  while (lex() != 0)
799  {}
800 
801  yy_delete_buffer(bufferPtr);
802 
803  lineNo_ = 1;
804  }
805 
806  std::ifstream CHEMKINStream(CHEMKINFileName.c_str());
807 
808  if (!CHEMKINStream)
809  {
811  << "file " << CHEMKINFileName << " not found"
812  << exit(FatalError);
813  }
814 
815  yy_buffer_state* bufferPtr(yy_create_buffer(&CHEMKINStream, yyBufSize));
816  yy_switch_to_buffer(bufferPtr);
817 
818  initReactionKeywordTable();
819 
820  while (lex() != 0)
821  {}
822 
823  yy_delete_buffer(bufferPtr);
824 }
825 
826 
827 // * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * //
828 
829 Foam::chemkinReader::chemkinReader
830 (
831  const fileName& CHEMKINFileName,
832  const fileName& transportFileName,
833  const fileName& thermoFileName,
834  const bool newFormat
835 )
836 :
837  lineNo_(1),
838  specieNames_(10),
839  speciesTable_(),
840  newFormat_(newFormat),
841  imbalanceTol_(rootSmall)
842 {
843  read(CHEMKINFileName, thermoFileName, transportFileName);
844 }
845 
846 
847 // ************************************************************************* //
#define forAll(list, i)
Loop across all elements in list.
Definition: UList.H:434
Macros for easy insertion into run-time selection tables.
bool insert(const Key &, const T &newElmt)
Insert a new hashedEntry.
Definition: HashTableI.H:80
bool found(const Key &) const
Return true if hashedEntry is found in table.
Definition: HashTable.C:113
static scalar TlowDefault
Default temperature limits of applicability of reaction rates.
Definition: Reaction.H:79
static scalar ThighDefault
Definition: Reaction.H:79
static const fileName null
An empty fileName.
Definition: fileName.H:97
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:306
void read(Istream &, label &, const dictionary &)
In-place read with dictionary lookup.
const dimensionedScalar RR
Universal gas constant: default SI units: [J/kmol/K].
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:124
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:59
List< scalar > scalarList
A List of scalars.
Definition: scalarList.H:50
dimensionedScalar pow(const dimensionedScalar &ds, const dimensionedScalar &expt)
dimensioned< scalar > mag(const dimensioned< Type > &)
atomicWeightTable atomicWeights
error FatalError
static const char nl
Definition: Ostream.H:260