DFT-EFE
 
Loading...
Searching...
No Matches
dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim > Class Template Reference

A derived class of linearAlgebra::OperatorContext to encapsulate the action of a discrete operator on vectors, matrices, etc. for enriched basis. More...

#include <OrthoEFEOverlapOperatorContext.h>

Inheritance diagram for dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >:
Collaboration diagram for dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >:

Public Types

using ValueType = linearAlgebra::blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand >
 define ValueType as the superior (bigger set) of the ValueTypeOperator and ValueTypeOperand (e.g., between double and complex<double>, complex<double> is the bigger set) More...
 
using Storage = dftefe::utils::MemoryStorage< ValueTypeOperator, memorySpace >
 

Public Member Functions

 OrthoEFEOverlapOperatorContext (const FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpace, dim > &feBasisManager, const FEBasisDataStorage< ValueTypeOperator, memorySpace > &classicalBlockBasisDataStorage, const FEBasisDataStorage< ValueTypeOperator, memorySpace > &enrichmentBlockEnrichmentBasisDataStorage, const FEBasisDataStorage< ValueTypeOperator, memorySpace > &enrichmentBlockClassicalBasisDataStorage, const size_type maxCellTimesNumVecs, const bool calculateWings=true)
 Constructor where the classical dofs have a different quadrature rule than that of the enrichment dofs. This can happen when the classical dofs have a different quadrature than that of the enrichment dofs. For example one can have Adaptive quadrature for the enrichment functions and GLL for the classical dofs. More...
 
 OrthoEFEOverlapOperatorContext (const FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpace, dim > &feBasisManager, const FEBasisDataStorage< ValueTypeOperator, memorySpace > &classicalBlockBasisDataStorage, const FEBasisDataStorage< ValueTypeOperator, memorySpace > &enrichmentBlockBasisDataStorage, const size_type maxCellTimesNumVecs, const bool calculateWings=true)
 Constructor where the classical dofs have a different quadrature rule than that of the enrichment dofs. This can happen when the classical dofs have a different quadrature than that of the enrichment dofs. For example one can have Adaptive quadrature for the enrichment functions and GLL for the classical dofs. More...
 
 OrthoEFEOverlapOperatorContext (const FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpace, dim > &feBasisManager, const FEBasisDataStorage< ValueTypeOperator, memorySpace > &classicalBlockGLLBasisDataStorage, const FEBasisDataStorage< ValueTypeOperator, memorySpace > &enrichmentBlockBasisDataStorage, std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > linAlgOpContext)
 Constructor where the classical dofs have a different quadrature rule than that of the enrichment dofs. This can happen when the classical dofs have a different quadrature than that of the enrichment dofs. For example one can have Adaptive quadrature for the enrichment functions and GLL for the classical dofs. More...
 
 OrthoEFEOverlapOperatorContext (const FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpace, dim > &feBasisManager, const FEBasisDataStorage< ValueTypeOperator, memorySpace > &classicalBlockGLLBasisDataStorage, const FEBasisDataStorage< ValueTypeOperator, memorySpace > &enrichmentBlockEnrichmentBasisDataStorage, const FEBasisDataStorage< ValueTypeOperator, memorySpace > &enrichmentBlockClassicalBasisDataStorage, std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > linAlgOpContext)
 Constructor where the classical dofs have a different quadrature rule than that of the enrichment dofs. This can happen when the classical dofs have a different quadrature than that of the enrichment dofs. For example one can have Adaptive quadrature for the enrichment functions and GLL for the classical dofs. More...
 
void apply (linearAlgebra::MultiVector< ValueTypeOperand, memorySpace > &X, linearAlgebra::MultiVector< ValueType, memorySpace > &Y) const override
 Apply AX = B where A is the discretized matrix, X is the operand and B is the result. More...
 
Storage getBasisOverlap (const size_type cellId, const size_type basisId1, const size_type basisId2) const
 
Storage getBasisOverlapInCell (const size_type cellId) const
 
const StoragegetBasisOverlapInAllCells () const
 

Private Attributes

const FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpace, dim > * d_feBasisManager
 
std::shared_ptr< Storaged_basisOverlap
 
std::vector< size_typed_cellStartIdsBasisOverlap
 
std::vector< size_typed_dofsInCell
 
const size_type d_maxCellTimesNumVecs
 
bool d_isMassLumping
 
std::shared_ptr< linearAlgebra::Vector< ValueTypeOperator, memorySpace > > d_diagonal
 
