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);
90 &sphericalFunctionKetTimesVectorParFlattened);
104 const bool updateSparsity,
105 const std::vector<double> &kPointWeights,
106 const std::vector<double> &kPointCoordinates,
130 template <
typename ValueTypeSrc>
133 const bool updateSparsity,
134 const std::vector<double> &kPointWeights,
135 const std::vector<double> &kPointCoordinates,
145 const std::shared_ptr<
147 nonLocalOperatorSrc);
148#if defined(DFTFE_WITH_DEVICE)
163 initialiseCellWaveFunctionPointers(
165 &cellWaveFunctionMatrix);
174 const std::vector<dftfe::uInt> &
202 std::vector<dftfe::uInt> &
205 std::vector<dftfe::uInt> &
208 std::vector<dftfe::uInt> &
211 const std::vector<ValueType> &
214 const std::vector<ValueType> &
217 const std::map<dftfe::uInt, std::vector<dftfe::uInt>> &
220 const std::vector<dftfe::uInt> &
223 const std::vector<dftfe::uInt> &
230 const std::vector<dftfe::uInt> &
236 const std::map<dftfe::uInt, std::vector<dftfe::uInt>> &
242 const std::vector<dftfe::uInt> &
245 const std::vector<dftfe::uInt> &
259 PconjtransposePmatrix);
281 &sphericalFunctionKetTimesVectorParFlattened,
282 const bool flagCopyResultsToMatrix =
true,
291 &sphericalFunctionKetTimesVectorParFlattened,
305 &sphericalFunctionKetTimesVectorParFlattened,
306 const bool skipComm =
false);
316 const std::pair<dftfe::uInt, dftfe::uInt> cellRange);
357 &sphericalFunctionKetTimesVectorParFlattened,
358 const bool flagScaleInternalMatrix =
false);
381 &sphericalFunctionKetTimesVectorParFlattened,
393 const std::pair<dftfe::uInt, dftfe::uInt> cellRange);
407 std::vector<ValueType>
414 const std::pair<dftfe::uInt, dftfe::uInt> cellRange)
const;
425 std::vector<ValueType> &entriesPadded,
431 const std::vector<ValueType> &
437 const std::vector<ValueType> &
444 std::vector<dftfe::utils::MemoryStorage<ValueType, memorySpace>>> &
467 &sphericalFunctionKetTimesVectorParFlattened,
468 const bool flagScaleInternalMatrix =
false);
490 &sphericalFunctionKetTimesVectorParFlattened,
491 const bool flagScaleInternalMatrix =
false);
496 std::shared_ptr<dftfe::linearAlgebra::BLASWrapper<memorySpace>>
498 std::shared_ptr<AtomCenteredSphericalFunctionContainer>
513 std::vector<ValueType>
517 std::map<dftfe::uInt, std::vector<dftfe::uInt>>
530 std::map<dftfe::uInt, std::vector<dftfe::uInt>>
540 std::vector<distributedCPUVec<std::complex<double>>>
547 std::map<std::pair<dftfe::uInt, dftfe::uInt>,
dftfe::uInt>
553 std::map<std::pair<dftfe::uInt, dftfe::uInt>,
dftfe::uInt>
555 std::vector<std::vector<
556 std::vector<dftfe::utils::MemoryStorage<ValueType, memorySpace>>>>
598 const std::vector<double> &kPointCoordinates);
623 template <
typename ValueTypeSrc>
626 const std::shared_ptr<
636 template <
typename ValueTypeSrc>
639 const std::shared_ptr<
654 std::vector<dftfe::uInt>
665 std::vector<dftfe::utils::MemoryStorage<ValueType, memorySpace>>>
671 std::vector<dftfe::utils::MemoryStorage<ValueType, memorySpace>>
697#if defined(DFTFE_WITH_DEVICE)
705 copyDistributedVectorToPaddedMemoryStorageVectorDevice(
707 &sphericalFunctionKetTimesVectorParFlattened,
719 copyPaddedMemoryStorageVectorToDistributeVectorDevice(
722 &sphericalFunctionKetTimesVectorParFlattened);
728 d_sphericalFnTimesWavefunctionMatrix;
729 ValueType **hostPointerCDagger, **hostPointerCDaggeOutTemp,
731 ValueType *d_wfcStartPointer;
732 ValueType **devicePointerCDagger, **devicePointerCDaggerOutTemp,
734 std::vector<dftfe::uInt> d_nonlocalElemIdToLocalElemIdMap;
740 d_sphericalFnTimesVectorDevice;
742 std::vector<ValueType> d_cellHamiltonianMatrixNonLocalFlattenedConjugate;
744 d_cellHamiltonianMatrixNonLocalFlattenedConjugateDevice;
745 std::vector<ValueType> d_cellHamiltonianMatrixNonLocalFlattenedTranspose;
747 d_cellHamiltonianMatrixNonLocalFlattenedTransposeDevice;
749 d_cellHamMatrixTimesWaveMatrixNonLocalDevice;
751 d_sphericalFnTimesVectorAllCellsDevice;
752 std::vector<ValueType> d_sphericalFnTimesVectorAllCellsReduction;
754 d_sphericalFnTimesVectorAllCellsReductionDevice;
756 std::vector<dftfe::uInt> d_mapSphericalFnTimesVectorAllCellsReduction;
758 d_mapSphericalFnTimesVectorAllCellsReductionDevice;
760 d_couplingMatrixTimesVectorDevice;
762 std::vector<dftfe::uInt> d_sphericalFnIdsParallelNumberingMap;
763 std::vector<dftfe::Int> d_sphericalFnIdsPaddedParallelNumberingMap;
765 d_sphericalFnIdsParallelNumberingMapDevice;
767 d_sphericalFnIdsPaddedParallelNumberingMapDevice;
768 std::vector<dftfe::Int>
769 d_indexMapFromPaddedNonLocalVecToParallelNonLocalVec;
771 d_indexMapFromPaddedNonLocalVecToParallelNonLocalVecDevice;
772 std::vector<dftfe::uInt> d_cellNodeIdMapNonLocalToLocal;
775 d_cellNodeIdMapNonLocalToLocalDevice;
void computeCMatrixEntries(std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > basisOperationsPtr, const dftfe::uInt quadratureIndex)
computes the entries in C matrix for CPUs and GPUs. On GPUs the entries are copied to a flattened vec...
bool atomPresentInCellRange(const std::pair< dftfe::uInt, dftfe::uInt > cellRange) const
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:511
void applyVCconjtransOnX(const dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &src, const dftfe::uInt 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...
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)
std::vector< dftfe::uInt > d_mapiAtomToDotProd
Definition AtomicCenteredNonLocalOperator.h:674
dftfe::uInt d_totalNumSphericalFunctionsGlobal
Definition AtomicCenteredNonLocalOperator.h:662
dealii::IndexSet d_locallyOwnedAtomCenteredFnIdsCurrentProcess
Definition AtomicCenteredNonLocalOperator.h:551
std::map< dftfe::uInt, std::vector< dftfe::uInt > > d_atomIdToNonTrivialSphericalFnCellStartIndex
map from local nonlocal atomid to vector over cells
Definition AtomicCenteredNonLocalOperator.h:531
dftfe::uInt getTotalAtomInCurrentProcessor() const
std::vector< dftfe::utils::MemoryStorage< ValueType, memorySpace > > d_dotProductAtomicWaveInputWaveTemp
Definition AtomicCenteredNonLocalOperator.h:672
const std::vector< dftfe::uInt > & getSphericalFnTimesVectorFlattenedVectorLocalIds() const
Returns the Flattened vector of sphericalFunctionIDs in order of atomIDs of atoms in processor.
bool d_useGlobalCMatrix
Definition AtomicCenteredNonLocalOperator.h:660
const std::vector< ValueType > & getCmatrixEntriesConjugate(const dftfe::uInt chargeId, const dftfe::uInt iElemComp) const
Returns C matrix entries for chargeId and it compact support element Id.
std::vector< double > d_kPointWeights
Definition AtomicCenteredNonLocalOperator.h:494
const dftfe::uInt d_n_mpi_processes
Definition AtomicCenteredNonLocalOperator.h:561
std::vector< ValueType > getCmatrixEntries(dftfe::Int kPointIndex, dftfe::uInt atomId, dftfe::Int iElem) const
bool d_AllReduceCompleted
Definition AtomicCenteredNonLocalOperator.h:493
const std::map< dftfe::uInt, std::vector< dftfe::uInt > > & getAtomIdToNonTrivialSphericalFnCellStartIndex() const
Required in configurational forces. Cummulative sphercial Fn Id. The size is numCells in processor.
std::map< dftfe::uInt, std::vector< dftfe::uInt > > d_cellIdToAtomIdsLocalCompactSupportMap
map from cell number to set of non local atom ids (local numbering)
Definition AtomicCenteredNonLocalOperator.h:518
std::vector< dftfe::uInt > d_flattenedNonLocalCellDofIndexToProcessDofIndexVector
Definition AtomicCenteredNonLocalOperator.h:655
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 dftfe::uInt quadratureIndex, const std::shared_ptr< AtomicCenteredNonLocalOperator< ValueTypeSrc, memorySpace > > nonLocalOperatorSrc)
calls internal function: initialisePartitioner, initialiseKpoint and computeCMatrixEntries
const std::vector< ValueType > & getAtomCenteredKpointTimesSphericalFnTimesDistFromAtomQuadValues() const
std::map< std::pair< dftfe::uInt, dftfe::uInt >, dftfe::uInt > d_AtomCenteredFnIdsNumberingMapCurrentProcess
Definition AtomicCenteredNonLocalOperator.h:554
dftfe::uInt d_numberWaveFunctions
Definition AtomicCenteredNonLocalOperator.h:580
std::vector< dftfe::uInt > d_nonlocalElemIdToCellIdVector
Definition AtomicCenteredNonLocalOperator.h:658
const MPI_Comm d_mpi_communicator
Definition AtomicCenteredNonLocalOperator.h:559
std::vector< dftfe::uInt > d_mapiAtomTosphFuncWaveStart
Definition AtomicCenteredNonLocalOperator.h:678
dftfe::uInt d_locallyOwnedCells
Definition AtomicCenteredNonLocalOperator.h:579
std::map< dftfe::uInt, std::vector< dftfe::uInt > > d_listOfiAtomInSpecies
Definition AtomicCenteredNonLocalOperator.h:679
std::set< dftfe::uInt > d_setOfAtomicNumber
Definition AtomicCenteredNonLocalOperator.h:668
dftfe::utils::MemoryStorage< dftfe::uInt, memorySpace > d_iElemNonLocalToElemIndexMap
Definition AtomicCenteredNonLocalOperator.h:576
dftfe::uInt d_kPointIndex
Definition AtomicCenteredNonLocalOperator.h:581
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.
dftfe::uInt d_maxSingleAtomContribution
Definition AtomicCenteredNonLocalOperator.h:572
dealii::IndexSet d_ghostSphericalFunctionIdsCurrentProcess
Definition AtomicCenteredNonLocalOperator.h:563
std::vector< std::vector< std::vector< ValueType > > > d_CMatrixEntriesConjugate
Definition AtomicCenteredNonLocalOperator.h:585
std::vector< dftfe::uInt > d_nonTrivialSphericalFnsCellStartIndex
Definition AtomicCenteredNonLocalOperator.h:525
std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, memorySpace > > d_basisOperatorPtr
Definition AtomicCenteredNonLocalOperator.h:507
std::vector< std::vector< std::vector< ValueType > > > d_CMatrixEntriesTranspose
Definition AtomicCenteredNonLocalOperator.h:586
const std::vector< dftfe::uInt > & getNonTrivialAllCellsSphericalFnAlphaToElemIdMap() const
dftfe::uInt d_totalAtomsInCurrentProc
Definition AtomicCenteredNonLocalOperator.h:565
std::vector< distributedCPUVec< double > > d_SphericalFunctionKetTimesVectorPar
Definition AtomicCenteredNonLocalOperator.h:544
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 dftfe::uInt quadratureIndex)
calls internal function: initialisePartitioner, initialiseKpoint and computeCMatrixEntries
dftfe::uInt d_sumNonTrivialSphericalFnOverAllCells
Definition AtomicCenteredNonLocalOperator.h:533
bool d_computeSphericalFnTimesX
Definition AtomicCenteredNonLocalOperator.h:659
std::map< dftfe::uInt, dftfe::utils::MemoryStorage< ValueType, dftfe::utils::MemorySpace::HOST > > d_sphericalFnTimesWavefunMatrix
Definition AtomicCenteredNonLocalOperator.h:653
dftfe::uInt d_totalLocallyOwnedNodes
Definition AtomicCenteredNonLocalOperator.h:676
std::vector< std::vector< dftfe::utils::MemoryStorage< ValueType, memorySpace > > > d_CMatrixGlobal
Definition AtomicCenteredNonLocalOperator.h:666
const std::vector< dftfe::uInt > & getOwnedAtomIdsInCurrentProcessor() const
const std::vector< ValueType > & getAtomCenteredKpointIndexedSphericalFnQuadValues() const
std::vector< dftfe::uInt > d_nonTrivialSphericalFnPerCell
vector of size num physical cells
Definition AtomicCenteredNonLocalOperator.h:521
std::vector< dftfe::uInt > d_numberCellsAccumNonLocalAtoms
Definition AtomicCenteredNonLocalOperator.h:574
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::vector< dftfe::uInt > & getAtomWiseNumberCellsInCompactSupport() const
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > d_BLASWrapperPtr
Definition AtomicCenteredNonLocalOperator.h:497
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 dftfe::uInt quadratureIndex)
std::vector< dftfe::uInt > d_mapiAtomToSpeciesIndex
Definition AtomicCenteredNonLocalOperator.h:670
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.
dftfe::uInt getGlobalDofAtomIdSphericalFnPair(const dftfe::uInt atomId, const dftfe::uInt alpha) const
void applyVCconjtransOnXCellLevel(const dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &src, const dftfe::uInt 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< dftfe::uInt > d_numberCellsForEachAtom
Definition AtomicCenteredNonLocalOperator.h:503
std::shared_ptr< AtomCenteredSphericalFunctionContainer > d_atomCenteredSphericalFunctionContainer
Definition AtomicCenteredNonLocalOperator.h:499
void initialisePartitioner()
creates the partitioner for the distributed vector based on sparsity patten from sphericalFn containe...
std::vector< dftfe::uInt > d_atomStartIndexGlobal
Definition AtomicCenteredNonLocalOperator.h:661
bool atomSupportInElement(dftfe::uInt iElem) const
std::vector< dftfe::uInt > d_sphericalFnTimesVectorFlattenedVectorLocalIds
Definition AtomicCenteredNonLocalOperator.h:535
std::vector< dftfe::uInt > d_mapAtomIdToSpeciesIndex
Definition AtomicCenteredNonLocalOperator.h:669
const std::vector< dftfe::uInt > & getNonTrivialSphericalFnsCellStartIndex() const
const dftfe::utils::MemoryStorage< dftfe::uInt, memorySpace > & getFlattenedNonLocalCellDofIndexToProcessDofIndexMap() const
std::vector< std::vector< std::vector< dftfe::utils::MemoryStorage< ValueType, memorySpace > > > > d_CMatrixEntries
Definition AtomicCenteredNonLocalOperator.h:557
const std::vector< dftfe::uInt > & getNonlocalElementToCellIdVector() const
dftfe::utils::MemoryStorage< dftfe::uInt, memorySpace > d_flattenedNonLocalCellDofIndexToProcessDofIndexMap
Definition AtomicCenteredNonLocalOperator.h:657
void applyCconjtransOnX(const dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &X)
computes the results of CconjtransX on nodal X vector
dftfe::uInt d_numberNodesPerElement
Definition AtomicCenteredNonLocalOperator.h:577
bool d_isMallocCalled
Definition AtomicCenteredNonLocalOperator.h:583
std::shared_ptr< const utils::mpi::MPIPatternP2P< dftfe::utils::MemorySpace::HOST > > d_mpiPatternP2P
Definition AtomicCenteredNonLocalOperator.h:502
void applyCconjtransOnX(const ValueType *X, const std::pair< dftfe::uInt, dftfe::uInt > cellRange)
computes the results of CconjtransX on the cells of interst specied by cellRange
std::vector< dftfe::uInt > & getAtomWiseNumberCellsAccumulated() const
dftfe::uInt d_totalNonLocalEntries
Definition AtomicCenteredNonLocalOperator.h:570
void initialiseOperatorActionOnX(dftfe::uInt kPointIndex)
Resizes various internal data members and selects the kpoint of interest.
dealii::ConditionalOStream pcout
Definition AtomicCenteredNonLocalOperator.h:558
void initialiseFlattenedDataStructure(dftfe::uInt waveFunctionBlockSize, dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &sphericalFunctionKetTimesVectorParFlattened)
initialises the multivector object, waveFunctionBlockSize and resizes various internal data members.
void applyCOnVCconjtransX(ValueType *Xout, const std::pair< dftfe::uInt, dftfe::uInt > cellRange)
adds the result of CVCtX onto Xout for both CPU and GPU calls
std::vector< dftfe::uInt > d_mapIAtomicNumToDotProd
Definition AtomicCenteredNonLocalOperator.h:673
void applyCVCconjtransOnX(const dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &src, const dftfe::uInt 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...
const std::map< dftfe::uInt, std::vector< dftfe::uInt > > & getCellIdToAtomIdsLocalCompactSupportMap() const
void applyVCconjtransOnXUsingGlobalC(const dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &src, const dftfe::uInt 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...
const ValueType * getCconjtansXLocalDataStructure(const dftfe::uInt iAtom) const
Returns the pointer of CTX stored in HOST memory.
const dftfe::uInt getTotalNonTrivialSphericalFnsOverAllCells() const
void applyVOnCconjtransX(const CouplingStructure couplingtype, const dftfe::utils::MemoryStorage< ValueType, memorySpace > &couplingMatrix, dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &sphericalFunctionKetTimesVectorParFlattened, const bool flagCopyResultsToMatrix=true, const dftfe::uInt kPointIndex=0)
compute the action of coupling matrix on sphericalFunctionKetTimesVectorParFlattened.
const std::vector< dftfe::uInt > & getNonTrivialSphericalFnsPerCell() const
std::map< std::pair< dftfe::uInt, dftfe::uInt >, dftfe::uInt > d_sphericalFunctionIdsNumberingMapCurrentProcess
Definition AtomicCenteredNonLocalOperator.h:548
std::vector< dftfe::uInt > d_OwnedAtomIdsInCurrentProcessor
Definition AtomicCenteredNonLocalOperator.h:550
std::vector< dftfe::uInt > d_nonTrivialAllCellsSphericalFnAlphaToElemIdMap
Definition AtomicCenteredNonLocalOperator.h:527
std::vector< double > d_kPointCoordinates
Definition AtomicCenteredNonLocalOperator.h:495
dftfe::uInt getMaxSingleAtomEntries() const
bool d_memoryOptMode
Definition AtomicCenteredNonLocalOperator.h:582
const std::vector< std::vector< dftfe::utils::MemoryStorage< ValueType, memorySpace > > > & getGlobalCMatrix() const
Returns global C matrix of all atoms.
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 dftfe::uInt quadratureIndex)
dftfe::uInt getLocalIdOfDistributedVec(const dftfe::uInt globalId) const
const std::vector< ValueType > & getCmatrixEntriesTranspose(const dftfe::uInt chargeId, const dftfe::uInt iElemComp) const
Returns C conj matrix entries for chargeId and it compact support element Id.
const dftfe::uInt d_this_mpi_process
Definition AtomicCenteredNonLocalOperator.h:560
dftfe::uInt getTotalNonLocalEntriesCurrentProcessor() const
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:562
void computeCconjtransCMatrix(const dftfe::uInt 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.
dftfe::uInt getTotalNonLocalElementsInCurrentProcessor() const
std::vector< dftfe::uInt > & getNonLocalElemIdToLocalElemIdMap() const
std::vector< ValueType > d_atomCenteredKpointTimesSphericalFnTimesDistFromAtomQuadValues
Definition AtomicCenteredNonLocalOperator.h:514
dealii::IndexSet d_ghostAtomCenteredFnIdsCurrentProcess
Definition AtomicCenteredNonLocalOperator.h:552
dftfe::uInt d_totalNonlocalElems
Definition AtomicCenteredNonLocalOperator.h:568
Definition FEBasisOperations.h:85
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:42
@ 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
std::uint32_t uInt
Definition TypeConfig.h:10
std::int32_t Int
Definition TypeConfig.h:11