26#ifndef dftefeElectrostaticLocalFE_h
27#define dftefeElectrostaticLocalFE_h
51 template <
typename ValueTypeBasisData,
52 typename ValueTypeBasisCoeff,
53 typename ValueTypeWaveFnBasisData,
59 ValueTypeWaveFnBasisData,
66 ValueTypeWaveFnBasisData,
71 ValueTypeWaveFnBasisData,
76 ValueTypeWaveFnBasisData,
86 const std::vector<utils::Point> &atomCoordinates,
87 const std::vector<double> & atomCharges,
88 const double & smearedChargeRadius,
90 & electronChargeDensity,
94 dim>> feBMTotalCharge,
97 feBDTotalChargeStiffnessMatrix,
100 feBDNuclearChargeRhs,
103 feBDElectronicChargeRhs,
106 memorySpace>> feBDHamiltonian,
111 bool useDealiiMatrixFreePoissonSolve =
true,
116 const std::vector<utils::Point> &atomCoordinates,
117 const std::vector<double> & atomCharges,
118 const double & smearedChargeRadius,
120 & electronChargeDensity,
124 dim>> feBMTotalCharge,
127 feBDTotalChargeStiffnessMatrix,
130 feBDNuclearChargeRhs,
133 feBDElectronicChargeRhs,
136 feBDNuclChargeStiffnessMatrixNumSol,
139 feBDNuclChargeRhsNumSol,
142 memorySpace>> feBDHamiltonian,
147 bool useDealiiMatrixFreePoissonSolve =
true,
153 const std::vector<utils::Point> &atomCoordinates,
154 const std::vector<std::string> & atomSymbols,
155 const std::vector<double> & atomCharges,
156 const double & smearedChargeRadius,
158 &atomicTotalElectroPotentialFunction,
160 &atomicElectronicChargeDensityFunction,
169 feBDTotalChargeStiffnessMatrix,
172 feBDNuclearChargeRhs,
175 feBDElectronicChargeRhs,
178 memorySpace>> feBDHamiltonian,
183 const std::unordered_map<std::string,
184 std::shared_ptr<atoms::AtomTCIASpline>>
185 fieldToTCIASplineMap = {},
186 const bool useDealiiMatrixFreePoissonSolve =
true,
187 const bool calculateIntegralDeltaRho =
false,
196 const std::vector<utils::Point> & atomCoordinates,
200 dim>> feBMTotalCharge,
203 feBDTotalChargeStiffnessMatrix,
206 feBDNuclearChargeRhs,
209 feBDElectronicChargeRhs,
212 memorySpace>> feBDHamiltonian,
218 const std::vector<utils::Point> & atomCoordinates,
222 dim>> feBMTotalCharge,
225 feBDTotalChargeStiffnessMatrix,
228 feBDNuclearChargeRhs,
231 feBDElectronicChargeRhs,
234 feBDNuclChargeStiffnessMatrixNumSol,
237 feBDNuclChargeRhsNumSol,
240 memorySpace>> feBDHamiltonian,
247 const std::vector<utils::Point> &atomCoordinates,
249 &atomicTotalElectroPotentialFunction,
251 &atomicElectronicChargeDensityFunction,
255 dim>> feBMTotalCharge,
258 feBDTotalChargeStiffnessMatrix,
261 feBDNuclearChargeRhs,
264 feBDElectronicChargeRhs,
267 memorySpace>> feBDHamiltonian,
273 &electronChargeDensity);
284 std::vector<quadrature::QuadratureValuesContainer<ValueType, memorySpace>>
292 bool updateGhostY)
const override;
308 feBDNuclearChargeStiffnessMatrix,
311 feBDNuclearChargeRhs);
363 std::vector<linearAlgebra::MultiVector<ValueType, memorySpaceHost> *>
383 ValueTypeWaveFnBasisData,
405 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpace>>
407 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpaceHost>>
437 const std::unordered_map<std::string,
438 std::shared_ptr<atoms::AtomTCIASpline>>
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: FEBasisOperations.h:64
A derived class of linearAlgebra::LinearSolverFunction to encapsulate the Poisson partial differentia...
Definition: PoissonLinearSolverFunctionFE.h:77
A derived class of linearAlgebra::LinearSolverFunction to encapsulate the Poisson partial differentia...
Definition: PoissonSolverDealiiMatrixFreeFE.h:83
A derived class of linearAlgebra::OperatorContext to encapsulate the action of a discrete operator on...
Definition: ElectrostaticFE.h:66
Definition: ElectrostaticLocalFE.h:62
RealType d_intRhoAtPhiAt
Definition: ElectrostaticLocalFE.h:433
void getLocal(Storage &cellWiseStorage) const override
Definition: ElectrostaticLocalFE.t.cpp:2108
typename ElectrostaticFE< ValueTypeBasisData, ValueTypeBasisCoeff, ValueTypeWaveFnBasisData, memorySpace, dim >::ValueType ValueType
Definition: ElectrostaticLocalFE.h:68
RealType d_energy
Definition: ElectrostaticLocalFE.h:329
std::vector< quadrature::QuadratureValuesContainer< ValueType, memorySpace > > getFunctionalDerivative() const override
Definition: ElectrostaticLocalFE.t.cpp:2789
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > d_feBDNuclChargeRhsNumSol
Definition: ElectrostaticLocalFE.h:404
~ElectrostaticLocalFE()
Definition: ElectrostaticLocalFE.t.cpp:448
const size_type d_numAtoms
Definition: ElectrostaticLocalFE.h:326
void deleteStorages()
Definition: ElectrostaticLocalFE.t.cpp:463
std::vector< utils::Point > d_atomCoordinates
Definition: ElectrostaticLocalFE.h:325
quadrature::QuadratureValuesContainer< RealType, memorySpaceHost > * d_scratchDensRhoQuad
Definition: ElectrostaticLocalFE.h:350
std::vector< size_type > d_numCellDofs
Definition: ElectrostaticLocalFE.h:446
double d_integralAtRho
Definition: ElectrostaticLocalFE.h:442
RealType d_nuclearSelfEnergy
Definition: ElectrostaticLocalFE.h:330
quadrature::QuadratureValuesContainer< ValueType, memorySpaceHost > * d_scratchPotNuclearQuad
Definition: ElectrostaticLocalFE.h:356
void evalEnergy()
Definition: ElectrostaticLocalFE.t.cpp:2590
std::shared_ptr< electrostatics::PoissonSolverDealiiMatrixFreeFE< ValueTypeBasisData, ValueTypeBasisCoeff, memorySpace, dim > > d_poissonSolverDealiiMatFree
Definition: ElectrostaticLocalFE.h:422
void nuclearPotentialSolve(std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > feBDNuclearChargeStiffnessMatrix, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > feBDNuclearChargeRhs)
Definition: ElectrostaticLocalFE.t.cpp:2181
quadrature::QuadratureValuesContainer< ValueType, memorySpaceHost > * d_scratchPotHamQuad
Definition: ElectrostaticLocalFE.h:352
quadrature::QuadratureValuesContainer< ValueType, memorySpaceHost > * d_correctionPotRhoQuad
Definition: ElectrostaticLocalFE.h:345
utils::ConditionalOStream d_rootCout
Definition: ElectrostaticLocalFE.h:425
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > d_feBDNuclearChargeRhs
Definition: ElectrostaticLocalFE.h:401
bool hasNonLocalComponent() const override
Definition: ElectrostaticLocalFE.t.cpp:2865
void reinitBasis(const std::vector< utils::Point > &atomCoordinates, std::shared_ptr< const basis::FEBasisManager< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpaceHost, dim > > feBMTotalCharge, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > feBDTotalChargeStiffnessMatrix, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > feBDNuclearChargeRhs, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > feBDElectronicChargeRhs, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeWaveFnBasisData, memorySpace > > feBDHamiltonian, const utils::ScalarSpatialFunctionReal &externalPotentialFunction)
Definition: ElectrostaticLocalFE.t.cpp:878
const std::unordered_map< std::string, std::shared_ptr< atoms::AtomTCIASpline > > d_fieldToTCIASplineMap
Definition: ElectrostaticLocalFE.h:439
bool d_isTCIEnabled
Definition: ElectrostaticLocalFE.h:440
std::vector< RealType > d_nuclearChargeQuad
Definition: ElectrostaticLocalFE.h:409
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > d_feBDTotalChargeStiffnessMatrix
Definition: ElectrostaticLocalFE.h:395
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpaceHost > > d_linAlgOpContextHost
Definition: ElectrostaticLocalFE.h:408
quadrature::QuadratureValuesContainer< RealType, memorySpaceHost > * d_scratchDensNuclearQuad
Definition: ElectrostaticLocalFE.h:348
std::vector< linearAlgebra::MultiVector< ValueType, memorySpaceHost > * > d_nuclearChargesPotential
Definition: ElectrostaticLocalFE.h:364
void reinitField(const quadrature::QuadratureValuesContainer< RealType, memorySpaceHost > &electronChargeDensity)
Definition: ElectrostaticLocalFE.t.cpp:1849
std::vector< std::string > d_atomSymbolVec
Definition: ElectrostaticLocalFE.h:436
const bool d_isCalculateIntegralDeltaRho
Definition: ElectrostaticLocalFE.h:320
void computeNuclearSelfEnergy()
Definition: ElectrostaticLocalFE.t.cpp:2379
const std::vector< double > d_atomCharges
Definition: ElectrostaticLocalFE.h:327
const size_type d_numComponents
Definition: ElectrostaticLocalFE.h:324
const size_type d_maxCellBlock
Definition: ElectrostaticLocalFE.h:323
std::map< std::string, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > > d_feBasisDataStorageRhsMap
Definition: ElectrostaticLocalFE.h:431
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > d_linAlgOpContext
Definition: ElectrostaticLocalFE.h:406
quadrature::QuadratureValuesContainer< ValueTypeBasisCoeff, memorySpaceHost > * d_atomicTotalElecPotElectronicQuad
Definition: ElectrostaticLocalFE.h:339
quadrature::QuadratureValuesContainer< RealType, memorySpaceHost > * d_nuclearChargesDensity
Definition: ElectrostaticLocalFE.h:334
std::shared_ptr< const basis::FEBasisOperations< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpaceHost, dim > > d_feBasisOpElectronic
Definition: ElectrostaticLocalFE.h:381
typename ElectrostaticFE< ValueTypeBasisData, ValueTypeBasisCoeff, ValueTypeWaveFnBasisData, memorySpace, dim >::RealType RealType
Definition: ElectrostaticLocalFE.h:78
bool hasLocalComponent() const override
Definition: ElectrostaticLocalFE.t.cpp:2850
const quadrature::QuadratureValuesContainer< RealType, memorySpaceHost > * d_electronChargeDensity
Definition: ElectrostaticLocalFE.h:336
RealType d_totNuclearChargeQuad
Definition: ElectrostaticLocalFE.h:423
std::shared_ptr< const basis::FEBasisOperations< ValueTypeBasisCoeff, ValueTypeWaveFnBasisData, memorySpace, dim > > d_feBasisOpHamiltonian
Definition: ElectrostaticLocalFE.h:386
RealType d_integralPhiAtxbSmear
Definition: ElectrostaticLocalFE.h:433
bool d_isNumericalVSelfSolve
Definition: ElectrostaticLocalFE.h:321
double d_integralDiffVZZCorrVSmearxSumBZZCorrBSmear
Definition: ElectrostaticLocalFE.h:441
typename ElectrostaticFE< ValueTypeBasisData, ValueTypeBasisCoeff, ValueTypeWaveFnBasisData, memorySpace, dim >::Storage Storage
Definition: ElectrostaticLocalFE.h:73
std::vector< std::shared_ptr< basis::FEBasisManager< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpaceHost, dim > > > d_feBMNuclearCharge
Definition: ElectrostaticLocalFE.h:370
Storage d_elecCellWiseTemp
Definition: ElectrostaticLocalFE.h:448
RealType d_correctionEnergyAtomic
Definition: ElectrostaticLocalFE.h:434
quadrature::QuadratureValuesContainer< ValueType, memorySpaceHost > * d_scratchPotRhoQuad
Definition: ElectrostaticLocalFE.h:354
bool d_useDealiiMatrixFreePoissonSolve
Definition: ElectrostaticLocalFE.h:319
std::shared_ptr< electrostatics::PoissonLinearSolverFunctionFE< ValueTypeBasisData, ValueTypeBasisCoeff, memorySpaceHost, dim > > d_linearSolverFunction
Definition: ElectrostaticLocalFE.h:416
size_type d_basisOverlapSize
Definition: ElectrostaticLocalFE.h:447
quadrature::QuadratureValuesContainer< ValueType, memorySpaceHost > * d_correctionPotHamQuad
Definition: ElectrostaticLocalFE.h:343
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > d_feBDElectronicChargeRhs
Definition: ElectrostaticLocalFE.h:398
size_type d_cellTimesNumVecPoisson
Definition: ElectrostaticLocalFE.h:410
void applyNonLocal(linearAlgebra::MultiVector< ValueTypeWaveFnBasisData, memorySpace > &X, linearAlgebra::MultiVector< ValueTypeWaveFnBasisData, memorySpace > &Y, bool updateGhostX, bool updateGhostY) const override
Definition: ElectrostaticLocalFE.t.cpp:2829
linearAlgebra::MultiVector< ValueTypeBasisCoeff, memorySpaceHost > * d_totalChargePotential
Definition: ElectrostaticLocalFE.h:362
const double d_smearedChargeRadius
Definition: ElectrostaticLocalFE.h:328
size_type d_S
Definition: ElectrostaticLocalFE.h:444
std::shared_ptr< const basis::FEBasisOperations< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpaceHost, dim > > d_feBasisOpNuclear
Definition: ElectrostaticLocalFE.h:376
quadrature::QuadratureValuesContainer< ValueType, memorySpace > * d_potentialHamQuadMemspace
Definition: ElectrostaticLocalFE.h:359
SpinStorageLayout d_layout
Definition: ElectrostaticLocalFE.h:445
RealType getEnergy() const override
Definition: ElectrostaticLocalFE.t.cpp:2768
std::shared_ptr< const basis::FEBasisManager< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpaceHost, dim > > d_feBMTotalCharge
Definition: ElectrostaticLocalFE.h:392
quadrature::QuadratureValuesContainer< RealType, memorySpaceHost > d_atomicElectronChargeDensity
Definition: ElectrostaticLocalFE.h:341
bool d_isDeltaRhoSolve
Definition: ElectrostaticLocalFE.h:322
Definition: LinAlgOpContext.h:52
An class template to encapsulate a MultiVector. A MultiVector is a collection of vectors belonging t...
Definition: MultiVector.h:134
Definition: QuadratureValuesContainer.h:39
Provides an interface to print based on whether a certain condition is met or not....
Definition: ConditionalOStream.h:47
Abstract base for scalar functions of a spatial point.
Definition: ScalarSpatialFunction.h:23
SpinMode
Definition: KSAttributes.h:55
SpinStorageLayout
Definition: HamiltonianSpinBlockCopyKernels.h:40
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: TypeConfig.h:17