|
template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim> |
void | computeBasisOverlapMatrix (const FEBasisDataStorage< ValueTypeOperator, memorySpace > &cfeBasisDataStorage, const FEBasisDataStorage< ValueTypeOperator, memorySpace > &efeBasisDataStorage, std::shared_ptr< utils::MemoryStorage< ValueTypeOperator, memorySpace > > &basisOverlap, std::vector< size_type > &cellStartIdsBasisOverlap, std::vector< size_type > &dofsInCellVec, bool calculateWings=true) |
|
template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace, size_type dim> |
void | computeBasisOverlapMatrix (const FEBasisDataStorage< ValueTypeOperator, memorySpace > &classicalBlockBasisDataStorage, const FEBasisDataStorage< ValueTypeOperator, memorySpace > &enrichmentBlockEnrichmentBasisDataStorage, const FEBasisDataStorage< ValueTypeOperator, memorySpace > &enrichmentBlockClassicalBasisDataStorage, std::shared_ptr< utils::MemoryStorage< ValueTypeOperator, memorySpace > > &basisOverlap, std::vector< size_type > &cellStartIdsBasisOverlap, std::vector< size_type > &dofsInCellVec, linearAlgebra::LinAlgOpContext< memorySpace > &linAlgOpContext, bool calculateWings=true) |
|
template<utils::MemorySpace memorySpace> |
void | storeSizes (utils::MemoryStorage< size_type, memorySpace > &mSizes, utils::MemoryStorage< size_type, memorySpace > &nSizes, utils::MemoryStorage< size_type, memorySpace > &kSizes, utils::MemoryStorage< size_type, memorySpace > &ldaSizes, utils::MemoryStorage< size_type, memorySpace > &ldbSizes, utils::MemoryStorage< size_type, memorySpace > &ldcSizes, utils::MemoryStorage< size_type, memorySpace > &strideA, utils::MemoryStorage< size_type, memorySpace > &strideB, utils::MemoryStorage< size_type, memorySpace > &strideC, const std::vector< size_type > &cellsInBlockNumDoFs, const size_type numVecs) |
|
template<typename ValueTypeOperator , typename ValueTypeOperand , utils::MemorySpace memorySpace> |
void | computeAxCellWiseLocal (const utils::MemoryStorage< ValueTypeOperator, memorySpace > &basisOverlapInAllCells, const ValueTypeOperand *x, linearAlgebra::blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand > *y, const size_type numVecs, const size_type numLocallyOwnedCells, const std::vector< size_type > &numCellDofs, const size_type *cellLocalIdsStartPtrX, const size_type *cellLocalIdsStartPtrY, const size_type cellBlockSize, linearAlgebra::LinAlgOpContext< memorySpace > &linAlgOpContext) |
|
void dftefe::basis::OrthoEFEOverlapOperatorContextInternal::computeBasisOverlapMatrix |
( |
const FEBasisDataStorage< ValueTypeOperator, memorySpace > & |
classicalBlockBasisDataStorage, |
|
|
const FEBasisDataStorage< ValueTypeOperator, memorySpace > & |
enrichmentBlockEnrichmentBasisDataStorage, |
|
|
const FEBasisDataStorage< ValueTypeOperator, memorySpace > & |
enrichmentBlockClassicalBasisDataStorage, |
|
|
std::shared_ptr< utils::MemoryStorage< ValueTypeOperator, memorySpace > > & |
basisOverlap, |
|
|
std::vector< size_type > & |
cellStartIdsBasisOverlap, |
|
|
std::vector< size_type > & |
dofsInCellVec, |
|
|
linearAlgebra::LinAlgOpContext< memorySpace > & |
linAlgOpContext, |
|
|
bool |
calculateWings = true |
|
) |
| |
Ni_pristine*Ni_pristine at quadpoints for (unsigned int qPoint = 0; qPoint < nQuadPointInCellEnrichmentBlockEnrichment; qPoint++) { basisOverlapTmpIter += (cumulativeEnrichmentBlockEnrichmentDofQuadPoints
- nQuadPointInCellEnrichmentBlockEnrichment * iNode + qPoint) * (cumulativeEnrichmentBlockEnrichmentDofQuadPoints
- nQuadPointInCellEnrichmentBlockEnrichment * jNode + qPoint) * cellJxWValuesEnrichmentBlockEnrichment[qPoint]; }
ValueTypeOperator NpiNpj = (ValueTypeOperator)0,
ciNciNpj = (ValueTypeOperator)0,
NpicjNcj = (ValueTypeOperator)0,
ciNcicjNcj = (ValueTypeOperator)0;
Ni_pristine*Ni_pristine at quadpoints for (unsigned int qPoint = 0; qPoint < nQuadPointInCellEnrichmentBlockEnrichment; qPoint++) { NpiNpj += (enrichmentValuesVec.data() + (iNode - dofsPerCellCFE) * nQuadPointInCellEnrichmentBlockEnrichment + qPoint) * (enrichmentValuesVec.data() + (jNode - dofsPerCellCFE) * nQuadPointInCellEnrichmentBlockEnrichment + qPoint) * cellJxWValuesEnrichmentBlockEnrichment[qPoint]; } Ni_pristine* interpolated ci's in Ni_classicalQuadratureOfPristine at quadpoints for (unsigned int qPoint = 0; qPoint < nQuadPointInCellEnrichmentBlockEnrichment; qPoint++) { ciNciNpj += classicalComponentInQuadValuesEE [numEnrichmentIdsInCell * qPoint + (iNode - dofsPerCellCFE)] * (enrichmentValuesVec.data() + (jNode - dofsPerCellCFE) * nQuadPointInCellEnrichmentBlockEnrichment + qPoint) * cellJxWValuesEnrichmentBlockEnrichment[qPoint]; } Ni_pristine* interpolated ci's in Ni_classicalQuadratureOfPristine at quadpoints for (unsigned int qPoint = 0; qPoint < nQuadPointInCellEnrichmentBlockEnrichment; qPoint++) { NpicjNcj += (enrichmentValuesVec.data() + (iNode - dofsPerCellCFE) * nQuadPointInCellEnrichmentBlockEnrichment + qPoint) * classicalComponentInQuadValuesEE [numEnrichmentIdsInCell * qPoint + (jNode - dofsPerCellCFE)] * cellJxWValuesEnrichmentBlockEnrichment[qPoint]; } interpolated ci's in Ni_classicalQuadrature of Mc = d interpolated ci's in Ni_classicalQuadrature of Mc = d for (unsigned int qPoint = 0; qPoint < nQuadPointInCellEnrichmentBlockClassical; qPoint++) { ciNcicjNcj += classicalComponentInQuadValuesEC [numEnrichmentIdsInCell * qPoint + (iNode - dofsPerCellCFE)] * classicalComponentInQuadValuesEC [numEnrichmentIdsInCell * qPoint + (jNode - dofsPerCellCFE)] * cellJxWValuesEnrichmentBlockClassical[qPoint]; } *basisOverlapTmpIter += double b = NpiNpj - NpicjNcj - ciNciNpj + ciNcicjNcj;