GRINS-0.6.0
Public Member Functions | Protected Types | Protected Attributes | Static Protected Attributes | Private Member Functions | List of all members
GRINS::BCHandlingBase Class Reference

Base class for reading and handling boundary conditions for physics classes. More...

#include <bc_handling_base.h>

Inheritance diagram for GRINS::BCHandlingBase:
Inheritance graph
[legend]
Collaboration diagram for GRINS::BCHandlingBase:
Collaboration graph
[legend]

Public Member Functions

 BCHandlingBase (const std::string &physics_name)
 
virtual ~BCHandlingBase ()
 
void attach_neumann_bound_func (GRINS::NBCContainer &neumann_bcs)
 
void attach_dirichlet_bound_func (const GRINS::DBCContainer &dirichlet_bc)
 
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_bc_data (const libMesh::FEMSystem &system)
 Override this method to initialize any system-dependent data. More...
 
virtual void apply_neumann_bcs (AssemblyContext &context, const GRINS::CachedValues &cache, const bool request_jacobian, const GRINS::BoundaryID bc_id) const
 
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
 
virtual void init_dirichlet_bc_func_objs (libMesh::FEMSystem *system) const
 
virtual void init_periodic_bcs (libMesh::FEMSystem *system) const
 
void set_dirichlet_bc_type (GRINS::BoundaryID bc_id, int bc_type)
 
void set_neumann_bc_type (GRINS::BoundaryID bc_id, int bc_type)
 
void set_dirichlet_bc_value (GRINS::BoundaryID bc_id, libMesh::Real value, int component=0)
 
void set_neumann_bc_value (GRINS::BoundaryID bc_id, const libMesh::Point &q_in)
 
libMesh::Real get_dirichlet_bc_value (GRINS::BoundaryID bc_id, int component=0) const
 
const libMesh::Point & get_neumann_bc_value (GRINS::BoundaryID bc_id) const
 
std::tr1::shared_ptr< GRINS::NeumannFuncObjget_neumann_bound_func (GRINS::BoundaryID bc_id, GRINS::VariableIndex var_id) const
 
std::tr1::shared_ptr< GRINS::NeumannFuncObjget_neumann_bound_func (GRINS::BoundaryID bc_id, GRINS::VariableIndex var_id)
 
virtual void init_dirichlet_bcs (libMesh::FEMSystem *system) const
 
virtual int string_to_int (const std::string &bc_type_in) const
 
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 user_init_dirichlet_bcs (libMesh::FEMSystem *system, libMesh::DofMap &dof_map, GRINS::BoundaryID bc_id, GRINS::BCType bc_type) const
 
GRINS::BCType get_dirichlet_bc_type (const GRINS::BoundaryID bc_id) const
 
bool is_axisymmetric () const
 

Protected Types

enum  BC_BASE {
  PERIODIC = -5, CONSTANT_DIRICHLET, PARSED_DIRICHLET, PARSED_FEM_DIRICHLET,
  AXISYMMETRIC
}
 

Protected Attributes

std::vector< std::pair< BoundaryID, BCType > > _dirichlet_bc_map
 Map between boundary id and Dirichlet boundary condition type. More...
 
std::map< GRINS::BoundaryID, GRINS::BCType_neumann_bc_map
 Map between boundary id and Neumann boundary condition type. More...
 
std::map< GRINS::BoundaryID, libMesh::Point > _dirichlet_values
 Stash prescribed Dirichlet boundary values. More...
 
std::map< GRINS::BoundaryID, libMesh::Point > _q_values
 Stash prescribed boundary fluxes. More...
 
std::map< GRINS::BoundaryID, GRINS::NBCContainer_neumann_bound_funcs
 
std::vector< GRINS::DBCContainer_dirichlet_bound_funcs
 
GRINS::BoundaryConditions _bound_conds
 Object that stashes generic boundary condition types. More...
 
std::vector< GRINS::PBCContainer_periodic_bcs
 
unsigned int _num_periodic_bcs
 
std::string _physics_name
 

Static Protected Attributes

static bool _axisymmetric = false
 Flag to cache whether or not there is an axisymmetric boundary present. More...
 

Private Member Functions

 BCHandlingBase ()
 

Detailed Description

Base class for reading and handling boundary conditions for physics classes.

Definition at line 56 of file bc_handling_base.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

