GRINS-0.7.0
List of all members | Public Member Functions | Private Member Functions | Private Attributes
GRINS::ScalarODE Class Reference

Physics class for arbitrary scalar-valued ODEs. More...

#include <scalar_ode.h>

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

Public Member Functions

 ScalarODE (const std::string &physics_name, const GetPot &input)
 
 ~ScalarODE ()
 
virtual void init_variables (libMesh::FEMSystem *system)
 Initialization of variables. More...
 
virtual void set_time_evolving_vars (libMesh::FEMSystem *system)
 Sets scalar variable(s) to be time-evolving. More...
 
virtual void init_context (AssemblyContext &context)
 Prepare the context for evaluations. More...
 
virtual void nonlocal_time_derivative (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Time dependent part(s) of physics for scalar variables. More...
 
virtual void nonlocal_constraint (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Constraint part(s) of physics for scalar variables. More...
 
virtual void nonlocal_mass_residual (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Mass matrix part(s) for scalar variables. More...
 
VariableIndex scalar_ode_var () const
 
- 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 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 element_time_derivative (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Time dependent part(s) of physics for element interiors. More...
 
virtual void side_time_derivative (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Time dependent part(s) of physics for boundaries of elements on the domain boundary. More...
 
virtual void element_constraint (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Constraint part(s) of physics for element interiors. More...
 
virtual void side_constraint (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Constraint part(s) of physics for boundaries of elements on the domain boundary. More...
 
virtual void damping_residual (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Damping matrix part(s) for element interiors. All boundary terms lie within the time_derivative part. More...
 
virtual void mass_residual (bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
 Mass matrix part(s) for element interiors. All boundary terms lie within the time_derivative part. More...
 
void init_ics (libMesh::FEMSystem *system, libMesh::CompositeFunction< libMesh::Number > &all_ics)
 
virtual void compute_element_time_derivative_cache (const AssemblyContext &context, CachedValues &cache)
 
virtual void compute_side_time_derivative_cache (const AssemblyContext &context, CachedValues &cache)
 
virtual void compute_nonlocal_time_derivative_cache (const AssemblyContext &context, CachedValues &cache)
 
virtual void compute_element_constraint_cache (const AssemblyContext &context, CachedValues &cache)
 
virtual void compute_side_constraint_cache (const AssemblyContext &context, CachedValues &cache)
 
virtual void compute_nonlocal_constraint_cache (const AssemblyContext &context, CachedValues &cache)
 
virtual void compute_damping_residual_cache (const AssemblyContext &context, CachedValues &cache)
 
virtual void compute_mass_residual_cache (const AssemblyContext &context, CachedValues &cache)
 
virtual void compute_nonlocal_mass_residual_cache (const AssemblyContext &context, CachedValues &cache)
 
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...
 

Private Member Functions

 ScalarODE ()
 
void read_input_options (const GetPot &input)
 Read options from GetPot input file. More...
 

Private Attributes

libMesh::UniquePtr< libMesh::FEMFunctionBase< libMesh::Number > > time_deriv_function
 
libMesh::UniquePtr< libMesh::FEMFunctionBase< libMesh::Number > > constraint_function
 
libMesh::UniquePtr< libMesh::FEMFunctionBase< libMesh::Number > > mass_residual_function
 
libMesh::Number _order
 
libMesh::Number _epsilon
 
VariableIndex _scalar_ode_var
 
std::string _scalar_ode_var_name
 
const GetPot & _input
 

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)
 
- 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...
 
- 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

Physics class for arbitrary scalar-valued ODEs.

Definition at line 50 of file scalar_ode.h.

Constructor & Destructor Documentation

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

Definition at line 40 of file scalar_ode.C.

References GRINS::Physics::_ic_handler, and read_input_options().

41  : Physics(physics_name, input),
42  _order(1),
43  _epsilon(1e-6),
44  _input(input)
45  {
46  this->read_input_options(input);
47 
48  this->_ic_handler = new GenericICHandler( physics_name, input );
49  }
GRINS::ICHandlingBase * _ic_handler
Definition: physics.h:269
const GetPot & _input
Definition: scalar_ode.h:109
libMesh::Number _order
Definition: scalar_ode.h:100
void read_input_options(const GetPot &input)
Read options from GetPot input file.
Definition: scalar_ode.C:98
libMesh::Number _epsilon
Definition: scalar_ode.h:103
GRINS::ScalarODE::~ScalarODE ( )
inline

Definition at line 56 of file scalar_ode.h.

56 {};
GRINS::ScalarODE::ScalarODE ( )
private

Member Function Documentation

void GRINS::ScalarODE::init_context ( AssemblyContext context)
virtual

Prepare the context for evaluations.

Reimplemented from GRINS::Physics.

Definition at line 109 of file scalar_ode.C.

References constraint_function, mass_residual_function, and time_deriv_function.

110  {
111  mass_residual_function->init_context(context);
112  time_deriv_function->init_context(context);
113  constraint_function->init_context(context);
114  }
libMesh::UniquePtr< libMesh::FEMFunctionBase< libMesh::Number > > mass_residual_function
Definition: scalar_ode.h:94
libMesh::UniquePtr< libMesh::FEMFunctionBase< libMesh::Number > > time_deriv_function
Definition: scalar_ode.h:94
libMesh::UniquePtr< libMesh::FEMFunctionBase< libMesh::Number > > constraint_function
Definition: scalar_ode.h:94
void GRINS::ScalarODE::init_variables ( libMesh::FEMSystem *  system)
virtual

Initialization of variables.

Add scalar variable(s) to system.

Implements GRINS::Physics.

Definition at line 51 of file scalar_ode.C.

References _order, _scalar_ode_var, and _scalar_ode_var_name.

52  {
53  this->_scalar_ode_var = system->add_variable(_scalar_ode_var_name,
54  libMesh::Order(this->_order),
55  libMesh::SCALAR);
56  }
std::string _scalar_ode_var_name
Definition: scalar_ode.h:107
libMesh::Number _order
Definition: scalar_ode.h:100
VariableIndex _scalar_ode_var
Definition: scalar_ode.h:105
void GRINS::ScalarODE::nonlocal_constraint ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
virtual

Constraint part(s) of physics for scalar variables.

Reimplemented from GRINS::Physics.

Definition at line 209 of file scalar_ode.C.

References _epsilon, and _scalar_ode_var.

212  {
213  libMesh::DenseSubMatrix<libMesh::Number> &Kss =
214  context.get_elem_jacobian(_scalar_ode_var, _scalar_ode_var); // R_{s},{s}
215 
216  libMesh::DenseSubVector<libMesh::Number> &Fs =
217  context.get_elem_residual(_scalar_ode_var); // R_{s}
218 
219  const libMesh::Number constraint =
220  (*constraint_function)(context, libMesh::Point(0),
221  context.get_time());
222 
223  Fs(0) += constraint;
224 
225  if (compute_jacobian)
226  {
227  // FIXME: we should replace this hacky FDM with a hook to the
228  // AD fparser stuff
229  libMesh::DenseSubVector<libMesh::Number> &Us =
230  const_cast<libMesh::DenseSubVector<libMesh::Number>&>
231  (context.get_elem_solution(_scalar_ode_var)); // U_{s}
232 
233  const libMesh::Number s = Us(0);
234  Us(0) = s + this->_epsilon;
235  libMesh::Number constraint_jacobian =
236  (*constraint_function)(context, libMesh::Point(0),
237  context.get_time());
238 
239  Us(0) = s - this->_epsilon;
240  constraint_jacobian -=
241  (*constraint_function)(context, libMesh::Point(0),
242  context.get_time());
243 
244  Us(0) = s;
245  constraint_jacobian /= (2*this->_epsilon);
246 
247  Kss(0,0) += constraint_jacobian *
248  context.get_elem_solution_derivative();
249  }
250 
251  return;
252  }
libMesh::Number _epsilon
Definition: scalar_ode.h:103
VariableIndex _scalar_ode_var
Definition: scalar_ode.h:105
void GRINS::ScalarODE::nonlocal_mass_residual ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
virtual

Mass matrix part(s) for scalar variables.

Reimplemented from GRINS::Physics.

Definition at line 163 of file scalar_ode.C.

References _epsilon, and _scalar_ode_var.

166  {
167  libMesh::DenseSubMatrix<libMesh::Number> &Kss =
168  context.get_elem_jacobian(_scalar_ode_var, _scalar_ode_var); // R_{s},{s}
169 
170  libMesh::DenseSubVector<libMesh::Number> &Fs =
171  context.get_elem_residual(_scalar_ode_var); // R_{s}
172 
173  const libMesh::Number mass_res =
174  (*mass_residual_function)(context, libMesh::Point(0),
175  context.get_time());
176 
177  Fs(0) -= mass_res;
178 
179  if (compute_jacobian)
180  {
181  // FIXME: we should replace this hacky FDM with a hook to the
182  // AD fparser stuff
183  libMesh::DenseSubVector<libMesh::Number> &Us =
184  const_cast<libMesh::DenseSubVector<libMesh::Number>&>
185  (context.get_elem_solution_rate(_scalar_ode_var)); // U_{s}
186 
187  const libMesh::Number s = Us(0);
188  Us(0) = s + this->_epsilon;
189  libMesh::Number mass_residual_jacobian =
190  (*mass_residual_function)(context, libMesh::Point(0),
191  context.get_time());
192 
193  Us(0) = s - this->_epsilon;
194  mass_residual_jacobian -=
195  (*mass_residual_function)(context, libMesh::Point(0),
196  context.get_time());
197 
198  Us(0) = s;
199  mass_residual_jacobian /= (2*this->_epsilon);
200 
201  Kss(0,0) -= mass_residual_jacobian *
202  context.get_elem_solution_rate_derivative();
203  }
204 
205  return;
206  }
libMesh::Number _epsilon
Definition: scalar_ode.h:103
VariableIndex _scalar_ode_var
Definition: scalar_ode.h:105
void GRINS::ScalarODE::nonlocal_time_derivative ( bool  compute_jacobian,
AssemblyContext context,
CachedValues cache 
)
virtual

Time dependent part(s) of physics for scalar variables.

Reimplemented from GRINS::Physics.

Definition at line 117 of file scalar_ode.C.

References _epsilon, and _scalar_ode_var.

120  {
121  libMesh::DenseSubMatrix<libMesh::Number> &Kss =
122  context.get_elem_jacobian(_scalar_ode_var, _scalar_ode_var); // R_{s},{s}
123 
124  libMesh::DenseSubVector<libMesh::Number> &Fs =
125  context.get_elem_residual(_scalar_ode_var); // R_{s}
126 
127  const libMesh::Number time_deriv =
128  (*time_deriv_function)(context, libMesh::Point(0),
129  context.get_time());
130 
131  Fs(0) += time_deriv;
132 
133  if (compute_jacobian)
134  {
135  // FIXME: we should replace this hacky FDM with a hook to the
136  // AD fparser stuff
137  libMesh::DenseSubVector<libMesh::Number> &Us =
138  const_cast<libMesh::DenseSubVector<libMesh::Number>&>
139  (context.get_elem_solution(_scalar_ode_var)); // U_{s}
140 
141  const libMesh::Number s = Us(0);
142  Us(0) = s + this->_epsilon;
143  libMesh::Number time_deriv_jacobian =
144  (*time_deriv_function)(context, libMesh::Point(0),
145  context.get_time());
146 
147  Us(0) = s - this->_epsilon;
148  time_deriv_jacobian -=
149  (*time_deriv_function)(context, libMesh::Point(0),
150  context.get_time());
151 
152  Us(0) = s;
153  time_deriv_jacobian /= (2*this->_epsilon);
154 
155  Kss(0,0) += time_deriv_jacobian *
156  context.get_elem_solution_derivative();
157  }
158 
159  return;
160  }
libMesh::Number _epsilon
Definition: scalar_ode.h:103
VariableIndex _scalar_ode_var
Definition: scalar_ode.h:105
void GRINS::ScalarODE::read_input_options ( const GetPot &  input)
private

Read options from GetPot input file.

Definition at line 98 of file scalar_ode.C.

References _epsilon, _order, _scalar_ode_var_name, GRINS::PhysicsNaming::scalar_ode(), and GRINS::scalar_ode_var_name_default.

Referenced by ScalarODE().

99  {
100  this->_epsilon = input("Physics/"+PhysicsNaming::scalar_ode()+"/epsilon", 1e-6);
101 
102  this->_order = input("Physics/"+PhysicsNaming::scalar_ode()+"/order", 1);
103 
104  _scalar_ode_var_name = input("Physics/VariableNames/scalar_ode",
106  }
std::string _scalar_ode_var_name
Definition: scalar_ode.h:107
static PhysicsName scalar_ode()
libMesh::Number _order
Definition: scalar_ode.h:100
const std::string scalar_ode_var_name_default
arbitrary scalar ODE variable name
libMesh::Number _epsilon
Definition: scalar_ode.h:103
VariableIndex GRINS::ScalarODE::scalar_ode_var ( ) const
inline

Definition at line 87 of file scalar_ode.h.

References _scalar_ode_var.

Referenced by set_time_evolving_vars().

87 { return _scalar_ode_var; }
VariableIndex _scalar_ode_var
Definition: scalar_ode.h:105
void GRINS::ScalarODE::set_time_evolving_vars ( libMesh::FEMSystem *  system)
virtual

Sets scalar variable(s) to be time-evolving.

Reimplemented from GRINS::Physics.

Definition at line 58 of file scalar_ode.C.

References _input, constraint_function, mass_residual_function, GRINS::PhysicsNaming::scalar_ode(), scalar_ode_var(), GRINS::ParameterUser::set_parameter(), and time_deriv_function.

59  {
60  system->time_evolving(this->scalar_ode_var());
61 
62  // FIXME: this doesn't fit here at all, but it's the only time
63  // we've clearly got a System to grab hold of with all it's
64  // variables initialized.
65 
68  this->time_deriv_function.reset(tdf);
69 
70  if (tdf->expression() == "0")
71  std::cout << "Warning! Zero time_deriv function specified!" << std::endl;
72 
73  this->set_parameter(*tdf, _input,
74  "Physics/"+PhysicsNaming::scalar_ode()+"/time_deriv",
75  std::string("0"));
76 
79  this->mass_residual_function.reset(mrf);
80 
81  if (mrf->expression() == "0")
82  std::cout << "Warning! Zero mass_residual function specified!" << std::endl;
83 
84  this->set_parameter(*mrf, _input,
85  "Physics/"+PhysicsNaming::scalar_ode()+"/mass_residual",
86  std::string("0"));
87 
90  this->constraint_function.reset(cf);
91 
92  this->set_parameter(*cf, _input,
93  "Physics/"+PhysicsNaming::scalar_ode()+"/constraint",
94  std::string("0"));
95  }
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.
const GetPot & _input
Definition: scalar_ode.h:109
static PhysicsName scalar_ode()
libMesh::UniquePtr< libMesh::FEMFunctionBase< libMesh::Number > > mass_residual_function
Definition: scalar_ode.h:94
libMesh::UniquePtr< libMesh::FEMFunctionBase< libMesh::Number > > time_deriv_function
Definition: scalar_ode.h:94
VariableIndex scalar_ode_var() const
Definition: scalar_ode.h:87
libMesh::UniquePtr< libMesh::FEMFunctionBase< libMesh::Number > > constraint_function
Definition: scalar_ode.h:94

Member Data Documentation

libMesh::Number GRINS::ScalarODE::_epsilon
private
const GetPot& GRINS::ScalarODE::_input
private

Definition at line 109 of file scalar_ode.h.

Referenced by set_time_evolving_vars().

libMesh::Number GRINS::ScalarODE::_order
private

Definition at line 100 of file scalar_ode.h.

Referenced by init_variables(), and read_input_options().

VariableIndex GRINS::ScalarODE::_scalar_ode_var
private
std::string GRINS::ScalarODE::_scalar_ode_var_name
private

Definition at line 107 of file scalar_ode.h.

Referenced by init_variables(), and read_input_options().

libMesh::UniquePtr<libMesh::FEMFunctionBase<libMesh::Number> > GRINS::ScalarODE::constraint_function
private

Definition at line 94 of file scalar_ode.h.

Referenced by init_context(), and set_time_evolving_vars().

libMesh::UniquePtr<libMesh::FEMFunctionBase<libMesh::Number> > GRINS::ScalarODE::mass_residual_function
private

Definition at line 94 of file scalar_ode.h.

Referenced by init_context(), and set_time_evolving_vars().

libMesh::UniquePtr<libMesh::FEMFunctionBase<libMesh::Number> > GRINS::ScalarODE::time_deriv_function
private

Definition at line 94 of file scalar_ode.h.

Referenced by init_context(), and set_time_evolving_vars().


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

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