26 #include "grins_config.h"
39 #include "libmesh/getpot.h"
41 #ifdef GRINS_HAVE_ANTIOCH
42 int main(
int argc,
char* argv[] )
47 #ifdef GRINS_HAVE_ANTIOCH
52 std::cerr <<
"Error: Must specify input file." << std::endl;
56 GetPot input( argv[1] );
60 std::vector<double> mass_fractions( 5, 0.2 );
63 const double M_N2 = 14.00800*2*1.0e-3;
64 const double M_O2 = 16.0000*2*1.0e-3;
65 const double M_N = 14.00800*1.0e-3;
66 const double M_O = 16.0000*1.0e-3;
67 const double M_NO = 30.00800*1.0e-3;
69 double R_exact = Antioch::Constants::R_universal<double>()*( mass_fractions[0]/M_N2
70 + mass_fractions[1]/M_O2
71 + mass_fractions[3]/M_N
72 + mass_fractions[4]/M_O
73 + mass_fractions[2]/M_NO );
75 double M_exact = 1.0/( mass_fractions[0]/M_N2
76 + mass_fractions[1]/M_O2
77 + mass_fractions[3]/M_N
78 + mass_fractions[4]/M_O
79 + mass_fractions[2]/M_NO );
81 std::vector<double> X_exact(5, 0.0);
82 X_exact[0] = mass_fractions[0]*M_exact/M_N2;
83 X_exact[1] = mass_fractions[1]*M_exact/M_O2;
84 X_exact[3] = mass_fractions[3]*M_exact/M_N;
85 X_exact[4] = mass_fractions[4]*M_exact/M_O;
86 X_exact[2] = mass_fractions[2]*M_exact/M_NO;
90 const double tol = std::numeric_limits<double>::epsilon()*10;
92 if( std::fabs( (antioch.
R_mix(mass_fractions) - R_exact)/R_exact) > tol )
94 std::cerr <<
"Error: Mismatch in mixture gas constant." << std::endl
95 << std::setprecision(16) << std::scientific
96 <<
"R = " << antioch.
R_mix(mass_fractions) << std::endl
97 <<
"R_exact = " << R_exact << std::endl;
101 if( std::fabs( (antioch.
M_mix(mass_fractions) - M_exact)/M_exact ) > tol )
103 std::cerr <<
"Error: Mismatch in mixture molar mass." << std::endl
104 << std::setprecision(16) << std::scientific
105 <<
"M = " << antioch.
M_mix(mass_fractions) << std::endl
106 <<
"M_exact = " << M_exact << std::endl;
110 std::vector<double> X(5);
111 antioch.
X( antioch.
M_mix(mass_fractions), mass_fractions, X );
112 for(
unsigned int s = 0; s < 5; s++ )
114 if( std::fabs( (X[s] - X_exact[s])/X_exact[s]) > tol )
116 std::cerr <<
"Error: Mismatch in mole fraction for species " << s << std::endl
117 << std::setprecision(16) << std::scientific
118 <<
"X = " << X[s] << std::endl
119 <<
"X_exact = " << X_exact[s] << std::endl;
124 #else //GRINS_HAVE_ANTIOCH
126 int return_flag = 77;
libMesh::Real M_mix(const std::vector< libMesh::Real > &mass_fractions) const
Mixture molar mass (molecular weight), [kg/mol].
libMesh::Real R_mix(const std::vector< libMesh::Real > &mass_fractions) const
Mixture gas constant, [J/kg-K].
int main(int argc, char *argv[])
Wrapper class for storing state for Antioch thermo and kinetics.
libMesh::Real X(unsigned int species, libMesh::Real M, libMesh::Real mass_fraction) const
Species mole fraction, unitless.