libMesh
Public Member Functions | Protected Attributes | List of all members
libMesh::VariableGroup Class Reference

This class defines a logically grouped set of variables in the system. More...

#include <variable.h>

Inheritance diagram for libMesh::VariableGroup:
[legend]

Public Member Functions

 VariableGroup (System *sys, std::vector< std::string > var_names, const unsigned int var_number, const unsigned int first_scalar_num, const FEType &var_type)
 Constructor. More...
 
 VariableGroup (System *sys, std::vector< std::string > var_names, 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. More...
 
 VariableGroup (const VariableGroup &)=default
 Standard constructors. More...
 
VariableGroupoperator= (const VariableGroup &)=default
 
 VariableGroup (VariableGroup &&)=default
 
VariableGroupoperator= (VariableGroup &&)=default
 
bool operator== (const VariableGroup &other) const
 
unsigned int n_variables () const
 
Variable variable (unsigned int v) const
 
Variable operator() (unsigned int v) const
 Support vg(v). More...
 
const std::string & name (unsigned int v) const
 
unsigned int number (unsigned int v) const
 
unsigned int first_scalar_number (unsigned int v) const
 
void append (std::string var_name)
 Appends a variable to the group. More...
 
unsigned int number () const
 
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

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

Detailed Description

This class defines a logically grouped set of variables in the system.

VariableGroup is appropriate for representing several unknowns in the problem that are all approximated with the same finite element approximation family and (optionally) a list of subdomains to which the variables are restricted.

Definition at line 203 of file variable.h.

Constructor & Destructor Documentation

◆ VariableGroup() [1/4]

libMesh::VariableGroup::VariableGroup ( System sys,
std::vector< std::string >  var_names,
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 211 of file variable.h.

215  :
216  Variable (sys,
217  "var_group",
218  var_number,
219  first_scalar_num,
220  var_type),
221  _names(std::move(var_names))
222  {}
Variable(System *sys, std::string var_name, const unsigned int var_number, const unsigned int first_scalar_num, const FEType &var_type)
Constructor.
Definition: variable.h:59
std::vector< std::string > _names
Definition: variable.h:332

◆ VariableGroup() [2/4]

libMesh::VariableGroup::VariableGroup ( System sys,
std::vector< std::string >  var_names,
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 229 of file variable.h.

234  :
235 
236  Variable (sys,
237  "var_group",
238  var_number,
239  first_scalar_num,
240  var_type,
241  var_active_subdomains),
242  _names(std::move(var_names))
243  {}
Variable(System *sys, std::string var_name, const unsigned int var_number, const unsigned int first_scalar_num, const FEType &var_type)
Constructor.
Definition: variable.h:59
std::vector< std::string > _names
Definition: variable.h:332

◆ VariableGroup() [3/4]

libMesh::VariableGroup::VariableGroup ( const VariableGroup )
default

Standard constructors.

◆ VariableGroup() [4/4]

libMesh::VariableGroup::VariableGroup ( VariableGroup &&  )
default

Member Function Documentation

◆ active_on_subdomain()

bool libMesh::Variable::active_on_subdomain ( subdomain_id_type  sid) const
inlineinherited
Returns
true if this variable is active on subdomain sid, false otherwise.
Note
We interpret the special case of an empty _active_subdomains container as active everywhere, i.e. for all subdomains.

Definition at line 167 of file variable.h.

References libMesh::Variable::_active_subdomains.

Referenced by libMesh::ExactSolution::_compute_error(), libMesh::DofMap::_dof_indices(), libMesh::EquationSystems::build_discontinuous_solution_vector(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::EquationSystems::build_parallel_solution_vector(), libMesh::FEGenericBase< FEOutputType< T >::type >::compute_proj_constraints(), libMesh::DofMap::distribute_local_dofs_node_major(), libMesh::DofMap::distribute_local_dofs_var_major(), libMesh::DofMap::dof_indices(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::SubFunctor::find_dofs_to_send(), libMesh::DofMap::local_variable_indices(), libMesh::DofMap::old_dof_indices(), libMesh::BoundaryProjectSolution::operator()(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::SortAndCopy::operator()(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::ProjectInteriors::operator()(), libMesh::DofMap::reinit(), and libMesh::Nemesis_IO_Helper::write_nodal_solution().

168  { return (_active_subdomains.empty() || _active_subdomains.count(sid)); }
std::set< subdomain_id_type > _active_subdomains
Definition: variable.h:187

◆ active_subdomains()

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

◆ append()

void libMesh::VariableGroup::append ( std::string  var_name)
inline

Appends a variable to the group.

Really only can be used by System in a very limited window of opportunity - after the user specifies variables but before the system is initialized.

Definition at line 328 of file variable.h.

References _names.

329  { _names.push_back (std::move(var_name)); }
std::vector< std::string > _names
Definition: variable.h:332

◆ first_scalar_number() [1/2]

unsigned int libMesh::Variable::first_scalar_number ( ) const
inlineinherited
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.

References libMesh::Variable::_first_scalar_number.

Referenced by libMesh::System::n_components(), and variable().

139  { return _first_scalar_number; }
unsigned int _first_scalar_number
Definition: variable.h:189

◆ first_scalar_number() [2/2]

unsigned int libMesh::VariableGroup::first_scalar_number ( unsigned int  v) const
inline
Returns
The index of the first scalar component of this variable in the system.

Definition at line 317 of file variable.h.

References libMesh::Variable::_first_scalar_number, and n_variables().

318  {
319  libmesh_assert_less (v, this->n_variables());
320  return _first_scalar_number+v;
321  }
unsigned int _first_scalar_number
Definition: variable.h:189
unsigned int n_variables() const
Definition: variable.h:266

◆ implicitly_active()

bool libMesh::Variable::implicitly_active ( ) const
inlineinherited
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.

References libMesh::Variable::_active_subdomains.

Referenced by libMesh::System::add_variable().

176  { return _active_subdomains.empty(); }
std::set< subdomain_id_type > _active_subdomains
Definition: variable.h:187

◆ n_components() [1/2]

unsigned int libMesh::Variable::n_components ( ) const
inherited
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.

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

Referenced by libMesh::System::n_components(), libMesh::BoundaryVolumeSolutionTransfer::transfer_boundary_volume(), and libMesh::BoundaryVolumeSolutionTransfer::transfer_volume_boundary().

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 }
FEFamily family
The type of finite element.
Definition: fe_type.h:221
static FEFieldType field_type(const FEType &fe_type)
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
int get_order() const
Explicitly request the order as an int.
Definition: fe_type.h:80

◆ n_components() [2/2]

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

Definition at line 36 of file variable.C.

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

37 {
38  if (_type.family == SCALAR)
39  return _type.order.get_order();
40  else
42 }
FEFamily family
The type of finite element.
Definition: fe_type.h:221
MeshBase & mesh
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
static unsigned int n_vec_dim(const MeshBase &mesh, const FEType &fe_type)
int get_order() const
Explicitly request the order as an int.
Definition: fe_type.h:80

◆ n_variables()

unsigned int libMesh::VariableGroup::n_variables ( ) const
inline

◆ name() [1/2]

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

◆ name() [2/2]

const std::string& libMesh::VariableGroup::name ( unsigned int  v) const
inline
Returns
The user-specified name of the variable.

Definition at line 295 of file variable.h.

References _names, and n_variables().

Referenced by libMesh::System::get_info().

296  {
297  libmesh_assert_less (v, this->n_variables());
298  return _names[v];
299  }
unsigned int n_variables() const
Definition: variable.h:266
std::vector< std::string > _names
Definition: variable.h:332

◆ number() [1/3]

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

◆ number() [2/3]

unsigned int libMesh::VariableGroup::number ( unsigned int  v) const
inline
Returns
The rank of this variable in the system.

Definition at line 304 of file variable.h.

References libMesh::Variable::_number, and n_variables().

Referenced by libMesh::DofMap::dof_indices(), libMesh::DofMap::old_dof_indices(), and libMesh::StaticCondensationDofMap::reinit().

305  {
306  libmesh_assert_less (v, this->n_variables());
307  return _number + v;
308  }
unsigned int n_variables() const
Definition: variable.h:266
unsigned int _number
Definition: variable.h:188

◆ number() [3/3]

unsigned int libMesh::Variable::number
inline
Returns
The rank of this variable in the system.

Definition at line 128 of file variable.h.

129  { return _number; }
unsigned int _number
Definition: variable.h:188

◆ operator()()

Variable libMesh::VariableGroup::operator() ( unsigned int  v) const
inline

Support vg(v).

Returns
A Variable for v.

Definition at line 289 of file variable.h.

References variable().

290  { return this->variable(v); }
Variable variable(unsigned int v) const
Definition: variable.h:273

◆ operator=() [1/2]

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

◆ operator=() [2/2]

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

◆ operator==() [1/2]

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

Definition at line 102 of file variable.h.

References libMesh::Variable::_active_subdomains, libMesh::Variable::_first_scalar_number, libMesh::Variable::_name, libMesh::Variable::_sys, and libMesh::Variable::_type.

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  }
std::set< subdomain_id_type > _active_subdomains
Definition: variable.h:187
std::string _name
Definition: variable.h:186
unsigned int _first_scalar_number
Definition: variable.h:189
System * _sys
Definition: variable.h:185

◆ operator==() [2/2]

bool libMesh::VariableGroup::operator== ( const VariableGroup other) const
inline
Returns
true iff the other VariableGroup has exactly the same Variable members as this one.

Definition at line 257 of file variable.h.

References _names.

258  {
259  return (this->Variable::operator==(other)) &&
260  (_names == other._names);
261  }
std::vector< std::string > _names
Definition: variable.h:332

◆ system()

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

◆ type()

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

Definition at line 144 of file variable.h.

References libMesh::Variable::_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::FEMSystem::assembly(), libMesh::FEGenericBase< FEOutputType< T >::type >::compute_proj_constraints(), libMesh::FirstOrderUnsteadySolver::compute_second_order_eqns(), libMesh::DofMap::distribute_dofs(), libMesh::DofMap::distribute_local_dofs_node_major(), libMesh::DofMap::distribute_local_dofs_var_major(), libMesh::DofMap::distribute_scalar_dofs(), libMesh::DofMap::dof_indices(), libMesh::System::get_info(), main(), libMesh::DifferentiablePhysics::nonlocal_mass_residual(), libMesh::DofMap::old_dof_indices(), libMesh::BoundaryProjectSolution::operator()(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::SortAndCopy::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::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::ProjectInteriors::operator()(), libMesh::System::project_vector(), libMesh::System::read_parallel_data(), libMesh::System::read_SCALAR_dofs(), libMesh::StaticCondensationDofMap::reinit(), libMesh::DofMap::reinit(), libMesh::DofMap::SCALAR_dof_indices(), libMesh::PetscDMWrapper::set_point_range_in_section(), libMesh::MeshFunctionSolutionTransfer::transfer(), libMesh::DirectSolutionTransfer::transfer(), variable(), libMesh::System::write_parallel_data(), and libMesh::System::write_serialized_vector().

145  { return _type; }

◆ variable()

Variable libMesh::VariableGroup::variable ( unsigned int  v) const
inline
Returns
A Variable object constructed for an individual member of our group.

Definition at line 273 of file variable.h.

References libMesh::Variable::active_subdomains(), libMesh::Variable::first_scalar_number(), n_variables(), libMesh::Variable::name(), libMesh::Variable::number(), libMesh::Variable::system(), libMesh::Variable::type(), and libMesh::Variable::Variable().

Referenced by operator()().

274  {
275  libmesh_assert_less (v, this->n_variables());
276  return Variable (this->system(),
277  this->name(v),
278  this->number(v),
279  this->first_scalar_number(v),
280  this->type(),
281  this->active_subdomains());
282  }
Variable(System *sys, std::string var_name, const unsigned int var_number, const unsigned int first_scalar_num, const FEType &var_type)
Constructor.
Definition: variable.h:59
unsigned int first_scalar_number() const
Definition: variable.h:138
const std::set< subdomain_id_type > & active_subdomains() const
Definition: variable.h:181
unsigned int n_variables() const
Definition: variable.h:266
System * system() const
Definition: variable.h:114
const std::string & name() const
Definition: variable.h:122
unsigned int number() const
Definition: variable.h:128
const FEType & type() const
Definition: variable.h:144

Member Data Documentation

◆ _active_subdomains

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

◆ _first_scalar_number

unsigned int libMesh::Variable::_first_scalar_number
protectedinherited

◆ _name

std::string libMesh::Variable::_name
protectedinherited

Definition at line 186 of file variable.h.

Referenced by libMesh::Variable::name(), and libMesh::Variable::operator==().

◆ _names

std::vector<std::string> libMesh::VariableGroup::_names
protected

Definition at line 332 of file variable.h.

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

◆ _number

unsigned int libMesh::Variable::_number
protectedinherited

Definition at line 188 of file variable.h.

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

◆ _sys

System* libMesh::Variable::_sys
protectedinherited

Definition at line 185 of file variable.h.

Referenced by libMesh::Variable::operator==(), and libMesh::Variable::system().

◆ _type

FEType libMesh::Variable::_type
protectedinherited

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