ASPECT
fe_variable_collection.h
Go to the documentation of this file.
1 // ------------------------------------------------------
2 //
3 // SPDX-License-Identifier: GPL-2.0-or-later
4 //
5 // SPDX-FileCopyrightText: Copyright (C) 2016-2025 by the ASPECT authors.
6 //
7 // This file is part of ASPECT.
8 //
9 // Detailed license information governing the source code and
10 // contributions can be found in the folder LICENSES and in
11 // LICENSE and CONTRIBUTING.md at the top level directory.
12 //
13 // ------------------------------------------------------
14 
15 #ifndef _aspect_fe_variable_system_h
16 #define _aspect_fe_variable_system_h
17 
18 #include <aspect/global.h>
21 #include <deal.II/fe/fe.h>
22 
23 namespace aspect
24 {
40  template <int dim>
42  {
60  VariableDeclaration(const std::string &name,
61  const std::shared_ptr<FiniteElement<dim>> &fe,
62  const unsigned int multiplicity,
63  const unsigned int n_blocks);
64 
69 
73  unsigned int n_components() const;
74 
78  std::string name;
79 
83  std::shared_ptr<FiniteElement<dim>> fe;
84 
88  unsigned int multiplicity;
89 
94  unsigned int n_blocks;
95  };
96 
102  template <int dim>
103  struct FEVariable: public VariableDeclaration<dim>
104  {
109  FEVariable(const VariableDeclaration<dim> &fe_variable,
110  const unsigned int component_index,
111  const unsigned int block_index,
112  const unsigned int base_index);
113 
118  unsigned int first_component_index;
119 
124  unsigned int block_index;
130  unsigned int base_index;
131 
136 
140  const FEValuesExtractors::Scalar &extractor_scalar() const;
141 
145  const FEValuesExtractors::Vector &extractor_vector() const;
146 
147  private:
152 
157  };
158 
159 
167  template <int dim>
169  {
170  public:
175 
180  FEVariableCollection(const std::vector<VariableDeclaration<dim>> &variable_definitions);
181 
185  void initialize(const std::vector<VariableDeclaration<dim>> &variable_definitions);
186 
193  const FEVariable<dim> &variable(const std::string &name) const;
194 
198  std::vector<const FEVariable<dim>*> variables_with_name(const std::string &name) const;
199 
204  bool variable_exists(const std::string &name) const;
205 
209  const std::vector<FEVariable<dim>> &get_variables() const;
210 
214  unsigned int n_components() const;
215 
219  unsigned int n_blocks() const;
220 
225  const std::vector<const FiniteElement<dim> *> &get_fes() const;
226 
231  const std::vector<unsigned int> &get_multiplicities() const;
232 
237  const std::vector<unsigned int> &get_components_to_blocks() const;
238 
239  protected:
243  std::vector<FEVariable<dim>> variables;
244 
248  unsigned int n_components_;
249 
253  unsigned int n_blocks_;
254 
264  std::vector<const FiniteElement<dim> *> fes;
265 
270  std::vector<unsigned int> multiplicities;
271 
275  std::vector<unsigned int> components_to_blocks;
276  };
277 
278 } // namespace aspect
279 
280 #endif
unsigned int n_components() const
FEValuesExtractors::Scalar scalar_extractor
std::vector< unsigned int > multiplicities
std::vector< FEVariable< dim > > variables
std::vector< unsigned int > components_to_blocks
std::vector< const FiniteElement< dim > * > fes
std::shared_ptr< FiniteElement< dim > > fe
unsigned int first_component_index
FEValuesExtractors::Vector vector_extractor