std::shared_ptr< utils::MemoryStorage< ValueTypeOperator, memorySpace > > d_basisOverlapEnrichmentBlock
 
const EFEBasisDofHandler< ValueTypeOperand, ValueTypeOperator, memorySpace, dim > * d_efebasisDofHandler
 
size_type d_nglobalEnrichmentIds
 

Detailed Description

template<typename ValueTypeOperator, typename ValueTypeOperand, utils::MemorySpace memorySpace, size_type dim>
class dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >

A derived class of linearAlgebra::OperatorContext to encapsulate the action of a discrete operator on vectors, matrices, etc. for enriched basis.

Template Parameters
ValueTypeOperatorThe datatype (float, double, complex<double>, etc.) for the underlying operator e.g. the \(\integral_{\omega} N_i^E(x) N_j^E(x) dx\) in this case where E is the enrichment functions.
ValueTypeOperandThe datatype (float, double, complex<double>, etc.) of the vector, matrices, etc. on which the operator will act.
memorySpaceThe memory sapce (HOST, DEVICE, HOST_PINNED, etc.) in which the data of the operator and its operands reside.

Member Typedef Documentation

◆ Storage

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
using dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::Storage = dftefe::utils::MemoryStorage<ValueTypeOperator, memorySpace>

◆ ValueType

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
using dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::ValueType = linearAlgebra::blasLapack::scalar_type<ValueTypeOperator, ValueTypeOperand>

define ValueType as the superior (bigger set) of the ValueTypeOperator and ValueTypeOperand (e.g., between double and complex<double>, complex<double> is the bigger set)

Constructor & Destructor Documentation

◆ OrthoEFEOverlapOperatorContext() [1/4]

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::OrthoEFEOverlapOperatorContext ( const FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpace, dim > &  feBasisManager,
const FEBasisDataStorage< ValueTypeOperator, memorySpace > &  classicalBlockBasisDataStorage,
const FEBasisDataStorage< ValueTypeOperator, memorySpace > &  enrichmentBlockEnrichmentBasisDataStorage,
const FEBasisDataStorage< ValueTypeOperator, memorySpace > &  enrichmentBlockClassicalBasisDataStorage,
const size_type  maxCellTimesNumVecs,
const bool  calculateWings = true 
)

Constructor where the classical dofs have a different quadrature rule than that of the enrichment dofs. This can happen when the classical dofs have a different quadrature than that of the enrichment dofs. For example one can have Adaptive quadrature for the enrichment functions and GLL for the classical dofs.

Template Parameters
feBasisManagerFEBasisManager object for getting the processor local to cell mapping of the distributed vector
cfeBasisDataStorageClassical FEBasisDataStorage object for getting the basisvalues of the classical dofs
efeBasisDataStorageEnrichment FEBasisDataStorage object for getting the basisvalues of the enrichment dofs
constraintsXConstraints for X
constraintsYConstraints for Y
maxCellTimesNumVecscell times number of vectors
Here is the call graph for this function:

◆ OrthoEFEOverlapOperatorContext() [2/4]

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::OrthoEFEOverlapOperatorContext ( const FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpace, dim > &  feBasisManager,
const FEBasisDataStorage< ValueTypeOperator, memorySpace > &  classicalBlockBasisDataStorage,
const FEBasisDataStorage< ValueTypeOperator, memorySpace > &  enrichmentBlockBasisDataStorage,
const size_type  maxCellTimesNumVecs,
const bool  calculateWings = true 
)

Constructor where the classical dofs have a different quadrature rule than that of the enrichment dofs. This can happen when the classical dofs have a different quadrature than that of the enrichment dofs. For example one can have Adaptive quadrature for the enrichment functions and GLL for the classical dofs.

Template Parameters
feBasisManagerFEBasisManager object for getting the processor local to cell mapping of the distributed vector
cfeBasisDataStorageClassical FEBasisDataStorage object for getting the basisvalues of the classical dofs
efeBasisDataStorageEnrichment FEBasisDataStorage object for getting the basisvalues of the enrichment dofs
constraintsXConstraints for X
constraintsYConstraints for Y
maxCellTimesNumVecscell times number of vectors
Here is the call graph for this function:

◆ OrthoEFEOverlapOperatorContext() [3/4]

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::OrthoEFEOverlapOperatorContext ( const FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpace, dim > &  feBasisManager,
const FEBasisDataStorage< ValueTypeOperator, memorySpace > &  classicalBlockGLLBasisDataStorage,
const FEBasisDataStorage< ValueTypeOperator, memorySpace > &  enrichmentBlockBasisDataStorage,
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > >  linAlgOpContext 
)

