26#ifndef dftefeKohnShamDFT_h
27#define dftefeKohnShamDFT_h
46 template <
typename ValueTypeElectrostaticsCoeff,
47 typename ValueTypeElectrostaticsBasis,
48 typename ValueTypeWaveFunctionCoeff,
49 typename ValueTypeWaveFunctionBasis,
56 std::shared_ptr<Hamiltonian<float, memorySpace>>,
57 std::shared_ptr<Hamiltonian<double, memorySpace>>,
58 std::shared_ptr<Hamiltonian<std::complex<float>, memorySpace>>,
59 std::shared_ptr<Hamiltonian<std::complex<double>, memorySpace>>>;
63 ValueTypeWaveFunctionBasis>;
66 ValueTypeWaveFunctionCoeff>;
71 using OpContext =
typename linearAlgebra::HermitianIterativeEigenSolver<
80 const std::vector<utils::Point> &atomCoordinates,
81 const std::vector<double> & atomCharges,
82 const std::vector<double> & smearedChargeRadius,
86 const double smearingTemperature,
87 const double fermiEnergyTolerance,
88 const double fracOccupancyTolerance,
89 const double eigenSolveResidualTolerance,
90 const double scfDensityResidualNormTolerance,
93 const bool evaluateEnergyEverySCF,
96 const double mixingParameter,
97 const bool isAdaptiveAndersonMixingParameter,
100 &electronChargeDensityInput,
105 ValueTypeElectrostaticsBasis,
107 dim>> feBMTotalCharge,
109 ValueTypeWaveFunctionBasis,
116 feBDTotalChargeStiffnessMatrix,
119 memorySpace>> feBDNuclearChargeRhs,
122 memorySpace>> feBDElectronicChargeRhs,
126 memorySpace>> feBDKineticHamiltonian,
130 feBDElectrostaticsHamiltonian,
133 memorySpace>> feBDEXCHamiltonian,
152 bool isResidualChebyshevFilter =
true);
158 const std::vector<utils::Point> &atomCoordinates,
159 const std::vector<double> & atomCharges,
160 const std::vector<double> & smearedChargeRadius,
164 const double smearingTemperature,
165 const double fermiEnergyTolerance,
166 const double fracOccupancyTolerance,
167 const double eigenSolveResidualTolerance,
168 const double scfDensityResidualNormTolerance,
171 const bool evaluateEnergyEverySCF,
174 const double mixingParameter,
175 const bool isAdaptiveAndersonMixingParameter,
178 &electronChargeDensityInput,
183 ValueTypeElectrostaticsBasis,
185 dim>> feBMTotalCharge,
187 ValueTypeWaveFunctionBasis,
194 feBDTotalChargeStiffnessMatrix,
197 memorySpace>> feBDNuclearChargeRhs,
200 memorySpace>> feBDElectronicChargeRhs,
204 feBDNuclChargeStiffnessMatrixNumSol,
207 memorySpace>> feBDNuclChargeRhsNumSol,
211 memorySpace>> feBDKineticHamiltonian,
215 feBDElectrostaticsHamiltonian,
218 memorySpace>> feBDEXCHamiltonian,
237 bool isResidualChebyshevFilter =
true);
243 const std::vector<utils::Point> &atomCoordinates,
244 const std::vector<double> & atomCharges,
245 const std::vector<double> & smearedChargeRadius,
249 const double smearingTemperature,
250 const double fermiEnergyTolerance,
251 const double fracOccupancyTolerance,
252 const double eigenSolveResidualTolerance,
253 const double scfDensityResidualNormTolerance,
256 const bool evaluateEnergyEverySCF,
259 const double mixingParameter,
260 const bool isAdaptiveAndersonMixingParameter,
273 &atomicTotalElectroPotentialFunction,
275 &atomicElectronicChargeDensityFunction,
279 ValueTypeElectrostaticsBasis,
281 dim>> feBMTotalCharge,
283 ValueTypeWaveFunctionBasis,
290 feBDTotalChargeStiffnessMatrix,
293 memorySpace>> feBDNuclearChargeRhs,
296 memorySpace>> feBDElectronicChargeRhs,
300 memorySpace>> feBDKineticHamiltonian,
304 feBDElectrostaticsHamiltonian,
307 memorySpace>> feBDEXCHamiltonian,
326 bool isResidualChebyshevFilter =
true);
331 const std::vector<utils::Point> &atomCoordinates,
332 const std::vector<double> & atomCharges,
333 const std::vector<std::string> & atomSymbolVec,
334 const std::vector<double> & smearedChargeRadius,
338 const double smearingTemperature,
339 const double fermiEnergyTolerance,
340 const double fracOccupancyTolerance,
341 const double eigenSolveResidualTolerance,
342 const double scfDensityResidualNormTolerance,
345 const bool evaluateEnergyEverySCF,
348 const double mixingParameter,
349 const bool isAdaptiveAndersonMixingParameter,
354 ValueTypeElectrostaticsBasis,
356 dim>> feBMTotalCharge,
358 ValueTypeWaveFunctionBasis,
365 feBDTotalChargeStiffnessMatrix,
368 memorySpace>> feBDNuclearChargeRhs,
371 memorySpace>> feBDElectronicChargeRhs,
375 memorySpace>> feBDKineticHamiltonian,
379 feBDElectrostaticsHamiltonian,
382 memorySpace>> feBDEXCHamiltonian,
387 feBDAtomCenterNonLocalOperator,
388 const std::map<std::string, std::string> &atomSymbolToPSPFilename,
405 bool isResidualChebyshevFilter =
true);
412 const std::vector<utils::Point> &atomCoordinates,
413 const std::vector<double> & atomCharges,
414 const std::vector<std::string> & atomSymbolVec,
415 const std::vector<double> & smearedChargeRadius,
419 const double smearingTemperature,
420 const double fermiEnergyTolerance,
421 const double fracOccupancyTolerance,
422 const double eigenSolveResidualTolerance,
423 const double scfDensityResidualNormTolerance,
426 const bool evaluateEnergyEverySCF,
429 const double mixingParameter,
430 const bool isAdaptiveAndersonMixingParameter,
433 &atomicTotalElectroPotentialFunction,
435 &atomicElectronicChargeDensityFunction,
439 ValueTypeElectrostaticsBasis,
441 dim>> feBMTotalCharge,
443 ValueTypeWaveFunctionBasis,
450 feBDTotalChargeStiffnessMatrix,
453 memorySpace>> feBDNuclearChargeRhs,
456 memorySpace>> feBDElectronicChargeRhs,
460 memorySpace>> feBDKineticHamiltonian,
464 feBDElectrostaticsHamiltonian,
467 memorySpace>> feBDEXCHamiltonian,
472 feBDAtomCenterNonLocalOperator,
473 const std::map<std::string, std::string> &atomSymbolToPSPFilename,
490 bool isResidualChebyshevFilter =
true);
509 ValueTypeWaveFunctionCoeff,
514 ValueTypeElectrostaticsBasis,
515 ValueTypeWaveFunctionCoeff,
516 ValueTypeWaveFunctionBasis,
521 ValueTypeWaveFunctionCoeff,
526 ValueTypeElectrostaticsCoeff,
527 ValueTypeWaveFunctionBasis,
531 std::shared_ptr<
KineticFE<ValueTypeWaveFunctionBasis,
532 ValueTypeWaveFunctionCoeff,
538 ValueTypeWaveFunctionBasis,
557 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpace>>
576 ValueTypeElectrostaticsBasis,
577 ValueTypeWaveFunctionCoeff,
578 ValueTypeWaveFunctionBasis,
585 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:48
Definition: KohnShamDFT.h:53
const utils::mpi::MPIComm & d_mpiCommDomain
Definition: KohnShamDFT.h:555
std::vector< RealType > d_kohnShamEnergies
Definition: KohnShamDFT.h:542
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_coreCorrDensUPF
Definition: KohnShamDFT.h:552
linearAlgebra::Vector< ValueTypeWaveFunctionCoeff, memorySpace > d_lanczosGuess
Definition: KohnShamDFT.h:560
linearAlgebra::blasLapack::real_type< ValueType > RealType
Definition: KohnShamDFT.h:70
const size_type d_numElectrons
Definition: KohnShamDFT.h:563
bool d_isOEFEBasis
Definition: KohnShamDFT.h:583
std::shared_ptr< atoms::AtomSphericalDataContainer > d_atomSphericalDataContainerPSP
Definition: KohnShamDFT.h:586
const OpContext * d_MContext
Definition: KohnShamDFT.h:554
quadrature::QuadratureValuesContainer< ValueTypeElectrostaticsCoeff, memorySpace > d_atomicTotalElecPotElectronicQuad
Definition: KohnShamDFT.h:592
const size_type d_numWantedEigenvalues
Definition: KohnShamDFT.h:501
bool d_isSolved
Definition: KohnShamDFT.h:571
std::shared_ptr< const basis::FEBasisManager< ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_feBMWaveFn
Definition: KohnShamDFT.h:541
bool d_isONCVNonLocPSP
Definition: KohnShamDFT.h:588
std::vector< RealType > d_occupation
Definition: KohnShamDFT.h:502
linearAlgebra::MultiVector< ValueType, memorySpace > * d_kohnShamWaveFunctions
Definition: KohnShamDFT.h:544
bool d_isNlcc
Definition: KohnShamDFT.h:588
MixingScheme< RealType, RealType > d_mixingScheme
Definition: KohnShamDFT.h:556
linearAlgebra::blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperator > ValueType
Definition: KohnShamDFT.h:69
quadrature::QuadratureValuesContainer< ValueTypeElectrostaticsCoeff, memorySpace > d_atomicTotalElecPotNuclearQuad
Definition: KohnShamDFT.h:592
bool d_isAdaptiveAndersonMixingParameter
Definition: KohnShamDFT.h:548
utils::MemoryStorage< RealType, utils::MemorySpace::HOST > d_jxwDataHost
Definition: KohnShamDFT.h:504
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_densityOutQuadValues
Definition: KohnShamDFT.h:551
size_type d_mixingHistory
Definition: KohnShamDFT.h:546
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeWaveFunctionBasis, memorySpace > > d_feBDEXCHamiltonian
Definition: KohnShamDFT.h:568
bool d_isResidualChebyshevFilter
Definition: KohnShamDFT.h:582
double d_mixingParameter
Definition: KohnShamDFT.h:547
RealType d_groundStateEnergy
Definition: KohnShamDFT.h:570
size_type d_numMaxSCFIter
Definition: KohnShamDFT.h:553
typename linearAlgebra::HermitianIterativeEigenSolver< ValueTypeOperator, ValueTypeOperand, memorySpace >::OpContext OpContext
Definition: KohnShamDFT.h:74
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > d_linAlgOpContext
Definition: KohnShamDFT.h:558
std::shared_ptr< KineticFE< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff, memorySpace, dim > > d_hamitonianKin
Definition: KohnShamDFT.h:535
linearAlgebra::blasLapack::scalar_type< ValueTypeElectrostaticsBasis, ValueTypeWaveFunctionBasis > ValueTypeOperator
Definition: KohnShamDFT.h:63
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_densityInQuadValues
Definition: KohnShamDFT.h:551
std::shared_ptr< KohnShamEigenSolver< ValueTypeOperator, ValueTypeOperand, memorySpace > > d_ksEigSolve
Definition: KohnShamDFT.h:507
bool d_evaluateEnergyEverySCF
Definition: KohnShamDFT.h:549
utils::ConditionalOStream d_rootCout
Definition: KohnShamDFT.h:545
std::shared_ptr< ElectrostaticExcFE< ValueTypeElectrostaticsCoeff, ValueTypeElectrostaticsBasis, ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_hamiltonianElectroExc
Definition: KohnShamDFT.h:581
utils::Profiler d_p
Definition: KohnShamDFT.h:572
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:59
const double d_SCFTol
Definition: KohnShamDFT.h:503
void solve()
Definition: KohnShamDFT.t.cpp:2028
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_densityResidualQuadValues
Definition: KohnShamDFT.h:552
bool d_isPSPCalculation
Definition: KohnShamDFT.h:573
const OpContext * d_MInvContext
Definition: KohnShamDFT.h:554
std::shared_ptr< DensityCalculator< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff, memorySpace, dim > > d_densCalc
Definition: KohnShamDFT.h:512
std::shared_ptr< KohnShamOperatorContextFE< ValueTypeElectrostaticsCoeff, ValueTypeElectrostaticsBasis, ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_hamitonianOperator
Definition: KohnShamDFT.h:519
double getGroundStateEnergy()
Definition: KohnShamDFT.t.cpp:2532
linearAlgebra::MultiVector< ValueTypeWaveFunctionCoeff, memorySpace > d_waveFunctionSubspaceGuess
Definition: KohnShamDFT.h:562
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_coreCorrectedDensity
Definition: KohnShamDFT.h:552
std::shared_ptr< ExchangeCorrelationFE< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff, memorySpace, dim > > d_hamitonianXC
Definition: KohnShamDFT.h:524
linearAlgebra::blasLapack::scalar_type< ValueTypeElectrostaticsCoeff, ValueTypeWaveFunctionCoeff > ValueTypeOperand
Definition: KohnShamDFT.h:66
std::shared_ptr< ElectrostaticFE< ValueTypeElectrostaticsBasis, ValueTypeElectrostaticsCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_hamitonianElec
Definition: KohnShamDFT.h:530
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
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
blas::scalar_type< ValueType1, ValueType2 > scalar_type
Definition: BlasLapackTypedef.h:70
blas::real_type< ValueType > real_type
Definition: BlasLapackTypedef.h:64
int MPIComm
Definition: MPITypes.h:83
MemorySpace
Definition: MemorySpaceType.h:37
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
unsigned int size_type
Definition: TypeConfig.h:8