31 #include "antioch_config.h"
35 #ifdef ANTIOCH_HAVE_EIGEN
36 #include "Eigen/Dense"
39 #ifdef ANTIOCH_HAVE_METAPHYSICL
40 #include "metaphysicl/numberarray.h"
43 #ifdef ANTIOCH_HAVE_VEXCL
44 #include "vexcl/vexcl.hpp"
61 #ifdef ANTIOCH_HAVE_GRVY
64 GRVY::GRVY_Timer_Class gt;
70 template <
typename Scalar,
typename Element>
71 int test_k(
const Element & k,
const Scalar & k_exact,
const Scalar & tol )
77 const Scalar rel_error = abs( (k - k_exact)/k_exact);
81 std::cerr << std::setprecision(20) << std::scientific
82 <<
"Error: Mismatch in thermal conductivity" << std::endl
83 <<
"k = " << k << std::endl
84 <<
"k_exact = " << k_exact << std::endl
85 <<
"rel_error = " << rel_error << std::endl
86 <<
"tol = " << tol << std::endl;
93 template <
typename PairScalars>
94 int vectester(
const PairScalars& example,
const std::string& testname)
99 std::vector<std::string> species_str_list;
100 const unsigned int n_species = 1;
101 species_str_list.reserve(n_species);
102 species_str_list.push_back(
"N2" );
104 const Scalar LJ_depth_N2 = 97.53L;
105 const Scalar Z_298 = 4.0L;
114 PairScalars mu = example;
115 PairScalars dss = example;
116 PairScalars rho = example;
117 PairScalars T = example;
118 for (
unsigned int tuple=0; tuple != ANTIOCH_N_TUPLES; ++tuple)
121 T[2*tuple+1] = 1600.1;
122 mu[2*tuple] = 3.14e-3;
123 mu[2*tuple+1] = 3.14e-3;
124 dss[2*tuple] = 5.23e-5;
125 dss[2*tuple+1] = 5.23e-5;
127 rho[2*tuple+1] = 1.4;
130 const Scalar k_exact0 = 3.19434291925996020233442116364270671873509961381739235964650684;
131 const Scalar k_exact1 = 3.2021908709042895344166123247634817043607657971633006497668;
135 #ifdef ANTIOCH_HAVE_GRVY
136 gt.BeginTimer(testname);
139 const PairScalars k_ps = k(0,mu,T,rho,dss);
141 #ifdef ANTIOCH_HAVE_GRVY
142 gt.EndTimer(testname);
145 const Scalar tol = (std::numeric_limits<Scalar>::epsilon()*10 < 7e-17)?
147 std::numeric_limits<Scalar>::epsilon()*10;
149 for (
unsigned int tuple=0; tuple != ANTIOCH_N_TUPLES; ++tuple)
152 return_flag =
test_k( k_ps[2*tuple], k_exact0, tol ) || return_flag;
153 return_flag =
test_k( k_ps[2*tuple+1], k_exact1, tol ) || return_flag;
164 returnval = returnval ||
165 vectester (std::valarray<float>(2*ANTIOCH_N_TUPLES),
"valarray<float>");
166 returnval = returnval ||
167 vectester (std::valarray<double>(2*ANTIOCH_N_TUPLES),
"valarray<double>");
168 returnval = returnval ||
169 vectester (std::valarray<long double>(2*ANTIOCH_N_TUPLES),
"valarray<ld>");
170 #ifdef ANTIOCH_HAVE_EIGEN
171 returnval = returnval ||
172 vectester (Eigen::Array<float, 2*ANTIOCH_N_TUPLES, 1>(),
"Eigen::ArrayXf");
173 returnval = returnval ||
174 vectester (Eigen::Array<double, 2*ANTIOCH_N_TUPLES, 1>(),
"Eigen::ArrayXd");
175 returnval = returnval ||
176 vectester (Eigen::Array<long double, 2*ANTIOCH_N_TUPLES, 1>(),
"Eigen::ArrayXld");
178 #ifdef ANTIOCH_HAVE_METAPHYSICL
179 returnval = returnval ||
180 vectester (MetaPhysicL::NumberArray<2*ANTIOCH_N_TUPLES, float> (0),
"NumberArray<float>");
181 returnval = returnval ||
182 vectester (MetaPhysicL::NumberArray<2*ANTIOCH_N_TUPLES, double> (0),
"NumberArray<double>");
183 returnval = returnval ||
184 vectester (MetaPhysicL::NumberArray<2*ANTIOCH_N_TUPLES, long double> (0),
"NumberArray<ld>");
186 #ifdef ANTIOCH_HAVE_VEXCL
187 vex::Context ctx_f (vex::Filter::All);
189 returnval = returnval ||
190 vectester (vex::vector<float> (ctx_f, 2*ANTIOCH_N_TUPLES),
"vex::vector<float>");
192 vex::Context ctx_d (vex::Filter::DoublePrecision);
194 returnval = returnval ||
195 vectester (vex::vector<double> (ctx_d, 2*ANTIOCH_N_TUPLES),
"vex::vector<double>");
198 #ifdef ANTIOCH_HAVE_GRVY
Conductivity based on kinetic theory of mixtures approximations.
int test_k(const Element &k, const Scalar &k_exact, const Scalar &tol)
Class storing chemical mixture properties.
int vectester(const PairScalars &example, const std::string &testname)