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

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

#include <inc_navier_stokes_bc_handling.h>

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

Public Member Functions

 IncompressibleNavierStokesBCHandling (const std::string &physics_name, const GetPot &input)
 
virtual ~IncompressibleNavierStokesBCHandling ()
 
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. More...
 
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
 
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 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
 
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

PrimitiveFlowVariables _flow_vars
 
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 Types

enum  INS_BC_TYPES { NO_SLIP =1, PRESCRIBED_VELOCITY, PARABOLIC_PROFILE, GENERAL_VELOCITY }
 

Private Member Functions

 IncompressibleNavierStokesBCHandling ()
 

Detailed Description

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

Definition at line 35 of file inc_navier_stokes_bc_handling.h.

Member Enumeration Documentation

enum GRINS::BCHandlingBase::BC_BASE
protectedinherited

Constructor & Destructor Documentation

GRINS::IncompressibleNavierStokesBCHandling::IncompressibleNavierStokesBCHandling ( const std::string &  physics_name,
const GetPot &  input 
)

Definition at line 41 of file inc_navier_stokes_bc_handling.C.

References GRINS::BCHandlingBase::_physics_name, and GRINS::BCHandlingBase::read_bc_data().

43  : BCHandlingBase(physics_name),
44  _flow_vars(input)
45  {
46  std::string id_str = "Physics/"+_physics_name+"/bc_ids";
47  std::string bc_str = "Physics/"+_physics_name+"/bc_types";
48  std::string var_str = "Physics/"+_physics_name+"/bc_variables";
49  std::string val_str = "Physics/"+_physics_name+"/bc_values";
50 
51  this->read_bc_data( input, id_str, bc_str, var_str, val_str );
52 
53  return;
54  }
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)
GRINS::IncompressibleNavierStokesBCHandling::~IncompressibleNavierStokesBCHandling ( )
virtual

Definition at line 56 of file inc_navier_stokes_bc_handling.C.

57  {
58  return;
59  }
GRINS::IncompressibleNavierStokesBCHandling::IncompressibleNavierStokesBCHandling ( )
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
virtualinherited

Definition at line 234 of file bc_handling_base.C.

References GRINS::BCHandlingBase::_neumann_bc_map, and GRINS::BCHandlingBase::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)
inherited
void GRINS::BCHandlingBase::attach_neumann_bound_func ( GRINS::NBCContainer neumann_bcs)
inherited

Definition at line 61 of file bc_handling_base.C.

References GRINS::BCHandlingBase::_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
inlineinherited

Definition at line 207 of file bc_handling_base.h.

References GRINS::BCHandlingBase::_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
inherited
const libMesh::Point & GRINS::BCHandlingBase::get_neumann_bc_value ( GRINS::BoundaryID  bc_id) const
inlineinherited

Definition at line 185 of file bc_handling_base.h.

References GRINS::BCHandlingBase::_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
inlineinherited

Definition at line 192 of file bc_handling_base.h.

References GRINS::BCHandlingBase::_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 
)
inlineinherited

Definition at line 200 of file bc_handling_base.h.

References GRINS::BCHandlingBase::_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::IncompressibleNavierStokesBCHandling::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 from GRINS::BCHandlingBase.

Definition at line 86 of file inc_navier_stokes_bc_handling.C.

References _flow_vars, and GRINS::PrimitiveFlowVariables::init().

87  {
88  _flow_vars.init(const_cast<libMesh::FEMSystem*>(&system));
89 
90  return;
91  }
virtual void init(libMesh::FEMSystem *system)
void GRINS::IncompressibleNavierStokesBCHandling::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 from GRINS::BCHandlingBase.

Definition at line 93 of file inc_navier_stokes_bc_handling.C.

