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.