LehrFEM++ 1.0.0
A simple Finite Element Library for teaching
Public Types | Public Member Functions | Private Attributes | List of all members
projects::dpg::ProductElementMatrixProvider< SCALAR > Class Template Reference

Class providing element matrices associated with bilinear forms between cartesian/product spaces. More...

#include </home/nico/bildung/SemVI/thesis/lehrfempp/projects/dpg/product_element_matrix_provider.h>

Public Types

using elem_mat_t = typename SubElementMatrixProvider< SCALAR >::elem_mat_t
 internal type for element matrices More...
 
using ElemMat = typename SubElementMatrixProvider< SCALAR >::ElemMat
 

Public Member Functions

 ProductElementMatrixProvider (const ProductElementMatrixProvider &)=delete
 standard constructors More...
 
 ProductElementMatrixProvider (ProductElementMatrixProvider &&) noexcept=default
 
ProductElementMatrixProvideroperator= (const ProductElementMatrixProvider &)=delete
 
ProductElementMatrixProvideroperator= (ProductElementMatrixProvider &&)=delete
 
 ProductElementMatrixProvider (std::shared_ptr< ProductUniformFESpace< SCALAR > > fe_space_trial, std::shared_ptr< ProductUniformFESpace< SCALAR > > fe_space_test, std::vector< std::shared_ptr< SubElementMatrixProvider< SCALAR > > > subproviders)
 main constructor More...
 
virtual bool isActive (const lf::mesh::Entity &)
 All cells are considered active in the default implementation. More...
 
ElemMat Eval (const lf::mesh::Entity &cell)
 main routine for the computation of element matrices More...
 
virtual ~ProductElementMatrixProvider ()=default
 virtual destructor More...
 

Private Attributes

std::shared_ptr< ProductUniformFESpace< SCALAR > > fe_space_trial_
 
std::shared_ptr< ProductUniformFESpace< SCALAR > > fe_space_test_
 
std::vector< std::shared_ptr< SubElementMatrixProvider< SCALAR > > > subproviders_
 

Detailed Description

template<typename SCALAR>
class projects::dpg::ProductElementMatrixProvider< SCALAR >

Class providing element matrices associated with bilinear forms between cartesian/product spaces.

Template Parameters
SCALARtype for the entries of the element matrices. Ususally 'double'
Note
This interface class complies with the type requirements for the template argument ENTITY_MATRIX_PROVIDER of the function lf::assemble::AssembleMatrixLocally().

This class provides element matrices associated to bilinear forms \( b: U \times V \rightarrow \mathbb{R} \) between two product spaces (c.f. ProductUniformFEDofHandler, ProductUniformFESpace)

\[ U = U_0 \times U_1 \times \dots \times U_{n-1} \]

\[ V = V_0 \times V_1 \times \dots \times V_{m-1} \]

that have the following structure

\[ b((u_1, \dots, u_{n-1}),(v_1, \dots v_{m-1})) = \sum_{k} b_k(u_{i_k},v_{j_k}) \]

with

\[ b_k : U_{i_k} \times V_{j_k} \rightarrow \mathbb{R} \]

The evaluation of element matrices for such "building block" bilinear forms \( b_k \) is preformed by means of the SubElementMatrixProvider interface. This class takes a vector of such SubElementMatrixProviders in its constructors and builds the element matrix for the bilinear form \( b\) by stacking together the sub matrices (using the rules of local dof ordering specified in ProductUniformFEDofHandler).

Definition at line 60 of file product_element_matrix_provider.h.

Member Typedef Documentation

◆ elem_mat_t

template<typename SCALAR >
using projects::dpg::ProductElementMatrixProvider< SCALAR >::elem_mat_t = typename SubElementMatrixProvider<SCALAR>::elem_mat_t

internal type for element matrices

Definition at line 63 of file product_element_matrix_provider.h.

◆ ElemMat

template<typename SCALAR >
using projects::dpg::ProductElementMatrixProvider< SCALAR >::ElemMat = typename SubElementMatrixProvider<SCALAR>::ElemMat

Return type of the Eval() method

