GRINS-0.7.0
List of all members | Public Member Functions | Protected Member Functions
GRINS::GasSolidCatalyticWallNeumannBCFactoryImpl Class Reference

#include <gas_solid_catalytic_wall_neumann_bc_factory_impl.h>

Public Member Functions

 GasSolidCatalyticWallNeumannBCFactoryImpl ()
 
 ~GasSolidCatalyticWallNeumannBCFactoryImpl ()
 
SharedPtr< NeumannBCAbstractbuild_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
 

Protected Member Functions

template<typename ChemistryType >
void build_wall_ptr (const GetPot &input, const std::string &material, SharedPtr< CatalycityBase > &gamma_ptr, const std::string &gas_reactant, const std::string &solid_reactant, const std::string &product, const std::vector< VariableIndex > &species_vars, VariableIndex T_var, libMesh::Real p0, SharedPtr< NeumannBCAbstract > &catalytic_wall)
 

Detailed Description

Definition at line 37 of file gas_solid_catalytic_wall_neumann_bc_factory_impl.h.

Constructor & Destructor Documentation

GRINS::GasSolidCatalyticWallNeumannBCFactoryImpl::GasSolidCatalyticWallNeumannBCFactoryImpl ( )
inline

Definition at line 41 of file gas_solid_catalytic_wall_neumann_bc_factory_impl.h.

41 {}
GRINS::GasSolidCatalyticWallNeumannBCFactoryImpl::~GasSolidCatalyticWallNeumannBCFactoryImpl ( )
inline

Definition at line 43 of file gas_solid_catalytic_wall_neumann_bc_factory_impl.h.

43 {}

Member Function Documentation

SharedPtr< NeumannBCAbstract > GRINS::GasSolidCatalyticWallNeumannBCFactoryImpl::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 
)

Definition at line 45 of file gas_solid_catalytic_wall_neumann_bc_factory_impl.C.

55  {
56  std::string gas_reactant;
57  std::string solid_reactant;
58  std::string product;
59  this->parse_reactants_and_product(reaction,gas_reactant,solid_reactant,product);
60 
61  // Now construct the Neumann BC
62  SharedPtr<NeumannBCAbstract> catalytic_wall;
63 
64  if( thermochem_lib == "cantera" )
65  {
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);
69 #else
70  libmesh_error_msg("Error: Cantera not enabled in this configuration. Reconfigure using --with-cantera option.");
71 #endif
72  }
73  else if( thermochem_lib == "antioch" )
74  {
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);
78 #else
79  libmesh_error_msg("Error: Antioch not enabled in this configuration. Reconfigure using --with-antioch option.");
80 #endif
81  }
82  else
83  libmesh_error_msg("ERROR: Invalid thermochemistry library "+thermochem_lib+"!");
84 
85  return catalytic_wall;
86  }
void parse_reactants_and_product(const std::string &reaction, std::string &gas_reactant, std::string &solid_reactant, std::string &product) const
template<typename ChemistryType >
void GRINS::GasSolidCatalyticWallNeumannBCFactoryImpl::build_wall_ptr ( const GetPot &  input,
const std::string &  material,
SharedPtr< CatalycityBase > &  gamma_ptr,
const std::string &  gas_reactant,
const std::string &  solid_reactant,
const std::string &  product,
const std::vector< VariableIndex > &  species_vars,
VariableIndex  T_var,
libMesh::Real  p0,
SharedPtr< NeumannBCAbstract > &  catalytic_wall 
)
inlineprotected

Definition at line 63 of file gas_solid_catalytic_wall_neumann_bc_factory_impl.h.

73  {
74  SharedPtr<ChemistryType> chem_ptr( new ChemistryType(input,material) );
75 
76  catalytic_wall.reset( new GasSolidCatalyticWall<ChemistryType>
77  ( chem_ptr,
78  gamma_ptr,
79  species_vars,
80  T_var,
81  p0,
82  chem_ptr->species_index(gas_reactant),
83  chem_ptr->species_index(solid_reactant),
84  chem_ptr->species_index(product) ) );
85  }
void GRINS::GasSolidCatalyticWallNeumannBCFactoryImpl::parse_reactants_and_product ( const std::string &  reaction,
std::string &  gas_reactant,
std::string &  solid_reactant,
std::string &  product 
) const

Definition at line 88 of file gas_solid_catalytic_wall_neumann_bc_factory_impl.C.

References GRINS::StringUtilities::split_string().

Referenced by GRINS::GasSolidCatalyticWallNeumannBCOldStyleFactory::reactant_for_catalycity().

92  {
93  /* We are expecting reactions of the form
94  X+Y(s)->Z or
95  Y(s)+X->X
96  So, first we'll split on the "->", then split the reactants up and
97  figure out which is the gas species and which is the solid species. */
98  std::vector<std::string> partners;
99  StringUtilities::split_string(reaction, "->", partners);
100 
101  const std::string pre_split_reactants = partners[0];
102  product = partners[1];
103 
104  std::vector<std::string> split_reactants;
105  StringUtilities::split_string(pre_split_reactants, "+", split_reactants);
106 
107  // We can only handle two reactants currently
108  if( split_reactants.size() != 2 )
109  {
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);
114  }
115 
116 
117  // Check if the first reactant is the solid one
118  if( split_reactants[0].find("(s)") == split_reactants[0].npos )
119  {
120  // If not found, check the second reactant and error out if not found.
121  if( split_reactants[1].find("(s)") == split_reactants[1].npos )
122  {
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);
126  }
127  else
128  {
129  gas_reactant = split_reactants[0];
130  solid_reactant = split_reactants[1].substr(0,split_reactants[1].find("(s)"));
131  }
132  }
133  // Found (s) in the first reactant
134  else
135  {
136  // Check that there's not 2 solid reactants
137  if( split_reactants[1].find("(s)") != split_reactants[1].npos )
138  {
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);
142  }
143 
144  gas_reactant = split_reactants[1];
145  solid_reactant = split_reactants[0].substr(0,split_reactants[0].find("(s)"));
146  }
147  }
void split_string(const std::string &input, const std::string &delimiter, std::vector< std::string > &results)
Definition: string_utils.C:31

The documentation for this class was generated from the following files:

Generated on Thu Jun 2 2016 21:52:31 for GRINS-0.7.0 by  doxygen 1.8.10