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 std::vector<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 std::vector<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<double> & smearedChargeRadius,
250 const double smearingTemperature,
251 const double fermiEnergyTolerance,
252 const double fracOccupancyTolerance,
253 const double eigenSolveResidualTolerance,
254 const double scfDensityResidualNormTolerance,
257 const bool evaluateEnergyEverySCF,
260 const double mixingParameter,
261 const bool isAdaptiveAndersonMixingParameter,
274 &atomicTotalElectroPotentialFunction,
276 &atomicElectronicChargeDensityFunction,
280 ValueTypeElectrostaticsBasis,
282 dim>> feBMTotalCharge,
284 ValueTypeWaveFunctionBasis,
291 feBDTotalChargeStiffnessMatrix,
294 memorySpace>> feBDNuclearChargeRhs,
297 memorySpace>> feBDElectronicChargeRhs,
301 memorySpace>> feBDKineticHamiltonian,
305 feBDElectrostaticsHamiltonian,
308 memorySpace>> feBDEXCHamiltonian,
327 bool isResidualChebyshevFilter =
true);
332 const std::vector<utils::Point> &atomCoordinates,
333 const std::vector<double> & atomCharges,
334 const std::vector<std::string> & atomSymbolVec,
335 const std::vector<double> & smearedChargeRadius,
339 const double smearingTemperature,
340 const double fermiEnergyTolerance,
341 const double fracOccupancyTolerance,
342 const double eigenSolveResidualTolerance,
343 const double scfDensityResidualNormTolerance,
346 const bool evaluateEnergyEverySCF,
349 const double mixingParameter,
350 const bool isAdaptiveAndersonMixingParameter,
355 ValueTypeElectrostaticsBasis,
357 dim>> feBMTotalCharge,
359 ValueTypeWaveFunctionBasis,
366 feBDTotalChargeStiffnessMatrix,
369 memorySpace>> feBDNuclearChargeRhs,
372 memorySpace>> feBDElectronicChargeRhs,
376 memorySpace>> feBDKineticHamiltonian,
380 feBDElectrostaticsHamiltonian,
383 memorySpace>> feBDEXCHamiltonian,
388 feBDAtomCenterNonLocalOperator,
389 const std::map<std::string, std::string> &atomSymbolToPSPFilename,
406 bool isResidualChebyshevFilter =
true);
413 const std::vector<utils::Point> &atomCoordinates,
414 const std::vector<double> & atomCharges,
415 const std::vector<std::string> & atomSymbolVec,
416 const std::vector<double> & smearedChargeRadius,
420 const double smearingTemperature,
421 const double fermiEnergyTolerance,
422 const double fracOccupancyTolerance,
423 const double eigenSolveResidualTolerance,
424 const double scfDensityResidualNormTolerance,
427 const bool evaluateEnergyEverySCF,
430 const double mixingParameter,
431 const bool isAdaptiveAndersonMixingParameter,
434 &atomicTotalElectroPotentialFunction,
436 &atomicElectronicChargeDensityFunction,
440 ValueTypeElectrostaticsBasis,
442 dim>> feBMTotalCharge,
444 ValueTypeWaveFunctionBasis,
451 feBDTotalChargeStiffnessMatrix,
454 memorySpace>> feBDNuclearChargeRhs,
457 memorySpace>> feBDElectronicChargeRhs,
461 memorySpace>> feBDKineticHamiltonian,
465 feBDElectrostaticsHamiltonian,
468 memorySpace>> feBDEXCHamiltonian,
473 feBDAtomCenterNonLocalOperator,
474 const std::map<std::string, std::string> &atomSymbolToPSPFilename,
491 bool isResidualChebyshevFilter =
true);
510 ValueTypeWaveFunctionCoeff,
515 ValueTypeElectrostaticsBasis,
516 ValueTypeWaveFunctionCoeff,
517 ValueTypeWaveFunctionBasis,
522 ValueTypeWaveFunctionCoeff,
527 ValueTypeElectrostaticsCoeff,
528 ValueTypeWaveFunctionBasis,
532 std::shared_ptr<
KineticFE<ValueTypeWaveFunctionBasis,
533 ValueTypeWaveFunctionCoeff,
539 ValueTypeWaveFunctionBasis,
556 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpace>>
575 ValueTypeElectrostaticsBasis,
576 ValueTypeWaveFunctionCoeff,
577 ValueTypeWaveFunctionBasis,
584 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:54
const utils::mpi::MPIComm & d_mpiCommDomain
Definition: KohnShamDFT.h:554
std::vector< RealType > d_kohnShamEnergies
Definition: KohnShamDFT.h:543
std::shared_ptr< linearAlgebra::ElpaScalapackManager > d_elpaScala
Definition: KohnShamDFT.h:593
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_coreCorrDensUPF
Definition: KohnShamDFT.h:551
linearAlgebra::Vector< ValueTypeWaveFunctionCoeff, memorySpace > d_lanczosGuess
Definition: KohnShamDFT.h:559
linearAlgebra::blasLapack::real_type< ValueType > RealType
Definition: KohnShamDFT.h:71
const size_type d_numElectrons
Definition: KohnShamDFT.h:562
bool d_isOEFEBasis
Definition: KohnShamDFT.h:582
std::shared_ptr< atoms::AtomSphericalDataContainer > d_atomSphericalDataContainerPSP
Definition: KohnShamDFT.h:585
const OpContext * d_MContext
Definition: KohnShamDFT.h:553
quadrature::QuadratureValuesContainer< ValueTypeElectrostaticsCoeff, memorySpace > d_atomicTotalElecPotElectronicQuad
Definition: KohnShamDFT.h:591
const size_type d_numWantedEigenvalues
Definition: KohnShamDFT.h:502
bool d_isSolved
Definition: KohnShamDFT.h:570
std::shared_ptr< const basis::FEBasisManager< ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_feBMWaveFn
Definition: KohnShamDFT.h:542
bool d_isONCVNonLocPSP
Definition: KohnShamDFT.h:587
std::vector< RealType > d_occupation
Definition: KohnShamDFT.h:503
bool d_isNlcc
Definition: KohnShamDFT.h:587
MixingScheme< RealType, RealType > d_mixingScheme
Definition: KohnShamDFT.h:555
linearAlgebra::blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperator > ValueType
Definition: KohnShamDFT.h:70
quadrature::QuadratureValuesContainer< ValueTypeElectrostaticsCoeff, memorySpace > d_atomicTotalElecPotNuclearQuad
Definition: KohnShamDFT.h:591
bool d_isAdaptiveAndersonMixingParameter
Definition: KohnShamDFT.h:547
utils::MemoryStorage< RealType, utils::MemorySpace::HOST > d_jxwDataHost
Definition: KohnShamDFT.h:505
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_densityOutQuadValues
Definition: KohnShamDFT.h:550
size_type d_mixingHistory
Definition: KohnShamDFT.h:545
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeWaveFunctionBasis, memorySpace > > d_feBDEXCHamiltonian
Definition: KohnShamDFT.h:567
bool d_isResidualChebyshevFilter
Definition: KohnShamDFT.h:581
double d_mixingParameter
Definition: KohnShamDFT.h:546
RealType d_groundStateEnergy
Definition: KohnShamDFT.h:569
size_type d_numMaxSCFIter
Definition: KohnShamDFT.h:552
typename linearAlgebra::HermitianIterativeEigenSolver< ValueTypeOperator, ValueTypeOperand, memorySpace >::OpContext OpContext
Definition: KohnShamDFT.h:75
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > d_linAlgOpContext
Definition: KohnShamDFT.h:557
std::shared_ptr< KineticFE< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff, memorySpace, dim > > d_hamitonianKin
Definition: KohnShamDFT.h:536
linearAlgebra::blasLapack::scalar_type< ValueTypeElectrostaticsBasis, ValueTypeWaveFunctionBasis > ValueTypeOperator
Definition: KohnShamDFT.h:64
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_densityInQuadValues
Definition: KohnShamDFT.h:550
std::shared_ptr< KohnShamEigenSolver< ValueTypeOperator, ValueTypeOperand, memorySpace > > d_ksEigSolve
Definition: KohnShamDFT.h:508
bool d_evaluateEnergyEverySCF
Definition: KohnShamDFT.h:548
utils::ConditionalOStream d_rootCout
Definition: KohnShamDFT.h:544
std::shared_ptr< ElectrostaticExcFE< ValueTypeElectrostaticsCoeff, ValueTypeElectrostaticsBasis, ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_hamiltonianElectroExc
Definition: KohnShamDFT.h:580
utils::Profiler d_p
Definition: KohnShamDFT.h:571
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:504
void solve()
Definition: KohnShamDFT.t.cpp:2183
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_densityResidualQuadValues
Definition: KohnShamDFT.h:551
bool d_isPSPCalculation
Definition: KohnShamDFT.h:572
const OpContext * d_MInvContext
Definition: KohnShamDFT.h:553
linearAlgebra::MultiVector< ValueTypeWaveFunctionCoeff, memorySpace > d_kohnShamWaveFunctions
Definition: KohnShamDFT.h:561
std::shared_ptr< DensityCalculator< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff, memorySpace, dim > > d_densCalc
Definition: KohnShamDFT.h:513
~KohnShamDFT()
Definition: KohnShamDFT.t.cpp:2166
std::shared_ptr< KohnShamOperatorContextFE< ValueTypeElectrostaticsCoeff, ValueTypeElectrostaticsBasis, ValueTypeWaveFunctionCoeff, ValueTypeWaveFunctionBasis, memorySpace, dim > > d_hamitonianOperator
Definition: KohnShamDFT.h:520
double getGroundStateEnergy()
Definition: KohnShamDFT.t.cpp:2687
linearAlgebra::MultiVector< ValueTypeWaveFunctionCoeff, memorySpace > d_waveFunctionSubspaceGuess
Definition: KohnShamDFT.h:561
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_coreCorrectedDensity
Definition: KohnShamDFT.h:551
std::shared_ptr< ExchangeCorrelationFE< ValueTypeWaveFunctionBasis, ValueTypeWaveFunctionCoeff, memorySpace, dim > > d_hamitonianXC
Definition: KohnShamDFT.h:525
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:531
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
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