GRINS::BCHandlingBase::BCHandlingBase ( const std::string &  physics_name)

Definition at line 49 of file bc_handling_base.C.

50  : _num_periodic_bcs(0),
51  _physics_name( physics_name )
52  {
53  return;
54  }
unsigned int _num_periodic_bcs
GRINS::BCHandlingBase::~BCHandlingBase ( )
virtual

Definition at line 56 of file bc_handling_base.C.

57  {
58  return;
59  }
GRINS::BCHandlingBase::BCHandlingBase ( )
private

Member Function Documentation

void GRINS::BCHandlingBase::apply_neumann_bcs ( AssemblyContext context,
const GRINS::CachedValues cache,
const bool  request_jacobian,
const GRINS::BoundaryID  bc_id 
) const
virtual

Definition at line 234 of file bc_handling_base.C.

References _neumann_bc_map, and user_apply_neumann_bcs().

238  {
239  std::map< BoundaryID, BCType>::const_iterator
240  bc_map_it = _neumann_bc_map.find( bc_id );
241 
242  /* We assume that if you didn't put a boundary id in, then you didn't want to
243  set a boundary condition on that boundary. */
244  if( bc_map_it != _neumann_bc_map.end() )
245  {
246  this->user_apply_neumann_bcs( context, cache, request_jacobian,
247  bc_id, bc_map_it->second );
248  }
249  return;
250  }
std::map< GRINS::BoundaryID, GRINS::BCType > _neumann_bc_map
Map between boundary id and Neumann boundary condition type.
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
void GRINS::BCHandlingBase::attach_dirichlet_bound_func ( const GRINS::DBCContainer dirichlet_bc)
void GRINS::BCHandlingBase::attach_neumann_bound_func ( GRINS::NBCContainer neumann_bcs)

Definition at line 61 of file bc_handling_base.C.

References _neumann_bound_funcs, and GRINS::NBCContainer::get_bc_id().

Referenced by GRINS::Physics::attach_neumann_bound_func().

62  {
63  _neumann_bound_funcs.insert( std::make_pair( neumann_bcs.get_bc_id(), neumann_bcs ) );
64  return;
65  }
BoundaryID get_bc_id() const
Definition: nbc_container.C:46
std::map< GRINS::BoundaryID, GRINS::NBCContainer > _neumann_bound_funcs
GRINS::BCType GRINS::BCHandlingBase::get_dirichlet_bc_type ( const GRINS::BoundaryID  bc_id) const
inline

Definition at line 207 of file bc_handling_base.h.

References _dirichlet_bc_map.

208  {
209  BCType bc_type_out = -100;
210 
211  for( std::vector<std::pair<BoundaryID,BCType> >::const_iterator it = _dirichlet_bc_map.begin();
212  it != _dirichlet_bc_map.end(); it++ )
213  {
214  if( it->first == bc_id ) bc_type_out = it->second;
215  }
216 
217  libmesh_assert_not_equal_to( bc_type_out, -100 );
218 
219  return bc_type_out;
220  }
std::vector< std::pair< BoundaryID, BCType > > _dirichlet_bc_map
Map between boundary id and Dirichlet boundary condition type.
int BCType
Definition: bc_types.h:32
libMesh::Real GRINS::BCHandlingBase::get_dirichlet_bc_value ( GRINS::BoundaryID  bc_id,
int  component = 0 
) const
const libMesh::Point & GRINS::BCHandlingBase::get_neumann_bc_value ( GRINS::BoundaryID  bc_id) const
inline

Definition at line 185 of file bc_handling_base.h.

References _q_values.

Referenced by GRINS::AxisymmetricHeatTransferBCHandling::user_apply_neumann_bcs(), GRINS::HeatTransferBCHandling::user_apply_neumann_bcs(), and GRINS::SolidMechanicsBCHandling::user_apply_neumann_bcs().

186  {
187  return (_q_values.find(bc_id))->second;
188  }
std::map< GRINS::BoundaryID, libMesh::Point > _q_values
Stash prescribed boundary fluxes.
std::tr1::shared_ptr< GRINS::NeumannFuncObj > GRINS::BCHandlingBase::get_neumann_bound_func ( GRINS::BoundaryID  bc_id,
GRINS::VariableIndex  var_id 
) const
inline

Definition at line 192 of file bc_handling_base.h.

References _neumann_bound_funcs.

Referenced by GRINS::AxisymmetricHeatTransferBCHandling::user_apply_neumann_bcs(), and GRINS::HeatTransferBCHandling::user_apply_neumann_bcs().

194  {
195  return ((_neumann_bound_funcs.find(bc_id))->second).get_func(var_id);
196  }
std::map< GRINS::BoundaryID, GRINS::NBCContainer > _neumann_bound_funcs
std::tr1::shared_ptr< GRINS::NeumannFuncObj > GRINS::BCHandlingBase::get_neumann_bound_func ( GRINS::BoundaryID  bc_id,
GRINS::VariableIndex  var_id 
)
inline

Definition at line 200 of file bc_handling_base.h.

References _neumann_bound_funcs.

202  {
203  return ((_neumann_bound_funcs.find(bc_id))->second).get_func(var_id);
204  }
std::map< GRINS::BoundaryID, GRINS::NBCContainer > _neumann_bound_funcs
void GRINS::BCHandlingBase::init_bc_data ( const libMesh::FEMSystem &  system)
virtual

Override this method to initialize any system-dependent data.

Override this method to, for example, cache a System variable number. This is called before any of the other init methods in this class. By default, does nothing.

Reimplemented in GRINS::ReactingLowMachNavierStokesBCHandling< Chemistry >, GRINS::IncompressibleNavierStokesBCHandling, GRINS::SolidMechanicsBCHandling, GRINS::HeatTransferBCHandling, GRINS::LowMachNavierStokesBCHandling, GRINS::SpalartAllmarasBCHandling, and GRINS::AxisymmetricHeatTransferBCHandling.

Definition at line 111 of file bc_handling_base.C.

Referenced by GRINS::Physics::init_bcs().

112  {
113  return;
114  }
void GRINS::BCHandlingBase::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

Reimplemented in GRINS::ReactingLowMachNavierStokesBCHandling< Chemistry >, GRINS::IncompressibleNavierStokesBCHandling, GRINS::SolidMechanicsBCHandling, GRINS::HeatTransferBCHandling, GRINS::LowMachNavierStokesBCHandling, GRINS::SpalartAllmarasBCHandling, and GRINS::AxisymmetricHeatTransferBCHandling.

Definition at line 318 of file bc_handling_base.C.

References _num_periodic_bcs, _periodic_bcs, _physics_name, GRINS::DBCContainer::add_bc_id(), GRINS::DBCContainer::add_var_name(), attach_dirichlet_bound_func(), CONSTANT_DIRICHLET, PARSED_DIRICHLET, PARSED_FEM_DIRICHLET, PERIODIC, GRINS::DBCContainer::set_fem_func_string(), GRINS::DBCContainer::set_func(), GRINS::PBCContainer::set_master_bcid(), GRINS::PBCContainer::set_offset_vector(), and GRINS::PBCContainer::set_slave_bcid().

Referenced by GRINS::AxisymmetricHeatTransferBCHandling::init_bc_types(), GRINS::SpalartAllmarasBCHandling::init_bc_types(), GRINS::LowMachNavierStokesBCHandling::init_bc_types(), GRINS::HeatTransferBCHandling::init_bc_types(), GRINS::SolidMechanicsBCHandling::init_bc_types(), GRINS::IncompressibleNavierStokesBCHandling::init_bc_types(), and read_bc_data().