References GRINS::BCHandlingBase::_physics_name, GRINS::DBCContainer::add_bc_id(), GRINS::DBCContainer::add_var_name(), GRINS::BCHandlingBase::attach_dirichlet_bound_func(), GRINS::BCHandlingBase::AXISYMMETRIC, GENERAL_VELOCITY, GRINS::BCHandlingBase::init_bc_types(), NO_SLIP, PARABOLIC_PROFILE, PRESCRIBED_VELOCITY, GRINS::BCHandlingBase::set_dirichlet_bc_type(), GRINS::BCHandlingBase::set_dirichlet_bc_value(), and GRINS::DBCContainer::set_func().

99  {
100  switch(bc_type)
101  {
102  case(NO_SLIP):
103  {
104  this->set_dirichlet_bc_type( bc_id, bc_type );
105  }
106  break;
107  case(PRESCRIBED_VELOCITY):
108  {
109  this->set_dirichlet_bc_type( bc_id, bc_type );
110 
111  /* Force the user to specify 3 velocity components regardless of dimension.
112  This should make it easier to keep things correct if we want to have
113  2D flow not be in the x-y plane. */
114  int n_vel_comps = input.vector_variable_size("Physics/"+_physics_name+"/bound_vel_"+bc_id_string);
115  if( n_vel_comps != 3 )
116  {
117  std::cerr << "Error: Must specify 3 velocity components when inputting"
118  << std::endl
119  << " prescribed velocities. Found " << n_vel_comps
120  << " velocity components."
121  << std::endl;
122  libmesh_error();
123  }
124 
125  this->set_dirichlet_bc_value( bc_id,
126  input("Physics/"+_physics_name+"/bound_vel_"+bc_id_string, 0.0, 0 ),
127  0 );
128 
129  this->set_dirichlet_bc_value( bc_id,
130  input("Physics/"+_physics_name+"/bound_vel_"+bc_id_string, 0.0, 1 ),
131  1 );
132 
133 #if LIBMESH_DIM > 2
134  this->set_dirichlet_bc_value( bc_id,
135  input("Physics/"+_physics_name+"/bound_vel_"+bc_id_string, 0.0, 2 ),
136  2 );
137 #endif
138  }
139  break;
140  case(PARABOLIC_PROFILE):
141  {
142  this->set_dirichlet_bc_type( bc_id, bc_type );
143 
144  // Make sure all 6 components are there
145  if( input.vector_variable_size("Physics/"+_physics_name+"/parabolic_profile_coeffs_"+bc_id_string) != 6 )
146  {
147  std::cerr << "Error: Must specify 6 components when inputting"
148  << std::endl
149  << " coefficients for a parabolic profile. Found "
150  << input.vector_variable_size("Physics/"+_physics_name+"/parabolic_profile_"+bc_id_string)
151  << " components."
152  << std::endl;
153  libmesh_error();
154  }
155 
156  libMesh::Real a = input( "Physics/"+_physics_name+"/parabolic_profile_coeffs_"+bc_id_string, 0.0, 0 );
157  libMesh::Real b = input( "Physics/"+_physics_name+"/parabolic_profile_coeffs_"+bc_id_string, 0.0, 1 );
158  libMesh::Real c = input( "Physics/"+_physics_name+"/parabolic_profile_coeffs_"+bc_id_string, 0.0, 2 );
159  libMesh::Real d = input( "Physics/"+_physics_name+"/parabolic_profile_coeffs_"+bc_id_string, 0.0, 3 );
160  libMesh::Real e = input( "Physics/"+_physics_name+"/parabolic_profile_coeffs_"+bc_id_string, 0.0, 4 );
161  libMesh::Real f = input( "Physics/"+_physics_name+"/parabolic_profile_coeffs_"+bc_id_string, 0.0, 5 );
162 
163  std::string var = input( "Physics/"+_physics_name+"/parabolic_profile_var_"+bc_id_string, "DIE!" );
164 
165  if( var == "DIE!" )
166  {
167  std::cerr << "Error: Mush specify a variable name to which apply parabolic profile through parabolic_profile_var input option." << std::endl;
168  libmesh_error();
169  }
170 
171  DBCContainer cont;
172  cont.add_var_name( var );
173  cont.add_bc_id( bc_id );
174 
175  std::tr1::shared_ptr<libMesh::FunctionBase<libMesh::Number> > func( new ParabolicProfile(a,b,c,d,e,f) );
176  cont.set_func( func );
177  this->attach_dirichlet_bound_func( cont );
178 
179  // Set specified components of Dirichlet data to zero
180  std::string fix_var = input( "Physics/"+_physics_name+"/parabolic_profile_fix_"+bc_id_string, "DIE!" );
181 
182  if( fix_var == "DIE!" )
183  {
184  std::cerr << "Error: Mush specify a variable name to fix for parabolic profile through parabolic_profile_fix input option." << std::endl;
185  libmesh_error();
186  }
187 
188  DBCContainer cont_fix;
189  cont_fix.add_var_name( fix_var );
190  cont_fix.add_bc_id( bc_id );
191 
192  std::tr1::shared_ptr<libMesh::FunctionBase<libMesh::Number> >
193  func_fix( new libMesh::ZeroFunction<libMesh::Number>() );
194  cont_fix.set_func( func_fix );
195  this->attach_dirichlet_bound_func( cont_fix );
196  }
197  break;
198 
199  case(GENERAL_VELOCITY):
200  {
201  this->set_dirichlet_bc_type( bc_id, bc_type );
202  }
203  break;
204 
205  case(AXISYMMETRIC):
206  {
207  this->set_dirichlet_bc_type( bc_id, bc_type );
208  }
209  break;
210 
211  default:
212  {
213  // Call base class to detect any physics-common boundary conditions
214  BCHandlingBase::init_bc_types( bc_id, bc_id_string, bc_type,
215  bc_vars, bc_value, input );
216  }
217  } // End switch(bc_type)
218 
219  return;
220  }
void attach_dirichlet_bound_func(const GRINS::DBCContainer &dirichlet_bc)
void set_dirichlet_bc_value(GRINS::BoundaryID bc_id, libMesh::Real value, int component=0)
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)
void set_dirichlet_bc_type(GRINS::BoundaryID bc_id, int bc_type)
void GRINS::BCHandlingBase::init_dirichlet_bc_func_objs ( libMesh::FEMSystem *  system) const
virtualinherited

Definition at line 116 of file bc_handling_base.C.

References GRINS::BCHandlingBase::_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
virtualinherited

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

Definition at line 190 of file bc_handling_base.C.

References GRINS::BCHandlingBase::_dirichlet_bc_map, and GRINS::BCHandlingBase::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
virtualinherited

Definition at line 203 of file bc_handling_base.C.

References GRINS::BCHandlingBase::_num_periodic_bcs, and GRINS::BCHandlingBase::_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
inlineinherited
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 
)
virtualinherited

Definition at line 73 of file bc_handling_base.C.

References GRINS::BCHandlingBase::init_bc_types(), and GRINS::BCHandlingBase::string_to_int().

Referenced by GRINS::AxisymmetricHeatTransferBCHandling::AxisymmetricHeatTransferBCHandling(), GRINS::HeatTransferBCHandling::HeatTransferBCHandling(), 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 
)
inherited

Definition at line 252 of file bc_handling_base.C.

References GRINS::BCHandlingBase::_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 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 
)
inherited

Definition at line 264 of file bc_handling_base.C.

References GRINS::BCHandlingBase::_dirichlet_values.

Referenced by GRINS::AxisymmetricHeatTransferBCHandling::init_bc_types(), GRINS::HeatTransferBCHandling::init_bc_types(), GRINS::LowMachNavierStokesBCHandling::init_bc_types(), 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 
)
inherited

Definition at line 258 of file bc_handling_base.C.

References GRINS::BCHandlingBase::_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 
)
inherited
int GRINS::IncompressibleNavierStokesBCHandling::string_to_int ( const std::string &  bc_type_in) const
virtual

Reimplemented from GRINS::BCHandlingBase.

Definition at line 61 of file inc_navier_stokes_bc_handling.C.

References GENERAL_VELOCITY, NO_SLIP, PARABOLIC_PROFILE, PRESCRIBED_VELOCITY, and GRINS::BCHandlingBase::string_to_int().

