1#ifndef PROJECTS_DPG_PRODUCT_ELEMENT_VECTOR_PROVIDER
2#define PROJECTS_DPG_PRODUCT_ELEMENT_VECTOR_PROVIDER
13#include <lf/mesh/mesh.h>
14#include <lf/uscalfe/uscalfe.h>
20#include "product_fe_space.h"
21#include "sub_element_vector_provider.h"
58template <
typename SCALAR>
114 std::vector<std::shared_ptr<SubElementVectorProvider<SCALAR>>>
subproviders_;
118template <
typename PTR,
typename vector>
123template <
typename SCALAR>
127 LF_ASSERT_MSG(fe_space_test_ !=
nullptr,
128 "missing description of the trial space");
136 for (
const auto& provider : subproviders_) {
137 LF_ASSERT_MSG(provider !=
nullptr,
138 "invalid subvector provider, is nullptr");
139 if (provider->isActive(cell)) {
141 size_type test_component = provider->TestComponent();
145 vec.segment(dof_h.LocalStartIndex(cell, test_component),
146 sub_vec.size()) += sub_vec;
Interface class representing a topological entity in a cellular complex
Class providing element vectors associated with linear forms on cartesian/product spaces.
virtual bool isActive(const lf::mesh::Entity &)
All cells are considered active in the default implementation.
ProductElementVectorProvider(ProductElementVectorProvider &&) noexcept=default
std::vector< std::shared_ptr< SubElementVectorProvider< SCALAR > > > subproviders_
ElemVec Eval(const lf::mesh::Entity &cell)
main routine for the computation of element vectors
std::shared_ptr< ProductUniformFESpace< SCALAR > > fe_space_test_
virtual ~ProductElementVectorProvider()=default
virtual destructor
typename SubElementVectorProvider< SCALAR >::ElemVec ElemVec
typename SubElementVectorProvider< SCALAR >::elem_vec_t elem_vec_t
internal type for element vectors
ProductElementVectorProvider(const ProductElementVectorProvider &)=delete
Standard constructors.
Interface class providing element vectors associated with linear forms of a component of a cartesian/...
Eigen::Matrix< SCALAR, Eigen::Dynamic, 1 > elem_vec_t
internal type for element vectors
lf::assemble::size_type size_type
Contains functionality for the implementation of DPG methods.
ProductElementVectorProvider(PTR fe_space_test, vector subproviders) -> ProductElementVectorProvider< typename PTR::element_type::SCALAR >
lf::uscalfe::size_type size_type
Type for vector length/matrix sizes.