libMesh
rb_assembly_expansion.h
Go to the documentation of this file.
1 // rbOOmit: An implementation of the Certified Reduced Basis method.
2 // Copyright (C) 2009, 2010 David J. Knezevic
3 
4 // This file is part of rbOOmit.
5 
6 // rbOOmit is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
10 
11 // rbOOmit is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
15 
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 
20 #ifndef LIBMESH_RB_ASSEMBLY_EXPANSION_H
21 #define LIBMESH_RB_ASSEMBLY_EXPANSION_H
22 
23 // libMesh includes
24 #include "libmesh/reference_counted_object.h"
25 
26 // C++ includes
27 #include <vector>
28 #include <memory>
29 
30 namespace libMesh
31 {
32 
33 // Forward declarations
34 class ElemAssembly;
35 class FEMContext;
36 
44 class RBAssemblyExpansion : public ReferenceCountedObject<RBAssemblyExpansion>
45 {
46 public:
47 
52 
56  virtual ~RBAssemblyExpansion() {}
57 
61  void perform_A_interior_assembly(unsigned int q,
62  FEMContext & context);
63 
67  void perform_A_boundary_assembly(unsigned int q,
68  FEMContext & context);
69 
73  void perform_F_interior_assembly(unsigned int q,
74  FEMContext & context);
75 
79  void perform_F_boundary_assembly(unsigned int q,
80  FEMContext & context);
81 
85  void perform_output_interior_assembly(unsigned int output_index,
86  unsigned int q_l,
87  FEMContext & context);
88 
92  void perform_output_boundary_assembly(unsigned int output_index,
93  unsigned int q_l,
94  FEMContext & context);
95 
100  unsigned int get_n_A_terms() const;
101 
106  unsigned int get_n_F_terms() const;
107 
111  unsigned int get_n_outputs() const;
112 
116  unsigned int get_n_output_terms(unsigned int output_index) const;
117 
122  void attach_A_assembly(ElemAssembly * Aq_assembly);
123 
128  void attach_multiple_A_assembly(std::vector<std::unique_ptr<ElemAssembly>> & Aq_assembly);
129 
134  void attach_F_assembly(ElemAssembly * Fq_assembly);
135 
140  void attach_multiple_F_assembly(std::vector<std::unique_ptr<ElemAssembly>> & Fq_assembly);
141 
147  virtual void attach_output_assembly(std::vector<std::unique_ptr<ElemAssembly>> & output_assembly);
148 
154  virtual void attach_output_assembly(std::vector<ElemAssembly *> output_assembly);
155 
162  virtual void attach_output_assembly(ElemAssembly * output_assembly);
163 
167  ElemAssembly & get_A_assembly(unsigned int q);
168 
172  ElemAssembly & get_F_assembly(unsigned int q);
173 
177  ElemAssembly & get_output_assembly(unsigned int output_index, unsigned int q_l);
178 
179 private:
180 
186  std::vector<ElemAssembly *> _A_assembly_vector;
187 
192  std::vector<ElemAssembly *> _F_assembly_vector;
193 
198  std::vector<std::vector<ElemAssembly *>> _output_assembly_vector;
199 };
200 
201 }
202 
203 #endif // LIBMESH_RB_ASSEMBLY_EXPANSION_H
libMesh::RBAssemblyExpansion::RBAssemblyExpansion
RBAssemblyExpansion()
Constructor.
Definition: rb_assembly_expansion.C:30
libMesh::RBAssemblyExpansion::attach_F_assembly
void attach_F_assembly(ElemAssembly *Fq_assembly)
Attach ElemAssembly object for the right-hand side (both interior and boundary assembly).
Definition: rb_assembly_expansion.C:142
libMesh::RBAssemblyExpansion::perform_F_interior_assembly
void perform_F_interior_assembly(unsigned int q, FEMContext &context)
Perform the specified F interior assembly.
Definition: rb_assembly_expansion.C:56
libMesh::RBAssemblyExpansion::get_output_assembly
ElemAssembly & get_output_assembly(unsigned int output_index, unsigned int q_l)
Return a reference to the specified output assembly object.
Definition: rb_assembly_expansion.C:190
libMesh::RBAssemblyExpansion::attach_multiple_A_assembly
void attach_multiple_A_assembly(std::vector< std::unique_ptr< ElemAssembly >> &Aq_assembly)
Attach multiple ElemAssembly objects for the left-hand side (both interior and boundary assembly).
Definition: rb_assembly_expansion.C:136
libMesh::RBAssemblyExpansion::attach_multiple_F_assembly
void attach_multiple_F_assembly(std::vector< std::unique_ptr< ElemAssembly >> &Fq_assembly)
Attach multiple ElemAssembly objects for the right-hand side (both interior and boundary assembly).
Definition: rb_assembly_expansion.C:147
libMesh::ReferenceCountedObject
This class implements reference counting.
Definition: reference_counted_object.h:65
libMesh
The libMesh namespace provides an interface to certain functionality in the library.
Definition: factoryfunction.C:55
libMesh::RBAssemblyExpansion::get_F_assembly
ElemAssembly & get_F_assembly(unsigned int q)
Return a reference to the specified F_assembly object.
Definition: rb_assembly_expansion.C:182
libMesh::RBAssemblyExpansion::perform_output_boundary_assembly
void perform_output_boundary_assembly(unsigned int output_index, unsigned int q_l, FEMContext &context)
Perform the specified output assembly.
Definition: rb_assembly_expansion.C:91
libMesh::RBAssemblyExpansion::get_n_output_terms
unsigned int get_n_output_terms(unsigned int output_index) const
Get the number of affine terms associated with the specified output.
Definition: rb_assembly_expansion.C:122
libMesh::RBAssemblyExpansion::perform_F_boundary_assembly
void perform_F_boundary_assembly(unsigned int q, FEMContext &context)
Perform the specified F boundary assembly.
Definition: rb_assembly_expansion.C:67
libMesh::RBAssemblyExpansion
This class stores the set of ElemAssembly functor objects that define the "parameter-independent expa...
Definition: rb_assembly_expansion.h:44
libMesh::RBAssemblyExpansion::_F_assembly_vector
std::vector< ElemAssembly * > _F_assembly_vector
Vector storing the function pointers to the assembly routines for the rhs affine vectors.
Definition: rb_assembly_expansion.h:192
libMesh::RBAssemblyExpansion::get_n_F_terms
unsigned int get_n_F_terms() const
Get Q_f, the number of terms in the affine expansion for the right-hand side.
Definition: rb_assembly_expansion.C:110
libMesh::RBAssemblyExpansion::_output_assembly_vector
std::vector< std::vector< ElemAssembly * > > _output_assembly_vector
Vector storing the function pointers to the assembly routines for the outputs.
Definition: rb_assembly_expansion.h:198
libMesh::RBAssemblyExpansion::attach_A_assembly
void attach_A_assembly(ElemAssembly *Aq_assembly)
Attach ElemAssembly object for the left-hand side (both interior and boundary assembly).
Definition: rb_assembly_expansion.C:131
libMesh::RBAssemblyExpansion::get_A_assembly
ElemAssembly & get_A_assembly(unsigned int q)
Return a reference to the specified A_assembly object.
Definition: rb_assembly_expansion.C:174
libMesh::RBAssemblyExpansion::perform_A_interior_assembly
void perform_A_interior_assembly(unsigned int q, FEMContext &context)
Perform the specified A interior assembly.
Definition: rb_assembly_expansion.C:34
libMesh::ElemAssembly
ElemAssembly provides a per-element (interior and boundary) assembly functionality.
Definition: elem_assembly.h:38
libMesh::RBAssemblyExpansion::~RBAssemblyExpansion
virtual ~RBAssemblyExpansion()
Destructor.
Definition: rb_assembly_expansion.h:56
libMesh::RBAssemblyExpansion::perform_output_interior_assembly
void perform_output_interior_assembly(unsigned int output_index, unsigned int q_l, FEMContext &context)
Perform the specified output assembly.
Definition: rb_assembly_expansion.C:78
libMesh::RBAssemblyExpansion::_A_assembly_vector
std::vector< ElemAssembly * > _A_assembly_vector
Vectors storing the function pointers to the assembly routines for the affine operators,...
Definition: rb_assembly_expansion.h:186
libMesh::RBAssemblyExpansion::perform_A_boundary_assembly
void perform_A_boundary_assembly(unsigned int q, FEMContext &context)
Perform the specified A boundary assembly.
Definition: rb_assembly_expansion.C:45
libMesh::RBAssemblyExpansion::attach_output_assembly
virtual void attach_output_assembly(std::vector< std::unique_ptr< ElemAssembly >> &output_assembly)
Attach ElemAssembly object for an output (both interior and boundary assembly).
Definition: rb_assembly_expansion.C:153
libMesh::RBAssemblyExpansion::get_n_outputs
unsigned int get_n_outputs() const
Get n_outputs, the number output functionals.
Definition: rb_assembly_expansion.C:116
libMesh::RBAssemblyExpansion::get_n_A_terms
unsigned int get_n_A_terms() const
Get Q_a, the number of terms in the affine expansion for the bilinear form.
Definition: rb_assembly_expansion.C:104
libMesh::FEMContext
This class provides all data required for a physics package (e.g.
Definition: fem_context.h:62