Constructor where the classical dofs have a different quadrature rule than that of the enrichment dofs. This can happen when the classical dofs have a different quadrature than that of the enrichment dofs. For example one can have Adaptive quadrature for the enrichment functions and GLL for the classical dofs.

Template Parameters
feBasisManagerFEBasisManager object for getting the processor local to cell mapping of the distributed vector
cfeBasisDataStorageClassical FEBasisDataStorage object for getting the basisvalues of the classical dofs
efeBasisDataStorageEnrichment FEBasisDataStorage object for getting the basisvalues of the enrichment dofs
constraintsXConstraints for X
constraintsYConstraints for Y
maxCellTimesNumVecscell times number of vectors
Here is the call graph for this function:

◆ OrthoEFEOverlapOperatorContext() [4/4]

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::OrthoEFEOverlapOperatorContext ( const FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpace, dim > &  feBasisManager,
const FEBasisDataStorage< ValueTypeOperator, memorySpace > &  classicalBlockGLLBasisDataStorage,
const FEBasisDataStorage< ValueTypeOperator, memorySpace > &  enrichmentBlockEnrichmentBasisDataStorage,
const FEBasisDataStorage< ValueTypeOperator, memorySpace > &  enrichmentBlockClassicalBasisDataStorage,
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > >  linAlgOpContext 
)

Constructor where the classical dofs have a different quadrature rule than that of the enrichment dofs. This can happen when the classical dofs have a different quadrature than that of the enrichment dofs. For example one can have Adaptive quadrature for the enrichment functions and GLL for the classical dofs.

Template Parameters
feBasisManagerFEBasisManager object for getting the processor local to cell mapping of the distributed vector
cfeBasisDataStorageClassical FEBasisDataStorage object for getting the basisvalues of the classical dofs
efeBasisDataStorageEnrichment FEBasisDataStorage object for getting the basisvalues of the enrichment dofs
constraintsXConstraints for X
constraintsYConstraints for Y
maxCellTimesNumVecscell times number of vectors
Here is the call graph for this function:

Member Function Documentation

◆ apply()

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
void dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::apply ( linearAlgebra::MultiVector< ValueTypeOperand, memorySpace > &  X,
linearAlgebra::MultiVector< ValueType, memorySpace > &  Y 
) const
override

Apply AX = B where A is the discretized matrix, X is the operand and B is the result.

Here is the call graph for this function:

◆ getBasisOverlap()

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
utils::MemoryStorage< ValueTypeOperator, memorySpace > dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::getBasisOverlap ( const size_type  cellId,
const size_type  basisId1,
const size_type  basisId2 
) const
Here is the call graph for this function:

◆ getBasisOverlapInAllCells()

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
const utils::MemoryStorage< ValueTypeOperator, memorySpace > & dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::getBasisOverlapInAllCells

◆ getBasisOverlapInCell()

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
utils::MemoryStorage< ValueTypeOperator, memorySpace > dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::getBasisOverlapInCell ( const size_type  cellId) const
Here is the call graph for this function:

Member Data Documentation

◆ d_basisOverlap

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
std::shared_ptr<Storage> dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::d_basisOverlap
private

◆ d_basisOverlapEnrichmentBlock

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
std::shared_ptr<utils::MemoryStorage<ValueTypeOperator, memorySpace> > dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::d_basisOverlapEnrichmentBlock
private

◆ d_cellStartIdsBasisOverlap

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
std::vector<size_type> dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::d_cellStartIdsBasisOverlap
private

◆ d_diagonal

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
std::shared_ptr<linearAlgebra::Vector<ValueTypeOperator, memorySpace> > dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::d_diagonal
private

◆ d_dofsInCell

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
std::vector<size_type> dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::d_dofsInCell
private

◆ d_efebasisDofHandler

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
const EFEBasisDofHandler<ValueTypeOperand, ValueTypeOperator, memorySpace, dim>* dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::d_efebasisDofHandler
private

◆ d_feBasisManager

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
const FEBasisManager<ValueTypeOperand, ValueTypeOperator, memorySpace, dim>* dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::d_feBasisManager
private

◆ d_isMassLumping

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
bool dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::d_isMassLumping
private

◆ d_maxCellTimesNumVecs

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
const size_type dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::d_maxCellTimesNumVecs
private

◆ d_nglobalEnrichmentIds

template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim>
size_type dftefe::basis::OrthoEFEOverlapOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace, dim >::d_nglobalEnrichmentIds
private

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