23Gamma=3.72992471469e-5,
31static const double Ameth[] = {
32 -7.25929210183, 4.13766054566e2, -6.32167316855e3,
33 3.34015577724e5, -1.68253379982e7, 1.87884851902e-2, -1.18673201223e1,
34 2.09062618015e3, -4.07532656958e5, -5.73917603241e-5,4.37711441593e-2,
35 -4.38766500673, 1.13524630779e-5, -5.07028240949e-5, 2.28002199522e-2,
36 9.25611329590e-9, 1.33865662546e-10, -1.65439044196e-7, 1.81030980110e-10,
37 5.45753645958e5, -3.63192281933e7, 4.81463473761, 1.56633022620e5,
38 7.89977010972e-5, 1.39993881210e-2, -1.70656092212e-11, -4.55256623445e-5,
39 -2.29314170748e-14,8.31548197665e-12, 6.84673626259e-20,
40 -4.70845544152e-17, 5.21465091383e-16
43static const double Dmeth[]=
44{ -1.78860165e-1, 4.83847500e-2, -1.84898700e-2 };
46static const double Fmeth[]=
47{ 4.77748580, 1.76065363, -5.67888940e-1, 1.32786231 };
49static const double Gmeth[]=
50{ 1.34740610e3, 1.35512060e2, -2.93910458e1, 2.12774600, 2.44656600e3 };
52double methane::C(
int i,
double rt,
double rt2)
56 return Ameth[0] * T + Ameth[1] * sqrt(T) + Ameth[2] + (Ameth[3] + Ameth[4] * rt) * rt;
58 return Ameth[5] * T + Ameth[6] + rt * (Ameth[7] + Ameth[8] * rt);
60 return Ameth[9] * T + Ameth[10] + Ameth[11] * rt;
64 return rt*(Ameth[13] + Ameth[14]*rt);
68 return rt*(Ameth[16] + Ameth[17]*rt);
72 return rt2*(Ameth[19] + Ameth[20]*rt);
74 return rt2*(Ameth[21] + Ameth[22]*rt2);
76 return rt2*(Ameth[23] + Ameth[24]*rt);
78 return rt2*(Ameth[25] + Ameth[26]*rt2);
80 return rt2*(Ameth[27] + Ameth[28]*rt);
82 return rt2*(Ameth[29] + Ameth[30]*rt + Ameth[31]*rt2);
88double methane::Cprime(
int i,
double rt,
double rt2,
double rt3)
92 return Ameth[0] + 0.5*Ameth[1]/sqrt(T) - (Ameth[3] + 2.0*Ameth[4]*rt)*rt2;
94 return Ameth[5] - rt2*(Ameth[7] + 2.0*Ameth[8]*rt);
96 return Ameth[9] - Ameth[11]*rt2;
100 return -rt2*(Ameth[13] + 2.0*Ameth[14]*rt);
102 return -Ameth[15]*rt2;
104 return -rt2*(Ameth[16] + 2.0*Ameth[17]*rt);
106 return -2.0*Ameth[18]*rt3;
108 return -rt3*(2.0*Ameth[19] + 3.0*Ameth[20]*rt);
110 return -rt3*(2.0*Ameth[21] + 4.0*Ameth[22]*rt2);
112 return -rt3*(2.0*Ameth[23] + 3.0*Ameth[24]*rt);
114 return -rt3*(2.0*Ameth[25] + 4.0*Ameth[26]*rt2);
116 return -rt3*(2.0*Ameth[27] + 3.0*Ameth[28]*rt);
118 return -rt3*(2.0*Ameth[29] + 3.0*Ameth[30]*rt + 4.0*Ameth[31]*rt2);
124double methane::W(
int n,
double egrho)
126 return (n == 0 ? (1.0 - egrho)/(2.0*Gamma) :
127 (n*W(n-1, egrho) - 0.5*pow(Rho,2*n)*egrho)/Gamma);
130double methane::H(
int i,
double egrho)
132 return (i < 8 ? pow(Rho,i+2) : pow(Rho,2*i-13)*egrho);
135double methane::I(
int i,
double egrho)
137 return (i < 8 ? pow(Rho,i+1)/
double(i+1) : W(i-8, egrho));
145 double egrho = exp(-Gamma*Rho*Rho);
146 double t3 = pow(T,1.0/3.0);
149 for (
int i=0; i<14; i++) {
150 sum += (C(i, rt, rt2) - T*Cprime(i, rt, rt2, rt3))*I(i, egrho);
152 sum += T*(Gmeth[0] + 0.75*Gmeth[1]*t3 + 0.6*Gmeth[2]*t3*t3 + 0.5*Gmeth[3]*T)
153 + Gmeth[4]*beta/(exp(beta*rt) - 1.0) + u0;
154 return sum + m_energy_offset;
162 double egrho = exp(-Gamma*Rho*Rho);
163 double t3 = pow(T,1.0/3.0);
165 sum = s0 - R*log(Rho);
166 for (
int i=0; i<14; i++) {
167 sum -= Cprime(i, rt, rt2, rt3)*I(i, egrho);
169 sum += Gmeth[0]*log(T) + 3.0*Gmeth[1]*t3 + 1.5*Gmeth[2]*t3*t3 + Gmeth[3]*T
170 + Gmeth[4]*(beta*rt + beta*rt/(exp(beta*rt) - 1.0)
171 - log(exp(beta*rt) - 1.0));
172 return sum + m_entropy_offset;
179 double egrho = exp(-Gamma*Rho*Rho);
182 for (
int i=0; i<14; i++) {
183 P += C(i, rt, rt2)*H(i, egrho);
190 double x = (1.0 - Tt/T)/(1.0 - Tt/Tc);
192 if ((T < Tmn) || (T > Tc)) {
194 "Temperature out of range. T = {}", T);
196 result = Fmeth[0]*
x + Fmeth[1]*
x*
x + Fmeth[2]*
x*
x*
x +
197 Fmeth[3]*
x*pow(1-
x, alpha);
198 return exp(result)*Pt;
206 if ((T < Tmn) || (T > Tc)) {
208 "Temperature out of range. T = {}", T);
210 w = (Tc - T)/(Tc - Tt);
211 sum = Dmeth[0]*(1.0 - pow(w, 2.0/3.0)) + Dmeth[1]*(1.0 - pow(w, 4.0/3.0))
212 + Dmeth[2]*(1.0 - pow(w, 2));
213 result = pow(w,alpha1)*exp(sum);
Base class for exceptions thrown by Cantera classes.
double x()
Vapor mass fraction.
double Tmax() override
Maximum temperature for which the equation of state is valid.
double up() override
Internal energy of a single-phase state.
double ldens() override
Liquid density. Equation D3 from Reynolds TPSI.
double Tmin() override
Minimum temperature for which the equation of state is valid.
double Tcrit() override
Critical temperature [K].
double sp() override
Entropy of a single-phase state.
double MolWt() override
Molecular weight [kg/kmol].
double Vcrit() override
Critical specific volume [m^3/kg].
double Pcrit() override
Critical pressure [Pa].
double Psat() override
Saturation pressure. Equation S3 from Reynolds TPSI.
Namespace for the Cantera kernel.
Contains declarations for string manipulation functions within Cantera.