GRINS-0.6.0
reacting_low_mach_navier_stokes_bc_handling.C
Go to the documentation of this file.
1 //-----------------------------------------------------------------------bl-
2 //--------------------------------------------------------------------------
3 //
4 // GRINS - General Reacting Incompressible Navier-Stokes
5 //
6 // Copyright (C) 2014-2015 Paul T. Bauman, Roy H. Stogner
7 // Copyright (C) 2010-2013 The PECOS Development Team
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the Version 2.1 GNU Lesser General
11 // Public License as published by the Free Software Foundation.
12 //
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // Lesser General Public License for more details.
17 //
18 // You should have received a copy of the GNU Lesser General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc. 51 Franklin Street, Fifth Floor,
21 // Boston, MA 02110-1301 USA
22 //
23 //-----------------------------------------------------------------------el-
24 
25 
26 // This class
28 
29 // GRINS
30 #include "grins/string_utils.h"
36 
37 // libMesh
38 #include "libmesh/fem_system.h"
39 #include "libmesh/dof_map.h"
40 #include "libmesh/const_function.h"
41 #include "libmesh/dirichlet_boundaries.h"
42 
43 // Boost
44 #include "boost/scoped_ptr.hpp"
45 
46 namespace GRINS
47 {
48  template<typename Chemistry>
50  const GetPot& input,
51  const Chemistry& chemistry )
52  : LowMachNavierStokesBCHandling(physics_name,input),
53  _n_species( input.vector_variable_size("Physics/Chemistry/species") ),
54  _species_var_names(_n_species),
55  _species_vars(_n_species),
56  _chemistry(chemistry)
57  {
58 
59  for( unsigned int s = 0; s < _n_species; s++ )
60  {
62  std::string var_name = "w_"+std::string(input( "Physics/Chemistry/species", "DIE!", s ));
63  _species_var_names[s] = var_name;
64  }
65 
66  std::string id_str = "Physics/"+_physics_name+"/species_bc_ids";
67  std::string bc_str = "Physics/"+_physics_name+"/species_bc_types";
68  std::string var_str = "Physics/"+_physics_name+"/species_bc_variables";
69  std::string val_str = "Physics/"+_physics_name+"/species_bc_values";
70 
71  this->read_bc_data( input, id_str, bc_str, var_str, val_str );
72 
73  return;
74  }
75 
76  template<typename Chemistry>
78  {
79  return;
80  }
81 
82  template<typename Chemistry>
84  {
85  int bc_type_out;
86 
87  if( bc_type == "zero_species_flux" )
88  {
89  bc_type_out = ZERO_SPECIES_FLUX;
90  }
91  else if( bc_type == "prescribed_species" )
92  {
93  bc_type_out = PRESCRIBED_SPECIES;
94  }
95  else if( bc_type == "prescribed_mole_fracs" )
96  {
97  bc_type_out = PRESCRIBED_MOLE_FRACTIONS;
98  }
99  else if( bc_type == "gas_recombination_catalytic_wall" )
100  {
101  bc_type_out = GAS_RECOMBINATION_CATALYTIC_WALL;
102  }
103  else if( bc_type == "gas_solid_catalytic_wall" )
104  {
105  bc_type_out = GAS_SOLID_CATALYTIC_WALL;
106  }
107  else if( bc_type == "general_species" )
108  {
109  bc_type_out = GENERAL_SPECIES;
110  }
111  else
112  {
113  bc_type_out = LowMachNavierStokesBCHandling::string_to_int( bc_type );
114  }
115 
116  return bc_type_out;
117  }
118 
119  template<typename Chemistry>
121  const std::string& bc_id_string,
122  const int bc_type,
123  const std::string& bc_vars,
124  const std::string& bc_value,
125  const GetPot& input )
126  {
127  switch(bc_type)
128  {
129  case(ZERO_SPECIES_FLUX):
130  {
131  this->set_neumann_bc_type( bc_id, bc_type );
132  }
133  break;
134 
135  case(PRESCRIBED_SPECIES):
136  {
137  this->set_species_bc_type( bc_id, bc_type );
138 
139  unsigned int n_species_comps = input.vector_variable_size("Physics/"+_physics_name+"/bound_species_"+bc_id_string);
140 
141  if( n_species_comps != _n_species )
142  {
143  std::cerr << "Error: The number of prescribed species values must match" << std::endl
144  << " the number of species in the simulation." << std::endl
145  << "n_species = " << _n_species << std::endl
146  << "n_species_comps = " << n_species_comps << std::endl;
147  libmesh_error();
148  }
149 
150  std::vector<libMesh::Real> species_mass_fracs(n_species_comps);
151 
152  for( unsigned int s = 0; s < n_species_comps; s++ )
153  {
154  species_mass_fracs[s] = input("Physics/"+_physics_name+"/bound_species_"+bc_id_string, -1.0, s );
155 
156  if( (species_mass_fracs[s] > 1.0) ||
157  (species_mass_fracs[s] < 0.0) )
158  {
159  std::cerr << "Error: prescribed species mass fraction must be between 0.0 and 1.0" << std::endl
160  << "w[" << s << "] = " << species_mass_fracs[s] << std::endl;
161  libmesh_error();
162  }
163  }
164 
165  this->set_species_bc_values( bc_id, species_mass_fracs );
166  }
167  break;
168 
169  case(PRESCRIBED_MOLE_FRACTIONS):
170  {
171  this->set_species_bc_type( bc_id, bc_type );
172 
173  unsigned int n_species_comps = input.vector_variable_size("Physics/"+_physics_name+"/bound_species_"+bc_id_string);
174 
175  if( n_species_comps != _n_species )
176  {
177  std::cerr << "Error: The number of prescribed species values must match" << std::endl
178  << " the number of species in the simulation." << std::endl
179  << "n_species = " << _n_species << std::endl
180  << "n_species_comps = " << n_species_comps << std::endl;
181  libmesh_error();
182  }
183 
184  std::vector<libMesh::Real> species_mole_fracs(n_species_comps);
185 
186  for( unsigned int s = 0; s < n_species_comps; s++ )
187  {
188  species_mole_fracs[s] = input("Physics/"+_physics_name+"/bound_species_"+bc_id_string, -1.0, s );
189 
190  if( (species_mole_fracs[s] > 1.0) ||
191  (species_mole_fracs[s] < 0.0) )
192  {
193  std::cerr << "Error: prescribed species mole fraction must be between 0.0 and 1.0" << std::endl
194  << "w[" << s << "] = " << species_mole_fracs[s] << std::endl;
195  libmesh_error();
196  }
197  }
198 
199  // Compute M
200  libMesh::Real M = 0.0;
201  for( unsigned int s = 0; s < n_species_comps; s++ )
202  {
203  M += species_mole_fracs[s]*_chemistry.M(s);
204  }
205 
206  // Convert mole fractions to mass fractions
207  std::vector<libMesh::Real> species_mass_fracs(n_species_comps);
208  for( unsigned int s = 0; s < n_species_comps; s++ )
209  {
210  species_mass_fracs[s] = species_mole_fracs[s]*_chemistry.M(s)/M;
211  }
212 
213  this->set_species_bc_values( bc_id, species_mass_fracs );
214  }
215  break;
216 
217  case(GENERAL_SPECIES):
218  {
219  this->set_dirichlet_bc_type( bc_id, bc_type );
220  }
221  break;
222 
223  case(GAS_RECOMBINATION_CATALYTIC_WALL):
224  {
225  this->set_neumann_bc_type( bc_id, bc_type );
226 
227  // Parse catalytic reactions on this wall
228  std::string reactions_string = "Physics/"+_physics_name+"/wall_catalytic_reactions_"+bc_id_string;
229  if( !input.have_variable(reactions_string) )
230  {
231  std::cerr << "Error: Could not find list of catalytic reactions for boundary id " << bc_id
232  << std::endl;
233  libmesh_error();
234  }
235 
236  const unsigned int n_reactions = input.vector_variable_size(reactions_string);
237 
238  for( unsigned int r = 0; r < n_reactions; r++ )
239  {
240  std::string reaction = input(reactions_string, "DIE!", r);
241 
242  // First, split each reaction into reactants and products
243  std::vector<std::string> partners;
244  StringUtilities::split_string(reaction, "->", partners);
245 
246  const std::string& reactant = partners[0];
247  const std::string& product = partners[1];
248 
250  if( partners.size() == 2 )
251  {
252  /* ------------- Grab the reactant and product species indices ------------- */
253  const unsigned int r_species = _chemistry.species_index( reactant );
254  const unsigned int p_species = _chemistry.species_index( product );
255 
256  /* ------------- Parse and construct the corresponding catalyticities ------------- */
257 
258  // These are temporary and will be cloned, so let them be destroyed when we're done
259  boost::scoped_ptr<CatalycityBase> gamma_r(NULL);
260 
261  this->build_catalycities( input, reactant, bc_id_string, bc_id, gamma_r );
262 
263  /* ------------- Now cache the CatalyticWall functions to init later ------------- */
264  libmesh_assert( gamma_r );
265 
266  std::tr1::shared_ptr<CatalyticWallBase<Chemistry> > wall_ptr( new GasRecombinationCatalyticWall<Chemistry>( _chemistry, *gamma_r, r_species, p_species ) );
267 
268  _catalytic_walls.insert( std::make_pair(bc_id, wall_ptr ) );
269 
270  } // if( partners.size() == 2 )
271  else
272  {
273  std::cerr << "Error: Can currently only handle 1 reactant and 1 product" << std::endl
274  << "in a catalytic reaction." << std::endl
275  << "Found " << partners.size() << " species." << std::endl;
276  libmesh_error();
277  }
278 
279  } // loop over reactions
280  }
281  break;
282 
283  case(GAS_SOLID_CATALYTIC_WALL):
284  {
285  this->set_neumann_bc_type( bc_id, bc_type );
286 
287  // Parse catalytic reactions on this wall
288  std::string reactions_string = "Physics/"+_physics_name+"/wall_gas_solid_reactions_"+bc_id_string;
289  if( !input.have_variable(reactions_string) )
290  {
291  std::cerr << "Error: Could not find list of gas-solid catalytic reactions for boundary id "
292  << bc_id
293  << std::endl;
294  libmesh_error();
295  }
296 
297  const unsigned int n_reactions = input.vector_variable_size(reactions_string);
298 
299  for( unsigned int r = 0; r < n_reactions; r++ )
300  {
301  std::string reaction = input(reactions_string, "DIE!", r);
302 
303  /* We are expecting reactions of the form
304  X+Y(s)->Z or
305  Y(s)+X->X
306  So, first we'll split on the "->", then split the reactants up and
307  figure out which is the gas species and which is the solid species. */
308 
309  std::vector<std::string> partners;
310  StringUtilities::split_string(reaction, "->", partners);
311 
312  const std::string pre_split_reactants = partners[0];
313  const std::string& product = partners[1];
314 
315  std::vector<std::string> split_reactants;
316  StringUtilities::split_string(pre_split_reactants, "+", split_reactants);
317 
318  // We can only handle two reactants currently
319  if( split_reactants.size() != 2 )
320  {
321  std::cerr << "Error: Currently, GasSolidCatalyticWall boundary condition only supports"
322  << std::endl
323  << " reactions of the form X+Y(s)->Z or Y(s)+X->X. Found "
324  << split_reactants.size() << " reactants." << std::endl;
325  libmesh_error();
326  }
327 
328  std::string gas_reactant;
329  std::string solid_reactant;
330  // Check if the first reactant is the solid one
331  if( split_reactants[0].find("(s)") == split_reactants[0].npos )
332  {
333  // If not found, check the second entry
334  if( split_reactants[1].find("(s)") == split_reactants[1].npos )
335  {
336  std::cerr << "Error: could not find solid reactant for GasSolidCatalyticWall" << std::endl
337  << " boundary condition. Found reactants " << split_reactants[0]
338  << ", " << split_reactants[1] << std::endl;
339  libmesh_error();
340  }
341  else
342  {
343  gas_reactant = split_reactants[0];
344  solid_reactant = split_reactants[1].substr(0,split_reactants[1].find("(s)"));
345  }
346  }
347  // Found (s) in the first entry
348  else
349  {
350  // Check that there's not 2 solid reactants
351  if( split_reactants[1].find("(s)") != split_reactants[1].npos )
352  {
353  std::cerr << "Error: can have only one solid reactant for GasSolidCatalyticWall" << std::endl
354  << " boundary condition. Found reactants " << split_reactants[0]
355  << ", " << split_reactants[1] << std::endl;
356  libmesh_error();
357  }
358 
359  gas_reactant = split_reactants[1];
360  solid_reactant = split_reactants[0].substr(0,split_reactants[0].find("(s)"));
361  }
362 
363  /* Now we have the gas reactant, the solid reactant, and the gas product strings.
364  Next we grab the species indices, build the catalycity, then build the
365  CatalyticWallBase object. */
366  const unsigned int rg_species = _chemistry.species_index( gas_reactant );
367  const unsigned int rs_species = _chemistry.species_index( solid_reactant );
368  const unsigned int p_species = _chemistry.species_index( product );
369 
370  // This is temporary and will be cloned, so let it be destroyed when we're done
371  boost::scoped_ptr<CatalycityBase> gamma_r(NULL);
372 
373  this->build_catalycities( input, gas_reactant, bc_id_string, bc_id, gamma_r );
374 
375  libmesh_assert( gamma_r );
376 
377  std::tr1::shared_ptr<CatalyticWallBase<Chemistry> > wall_ptr( new GasSolidCatalyticWall<Chemistry>( _chemistry, *gamma_r, rg_species, rs_species, p_species ) );
378 
379  _catalytic_walls.insert( std::make_pair(bc_id, wall_ptr ) );
380 
381  } // loop over reactions
382  }
383  break;
384 
385  default:
386  {
387  LowMachNavierStokesBCHandling::init_bc_types( bc_id, bc_id_string, bc_type,
388  bc_vars, bc_value, input );
389  }
390  break;
391 
392  } //switch(bc_type)
393 
394  return;
395  }
396 
397  template<typename Chemistry>
398  void ReactingLowMachNavierStokesBCHandling<Chemistry>::init_bc_data( const libMesh::FEMSystem& system )
399  {
400  // Call base class
402 
403  for( unsigned int s = 0; s < this->_n_species; s++ )
404  {
405  _species_vars[s] = system.variable_number( _species_var_names[s] );
406  }
407 
408  // See if we have a catalytic wall and initialize them if we do
409  for( std::map< GRINS::BoundaryID, GRINS::BCType>::const_iterator bc_map = _neumann_bc_map.begin();
410  bc_map != _neumann_bc_map.end(); ++bc_map )
411  {
412  const BoundaryID bc_id = bc_map->first;
413  const BCType bc_type = bc_map->second;
414 
415  if( bc_type == GAS_RECOMBINATION_CATALYTIC_WALL ||
416  bc_type == GAS_SOLID_CATALYTIC_WALL )
417  {
418  typedef typename std::multimap<BoundaryID, std::tr1::shared_ptr<CatalyticWallBase<Chemistry> > >::iterator it_type;
419 
420  std::pair< it_type, it_type > it_range = _catalytic_walls.equal_range( bc_id );
421 
422  for( it_type it = it_range.first; it != it_range.second; ++it )
423  {
424  (it->second)->init(system);
425 
426  if( this->is_axisymmetric() )
427  {
428  (it->second)->set_axisymmetric(true);
429  }
430  }
431  } // if( bc_type == GAS_RECOMBINATION_CATALYTIC_WALL )
432 
433  } // end loop over bc_ids
434 
435  return;
436  }
437 
438  template<typename Chemistry>
440  libMesh::DofMap& dof_map,
441  GRINS::BoundaryID bc_id,
442  GRINS::BCType bc_type ) const
443  {
444  switch( bc_type )
445  {
446  case(ZERO_SPECIES_FLUX):
447  // Do nothing BC
448  break;
449  case(PRESCRIBED_SPECIES):
450  case(PRESCRIBED_MOLE_FRACTIONS):
451  {
452  std::set<GRINS::BoundaryID> dbc_ids;
453  dbc_ids.insert(bc_id);
454 
455  for( unsigned int s = 0; s < _n_species; s++ )
456  {
457  std::vector<GRINS::VariableIndex> dbc_vars(1,_species_vars[s]);
458 
459  libMesh::ConstFunction<libMesh::Number> species_func( this->get_species_bc_value(bc_id,s) );
460 
461  libMesh::DirichletBoundary species_dbc( dbc_ids,
462  dbc_vars,
463  &species_func );
464 
465  dof_map.add_dirichlet_boundary( species_dbc );
466  }
467  }
468  break;
469 
470  case(GENERAL_SPECIES):
471  // This case is handled in the BoundaryConditionFactory classes.
472  break;
473  default:
474  {
475  LowMachNavierStokesBCHandling::user_init_dirichlet_bcs(system,dof_map,bc_id,bc_type);
476  }
477  } //switch( bc_type )
478 
479  return;
480  }
481 
482  template<typename Chemistry>
484  {
485  _species_bc_map.push_back( std::make_pair(bc_id,bc_type) );
486  return;
487  }
488 
489  template<typename Chemistry>
491  const std::vector<libMesh::Real>& species_values )
492  {
493  _species_bc_values[bc_id] = species_values;
494  return;
495  }
496 
497  template<typename Chemistry>
499  unsigned int species ) const
500  {
501  return (_species_bc_values.find(bc_id)->second)[species];
502  }
503 
504  template<typename Chemistry>
506  {
508 
509  libMesh::DofMap& dof_map = system->get_dof_map();
510 
511  for( std::vector<std::pair<BoundaryID,BCType> >::const_iterator it = _species_bc_map.begin();
512  it != _species_bc_map.end();
513  it++ )
514  {
515  this->user_init_dirichlet_bcs( system, dof_map, it->first, it->second );
516  }
517 
518  return;
519  }
520 
521  template<typename Chemistry>
523  const GRINS::CachedValues& cache,
524  const bool request_jacobian,
525  const BoundaryID bc_id,
526  const BCType bc_type ) const
527  {
528  switch( bc_type )
529  {
530  case( GENERAL_SPECIES ):
531  {
532  for( std::vector<VariableIndex>::const_iterator var = _species_vars.begin();
533  var != _species_vars.end();
534  ++var )
535  {
536  if( this->is_axisymmetric() )
537  {
538  _bound_conds.apply_neumann_normal_axisymmetric( context, cache,
539  request_jacobian, *var, -1.0,
540  this->get_neumann_bound_func( bc_id, *var ) );
541  }
542  else
543  {
544  _bound_conds.apply_neumann_normal( context, cache,
545  request_jacobian, *var, 1.0,
546  this->get_neumann_bound_func( bc_id, *var ) );
547  }
548  }
549  }
550  break;
551 
552  case( GAS_RECOMBINATION_CATALYTIC_WALL ):
553  case( GAS_SOLID_CATALYTIC_WALL ):
554  {
555  typedef typename std::multimap<BoundaryID, std::tr1::shared_ptr<CatalyticWallBase<Chemistry> > >::const_iterator it_type;
556 
557  std::pair< it_type, it_type > it_range = _catalytic_walls.equal_range( bc_id );
558 
559  for( it_type it = it_range.first; it != it_range.second; ++it )
560  {
561  (it->second)->apply_fluxes(context, cache, request_jacobian );
562  }
563  }
564  break;
565 
566  default:
567  {
568  std::cerr << "Error: Invalid Neumann BC type for " << _physics_name
569  << std::endl;
570  libmesh_error();
571  }
572  }
573 
574  return;
575  }
576 
577  template<typename Chemistry>
579  const std::string& reactant,
580  const std::string& bc_id_string,
581  const BoundaryID bc_id,
582  boost::scoped_ptr<CatalycityBase>& gamma_r )
583  {
584  std::string catalycity_type = input("Physics/"+_physics_name+"/gamma_"+reactant+"_"+bc_id_string+"_type", "none");
585 
586  if( catalycity_type == std::string("constant") )
587  {
588  std::string gamma_r_string = "Physics/"+_physics_name+"/gamma_"+reactant+"_"+bc_id_string;
589  libMesh::Real gamma = input(gamma_r_string, 0.0);
590 
591  if( !input.have_variable(gamma_r_string) )
592  {
593  std::cout << "Error: Could not find catalycity for species " << reactant
594  << ", for boundary " << bc_id << std::endl;
595  libmesh_error();
596  }
597 
598  gamma_r.reset( new ConstantCatalycity( gamma ) );
599  }
600  else if( catalycity_type == std::string("arrhenius") )
601  {
602  std::string gamma_r_string = "Physics/"+_physics_name+"/gamma0_"+reactant+"_"+bc_id_string;
603  std::string Ta_r_string = "Physics/"+_physics_name+"/Ta_"+reactant+"_"+bc_id_string;
604 
605  libMesh::Real gamma0 = input(gamma_r_string, 0.0);
606  libMesh::Real Ta = input(Ta_r_string, 0.0);
607 
608  if( !input.have_variable(gamma_r_string) )
609  {
610  std::cout << "Error: Could not find gamma0 for species " << reactant
611  << ", for boundary " << bc_id << std::endl;
612  libmesh_error();
613  }
614 
615  if( !input.have_variable(Ta_r_string) )
616  {
617  std::cout << "Error: Could not find Ta for species " << reactant
618  << ", for boundary " << bc_id << std::endl;
619  libmesh_error();
620  }
621 
622  gamma_r.reset( new ArrheniusCatalycity( gamma0, Ta ) );
623  }
624  else if( catalycity_type == std::string("power") )
625  {
626  std::string gamma_r_string = "Physics/"+_physics_name+"/gamma0_"+reactant+"_"+bc_id_string;
627  std::string Tref_r_string = "Physics/"+_physics_name+"/Tref_"+reactant+"_"+bc_id_string;
628  std::string alpha_r_string = "Physics/"+_physics_name+"/alpha_"+reactant+"_"+bc_id_string;
629 
630  libMesh::Real gamma0 = input(gamma_r_string, 0.0);
631  libMesh::Real Tref = input(Tref_r_string, 0.0);
632  libMesh::Real alpha = input(alpha_r_string, 0.0);
633 
634  if( !input.have_variable(gamma_r_string) )
635  {
636  std::cout << "Error: Could not find gamma0 for species " << reactant
637  << ", for boundary " << bc_id << std::endl;
638  libmesh_error();
639  }
640 
641  if( !input.have_variable(Tref_r_string) )
642  {
643  std::cout << "Error: Could not find Tref for species " << reactant
644  << ", for boundary " << bc_id << std::endl;
645  libmesh_error();
646  }
647 
648  if( !input.have_variable(alpha_r_string) )
649  {
650  std::cout << "Error: Could not find alpha for species " << reactant
651  << ", for boundary " << bc_id << std::endl;
652  libmesh_error();
653  }
654 
657  gamma_r.reset( new PowerLawCatalycity( gamma0, Tref, alpha ) );
658  }
659  else
660  {
661  std::cerr << "Error: Unsupported catalycity type " << catalycity_type << std::endl
662  << " for reactant " << reactant << std::endl
663  << "Valid catalycity types are: constant" << std::endl
664  << " arrhenius" << std::endl
665  << " power" << std::endl;
666 
667  libmesh_error();
668  }
669 
670 
671  return;
672  }
673 
674  template<typename Chemistry>
676  {
677  return (_catalytic_walls.find(bc_id)->second).get();
678  }
679 
680 } // namespace GRINS
virtual void init_dirichlet_bcs(libMesh::FEMSystem *system) const
virtual void read_bc_data(const GetPot &input, const std::string &id_str, const std::string &bc_str, const std::string &var_str, const std::string &val_str)
virtual void init_dirichlet_bcs(libMesh::FEMSystem *system) const
virtual void user_init_dirichlet_bcs(libMesh::FEMSystem *system, libMesh::DofMap &dof_map, GRINS::BoundaryID bc_id, GRINS::BCType bc_type) const
Base class for reading and handling boundary conditions for physics classes.
virtual void init_bc_data(const libMesh::FEMSystem &system)
Override this method to initialize any system-dependent data.
virtual void user_init_dirichlet_bcs(libMesh::FEMSystem *system, libMesh::DofMap &dof_map, GRINS::BoundaryID bc_id, GRINS::BCType bc_type) const
libMesh::boundary_id_type BoundaryID
More descriptive name of the type used for boundary ids.
Definition: var_typedefs.h:54
GRINS namespace.
virtual void init_bc_types(const GRINS::BoundaryID bc_id, const std::string &bc_id_string, const int bc_type, const std::string &bc_vars, const std::string &bc_value, const GetPot &input)
virtual void init_bc_types(const GRINS::BoundaryID bc_id, const std::string &bc_id_string, const int bc_type, const std::string &bc_vars, const std::string &bc_value, const GetPot &input)
virtual int string_to_int(const std::string &bc_type_in) const
void build_catalycities(const GetPot &input, const std::string &reactant, const std::string &bc_id_string, const BoundaryID bc_id, boost::scoped_ptr< CatalycityBase > &gamma_r)
virtual int string_to_int(const std::string &bc_type_in) const
virtual void init_bc_data(const libMesh::FEMSystem &system)
Override this method to initialize any system-dependent data.
void split_string(const std::string &input, const std::string &delimiter, std::vector< std::string > &results)
Definition: string_utils.C:31
virtual void user_apply_neumann_bcs(AssemblyContext &context, const GRINS::CachedValues &cache, const bool request_jacobian, const GRINS::BoundaryID bc_id, const GRINS::BCType bc_type) const
int BCType
Definition: bc_types.h:32
void set_species_bc_values(GRINS::BoundaryID bc_id, const std::vector< libMesh::Real > &species_values)
libMesh::Real get_species_bc_value(GRINS::BoundaryID bc_id, unsigned int species) const
CatalyticWallBase< Chemistry > * get_catalytic_wall(const BoundaryID bc_id)

Generated on Mon Jun 22 2015 21:32:19 for GRINS-0.6.0 by  doxygen 1.8.9.1