31 #ifdef GRINS_HAVE_CANTERA
35 #ifdef GRINS_HAVE_ANTIOCH
42 #if defined(GRINS_HAVE_ANTIOCH) || defined(GRINS_HAVE_CANTERA)
43 SharedPtr<NeumannBCAbstract>
45 (
const GetPot& input,
const std::string& reaction,SharedPtr<CatalycityBase>& gamma_ptr,
46 const std::vector<VariableIndex>& species_vars,
const std::string& material,
47 VariableIndex T_var,libMesh::Real p0,
const std::string& thermochem_lib )
49 SharedPtr<NeumannBCAbstract>
51 (
const GetPot& ,
const std::string& reaction,SharedPtr<CatalycityBase>& ,
52 const std::vector<VariableIndex>& ,
const std::string& ,
53 VariableIndex ,libMesh::Real ,
const std::string& thermochem_lib )
56 std::string gas_reactant;
57 std::string solid_reactant;
59 this->parse_reactants_and_product(reaction,gas_reactant,solid_reactant,product);
62 SharedPtr<NeumannBCAbstract> catalytic_wall;
64 if( thermochem_lib ==
"cantera" )
66 #ifdef GRINS_HAVE_CANTERA
67 this->build_wall_ptr<CanteraMixture>(input,material,gamma_ptr,gas_reactant,solid_reactant,
68 product,species_vars,T_var,p0,catalytic_wall);
70 libmesh_error_msg(
"Error: Cantera not enabled in this configuration. Reconfigure using --with-cantera option.");
73 else if( thermochem_lib ==
"antioch" )
75 #ifdef GRINS_HAVE_ANTIOCH
76 this->build_wall_ptr<AntiochChemistry>(input,material,gamma_ptr,gas_reactant,solid_reactant,
77 product,species_vars,T_var,p0,catalytic_wall);
79 libmesh_error_msg(
"Error: Antioch not enabled in this configuration. Reconfigure using --with-antioch option.");
83 libmesh_error_msg(
"ERROR: Invalid thermochemistry library "+thermochem_lib+
"!");
85 return catalytic_wall;
89 std::string& gas_reactant,
90 std::string& solid_reactant,
91 std::string& product )
const
98 std::vector<std::string> partners;
101 const std::string pre_split_reactants = partners[0];
102 product = partners[1];
104 std::vector<std::string> split_reactants;
108 if( split_reactants.size() != 2 )
110 std::string error_msg =
"ERROR: Currently, GasSolidCatalyticWall boundary condition only supports\n";
111 error_msg +=
" reactions of the form X+Y(s)->Z or Y(s)+X->X. Found ";
112 error_msg += StringUtilities::T_to_string<unsigned int>(split_reactants.size())+
" reactants.\n";
113 libmesh_error_msg(error_msg);
118 if( split_reactants[0].find(
"(s)") == split_reactants[0].npos )
121 if( split_reactants[1].find(
"(s)") == split_reactants[1].npos )
123 std::string error_msg =
"ERROR: could not find solid reactant for GasSolidCatalyticWall!\n";
124 error_msg +=
" Found reactants "+split_reactants[0]+
", "+split_reactants[1]+
"\n";
125 libmesh_error_msg(error_msg);
129 gas_reactant = split_reactants[0];
130 solid_reactant = split_reactants[1].substr(0,split_reactants[1].find(
"(s)"));
137 if( split_reactants[1].find(
"(s)") != split_reactants[1].npos )
139 std::string error_msg =
"ERROR: can have only one solid reactant for GasSolidCatalyticWall!\n";
140 error_msg +=
" Found reactants "+split_reactants[0]+
", "+split_reactants[1]+
"\n";
141 libmesh_error_msg(error_msg);
144 gas_reactant = split_reactants[1];
145 solid_reactant = split_reactants[0].substr(0,split_reactants[0].find(
"(s)"));
unsigned int VariableIndex
More descriptive name of the type used for variable indices.
SharedPtr< NeumannBCAbstract > build_catalytic_wall(const GetPot &input, const std::string &reaction, SharedPtr< CatalycityBase > &gamma_ptr, const std::vector< VariableIndex > &species_vars, const std::string &material, VariableIndex T_var, libMesh::Real p0, const std::string &thermochem_lib)
void parse_reactants_and_product(const std::string &reaction, std::string &gas_reactant, std::string &solid_reactant, std::string &product) const
void split_string(const std::string &input, const std::string &delimiter, std::vector< std::string > &results)