26#ifndef dftefeKohnShamDFT_h
27#define dftefeKohnShamDFT_h
51 template <
typename ValueTypeElectrostaticsCoeff,
52 typename ValueTypeElectrostaticsBasis,
53 typename ValueTypeWaveFunctionCoeff,
54 typename ValueTypeWaveFunctionBasis,
61 std::shared_ptr<Hamiltonian<float, memorySpace>>,
62 std::shared_ptr<Hamiltonian<double, memorySpace>>,
63 std::shared_ptr<Hamiltonian<std::complex<float>, memorySpace>>,
64 std::shared_ptr<Hamiltonian<std::complex<double>, memorySpace>>>;
68 ValueTypeWaveFunctionBasis>;
71 ValueTypeWaveFunctionCoeff>;
76 using OpContext =
typename linearAlgebra::HermitianIterativeEigenSolver<
85 const std::vector<utils::Point> &atomCoordinates,
86 const std::vector<double> & atomCharges,
87 const double & smearedChargeRadius,
91 const double smearingTemperature,
92 const double fermiEnergyTolerance,
93 const double fracOccupancyTolerance,
94 const double eigenSolveResidualTolerance,
95 const double scfDensityResidualNormTolerance,
98 const bool evaluateEnergyEverySCF,
101 const double mixingParameter,
102 const bool isAdaptiveAndersonMixingParameter,
105 &atomicElectronicChargeDensityFunction,
110 ValueTypeElectrostaticsBasis,
112 dim>> feBMTotalCharge,
114 ValueTypeWaveFunctionBasis,
121 feBDTotalChargeStiffnessMatrix,
125 feBDNuclearChargeRhs,
129 feBDElectronicChargeRhs,
133 memorySpace>> feBDKineticHamiltonian,
137 feBDElectrostaticsHamiltonian,
140 memorySpace>> feBDEXCHamiltonian,
144 const std::string &xcType,
161 bool isResidualChebyshevFilter =
true,
162 const std::vector<double> & atomMagZFactors = {},
171 const size_type chebyshevPolynomialDegree = 0,
172 const double spinMixingEnhancementFactor =
179 const std::vector<utils::Point> &atomCoordinates,
180 const std::vector<double> & atomCharges,
181 const double & smearedChargeRadius,
185 const double smearingTemperature,
186 const double fermiEnergyTolerance,
187 const double fracOccupancyTolerance,
188 const double eigenSolveResidualTolerance,
189 const double scfDensityResidualNormTolerance,
192 const bool evaluateEnergyEverySCF,
195 const double mixingParameter,
196 const bool isAdaptiveAndersonMixingParameter,
199 &atomicElectronicChargeDensityFunction,
204 ValueTypeElectrostaticsBasis,
206 dim>> feBMTotalCharge,
208 ValueTypeWaveFunctionBasis,
215 feBDTotalChargeStiffnessMatrix,
219 feBDNuclearChargeRhs,
223 feBDElectronicChargeRhs,
227 feBDNuclChargeStiffnessMatrixNumSol,
231 feBDNuclChargeRhsNumSol,
235 memorySpace>> feBDKineticHamiltonian,
239 feBDElectrostaticsHamiltonian,
242 memorySpace>> feBDEXCHamiltonian,
246 const std::string &xcType,
263 bool isResidualChebyshevFilter =
true,
264 const std::vector<double> & atomMagZFactors = {},
273 const size_type chebyshevPolynomialDegree = 0,
274 const double spinMixingEnhancementFactor =
281 const std::vector<utils::Point> &atomCoordinates,
282 const std::vector<double> & atomCharges,
283 const std::vector<std::string> & atomSymbolVec,
284 const double & smearedChargeRadius,
288 const double smearingTemperature,
289 const double fermiEnergyTolerance,
290 const double fracOccupancyTolerance,
291 const double eigenSolveResidualTolerance,
292 const double scfDensityResidualNormTolerance,
295 const bool evaluateEnergyEverySCF,
298 const double mixingParameter,
299 const bool isAdaptiveAndersonMixingParameter,
302 &atomicTotalElectroPotentialFunction,
304 &atomicElectronicChargeDensityFunction,
308 ValueTypeElectrostaticsBasis,
310 dim>> feBMTotalCharge,
312 ValueTypeWaveFunctionBasis,
319 feBDTotalChargeStiffnessMatrix,
323 feBDNuclearChargeRhs,
327 feBDElectronicChargeRhs,
331 memorySpace>> feBDKineticHamiltonian,
335 feBDElectrostaticsHamiltonian,
338 memorySpace>> feBDEXCHamiltonian,
342 const std::string &xcType,
359 bool isResidualChebyshevFilter =
true,
362 const std::vector<double> & atomMagZFactors = {},
371 const size_type chebyshevPolynomialDegree = 0,
372 const double spinMixingEnhancementFactor =
378 const std::vector<utils::Point> &atomCoordinates,
379 const std::vector<double> & atomCharges,
380 const std::vector<std::string> & atomSymbolVec,
381 const double & smearedChargeRadius,
385 const double smearingTemperature,
386 const double fermiEnergyTolerance,
387 const double fracOccupancyTolerance,
388 const double eigenSolveResidualTolerance,
389 const double scfDensityResidualNormTolerance,
392 const bool evaluateEnergyEverySCF,
395 const double mixingParameter,
396 const bool isAdaptiveAndersonMixingParameter,
398 const atoms::AtomSuperpositionFunction<memorySpace>
399 &atomicElectronicChargeDensityFunction,
403 const basis::FEBasisManager<ValueTypeElectrostaticsCoeff,
404 ValueTypeElectrostaticsBasis,
406 dim>> feBMTotalCharge,
407 std::shared_ptr<
const basis::FEBasisManager<ValueTypeWaveFunctionCoeff,
408 ValueTypeWaveFunctionBasis,
413 const basis::FEBasisDataStorage<ValueTypeElectrostaticsBasis,
415 feBDTotalChargeStiffnessMatrix,
417 const basis::FEBasisDataStorage<ValueTypeElectrostaticsBasis,
419 feBDNuclearChargeRhs,
421 const basis::FEBasisDataStorage<ValueTypeElectrostaticsBasis,
423 feBDElectronicChargeRhs,
426 const basis::FEBasisDataStorage<ValueTypeWaveFunctionBasis,
427 memorySpace>> feBDKineticHamiltonian,
429 const basis::FEBasisDataStorage<ValueTypeWaveFunctionBasis,
431 feBDElectrostaticsHamiltonian,
433 const basis::FEBasisDataStorage<ValueTypeWaveFunctionBasis,
434 memorySpace>> feBDEXCHamiltonian,
437 const basis::FEBasisDataStorage<ValueTypeWaveFunctionBasis,
439 feBDAtomCenterNonLocalOperator,
440 const std::map<std::string, std::string> &atomSymbolToPSPFilename,
442 const std::string &xcType,
444 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpace>>
459 bool isResidualChebyshevFilter =
true,
460 const std::vector<double> &atomMagZFactors = {},
466 const size_type chebyshevPolynomialDegree = 0,
467 const double spinMixingEnhancementFactor =
475 const std::vector<utils::Point> &atomCoordinates,
476 const std::vector<double> & atomCharges,
477 const std::vector<std::string> & atomSymbolVec,
478 const double & smearedChargeRadius,
482 const double smearingTemperature,
483 const double fermiEnergyTolerance,
484 const double fracOccupancyTolerance,
485 const double eigenSolveResidualTolerance,
486 const double scfDensityResidualNormTolerance,
489 const bool evaluateEnergyEverySCF,
492 const double mixingParameter,
493 const bool isAdaptiveAndersonMixingParameter,
495 const atoms::AtomSuperpositionFunction<memorySpace>
496 &atomicTotalElectroPotentialFunction,
497 const atoms::AtomSuperpositionFunction<memorySpace>
498 &atomicElectronicChargeDensityFunction,
501 const basis::FEBasisManager<ValueTypeElectrostaticsCoeff,
502 ValueTypeElectrostaticsBasis,
504 dim>> feBMTotalCharge,
505 std::shared_ptr<
const basis::FEBasisManager<ValueTypeWaveFunctionCoeff,
506 ValueTypeWaveFunctionBasis,
511 const basis::FEBasisDataStorage<ValueTypeElectrostaticsBasis,
513 feBDTotalChargeStiffnessMatrix,
515 const basis::FEBasisDataStorage<ValueTypeElectrostaticsBasis,
517 feBDNuclearChargeRhs,
519 const basis::FEBasisDataStorage<ValueTypeElectrostaticsBasis,
521 feBDElectronicChargeRhs,
524 const basis::FEBasisDataStorage<ValueTypeWaveFunctionBasis,
525 memorySpace>> feBDKineticHamiltonian,
527 const basis::FEBasisDataStorage<ValueTypeWaveFunctionBasis,
529 feBDElectrostaticsHamiltonian,
531 const basis::FEBasisDataStorage<ValueTypeWaveFunctionBasis,
532 memorySpace>> feBDEXCHamiltonian,
535 const basis::FEBasisDataStorage<ValueTypeWaveFunctionBasis,
537 feBDAtomCenterNonLocalOperator,
538 const std::map<std::string, std::string> &atomSymbolToPSPFilename,
540 const std::string &xcType,
542 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpace>>
557 bool isResidualChebyshevFilter =
false,
560 const std::vector<double> & atomMagZFactors = {},
566 const size_type chebyshevPolynomialDegree = 0,
567 const double spinMixingEnhancementFactor =
584 const std::shared_ptr<
585 KohnShamOperatorContextFE<ValueTypeElectrostaticsCoeff,
586 ValueTypeElectrostaticsBasis,
587 ValueTypeWaveFunctionCoeff,
588 ValueTypeWaveFunctionBasis,
596 const std::shared_ptr<
KineticFE<ValueTypeWaveFunctionBasis,
597 ValueTypeWaveFunctionCoeff,
606 ValueTypeElectrostaticsCoeff,
607 ValueTypeWaveFunctionBasis,
616 ValueTypeWaveFunctionCoeff,
634 ValueTypeWaveFunctionCoeff>,
639 ValueTypeWaveFunctionCoeff>,
643 ValueTypeElectrostaticsBasis,
644 ValueTypeWaveFunctionCoeff,
645 ValueTypeWaveFunctionBasis,
650 ValueTypeWaveFunctionCoeff,
655 ValueTypeElectrostaticsCoeff,
656 ValueTypeWaveFunctionBasis,
660 std::shared_ptr<
KineticFE<ValueTypeWaveFunctionBasis,
661 ValueTypeWaveFunctionCoeff,
667 ValueTypeWaveFunctionBasis,
678 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpace>>
693 ValueTypeElectrostaticsBasis,
694 ValueTypeWaveFunctionCoeff,
695 ValueTypeWaveFunctionBasis,
702 std::shared_ptr<atoms::AtomSphericalDataContainer>
708 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpaceHost>>
Definition: AtomSuperpositionFunction.h:55
An abstract class to store and access data for a given basis, such as the basis function values on a ...
Definition: FEBasisDataStorage.h:54
An abstract class to encapsulate the partitioning of a finite element basis across multiple processor...
Definition: FEBasisManager.h:44
Definition: ElectrostaticExcFE.h:54
A derived class of linearAlgebra::OperatorContext to encapsulate the action of a discrete operator on...
Definition: ElectrostaticFE.h:66
Definition: ExchangeCorrelationFE.h:57
Definition: KineticFE.h:52
Definition: KohnShamDFT.h:58
const utils::mpi::MPIComm & d_mpiCommDomain
Definition: KohnShamDFT.h:676
std::vector< RealType > d_kohnShamEnergies
Definition: KohnShamDFT.h:671
std::shared_ptr< RDM1Spectral< linearAlgebra::blasLapack::scalar_type< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff >, memorySpace > > d_rdm1Spectral
Definition: KohnShamDFT.h:636
std::shared_ptr< linearAlgebra::ElpaScalapackManager > d_elpaScala
Definition: KohnShamDFT.h:707
utils::Profiler< memorySpace > d_p
Definition: KohnShamDFT.h:689
linearAlgebra::blasLapack::real_type< ValueType > RealType
Definition: KohnShamDFT.h:75
const size_type d_numElectrons
Definition: KohnShamDFT.h:680
double d_smearingTemperature
Definition: KohnShamDFT.h:710
bool d_isOEFEBasis
Definition: KohnShamDFT.h:700
std::shared_ptr< atoms::AtomSphericalDataContainer > d_atomSphericalDataContainerPSP
Definition: KohnShamDFT.h:703
const OpContext * d_MContext
Definition: KohnShamDFT.h:675
const size_type d_numWantedEigenvalues
Definition: KohnShamDFT.h:626
bool d_isSolved
Definition: KohnShamDFT.h:688
std::shared_ptr< const basis::FEBasisManager< ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_feBMWaveFn
Definition: KohnShamDFT.h:670
bool d_isONCVNonLocPSP
Definition: KohnShamDFT.h:705
std::string d_xcType
Definition: KohnShamDFT.h:711
bool d_isNlcc
Definition: KohnShamDFT.h:705
MixingScheme< RealType, RealType > d_mixingScheme
Definition: KohnShamDFT.h:677
void printTotalInScopeTimings()
Definition: KohnShamDFT.t.cpp:3942
linearAlgebra::blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperator > ValueType
Definition: KohnShamDFT.h:74
const std::shared_ptr< KineticFE< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff, memorySpace, dim > > & getHamitonianKin() const
Definition: KohnShamDFT.h:600
double d_freeEnergy
Definition: KohnShamDFT.h:710
const std::shared_ptr< ExchangeCorrelationFE< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff, memorySpace, dim > > & getHamitonianXC() const
Definition: KohnShamDFT.h:619
double getFreeEnergy()
Definition: KohnShamDFT.t.cpp:3922
utils::Profiler< memorySpace > d_pTotal
Definition: KohnShamDFT.h:689
std::vector< RealType > d_jxwDataHost
Definition: KohnShamDFT.h:628
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeWaveFunctionBasis, memorySpace > > d_feBDEXCHamiltonian
Definition: KohnShamDFT.h:685
bool d_isResidualChebyshevFilter
Definition: KohnShamDFT.h:699
RealType d_groundStateEnergy
Definition: KohnShamDFT.h:687
size_type d_numMaxSCFIter
Definition: KohnShamDFT.h:674
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpaceHost > > d_linAlgOpContextHost
Definition: KohnShamDFT.h:709
typename linearAlgebra::HermitianIterativeEigenSolver< ValueTypeOperator, ValueTypeOperand, memorySpace >::OpContext OpContext
Definition: KohnShamDFT.h:79
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > d_linAlgOpContext
Definition: KohnShamDFT.h:679
std::shared_ptr< KineticFE< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff, memorySpace, dim > > d_hamitonianKin
Definition: KohnShamDFT.h:664
linearAlgebra::blasLapack::scalar_type< ValueTypeElectrostaticsBasis, ValueTypeWaveFunctionBasis > ValueTypeOperator
Definition: KohnShamDFT.h:68
std::shared_ptr< KohnShamEigenSolver< ValueTypeOperator, ValueTypeOperand, memorySpace > > d_ksEigSolve
Definition: KohnShamDFT.h:631
SpinMode d_spinMode
Definition: KohnShamDFT.h:625
bool d_evaluateEnergyEverySCF
Definition: KohnShamDFT.h:673
utils::ConditionalOStream d_rootCout
Definition: KohnShamDFT.h:672
std::shared_ptr< ElectrostaticExcFE< ValueTypeElectrostaticsCoeff, ValueTypeElectrostaticsBasis, ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_hamiltonianElectroExc
Definition: KohnShamDFT.h:698
const std::shared_ptr< ElectrostaticFE< ValueTypeElectrostaticsBasis, ValueTypeElectrostaticsCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > & getHamitonianElec() const
Definition: KohnShamDFT.h:610
std::variant< std::shared_ptr< Hamiltonian< float, memorySpace > >, std::shared_ptr< Hamiltonian< double, memorySpace > >, std::shared_ptr< Hamiltonian< std::complex< float >, memorySpace > >, std::shared_ptr< Hamiltonian< std::complex< double >, memorySpace > > > HamiltonianPtrVariant
Definition: KohnShamDFT.h:64
const double d_SCFTol
Definition: KohnShamDFT.h:627
void solve()
Definition: KohnShamDFT.t.cpp:3283
KohnShamDFT(const std::vector< utils::Point > &atomCoordinates, const std::vector< double > &atomCharges, const double &smearedChargeRadius, const size_type numElectrons, const size_type numWantedEigenvalues, const double smearingTemperature, const double fermiEnergyTolerance, const double fracOccupancyTolerance, const double eigenSolveResidualTolerance, const double scfDensityResidualNormTolerance, const size_type maxChebyshevFilterPass, const size_type maxSCFIter, const bool evaluateEnergyEverySCF, const size_type mixingHistory, const double mixingParameter, const bool isAdaptiveAndersonMixingParameter, const atoms::AtomSuperpositionFunction< memorySpace > &atomicElectronicChargeDensityFunction, std::shared_ptr< const basis::FEBasisManager< ValueTypeElectrostaticsCoeff, ValueTypeElectrostaticsBasis, memorySpaceHost, dim > > feBMTotalCharge, std::shared_ptr< const basis::FEBasisManager< ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > feBMWaveFn, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeElectrostaticsBasis, memorySpaceHost > > feBDTotalChargeStiffnessMatrix, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeElectrostaticsBasis, memorySpaceHost > > feBDNuclearChargeRhs, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeElectrostaticsBasis, memorySpaceHost > > feBDElectronicChargeRhs, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeWaveFunctionBasis, memorySpace > > feBDKineticHamiltonian, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeWaveFunctionBasis, memorySpace > > feBDElectrostaticsHamiltonian, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeWaveFunctionBasis, memorySpace > > feBDEXCHamiltonian, const utils::ScalarSpatialFunctionReal &externalPotentialFunction, const std::string &xcType, std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > linAlgOpContext, const OpContext &MContextForInv=linearAlgebra::IdentityOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace >(), const OpContext &MContext=linearAlgebra::IdentityOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace >(), const OpContext &MInvContext=linearAlgebra::IdentityOperatorContext< ValueTypeOperator, ValueTypeOperand, memorySpace >(), bool isResidualChebyshevFilter=true, const std::vector< double > &atomMagZFactors={}, SpinMode spinMode=SpinMode::Unpolarized, bool isGHEP=true, linearAlgebra::OrthogonalizationType orthoType=linearAlgebra::OrthogonalizationType::CHOLESKY_GRAMSCHMIDT, const size_type chebyshevPolynomialDegree=0, const double spinMixingEnhancementFactor=MixingDefaults::SPIN_MIXING_ENHANCEMENT_FACTOR)
Definition: KohnShamDFT.t.cpp:303
const OpContext * d_MInvContext
Definition: KohnShamDFT.h:675
~KohnShamDFT()
Definition: KohnShamDFT.t.cpp:3266
const std::shared_ptr< KohnShamOperatorContextFE< ValueTypeElectrostaticsCoeff, ValueTypeElectrostaticsBasis, ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > & getHamiltonianOperator() const
Definition: KohnShamDFT.h:591
std::shared_ptr< KohnShamOperatorContextFE< ValueTypeElectrostaticsCoeff, ValueTypeElectrostaticsBasis, ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_hamitonianOperator
Definition: KohnShamDFT.h:648
double getGroundStateEnergy()
Definition: KohnShamDFT.t.cpp:3902
std::shared_ptr< RDM1Mixing< linearAlgebra::blasLapack::scalar_type< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff >, memorySpace > > d_rdm1Mix
Definition: KohnShamDFT.h:641
CalculationType d_calculationType
Definition: KohnShamDFT.h:690
std::shared_ptr< ExchangeCorrelationFE< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff, memorySpace, dim > > d_hamitonianXC
Definition: KohnShamDFT.h:653
linearAlgebra::blasLapack::scalar_type< ValueTypeElectrostaticsCoeff, ValueTypeWaveFunctionCoeff > ValueTypeOperand
Definition: KohnShamDFT.h:71
std::shared_ptr< ElectrostaticFE< ValueTypeElectrostaticsBasis, ValueTypeElectrostaticsCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_hamitonianElec
Definition: KohnShamDFT.h:659
Definition: KohnShamEigenSolver.h:63
A derived class of linearAlgebra::OperatorContext to encapsulate the action of a discrete Kohn-Sham o...
Definition: KohnShamOperatorContextFE.h:71
static const double SPIN_MIXING_ENHANCEMENT_FACTOR
Setting all the MixingDefaults.
Definition: Defaults.h:208
This class performs the anderson mixing in a variable agnostic way This class takes can take differen...
Definition: MixingScheme.h:72
RDM1 implementation that performs Anderson mixing of the electron density. Derives directly from RDM1...
Definition: RDM1Mixing.h:64
Intermediate abstract class that stores the spectral (eigen) decomposition of the one-particle reduce...
Definition: RDM1Spectral.h:63
static const atoms::TCIADataParams TCIA_PARAMS
Definition: Defaults.h:189
Abstract class to encapsulate the action of a discrete operator on vectors, matrices,...
Definition: IdentityOperatorContext.h:53
Definition: LinAlgOpContext.h:52
Provides an interface to print based on whether a certain condition is met or not....
Definition: ConditionalOStream.h:47
Definition: Profiler.h:50
Abstract base for scalar functions of a spatial point.
Definition: ScalarSpatialFunction.h:23
SpinMode
Definition: KSAttributes.h:55
CalculationType
Definition: KSAttributes.h:66
typeInternal::real_type< ValueType > real_type
Definition: BlasLapackTypedef.h:177
typeInternal::scalar_type< ValueType1, ValueType2 > scalar_type
Definition: BlasLapackTypedef.h:183
OrthogonalizationType
Definition: ChebyshevFilteredEigenSolver.h:47
int MPIComm
Definition: MPITypes.h:84
MemorySpace
Definition: MemorySpaceType.h:37
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
std::uint64_t size_type
Definition: TypeConfig.h:9
static constexpr utils::MemorySpace memorySpaceHost
Definition: Defaults.h:213
Definition: AtomTCIASpline.h:44