SootLib
Loading...
Searching...
No Matches
growthModel_HACA.cc
Go to the documentation of this file.
2#include "sootDefs.h"
3#include "sootModel.h" // for the SM back pointer
4
5using namespace std;
6using namespace soot;
7
9
11
12 growthRxnRatios[(int)gasSp::O2] = 0;
13 growthRxnRatios[(int)gasSp::OH] = -1;
14 growthRxnRatios[(int)gasSp::H] = -1;
15 growthRxnRatios[(int)gasSp::H2] = 1;
18 growthRxnRatios[(int)gasSp::CO] = 0;
19 growthRxnRatios[(int)gasSp::C] = 2;
20
22}
23
62
64
65 double M0 = state.sootVar[0]; // #/m3
66 double M1 = state.sootVar[1]; // kg/m3
67
69 M0 = 0.0;
70 M1 = 0.0;
71 for (size_t k=0; k<state.nsoot; k++) {
72 M0 += state.sootVar[k];
73 M1 += state.sootVar[k]*SM->mBins[k];
74 }
75 }
76
77 //---------- calculate alpha, other constants
78
79 double RT = 1.9872036E-3 * state.T; // R (=) kcal/mol
80 double chi_CH = 2.3E15; // C-H sites/cm^2
81 double a_param = 33.167 - 0.0154 * state.T; // a parameter for calculating alpha
82 double b_param = -2.5786 + 0.00112 * state.T; // b parameter for calculating alpha
83
84 //---------- calculate raw HACA reaction rates
85
86 double fR1 = 4.2E13 * exp(-13.0 / RT) * state.getGasSpC(gasSp::H) / 1000;
87 double rR1 = 3.9E12 * exp(-11.0 / RT) * state.getGasSpC(gasSp::H2) / 1000;
88 double fR2 = 1.0E10 * pow(state.T, 0.734) * exp(-1.43 / RT) * state.getGasSpC(gasSp::OH) / 1000;
89 double rR2 = 3.68E8 * pow(state.T, 1.139) * exp(-17.1 / RT) * state.getGasSpC(gasSp::H2O) / 1000;
90 double fR3 = 2.0E13 * state.getGasSpC(gasSp::H) / 1000;
91 double fR4 = 8.00E7 * pow(state.T, 1.56) * exp(-3.8 / RT) * state.getGasSpC(gasSp::C2H2) / 1000;
92 double fR5 = 2.2E12 * exp(-7.5 / RT) * state.getGasSpC(gasSp::O2) / 1000;
93
94 //---------- Steady state calculation of chi for soot radical; see Frenklach 1990 pg. 1561
95
96 double denom = rR1 + rR2 + fR3 + fR4 + fR5;
97 double chi_S = denom == 0 ? 0 : 2 * chi_CH * (fR1 + fR2) / denom; // C-* sites/cm^2
98
99 double alpha = 1.0;
100 if (M0 > 0)
101 alpha = tanh(a_param/log10(M1/M0) + b_param); // alpha = fraction of available surface sites
102 if (alpha < 0) alpha=1.0;
103
104 double rxns_s = fR4*alpha*chi_S * 1E4; // reactions at sites per m2 per s.
105 return 2.0*rxns_s*gasSpMW[(int)gasSp::C]/Na; // kg/m2/s: each site: 2.0: each site gets 2 Carbons
106}
double getGrowthSootRate(const state &state) const override
std::vector< double > growthRxnRatios
mole ratios for gas species rate coupling
Definition: growthModel.h:26
growthMech mechType
identity of the type of growth (child)
Definition: growthModel.h:24
sootModel * SM
back pointer to soot model
Definition: growthModel.h:23
std::vector< double > mBins
mass in sections for the sectional model
Definition: sootModel.h:41
psdMech psdMechType
one of MONO, LOGN, QMOM, MOMIC, SECT, etc.
Definition: sootModel.h:37
double T
gas temperature (K)
Definition: state.h:23
double getGasSpC(gasSp sp) const
Definition: state.h:46
std::vector< double > sootVar
soot variables (moments or # in sections>
Definition: state.h:32
int nsoot
# of soot variables
Definition: state.h:31
Definition: sootDefs.h:11
const double Na
Avogadro's constant: #/kmol.
Definition: sootDefs.h:15
const std::vector< double > gasSpMW
(kg/kmol); make sure the order corresponds to the gasSp enum
Definition: sootDefs.h:74