19#ifndef kohnShamHamiltonianOperatorClass_H_
20#define kohnShamHamiltonianOperatorClass_H_
34 template <dftfe::utils::MemorySpace memorySpace>
48 basisOperationsPtrHost,
53 const unsigned int densityQuadratureID,
54 const unsigned int lpspQuadratureID,
55 const unsigned int feOrderPlusOneQuadratureID,
56 const MPI_Comm & mpi_comm_parent,
57 const MPI_Comm & mpi_comm_domain);
60 init(
const std::vector<double> &kPointCoordinates,
61 const std::vector<double> &kPointWeights);
88 const unsigned int index);
93 const unsigned int index);
104 auxDensityXCRepresentationPtr,
107 const unsigned int spinIndex = 0);
119 const unsigned int spinIndex);
123 const std::map<dealii::CellId, std::vector<double>>
124 &externalPotCorrValues);
129 auxDensityXCRepresentationPtr,
138 const unsigned int spinIndex);
147 const unsigned int spinIndex);
160 const bool onlyHPrimePartForFirstOrderDensityMatResponse =
false);
177 const double scalarHX,
178 const double scalarY,
179 const double scalarX,
181 const bool onlyHPrimePartForFirstOrderDensityMatResponse =
false);
197 const double scalarHX,
198 const double scalarY,
199 const double scalarX,
201 const bool onlyHPrimePartForFirstOrderDensityMatResponse =
false);
216 const double scalarOX,
217 const double scalarY,
218 const double scalarX,
220 const bool useApproximateMatrixEntries =
true);
236 const double scalarOinvX,
237 const double scalarY,
238 const double scalarX,
254 const double scalarOinvX,
255 const double scalarY,
256 const double scalarX,
277 const double scalarHX,
278 const double scalarY,
279 const double scalarX,
282 const bool onlyHPrimePartForFirstOrderDensityMatResponse,
304 const double scalarHX,
305 const double scalarY,
306 const double scalarX,
308 const bool onlyHPrimePartForFirstOrderDensityMatResponse =
false,
309 const bool skip1 =
false,
310 const bool skip2 =
false,
311 const bool skip3 =
false);
338 std::shared_ptr<dftfe::linearAlgebra::BLASWrapper<memorySpace>>
348 std::shared_ptr<dftfe::oncvClass<dataTypes::number, memorySpace>>
353 std::vector<dftfe::utils::MemoryStorage<dataTypes::number, memorySpace>>
355 std::vector<dftfe::utils::MemoryStorage<dataTypes::numberFP32, memorySpace>>
387 std::vector<dftfe::utils::MemoryStorage<double, memorySpace>>
390 std::shared_ptr<dftUtils::constraintMatrixInfo<memorySpace>>
392 std::shared_ptr<dftUtils::constraintMatrixInfo<memorySpace>>
Definition AtomicCenteredNonLocalOperator.h:58
Definition AuxDensityMatrix.h:33
std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, memorySpace > > d_basisOperationsPtr
Definition KohnShamHamiltonianOperator.h:342
dftfe::utils::MemoryStorage< double, memorySpace > d_invJacderExcWithSigmaTimesGradRhoJxW
Definition KohnShamHamiltonianOperator.h:386
dftfe::utils::MemoryStorage< dataTypes::number, memorySpace > d_cellWaveFunctionMatrixSrc
Definition KohnShamHamiltonianOperator.h:362
const unsigned int d_densityQuadratureID
Definition KohnShamHamiltonianOperator.h:402
std::shared_ptr< dftfe::oncvClass< dataTypes::number, memorySpace > > d_oncvClassPtr
Definition KohnShamHamiltonianOperator.h:349
const dftfe::utils::MemoryStorage< double, memorySpace > & getSqrtMassVector()
const unsigned int this_mpi_process
Definition KohnShamHamiltonianOperator.h:412
void reinitkPointSpinIndex(const unsigned int kPointIndex, const unsigned int spinIndex)
sets the data member to appropriate kPoint and spin Index
std::vector< double > d_kPointCoordinates
Definition KohnShamHamiltonianOperator.h:395
unsigned int d_HamiltonianIndex
Definition KohnShamHamiltonianOperator.h:407
std::shared_ptr< AtomicCenteredNonLocalOperator< dataTypes::number, memorySpace > > d_ONCVnonLocalOperator
Definition KohnShamHamiltonianOperator.h:321
unsigned int d_spinIndex
Definition KohnShamHamiltonianOperator.h:406
void HXCheby(dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &src, const double scalarHX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &dst, const bool onlyHPrimePartForFirstOrderDensityMatResponse=false, const bool skip1=false, const bool skip2=false, const bool skip3=false)
Computing Y = scalarHX*M^{-1}HX + scalarX*X + scalarY*Y for a given X and Y in full precision.
dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > d_srcNonLocalTemp
Definition KohnShamHamiltonianOperator.h:425
dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > d_dstNonLocalTempSinglePrec
Definition KohnShamHamiltonianOperator.h:432
bool d_useHubbard
Definition KohnShamHamiltonianOperator.h:423
dftfe::utils::MemoryStorage< double, memorySpace > tempHamMatrixRealBlock
Definition KohnShamHamiltonianOperator.h:399
unsigned int d_numVectorsInternal
Definition KohnShamHamiltonianOperator.h:415
const unsigned int n_mpi_processes
Definition KohnShamHamiltonianOperator.h:411
std::shared_ptr< hubbard< dataTypes::number, memorySpace > > d_hubbardClassPtr
Definition KohnShamHamiltonianOperator.h:422
dftfe::utils::MemoryStorage< double, memorySpace > tempHamMatrixImagBlock
Definition KohnShamHamiltonianOperator.h:400
unsigned int d_cellsBlockSizeHX
Definition KohnShamHamiltonianOperator.h:414
dftfe::utils::MemoryStorage< dataTypes::numberFP32, memorySpace > d_cellWaveFunctionMatrixSrcSinglePrec
Definition KohnShamHamiltonianOperator.h:367
dftParameters * d_dftParamsPtr
Definition KohnShamHamiltonianOperator.h:351
void init(const std::vector< double > &kPointCoordinates, const std::vector< double > &kPointWeights)
unsigned int d_nOMPThreads
Definition KohnShamHamiltonianOperator.h:416
dftfe::utils::MemoryStorage< double, memorySpace > d_VeffJxW
Definition KohnShamHamiltonianOperator.h:382
dftUtils::constraintMatrixInfo< dftfe::utils::MemorySpace::HOST > * getOverloadedConstraintMatrixHost() const
void computeCellHamiltonianMatrixExtPotContribution()
const MPI_Comm d_mpiCommDomain
Definition KohnShamHamiltonianOperator.h:410
std::shared_ptr< AtomicCenteredNonLocalOperator< dataTypes::numberFP32, memorySpace > > d_ONCVnonLocalOperatorSinglePrec
Definition KohnShamHamiltonianOperator.h:336
void computeCellHamiltonianMatrix(const bool onlyHPrimePartForFirstOrderDensityMatResponse=false)
KohnShamHamiltonianOperator(std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > BLASWrapperPtr, std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, memorySpace > > basisOperationsPtr, std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > basisOperationsPtrHost, std::shared_ptr< dftfe::oncvClass< dataTypes::number, memorySpace > > oncvClassPtr, std::shared_ptr< excManager< memorySpace > > excManagerPtr, dftParameters *dftParamsPtr, const unsigned int densityQuadratureID, const unsigned int lpspQuadratureID, const unsigned int feOrderPlusOneQuadratureID, const MPI_Comm &mpi_comm_parent, const MPI_Comm &mpi_comm_domain)
unsigned int d_kPointIndex
Definition KohnShamHamiltonianOperator.h:405
const unsigned int d_feOrderPlusOneQuadratureID
Definition KohnShamHamiltonianOperator.h:404
void HXWithLowdinOrthonormalisedInput(dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &src, const double scalarHX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &dst, const bool onlyHPrimePartForFirstOrderDensityMatResponse=false)
Computing Y = scalarHX*M^{1/2}HM^{1/2}X + scalarX*X + scalarY*Y for a given X and Y in full precision...
void HXCheby(dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > &src, const double scalarHX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > &dst, const bool onlyHPrimePartForFirstOrderDensityMatResponse, const bool skip1, const bool skip2, const bool skip3)
Computing Y = scalarHX*HM^{-1}X + scalarX*X + scalarY*Y for a given X and Y in reduced precision.
void computeVEff(std::shared_ptr< AuxDensityMatrix< memorySpace > > auxDensityXCRepresentationPtr, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &phiValues, const unsigned int spinIndex=0)
Computes effective potential involving exchange-correlation functionals.
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > d_BLASWrapperPtr
Definition KohnShamHamiltonianOperator.h:339
dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > d_tempBlockVectorOverlapInvX
Definition KohnShamHamiltonianOperator.h:377
void overlapInverseMatrixTimesX(dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &src, const double scalarOinvX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &dst)
Computing Y = scalarOinvX*O^{-1}X + scalarX*X + scalarY*Y for a given X and Y in full precision.
dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > d_dstNonLocalTemp
Definition KohnShamHamiltonianOperator.h:427
dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > d_tempBlockVectorOverlapInvXSinglePrec
Definition KohnShamHamiltonianOperator.h:379
void HX(dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &src, const double scalarHX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &dst, const bool onlyHPrimePartForFirstOrderDensityMatResponse=false)
Computing Y = scalarHX*HX + scalarX*X + scalarY*Y for a given X and Y in full precision.
void computeVEffExternalPotCorr(const std::map< dealii::CellId, std::vector< double > > &externalPotCorrValues)
void reinitNumberWavefunctions(const unsigned int numWfc)
void overlapMatrixTimesX(dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &src, const double scalarOX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &dst, const bool useApproximateMatrixEntries=true)
Computing Y = scalarOX*OX + scalarX*X + scalarY*Y for a given X and Y in full precision.
dealii::ConditionalOStream pcout
Definition KohnShamHamiltonianOperator.h:417
dftfe::utils::MemoryStorage< dataTypes::numberFP32, memorySpace > d_cellWaveFunctionMatrixDstSinglePrec
Definition KohnShamHamiltonianOperator.h:369
dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > d_srcNonLocalTempSinglePrec
Definition KohnShamHamiltonianOperator.h:430
std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > d_basisOperationsPtrHost
Definition KohnShamHamiltonianOperator.h:347
void setVEff(const std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > &vKS_quadValues, const unsigned int spinIndex)
Sets the V-eff potential.
dftUtils::constraintMatrixInfo< memorySpace > * getOverloadedConstraintMatrix() const
Definition KohnShamHamiltonianOperator.h:80
dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > d_ONCVNonLocalProjectorTimesVectorBlockSinglePrec
Definition KohnShamHamiltonianOperator.h:374
const dftfe::utils::MemoryStorage< double, memorySpace > & getInverseSqrtMassVector()
const unsigned int d_lpspQuadratureID
Definition KohnShamHamiltonianOperator.h:403
std::shared_ptr< dftUtils::constraintMatrixInfo< memorySpace > > inverseSqrtMassVectorScaledConstraintsNoneDataInfoPtr
Definition KohnShamHamiltonianOperator.h:393
dealii::TimerOutput computing_timer
Definition KohnShamHamiltonianOperator.h:420
void setVEffExternalPotCorrToZero()
void overlapInverseMatrixTimesX(dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > &src, const double scalarOinvX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > &dst)
Computing Y = scalarOinvX*O^{-1}X + scalarX*X + scalarY*Y for a given X and Y in Reduced precision.
dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > d_ONCVNonLocalProjectorTimesVectorBlock
Definition KohnShamHamiltonianOperator.h:372
void computeVEffPrime(std::shared_ptr< AuxDensityMatrix< memorySpace > > auxDensityXCRepresentationPtr, const std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > &rhoPrimeValues, const std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > &gradRhoPrimeValues, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &phiPrimeValues, const unsigned int spinIndex)
std::vector< double > d_kPointWeights
Definition KohnShamHamiltonianOperator.h:397
dftfe::utils::MemoryStorage< dataTypes::number, memorySpace > d_cellWaveFunctionMatrixDst
Definition KohnShamHamiltonianOperator.h:364
bool d_isExternalPotCorrHamiltonianComputed
Definition KohnShamHamiltonianOperator.h:408
const MPI_Comm d_mpiCommParent
Definition KohnShamHamiltonianOperator.h:409
dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > & getScratchFEMultivectorSinglePrec(const unsigned int numVectors, const unsigned int index)
dftfe::utils::MemoryStorage< dftfe::global_size_type, memorySpace > d_mapNodeIdToProcId
Definition KohnShamHamiltonianOperator.h:435
std::vector< dftfe::utils::MemoryStorage< double, memorySpace > > d_invJacKPointTimesJxW
Definition KohnShamHamiltonianOperator.h:388
std::vector< dftfe::utils::MemoryStorage< dataTypes::numberFP32, memorySpace > > d_cellHamiltonianMatrixSinglePrec
Definition KohnShamHamiltonianOperator.h:356
std::shared_ptr< dftUtils::constraintMatrixInfo< memorySpace > > inverseMassVectorScaledConstraintsNoneDataInfoPtr
Definition KohnShamHamiltonianOperator.h:391
dftfe::utils::MemoryStorage< double, memorySpace > d_VeffExtPotJxW
Definition KohnShamHamiltonianOperator.h:383
std::vector< dftfe::utils::MemoryStorage< dataTypes::number, memorySpace > > d_cellHamiltonianMatrix
Definition KohnShamHamiltonianOperator.h:354
dftfe::utils::MemoryStorage< double, memorySpace > d_cellHamiltonianMatrixExtPot
Definition KohnShamHamiltonianOperator.h:358
unsigned int d_cellsBlockSizeHamiltonianConstruction
Definition KohnShamHamiltonianOperator.h:413
const MPI_Comm & getMPICommunicatorDomain()
dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > & getScratchFEMultivector(const unsigned int numVectors, const unsigned int index)
std::shared_ptr< excManager< memorySpace > > d_excManagerPtr
Definition KohnShamHamiltonianOperator.h:350
void resetExtPotHamFlag()
Definition FEBasisOperations.h:84
Namespace which declares the input parameters and the functions to parse them from the input paramete...
Definition dftParameters.h:35
Overloads dealii's distribute and distribute_local_to_global functions associated with constraints cl...
Definition constraintMatrixInfo.h:43
Definition excManager.h:28
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 oncvClass.h:49
Base class for building the DFT operator and the action of operator on a vector.
Definition operator.h:43
Definition MemoryStorage.h:33
double number
Definition dftfeDataTypes.h:44
float numberFP32
Definition dftfeDataTypes.h:45
@ HOST
Definition MemorySpaceType.h:34
Definition pseudoPotentialToDftfeConverter.cc:34