324  {
325  switch(bc_type)
326  {
327  case(PERIODIC):
328  {
329  /* We assume the periodic boundary pair will be listed by the master bc id.
330  Thus, if we have a periodic id and we don't see a list of bc ids with the
331  under the current id, we assume it's the slave id. We'll do consistency
332  checks later. */
333  _num_periodic_bcs += 1;
334  int pbc_size = input.vector_variable_size("Physics/"+_physics_name+"/periodic_wall_"+bc_id_string );
335  if( pbc_size == 0 ) break;
336 
337  // We'd better have only 2 bc ids if this is the bc list
338  if( pbc_size != 2 )
339  {
340  std::cerr << "=========================================================="
341  << "Error: Must specify exactly two boundary condition ids " << std::endl
342  << " for periodic boundary conditions. Found " << pbc_size << std::endl
343  << "==========================================================" << std::endl;
344  libmesh_error();
345  }
346 
347  int id0 = input( "Physics/"+_physics_name+"/periodic_wall_"+bc_id_string, -1, 0 );
348  int id1 = input( "Physics/"+_physics_name+"/periodic_wall_"+bc_id_string, -1, 1 );
349 
350  if( id0 == -1 || id1 == -1 )
351  {
352  std::cerr << "=========================================================="
353  << "Error: Default bc id detected for periodic bc." << std::endl
354  << " Please explicitly set periodic bc ids." << std::endl
355  << " Detected ids " << id0 << ", " << id1 << std::endl
356  << " for bc id = " << bc_id << std::endl
357  << "==========================================================" << std::endl;
358  libmesh_error();
359  }
360 
361  PBCContainer pbc;
362 
363  if( id0 == bc_id )
364  {
365  pbc.set_master_bcid( id0 );
366  pbc.set_slave_bcid( id1 );
367  }
368  else if( id1 == bc_id )
369  {
370  pbc.set_master_bcid( id1 );
371  pbc.set_slave_bcid( id0 );
372  }
373  else
374  {
375  // At least one of them had better be the master id
376  std::cerr << "=========================================================="
377  << "Error: At least one of the bcs must be the master id." << std::endl
378  << " Detected master id = " << bc_id << std::endl
379  << " Found bc ids (" << id0 << "," << id1 << ")." << std::endl
380  << "==========================================================" << std::endl;
381  libmesh_error();
382  }
383 
384  // Now populate offset vector
385  {
386  int offset_size = input.vector_variable_size("Physics/"+_physics_name+"/periodic_offset_"+bc_id_string );
387  if( offset_size == 0 )
388  {
389  // User needs to set the offset vector for the periodic boundary
390  std::cerr << "=========================================================="
391  << "Error: Offset vector not found for bc id " << bc_id << std::endl
392  << "==========================================================" << std::endl;
393  libmesh_error();
394  }
395  libMesh::RealVectorValue offset_vector;
396  for( int i = 0; i < offset_size; i++ )
397  {
398  offset_vector(i) = input("Physics/"+_physics_name+"/periodic_offset_"+bc_id_string, 0.0, i );
399  }
400 
401  pbc.set_offset_vector( offset_vector );
402  }
403 
404  // Now stash the container object for use later in initialization
405  _periodic_bcs.push_back( pbc );
406 
407  }
408  break;
409 
410  case(CONSTANT_DIRICHLET):
411  {
412  DBCContainer dirichlet_bc;
413 
414  dirichlet_bc.add_var_name(bc_vars);
415 
416  dirichlet_bc.add_bc_id(bc_id);
417 
418  libMesh::Number bc_val_num = StringUtilities::string_to_T<libMesh::Number>(bc_value);
419 
420  dirichlet_bc.set_func
421  (std::tr1::shared_ptr<libMesh::FunctionBase<libMesh::Number> >
422  (new libMesh::ConstFunction<libMesh::Number>(bc_val_num)));
423 
424  this->attach_dirichlet_bound_func(dirichlet_bc);
425  }
426  break;
427 
428  case(PARSED_DIRICHLET):
429  {
430  DBCContainer dirichlet_bc;
431 
432  dirichlet_bc.add_var_name(bc_vars);
433 
434  dirichlet_bc.add_bc_id(bc_id);
435 
436  dirichlet_bc.set_func
437  (std::tr1::shared_ptr<libMesh::FunctionBase<libMesh::Number> >
438  (new libMesh::ParsedFunction<libMesh::Number>(bc_value)));
439 
440  this->attach_dirichlet_bound_func(dirichlet_bc);
441  }
442  break;
443 
444  case(PARSED_FEM_DIRICHLET):
445  {
446  DBCContainer dirichlet_bc;
447 
448  dirichlet_bc.add_var_name(bc_vars);
449 
450  dirichlet_bc.add_bc_id(bc_id);
451 
452  dirichlet_bc.set_fem_func_string (bc_value);
453 
454  this->attach_dirichlet_bound_func(dirichlet_bc);
455  }
456  break;
457 
458  default:
459  {
460  std::cerr << "=========================================================="
461  << "Error: Invalid BC type for " << _physics_name << std::endl
462  << " Detected BC type was " << bc_type << std::endl
463  << "==========================================================" << std::endl;
464  libmesh_error();
465  }
466  }
467  return;
468  }
std::vector< GRINS::PBCContainer > _periodic_bcs
void attach_dirichlet_bound_func(const GRINS::DBCContainer &dirichlet_bc)
unsigned int _num_periodic_bcs
void GRINS::BCHandlingBase::init_dirichlet_bc_func_objs ( libMesh::FEMSystem *  system) const
virtual

