24 "mode = CK_Mode, which is an outdated lower-order fit.");
27 for (
size_t k = 0; k <
m_nsp; k++) {
32 size_t nElectronSpecies = 0;
33 for (
size_t k = 0; k <
m_nsp; k++) {
41 if (nElectronSpecies > 1) {
43 "Found multiple electron species.");
47 for (
size_t k = 0; k <
m_nsp; k++) {
58 const vector<double> temp{300.0, 400.0, 500.0, 600.0, 800.0, 1000.0,
59 1200.0, 1500.0, 2000.0, 2500.0, 3000.0, 4000.0};
60 const vector<double> om11_O2{120.0, 107.0, 98.1, 92.1, 83.0, 77.0,
61 72.6, 67.9, 62.7, 59.3, 56.7, 53.8};
85 for (
size_t j = 0; j <
m_nsp; j++) {
86 for (
size_t k = j; k <
m_nsp; k++) {
126 double sum1 = 0.0, sum2 = 0.0;
139 vector<double> mobi(
m_nsp);
159 const size_t np = 50;
162 vector<double> tlog(np);
163 vector<double> w(np);
166 for (
size_t n = 0; n < np; n++) {
167 double t =
m_thermo->minTemp() + dt*n;
172 vector<double> c(degree + 1);
173 double err = 0.0, relerr = 0.0,
174 mxerr = 0.0, mxrelerr = 0.0;
176 vector<double> diff(np + 1);
178 for (
size_t k = 0; k <
m_nsp; k++) {
179 for (
size_t j = k; j <
m_nsp; j++) {
193 for (
size_t n = 0; n < np; n++) {
194 double t =
m_thermo->minTemp() + dt*n;
197 double sigma =
m_diam(j,k);
199 *
Pi * sigma * sigma;
203 if ((k ==
m_thermo->speciesIndex(
"O2-",
false) ||
204 j ==
m_thermo->speciesIndex(
"O2-",
false)) &&
205 (k ==
m_thermo->speciesIndex(
"O2",
false) ||
206 j ==
m_thermo->speciesIndex(
"O2",
false))) {
212 diff[n] = diffcoeff/pow(t, 1.5);
213 w[n] = 1.0/(diff[n]*diff[n]);
215 polyfit(degree, tlog, diff, w, c);
217 for (
size_t n = 0; n < np; n++) {
219 double t = exp(tlog[n]);
220 double pre = pow(t, 1.5);
222 fit = pre *
poly4(tlog[n], c);
225 mxerr = std::max(mxerr, fabs(err));
226 mxrelerr = std::max(mxrelerr, fabs(relerr));
228 size_t sum = k * (k + 1) / 2;
248 double alphaA_i =
m_alpha[i] * 1e30;
249 double alphaA_j =
m_alpha[j] * 1e30;
252 (1.0 + pow(2 * r_alpha, 2./3.)) * sqrt(alphaA_j));
256 double kappa = 0.095;
258 pow(alphaA_i * alphaA_j * (1.0 + 1.0 / xi), kappa);
267 if (epsilon != 0.0) {
275 m_disp[j] = exp(1.8846*log(alphaA_j)-0.4737)* 1e-50;
283 m_disp[i] = exp(1.8853*log(alphaA_i)+0.2682)* 1e-50;
285 m_disp[i] = exp(3.2246*log(alphaA_i)-3.2397)* 1e-50;
310 double logtstar = log(tstar);
314 "tstar = {} is smaller than 0.01", tstar);
315 }
else if (tstar <= 0.04) {
317 om11 = 2.97 - 12.0 * gamma
319 + 3.86 * gamma * gamma
320 - 6.45 * gamma * logtstar
321 - 0.275 * logtstar * logtstar
322 + 1.20 * gamma * gamma * logtstar
323 - 1.24 * gamma * logtstar * logtstar
324 - 0.164 * pow(logtstar,3);
325 }
else if (tstar <= 1000) {
327 om11 = 1.22 - 0.0343 * gamma
328 + (-0.769 + 0.232 * gamma) * logtstar
329 + (0.306 - 0.165 * gamma) * logtstar * logtstar
330 + (-0.0465 + 0.0388 * gamma) * pow(logtstar,3)
331 + (0.000614 - 0.00285 * gamma) * pow(logtstar,4)
332 + 0.000238 * pow(logtstar,5);
335 "tstar = {} is larger than 1000", tstar);
351 double mmw =
m_thermo->meanMolecularWeight();
356 for (
size_t k = 0; k <
m_nsp; k++) {
387 for (
size_t k = 0; k <
m_nsp; k++) {
400 mobi[k] = 1.0 / sum / p;
Monchick and Mason collision integrals.
Header file for class ThermoPhase, the base class for phases with thermodynamic properties,...
double getDouble(const string &key, double default_) const
If key exists, return it as a double, otherwise return default_.
Base class for exceptions thrown by Cantera classes.
void resize(size_t n, size_t m, double v=0.0) override
Resize the matrix.
virtual void setupCollisionParameters()
Setup parameters for a new kinetic-theory-based transport manager for low-density gases.
vector< double > m_mw
Local copy of the species molecular weights.
vector< double > m_molefracs
Vector of species mole fractions.
vector< double > m_quad_polar
Quadrupole polarizability.
bool m_visc_ok
Update boolean for mixture rule for the mixture viscosity.
DenseMatrix m_wratkj1
Holds square roots of molecular weight ratios.
virtual void fitDiffCoeffs(MMCollisionInt &integrals)
Generate polynomial fits to the binary diffusion coefficients.
vector< double > m_disp
Dispersion coefficient normalized by the square of the elementary charge [m⁵].
virtual void updateDiff_T()
Update the binary diffusion coefficients.
vector< double > m_sqvisc
vector of square root of species viscosities.
DenseMatrix m_wratjk
Holds square roots of molecular weight ratios.
bool m_bindiff_ok
Update boolean for the binary diffusivities at unit pressure.
DenseMatrix m_epsilon
The effective well depth [J] for (i,j) collisions.
DenseMatrix m_diam
hard-sphere diameter [m] for (i,j) collision
vector< double > m_spwork
work space length = m_nsp
int m_mode
Type of the polynomial fits to temperature.
virtual void updateViscosity_T()
Update the temperature-dependent viscosity terms.
double m_viscmix
Internal storage for the viscosity of the mixture [Pa·s].
vector< double > m_visc
vector of species viscosities [Pa·s].
DenseMatrix m_bdiff
Matrix of binary diffusion coefficients at the reference pressure and the current temperature Size is...
vector< vector< double > > m_diffcoeffs
Polynomial fits to the binary diffusivity of each species.
double m_kbt
Current value of Boltzmann constant times the temperature [J].
DenseMatrix m_reducedMass
This is the reduced mass [kg] of the interaction between species i and j.
bool m_viscwt_ok
Update boolean for the weighting factors for the mixture viscosity.
vector< double > m_alpha
Polarizability [m³] of each species in the phase.
DenseMatrix m_phi
Viscosity weighting function. size = m_nsp * m_nsp.
void setupCollisionIntegral()
Setup range for polynomial fits to collision integrals of Monchick & Mason .
void fitDiffCoeffs(MMCollisionInt &integrals) override
Generate polynomial fits to the binary diffusion coefficients.
size_t m_kElectron
index of electron
double thermalConductivity() override
Returns the mixture thermal conductivity [W/m/K].
vector< double > m_om11_O2
polynomial of the collision integral for O2/O2-
void init(shared_ptr< ThermoPhase > thermo, int mode) override
Initialize a transport manager.
double omega11_n64(const double tstar, const double gamma)
Collision integral of omega11 of n64 collision model.
void getMobilities(span< double > mobi) override
The mobilities for ions in gas.
DenseMatrix m_gamma
parameter of omega11 of n64
void setupN64()
setup parameters for n64 model
double viscosity() override
Viscosity [Pa·s] of the mixture.
void getMixDiffCoeffs(span< double > d) override
The mixture transport for ionized gas.
vector< size_t > m_kIon
index of ions (exclude electron.)
double electricalConductivity() override
The electrical conductivity [siemens/m].
vector< size_t > m_kNeutral
index of neutral species
vector< double > m_speciesCharge
electrical properties
Calculation of Collision integrals.
void update_T() override
Update the internal parameters whenever the temperature has changed.
bool m_spcond_ok
Update boolean for the species thermal conductivities.
double m_lambda
Internal storage for the calculated mixture thermal conductivity [W/m/K].
void updateCond_T()
Update the temperature dependent parts of the species thermal conductivities.
void update_C() override
Update the internal parameters whenever the concentrations have changed.
vector< double > m_cond
vector of species thermal conductivities [W/m/K]
bool m_condmix_ok
Update boolean for the mixture rule for the mixture thermal conductivity.
shared_ptr< ThermoPhase > m_thermo
pointer to the object representing the phase
size_t m_nsp
Number of species in the phase.
ThermoPhase & thermo()
Phase object.
AnyMap m_fittingErrors
Maximum errors associated with fitting pure species transport properties.
This file contains definitions for utility functions and text for modules, inputfiles and logging,...
auto poly5(D x, const C &c)
Templated evaluation of a polynomial of order 5.
auto poly4(D x, const C &c)
Evaluates a polynomial of order 4.
double polyfit(size_t deg, span< const double > x, span< const double > y, span< const double > w, span< double > p)
Fits a polynomial function to a set of data points.
const double Boltzmann
Boltzmann constant [J/K].
const double epsilon_0
Permittivity of free space [F/m].
const double ElectronCharge
Elementary charge [C].
Namespace for the Cantera kernel.
const size_t npos
index returned by functions to indicate "no position"
double getElementWeight(const string &ename)
Get the atomic weight of an element.
void multiply(const DenseMatrix &A, span< const double > b, span< double > prod)
Multiply A*b and return the result in prod. Uses BLAS routine DGEMV.
void checkArraySize(const char *procedure, size_t available, size_t required)
Wrapper for throwing ArraySizeError.
Contains declarations for string manipulation functions within Cantera.
Various templated functions that carry out common vector and polynomial operations (see Templated Arr...