1#ifndef PROJECTS_DPG_DPG_ELEMENT_VECTOR_PROVIDER
2#define PROJECTS_DPG_DPG_ELEMENT_VECTOR_PROVIDER
12#include <lf/mesh/mesh.h>
15#include "product_element_matrix_provider.h"
16#include "product_element_vector_provider.h"
55template <
typename SCALAR>
83 extendedLoadVectorProvider,
85 extendedStiffnessMatrixProvider,
89 std::move(extendedStiffnessMatrixProvider)),
113 std::shared_ptr<ProductElementVectorProvider<SCALAR>>
117 std::shared_ptr<ProductElementMatrixProvider<SCALAR>>
124template <
class PTR1,
class PTR2>
126 PTR2 gramianProvider)
130template <
typename SCALAR>
134 LF_ASSERT_MSG(extendedLoadVectorProvider_ !=
nullptr &&
135 extendedStiffnessMatrixProvider_ !=
nullptr &&
136 gramianProvider_ !=
nullptr,
137 "nullptr error for some provider");
138 LF_ASSERT_MSG(extendedLoadVectorProvider_->isActive(cell) &&
139 extendedStiffnessMatrixProvider_->isActive(cell) &&
140 gramianProvider_->isActive(cell),
141 "Eval method called on inactive cell");
145 ElemVec extendedLoadVector = extendedLoadVectorProvider_->Eval(cell);
146 ElemMat extendedStiffnessMatrix =
147 extendedStiffnessMatrixProvider_->Eval(cell);
148 ElemMat gramian = gramianProvider_->Eval(cell);
151 LF_ASSERT_MSG(gramian.rows() == gramian.cols(),
152 "non quadratic gramian of size ("
153 << gramian.rows() <<
", " << gramian.cols() <<
") on cell "
157 return extendedStiffnessMatrix.transpose() *
158 gramian.ldlt().solve(extendedLoadVector);
Interface class representing a topological entity in a cellular complex
Class to evaluate element vectors of DPG methods.
std::shared_ptr< ProductElementMatrixProvider< SCALAR > > gramianProvider_
typename ProductElementVectorProvider< SCALAR >::ElemVec ElemVec
Return type of the Eval() method.
typename ProductElementVectorProvider< SCALAR >::elem_vec_t elem_vec_t
internal type for element vectors
std::shared_ptr< ProductElementVectorProvider< SCALAR > > extendedLoadVectorProvider_
virtual bool isActive(const lf::mesh::Entity &)
All cells are considered active in the default implementation.
std::shared_ptr< ProductElementMatrixProvider< SCALAR > > extendedStiffnessMatrixProvider_
ElemVec Eval(const lf::mesh::Entity &cell)
main routine for the computation of DPG element vectors
typename ProductElementMatrixProvider< SCALAR >::ElemMat ElemMat
return type of the Eval() method of the ProductElementMatrixProvider class
DpgElementVectorProvider(DpgElementVectorProvider &&) noexcept=default
virtual ~DpgElementVectorProvider()=default
DpgElementVectorProvider(const DpgElementVectorProvider &)=delete
standard constructors
Class providing element matrices associated with bilinear forms between cartesian/product spaces.
typename SubElementMatrixProvider< SCALAR >::ElemMat ElemMat
Class providing element vectors associated with linear forms on cartesian/product spaces.
typename SubElementVectorProvider< SCALAR >::ElemVec ElemVec
typename SubElementVectorProvider< SCALAR >::elem_vec_t elem_vec_t
internal type for element vectors
Contains functionality for the implementation of DPG methods.
DpgElementVectorProvider(PTR1 eLoadVectorProvider, PTR2 eStiffnessProvider, PTR2 gramianProvider) -> DpgElementVectorProvider< typename PTR1::element_type::SCALAR >