libMesh
Loading...
Searching...
No Matches
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
30namespace libMesh
31{
32
33// Forward declarations
34class ElemAssembly;
35class FEMContext;
36
44class RBAssemblyExpansion : public ReferenceCountedObject<RBAssemblyExpansion>
45{
46public:
47
56 virtual ~RBAssemblyExpansion () = default;
57
61 void perform_A_interior_assembly(unsigned int q,
62 FEMContext & context) const;
63
67 void perform_A_boundary_assembly(unsigned int q,
68 FEMContext & context) const;
69
73 void perform_F_interior_assembly(unsigned int q,
74 FEMContext & context) const;
75
79 void perform_F_boundary_assembly(unsigned int q,
80 FEMContext & context) const;
81
85 void perform_output_interior_assembly(unsigned int output_index,
86 unsigned int q_l,
87 FEMContext & context) const;
88
92 void perform_output_boundary_assembly(unsigned int output_index,
93 unsigned int q_l,
94 FEMContext & context) const;
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
179private:
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
ElemAssembly provides a per-element (interior and boundary) assembly functionality.
This class provides all data required for a physics package (e.g.
Definition fem_context.h:63
This class stores the set of ElemAssembly functor objects that define the "parameter-independent expa...
unsigned int get_n_output_terms(unsigned int output_index) const
Get the number of affine terms associated with the specified output.
virtual void attach_output_assembly(std::vector< std::unique_ptr< ElemAssembly > > &output_assembly)
Attach ElemAssembly object for an output (both interior and boundary assembly).
std::vector< ElemAssembly * > _F_assembly_vector
Vector storing the function pointers to the assembly routines for the rhs affine vectors.
ElemAssembly & get_A_assembly(unsigned int q)
Return a reference to the specified A_assembly object.
void perform_F_boundary_assembly(unsigned int q, FEMContext &context) const
Perform the specified F boundary assembly.
void perform_output_boundary_assembly(unsigned int output_index, unsigned int q_l, FEMContext &context) const
Perform the specified output assembly.
virtual ~RBAssemblyExpansion()=default
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).
void perform_A_boundary_assembly(unsigned int q, FEMContext &context) const
Perform the specified A boundary assembly.
unsigned int get_n_outputs() const
Get n_outputs, the number output functionals.
std::vector< std::vector< ElemAssembly * > > _output_assembly_vector
Vector storing the function pointers to the assembly routines for the outputs.
unsigned int get_n_A_terms() const
Get Q_a, the number of terms in the affine expansion for the bilinear form.
RBAssemblyExpansion()=default
All special functions can be defaulted for this simple class.
RBAssemblyExpansion(RBAssemblyExpansion &&)=default
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).
unsigned int get_n_F_terms() const
Get Q_f, the number of terms in the affine expansion for the right-hand side.
void attach_A_assembly(ElemAssembly *Aq_assembly)
Attach ElemAssembly object for the left-hand side (both interior and boundary assembly).
void perform_F_interior_assembly(unsigned int q, FEMContext &context) const
Perform the specified F interior assembly.
void perform_A_interior_assembly(unsigned int q, FEMContext &context) const
Perform the specified A interior assembly.
void perform_output_interior_assembly(unsigned int output_index, unsigned int q_l, FEMContext &context) const
Perform the specified output assembly.
RBAssemblyExpansion(const RBAssemblyExpansion &)=default
std::vector< ElemAssembly * > _A_assembly_vector
Vectors storing the function pointers to the assembly routines for the affine operators,...
ElemAssembly & get_output_assembly(unsigned int output_index, unsigned int q_l)
Return a reference to the specified output assembly object.
ElemAssembly & get_F_assembly(unsigned int q)
Return a reference to the specified F_assembly object.
void attach_F_assembly(ElemAssembly *Fq_assembly)
Attach ElemAssembly object for the right-hand side (both interior and boundary assembly).
RBAssemblyExpansion & operator=(const RBAssemblyExpansion &)=default
This class implements reference counting.
The libMesh namespace provides an interface to certain functionality in the library.