Definition at line 116 of file bc_handling_base.C.

References _dirichlet_bound_funcs.

Referenced by GRINS::Physics::init_bcs().

117  {
118  libMesh::DofMap& dof_map = system->get_dof_map();
119 
120  for( std::vector< DBCContainer >::const_iterator
121  it = _dirichlet_bound_funcs.begin();
122  it != _dirichlet_bound_funcs.end();
123  it++ )
124  {
125  // First, get variable names. We convert them to variable ids,
126  // both to tell the DirichletBoundary what variables to
127  // project and to tell the CompositeFunction what remapping to
128  // do.
129  std::vector<VariableName> var_names = (*it).get_var_names();
130 
131  std::vector<VariableIndex> dbc_vars;
132 
133  for( std::vector<VariableName>::const_iterator name = var_names.begin();
134  name != var_names.end();
135  name++ )
136  {
137  dbc_vars.push_back( system->variable_number( *name ) );
138  }
139 
140  // Get bc_id's
141  std::set<BoundaryID> bc_ids = (*it).get_bc_ids();
142 
143  // Get Dirichlet bc functor
144  std::tr1::shared_ptr<libMesh::FunctionBase<libMesh::Number> >
145  func = (*it).get_func();
146 
147  // Remap indices as necessary
148  if (func.get())
149  {
151  remapped_func.attach_subfunction(*func, dbc_vars);
152 
153  // Now create DirichletBoundary object and give it to libMesh
154  // libMesh makes it own copy of the DirichletBoundary so we can
155  // let this one die.
156  libMesh::DirichletBoundary dbc( bc_ids, dbc_vars,
157  remapped_func );
158 
159  dof_map.add_dirichlet_boundary( dbc );
160  }
161  else
162  {
163  // Get Dirichlet bc functor
164  const std::string& func_string = (*it).get_fem_func_string();
165 
166  libmesh_assert_not_equal_to(func_string, "");
167 
168  // Need to belatedly create Dirichlet functor since we
169  // didn't have a System object handy until now.
170  libMesh::ParsedFEMFunction<libMesh::Number>
171  func(*system, func_string);
172 
173  libMesh::CompositeFEMFunction<libMesh::Number> remapped_func;
174  remapped_func.attach_subfunction(func, dbc_vars);
175 
176  // Now create DirichletBoundary object and give it to libMesh
177  // libMesh makes it own copy of the DirichletBoundary so we can
178  // let this one die.
179  libMesh::DirichletBoundary dbc( bc_ids, dbc_vars,
180  *system,
181  remapped_func );
182 
183  dof_map.add_dirichlet_boundary( dbc );
184  }
185  }
186 
187  return;
188  }
std::vector< GRINS::DBCContainer > _dirichlet_bound_funcs
void GRINS::BCHandlingBase::init_dirichlet_bcs ( libMesh::FEMSystem *  system) const
virtual

Reimplemented in GRINS::ReactingLowMachNavierStokesBCHandling< Chemistry >, and GRINS::LowMachNavierStokesBCHandling.

Definition at line 190 of file bc_handling_base.C.

References _dirichlet_bc_map, and user_init_dirichlet_bcs().

Referenced by GRINS::Physics::init_bcs().

191  {
192  libMesh::DofMap& dof_map = system->get_dof_map();
193 
194  for( std::vector<std::pair<BoundaryID,BCType> >::const_iterator it = _dirichlet_bc_map.begin();
195  it != _dirichlet_bc_map.end(); it++ )
196  {
197  this->user_init_dirichlet_bcs( system, dof_map, it->first, it->second );
198  }
199 
200  return;
201  }
virtual void user_init_dirichlet_bcs(libMesh::FEMSystem *system, libMesh::DofMap &dof_map, GRINS::BoundaryID bc_id, GRINS::BCType bc_type) const
std::vector< std::pair< BoundaryID, BCType > > _dirichlet_bc_map
Map between boundary id and Dirichlet boundary condition type.
void GRINS::BCHandlingBase::init_periodic_bcs ( libMesh::FEMSystem *  system) const
virtual

Definition at line 203 of file bc_handling_base.C.

References _num_periodic_bcs, and _periodic_bcs.