Definition at line 65 of file product_element_matrix_provider.h.

Constructor & Destructor Documentation

◆ ProductElementMatrixProvider() [1/3]

template<typename SCALAR >
projects::dpg::ProductElementMatrixProvider< SCALAR >::ProductElementMatrixProvider ( const ProductElementMatrixProvider< SCALAR > &  )
delete

standard constructors

◆ ProductElementMatrixProvider() [2/3]

template<typename SCALAR >
projects::dpg::ProductElementMatrixProvider< SCALAR >::ProductElementMatrixProvider ( ProductElementMatrixProvider< SCALAR > &&  )
defaultnoexcept

◆ ProductElementMatrixProvider() [3/3]

template<typename SCALAR >
projects::dpg::ProductElementMatrixProvider< SCALAR >::ProductElementMatrixProvider ( std::shared_ptr< ProductUniformFESpace< SCALAR > >  fe_space_trial,
std::shared_ptr< ProductUniformFESpace< SCALAR > >  fe_space_test,
std::vector< std::shared_ptr< SubElementMatrixProvider< SCALAR > > >  subproviders 
)
inline

main constructor

Parameters
fe_space_trialthe product trial finite element space \( U \) of the bilinar form
fe_space_testthe product test finite element space \( V \) of the bilinear form
subprovidersa vector of SubElementMatrixProviders, that evaluate the element matrices associated to the "building block" bilinear forms \( b_K \)

Definition at line 86 of file product_element_matrix_provider.h.

◆ ~ProductElementMatrixProvider()

template<typename SCALAR >
virtual projects::dpg::ProductElementMatrixProvider< SCALAR >::~ProductElementMatrixProvider ( )
virtualdefault

virtual destructor

Member Function Documentation

◆ Eval()

template<typename SCALAR >
ProductElementMatrixProvider< SCALAR >::ElemMat projects::dpg::ProductElementMatrixProvider< SCALAR >::Eval ( const lf::mesh::Entity cell)

main routine for the computation of element matrices

Parameters
cellrefernce to the cell for which the element matrix should be computed
Returns
a small dense, containing the element matrix.

Definition at line 133 of file product_element_matrix_provider.h.

◆ isActive()

template<typename SCALAR >
virtual bool projects::dpg::ProductElementMatrixProvider< SCALAR >::isActive ( const lf::mesh::Entity )
inlinevirtual

All cells are considered active in the default implementation.

This method is meant to be overloaded if assembly should be restricted to a subset of cells.

Definition at line 101 of file product_element_matrix_provider.h.

◆ operator=() [1/2]

template<typename SCALAR >
ProductElementMatrixProvider & projects::dpg::ProductElementMatrixProvider< SCALAR >::operator= ( const ProductElementMatrixProvider< SCALAR > &  )
delete

◆ operator=() [2/2]

template<typename SCALAR >
ProductElementMatrixProvider & projects::dpg::ProductElementMatrixProvider< SCALAR >::operator= ( ProductElementMatrixProvider< SCALAR > &&  )
delete

Member Data Documentation

◆ fe_space_test_

template<typename SCALAR >
std::shared_ptr<ProductUniformFESpace<SCALAR> > projects::dpg::ProductElementMatrixProvider< SCALAR >::fe_space_test_
private

shared pointer to the test (product) finite element space

Definition at line 118 of file product_element_matrix_provider.h.

◆ fe_space_trial_

template<typename SCALAR >
std::shared_ptr<ProductUniformFESpace<SCALAR> > projects::dpg::ProductElementMatrixProvider< SCALAR >::fe_space_trial_
private

shared pointer to the trial (product) finite element space

Definition at line 116 of file product_element_matrix_provider.h.

◆ subproviders_

template<typename SCALAR >
std::vector<std::shared_ptr<SubElementMatrixProvider<SCALAR> > > projects::dpg::ProductElementMatrixProvider< SCALAR >::subproviders_
private

vector of pointers to providers that provide "building block" element matrices

Definition at line 121 of file product_element_matrix_provider.h.


The documentation for this class was generated from the following file: