14 #ifdef GRINS_HAVE_ANTIOCH
15 #include "antioch_config.h"
16 #include "antioch/sutherland_viscosity.h"
17 #include "antioch/blottner_viscosity.h"
18 #include "antioch/sutherland_parsing.h"
19 #include "antioch/blottner_parsing.h"
20 #include "antioch/eucken_thermal_conductivity.h"
21 #include "antioch/constant_lewis_diffusivity.h"
22 #endif // GRINS_HAVE_ANTIOCH
29 template<
template<
typename,
typename>
class DerivedPhysics>
31 const std::string& physics_name )
33 std::string core_physics = this->find_core_physics_name(physics_name);
35 std::string thermochem_lib;
40 libMesh::UniquePtr<Physics> new_physics;
42 if( thermochem_lib ==
"cantera" )
44 #ifdef GRINS_HAVE_CANTERA
45 new_physics.reset(
new DerivedPhysics<CanteraMixture,CanteraEvaluator>(physics_name,input));
47 libmesh_error_msg(
"Error: Cantera not enabled in this configuration. Reconfigure using --with-cantera option.");
49 #endif // GRINS_HAVE_CANTERA
52 else if( thermochem_lib ==
"antioch" )
54 #ifdef GRINS_HAVE_ANTIOCH
56 std::string transport_model;
57 std::string thermo_model;
58 std::string viscosity_model;
59 std::string conductivity_model;
60 std::string diffusivity_model;
70 if( transport_model == std::string(
"mixture_averaged") )
72 if( (thermo_model == std::string(
"stat_mech")) &&
73 (diffusivity_model == std::string(
"constant_lewis")) &&
74 (conductivity_model == std::string(
"eucken")) &&
75 (viscosity_model == std::string(
"sutherland")) )
78 Antioch::SutherlandViscosity<libMesh::Real>,
79 Antioch::EuckenThermalConductivity<Antioch::StatMechThermodynamics<libMesh::Real> >,
80 Antioch::ConstantLewisDiffusivity<libMesh::Real> >,
82 Antioch::SutherlandViscosity<libMesh::Real>,
83 Antioch::EuckenThermalConductivity<Antioch::StatMechThermodynamics<libMesh::Real> >,
84 Antioch::ConstantLewisDiffusivity<libMesh::Real> > >
85 (physics_name,input) );
87 else if( (thermo_model == std::string(
"stat_mech")) &&
88 (diffusivity_model == std::string(
"constant_lewis")) &&
89 (conductivity_model == std::string(
"eucken")) &&
90 (viscosity_model == std::string(
"blottner")) )
93 Antioch::BlottnerViscosity<libMesh::Real>,
94 Antioch::EuckenThermalConductivity<Antioch::StatMechThermodynamics<libMesh::Real> >,
95 Antioch::ConstantLewisDiffusivity<libMesh::Real> >,
97 Antioch::BlottnerViscosity<libMesh::Real>,
98 Antioch::EuckenThermalConductivity<Antioch::StatMechThermodynamics<libMesh::Real> >,
99 Antioch::ConstantLewisDiffusivity<libMesh::Real> > >(physics_name,input) );
101 else if( (thermo_model == std::string(
"stat_mech")) &&
102 (diffusivity_model == std::string(
"kinetics_theory")) &&
103 (conductivity_model == std::string(
"kinetics_theory")) &&
104 (viscosity_model == std::string(
"kinetics_theory")) )
106 #ifdef ANTIOCH_HAVE_GSL
108 Antioch::KineticsTheoryViscosity<libMesh::Real,Antioch::GSLSpliner>,
109 Antioch::KineticsTheoryThermalConductivity<Antioch::StatMechThermodynamics<libMesh::Real>,libMesh::Real>,
110 Antioch::MolecularBinaryDiffusion<libMesh::Real,Antioch::GSLSpliner> >,
112 Antioch::KineticsTheoryViscosity<libMesh::Real,Antioch::GSLSpliner>,
113 Antioch::KineticsTheoryThermalConductivity<Antioch::StatMechThermodynamics<libMesh::Real>,libMesh::Real>,
114 Antioch::MolecularBinaryDiffusion<libMesh::Real,Antioch::GSLSpliner> > >(physics_name,input) );
116 libmesh_error_msg(
"ERROR: Antioch requires GSL in order to use kinetics theory based models!");
117 #endif // ANTIOCH_HAVE_GSL
120 this->grins_antioch_model_error_msg(viscosity_model,conductivity_model,diffusivity_model,thermo_model);
123 else if( transport_model == std::string(
"constant") )
125 if( viscosity_model != std::string(
"constant") )
126 libmesh_error_msg(
"Error: For constant transport_model, viscosity model must be constant!");
128 if( diffusivity_model != std::string(
"constant_lewis") )
129 libmesh_error_msg(
"Error: For constant transport_model, diffusivity model must be constant_lewis!");
131 if( (thermo_model == std::string(
"stat_mech")) &&
132 (conductivity_model == std::string(
"constant")) )
136 (physics_name,input) );
138 else if( (thermo_model == std::string(
"cea")) &&
139 (conductivity_model == std::string(
"constant")) )
143 (physics_name,input) );
145 else if( (thermo_model == std::string(
"stat_mech")) &&
146 (conductivity_model == std::string(
"constant_prandtl")) )
150 (physics_name,input) );
152 else if( (thermo_model == std::string(
"cea")) &&
153 (conductivity_model == std::string(
"constant_prandtl")) )
157 (physics_name,input) );
160 this->grins_antioch_model_error_msg(viscosity_model,conductivity_model,diffusivity_model,thermo_model);
164 std::string error =
"Error: Unknown Antioch transport_model "+transport_model+
"!\n";
165 error +=
" Valid values are: constant\n";
166 error +=
" mixture_averaged\n";
168 libmesh_error_msg(error);
171 libmesh_error_msg(
"Error: Antioch not enabled in this configuration. Reconfigure using --with-antioch option.");
173 #endif // GRINS_HAVE_ANTIOCH
178 std::string error =
"Error: Invalid thermo-chemistry library"+thermochem_lib+
"!\n";
179 error +=
" Valid values are: antioch\n";
180 error +=
" cantera\n";
182 libmesh_error_msg(error);
185 libmesh_assert(new_physics);
190 template<
template<
typename,
typename>
class DerivedPhysics>
192 (
const std::string& viscosity_model,
193 const std::string& conductivity_model,
194 const std::string& diffusivity_model,
195 const std::string& thermo_model )
const
197 std::string error =
"Error: Unknown Antioch model combination:\n";
198 error +=
"viscosity_model = "+viscosity_model+
"\n";
199 error +=
"conductivity_model = "+conductivity_model+
"\n";
200 error +=
"diffusivity_model = "+diffusivity_model+
"\n";
201 error +=
"thermo_model = "+thermo_model+
"\n";
203 libmesh_error_msg(error);
Wrapper class for evaluating constant transport properties, including Antioch::ConstantLewisDiffusivi...
static void parse_thermochemistry_model(const GetPot &input, const std::string &physics, std::string &model)
Determine thermochemistry model type.
static PhysicsName reacting_low_mach_navier_stokes()
static void parse_antioch_models(const GetPot &input, const std::string &physics, std::string &transport_model, std::string &thermo_model, std::string &viscosity_model, std::string &conductivity_model, std::string &diffusivity_model)
Wrapper class for storing state for computing Wilke transport properties using Antioch.
Wrapper class for evaluating Wilke transport properties using Antioch.
virtual libMesh::UniquePtr< Physics > build_physics(const GetPot &input, const std::string &physics_name)
PhysicsFactoryReactingFlows< ReactingLowMachNavierStokes > grins_factory_rlmns(PhysicsNaming::reacting_low_mach_navier_stokes(), PhysicsNaming::reacting_low_mach_navier_stokes())
void grins_antioch_model_error_msg(const std::string &viscosity_model, const std::string &conductivity_model, const std::string &diffusivity_model, const std::string &thermo_model) const
Wrapper class for storing state for constant transport properties, including Antioch::ConstantLewisDi...