Referenced by GRINS::Physics::init_bcs().

204  {
205  /* Consistency check required to make sure user actually set periodic bc data.
206  This is needed because of the way we parse periodic boundary conditions. */
207  if( _periodic_bcs.size() != _num_periodic_bcs/2 )
208  {
209  std::cerr << "==========================================================" << std::endl
210  << "Error: Inconsistency in perioidic boundary conditions." << std::endl
211  << " There were " << _num_periodic_bcs << " deteced but " << std::endl
212  << " only " << _periodic_bcs.size() << " pairs of data " << std::endl
213  << " were set." << std::endl
214  << "==========================================================" << std::endl;
215  libmesh_error();
216  }
217 
218  libMesh::DofMap& dof_map = system->get_dof_map();
219 
220  for( std::vector< PBCContainer >::const_iterator it = _periodic_bcs.begin();
221  it != _periodic_bcs.end();
222  it++ )
223  {
224  libMesh::PeriodicBoundary bc( it->get_offset_vector() );
225  bc.myboundary = it->get_master_bcid();
226  bc.pairedboundary = it->get_slave_bcid();
227 
228  dof_map.add_periodic_boundary( bc );
229  }
230 
231  return;
232  }
std::vector< GRINS::PBCContainer > _periodic_bcs
unsigned int _num_periodic_bcs
bool GRINS::BCHandlingBase::is_axisymmetric ( ) const
inline
void GRINS::BCHandlingBase::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

Definition at line 73 of file bc_handling_base.C.

References init_bc_types(), and string_to_int().

Referenced by GRINS::AxisymmetricHeatTransferBCHandling::AxisymmetricHeatTransferBCHandling(), GRINS::HeatTransferBCHandling::HeatTransferBCHandling(), GRINS::IncompressibleNavierStokesBCHandling::IncompressibleNavierStokesBCHandling(), GRINS::LowMachNavierStokesBCHandling::LowMachNavierStokesBCHandling(), GRINS::ReactingLowMachNavierStokesBCHandling< Chemistry >::ReactingLowMachNavierStokesBCHandling(), GRINS::SolidMechanicsBCHandling::SolidMechanicsBCHandling(), and GRINS::SpalartAllmarasBCHandling::SpalartAllmarasBCHandling().

77  {
78  int num_ids = input.vector_variable_size(id_str);
79  int num_bcs = input.vector_variable_size(bc_str);
80  // int num_vars = input.vector_variable_size(var_str);
81  // int num_vals = input.vector_variable_size(val_str);
82 
83  if( num_ids != num_bcs )
84  {
85  std::cerr << "Error: Must specify equal number of boundary ids and boundary conditions"
86  << std::endl;
87  libmesh_error();
88  }
89 
90  for( int i = 0; i < num_ids; i++ )
91  {
92  int bc_id = input(id_str, -1, i );
93  std::string bc_type_in = input(bc_str, "NULL", i );
94 
95  int bc_type = this->string_to_int( bc_type_in );
96 
97  std::stringstream ss;
98  ss << bc_id;
99  std::string bc_id_string = ss.str();
100 
101  std::string bc_val = input(val_str, std::string(""), i );
102 
103  std::string bc_vars = input(var_str, std::string(""), i );
104 
105  this->init_bc_types( bc_id, bc_id_string, bc_type, bc_vars, bc_val, input );
106  }
107 
108  return;
109  }
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 GRINS::BCHandlingBase::set_dirichlet_bc_type ( GRINS::BoundaryID  bc_id,
int  bc_type 
)

Definition at line 252 of file bc_handling_base.C.

References _dirichlet_bc_map.

Referenced by GRINS::AxisymmetricHeatTransferBCHandling::init_bc_types(), GRINS::HeatTransferBCHandling::init_bc_types(), GRINS::SpalartAllmarasBCHandling::init_bc_types(), GRINS::LowMachNavierStokesBCHandling::init_bc_types(), GRINS::SolidMechanicsBCHandling::init_bc_types(), and GRINS::IncompressibleNavierStokesBCHandling::init_bc_types().

253  {
254  _dirichlet_bc_map.push_back( std::make_pair(bc_id, bc_type) );
255  return;
256  }
std::vector< std::pair< BoundaryID, BCType > > _dirichlet_bc_map
Map between boundary id and Dirichlet boundary condition type.
void GRINS::BCHandlingBase::set_dirichlet_bc_value ( GRINS::BoundaryID  bc_id,
libMesh::Real  value,
int  component = 0 
)

