libMesh
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | Private Member Functions | Friends | List of all members
libMesh::Variable Class Reference

This class defines the notion of a variable in the system. More...

#include <variable.h>

Inheritance diagram for libMesh::Variable:
[legend]

Public Member Functions

 Variable (System *sys, std::string var_name, const unsigned int var_number, const unsigned int first_scalar_num, const FEType &var_type)
 Constructor.
 
 Variable (System *sys, std::string var_name, const unsigned int var_number, const unsigned int first_scalar_num, const FEType &var_type, const std::set< subdomain_id_type > &var_active_subdomains)
 Constructor.
 
 Variable (const Variable &)=default
 Standard constructors.
 
Variableoperator= (const Variable &)=default
 
 Variable (Variable &&)=default
 
Variableoperator= (Variable &&)=default
 
bool operator== (const Variable &other) const
 
Systemsystem () const
 
const std::string & name () const
 
unsigned int number () const
 
unsigned int first_scalar_number () const
 
const FETypetype () const
 
unsigned int n_components () const
 
unsigned int n_components (const MeshBase &mesh) const
 
bool active_on_subdomain (subdomain_id_type sid) const
 
bool implicitly_active () const
 
const std::set< subdomain_id_type > & active_subdomains () const
 

Protected Attributes

System_sys
 
std::string _name
 
std::set< subdomain_id_type_active_subdomains
 
unsigned int _number
 
unsigned int _first_scalar_number
 
FEType _type
 

Private Member Functions

FETypetype ()
 

Friends

class DofMap
 

Detailed Description

This class defines the notion of a variable in the system.

A variable is one of potentially several unknowns in the problem at hand. A variable is described by a unique name, a finite element approximation family, and (optionally) a list of subdomains to which the variable is restricted.

Author
Roy Stogner
Date
2010

A variable which is solved for in a System of equations.

Definition at line 50 of file variable.h.

Constructor & Destructor Documentation

◆ Variable() [1/4]

libMesh::Variable::Variable ( System sys,
std::string  var_name,
const unsigned int  var_number,
const unsigned int  first_scalar_num,
const FEType var_type 
)
inline

Constructor.

Omits the subdomain mapping, hence this constructor creates a variable which is active on all subdomains.

Definition at line 59 of file variable.h.

63 :
64 _sys(sys),
65 _name(std::move(var_name)),
67 _number(var_number),
68 _first_scalar_number(first_scalar_num),
69 _type(var_type)
70 {}
unsigned int _first_scalar_number
Definition variable.h:189
unsigned int _number
Definition variable.h:188
std::set< subdomain_id_type > _active_subdomains
Definition variable.h:187
std::string _name
Definition variable.h:186

◆ Variable() [2/4]

libMesh::Variable::Variable ( System sys,
std::string  var_name,
const unsigned int  var_number,
const unsigned int  first_scalar_num,
const FEType var_type,
const std::set< subdomain_id_type > &  var_active_subdomains 
)
inline

Constructor.

Takes a set which contains the subdomain indices for which this variable is active.

Definition at line 76 of file variable.h.

81 :
82 _sys(sys),
83 _name(std::move(var_name)),
84 _active_subdomains(var_active_subdomains),
85 _number(var_number),
86 _first_scalar_number(first_scalar_num),
87 _type(var_type)
88 {}

◆ Variable() [3/4]

libMesh::Variable::Variable ( const Variable )
default

Standard constructors.

◆ Variable() [4/4]

libMesh::Variable::Variable ( Variable &&  )
default

Member Function Documentation

◆ active_on_subdomain()

bool libMesh::Variable::active_on_subdomain ( subdomain_id_type  sid) const
inline

◆ active_subdomains()

const std::set< subdomain_id_type > & libMesh::Variable::active_subdomains ( ) const
inline

◆ first_scalar_number()

unsigned int libMesh::Variable::first_scalar_number ( ) const
inline
Returns
The index of the first scalar component of this variable in the system. Say you've got a flow problem that's (u,v,w,p,T) - p will be at first_scalar_number 3 regardless of whether p is variable number 1 in the case that u,v,w is represented by a single vector-valued variable at number 0, or p is variable number 3 in the case that u,v,w are three scalar-valued variables with variable numbers 0,1,2

Definition at line 138 of file variable.h.

139 { return _first_scalar_number; }

References _first_scalar_number.

Referenced by libMesh::DofMap::n_components(), and libMesh::VariableGroup::variable().

◆ implicitly_active()

bool libMesh::Variable::implicitly_active ( ) const
inline
Returns
true if this variable is active on all subdomains because it has no specified activity map. This can be used to perform more efficient computations in some places.

Definition at line 175 of file variable.h.

176 { return _active_subdomains.empty(); }

References _active_subdomains.

Referenced by libMesh::DofMap::add_variable(), and libMesh::DofMap::add_variables().

◆ n_components() [1/2]

unsigned int libMesh::Variable::n_components ( ) const
Returns
The number of components of this variable if the FEFamily is SCALAR or if the associated FEFieldType is TYPE_SCALAR. Otherwise this will error because determination of the number of components for a TYPE_VECTOR requires the mesh

Definition at line 23 of file variable.C.

24{
25 if (_type.family == SCALAR)
26 return _type.order.get_order();
27
28 if (const auto fe_field_type = FEInterface::field_type(_type.family);
29 fe_field_type == TYPE_VECTOR)
30 libmesh_error_msg("Cannot determine the number of components. Please call the n_components "
31 "overload with a mesh argument");
32 else
33 return 1;
34}
static FEFieldType field_type(const FEType &fe_type)
OrderWrapper order
The approximation order of the element (at 0 p-refinement level).
Definition fe_type.h:203
FEFamily family
The type of finite element.
Definition fe_type.h:228
int get_order() const
Explicitly request the order as an int.
Definition fe_type.h:80

