34 #include "libmesh/boundary_info.h"
35 #include "libmesh/parsed_fem_function.h"
41 :
Physics(physics_name, input), _order(1), _epsilon(1e-6)
58 libMesh::Order(this->
_order),
71 (
new libMesh::ParsedFEMFunction<libMesh::Number>
75 (
new libMesh::ParsedFEMFunction<libMesh::Number>
79 (
new libMesh::ParsedFEMFunction<libMesh::Number>
91 std::cout <<
"Warning! Zero time_deriv function specified!" << std::endl;
98 std::cout <<
"Warning! Zero mass_residual function specified!" << std::endl;
105 std::cout <<
"Warning! Zero constraint function specified!" << std::endl;
128 libMesh::DenseSubMatrix<libMesh::Number> &Kss =
131 libMesh::DenseSubVector<libMesh::Number> &Fs =
134 const libMesh::Number time_deriv =
135 (*time_deriv_function)(context, libMesh::Point(0),
140 if (compute_jacobian)
144 libMesh::DenseSubVector<libMesh::Number> &Us =
145 const_cast<libMesh::DenseSubVector<libMesh::Number>&
>
148 const libMesh::Number s = Us(0);
150 libMesh::Number time_deriv_jacobian =
151 (*time_deriv_function)(context, libMesh::Point(0),
155 time_deriv_jacobian -=
156 (*time_deriv_function)(context, libMesh::Point(0),
160 time_deriv_jacobian /= (2*this->
_epsilon);
162 Kss(0,0) += time_deriv_jacobian *
163 context.get_elem_solution_derivative();
174 libMesh::DenseSubMatrix<libMesh::Number> &Kss =
177 libMesh::DenseSubVector<libMesh::Number> &Fs =
180 const libMesh::Number mass_res =
181 (*mass_residual_function)(context, libMesh::Point(0),
186 if (compute_jacobian)
190 libMesh::DenseSubVector<libMesh::Number> &Us =
191 const_cast<libMesh::DenseSubVector<libMesh::Number>&
>
194 const libMesh::Number s = Us(0);
196 libMesh::Number mass_residual_jacobian =
197 (*mass_residual_function)(context, libMesh::Point(0),
201 mass_residual_jacobian -=
202 (*mass_residual_function)(context, libMesh::Point(0),
206 mass_residual_jacobian /= (2*this->
_epsilon);
208 Kss(0,0) -= mass_residual_jacobian *
209 context.get_elem_solution_rate_derivative();
220 libMesh::DenseSubMatrix<libMesh::Number> &Kss =
223 libMesh::DenseSubVector<libMesh::Number> &Fs =
226 const libMesh::Number constraint =
227 (*constraint_function)(context, libMesh::Point(0),
232 if (compute_jacobian)
236 libMesh::DenseSubVector<libMesh::Number> &Us =
237 const_cast<libMesh::DenseSubVector<libMesh::Number>&
>
240 const libMesh::Number s = Us(0);
242 libMesh::Number constraint_jacobian =
243 (*constraint_function)(context, libMesh::Point(0),
247 constraint_jacobian -=
248 (*constraint_function)(context, libMesh::Point(0),
252 constraint_jacobian /= (2*this->
_epsilon);
254 Kss(0,0) += constraint_jacobian *
255 context.get_elem_solution_derivative();
GRINS::ICHandlingBase * _ic_handler
std::string _scalar_ode_var_name
Physics abstract base class. Defines API for physics to be added to MultiphysicsSystem.
Base class for reading and handling initial conditions for physics classes.
const std::string scalar_ode_var_name_default
arbitrary scalar ODE variable name
std::string mass_residual_function_string
virtual void read_input_options(const GetPot &input)
Read options from GetPot input file.
virtual void init_context(AssemblyContext &context)
Prepare the context for evaluations.
std::string time_deriv_function_string
std::string constraint_function_string
const PhysicsName scalar_ode
virtual void nonlocal_mass_residual(bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
Mass matrix part(s) for scalar variables.
virtual void nonlocal_constraint(bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
Constraint part(s) of physics for scalar variables.
libMesh::AutoPtr< libMesh::FEMFunctionBase< libMesh::Number > > mass_residual_function
libMesh::AutoPtr< libMesh::FEMFunctionBase< libMesh::Number > > constraint_function
virtual void set_time_evolving_vars(libMesh::FEMSystem *system)
Sets scalar variable(s) to be time-evolving.
virtual void init_variables(libMesh::FEMSystem *system)
Initialization of variables.
libMesh::AutoPtr< libMesh::FEMFunctionBase< libMesh::Number > > time_deriv_function
virtual void nonlocal_time_derivative(bool compute_jacobian, AssemblyContext &context, CachedValues &cache)
Time dependent part(s) of physics for scalar variables.
VariableIndex scalar_ode_var() const
VariableIndex _scalar_ode_var