26 #include "grins_config.h"
40 #include "libmesh/getpot.h"
42 #ifdef GRINS_HAVE_ANTIOCH
43 int main(
int argc,
char* argv[] )
48 #ifdef GRINS_HAVE_ANTIOCH
53 std::cerr <<
"Error: Must specify input file." << std::endl;
57 GetPot input( argv[1] );
60 libMesh::UniquePtr<GRINS::AntiochMixture<Antioch::CEACurveFit<libMesh::Real> > >
61 antioch_ptr = builder.
build_antioch_mixture<Antioch::CEACurveFit<libMesh::Real> >(input,
"TestMaterial");
65 std::vector<double> mass_fractions( 5, 0.2 );
68 const double M_N2 = 14.00800*2*1.0e-3;
69 const double M_O2 = 16.0000*2*1.0e-3;
70 const double M_N = 14.00800*1.0e-3;
71 const double M_O = 16.0000*1.0e-3;
72 const double M_NO = 30.00800*1.0e-3;
74 double R_exact = Antioch::Constants::R_universal<double>()*( mass_fractions[0]/M_N2
75 + mass_fractions[1]/M_O2
76 + mass_fractions[3]/M_N
77 + mass_fractions[4]/M_O
78 + mass_fractions[2]/M_NO );
80 double M_exact = 1.0/( mass_fractions[0]/M_N2
81 + mass_fractions[1]/M_O2
82 + mass_fractions[3]/M_N
83 + mass_fractions[4]/M_O
84 + mass_fractions[2]/M_NO );
86 std::vector<double> X_exact(5, 0.0);
87 X_exact[0] = mass_fractions[0]*M_exact/M_N2;
88 X_exact[1] = mass_fractions[1]*M_exact/M_O2;
89 X_exact[3] = mass_fractions[3]*M_exact/M_N;
90 X_exact[4] = mass_fractions[4]*M_exact/M_O;
91 X_exact[2] = mass_fractions[2]*M_exact/M_NO;
95 const double tol = std::numeric_limits<double>::epsilon()*10;
97 if( std::fabs( (antioch.R_mix(mass_fractions) - R_exact)/R_exact) > tol )
99 std::cerr <<
"Error: Mismatch in mixture gas constant." << std::endl
100 << std::setprecision(16) << std::scientific
101 <<
"R = " << antioch.R_mix(mass_fractions) << std::endl
102 <<
"R_exact = " << R_exact << std::endl;
106 if( std::fabs( (antioch.M_mix(mass_fractions) - M_exact)/M_exact ) > tol )
108 std::cerr <<
"Error: Mismatch in mixture molar mass." << std::endl
109 << std::setprecision(16) << std::scientific
110 <<
"M = " << antioch.M_mix(mass_fractions) << std::endl
111 <<
"M_exact = " << M_exact << std::endl;
115 std::vector<double> X(5);
116 antioch.X( antioch.M_mix(mass_fractions), mass_fractions, X );
117 for(
unsigned int s = 0; s < 5; s++ )
119 if( std::fabs( (X[s] - X_exact[s])/X_exact[s]) > tol )
121 std::cerr <<
"Error: Mismatch in mole fraction for species " << s << std::endl
122 << std::setprecision(16) << std::scientific
123 <<
"X = " << X[s] << std::endl
124 <<
"X_exact = " << X_exact[s] << std::endl;
129 #else //GRINS_HAVE_ANTIOCH
131 int return_flag = 77;
libMesh::UniquePtr< AntiochMixture< KineticsThermoCurveFit > > build_antioch_mixture(const GetPot &input, const std::string &material)
Base class building Antioch mixture wrappers.
int main(int argc, char *argv[])
Wrapper class for storing state for Antioch thermo and kinetics.