CG  Version 25
Reactions.h
Go to the documentation of this file.
1 #ifndef REACTIONS
2 #define REACTIONS
3 //
4 // Define a base class for general Reactions.
5 //
6 
7 #include "MaterialProperties.h"
8 #include "Overture.h"
9 #include "display.h"
10 
11 class Reactions
12 {
13  public:
14 
15  enum Mechanism
16  {
21 
22  Reactions();
23  virtual ~Reactions();
24 
25  void useScaledVariables(bool trueOrFalse=TRUE );
26  bool usingScaledVariables() const {return variablesScaled;}
27 
28  // ---------These next functions must be defined by any derived class --------------------
29  virtual void reactionRates( const real & teS, const RealArray & kb, const RealArray & kf )=0;
30  virtual void chemicalSource(const real & rhoS, const real & teS, const RealArray & y,
31  const RealArray & sigma, const RealArray & sy=Overture::nullRealArray() )=0;
32  // this next one must be defined to avoid hiding the base class, it can just call the base class
33  // if there is no concern for efficiency
34  virtual void chemicalSource(const RealArray & rhoS, const RealArray & teS, const RealArray & y,
35  const RealArray & sigma, const RealArray & sy=Overture::nullRealArray() );
36  // ------------------------------------------------------------------------------------------
37 
38  // ++++++ these next functions must be defined by any class not using the MaterialProperties Class +++++++++
39  // molecular weight of a species (kg/mole)
40  virtual real mw(const int & species ) const;
41  // absolute enthalpy of a species
42  virtual real h(const int species, const real teS );
43  virtual RealArray & h(const int species, const RealArray & teS, const RealArray & h0 );
44  // cp of a species
45  virtual real cp(const int species, const real teS );
46  virtual RealArray & cp(const int species, const RealArray & teS, const RealArray & cp0 );
47  virtual RealArray & entropy(const RealArray & teS, const RealArray & pS, const RealArray & y,
48  const RealArray & entropy );
49 
50  // new forms:
51  virtual RealArray & h(const RealArray & teS, const RealArray & hi );
52  virtual RealArray & cp(const RealArray & teS, const RealArray & cpi );
53  virtual RealArray & sigmaFromPTY( const RealArray & pS,
54  const RealArray & teS,
55  const RealArray & y,
56  const RealArray & sigmai );
57  virtual RealArray & sigmaFromRPTY(const RealArray & rhoS,
58  const RealArray & pS,
59  const RealArray & teS,
60  const RealArray & y,
61  const RealArray & sigmai );
62  virtual void chemistrySource( const RealArray & pS, const RealArray & teS, const RealArray & y,
63  const RealArray & rhoS, const RealArray & source );
64 
65  RealArray & massFractionToMoleFraction( const RealArray & y, const RealArray & x );
66 
67  // mixture viscosity: (note: pass mole-fractions)
68  virtual RealArray & viscosity(const RealArray & teS, const RealArray & x, const RealArray & eta );
69  // mixture thermal conductivity (note: pass mole-fractions)
70  virtual RealArray & thermalConductivity(const RealArray & teS, const RealArray & x, const RealArray & lambda );
71  // mixture diffusion coefficients (note: pass mole-fractions)
72  virtual RealArray & diffusion(const RealArray & pS, const RealArray & teS, const RealArray & x,
73  const RealArray & lambda );
74 
75  // evaluate p from p=rho*R*T
76  int pFromRTY( const RealArray & rho,const RealArray & teS,const RealArray & y, RealArray & pS ) const;
77  // evaluate rho from rho=p/(R*T)
78  int rFromPTY( const RealArray & pS, const RealArray & teS, const RealArray & y, RealArray & rho ) const;
79 
80 
81  // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
82 
83  int numberOfElements() const { return numberOfElements_; }
84  int numberOfSpecies() const { return numberOfSpecies_; }
85  int numberOfReactions() const { return numberOfReactions_; }
86  aString getName( const int & species ) const; // return the name of a a species
87 
88  // set scaling factors
89  int setScaleForRho( real rho0 );
90  int setScaleForT( real te0 );
91  int setScaleForP( real p0, real pStatic );
92  int setScaleForL( real l0 );
93  int setScaleForU( real u0 );
94 
95  virtual void setScales(real rho0=1.,
96  real te0=1.,
97  real pStatic=1.,
98  real l0=1.,
99  real u0=1.,
100  real p0=-1. );
101 
102  real getScaleForRho() const;
103  real getScaleForT() const;
104  real getScaleForP() const;
105  real getScaleForStaticP() const;
106  real getScaleForL() const;
107  real getScaleForU() const;
108  real getScaleForR() const;
109  void getScales(real & rho0,
110  real & te0,
111  real & pStatic,
112  real & l0,
113  real & u0,
114  real & p0 ) const;
115 
116  void setPressureLevel(const real & pressureLevel); // scaled pressure is (pScaled + pressureLevel)*p0 = p
117 
118  void setPressureIsConstant( const bool & trueOrFalse=TRUE ); // for constant pressure reactions
119  bool getPressureIsConstant();
120 
121  // virtual int solveImplicitForRhoTemperatureAndSpecies();
122 
123  // Here are some utility functions applicable to all classes derived from this one.
124  virtual void chemistrySourceAndJacobian( const RealArray & pS,
125  const RealArray & teS,
126  const RealArray & y,
127  const RealArray & rhoS,
128  const RealArray & source,
129  const RealArray & sy );
130 
131  // Solve backward Euler approximations to the Temperature and species equations, given the pressure
132  virtual int solveImplicitForRTYGivenP(RealArray & u,
133  const RealArray & rhs,
134  const int & rc, const int & pc, const int & tc, const int & sc,
135  const Index & I1,
136  const Index & I2,
137  const Index & I3,
138  const real & dt,
139  bool equilibrium = FALSE );
140 
141  // Solve backward Euler approximations to the species equations, given rho, T and p
142  virtual int solveImplicitForYGivenRTP(RealArray & u,
143  const RealArray & rhs,
144  const int & rc, const int & pc, const int & tc, const int & sc,
145  const Index & I1,
146  const Index & I2,
147  const Index & I3,
148  const real & dt,
149  bool equilibrium = FALSE );
150 
151  // Solve backward Euler approximations to the T, species equations, given rho
152  virtual int solveImplicitForPTYGivenR(RealArray & u,
153  const RealArray & rhs,
154  const int & rc, const int & pc, const int & tc, const int & sc,
155  const Index & I1,
156  const Index & I2,
157  const Index & I3,
158  const real & dt,
159  bool equilibrium = FALSE );
160 
161  virtual void computeEigenvaluesOfTheChemicalSourceJacobian(const real rhoS,
162  const RealArray & y,
163  const RealArray & sigma,
164  const RealArray & sy,
165  const RealArray & reLambda,
166  const RealArray & imLambda );
167 
168  // evaluate at an array of values
169  void computeEigenvaluesOfTheChemicalSourceJacobian(const RealArray & rhoS,
170  const RealArray & teS,
171  const RealArray & y,
172  const RealArray & reLambda,
173  const RealArray & imLambda );
175 
177 
178  static int debug;
179  protected:
181  RealArray molecularWeight;
182 
183  real rho0,pStatic,p0,te0,l0,u0,R0; // for scaling
185 
186  aString *speciesName;
190 
192 
193 
194 };
195 
196 
197 #endif // REACTIONS