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 
36  public BlockRestrictable,
37  public OutputInterface,
38  public SetupInterface
39 {
40 public:
42 
44 
46  const std::string & arrayVariableComponent(const unsigned int i) const;
47 
52  unsigned int number() const { return _var_num; }
53 
57  const libMesh::FEType & feType() const { return _fe_type; }
58 
62  SystemBase & sys() { return _sys; }
63 
67  const SystemBase & sys() const { return _sys; }
68 
72  const std::string & name() const override { return _var_name; }
73 
77  bool useDual() const { return _use_dual; }
78 
82  const std::vector<dof_id_type> & allDofIndices() const;
83  unsigned int totalVarDofs() { return allDofIndices().size(); }
84 
88  Moose::VarKindType kind() const { return _var_kind; }
89 
93  void scalingFactor(const std::vector<Real> & factor);
94 
98  Real scalingFactor() const { return _scaling_factor[0]; }
99  const std::vector<Real> & arrayScalingFactor() const { return _scaling_factor; }
100 
105  libMesh::Order order() const;
106 
111  unsigned int count() const { return _count; }
112 
117  virtual bool isNodal() const { mooseError("Base class cannot determine this"); }
118 
123  virtual bool hasDoFsOnNodes() const { mooseError("Base class cannot determine this"); };
124 
129  {
130  mooseError("Base class cannot determine this");
131  };
132 
136  const libMesh::DofMap & dofMap() const { return _dof_map; }
137 
138  virtual void getDofIndices(const Elem * /*elem*/,
139  std::vector<dof_id_type> & /*dof_indices*/) const
140  {
141  mooseError("not implemented");
142  };
143 
147  virtual const std::vector<dof_id_type> & dofIndices() const { return _dof_indices; }
148 
152  std::vector<dof_id_type> componentDofIndices(const std::vector<dof_id_type> & dof_indices,
153  unsigned int component) const;
154 
158  virtual unsigned int numberOfDofs() const { return _dof_indices.size(); }
159 
163  bool eigen() const { return _is_eigen; }
164 
168  void eigen(bool eigen) { _is_eigen = eigen; }
169 
170  void initialSetup() override;
171 
172  virtual void clearAllDofIndices() { _dof_indices.clear(); }
173 
179  virtual void setActiveTags(const std::set<TagID> & vtags);
180 
184  virtual bool isArray() const { return !_array_var_component_names.empty(); }
185 
189  bool isLowerD() const { return _is_lower_d; }
190 
191 protected:
195  bool doDerivatives() const;
196 
199 
202 
204  unsigned int _var_num;
205 
207  unsigned int _index;
208 
210  bool _is_eigen;
211 
214 
217 
220 
223 
226 
228  std::vector<dof_id_type> _dof_indices;
229 
232 
235 
237  const unsigned int _count;
238 
240  std::vector<Real> _scaling_factor;
241 
243  std::string _var_name;
244 
246  bool _use_dual;
247 
250 
252  std::vector<std::string> _array_var_component_names;
253 };
254 
255 inline void
256 MooseVariableBase::setActiveTags(const std::set<TagID> &)
257 {
258  mooseError("setActiveTags must be overridden in derived classes.");
259 }
260 
261 #define usingMooseVariableBaseMembers \
262  using MooseVariableBase::_sys; \
263  using MooseVariableBase::_fe_type; \
264  using MooseVariableBase::_var_num; \
265  using MooseVariableBase::_index; \
266  using MooseVariableBase::_var_kind; \
267  using MooseVariableBase::_subproblem; \
268  using MooseVariableBase::_variable; \
269  using MooseVariableBase::_assembly; \
270  using MooseVariableBase::_dof_map; \
271  using MooseVariableBase::_dof_indices; \
272  using MooseVariableBase::_mesh; \
273  using MooseVariableBase::_tid; \
274  using MooseVariableBase::_count; \
275  using MooseVariableBase::_scaling_factor; \
276  using MooseVariableBase::_var_name
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 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.
const std::string & name() const override
Get the variable name.
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
std::string _var_name
Variable name.
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:28
SystemBase & _sys
System this variable is part of.
VarKindType
Framework-wide stuff.
Definition: MooseTypes.h:714
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.
const InputParameters & parameters() const
Get the parameters of the object.
bool doDerivatives() const
SystemBase & sys()
Get the system this variable is part of.
MooseVariableBase(const InputParameters &parameters)
unsigned int THREAD_ID
Definition: MooseTypes.h:209
virtual void setActiveTags(const std::set< TagID > &vtags)
Set the active vector tags.