Definition at line 264 of file bc_handling_base.C.

References _dirichlet_values.

Referenced by GRINS::AxisymmetricHeatTransferBCHandling::init_bc_types(), GRINS::HeatTransferBCHandling::init_bc_types(), GRINS::LowMachNavierStokesBCHandling::init_bc_types(), GRINS::IncompressibleNavierStokesBCHandling::init_bc_types(), and GRINS::SolidMechanicsBCHandling::init_bc_types().

267  {
268  _dirichlet_values[bc_id](component) = value;
269  return;
270  }
std::map< GRINS::BoundaryID, libMesh::Point > _dirichlet_values
Stash prescribed Dirichlet boundary values.
void GRINS::BCHandlingBase::set_neumann_bc_type ( GRINS::BoundaryID  bc_id,
int  bc_type 
)

Definition at line 258 of file bc_handling_base.C.

References _neumann_bc_map.

Referenced by GRINS::AxisymmetricHeatTransferBCHandling::init_bc_types(), GRINS::HeatTransferBCHandling::init_bc_types(), GRINS::LowMachNavierStokesBCHandling::init_bc_types(), and GRINS::SolidMechanicsBCHandling::init_bc_types().

259  {
260  _neumann_bc_map[bc_id] = bc_type;
261  return;
262  }
std::map< GRINS::BoundaryID, GRINS::BCType > _neumann_bc_map
Map between boundary id and Neumann boundary condition type.
void GRINS::BCHandlingBase::set_neumann_bc_value ( GRINS::BoundaryID  bc_id,
const libMesh::Point &  q_in 
)

Definition at line 278 of file bc_handling_base.C.

References _q_values.

Referenced by GRINS::AxisymmetricHeatTransferBCHandling::init_bc_types(), GRINS::HeatTransferBCHandling::init_bc_types(), GRINS::LowMachNavierStokesBCHandling::init_bc_types(), and GRINS::SolidMechanicsBCHandling::init_bc_types().

279  {
280  _q_values[bc_id] = q_in;
281  }
std::map< GRINS::BoundaryID, libMesh::Point > _q_values
Stash prescribed boundary fluxes.
int GRINS::BCHandlingBase::string_to_int ( const std::string &  bc_type_in) const
virtual

Reimplemented in GRINS::ReactingLowMachNavierStokesBCHandling< Chemistry >, GRINS::IncompressibleNavierStokesBCHandling, GRINS::SolidMechanicsBCHandling, GRINS::HeatTransferBCHandling, GRINS::LowMachNavierStokesBCHandling, GRINS::SpalartAllmarasBCHandling, and GRINS::AxisymmetricHeatTransferBCHandling.

Definition at line 283 of file bc_handling_base.C.

References _axisymmetric, _physics_name, AXISYMMETRIC, CONSTANT_DIRICHLET, PARSED_DIRICHLET, PARSED_FEM_DIRICHLET, and PERIODIC.

Referenced by read_bc_data(), GRINS::HeatTransferBCHandling::string_to_int(), GRINS::LowMachNavierStokesBCHandling::string_to_int(), GRINS::SpalartAllmarasBCHandling::string_to_int(), GRINS::IncompressibleNavierStokesBCHandling::string_to_int(), and GRINS::SolidMechanicsBCHandling::string_to_int().

284  {
285  int bc_type_out;
286  if( bc_type_in == "periodic" )
287  {
288  bc_type_out = PERIODIC;
289  }
290  else if( bc_type_in == "constant_dirichlet" )
291  {
292  bc_type_out = CONSTANT_DIRICHLET;
293  }
294  else if( bc_type_in == "parsed_dirichlet" )
295  {
296  bc_type_out = PARSED_DIRICHLET;
297  }
298  else if( bc_type_in == "parsed_fem_dirichlet" )
299  {
300  bc_type_out = PARSED_FEM_DIRICHLET;
301  }
302  else if( bc_type_in == "axisymmetric" )
303  {
304  bc_type_out = AXISYMMETRIC;
305  this->_axisymmetric = true;
306  }
307  else
308  {
309  std::cerr << "==========================================================" << std::endl
310  << "Error: Invalid bc_type " << bc_type_in << std::endl
311  << " Physics class is " << _physics_name << std::endl
312  << "==========================================================" << std::endl;
313  libmesh_error();
314  }
315  return bc_type_out;
316  }
static bool _axisymmetric
Flag to cache whether or not there is an axisymmetric boundary present.
void GRINS::BCHandlingBase::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
virtual

