libMesh
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | Private Member Functions | 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.
 
 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.
 
 VariableGroup (const VariableGroup &)=default
 Standard constructors.
 
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).
 
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.
 
unsigned int number () const
 
bool operator== (const Variable &other) const
 
Systemsystem () const
 
const std::string & name () 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
 

Private Member Functions

FETypetype ()
 

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 215 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 223 of file variable.h.

227 :
228 Variable (sys,
229 "var_group",
230 var_number,
231 first_scalar_num,
232 var_type),
233 _names(std::move(var_names))
234 {}
std::vector< std::string > _names
Definition variable.h:344
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

◆ 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 241 of file variable.h.

246 :
247
248 Variable (sys,
249 "var_group",
250 var_number,
251 first_scalar_num,
252 var_type,
253 var_active_subdomains),
254 _names(std::move(var_names))
255 {}

◆ 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

◆ 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 340 of file variable.h.

341 { _names.push_back (std::move(var_name)); }

References _names.

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

◆ 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.

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

References libMesh::Variable::_first_scalar_number.

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

◆ 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 329 of file variable.h.

330 {
331 libmesh_assert_less (v, this->n_variables());
332 return _first_scalar_number+v;
333 }
unsigned int n_variables() const
Definition variable.h:278

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

Referenced by libMesh::DofMap::should_p_refine().

◆ 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.

176 { return _active_subdomains.empty(); }

References libMesh::Variable::_active_subdomains.

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

◆ 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.

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 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::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
inherited
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 libMesh::Variable::_type, libMesh::FEType::family, libMesh::OrderWrapper::get_order(), mesh, libMesh::FEInterface::n_vec_dim(), libMesh::FEType::order, and libMesh::SCALAR.

◆ 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 307 of file variable.h.

308 {
309 libmesh_assert_less (v, this->n_variables());
310 return _names[v];
311 }

References _names, and n_variables().

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

◆ number() [1/2]

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

Referenced by variable().

◆ number() [2/2]

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

Definition at line 316 of file variable.h.

317 {
318 libmesh_assert_less (v, this->n_variables());
319 return _number + v;
320 }

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

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

◆ operator()()

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

Support vg(v).

Returns
A Variable for v.

Definition at line 301 of file variable.h.

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

References variable().

◆ 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.

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 libMesh::Variable::_active_subdomains, libMesh::Variable::_first_scalar_number, libMesh::Variable::_name, libMesh::Variable::_sys, and libMesh::Variable::_type.

◆ 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 269 of file variable.h.

270 {
271 return (this->Variable::operator==(other)) &&
272 (_names == other._names);
273 }

References _names.

◆ system()

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

◆ type() [1/2]

FEType & libMesh::Variable::type ( )
inlineprivateinherited
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 libMesh::Variable::_type.

◆ type() [2/2]

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

Definition at line 144 of file variable.h.

145 { return _type; }

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::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(), variable(), libMesh::System::write_parallel_data(), libMesh::System::write_serialized_vector(), and libMesh::System::write_serialized_vectors().

◆ 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 285 of file variable.h.

286 {
287 libmesh_assert_less (v, this->n_variables());
288 return Variable (this->system(),
289 this->name(v),
290 this->number(v),
291 this->first_scalar_number(v),
292 this->type(),
293 this->active_subdomains());
294 }
unsigned int number() const
Definition variable.h:128
unsigned int first_scalar_number() const
Definition variable.h:138
const std::set< subdomain_id_type > & active_subdomains() const
Definition variable.h:181
const std::string & name() const
Definition variable.h:122
System * system() const
Definition variable.h:114
const FEType & type() const
Definition variable.h:144

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

Referenced by operator()().

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 344 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: