GRINS-0.8.0
List of all members | Public Member Functions | Protected Attributes | Private Member Functions
GRINS::SourceTermBase Class Reference

Base class for generic source function term, f(x,y,z,t). More...

#include <source_term_base.h>

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

Public Member Functions

 SourceTermBase (const std::string &physics_name, const GetPot &input)
 
virtual ~SourceTermBase ()
 
virtual void init_variables (libMesh::FEMSystem *system)
 Initialize variables for this physics. More...
 
- Public Member Functions inherited from GRINS::Physics
 Physics (const GRINS::PhysicsName &physics_name, const GetPot &input)
 
virtual ~Physics ()
 
virtual bool enabled_on_elem (const libMesh::Elem *elem)
 Find if current physics is active on supplied element. More...
 
void set_is_steady (bool is_steady)
 Sets whether this physics is to be solved with a steady solver or not. More...
 
bool is_steady () const
 Returns whether or not this physics is being solved with a steady solver. More...
 
virtual void set_time_evolving_vars (libMesh::FEMSystem *system)
 Set which variables are time evolving. More...
 
virtual void auxiliary_init (MultiphysicsSystem &system)
 Any auxillary initialization a Physics class may need. More...
 
virtual void register_postprocessing_vars (const GetPot &input, PostProcessedQuantities< libMesh::Real > &postprocessing)
 Register name of postprocessed quantity with PostProcessedQuantities. More...
 
virtual void init_context (AssemblyContext &context)
 Initialize context for added physics variables. More...
 
virtual void preassembly (MultiphysicsSystem &)
 Perform any necessary setup before element assembly begins. More...
 
virtual void reinit (MultiphysicsSystem &)
 Any reinitialization that needs to be done. More...
 
virtual void element_time_derivative (bool, AssemblyContext &)
 Time dependent part(s) of physics for element interiors. More...
 
virtual void side_time_derivative (bool, AssemblyContext &)
 Time dependent part(s) of physics for boundaries of elements on the domain boundary. More...
 
virtual void nonlocal_time_derivative (bool, AssemblyContext &)
 Time dependent part(s) of physics for scalar variables. More...
 
virtual void element_constraint (bool, AssemblyContext &)
 Constraint part(s) of physics for element interiors. More...
 
virtual void side_constraint (bool, AssemblyContext &)
 Constraint part(s) of physics for boundaries of elements on the domain boundary. More...
 
virtual void nonlocal_constraint (bool, AssemblyContext &)
 Constraint part(s) of physics for scalar variables. More...
 
virtual void damping_residual (bool, AssemblyContext &)
 Damping matrix part(s) for element interiors. All boundary terms lie within the time_derivative part. More...
 
virtual void mass_residual (bool, AssemblyContext &)
 Mass matrix part(s) for element interiors. All boundary terms lie within the time_derivative part. More...
 
virtual void nonlocal_mass_residual (bool, AssemblyContext &)
 Mass matrix part(s) for scalar variables. More...
 
void init_ics (libMesh::FEMSystem *system, libMesh::CompositeFunction< libMesh::Number > &all_ics)
 
virtual void compute_element_time_derivative_cache (AssemblyContext &)
 
virtual void compute_side_time_derivative_cache (AssemblyContext &)
 
virtual void compute_nonlocal_time_derivative_cache (AssemblyContext &)
 
virtual void compute_element_constraint_cache (AssemblyContext &)
 
virtual void compute_side_constraint_cache (AssemblyContext &)
 
virtual void compute_nonlocal_constraint_cache (AssemblyContext &)
 
virtual void compute_damping_residual_cache (AssemblyContext &)
 
virtual void compute_mass_residual_cache (AssemblyContext &)
 
virtual void compute_nonlocal_mass_residual_cache (AssemblyContext &)
 
virtual void compute_postprocessed_quantity (unsigned int quantity_index, const AssemblyContext &context, const libMesh::Point &point, libMesh::Real &value)
 
ICHandlingBaseget_ic_handler ()
 
- Public Member Functions inherited from GRINS::ParameterUser
 ParameterUser (const std::string &user_name)
 
virtual ~ParameterUser ()
 
virtual void set_parameter (libMesh::Number &param_variable, const GetPot &input, const std::string &param_name, libMesh::Number param_default)
 Each subclass can simultaneously read a parameter value from. More...
 
