https://mooseframework.inl.gov
MooseVariableBase.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
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 "MooseObject.h"
13 #include "BlockRestrictable.h"
14 #include "OutputInterface.h"
15 #include "SetupInterface.h"
16 #include "MooseTypes.h"
17 #include "MooseArray.h"
18 #include "MooseError.h"
19 
20 #include "libmesh/fe_type.h"
21 #include "libmesh/enum_fe_family.h"
22 
23 // libMesh forward declarations
24 namespace libMesh
25 {
26 class DofMap;
27 class Variable;
28 }
29 
30 class Assembly;
31 class SubProblem;
32 class SystemBase;
33 class MooseMesh;
34 
43  public BlockRestrictable,
44  public OutputInterface,
45  public SetupInterface
46 {
47 public:
49 
51 
53  const std::string & arrayVariableComponent(const unsigned int i) const;
54 
59  unsigned int number() const { return _var_num; }
60 
64  const libMesh::FEType & feType() const { return _fe_type; }
65 
69  SystemBase & sys() { return _sys; }
70 
74  const SystemBase & sys() const { return _sys; }
75 
79  bool useDual() const { return _use_dual; }
80 
84  const std::vector<dof_id_type> & allDofIndices() const;
85  unsigned int totalVarDofs() { return allDofIndices().size(); }
86 
90  Moose::VarKindType kind() const { return _var_kind; }
91 
95  void scalingFactor(const std::vector<Real> & factor);
96 
100  Real scalingFactor() const { return _scaling_factor[0]; }
101  const std::vector<Real> & arrayScalingFactor() const { return _scaling_factor; }
102 
107  libMesh::Order order() const;
108 
113  unsigned int count() const { return _count; }
114 
119  virtual bool isNodal() const { mooseError("Base class cannot determine this"); }
120 
125  virtual bool hasDoFsOnNodes() const { mooseError("Base class cannot determine this"); };
126 
131  {
132  mooseError("Base class cannot determine this");
133  };
134 
138  const libMesh::DofMap & dofMap() const { return _dof_map; }
139 
140  virtual void getDofIndices(const Elem * /*elem*/,
141  std::vector<dof_id_type> & /*dof_indices*/) const
142  {
143  mooseError("not implemented");
144  };
145 
149  virtual const std::vector<dof_id_type> & dofIndices() const { return _dof_indices; }
150 
154  std::vector<dof_id_type> componentDofIndices(const std::vector<dof_id_type> & dof_indices,
155  unsigned int component) const;
156 
160  virtual unsigned int numberOfDofs() const { return _dof_indices.size(); }
161 
165  bool eigen() const { return _is_eigen; }
166 
170  void eigen(bool eigen) { _is_eigen = eigen; }
171 
172  void initialSetup() override;
173 
174  virtual void clearAllDofIndices() { _dof_indices.clear(); }
175 
181  virtual void setActiveTags(const std::set<TagID> & vtags);
182 
186  virtual bool isArray() const { return !_array_var_component_names.empty(); }
187 
191  bool isLowerD() const { return _is_lower_d; }
192 
196  virtual void sizeMatrixTagData() { mooseError("Derived class must implement this method"); }
197 
198 protected:
202  bool doDerivatives() const;
203 
206 
209 
211  unsigned int _var_num;
212 
214  unsigned int _index;
215 
217  bool _is_eigen;
218 
221 
224 
227 
230 
233 
235  std::vector<dof_id_type> _dof_indices;
236 
239 
242 
244  const unsigned int _count;
245 
247  std::vector<Real> _scaling_factor;
248 
250  bool _use_dual;
251 
254 
256  std::vector<std::string> _array_var_component_names;
257 };
258 
259 inline void
260 MooseVariableBase::setActiveTags(const std::set<TagID> &)
261 {
262  mooseError("setActiveTags must be overridden in derived classes.");
263 }
264 
265 #define usingMooseVariableBaseMembers \
266  using MooseVariableBase::_sys; \
267  using MooseVariableBase::_fe_type; \
268  using MooseVariableBase::_var_num; \
269  using MooseVariableBase::_index; \
270  using MooseVariableBase::_var_kind; \
271  using MooseVariableBase::_subproblem; \
272  using MooseVariableBase::_variable; \
273  using MooseVariableBase::_assembly; \
274  using MooseVariableBase::_dof_map; \
275  using MooseVariableBase::_dof_indices; \
276  using MooseVariableBase::_mesh; \
277  using MooseVariableBase::_tid; \
278  using MooseVariableBase::_count; \
279  using MooseVariableBase::_scaling_factor
bool _use_dual
If dual mortar approach is used.
static InputParameters validParams()
virtual bool isNodal() const
Is this variable nodal.
std::vector< dof_id_type > componentDofIndices(const std::vector< dof_id_type > &dof_indices, unsigned int component) const
Obtain DoF indices of a component with the indices of the 0th component.
virtual void clearAllDofIndices()
const libMesh::FEType & feType() const
Get the type of finite element object.
virtual unsigned int numberOfDofs() const
Get the number of local DoFs.
Keeps track of stuff related to assembling.
Definition: Assembly.h:101
const std::vector< Real > & arrayScalingFactor() const
unsigned int number() const
Get variable number coming from libMesh.
virtual libMesh::FEContinuity getContinuity() const
Return the continuity of this variable.
const libMesh::DofMap & dofMap() const
The DofMap associated with the system this variable is in.
std::vector< std::string > _array_var_component_names
Array variable names when the variable is an array variable.
bool _is_lower_d
Whether this variable lives on lower dimensional blocks.
const InputParameters & parameters() const
Get the parameters of the object.
Definition: MooseBase.h:127
const SystemBase & sys() const
Get the system this variable is part of.
unsigned int count() const
Get the number of components Note: For standard and vector variables, the number is one...
A class to provide an common interface to objects requiring "outputs" option.
virtual void sizeMatrixTagData()
Size data structures related to matrix tagging.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
virtual void getDofIndices(const Elem *, std::vector< dof_id_type > &) const
void eigen(bool eigen)
Mark this variable as an eigen var or non-eigen var.
unsigned int _index
variable number within MOOSE
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
Base class for a system (of equations)
Definition: SystemBase.h:84
void initialSetup() override
Gets called at the beginning of the simulation before this object is asked to do its job...
THREAD_ID _tid
Thread ID.
std::vector< dof_id_type > _dof_indices
DOF indices.
bool eigen() const
Whether or not this variable operates on an eigen kernel.
virtual bool hasDoFsOnNodes() const
Does this variable have DoFs on nodes.
bool _is_eigen
Whether or not this variable operates on eigen kernels.
const libMesh::DofMap & _dof_map
DOF map.
bool useDual() const
Get dual mortar option.
SubProblem & _subproblem
Problem this variable is part of.
libMesh::FEType _fe_type
The FEType associated with this variable.
Every object that can be built by the factory should be derived from this class.
Definition: MooseObject.h:27
SystemBase & _sys
System this variable is part of.
VarKindType
Framework-wide stuff.
Definition: MooseTypes.h:715
std::vector< Real > _scaling_factor
scaling factor for this variable
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
Definition: MooseMesh.h:88
virtual bool isArray() const
virtual const std::vector< dof_id_type > & dofIndices() const
Get local DoF indices.
Moose::VarKindType _var_kind
Variable type (see MooseTypes.h)
Real scalingFactor() const
Get the scaling factor for this variable.
const unsigned int _count
Number of variables in the array.
MooseMesh & _mesh
mesh the variable is active in
libMesh::Order order() const
Get the order of this variable Note: Order enum can be implicitly converted to unsigned int...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Generic class for solving transient nonlinear problems.
Definition: SubProblem.h:78
Assembly & _assembly
Assembly data.
const libMesh::Variable & _variable
libMesh variable object for this variable
const std::vector< dof_id_type > & allDofIndices() const
Get all global dofindices for the variable.
unsigned int _var_num
variable number (from libMesh)
Moose::VarKindType kind() const
Kind of the variable (Nonlinear, Auxiliary, ...)
const std::string & arrayVariableComponent(const unsigned int i) const
Returns the variable name of a component of an array variable.
unsigned int totalVarDofs()
An interface that restricts an object to subdomains via the &#39;blocks&#39; input parameter.
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type and optionally a file path to the top-level block p...
Definition: MooseBase.h:267
bool doDerivatives() const
SystemBase & sys()
Get the system this variable is part of.
MooseVariableBase(const InputParameters &parameters)
Base variable class.
unsigned int THREAD_ID
Definition: MooseTypes.h:209
virtual void setActiveTags(const std::set< TagID > &vtags)
Set the active vector tags.