6 using namespace Cantera;
21 Gamma=3.72992471469e-5,
29 static const double Ameth[] = {
30 -7.25929210183, 4.13766054566e2, -6.32167316855e3,
31 3.34015577724e5, -1.68253379982e7, 1.87884851902e-2, -1.18673201223e1,
32 2.09062618015e3, -4.07532656958e5, -5.73917603241e-5,4.37711441593e-2,
33 -4.38766500673, 1.13524630779e-5, -5.07028240949e-5, 2.28002199522e-2,
34 9.25611329590e-9, 1.33865662546e-10, -1.65439044196e-7, 1.81030980110e-10,
35 5.45753645958e5, -3.63192281933e7, 4.81463473761, 1.56633022620e5,
36 7.89977010972e-5, 1.39993881210e-2, -1.70656092212e-11, -4.55256623445e-5,
37 -2.29314170748e-14,8.31548197665e-12, 6.84673626259e-20,
38 -4.70845544152e-17, 5.21465091383e-16
41 static const double Dmeth[]=
42 { -1.78860165e-1, 4.83847500e-2, -1.84898700e-2 };
44 static const double Fmeth[]=
45 { 4.77748580, 1.76065363, -5.67888940e-1, 1.32786231 };
47 static const double Gmeth[]=
48 { 1.34740610e3, 1.35512060e2, -2.93910458e1, 2.12774600, 2.44656600e3 };
50 double methane::C(
int i,
double rt,
double rt2)
54 return Ameth[0] * T + Ameth[1] * sqrt(T) + Ameth[2] + (Ameth[3] + Ameth[4] * rt) * rt;
56 return Ameth[5] * T + Ameth[6] + rt * (Ameth[7] + Ameth[8] * rt);
58 return Ameth[9] * T + Ameth[10] + Ameth[11] * rt;
62 return rt*(Ameth[13] + Ameth[14]*rt);
66 return rt*(Ameth[16] + Ameth[17]*rt);
70 return rt2*(Ameth[19] + Ameth[20]*rt);
72 return rt2*(Ameth[21] + Ameth[22]*rt2);
74 return rt2*(Ameth[23] + Ameth[24]*rt);
76 return rt2*(Ameth[25] + Ameth[26]*rt2);
78 return rt2*(Ameth[27] + Ameth[28]*rt);
80 return rt2*(Ameth[29] + Ameth[30]*rt + Ameth[31]*rt2);
86 double methane::Cprime(
int i,
double rt,
double rt2,
double rt3)
90 return Ameth[0] + 0.5*Ameth[1]/sqrt(T) - (Ameth[3] + 2.0*Ameth[4]*rt)*rt2;
92 return Ameth[5] - rt2*(Ameth[7] + 2.0*Ameth[8]*rt);
94 return Ameth[9] - Ameth[11]*rt2;
98 return -rt2*(Ameth[13] + 2.0*Ameth[14]*rt);
100 return -Ameth[15]*rt2;
102 return -rt2*(Ameth[16] + 2.0*Ameth[17]*rt);
104 return -2.0*Ameth[18]*rt3;
106 return -rt3*(2.0*Ameth[19] + 3.0*Ameth[20]*rt);
108 return -rt3*(2.0*Ameth[21] + 4.0*Ameth[22]*rt2);
110 return -rt3*(2.0*Ameth[23] + 3.0*Ameth[24]*rt);
112 return -rt3*(2.0*Ameth[25] + 4.0*Ameth[26]*rt2);
114 return -rt3*(2.0*Ameth[27] + 3.0*Ameth[28]*rt);
116 return -rt3*(2.0*Ameth[29] + 3.0*Ameth[30]*rt + 4.0*Ameth[31]*rt2);
122 double methane::W(
int n,
double egrho)
124 return (n == 0 ? (1.0 - egrho)/(2.0*Gamma) :
125 (n*W(n-1, egrho) - 0.5*pow(Rho,2*n)*egrho)/Gamma);
128 double methane::H(
int i,
double egrho)
130 return (i < 8 ? pow(Rho,i+2) : pow(Rho,2*i-13)*egrho);
133 double methane::I(
int i,
double egrho)
135 return (i < 8 ? pow(Rho,i+1)/
double(i+1) : W(i-8, egrho));
143 double egrho = exp(-Gamma*Rho*Rho);
144 double t3 = pow(T,1.0/3.0);
147 for (
int i=0; i<14; i++) {
148 sum += (C(i, rt, rt2) - T*Cprime(i, rt, rt2, rt3))*I(i, egrho);
151 sum += T*(Gmeth[0] + 0.75*Gmeth[1]*t3 + 0.6*Gmeth[2]*t3*t3 + 0.5*Gmeth[3]*T)
152 + Gmeth[4]*beta/(exp(beta*rt) - 1.0) + u0;
153 return sum + m_energy_offset;
161 double egrho = exp(-Gamma*Rho*Rho);
162 double t3 = pow(T,1.0/3.0);
164 sum = s0 - R*log(Rho);
165 for (
int i=0; i<14; i++) {
166 sum -= Cprime(i, rt, rt2, rt3)*I(i, egrho);
168 sum += Gmeth[0]*log(T) + 3.0*Gmeth[1]*t3 + 1.5*Gmeth[2]*t3*t3 + Gmeth[3]*T
169 + Gmeth[4]*(beta*rt + beta*rt/(exp(beta*rt) - 1.0)
170 - log(exp(beta*rt) - 1.0));
171 return sum + m_entropy_offset;
178 double egrho = exp(-Gamma*Rho*Rho);
181 for (
int i=0; i<14; i++) {
182 P += C(i, rt, rt2)*H(i, egrho);
187 double methane::Psat()
189 double x = (1.0 - Tt/T)/(1.0 - Tt/Tc);
191 if ((T < Tmn) || (T > Tc)) {
192 throw TPX_Error(
"methane::Psat",
193 "Temperature out of range. T = " +
fp2str(T));
195 result = Fmeth[0]*x + Fmeth[1]*x*x + Fmeth[2]*x*x*x +
196 Fmeth[3]*x*pow(1-x, alpha);
197 return exp(result)*Pt;
200 double methane::ldens()
205 if ((T < Tmn) || (T > Tc)) {
206 throw TPX_Error(
"methane::ldens",
207 "Temperature out of range. T = " +
fp2str(T));
209 w = (Tc - T)/(Tc - Tt);
210 sum = Dmeth[0]*(1.0 - pow(w, 2.0/3.0)) + Dmeth[1]*(1.0 - pow(w, 4.0/3.0))
211 + Dmeth[2]*(1.0 - pow(w, 2));
212 result = pow(w,alpha1)*exp(sum);
218 double methane::Tcrit()
222 double methane::Pcrit()
226 double methane::Vcrit()
230 double methane::Tmin()
234 double methane::Tmax()
238 char* methane::name()
240 return (
char*) m_name.c_str();
242 char* methane::formula()
244 return (
char*) m_formula.c_str();
246 double methane::MolWt()
std::string fp2str(const double x, const std::string &fmt)
Convert a double into a c++ string.
Contains declarations for string manipulation functions within Cantera.