References _type, libMesh::FEType::family, libMesh::FEInterface::field_type(), libMesh::OrderWrapper::get_order(), libMesh::FEType::order, libMesh::SCALAR, and libMesh::TYPE_VECTOR.

Referenced by libMesh::DofMap::n_components(), libMesh::StaticCondensationDofMap::reinit(), libMesh::BoundaryVolumeSolutionTransfer::transfer_boundary_volume(), and libMesh::BoundaryVolumeSolutionTransfer::transfer_volume_boundary().

◆ n_components() [2/2]

unsigned int libMesh::Variable::n_components ( const MeshBase mesh) const
Returns
The number of components of this variable

Definition at line 36 of file variable.C.

37{
38 if (_type.family == SCALAR)
39 return _type.order.get_order();
40 else
42}
static unsigned int n_vec_dim(const MeshBase &mesh, const FEType &fe_type)
MeshBase & mesh

References _type, libMesh::FEType::family, libMesh::OrderWrapper::get_order(), mesh, libMesh::FEInterface::n_vec_dim(), libMesh::FEType::order, and libMesh::SCALAR.

◆ name()

const std::string & libMesh::Variable::name ( ) const
inline

◆ number()

unsigned int libMesh::Variable::number ( ) const
inline

◆ operator=() [1/2]

Variable & libMesh::Variable::operator= ( const Variable )
default

◆ operator=() [2/2]

Variable & libMesh::Variable::operator= ( Variable &&  )
default

◆ operator==()

bool libMesh::Variable::operator== ( const Variable other) const
inline
Returns
true iff the other Variable has the same characteristics and system numbering as this one.

Definition at line 102 of file variable.h.

103 {
104 return (_sys == other._sys) &&
105 (_name == other._name) &&
106 (_active_subdomains == other._active_subdomains) &&
107 (_first_scalar_number == other._first_scalar_number) &&
108 (_type == other._type);
109 }

References _active_subdomains, _first_scalar_number, _name, _sys, and _type.

◆ system()

System * libMesh::Variable::system ( ) const
inline

◆ type() [1/2]

FEType & libMesh::Variable::type ( )
inlineprivate
Returns
The FEType for this variable. Altering this while this Variable is already in use may be dangerous!

Definition at line 197 of file variable.h.

198 { return _type; }

References _type.

◆ type() [2/2]

const FEType & libMesh::Variable::type ( ) const
inline
Returns
The FEType for this variable.

Definition at line 144 of file variable.h.

145 { return _type; }

References _type.

Referenced by libMesh::DofMap::_dof_indices(), libMesh::DofMap::_node_dof_indices(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::DifferentiableSystem::add_second_order_dot_vars(), libMesh::DofMap::add_variable(), libMesh::DofMap::add_variables(), libMesh::FEMSystem::assembly(), libMesh::FEGenericBase< OutputType >::compute_proj_constraints(), libMesh::FirstOrderUnsteadySolver::compute_second_order_eqns(), libMesh::DofMap::distribute_local_dofs_node_major(), libMesh::DofMap::distribute_local_dofs_var_major(), libMesh::DofMap::distribute_scalar_dofs(), libMesh::DofMap::dof_indices(), libMesh::DofMap::dof_indices(), libMesh::DofMap::dof_indices(), libMesh::DofMap::dof_indices(), libMesh::DifferentiableSystem::have_first_order_scalar_vars(), libMesh::DifferentiableSystem::have_second_order_scalar_vars(), main(), libMesh::DifferentiablePhysics::nonlocal_mass_residual(), libMesh::DofMap::old_dof_indices(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::SortAndCopy::operator()(), libMesh::BoundaryProjectSolution::operator()(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::ProjectInteriors::operator()(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::ProjectVertices::operator()(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::ProjectEdges::operator()(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::ProjectSides::operator()(), libMesh::System::project_vector(), libMesh::System::read_SCALAR_dofs(), libMesh::System::read_serialized_vectors(), libMesh::StaticCondensationDofMap::reinit(), libMesh::PetscPreconditioner< T >::set_petsc_aux_data(), libMesh::PetscDMWrapper::set_point_range_in_section(), libMesh::DofMap::should_p_refine(), libMesh::DofMap::should_p_refine(), libMesh::DirectSolutionTransfer::transfer(), libMesh::MeshFunctionSolutionTransfer::transfer(), libMesh::VariableGroup::variable(), libMesh::System::write_parallel_data(), libMesh::System::write_serialized_vector(), and libMesh::System::write_serialized_vectors().

Friends And Related Symbol Documentation

◆ DofMap

friend class DofMap
friend

Definition at line 202 of file variable.h.

Member Data Documentation

◆ _active_subdomains

std::set<subdomain_id_type> libMesh::Variable::_active_subdomains
protected

Definition at line 187 of file variable.h.

Referenced by active_on_subdomain(), active_subdomains(), implicitly_active(), and operator==().

◆ _first_scalar_number

unsigned int libMesh::Variable::_first_scalar_number
protected

◆ _name

std::string libMesh::Variable::_name
protected

Definition at line 186 of file variable.h.

Referenced by name(), and operator==().

◆ _number

unsigned int libMesh::Variable::_number
protected

Definition at line 188 of file variable.h.

Referenced by number(), and libMesh::VariableGroup::number().

◆ _sys

System* libMesh::Variable::_sys
protected

Definition at line 185 of file variable.h.

Referenced by operator==(), and system().

◆ _type

FEType libMesh::Variable::_type
protected

Definition at line 190 of file variable.h.

Referenced by n_components(), n_components(), operator==(), type(), and type().


The documentation for this class was generated from the following files: