1#ifndef PROJECTS_DPG_DPG_ELEMENT_MATRIX_PROVIDER
2#define PROJECTS_DPG_DPG_ELEMENT_MATRIX_PROVIDER
12#include <lf/mesh/mesh.h>
15#include "product_element_matrix_provider.h"
51template <
typename SCALAR>
74 extendedStiffnessMatrixProvider,
77 std::move(extendedStiffnessMatrixProvider)),
101 std::shared_ptr<ProductElementMatrixProvider<SCALAR>>
114template <
typename SCALAR>
118 LF_ASSERT_MSG(extendedStiffnessMatrixProvider_ !=
nullptr &&
119 gramianProvider_ !=
nullptr,
120 "nullptr error for some provider");
122 LF_ASSERT_MSG(gramianProvider_->isActive(cell) &&
123 extendedStiffnessMatrixProvider_->isActive(cell),
124 "Eval method called on inactive cell. " << cell);
127 ElemMat extendedStiffnessMatrix =
128 extendedStiffnessMatrixProvider_->Eval(cell);
129 ElemMat gramian = gramianProvider_->Eval(cell);
132 LF_ASSERT_MSG(gramian.rows() == gramian.cols(),
133 "non quadratic gramian of size ("
134 << gramian.rows() <<
", " << gramian.cols() <<
") on cell "
137 extendedStiffnessMatrix.rows() == gramian.cols(),
138 "size missmatch between gramian & extended Stiffness matrix on cell "
142 return extendedStiffnessMatrix.transpose() *
143 gramian.ldlt().solve(extendedStiffnessMatrix);
Interface class representing a topological entity in a cellular complex
Class to evaluate element matrices for DPG methods.
std::shared_ptr< ProductElementMatrixProvider< SCALAR > > extendedStiffnessMatrixProvider_
DpgElementMatrixProvider(const DpgElementMatrixProvider &)=delete
standard constructors
virtual bool isActive(const lf::mesh::Entity &)
All cells are considered active in the default implementation.
DpgElementMatrixProvider(DpgElementMatrixProvider &&) noexcept=default
ElemMat Eval(const lf::mesh::Entity &cell)
main routine for the computation of DPG element matrices
typename ProductElementMatrixProvider< SCALAR >::elem_mat_t elem_mat_t
internal type for element matrices
std::shared_ptr< ProductElementMatrixProvider< SCALAR > > gramianProvider_
typename ProductElementMatrixProvider< SCALAR >::ElemMat ElemMat
virtual ~DpgElementMatrixProvider()=default
Class providing element matrices associated with bilinear forms between cartesian/product spaces.
typename SubElementMatrixProvider< SCALAR >::ElemMat ElemMat
typename SubElementMatrixProvider< SCALAR >::elem_mat_t elem_mat_t
internal type for element matrices
Contains functionality for the implementation of DPG methods.
DpgElementMatrixProvider(PTR stiffness_provider, PTR gramianProvider) -> DpgElementMatrixProvider< typename PTR::element_type::SCALAR >