LehrFEM++ 1.0.0
A simple Finite Element Library for teaching
product_element_vector_provider_builder.h
1#ifndef PROJECTS_DPG_PRODUCT_ELEMENT_VECTOR_PROVIDER_BUILDER
2#define PROJECTS_DPG_PRODUCT_ELEMENT_VECTOR_PROVIDER_BUILDER
3
4#include "dpg.h"
5#include "loc_comp_dpg.h"
6#include "product_element_vector_provider.h"
7
8namespace projects::dpg {
9
28template <typename SCALAR>
30 public:
35 ProductElementVectorProviderBuilder&&) noexcept = delete;
40
47 std::shared_ptr<ProductUniformFESpace<SCALAR>> fe_space_test)
48 : fe_space_test_(std::move(fe_space_test)) {}
49
68 template <typename FUNCTOR>
70 size_type test_component, FUNCTOR f);
71
76 std::shared_ptr<ProductElementVectorProvider<SCALAR>> Build();
77
80
81 private:
83 std::shared_ptr<ProductUniformFESpace<SCALAR>> fe_space_test_;
86 std::vector<std::shared_ptr<SubElementVectorProvider<SCALAR>>> subproviders_;
87};
88
89template <typename SCALAR>
90template <typename FUNCTOR>
93 size_type test_component, FUNCTOR f) {
94 subproviders_.push_back(
96 fe_space_test_, test_component, f));
97 return *this;
98}
99
100template <typename SCALAR>
101std::shared_ptr<ProductElementVectorProvider<SCALAR>>
103 auto provider = std::make_shared<ProductElementVectorProvider<SCALAR>>(
104 fe_space_test_, subproviders_);
105
106 // clear supplied information
107 subproviders_ = {};
108 return provider;
109}
110
111} // namespace projects::dpg
112
113#endif // PROJECTS_DPG_PRODUCT_ELEMENT_VECTOR_PROVIDER_BUILDER
Class for local quadrature based computations of sub vectors corresponding to load vectors.
Builder class to build a ProductElementVectorProvider.
~ProductElementVectorProviderBuilder()=default
default destructor
std::vector< std::shared_ptr< SubElementVectorProvider< SCALAR > > > subproviders_
vector of Element Vector Providers representing already added linear forms
std::shared_ptr< ProductUniformFESpace< SCALAR > > fe_space_test_
collection of specifications for the test space
ProductElementVectorProviderBuilder & AddLoadElementVectorProvider(size_type test_component, FUNCTOR f)
Adds a linear form to representing a simple load linear form.
ProductElementVectorProviderBuilder(ProductElementVectorProviderBuilder &&) noexcept=delete
ProductElementVectorProviderBuilder(const ProductElementVectorProviderBuilder &)=delete
standard constructor
std::shared_ptr< ProductElementVectorProvider< SCALAR > > Build()
Build the ProductElementVectorProvider based on the provided linear forms.
cartesian/prodcut space of finite element functions on a hybrid 2D mesh.
Contains functionality for the implementation of DPG methods.
Definition: primal_dpg.h:33
lf::uscalfe::size_type size_type
Type for vector length/matrix sizes.
Definition: dpg.h:17