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 
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<ElemAssembly *> Aq_assembly);
129 
134  void attach_F_assembly(ElemAssembly * Fq_assembly);
135 
140  void attach_multiple_F_assembly(std::vector<ElemAssembly *> Fq_assembly);
141 
147  virtual void attach_output_assembly(std::vector<ElemAssembly *> output_assembly);
148 
155  virtual void attach_output_assembly(ElemAssembly * output_assembly);
156 
160  ElemAssembly & get_A_assembly(unsigned int q);
161 
165  ElemAssembly & get_F_assembly(unsigned int q);
166 
170  ElemAssembly & get_output_assembly(unsigned int output_index, unsigned int q_l);
171 
172 private:
173 
179  std::vector<ElemAssembly *> _A_assembly_vector;
180 
185  std::vector<ElemAssembly *> _F_assembly_vector;
186 
191  std::vector<std::vector<ElemAssembly *>> _output_assembly_vector;
192 };
193 
194 }
195 
196 #endif // LIBMESH_RB_ASSEMBLY_EXPANSION_H
ElemAssembly & get_F_assembly(unsigned int q)
Return a reference to the specified F_assembly object.
void attach_multiple_F_assembly(std::vector< ElemAssembly * > Fq_assembly)
Attach multiple ElemAssembly objects for the right-hand side (both interior and boundary assembly)...
void attach_multiple_A_assembly(std::vector< ElemAssembly * > Aq_assembly)
Attach multiple ElemAssembly objects for the left-hand side (both interior and boundary assembly)...
unsigned int get_n_F_terms() const
Get Q_f, the number of terms in the affine expansion for the right-hand side.
void perform_F_boundary_assembly(unsigned int q, FEMContext &context)
Perform the specified F boundary assembly.
ElemAssembly & get_output_assembly(unsigned int output_index, unsigned int q_l)
Return a reference to the specified output assembly object.
unsigned int get_n_output_terms(unsigned int output_index) const
Get the number of affine terms associated with the specified output.
The libMesh namespace provides an interface to certain functionality in the library.
void perform_A_interior_assembly(unsigned int q, FEMContext &context)
Perform the specified A interior assembly.
std::vector< ElemAssembly * > _F_assembly_vector
Vector storing the function pointers to the assembly routines for the rhs affine vectors.
void attach_F_assembly(ElemAssembly *Fq_assembly)
Attach ElemAssembly object for the right-hand side (both interior and boundary assembly).
virtual ~RBAssemblyExpansion()
Destructor.
std::vector< std::vector< ElemAssembly * > > _output_assembly_vector
Vector storing the function pointers to the assembly routines for the outputs.
void perform_A_boundary_assembly(unsigned int q, FEMContext &context)
Perform the specified A boundary assembly.
unsigned int get_n_outputs() const
Get n_outputs, the number output functionals.
This class provides all data required for a physics package (e.g.
Definition: fem_context.h:61
void perform_output_boundary_assembly(unsigned int output_index, unsigned int q_l, FEMContext &context)
Perform the specified output assembly.
This class implements reference counting.
void perform_F_interior_assembly(unsigned int q, FEMContext &context)
Perform the specified F interior assembly.
void attach_A_assembly(ElemAssembly *Aq_assembly)
Attach ElemAssembly object for the left-hand side (both interior and boundary assembly).
std::vector< ElemAssembly * > _A_assembly_vector
Vectors storing the function pointers to the assembly routines for the affine operators, both interior and boundary assembly.
This class stores the set of ElemAssembly functor objects that define the "parameter-independent expa...
ElemAssembly & get_A_assembly(unsigned int q)
Return a reference to the specified A_assembly object.
ElemAssembly provides a per-element (interior and boundary) assembly functionality.
Definition: elem_assembly.h:38
virtual void attach_output_assembly(std::vector< ElemAssembly * > output_assembly)
Attach ElemAssembly object for an output (both interior and boundary assembly).
void perform_output_interior_assembly(unsigned int output_index, unsigned int q_l, FEMContext &context)
Perform the specified output assembly.
unsigned int get_n_A_terms() const
Get Q_a, the number of terms in the affine expansion for the bilinear form.