62  {
63  int bc_type_out;
64 
65  if( bc_type == "no_slip" )
66  bc_type_out = NO_SLIP;
67 
68  else if( bc_type == "prescribed_vel" )
69  bc_type_out = PRESCRIBED_VELOCITY;
70 
71  else if( bc_type == "parabolic_profile" )
72  bc_type_out = PARABOLIC_PROFILE;
73 
74  else if( bc_type == "general_velocity" )
75  bc_type_out = GENERAL_VELOCITY;
76 
77  else
78  {
79  // Call base class to detect any physics-common boundary conditions
80  bc_type_out = BCHandlingBase::string_to_int( bc_type );
81  }
82 
83  return bc_type_out;
84  }
virtual int string_to_int(const std::string &bc_type_in) const
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
virtualinherited

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

Definition at line 479 of file bc_handling_base.C.

Referenced by GRINS::BCHandlingBase::apply_neumann_bcs().

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

Reimplemented from GRINS::BCHandlingBase.

Definition at line 222 of file inc_navier_stokes_bc_handling.C.

References _flow_vars, GRINS::BCHandlingBase::AXISYMMETRIC, GENERAL_VELOCITY, GRINS::BCHandlingBase::get_dirichlet_bc_value(), NO_SLIP, PARABOLIC_PROFILE, PRESCRIBED_VELOCITY, GRINS::PrimitiveFlowVariables::u_var(), GRINS::PrimitiveFlowVariables::v_var(), and GRINS::PrimitiveFlowVariables::w_var().

226  {
227  int dim = system->get_mesh().mesh_dimension();
228 
229  VariableIndex u_var = _flow_vars.u_var();
230  VariableIndex v_var = _flow_vars.v_var();
231  VariableIndex w_var = -1;
232  if( dim == 3 )
233  w_var = _flow_vars.w_var();
234 
235  switch( bc_type )
236  {
237  case(NO_SLIP):
238  {
239  std::set<BoundaryID> dbc_ids;
240  dbc_ids.insert(bc_id);
241 
242  std::vector<VariableIndex> dbc_vars;
243  dbc_vars.push_back(u_var);
244  dbc_vars.push_back(v_var);
245  if(dim == 3)
246  dbc_vars.push_back(w_var);
247 
248  libMesh::ZeroFunction<libMesh::Number> zero;
249 
250  libMesh::DirichletBoundary no_slip_dbc(dbc_ids,
251  dbc_vars,
252  &zero );
253 
254  dof_map.add_dirichlet_boundary( no_slip_dbc );
255  }
256  break;
257  case(PRESCRIBED_VELOCITY):
258  {
259  std::set<BoundaryID> dbc_ids;
260  dbc_ids.insert(bc_id);
261 
262  std::vector<VariableIndex> dbc_vars;
263 
264  // This is inefficient, but it shouldn't matter because
265  // everything gets cached on the libMesh side so it should
266  // only affect performance at startup.
267  {
268  dbc_vars.push_back(u_var);
269  libMesh::ConstFunction<libMesh::Number>
270  vel_func( this->get_dirichlet_bc_value(bc_id,0) );
271 
272  libMesh::DirichletBoundary vel_dbc(dbc_ids,
273  dbc_vars,
274  &vel_func );
275 
276  dof_map.add_dirichlet_boundary( vel_dbc );
277  dbc_vars.clear();
278  }
279 
280  {
281  dbc_vars.push_back(v_var);
282  libMesh::ConstFunction<libMesh::Number>
283  vel_func( this->get_dirichlet_bc_value(bc_id,1) );
284 
285  libMesh::DirichletBoundary vel_dbc(dbc_ids,
286  dbc_vars,
287  &vel_func );
288 
289  dof_map.add_dirichlet_boundary( vel_dbc );
290  dbc_vars.clear();
291  }
292  if( dim == 3 )
293  {
294  dbc_vars.push_back(w_var);
295  libMesh::ConstFunction<libMesh::Number>
296  vel_func( this->get_dirichlet_bc_value(bc_id,2) );
297 
298  libMesh::DirichletBoundary vel_dbc(dbc_ids,
299  dbc_vars,
300  &vel_func );
301 
302  dof_map.add_dirichlet_boundary( vel_dbc );
303  }
304  }
305  break;
306  case(PARABOLIC_PROFILE):
307  // This case is handled init_dirichlet_bc_func_objs
308  break;
309 
310  case(GENERAL_VELOCITY):
311  // This case is handled in the init_dirichlet_bc_func_objs
312  break;
313 
314  case(AXISYMMETRIC):
315  {
316  std::set<BoundaryID> dbc_ids;
317  dbc_ids.insert(bc_id);
318 
319  std::vector<VariableIndex> dbc_vars;
320  dbc_vars.push_back(u_var);
321 
322  libMesh::ZeroFunction<libMesh::Number> zero;
323 
324  libMesh::DirichletBoundary no_slip_dbc( dbc_ids,
325  dbc_vars,
326  &zero );
327 
328  dof_map.add_dirichlet_boundary( no_slip_dbc );
329  }
330  break;
331 
332  default:
333  {
334  std::cerr << "Invalid BCType " << bc_type << std::endl;
335  libmesh_error();
336  }
337 
338  }// end switch
339 
340  return;
341  }
unsigned int VariableIndex
More descriptive name of the type used for variable indices.
Definition: var_typedefs.h:40
libMesh::Real get_dirichlet_bc_value(GRINS::BoundaryID bc_id, int component=0) const

