www.mooseframework.org
VariableWarehouse.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 "MooseTypes.h"
13 #include "HashMap.h"
14 
15 #include <vector>
16 #include <map>
17 #include <set>
18 
19 namespace libMesh
20 {
21 template <typename>
22 class VectorValue;
23 typedef VectorValue<Real> RealVectorValue;
24 }
25 
26 class MooseVariableBase;
28 template <typename>
34 
39 {
40 public:
42 
48  void add(const std::string & var_name, std::shared_ptr<MooseVariableBase> var);
49 
56 
62  void addBoundaryVar(const std::set<BoundaryID> & boundary_ids, MooseVariableFEBase * var);
63 
69  void
70  addBoundaryVars(const std::set<BoundaryID> & boundary_ids,
71  const std::unordered_map<std::string, std::vector<MooseVariableFEBase *>> & vars);
72 
78  MooseVariableBase * getVariable(const std::string & var_name);
79 
85  MooseVariableBase * getVariable(unsigned int var_number);
86 
93  template <typename T>
94  MooseVariableFE<T> * getFieldVariable(const std::string & var_name);
95 
102  template <typename T>
103  MooseVariableFE<T> * getFieldVariable(unsigned int var_number);
104 
109  const std::vector<VariableName> & names() const;
110 
115  const std::vector<MooseVariableFEBase *> & fieldVariables() const;
116 
122  const std::set<MooseVariableFEBase *> & boundaryVars(BoundaryID bnd) const;
123 
128  const std::vector<MooseVariableScalar *> & scalars() const;
129 
130 protected:
132  std::vector<VariableName> _names;
133 
135  std::vector<MooseVariableFEBase *> _vars;
136 
139 
142 
145 
148 
151 
154 
156  std::map<std::string, MooseVariableBase *> _var_name;
157 
159  std::map<BoundaryID, std::set<MooseVariableFEBase *>> _boundary_vars;
160 
162  std::vector<MooseVariableScalar *> _scalar_vars;
163 
165  std::map<unsigned int, std::shared_ptr<MooseVariableBase>> _all_objects;
166 };
167 
168 template <>
170 VariableWarehouse::getFieldVariable<RealVectorValue>(const std::string & var_name);
171 
172 template <>
174 VariableWarehouse::getFieldVariable<RealVectorValue>(unsigned int var_number);
175 
176 template <>
178 VariableWarehouse::getFieldVariable<RealEigenVector>(const std::string & var_name);
179 
180 template <>
182 VariableWarehouse::getFieldVariable<RealEigenVector>(unsigned int var_number);
MooseVariableFEBase
Definition: MooseVariableFEBase.h:27
VariableWarehouse::_boundary_vars
std::map< BoundaryID, std::set< MooseVariableFEBase * > > _boundary_vars
Map to variables that need to be evaluated on a boundary.
Definition: VariableWarehouse.h:159
HashMap
HashMap is an abstraction for dictionary data type, we make it thread-safe by locking inserts.
Definition: HashMap.h:18
VariableWarehouse::_vector_vars_by_number
HashMap< unsigned, VectorMooseVariable * > _vector_vars_by_number
map of vector finite element variables with unsigned keys
Definition: VariableWarehouse.h:147
VariableWarehouse::names
const std::vector< VariableName > & names() const
Get the list of all variable names.
Definition: VariableWarehouse.C:94
VariableWarehouse::_vars
std::vector< MooseVariableFEBase * > _vars
list of finite element variables
Definition: VariableWarehouse.h:135
MooseVariableScalar
Class for scalar variables (they are different).
Definition: MooseVariableScalar.h:30
VariableWarehouse::boundaryVars
const std::set< MooseVariableFEBase * > & boundaryVars(BoundaryID bnd) const
Get the list of variables that needs to be reinitialized on a given boundary.
Definition: VariableWarehouse.C:112
VariableWarehouse::_scalar_vars
std::vector< MooseVariableScalar * > _scalar_vars
list of all scalar, non-finite element variables
Definition: VariableWarehouse.h:162
VariableWarehouse::scalars
const std::vector< MooseVariableScalar * > & scalars() const
Get the list of scalar variables.
Definition: VariableWarehouse.C:106
libMesh
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
Definition: AddPeriodicBCAction.h:16
VariableWarehouse::getVariable
MooseVariableBase * getVariable(const std::string &var_name)
Get a variable from the warehouse.
Definition: VariableWarehouse.C:78
VariableWarehouse::add
void add(const std::string &var_name, std::shared_ptr< MooseVariableBase > var)
Add a variable.
Definition: VariableWarehouse.C:18
libMesh::RealVectorValue
VectorValue< Real > RealVectorValue
Definition: Assembly.h:30
MooseVariable
MooseVariableFE< Real > MooseVariable
Definition: VariableWarehouse.h:29
VariableWarehouse::_var_name
std::map< std::string, MooseVariableBase * > _var_name
Name to variable mapping.
Definition: VariableWarehouse.h:156
VariableWarehouse::addBoundaryVar
void addBoundaryVar(BoundaryID bnd, MooseVariableFEBase *var)
Add a boundary variable.
Definition: VariableWarehouse.C:53
VariableWarehouse::_array_vars_by_number
HashMap< unsigned, ArrayMooseVariable * > _array_vars_by_number
map of vector finite element variables with unsigned keys
Definition: VariableWarehouse.h:153
VariableWarehouse::_all_objects
std::map< unsigned int, std::shared_ptr< MooseVariableBase > > _all_objects
All instances of objects (raw pointers)
Definition: VariableWarehouse.h:165
VariableWarehouse::_vector_vars_by_name
HashMap< std::string, VectorMooseVariable * > _vector_vars_by_name
map of vector finite element variables with name keys
Definition: VariableWarehouse.h:144
BoundaryID
boundary_id_type BoundaryID
Definition: AutomaticMortarGeneration.h:47
VariableWarehouse::_names
std::vector< VariableName > _names
list of variable names
Definition: VariableWarehouse.h:132
VariableWarehouse::_regular_vars_by_number
HashMap< unsigned, MooseVariable * > _regular_vars_by_number
map of non-vector finite element variables with unsigned keys
Definition: VariableWarehouse.h:141
HashMap.h
VariableWarehouse::addBoundaryVars
void addBoundaryVars(const std::set< BoundaryID > &boundary_ids, const std::unordered_map< std::string, std::vector< MooseVariableFEBase * >> &vars)
Add a map of variables to a set of boundaries.
Definition: VariableWarehouse.C:67
VariableWarehouse::_array_vars_by_name
HashMap< std::string, ArrayMooseVariable * > _array_vars_by_name
map of vector finite element variables with name keys
Definition: VariableWarehouse.h:150
ArrayMooseVariable
MooseVariableFE< RealEigenVector > ArrayMooseVariable
Definition: VariableWarehouse.h:32
VariableWarehouse
Holds variables and provides some services.
Definition: VariableWarehouse.h:38
VariableWarehouse::VariableWarehouse
VariableWarehouse()
Definition: VariableWarehouse.C:15
VectorMooseVariable
MooseVariableFE< RealVectorValue > VectorMooseVariable
Definition: VariableWarehouse.h:31
VariableWarehouse::fieldVariables
const std::vector< MooseVariableFEBase * > & fieldVariables() const
Get the list of variables.
Definition: VariableWarehouse.C:100
MooseVariableBase
Definition: MooseVariableBase.h:37
MooseTypes.h
MooseVariableFE
Class for stuff related to variables.
Definition: Adaptivity.h:31
VariableWarehouse::getFieldVariable
MooseVariableFE< T > * getFieldVariable(const std::string &var_name)
Get a finite element variable from the warehouse of either Real or RealVectorValue type.
Definition: VariableWarehouse.C:119
VariableWarehouse::_regular_vars_by_name
HashMap< std::string, MooseVariable * > _regular_vars_by_name
map of non-vector finite element variables with name keys
Definition: VariableWarehouse.h:138