www.mooseframework.org
InitialConditionTempl.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 #include "InitialConditionBase.h"
13 
14 // libMesh
15 #include "libmesh/point.h"
16 #include "libmesh/vector_value.h"
17 #include "libmesh/elem.h"
18 
19 // forward declarations
20 template <typename>
22 class FEProblemBase;
23 class Assembly;
24 
25 template <>
26 InputParameters validParams<InitialConditionTempl<Real>>();
27 template <>
28 InputParameters validParams<InitialConditionTempl<RealVectorValue>>();
29 template <>
30 InputParameters validParams<InitialConditionTempl<RealEigenVector>>();
31 
38 template <typename T>
40 {
41 public:
46  typedef FEGenericBase<ValueType> FEBaseType;
47 
54 
55  virtual ~InitialConditionTempl();
56 
58 
59  virtual MooseVariableFEBase & variable() override { return _var; }
60 
61  virtual void compute() override;
62 
63  virtual void computeNodal(const Point & p) override;
64 
70  virtual T value(const Point & p) = 0;
71 
78  virtual GradientType gradient(const Point & /*p*/) { return GradientType(); };
79 
80  T gradientComponent(GradientType grad, unsigned int i);
81 
85  void setCZeroVertices();
89  void setHermiteVertices();
93  void setOtherCOneVertices();
94 
99  Real dotHelper(const RealGradient & op1, const RealGradient & op2) { return op1 * op2; }
100  Real dotHelper(const RealTensor & op1, const RealTensor & op2) { return op1.contract(op2); }
101  RealEigenVector dotHelper(const RealVectorArrayValue & op1, const RealGradient & op2)
102  {
103  RealEigenVector v = op1.col(0) * op2(0);
104  for (unsigned int i = 1; i < LIBMESH_DIM; ++i)
105  v += op1.col(i) * op2(i);
106  return v;
107  }
108 
112  void choleskySolve(bool is_volume);
113 
117  void choleskyAssembly(bool is_volume);
118 
119 protected:
122 
124 
126  Real & _t;
127 
130 
133 
136  const Elem * const & _current_elem;
137 
140  const Node * _current_node;
141 
143  unsigned int _qp;
144 
146  DenseMatrix<Real> _Ke;
148  DenseVector<DataType> _Fe;
150  DenseVector<DataType> _Ue;
151 
153  const FEType & _fe_type;
155  FEContinuity _cont;
156 
158  std::vector<dof_id_type> _dof_indices;
160  std::vector<unsigned int> _side_dofs;
161 
163  unsigned int _n_qp;
165  unsigned int _n_nodes;
166 
168  std::vector<char> _dof_is_fixed;
170  std::vector<int> _free_dof;
171 
173  dof_id_type _free_dofs;
175  dof_id_type _current_dof;
177  dof_id_type _nc;
178 
180  const std::vector<std::vector<ValueType>> * _phi;
182  const std::vector<std::vector<GradientShapeType>> * _dphi;
184  const std::vector<Real> * _JxW;
186  const std::vector<Point> * _xyz_values;
187 
189  unsigned int _n;
191  unsigned int _dim;
192 };
193 
MooseVariableFEBase
Definition: MooseVariableFEBase.h:27
InitialConditionTempl::_dof_indices
std::vector< dof_id_type > _dof_indices
The global DOF indices.
Definition: InitialConditionTempl.h:158
THREAD_ID
unsigned int THREAD_ID
Definition: MooseTypes.h:196
InitialConditionTempl::dotHelper
Real dotHelper(const RealGradient &op1, const RealGradient &op2)
Helps perform multiplication of GradientTypes: a normal dot product for vectors and a contraction for...
Definition: InitialConditionTempl.h:99
InitialConditionTempl::_t
Real & _t
Time.
Definition: InitialConditionTempl.h:126
ArrayInitialCondition
InitialConditionTempl< RealEigenVector > ArrayInitialCondition
Definition: InitialConditionTempl.h:196
InitialConditionTempl::setHermiteVertices
void setHermiteVertices()
set the temporary solution vector for node projections of Hermite variables
Definition: InitialConditionTempl.C:334
InitialConditionTempl::FEBaseType
FEGenericBase< ValueType > FEBaseType
Definition: InitialConditionTempl.h:46
InitialConditionTempl::_tid
THREAD_ID _tid
Definition: InitialConditionTempl.h:121
InitialConditionTempl::choleskySolve
void choleskySolve(bool is_volume)
Perform the cholesky solves for edge, side, and interior projections.
Definition: InitialConditionTempl.C:498
InitialConditionTempl::_Ke
DenseMatrix< Real > _Ke
Matrix storage member.
Definition: InitialConditionTempl.h:146
InitialConditionTempl::_fe_problem
FEProblemBase & _fe_problem
Definition: InitialConditionTempl.h:120
InitialConditionTempl::_free_dofs
dof_id_type _free_dofs
The number of free dofs.
Definition: InitialConditionTempl.h:173
InitialConditionTempl::_dphi
const std::vector< std::vector< GradientShapeType > > * _dphi
pointers to shape function gradients
Definition: InitialConditionTempl.h:182
MooseObject::parameters
const InputParameters & parameters() const
Get the parameters of the object.
Definition: MooseObject.h:76
InitialConditionTempl::DataType
OutputTools< T >::OutputData DataType
Definition: InitialConditionTempl.h:45
InitialConditionTempl::InitialConditionTempl
InitialConditionTempl(const InputParameters &parameters)
Constructor.
Definition: InitialConditionTempl.C:48
InitialConditionTempl::_cont
FEContinuity _cont
The type of continuity, e.g. C0, C1.
Definition: InitialConditionTempl.h:155
InitialConditionTempl::compute
virtual void compute() override
Workhorse method for projecting the initial conditions for block initial conditions.
Definition: InitialConditionTempl.C:71
Moose::CoordinateSystemType
CoordinateSystemType
Definition: MooseTypes.h:691
InitialConditionTempl::value
virtual T value(const Point &p)=0
The value of the variable at a point.
InitialConditionTempl::gradientComponent
T gradientComponent(GradientType grad, unsigned int i)
Definition: InitialConditionTempl.C:313
InitialConditionTempl::GradientShapeType
OutputTools< T >::OutputShapeGradient GradientShapeType
Definition: InitialConditionTempl.h:44
InitialConditionTempl
This is a template class that implements the workhorse compute and computeNodal methods.
Definition: InitialConditionTempl.h:21
InitialConditionTempl::_n
unsigned int _n
node counter
Definition: InitialConditionTempl.h:189
InitialConditionTempl::dotHelper
Real dotHelper(const RealTensor &op1, const RealTensor &op2)
Definition: InitialConditionTempl.h:100
InitialConditionTempl::_free_dof
std::vector< int > _free_dof
Stores the ids of the free dofs.
Definition: InitialConditionTempl.h:170
InputParameters
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
Definition: InputParameters.h:53
InitialConditionTempl::choleskyAssembly
void choleskyAssembly(bool is_volume)
Assemble a small local system for cholesky solve.
Definition: InitialConditionTempl.C:449
InitialConditionTempl::_assembly
Assembly & _assembly
Definition: InitialConditionTempl.h:123
InitialConditionTempl::setCZeroVertices
void setCZeroVertices()
set the temporary solution vector for node projections of C0 variables
Definition: InitialConditionTempl.C:284
InitialConditionTempl::_side_dofs
std::vector< unsigned int > _side_dofs
Side/edge DOF indices.
Definition: InitialConditionTempl.h:160
InitialConditionTempl::_dim
unsigned int _dim
the mesh dimension
Definition: InitialConditionTempl.h:191
InitialConditionTempl::_var
MooseVariableFE< T > & _var
The variable that this initial condition is acting upon.
Definition: InitialConditionTempl.h:132
InitialConditionTempl::_JxW
const std::vector< Real > * _JxW
pointers to the Jacobian * quadrature weights for current element
Definition: InitialConditionTempl.h:184
InitialConditionTempl::validParams
static InputParameters validParams()
Definition: InitialConditionTempl.C:41
InitialConditionTempl::_qp
unsigned int _qp
The current quadrature point, contains the "nth" node number when visiting nodes.
Definition: InitialConditionTempl.h:143
Assembly
Keeps track of stuff related to assembling.
Definition: Assembly.h:62
InitialConditionTempl::gradient
virtual GradientType gradient(const Point &)
The gradient of the variable at a point.
Definition: InitialConditionTempl.h:78
InitialConditionTempl::~InitialConditionTempl
virtual ~InitialConditionTempl()
Definition: InitialConditionTempl.C:65
InitialConditionTempl::_phi
const std::vector< std::vector< ValueType > > * _phi
pointers to shape functions
Definition: InitialConditionTempl.h:180
InitialConditionTempl::dotHelper
RealEigenVector dotHelper(const RealVectorArrayValue &op1, const RealGradient &op2)
Definition: InitialConditionTempl.h:101
InitialConditionTempl::_dof_is_fixed
std::vector< char > _dof_is_fixed
Whether the degree of freedom is fixed (true/false)
Definition: InitialConditionTempl.h:168
InitialConditionTempl::_n_nodes
unsigned int _n_nodes
The number of nodes for a given element.
Definition: InitialConditionTempl.h:165
InitialConditionTempl::computeNodal
virtual void computeNodal(const Point &p) override
Workhorse method for projecting the initial conditions for boundary restricted initial conditions.
Definition: InitialConditionTempl.C:563
InitialCondition
InitialConditionTempl< Real > InitialCondition
Definition: InitialConditionTempl.h:194
VectorInitialCondition
InitialConditionTempl< RealVectorValue > VectorInitialCondition
Definition: InitialConditionTempl.h:195
InitialConditionTempl::_nc
dof_id_type _nc
number of dofs per node per variable
Definition: InitialConditionTempl.h:177
InitialConditionTempl::ValueType
OutputTools< T >::OutputShape ValueType
Definition: InitialConditionTempl.h:42
InitialConditionTempl::GradientType
OutputTools< T >::OutputGradient GradientType
Definition: InitialConditionTempl.h:43
libMesh::RealVectorArrayValue
Eigen::Matrix< Real, Eigen::Dynamic, LIBMESH_DIM > RealVectorArrayValue
Definition: MooseTypes.h:134
InitialConditionTempl::_xyz_values
const std::vector< Point > * _xyz_values
pointers to the xyz coordinates of the quadrature points for the current element
Definition: InitialConditionTempl.h:186
InitialConditionTempl::_current_dof
dof_id_type _current_dof
The current dof being operated on.
Definition: InitialConditionTempl.h:175
InitialConditionTempl::_current_node
const Node * _current_node
The current node if the point we are evaluating at also happens to be a node.
Definition: InitialConditionTempl.h:140
InitialConditionBase.h
InitialConditionBase
InitialConditionBase serves as the abstract base class for InitialConditions and VectorInitialConditi...
Definition: InitialConditionBase.h:42
InitialConditionTempl::_fe_type
const FEType & _fe_type
The finite element type for the IC variable.
Definition: InitialConditionTempl.h:153
InitialConditionTempl::_coord_sys
const Moose::CoordinateSystemType & _coord_sys
The coordinate system type for this problem, references the value in Assembly.
Definition: InitialConditionTempl.h:129
libMesh::RealEigenVector
Eigen::Matrix< Real, Eigen::Dynamic, 1 > RealEigenVector
Definition: MooseTypes.h:133
FEProblemBase
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
Definition: FEProblemBase.h:139
InitialConditionTempl::_n_qp
unsigned int _n_qp
The number of quadrature points for a given element.
Definition: InitialConditionTempl.h:163
InitialConditionTempl::_Ue
DenseVector< DataType > _Ue
Linear solution vector.
Definition: InitialConditionTempl.h:150
InitialConditionTempl::_Fe
DenseVector< DataType > _Fe
Linear b vector.
Definition: InitialConditionTempl.h:148
InitialConditionTempl::setOtherCOneVertices
void setOtherCOneVertices()
set the temporary solution vector for node projections of non-Hermitian C1 variables
Definition: InitialConditionTempl.C:422
MooseVariableFE< T >
OutputTools
Definition: MooseTypes.h:264
InitialConditionTempl::_current_elem
const Elem *const & _current_elem
The current element we are on will retrieving values at specific points in the domain.
Definition: InitialConditionTempl.h:136
InitialConditionTempl::variable
virtual MooseVariableFEBase & variable() override
retrieves the MOOSE variable that this initial condition acts upon
Definition: InitialConditionTempl.h:59