Member Data Documentation

bool GRINS::BCHandlingBase::_axisymmetric = false
staticprotectedinherited

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

Definition at line 170 of file bc_handling_base.h.

Referenced by GRINS::BCHandlingBase::is_axisymmetric(), and GRINS::BCHandlingBase::string_to_int().

GRINS::BoundaryConditions GRINS::BCHandlingBase::_bound_conds
protectedinherited

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
protectedinherited

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 GRINS::BCHandlingBase::get_dirichlet_bc_type(), GRINS::LowMachNavierStokesBCHandling::init_dirichlet_bcs(), GRINS::BCHandlingBase::init_dirichlet_bcs(), and GRINS::BCHandlingBase::set_dirichlet_bc_type().

std::vector< GRINS::DBCContainer > GRINS::BCHandlingBase::_dirichlet_bound_funcs
protectedinherited
std::map< GRINS::BoundaryID, libMesh::Point > GRINS::BCHandlingBase::_dirichlet_values
protectedinherited

Stash prescribed Dirichlet boundary values.

Definition at line 143 of file bc_handling_base.h.

Referenced by GRINS::BCHandlingBase::set_dirichlet_bc_value().

PrimitiveFlowVariables GRINS::IncompressibleNavierStokesBCHandling::_flow_vars
protected

Definition at line 62 of file inc_navier_stokes_bc_handling.h.

Referenced by init_bc_data(), and user_init_dirichlet_bcs().

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

Map between boundary id and Neumann boundary condition type.

Definition at line 140 of file bc_handling_base.h.

Referenced by GRINS::BCHandlingBase::apply_neumann_bcs(), and GRINS::BCHandlingBase::set_neumann_bc_type().

std::map< GRINS::BoundaryID, GRINS::NBCContainer > GRINS::BCHandlingBase::_neumann_bound_funcs
protectedinherited
unsigned int GRINS::BCHandlingBase::_num_periodic_bcs
protectedinherited
std::vector< GRINS::PBCContainer > GRINS::BCHandlingBase::_periodic_bcs
protectedinherited
std::string GRINS::BCHandlingBase::_physics_name
protectedinherited
std::map< GRINS::BoundaryID, libMesh::Point > GRINS::BCHandlingBase::_q_values
protectedinherited

Stash prescribed boundary fluxes.

Definition at line 146 of file bc_handling_base.h.

Referenced by GRINS::BCHandlingBase::get_neumann_bc_value(), and GRINS::BCHandlingBase::set_neumann_bc_value().


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

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