26#ifndef dftefeKohnShamDFT_h
27#define dftefeKohnShamDFT_h
49 template <
typename ValueTypeElectrostaticsCoeff,
50 typename ValueTypeElectrostaticsBasis,
51 typename ValueTypeWaveFunctionCoeff,
52 typename ValueTypeWaveFunctionBasis,
59 std::shared_ptr<Hamiltonian<float, memorySpace>>,
60 std::shared_ptr<Hamiltonian<double, memorySpace>>,
61 std::shared_ptr<Hamiltonian<std::complex<float>, memorySpace>>,
62 std::shared_ptr<Hamiltonian<std::complex<double>, memorySpace>>>;
66 ValueTypeWaveFunctionBasis>;
69 ValueTypeWaveFunctionCoeff>;
74 using OpContext =
typename linearAlgebra::HermitianIterativeEigenSolver<
83 const std::vector<utils::Point> &atomCoordinates,
84 const std::vector<double> & atomCharges,
85 const double & smearedChargeRadius,
89 const double smearingTemperature,
90 const double fermiEnergyTolerance,
91 const double fracOccupancyTolerance,
92 const double eigenSolveResidualTolerance,
93 const double scfDensityResidualNormTolerance,
96 const bool evaluateEnergyEverySCF,
99 const double mixingParameter,
100 const bool isAdaptiveAndersonMixingParameter,
103 &atomicElectronicChargeDensityFunction,
108 ValueTypeElectrostaticsBasis,
110 dim>> feBMTotalCharge,
112 ValueTypeWaveFunctionBasis,
119 feBDTotalChargeStiffnessMatrix,
123 feBDNuclearChargeRhs,
127 feBDElectronicChargeRhs,
131 memorySpace>> feBDKineticHamiltonian,
135 feBDElectrostaticsHamiltonian,
138 memorySpace>> feBDEXCHamiltonian,
142 const std::string &xcType,
159 bool isResidualChebyshevFilter =
true);
165 const std::vector<utils::Point> &atomCoordinates,
166 const std::vector<double> & atomCharges,
167 const double & smearedChargeRadius,
171 const double smearingTemperature,
172 const double fermiEnergyTolerance,
173 const double fracOccupancyTolerance,
174 const double eigenSolveResidualTolerance,
175 const double scfDensityResidualNormTolerance,
178 const bool evaluateEnergyEverySCF,
181 const double mixingParameter,
182 const bool isAdaptiveAndersonMixingParameter,
185 &atomicElectronicChargeDensityFunction,
190 ValueTypeElectrostaticsBasis,
192 dim>> feBMTotalCharge,
194 ValueTypeWaveFunctionBasis,
201 feBDTotalChargeStiffnessMatrix,
205 feBDNuclearChargeRhs,
209 feBDElectronicChargeRhs,
213 feBDNuclChargeStiffnessMatrixNumSol,
217 feBDNuclChargeRhsNumSol,
221 memorySpace>> feBDKineticHamiltonian,
225 feBDElectrostaticsHamiltonian,
228 memorySpace>> feBDEXCHamiltonian,
232 const std::string &xcType,
249 bool isResidualChebyshevFilter =
true);
255 const std::vector<utils::Point> &atomCoordinates,
256 const std::vector<double> & atomCharges,
257 const std::vector<std::string> & atomSymbolVec,
258 const double & smearedChargeRadius,
262 const double smearingTemperature,
263 const double fermiEnergyTolerance,
264 const double fracOccupancyTolerance,
265 const double eigenSolveResidualTolerance,
266 const double scfDensityResidualNormTolerance,
269 const bool evaluateEnergyEverySCF,
272 const double mixingParameter,
273 const bool isAdaptiveAndersonMixingParameter,
276 &atomicTotalElectroPotentialFunction,
278 &atomicElectronicChargeDensityFunction,
282 ValueTypeElectrostaticsBasis,
284 dim>> feBMTotalCharge,
286 ValueTypeWaveFunctionBasis,
293 feBDTotalChargeStiffnessMatrix,
297 feBDNuclearChargeRhs,
301 feBDElectronicChargeRhs,
305 memorySpace>> feBDKineticHamiltonian,
309 feBDElectrostaticsHamiltonian,
312 memorySpace>> feBDEXCHamiltonian,
316 const std::string &xcType,
333 bool isResidualChebyshevFilter =
true,
340 const std::vector<utils::Point> &atomCoordinates,
341 const std::vector<double> & atomCharges,
342 const std::vector<std::string> & atomSymbolVec,
343 const double & smearedChargeRadius,
347 const double smearingTemperature,
348 const double fermiEnergyTolerance,
349 const double fracOccupancyTolerance,
350 const double eigenSolveResidualTolerance,
351 const double scfDensityResidualNormTolerance,
354 const bool evaluateEnergyEverySCF,
357 const double mixingParameter,
358 const bool isAdaptiveAndersonMixingParameter,
361 &atomicElectronicChargeDensityFunction,
366 ValueTypeElectrostaticsBasis,
368 dim>> feBMTotalCharge,
370 ValueTypeWaveFunctionBasis,
377 feBDTotalChargeStiffnessMatrix,
381 feBDNuclearChargeRhs,
385 feBDElectronicChargeRhs,
389 memorySpace>> feBDKineticHamiltonian,
393 feBDElectrostaticsHamiltonian,
396 memorySpace>> feBDEXCHamiltonian,
401 feBDAtomCenterNonLocalOperator,
402 const std::map<std::string, std::string> &atomSymbolToPSPFilename,
404 const std::string &xcType,
421 bool isResidualChebyshevFilter =
true);
428 const std::vector<utils::Point> &atomCoordinates,
429 const std::vector<double> & atomCharges,
430 const std::vector<std::string> & atomSymbolVec,
431 const double & smearedChargeRadius,
435 const double smearingTemperature,
436 const double fermiEnergyTolerance,
437 const double fracOccupancyTolerance,
438 const double eigenSolveResidualTolerance,
439 const double scfDensityResidualNormTolerance,
442 const bool evaluateEnergyEverySCF,
445 const double mixingParameter,
446 const bool isAdaptiveAndersonMixingParameter,
449 &atomicTotalElectroPotentialFunction,
451 &atomicElectronicChargeDensityFunction,
455 ValueTypeElectrostaticsBasis,
457 dim>> feBMTotalCharge,
459 ValueTypeWaveFunctionBasis,
466 feBDTotalChargeStiffnessMatrix,
470 feBDNuclearChargeRhs,
474 feBDElectronicChargeRhs,
478 memorySpace>> feBDKineticHamiltonian,
482 feBDElectrostaticsHamiltonian,
485 memorySpace>> feBDEXCHamiltonian,
490 feBDAtomCenterNonLocalOperator,
491 const std::map<std::string, std::string> &atomSymbolToPSPFilename,
493 const std::string &xcType,
510 bool isResidualChebyshevFilter =
true,
537 ValueTypeWaveFunctionCoeff>,
542 ValueTypeWaveFunctionCoeff>,
546 ValueTypeElectrostaticsBasis,
547 ValueTypeWaveFunctionCoeff,
548 ValueTypeWaveFunctionBasis,
553 ValueTypeWaveFunctionCoeff,
558 ValueTypeElectrostaticsCoeff,
559 ValueTypeWaveFunctionBasis,
563 std::shared_ptr<
KineticFE<ValueTypeWaveFunctionBasis,
564 ValueTypeWaveFunctionCoeff,
570 ValueTypeWaveFunctionBasis,
581 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpace>>
596 ValueTypeElectrostaticsBasis,
597 ValueTypeWaveFunctionCoeff,
598 ValueTypeWaveFunctionBasis,
605 std::shared_ptr<atoms::AtomSphericalDataContainer>
611 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:65
Definition: ExchangeCorrelationFE.h:54
Definition: KineticFE.h:49
Definition: KohnShamDFT.h:56
const utils::mpi::MPIComm & d_mpiCommDomain
Definition: KohnShamDFT.h:579
std::vector< RealType > d_kohnShamEnergies
Definition: KohnShamDFT.h:574
std::shared_ptr< RDM1Spectral< linearAlgebra::blasLapack::scalar_type< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff >, memorySpace > > d_rdm1Spectral
Definition: KohnShamDFT.h:539
std::shared_ptr< linearAlgebra::ElpaScalapackManager > d_elpaScala
Definition: KohnShamDFT.h:610
utils::Profiler< memorySpace > d_p
Definition: KohnShamDFT.h:592
linearAlgebra::blasLapack::real_type< ValueType > RealType
Definition: KohnShamDFT.h:73
const size_type d_numElectrons
Definition: KohnShamDFT.h:583
double d_smearingTemperature
Definition: KohnShamDFT.h:613
bool d_isOEFEBasis
Definition: KohnShamDFT.h:603
std::shared_ptr< atoms::AtomSphericalDataContainer > d_atomSphericalDataContainerPSP
Definition: KohnShamDFT.h:606
const OpContext * d_MContext
Definition: KohnShamDFT.h:578
const size_type d_numWantedEigenvalues
Definition: KohnShamDFT.h:529
bool d_isSolved
Definition: KohnShamDFT.h:591
std::shared_ptr< const basis::FEBasisManager< ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_feBMWaveFn
Definition: KohnShamDFT.h:573
bool d_isONCVNonLocPSP
Definition: KohnShamDFT.h:608
std::string d_xcType
Definition: KohnShamDFT.h:614
bool d_isNlcc
Definition: KohnShamDFT.h:608
MixingScheme< RealType, RealType > d_mixingScheme
Definition: KohnShamDFT.h:580
void printTotalInScopeTimings()
Definition: KohnShamDFT.t.cpp:3395
linearAlgebra::blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperator > ValueType
Definition: KohnShamDFT.h:72
double d_freeEnergy
Definition: KohnShamDFT.h:613
double getFreeEnergy()
Definition: KohnShamDFT.t.cpp:3375
utils::Profiler< memorySpace > d_pTotal
Definition: KohnShamDFT.h:592
std::vector< RealType > d_jxwDataHost
Definition: KohnShamDFT.h:531
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeWaveFunctionBasis, memorySpace > > d_feBDEXCHamiltonian
Definition: KohnShamDFT.h:588
bool d_isResidualChebyshevFilter
Definition: KohnShamDFT.h:602
RealType d_groundStateEnergy
Definition: KohnShamDFT.h:590
size_type d_numMaxSCFIter
Definition: KohnShamDFT.h:577
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpaceHost > > d_linAlgOpContextHost
Definition: KohnShamDFT.h:612
typename linearAlgebra::HermitianIterativeEigenSolver< ValueTypeOperator, ValueTypeOperand, memorySpace >::OpContext OpContext
Definition: KohnShamDFT.h:77
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > d_linAlgOpContext
Definition: KohnShamDFT.h:582
std::shared_ptr< KineticFE< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff, memorySpace, dim > > d_hamitonianKin
Definition: KohnShamDFT.h:567
linearAlgebra::blasLapack::scalar_type< ValueTypeElectrostaticsBasis, ValueTypeWaveFunctionBasis > ValueTypeOperator
Definition: KohnShamDFT.h:66
std::shared_ptr< KohnShamEigenSolver< ValueTypeOperator, ValueTypeOperand, memorySpace > > d_ksEigSolve
Definition: KohnShamDFT.h:534
bool d_evaluateEnergyEverySCF
Definition: KohnShamDFT.h:576
utils::ConditionalOStream d_rootCout
Definition: KohnShamDFT.h:575
std::shared_ptr< ElectrostaticExcFE< ValueTypeElectrostaticsCoeff, ValueTypeElectrostaticsBasis, ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_hamiltonianElectroExc
Definition: KohnShamDFT.h:601
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:62
const double d_SCFTol
Definition: KohnShamDFT.h:530
void solve()
Definition: KohnShamDFT.t.cpp:2825
bool d_isPSPCalculation
Definition: KohnShamDFT.h:593
const OpContext * d_MInvContext
Definition: KohnShamDFT.h:578
~KohnShamDFT()
Definition: KohnShamDFT.t.cpp:2808
std::shared_ptr< KohnShamOperatorContextFE< ValueTypeElectrostaticsCoeff, ValueTypeElectrostaticsBasis, ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_hamitonianOperator
Definition: KohnShamDFT.h:551
double getGroundStateEnergy()
Definition: KohnShamDFT.t.cpp:3355
std::shared_ptr< RDM1Mixing< linearAlgebra::blasLapack::scalar_type< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff >, memorySpace > > d_rdm1Mix
Definition: KohnShamDFT.h:544
std::shared_ptr< ExchangeCorrelationFE< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff, memorySpace, dim > > d_hamitonianXC
Definition: KohnShamDFT.h:556
linearAlgebra::blasLapack::scalar_type< ValueTypeElectrostaticsCoeff, ValueTypeWaveFunctionCoeff > ValueTypeOperand
Definition: KohnShamDFT.h:69
std::shared_ptr< ElectrostaticFE< ValueTypeElectrostaticsBasis, ValueTypeElectrostaticsCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_hamitonianElec
Definition: KohnShamDFT.h:562
Definition: KohnShamEigenSolver.h:62
A derived class of linearAlgebra::OperatorContext to encapsulate the action of a discrete Kohn-Sham o...
Definition: KohnShamOperatorContextFE.h:70
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:63
Intermediate abstract class that stores the spectral (eigen) decomposition of the one-particle reduce...
Definition: RDM1Spectral.h:46
static const atoms::TCIADataParams TCIA_PARAMS
Definition: Defaults.h:174
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
typeInternal::real_type< ValueType > real_type
Definition: BlasLapackTypedef.h:177
typeInternal::scalar_type< ValueType1, ValueType2 > scalar_type
Definition: BlasLapackTypedef.h:183
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:185
Definition: AtomTCIASpline.h:44