26#ifndef dftefeKohnShamDFT_h
27#define dftefeKohnShamDFT_h
47 template <
typename ValueTypeElectrostaticsCoeff,
48 typename ValueTypeElectrostaticsBasis,
49 typename ValueTypeWaveFunctionCoeff,
50 typename ValueTypeWaveFunctionBasis,
57 std::shared_ptr<Hamiltonian<float, memorySpace>>,
58 std::shared_ptr<Hamiltonian<double, memorySpace>>,
59 std::shared_ptr<Hamiltonian<std::complex<float>, memorySpace>>,
60 std::shared_ptr<Hamiltonian<std::complex<double>, memorySpace>>>;
64 ValueTypeWaveFunctionBasis>;
67 ValueTypeWaveFunctionCoeff>;
72 using OpContext =
typename linearAlgebra::HermitianIterativeEigenSolver<
81 const std::vector<utils::Point> &atomCoordinates,
82 const std::vector<double> & atomCharges,
83 const double & smearedChargeRadius,
87 const double smearingTemperature,
88 const double fermiEnergyTolerance,
89 const double fracOccupancyTolerance,
90 const double eigenSolveResidualTolerance,
91 const double scfDensityResidualNormTolerance,
94 const bool evaluateEnergyEverySCF,
97 const double mixingParameter,
98 const bool isAdaptiveAndersonMixingParameter,
101 &electronChargeDensityInput,
106 ValueTypeElectrostaticsBasis,
108 dim>> feBMTotalCharge,
110 ValueTypeWaveFunctionBasis,
117 feBDTotalChargeStiffnessMatrix,
120 memorySpace>> feBDNuclearChargeRhs,
123 memorySpace>> feBDElectronicChargeRhs,
127 memorySpace>> feBDKineticHamiltonian,
131 feBDElectrostaticsHamiltonian,
134 memorySpace>> feBDEXCHamiltonian,
153 bool isResidualChebyshevFilter =
true);
159 const std::vector<utils::Point> &atomCoordinates,
160 const std::vector<double> & atomCharges,
161 const double & smearedChargeRadius,
165 const double smearingTemperature,
166 const double fermiEnergyTolerance,
167 const double fracOccupancyTolerance,
168 const double eigenSolveResidualTolerance,
169 const double scfDensityResidualNormTolerance,
172 const bool evaluateEnergyEverySCF,
175 const double mixingParameter,
176 const bool isAdaptiveAndersonMixingParameter,
179 &electronChargeDensityInput,
184 ValueTypeElectrostaticsBasis,
186 dim>> feBMTotalCharge,
188 ValueTypeWaveFunctionBasis,
195 feBDTotalChargeStiffnessMatrix,
198 memorySpace>> feBDNuclearChargeRhs,
201 memorySpace>> feBDElectronicChargeRhs,
205 feBDNuclChargeStiffnessMatrixNumSol,
208 memorySpace>> feBDNuclChargeRhsNumSol,
212 memorySpace>> feBDKineticHamiltonian,
216 feBDElectrostaticsHamiltonian,
219 memorySpace>> feBDEXCHamiltonian,
238 bool isResidualChebyshevFilter =
true);
244 const std::vector<utils::Point> &atomCoordinates,
245 const std::vector<double> & atomCharges,
246 const std::vector<std::string> & atomSymbolVec,
247 const double & smearedChargeRadius,
251 const double smearingTemperature,
252 const double fermiEnergyTolerance,
253 const double fracOccupancyTolerance,
254 const double eigenSolveResidualTolerance,
255 const double scfDensityResidualNormTolerance,
258 const bool evaluateEnergyEverySCF,
261 const double mixingParameter,
262 const bool isAdaptiveAndersonMixingParameter,
275 &atomicTotalElectroPotentialFunction,
277 &atomicElectronicChargeDensityFunction,
281 ValueTypeElectrostaticsBasis,
283 dim>> feBMTotalCharge,
285 ValueTypeWaveFunctionBasis,
292 feBDTotalChargeStiffnessMatrix,
295 memorySpace>> feBDNuclearChargeRhs,
298 memorySpace>> feBDElectronicChargeRhs,
302 memorySpace>> feBDKineticHamiltonian,
306 feBDElectrostaticsHamiltonian,
309 memorySpace>> feBDEXCHamiltonian,
328 bool isResidualChebyshevFilter =
true,
335 const std::vector<utils::Point> &atomCoordinates,
336 const std::vector<double> & atomCharges,
337 const std::vector<std::string> & atomSymbolVec,
338 const double & smearedChargeRadius,
342 const double smearingTemperature,
343 const double fermiEnergyTolerance,
344 const double fracOccupancyTolerance,
345 const double eigenSolveResidualTolerance,
346 const double scfDensityResidualNormTolerance,
349 const bool evaluateEnergyEverySCF,
352 const double mixingParameter,
353 const bool isAdaptiveAndersonMixingParameter,
358 ValueTypeElectrostaticsBasis,
360 dim>> feBMTotalCharge,
362 ValueTypeWaveFunctionBasis,
369 feBDTotalChargeStiffnessMatrix,
372 memorySpace>> feBDNuclearChargeRhs,
375 memorySpace>> feBDElectronicChargeRhs,
379 memorySpace>> feBDKineticHamiltonian,
383 feBDElectrostaticsHamiltonian,
386 memorySpace>> feBDEXCHamiltonian,
391 feBDAtomCenterNonLocalOperator,
392 const std::map<std::string, std::string> &atomSymbolToPSPFilename,
409 bool isResidualChebyshevFilter =
true);
416 const std::vector<utils::Point> &atomCoordinates,
417 const std::vector<double> & atomCharges,
418 const std::vector<std::string> & atomSymbolVec,
419 const double & smearedChargeRadius,
423 const double smearingTemperature,
424 const double fermiEnergyTolerance,
425 const double fracOccupancyTolerance,
426 const double eigenSolveResidualTolerance,
427 const double scfDensityResidualNormTolerance,
430 const bool evaluateEnergyEverySCF,
433 const double mixingParameter,
434 const bool isAdaptiveAndersonMixingParameter,
437 &atomicTotalElectroPotentialFunction,
439 &atomicElectronicChargeDensityFunction,
443 ValueTypeElectrostaticsBasis,
445 dim>> feBMTotalCharge,
447 ValueTypeWaveFunctionBasis,
454 feBDTotalChargeStiffnessMatrix,
457 memorySpace>> feBDNuclearChargeRhs,
460 memorySpace>> feBDElectronicChargeRhs,
464 memorySpace>> feBDKineticHamiltonian,
468 feBDElectrostaticsHamiltonian,
471 memorySpace>> feBDEXCHamiltonian,
476 feBDAtomCenterNonLocalOperator,
477 const std::map<std::string, std::string> &atomSymbolToPSPFilename,
494 bool isResidualChebyshevFilter =
true,
521 ValueTypeWaveFunctionCoeff,
526 ValueTypeElectrostaticsBasis,
527 ValueTypeWaveFunctionCoeff,
528 ValueTypeWaveFunctionBasis,
533 ValueTypeWaveFunctionCoeff,
538 ValueTypeElectrostaticsCoeff,
539 ValueTypeWaveFunctionBasis,
543 std::shared_ptr<
KineticFE<ValueTypeWaveFunctionBasis,
544 ValueTypeWaveFunctionCoeff,
550 ValueTypeWaveFunctionBasis,
567 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpace>>
586 ValueTypeElectrostaticsBasis,
587 ValueTypeWaveFunctionCoeff,
588 ValueTypeWaveFunctionBasis,
595 std::shared_ptr<atoms::AtomSphericalDataContainer>
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: DensityCalculator.h:42
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:51
Definition: KineticFE.h:49
Definition: KohnShamDFT.h:54
const utils::mpi::MPIComm & d_mpiCommDomain
Definition: KohnShamDFT.h:565
std::vector< RealType > d_kohnShamEnergies
Definition: KohnShamDFT.h:554
std::shared_ptr< linearAlgebra::ElpaScalapackManager > d_elpaScala
Definition: KohnShamDFT.h:604
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_coreCorrDensUPF
Definition: KohnShamDFT.h:562
linearAlgebra::Vector< ValueTypeWaveFunctionCoeff, memorySpace > d_lanczosGuess
Definition: KohnShamDFT.h:570
linearAlgebra::blasLapack::real_type< ValueType > RealType
Definition: KohnShamDFT.h:71
const size_type d_numElectrons
Definition: KohnShamDFT.h:573
double d_smearingTemperature
Definition: KohnShamDFT.h:606
bool d_isOEFEBasis
Definition: KohnShamDFT.h:593
std::shared_ptr< atoms::AtomSphericalDataContainer > d_atomSphericalDataContainerPSP
Definition: KohnShamDFT.h:596
const OpContext * d_MContext
Definition: KohnShamDFT.h:564
quadrature::QuadratureValuesContainer< ValueTypeElectrostaticsCoeff, memorySpace > d_atomicTotalElecPotElectronicQuad
Definition: KohnShamDFT.h:602
const size_type d_numWantedEigenvalues
Definition: KohnShamDFT.h:513
bool d_isSolved
Definition: KohnShamDFT.h:581
std::shared_ptr< const basis::FEBasisManager< ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_feBMWaveFn
Definition: KohnShamDFT.h:553
bool d_isONCVNonLocPSP
Definition: KohnShamDFT.h:598
std::vector< RealType > d_occupation
Definition: KohnShamDFT.h:514
bool d_isNlcc
Definition: KohnShamDFT.h:598
MixingScheme< RealType, RealType > d_mixingScheme
Definition: KohnShamDFT.h:566
void printTotalInScopeTimings()
Definition: KohnShamDFT.t.cpp:3044
linearAlgebra::blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperator > ValueType
Definition: KohnShamDFT.h:70
quadrature::QuadratureValuesContainer< ValueTypeElectrostaticsCoeff, memorySpace > d_atomicTotalElecPotNuclearQuad
Definition: KohnShamDFT.h:602
bool d_isAdaptiveAndersonMixingParameter
Definition: KohnShamDFT.h:558
double d_freeEnergy
Definition: KohnShamDFT.h:606
utils::MemoryStorage< RealType, utils::MemorySpace::HOST > d_jxwDataHost
Definition: KohnShamDFT.h:516
double getFreeEnergy()
Definition: KohnShamDFT.t.cpp:3024
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_densityOutQuadValues
Definition: KohnShamDFT.h:561
size_type d_mixingHistory
Definition: KohnShamDFT.h:556
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeWaveFunctionBasis, memorySpace > > d_feBDEXCHamiltonian
Definition: KohnShamDFT.h:578
bool d_isResidualChebyshevFilter
Definition: KohnShamDFT.h:592
double d_mixingParameter
Definition: KohnShamDFT.h:557
RealType d_groundStateEnergy
Definition: KohnShamDFT.h:580
size_type d_numMaxSCFIter
Definition: KohnShamDFT.h:563
typename linearAlgebra::HermitianIterativeEigenSolver< ValueTypeOperator, ValueTypeOperand, memorySpace >::OpContext OpContext
Definition: KohnShamDFT.h:75
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > d_linAlgOpContext
Definition: KohnShamDFT.h:568
std::shared_ptr< KineticFE< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff, memorySpace, dim > > d_hamitonianKin
Definition: KohnShamDFT.h:547
utils::Profiler d_pTotal
Definition: KohnShamDFT.h:582
linearAlgebra::blasLapack::scalar_type< ValueTypeElectrostaticsBasis, ValueTypeWaveFunctionBasis > ValueTypeOperator
Definition: KohnShamDFT.h:64
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_densityInQuadValues
Definition: KohnShamDFT.h:561
std::shared_ptr< KohnShamEigenSolver< ValueTypeOperator, ValueTypeOperand, memorySpace > > d_ksEigSolve
Definition: KohnShamDFT.h:519
bool d_evaluateEnergyEverySCF
Definition: KohnShamDFT.h:559
utils::ConditionalOStream d_rootCout
Definition: KohnShamDFT.h:555
std::shared_ptr< ElectrostaticExcFE< ValueTypeElectrostaticsCoeff, ValueTypeElectrostaticsBasis, ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_hamiltonianElectroExc
Definition: KohnShamDFT.h:591
utils::Profiler d_p
Definition: KohnShamDFT.h:582
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:60
const double d_SCFTol
Definition: KohnShamDFT.h:515
void solve()
Definition: KohnShamDFT.t.cpp:2464
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_densityResidualQuadValues
Definition: KohnShamDFT.h:562
bool d_isPSPCalculation
Definition: KohnShamDFT.h:583
const OpContext * d_MInvContext
Definition: KohnShamDFT.h:564
linearAlgebra::MultiVector< ValueTypeWaveFunctionCoeff, memorySpace > d_kohnShamWaveFunctions
Definition: KohnShamDFT.h:572
std::shared_ptr< DensityCalculator< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff, memorySpace, dim > > d_densCalc
Definition: KohnShamDFT.h:524
~KohnShamDFT()
Definition: KohnShamDFT.t.cpp:2447
std::shared_ptr< KohnShamOperatorContextFE< ValueTypeElectrostaticsCoeff, ValueTypeElectrostaticsBasis, ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_hamitonianOperator
Definition: KohnShamDFT.h:531
double getGroundStateEnergy()
Definition: KohnShamDFT.t.cpp:3004
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_coreCorrectedDensity
Definition: KohnShamDFT.h:562
std::shared_ptr< ExchangeCorrelationFE< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff, memorySpace, dim > > d_hamitonianXC
Definition: KohnShamDFT.h:536
linearAlgebra::blasLapack::scalar_type< ValueTypeElectrostaticsCoeff, ValueTypeWaveFunctionCoeff > ValueTypeOperand
Definition: KohnShamDFT.h:67
std::shared_ptr< ElectrostaticFE< ValueTypeElectrostaticsBasis, ValueTypeElectrostaticsCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_hamitonianElec
Definition: KohnShamDFT.h:542
Definition: KohnShamEigenSolver.h:61
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:61
static const atoms::TCIADataParams TCIA_PARAMS
Definition: Defaults.h:171
Abstract class to encapsulate the action of a discrete operator on vectors, matrices,...
Definition: IdentityOperatorContext.h:53
Definition: LinAlgOpContext.h:38
An class template to encapsulate a MultiVector. A MultiVector is a collection of vectors belonging t...
Definition: MultiVector.h:134
A class that encapsulates a vector. This is a vector in the mathematical sense and not in the sense o...
Definition: Vector.h:122
Definition: QuadratureValuesContainer.h:39
Provides an interface to print based on whether a certain condition is met or not....
Definition: ConditionalOStream.h:47
Definition: Function.h:10
Definition: MemoryStorage.h:38
Definition: Profiler.h:44
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
unsigned int size_type
Definition: TypeConfig.h:8
Definition: AtomTCIASpline.h:44