virtual void set_parameter (libMesh::ParsedFunction< libMesh::Number, libMesh::Gradient > &func, const GetPot &input, const std::string &func_param_name, const std::string &param_default)
 Each subclass can simultaneously read a parsed function from. More...
 
virtual void set_parameter (libMesh::ParsedFEMFunction< libMesh::Number > &func, const GetPot &input, const std::string &func_param_name, const std::string &param_default)
 Each subclass can simultaneously read a parsed function from. More...
 
virtual void move_parameter (const libMesh::Number &old_parameter, libMesh::Number &new_parameter)
 When cloning an object, we need to update parameter pointers. More...
 
virtual void move_parameter (const libMesh::ParsedFunction< libMesh::Number, libMesh::Gradient > &old_func, libMesh::ParsedFunction< libMesh::Number, libMesh::Gradient > &new_func)
 When cloning an object, we need to update parameter pointers. More...
 
virtual void move_parameter (const libMesh::ParsedFEMFunction< libMesh::Number > &old_func, libMesh::ParsedFEMFunction< libMesh::Number > &new_func)
 When cloning an object, we need to update parameter pointers. More...
 
virtual void register_parameter (const std::string &param_name, libMesh::ParameterMultiAccessor< libMesh::Number > &param_pointer) const
 Each subclass will register its copy of an independent. More...
 

Protected Attributes

std::vector< VariableIndex_vars
 
std::vector< std::string > _var_names
 
std::vector< GRINSEnums::FEFamily > _var_FE
 
std::vector< GRINSEnums::Order > _var_order
 
- Protected Attributes inherited from GRINS::Physics
const PhysicsName _physics_name
 Name of the physics object. Used for reading physics specific inputs. More...
 
GRINS::ICHandlingBase_ic_handler
 
std::set< libMesh::subdomain_id_type > _enabled_subdomains
 Subdomains on which the current Physics class is enabled. More...
 

Private Member Functions

 SourceTermBase ()
 
void parse_var_info (const GetPot &input)
 Helper function. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from GRINS::Physics
static void set_is_axisymmetric (bool is_axisymmetric)
 Set whether we should treat the problem as axisymmetric. More...
 
static bool is_axisymmetric ()
 
- Static Public Attributes inherited from GRINS::ParameterUser
static std::string zero_vector_function = std::string("{0}")
 A parseable function string with LIBMESH_DIM components, all 0. More...
 
- Protected Member Functions inherited from GRINS::Physics
libMesh::UniquePtr< libMesh::FEGenericBase< libMesh::Real > > build_new_fe (const libMesh::Elem *elem, const libMesh::FEGenericBase< libMesh::Real > *fe, const libMesh::Point p)
 
void parse_enabled_subdomains (const GetPot &input, const std::string &physics_name)
 
void check_var_subdomain_consistency (const FEVariablesBase &var) const
 Check that var is enabled on at least the subdomains this Physics is. More...
 
- Static Protected Attributes inherited from GRINS::Physics
static bool _is_steady = false
 Caches whether or not the solver that's being used is steady or not. More...
 
static bool _is_axisymmetric = false
 Caches whether we are solving an axisymmetric problem or not. More...
 

Detailed Description

Base class for generic source function term, f(x,y,z,t).

Idea is for the user to specify which variables they want to add a source term and then, depending on the subclass, parse for each variable and have it added to that equation.

Definition at line 50 of file source_term_base.h.

Constructor & Destructor Documentation

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

Definition at line 35 of file source_term_base.C.

References parse_var_info().

36  : Physics(physics_name,input)
37  {
38  this->parse_var_info(input);
39 
40  return;
41  }
void parse_var_info(const GetPot &input)
Helper function.
GRINS::SourceTermBase::~SourceTermBase ( )
virtual

Definition at line 43 of file source_term_base.C.

44  {
45  return;
46  }
GRINS::SourceTermBase::SourceTermBase ( )
private

Member Function Documentation

void GRINS::SourceTermBase::init_variables ( libMesh::FEMSystem *  )
virtual

Initialize variables for this physics.

Reimplemented from GRINS::Physics.

Definition at line 95 of file source_term_base.C.

References _var_FE, _var_names, _var_order, and _vars.