Reimplemented in GRINS::ReactingLowMachNavierStokesBCHandling< Chemistry >, GRINS::SolidMechanicsBCHandling, GRINS::HeatTransferBCHandling, and GRINS::AxisymmetricHeatTransferBCHandling.

Definition at line 479 of file bc_handling_base.C.

Referenced by apply_neumann_bcs().

484  {
485  // Not all Physics need this so we have a do nothing default.
486  return;
487  }
void GRINS::BCHandlingBase::user_init_dirichlet_bcs ( libMesh::FEMSystem *  system,
libMesh::DofMap &  dof_map,
GRINS::BoundaryID  bc_id,
GRINS::BCType  bc_type 
) const
virtual

Member Data Documentation

bool GRINS::BCHandlingBase::_axisymmetric = false
staticprotected

Flag to cache whether or not there is an axisymmetric boundary present.

Definition at line 170 of file bc_handling_base.h.

Referenced by is_axisymmetric(), and string_to_int().

GRINS::BoundaryConditions GRINS::BCHandlingBase::_bound_conds
protected

Object that stashes generic boundary condition types.

Todo:
Move this so that only one object is needed. Perhaps make static?

Definition at line 156 of file bc_handling_base.h.

Referenced by GRINS::AxisymmetricHeatTransferBCHandling::user_apply_neumann_bcs(), GRINS::HeatTransferBCHandling::user_apply_neumann_bcs(), and GRINS::SolidMechanicsBCHandling::user_apply_neumann_bcs().

std::vector<std::pair<BoundaryID,BCType> > GRINS::BCHandlingBase::_dirichlet_bc_map
protected

Map between boundary id and Dirichlet boundary condition type.

We need to keep this around because the libMesh::DirichletBoundary objects can't be created until we init the variables. We use a vector of pairs so that the boundary condition functors get added to the libMesh::DofMap in the same order as in the input file.

Definition at line 137 of file bc_handling_base.h.

Referenced by get_dirichlet_bc_type(), GRINS::LowMachNavierStokesBCHandling::init_dirichlet_bcs(), init_dirichlet_bcs(), and set_dirichlet_bc_type().

std::vector< GRINS::DBCContainer > GRINS::BCHandlingBase::_dirichlet_bound_funcs
protected

Definition at line 151 of file bc_handling_base.h.

Referenced by attach_dirichlet_bound_func(), and init_dirichlet_bc_func_objs().

std::map< GRINS::BoundaryID, libMesh::Point > GRINS::BCHandlingBase::_dirichlet_values
protected

Stash prescribed Dirichlet boundary values.

Definition at line 143 of file bc_handling_base.h.

Referenced by set_dirichlet_bc_value().

std::map< GRINS::BoundaryID, GRINS::BCType> GRINS::BCHandlingBase::_neumann_bc_map
protected

Map between boundary id and Neumann boundary condition type.

Definition at line 140 of file bc_handling_base.h.

Referenced by apply_neumann_bcs(), and set_neumann_bc_type().

std::map< GRINS::BoundaryID, GRINS::NBCContainer > GRINS::BCHandlingBase::_neumann_bound_funcs
protected

Definition at line 149 of file bc_handling_base.h.

Referenced by attach_neumann_bound_func(), and get_neumann_bound_func().

unsigned int GRINS::BCHandlingBase::_num_periodic_bcs
protected

Definition at line 159 of file bc_handling_base.h.

Referenced by init_bc_types(), and init_periodic_bcs().

std::vector< GRINS::PBCContainer > GRINS::BCHandlingBase::_periodic_bcs
protected

Definition at line 158 of file bc_handling_base.h.

Referenced by init_bc_types(), and init_periodic_bcs().

std::string GRINS::BCHandlingBase::_physics_name
protected
std::map< GRINS::BoundaryID, libMesh::Point > GRINS::BCHandlingBase::_q_values
protected

Stash prescribed boundary fluxes.

Definition at line 146 of file bc_handling_base.h.

Referenced by get_neumann_bc_value(), and set_neumann_bc_value().


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

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