20#ifndef DFTFE_ATOMICCENTEREDNONLOCALOPERATOR_H
21#define DFTFE_ATOMICCENTEREDNONLOCALOPERATOR_H
56 template <
typename ValueType, dftfe::utils::MemorySpace memorySpace>
66 std::shared_ptr<AtomCenteredSphericalFunctionContainer>
67 atomCenteredSphericalFunctionContainer,
68 const MPI_Comm &mpi_comm_parent,
69 const bool memOptMode =
false,
70 const bool computeSphericalFnTimesX =
true,
71 const bool useGlobalCMatrix =
false);
88 unsigned int waveFunctionBlockSize,
90 &sphericalFunctionKetTimesVectorParFlattened);
104 const bool updateSparsity,
105 const std::vector<double> &kPointWeights,
106 const std::vector<double> &kPointCoordinates,
115 const unsigned int quadratureIndex);
130 template <
typename ValueTypeSrc>
133 const bool updateSparsity,
134 const std::vector<double> &kPointWeights,
135 const std::vector<double> &kPointCoordinates,
144 const unsigned int quadratureIndex,
145 const std::shared_ptr<
147 nonLocalOperatorSrc);
148#if defined(DFTFE_WITH_DEVICE)
163 initialiseCellWaveFunctionPointers(
165 &cellWaveFunctionMatrix);
174 const std::vector<unsigned int> &
197 const unsigned int alpha)
const;
202 std::vector<unsigned int> &
205 std::vector<unsigned int> &
208 std::vector<unsigned int> &
211 const std::vector<ValueType> &
214 const std::vector<ValueType> &
217 const std::map<unsigned int, std::vector<unsigned int>> &
220 const std::vector<unsigned int> &
223 const std::vector<unsigned int> &
230 const std::vector<unsigned int> &
236 const std::map<unsigned int, std::vector<unsigned int>> &
242 const std::vector<unsigned int> &
245 const std::vector<unsigned int> &
252 const unsigned int atomId,
259 PconjtransposePmatrix);
281 & sphericalFunctionKetTimesVectorParFlattened,
282 const bool flagCopyResultsToMatrix =
true,
283 const unsigned int kPointIndex = 0);
291 &sphericalFunctionKetTimesVectorParFlattened,
305 & sphericalFunctionKetTimesVectorParFlattened,
306 const bool skipComm =
false);
316 const std::pair<unsigned int, unsigned int> cellRange);
353 const unsigned int kPointIndex,
357 & sphericalFunctionKetTimesVectorParFlattened,
358 const bool flagScaleInternalMatrix =
false);
377 const unsigned int kPointIndex,
381 &sphericalFunctionKetTimesVectorParFlattened,
393 const std::pair<unsigned int, unsigned int> cellRange);
407 std::vector<ValueType>
412 const std::pair<unsigned int, unsigned int> cellRange)
const;
423 std::vector<ValueType> & entriesPadded,
429 const std::vector<ValueType> &
431 const unsigned int iElemComp)
const;
435 const std::vector<ValueType> &
437 const unsigned int iElemComp)
const;
442 std::vector<dftfe::utils::MemoryStorage<ValueType, memorySpace>>> &
461 const unsigned int kPointIndex,
465 & sphericalFunctionKetTimesVectorParFlattened,
466 const bool flagScaleInternalMatrix =
false);
484 const unsigned int kPointIndex,
488 & sphericalFunctionKetTimesVectorParFlattened,
489 const bool flagScaleInternalMatrix =
false);
494 std::shared_ptr<dftfe::linearAlgebra::BLASWrapper<memorySpace>>
496 std::shared_ptr<AtomCenteredSphericalFunctionContainer>
511 std::vector<ValueType>
515 std::map<unsigned int, std::vector<unsigned int>>
528 std::map<unsigned int, std::vector<unsigned int>>
538 std::vector<distributedCPUVec<std::complex<double>>>
545 std::map<std::pair<unsigned int, unsigned int>,
unsigned int>
551 std::map<std::pair<unsigned int, unsigned int>,
unsigned int>
553 std::vector<std::vector<
554 std::vector<dftfe::utils::MemoryStorage<ValueType, memorySpace>>>>
596 const std::vector<double> &kPointCoordinates);
619 const unsigned int quadratureIndex);
621 template <
typename ValueTypeSrc>
624 const std::shared_ptr<
632 const unsigned int quadratureIndex);
634 template <
typename ValueTypeSrc>
637 const std::shared_ptr<
645 const unsigned int quadratureIndex);
652 std::vector<dftfe::global_size_type>
663 std::vector<dftfe::utils::MemoryStorage<ValueType, memorySpace>>>
669 std::vector<dftfe::utils::MemoryStorage<ValueType, memorySpace>>
695#if defined(DFTFE_WITH_DEVICE)
703 copyDistributedVectorToPaddedMemoryStorageVectorDevice(
705 &sphericalFunctionKetTimesVectorParFlattened,
717 copyPaddedMemoryStorageVectorToDistributeVectorDevice(
720 &sphericalFunctionKetTimesVectorParFlattened);
726 d_sphericalFnTimesWavefunctionMatrix;
727 ValueType **hostPointerCDagger, **hostPointerCDaggeOutTemp,
729 ValueType * d_wfcStartPointer;
730 ValueType **devicePointerCDagger, **devicePointerCDaggerOutTemp,
732 std::vector<unsigned int> d_nonlocalElemIdToLocalElemIdMap;
738 d_sphericalFnTimesVectorDevice;
740 std::vector<ValueType> d_cellHamiltonianMatrixNonLocalFlattenedConjugate;
742 d_cellHamiltonianMatrixNonLocalFlattenedConjugateDevice;
743 std::vector<ValueType> d_cellHamiltonianMatrixNonLocalFlattenedTranspose;
745 d_cellHamiltonianMatrixNonLocalFlattenedTransposeDevice;
747 d_cellHamMatrixTimesWaveMatrixNonLocalDevice;
749 d_sphericalFnTimesVectorAllCellsDevice;
750 std::vector<ValueType> d_sphericalFnTimesVectorAllCellsReduction;
752 d_sphericalFnTimesVectorAllCellsReductionDevice;
755 d_couplingMatrixTimesVectorDevice;
757 std::vector<unsigned int> d_sphericalFnIdsParallelNumberingMap;
758 std::vector<int> d_sphericalFnIdsPaddedParallelNumberingMap;
760 d_sphericalFnIdsParallelNumberingMapDevice;
762 d_sphericalFnIdsPaddedParallelNumberingMapDevice;
763 std::vector<int> d_indexMapFromPaddedNonLocalVecToParallelNonLocalVec;
765 d_indexMapFromPaddedNonLocalVecToParallelNonLocalVecDevice;
766 std::vector<unsigned int> d_cellNodeIdMapNonLocalToLocal;
769 d_cellNodeIdMapNonLocalToLocalDevice;
std::vector< unsigned int > d_mapAtomIdToSpeciesIndex
Definition AtomicCenteredNonLocalOperator.h:667
const std::map< unsigned int, std::vector< unsigned int > > & getAtomIdToNonTrivialSphericalFnCellStartIndex() const
Required in configurational forces. Cummulative sphercial Fn Id. The size is numCells in processor.
void initKpoints(const std::vector< double > &kPointWeights, const std::vector< double > &kPointCoordinates)
stores the d_kpointWeights, d_kpointCoordinates. Other data members regarding are computed from conta...
std::vector< ValueType > d_atomCenteredKpointIndexedSphericalFnQuadValues
Definition AtomicCenteredNonLocalOperator.h:509
std::vector< unsigned int > d_mapiAtomTosphFuncWaveStart
Definition AtomicCenteredNonLocalOperator.h:676
dftfe::utils::MemoryStorage< unsigned int, memorySpace > d_iElemNonLocalToElemIndexMap
Definition AtomicCenteredNonLocalOperator.h:574
AtomicCenteredNonLocalOperator(std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > BLASWrapperPtr, std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, memorySpace > > basisOperatorPtr, std::shared_ptr< AtomCenteredSphericalFunctionContainer > atomCenteredSphericalFunctionContainer, const MPI_Comm &mpi_comm_parent, const bool memOptMode=false, const bool computeSphericalFnTimesX=true, const bool useGlobalCMatrix=false)
unsigned int getGlobalDofAtomIdSphericalFnPair(const unsigned int atomId, const unsigned int alpha) const
void applyCconjtransOnX(const ValueType *X, const std::pair< unsigned int, unsigned int > cellRange)
computes the results of CconjtransX on the cells of interst specied by cellRange
void computeCMatrixEntries(std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > basisOperationsPtr, const unsigned int quadratureIndex)
computes the entries in C matrix for CPUs and GPUs. On GPUs the entries are copied to a flattened vec...
unsigned int d_sumNonTrivialSphericalFnOverAllCells
Definition AtomicCenteredNonLocalOperator.h:531
std::map< unsigned int, dftfe::utils::MemoryStorage< ValueType, dftfe::utils::MemorySpace::HOST > > d_sphericalFnTimesWavefunMatrix
Definition AtomicCenteredNonLocalOperator.h:651
dealii::IndexSet d_locallyOwnedAtomCenteredFnIdsCurrentProcess
Definition AtomicCenteredNonLocalOperator.h:549
unsigned int d_totalNonlocalElems
Definition AtomicCenteredNonLocalOperator.h:566
std::vector< dftfe::utils::MemoryStorage< ValueType, memorySpace > > d_dotProductAtomicWaveInputWaveTemp
Definition AtomicCenteredNonLocalOperator.h:670
bool d_useGlobalCMatrix
Definition AtomicCenteredNonLocalOperator.h:658
void applyVCconjtransOnXCellLevel(const dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &src, const unsigned int kPointIndex, const CouplingStructure couplingtype, const dftfe::utils::MemoryStorage< ValueType, memorySpace > &couplingMatrix, dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &sphericalFunctionKetTimesVectorParFlattened, const bool flagScaleInternalMatrix=false)
completes the VCconjX on nodal vector src. The src vector must have all ghost nodes and constraint no...
std::vector< double > d_kPointWeights
Definition AtomicCenteredNonLocalOperator.h:492
bool d_AllReduceCompleted
Definition AtomicCenteredNonLocalOperator.h:491
unsigned int d_totalAtomsInCurrentProc
Definition AtomicCenteredNonLocalOperator.h:563
const std::vector< ValueType > & getAtomCenteredKpointTimesSphericalFnTimesDistFromAtomQuadValues() const
const dftfe::utils::MemoryStorage< dftfe::global_size_type, memorySpace > & getFlattenedNonLocalCellDofIndexToProcessDofIndexMap() const
std::vector< unsigned int > & getAtomWiseNumberCellsInCompactSupport() const
void applyCVCconjtransOnX(const dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &src, const unsigned int kPointIndex, const CouplingStructure couplingtype, const dftfe::utils::MemoryStorage< ValueType, memorySpace > &couplingMatrix, dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &sphericalFunctionKetTimesVectorParFlattened, dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &dst)
completes the action of CVCconjtranspose on nodal vector src. The src vector must have all ghost node...
std::map< std::pair< unsigned int, unsigned int >, unsigned int > d_sphericalFunctionIdsNumberingMapCurrentProcess
Definition AtomicCenteredNonLocalOperator.h:546
const MPI_Comm d_mpi_communicator
Definition AtomicCenteredNonLocalOperator.h:557
void applyVOnCconjtransX(const CouplingStructure couplingtype, const dftfe::utils::MemoryStorage< ValueType, memorySpace > &couplingMatrix, dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &sphericalFunctionKetTimesVectorParFlattened, const bool flagCopyResultsToMatrix=true, const unsigned int kPointIndex=0)
compute the action of coupling matrix on sphericalFunctionKetTimesVectorParFlattened.
const std::vector< unsigned int > & getNonTrivialSphericalFnsCellStartIndex() const
std::vector< unsigned int > d_nonTrivialSphericalFnsCellStartIndex
Definition AtomicCenteredNonLocalOperator.h:523
std::vector< unsigned int > d_mapiAtomToDotProd
Definition AtomicCenteredNonLocalOperator.h:672
const unsigned int d_n_mpi_processes
Definition AtomicCenteredNonLocalOperator.h:559
dftfe::utils::MemoryStorage< dftfe::global_size_type, memorySpace > d_flattenedNonLocalCellDofIndexToProcessDofIndexMap
Definition AtomicCenteredNonLocalOperator.h:655
const ValueType * getCconjtansXLocalDataStructure(const unsigned int iAtom) const
Returns the pointer of CTX stored in HOST memory.
void copyPartitionerKPointsAndComputeCMatrixEntries(const bool updateSparsity, const std::vector< double > &kPointWeights, const std::vector< double > &kPointCoordinates, std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > basisOperationsPtr, std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > BLASWrapperHostPtr, const unsigned int quadratureIndex, const std::shared_ptr< AtomicCenteredNonLocalOperator< ValueTypeSrc, memorySpace > > nonLocalOperatorSrc)
calls internal function: initialisePartitioner, initialiseKpoint and computeCMatrixEntries
unsigned int getTotalNonLocalElementsInCurrentProcessor() const
void applyCOnVCconjtransX(ValueType *Xout, const std::pair< unsigned int, unsigned int > cellRange)
adds the result of CVCtX onto Xout for both CPU and GPU calls
unsigned int getTotalNonLocalEntriesCurrentProcessor() const
void paddingCouplingMatrix(const std::vector< ValueType > &entries, std::vector< ValueType > &entriesPadded, const CouplingStructure couplingtype)
Called only for GPU runs where the coupling matrix has to be padded.
unsigned int d_kPointIndex
Definition AtomicCenteredNonLocalOperator.h:579
dealii::IndexSet d_ghostSphericalFunctionIdsCurrentProcess
Definition AtomicCenteredNonLocalOperator.h:561
std::vector< std::vector< std::vector< ValueType > > > d_CMatrixEntriesConjugate
Definition AtomicCenteredNonLocalOperator.h:583
std::vector< unsigned int > d_OwnedAtomIdsInCurrentProcessor
Definition AtomicCenteredNonLocalOperator.h:548
const unsigned int getTotalNonTrivialSphericalFnsOverAllCells() const
unsigned int d_totalLocallyOwnedNodes
Definition AtomicCenteredNonLocalOperator.h:674
unsigned int d_numberWaveFunctions
Definition AtomicCenteredNonLocalOperator.h:578
std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, memorySpace > > d_basisOperatorPtr
Definition AtomicCenteredNonLocalOperator.h:505
std::vector< std::vector< std::vector< ValueType > > > d_CMatrixEntriesTranspose
Definition AtomicCenteredNonLocalOperator.h:584
unsigned int getLocalIdOfDistributedVec(const unsigned int globalId) const
std::vector< unsigned int > & getAtomWiseNumberCellsAccumulated() const
unsigned int getMaxSingleAtomEntries() const
std::vector< distributedCPUVec< double > > d_SphericalFunctionKetTimesVectorPar
Definition AtomicCenteredNonLocalOperator.h:542
std::map< std::pair< unsigned int, unsigned int >, unsigned int > d_AtomCenteredFnIdsNumberingMapCurrentProcess
Definition AtomicCenteredNonLocalOperator.h:552
const std::vector< unsigned int > & getSphericalFnTimesVectorFlattenedVectorLocalIds() const
Returns the Flattened vector of sphericalFunctionIDs in order of atomIDs of atoms in processor.
bool d_computeSphericalFnTimesX
Definition AtomicCenteredNonLocalOperator.h:657
bool atomPresentInCellRange(const std::pair< unsigned int, unsigned int > cellRange) const
void initialiseOperatorActionOnX(unsigned int kPointIndex)
Resizes various internal data members and selects the kpoint of interest.
const unsigned int d_this_mpi_process
Definition AtomicCenteredNonLocalOperator.h:558
const std::vector< unsigned int > & getNonTrivialSphericalFnsPerCell() const
const std::map< unsigned int, std::vector< unsigned int > > & getCellIdToAtomIdsLocalCompactSupportMap() const
std::vector< std::vector< dftfe::utils::MemoryStorage< ValueType, memorySpace > > > d_CMatrixGlobal
Definition AtomicCenteredNonLocalOperator.h:664
const std::vector< ValueType > & getAtomCenteredKpointIndexedSphericalFnQuadValues() const
unsigned int getTotalAtomInCurrentProcessor() const
void copyGlobalCMatrix(const std::shared_ptr< AtomicCenteredNonLocalOperator< ValueTypeSrc, memorySpace > > nonLocalOperatorSrc, std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > basisOperationsPtr, const unsigned int quadratureIndex)
void computeCconjtransCMatrix(const unsigned int atomId, std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > BLASWrapperPtr, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &Dinverse, dftfe::utils::MemoryStorage< ValueType, dftfe::utils::MemorySpace::HOST > PconjtransposePmatrix)
Computes C^{T}D^{-1}C at the global level for atomId. This is required in PAW.
const std::vector< ValueType > & getCmatrixEntriesConjugate(const unsigned int chargeId, const unsigned int iElemComp) const
Returns C matrix entries for chargeId and it compact support element Id.
void applyAllReduceOnCconjtransX(dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &sphericalFunctionKetTimesVectorParFlattened, const bool skipComm=false)
copies the results from internal member to sphericalFunctionKetTimesVectorParFlattened,...
void applyCOnVCconjtransX(dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &Xout)
adds the result of CVCtX onto Xout for both CPU and GPU calls
std::map< unsigned int, std::vector< unsigned int > > d_atomIdToNonTrivialSphericalFnCellStartIndex
map from local nonlocal atomid to vector over cells
Definition AtomicCenteredNonLocalOperator.h:529
std::vector< unsigned int > d_nonTrivialSphericalFnPerCell
vector of size num physical cells
Definition AtomicCenteredNonLocalOperator.h:519
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > d_BLASWrapperPtr
Definition AtomicCenteredNonLocalOperator.h:495
void copyBackFromDistributedVectorToLocalDataStructure(dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &sphericalFunctionKetTimesVectorParFlattened, const dftfe::utils::MemoryStorage< double, memorySpace > &scalingVector)
After AllReduce function is called this will copy to the nonLocalOperatorClassDatastructure.
std::shared_ptr< AtomCenteredSphericalFunctionContainer > d_atomCenteredSphericalFunctionContainer
Definition AtomicCenteredNonLocalOperator.h:497
void initialisePartitioner()
creates the partitioner for the distributed vector based on sparsity patten from sphericalFn containe...
std::vector< ValueType > getCmatrixEntries(int kPointIndex, unsigned int atomId, int iElem) const
std::vector< unsigned int > d_nonlocalElemIdToCellIdVector
Definition AtomicCenteredNonLocalOperator.h:656
std::map< unsigned int, std::vector< unsigned int > > d_listOfiAtomInSpecies
Definition AtomicCenteredNonLocalOperator.h:677
const std::vector< unsigned int > & getNonlocalElementToCellIdVector() const
bool atomSupportInElement(unsigned int iElem) const
std::map< unsigned int, std::vector< unsigned int > > d_cellIdToAtomIdsLocalCompactSupportMap
map from cell number to set of non local atom ids (local numbering)
Definition AtomicCenteredNonLocalOperator.h:516
std::vector< std::vector< std::vector< dftfe::utils::MemoryStorage< ValueType, memorySpace > > > > d_CMatrixEntries
Definition AtomicCenteredNonLocalOperator.h:555
void applyCconjtransOnX(const dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &X)
computes the results of CconjtransX on nodal X vector
const std::vector< unsigned int > & getNonTrivialAllCellsSphericalFnAlphaToElemIdMap() const
std::vector< unsigned int > d_numberCellsForEachAtom
Definition AtomicCenteredNonLocalOperator.h:501
bool d_isMallocCalled
Definition AtomicCenteredNonLocalOperator.h:581
std::vector< unsigned int > d_atomStartIndexGlobal
Definition AtomicCenteredNonLocalOperator.h:659
const std::vector< unsigned int > & getOwnedAtomIdsInCurrentProcessor() const
std::shared_ptr< const utils::mpi::MPIPatternP2P< dftfe::utils::MemorySpace::HOST > > d_mpiPatternP2P
Definition AtomicCenteredNonLocalOperator.h:500
std::vector< unsigned int > d_sphericalFnTimesVectorFlattenedVectorLocalIds
Definition AtomicCenteredNonLocalOperator.h:533
dealii::ConditionalOStream pcout
Definition AtomicCenteredNonLocalOperator.h:556
unsigned int d_maxSingleAtomContribution
Definition AtomicCenteredNonLocalOperator.h:570
std::vector< unsigned int > & getNonLocalElemIdToLocalElemIdMap() const
std::vector< unsigned int > d_mapIAtomicNumToDotProd
Definition AtomicCenteredNonLocalOperator.h:671
unsigned int d_locallyOwnedCells
Definition AtomicCenteredNonLocalOperator.h:577
void applyVCconjtransOnXUsingGlobalC(const dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &src, const unsigned int kPointIndex, const CouplingStructure couplingtype, const dftfe::utils::MemoryStorage< ValueType, memorySpace > &couplingMatrix, dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &sphericalFunctionKetTimesVectorParFlattened, const bool flagScaleInternalMatrix=false)
completes the VCconjX on nodal vector src using global C matrix. The global C matrix mush have been c...
std::vector< unsigned int > d_numberCellsAccumNonLocalAtoms
Definition AtomicCenteredNonLocalOperator.h:572
unsigned int d_totalNonLocalEntries
Definition AtomicCenteredNonLocalOperator.h:568
void intitialisePartitionerKPointsAndComputeCMatrixEntries(const bool updateSparsity, const std::vector< double > &kPointWeights, const std::vector< double > &kPointCoordinates, std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > basisOperationsPtr, std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > BLASWrapperHostPtr, const unsigned int quadratureIndex)
calls internal function: initialisePartitioner, initialiseKpoint and computeCMatrixEntries
unsigned int d_totalNumSphericalFunctionsGlobal
Definition AtomicCenteredNonLocalOperator.h:660
std::vector< dftfe::global_size_type > d_flattenedNonLocalCellDofIndexToProcessDofIndexVector
Definition AtomicCenteredNonLocalOperator.h:653
void copyCMatrixEntries(const std::shared_ptr< AtomicCenteredNonLocalOperator< ValueTypeSrc, memorySpace > > nonLocalOperatorSrc, std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > basisOperationsPtr, const unsigned int quadratureIndex)
std::vector< unsigned int > d_mapiAtomToSpeciesIndex
Definition AtomicCenteredNonLocalOperator.h:668
std::vector< double > d_kPointCoordinates
Definition AtomicCenteredNonLocalOperator.h:493
const std::vector< ValueType > & getCmatrixEntriesTranspose(const unsigned int chargeId, const unsigned int iElemComp) const
Returns C conj matrix entries for chargeId and it compact support element Id.
unsigned int d_numberNodesPerElement
Definition AtomicCenteredNonLocalOperator.h:575
bool d_memoryOptMode
Definition AtomicCenteredNonLocalOperator.h:580
const std::vector< std::vector< dftfe::utils::MemoryStorage< ValueType, memorySpace > > > & getGlobalCMatrix() const
Returns global C matrix of all atoms.
void computeGlobalCMatrixVector(std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > basisOperationsPtr, std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > BLASWrapperHostPtr)
computes Global Cmatrix on HOST.
dealii::IndexSet d_locallyOwnedSphericalFunctionIdsCurrentProcess
Definition AtomicCenteredNonLocalOperator.h:560
std::set< unsigned int > d_setOfAtomicNumber
Definition AtomicCenteredNonLocalOperator.h:666
void applyVCconjtransOnX(const dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &src, const unsigned int kPointIndex, const CouplingStructure couplingtype, const dftfe::utils::MemoryStorage< ValueType, memorySpace > &couplingMatrix, dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &sphericalFunctionKetTimesVectorParFlattened, const bool flagScaleInternalMatrix=false)
completes the VCconjX on nodal vector src. The src vector must have all ghost nodes and constraint no...
std::vector< ValueType > d_atomCenteredKpointTimesSphericalFnTimesDistFromAtomQuadValues
Definition AtomicCenteredNonLocalOperator.h:512
void initialiseFlattenedDataStructure(unsigned int waveFunctionBlockSize, dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &sphericalFunctionKetTimesVectorParFlattened)
initialises the multivector object, waveFunctionBlockSize and resizes various internal data members.
dealii::IndexSet d_ghostAtomCenteredFnIdsCurrentProcess
Definition AtomicCenteredNonLocalOperator.h:550
std::vector< unsigned int > d_nonTrivialAllCellsSphericalFnAlphaToElemIdMap
Definition AtomicCenteredNonLocalOperator.h:525
Definition FEBasisOperations.h:84
Definition BLASWrapper.h:35
An class template to encapsulate a MultiVector. A MultiVector is a collection of vectors belonging t...
Definition MultiVector.h:127
Definition MemoryStorage.h:33
A class template to store the communication pattern (i.e., which entries/nodes to receive from which ...
Definition MPIPatternP2P.h:57
double number
Definition dftfeDataTypes.h:44
@ HOST
Definition MemorySpaceType.h:34
Definition pseudoPotentialToDftfeConverter.cc:34
CouplingStructure
Enum class that lists used in the non-local Operator.
Definition AtomicCenteredNonLocalOperator.h:48
@ dense
Definition AtomicCenteredNonLocalOperator.h:50
@ blockDiagonal
Definition AtomicCenteredNonLocalOperator.h:51
@ diagonal
Definition AtomicCenteredNonLocalOperator.h:49