96  {
97  // We'd better have at least 1 variable read from input
98  libmesh_assert( !_var_names.empty() );
99 
100  _vars.resize( _var_names.size() );
101 
102  for( unsigned int var = 0; var < _vars.size(); var++ )
103  {
104  _vars[var] = system->add_variable( _var_names[var], _var_order[var], _var_FE[var] );
105  }
106 
107  return;
108  }
std::vector< VariableIndex > _vars
std::vector< std::string > _var_names
std::vector< GRINSEnums::Order > _var_order
std::vector< GRINSEnums::FEFamily > _var_FE
void GRINS::SourceTermBase::parse_var_info ( const GetPot &  input)
private

Helper function.

Todo:
In the future, after refactoring Variable parsing, we should be able get the FE type and order information from there.

Definition at line 48 of file source_term_base.C.

References GRINS::Physics::_physics_name, _var_FE, _var_names, and _var_order.

Referenced by SourceTermBase().

49  {
50  if( !input.have_variable("Physics/"+this->_physics_name+"/Variables/names") )
51  {
52  libMesh::err << "Error: Must have at least one variable for source function." << std::endl
53  << " Ensure that Physics/"+this->_physics_name+"/Variables/names is set." << std::endl;
54  libmesh_error();
55  }
56 
57  unsigned int n_vars = input.vector_variable_size("Physics/"+this->_physics_name+"/Variables/names");
58 
59  // Make sure we have consisent number of FE types and FE orders
62  unsigned int n_fe_types = input.vector_variable_size("Physics/"+this->_physics_name+"/Variables/FE_types");
63 
64  unsigned int n_fe_orders = input.vector_variable_size("Physics/"+this->_physics_name+"/Variables/FE_orders");
65 
66  if( n_fe_types != n_vars )
67  {
68  libMesh::err << "Error: Must have matching number of variable names and FE types." << std::endl
69  << " Found " << n_fe_types << " FE types and " << n_vars << " variables." << std::endl
70  << " Ensure Physics/"+this->_physics_name+"/Variables/FE_types is consistent." << std::endl;
71  libmesh_error();
72  }
73 
74  if( n_fe_orders != n_vars )
75  {
76  libMesh::err << "Error: Must have matching number of variable names and FE orders." << std::endl
77  << " Found " << n_fe_orders << " FE orders and " << n_vars << " variables." << std::endl
78  << " Ensure Physics/"+this->_physics_name+"/Variables/FE_orders is consistent." << std::endl;
79  libmesh_error();
80  }
81 
82  _var_names.reserve(n_vars);
83  _var_FE.reserve(n_vars);
84  _var_order.reserve(n_vars);
85  for( unsigned int v = 0; v < n_vars; v++ )
86  {
87  _var_names.push_back( input("Physics/"+this->_physics_name+"/Variables/names", "DIE!", v) );
88  _var_FE.push_back( libMesh::Utility::string_to_enum<GRINSEnums::FEFamily>(input("Physics/"+this->_physics_name+"/Variables/FE_types", "DIE!", v)) );
89  _var_order.push_back( libMesh::Utility::string_to_enum<GRINSEnums::Order>(input("Physics/"+this->_physics_name+"/Variables/FE_orders", "DIE!", v)) );
90  }
91 
92  return;
93  }
std::vector< std::string > _var_names
const PhysicsName _physics_name
Name of the physics object. Used for reading physics specific inputs.
Definition: physics.h:256
std::vector< GRINSEnums::Order > _var_order
std::vector< GRINSEnums::FEFamily > _var_FE

Member Data Documentation

std::vector<GRINSEnums::FEFamily> GRINS::SourceTermBase::_var_FE
protected

Definition at line 64 of file source_term_base.h.

Referenced by init_variables(), and parse_var_info().

std::vector<std::string> GRINS::SourceTermBase::_var_names
protected

Definition at line 63 of file source_term_base.h.

Referenced by init_variables(), and parse_var_info().

std::vector<GRINSEnums::Order> GRINS::SourceTermBase::_var_order
protected

Definition at line 65 of file source_term_base.h.

Referenced by init_variables(), and parse_var_info().

std::vector<VariableIndex> GRINS::SourceTermBase::_vars
protected

Definition at line 62 of file source_term_base.h.

Referenced by GRINS::ParsedSourceTerm::init_context(), and init_variables().


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

Generated on Tue Dec 19 2017 12:47:32 for GRINS-0.8.0 by  doxygen 1.8.9.1