26#ifndef dftefeElectrostaticLocalFE_h
27#define dftefeElectrostaticLocalFE_h
49 template <
typename ValueTypeBasisData,
50 typename ValueTypeBasisCoeff,
51 typename ValueTypeWaveFnBasisData,
57 ValueTypeWaveFnBasisData,
64 ValueTypeWaveFnBasisData,
69 ValueTypeWaveFnBasisData,
74 ValueTypeWaveFnBasisData,
84 const std::vector<utils::Point> &atomCoordinates,
85 const std::vector<double> & atomCharges,
86 const double & smearedChargeRadius,
88 & electronChargeDensity,
92 dim>> feBMTotalCharge,
95 feBDTotalChargeStiffnessMatrix,
101 feBDElectronicChargeRhs,
104 memorySpace>> feBDHamiltonian,
109 bool useDealiiMatrixFreePoissonSolve =
true);
113 const std::vector<utils::Point> &atomCoordinates,
114 const std::vector<double> & atomCharges,
115 const double & smearedChargeRadius,
117 & electronChargeDensity,
121 dim>> feBMTotalCharge,
124 feBDTotalChargeStiffnessMatrix,
127 feBDNuclearChargeRhs,
130 feBDElectronicChargeRhs,
133 feBDNuclChargeStiffnessMatrixNumSol,
136 feBDNuclChargeRhsNumSol,
139 memorySpace>> feBDHamiltonian,
144 bool useDealiiMatrixFreePoissonSolve =
true);
149 const std::vector<utils::Point> &atomCoordinates,
150 const std::vector<std::string> & atomSymbols,
151 const std::vector<double> & atomCharges,
152 const double & smearedChargeRadius,
154 &atomicTotalElectroPotentialFunction,
156 &atomicElectronicChargeDensityFunction,
165 feBDTotalChargeStiffnessMatrix,
168 feBDNuclearChargeRhs,
171 feBDElectronicChargeRhs,
174 memorySpace>> feBDHamiltonian,
179 const std::unordered_map<std::string,
180 std::shared_ptr<atoms::AtomTCIASpline>>
181 fieldToTCIASplineMap = {},
182 const bool useDealiiMatrixFreePoissonSolve =
true,
183 const bool calculateIntegralDeltaRho =
false);
191 const std::vector<utils::Point> & atomCoordinates,
195 dim>> feBMTotalCharge,
198 feBDTotalChargeStiffnessMatrix,
201 feBDNuclearChargeRhs,
204 feBDElectronicChargeRhs,
207 memorySpace>> feBDHamiltonian,
213 const std::vector<utils::Point> & atomCoordinates,
217 dim>> feBMTotalCharge,
220 feBDTotalChargeStiffnessMatrix,
223 feBDNuclearChargeRhs,
226 feBDElectronicChargeRhs,
229 feBDNuclChargeStiffnessMatrixNumSol,
232 feBDNuclChargeRhsNumSol,
235 memorySpace>> feBDHamiltonian,
242 const std::vector<utils::Point> &atomCoordinates,
244 &atomicTotalElectroPotentialFunction,
246 &atomicElectronicChargeDensityFunction,
250 dim>> feBMTotalCharge,
253 feBDTotalChargeStiffnessMatrix,
256 feBDNuclearChargeRhs,
259 feBDElectronicChargeRhs,
262 memorySpace>> feBDHamiltonian,
268 &electronChargeDensity);
287 bool updateGhostY)
const override;
303 feBDNuclearChargeStiffnessMatrix,
306 feBDNuclearChargeRhs);
358 std::vector<linearAlgebra::MultiVector<ValueType, memorySpaceHost> *>
378 ValueTypeWaveFnBasisData,
400 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpace>>
402 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpaceHost>>
432 const std::unordered_map<std::string,
433 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:65
Definition: ElectrostaticLocalFE.h:60
RealType d_intRhoAtPhiAt
Definition: ElectrostaticLocalFE.h:428
void getLocal(Storage &cellWiseStorage) const override
Definition: ElectrostaticLocalFE.t.cpp:2033
typename ElectrostaticFE< ValueTypeBasisData, ValueTypeBasisCoeff, ValueTypeWaveFnBasisData, memorySpace, dim >::ValueType ValueType
Definition: ElectrostaticLocalFE.h:66
RealType d_energy
Definition: ElectrostaticLocalFE.h:324
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > d_feBDNuclChargeRhsNumSol
Definition: ElectrostaticLocalFE.h:399
~ElectrostaticLocalFE()
Definition: ElectrostaticLocalFE.t.cpp:430
const size_type d_numAtoms
Definition: ElectrostaticLocalFE.h:321
void deleteStorages()
Definition: ElectrostaticLocalFE.t.cpp:445
std::vector< utils::Point > d_atomCoordinates
Definition: ElectrostaticLocalFE.h:320
quadrature::QuadratureValuesContainer< RealType, memorySpaceHost > * d_scratchDensRhoQuad
Definition: ElectrostaticLocalFE.h:345
double d_integralAtRho
Definition: ElectrostaticLocalFE.h:437
RealType d_nuclearSelfEnergy
Definition: ElectrostaticLocalFE.h:325
quadrature::QuadratureValuesContainer< ValueType, memorySpaceHost > * d_scratchPotNuclearQuad
Definition: ElectrostaticLocalFE.h:351
void evalEnergy()
Definition: ElectrostaticLocalFE.t.cpp:2494
std::shared_ptr< electrostatics::PoissonSolverDealiiMatrixFreeFE< ValueTypeBasisData, ValueTypeBasisCoeff, memorySpace, dim > > d_poissonSolverDealiiMatFree
Definition: ElectrostaticLocalFE.h:417
void nuclearPotentialSolve(std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > feBDNuclearChargeStiffnessMatrix, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > feBDNuclearChargeRhs)
Definition: ElectrostaticLocalFE.t.cpp:2085
quadrature::QuadratureValuesContainer< ValueType, memorySpaceHost > * d_scratchPotHamQuad
Definition: ElectrostaticLocalFE.h:347
quadrature::QuadratureValuesContainer< ValueType, memorySpaceHost > * d_correctionPotRhoQuad
Definition: ElectrostaticLocalFE.h:340
utils::ConditionalOStream d_rootCout
Definition: ElectrostaticLocalFE.h:420
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > d_feBDNuclearChargeRhs
Definition: ElectrostaticLocalFE.h:396
bool hasNonLocalComponent() const override
Definition: ElectrostaticLocalFE.t.cpp:2769
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:841
const std::unordered_map< std::string, std::shared_ptr< atoms::AtomTCIASpline > > d_fieldToTCIASplineMap
Definition: ElectrostaticLocalFE.h:434
bool d_isTCIEnabled
Definition: ElectrostaticLocalFE.h:435
std::vector< RealType > d_nuclearChargeQuad
Definition: ElectrostaticLocalFE.h:404
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > d_feBDTotalChargeStiffnessMatrix
Definition: ElectrostaticLocalFE.h:390
const quadrature::QuadratureValuesContainer< ValueType, memorySpace > & getFunctionalDerivative() const override
Definition: ElectrostaticLocalFE.t.cpp:2693
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpaceHost > > d_linAlgOpContextHost
Definition: ElectrostaticLocalFE.h:403
quadrature::QuadratureValuesContainer< RealType, memorySpaceHost > * d_scratchDensNuclearQuad
Definition: ElectrostaticLocalFE.h:343
std::vector< linearAlgebra::MultiVector< ValueType, memorySpaceHost > * > d_nuclearChargesPotential
Definition: ElectrostaticLocalFE.h:359
void reinitField(const quadrature::QuadratureValuesContainer< RealType, memorySpaceHost > &electronChargeDensity)
Definition: ElectrostaticLocalFE.t.cpp:1774
std::vector< std::string > d_atomSymbolVec
Definition: ElectrostaticLocalFE.h:431
const bool d_isCalculateIntegralDeltaRho
Definition: ElectrostaticLocalFE.h:315
void computeNuclearSelfEnergy()
Definition: ElectrostaticLocalFE.t.cpp:2283
const std::vector< double > d_atomCharges
Definition: ElectrostaticLocalFE.h:322
const size_type d_numComponents
Definition: ElectrostaticLocalFE.h:319
const size_type d_maxCellBlock
Definition: ElectrostaticLocalFE.h:318
std::map< std::string, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > > d_feBasisDataStorageRhsMap
Definition: ElectrostaticLocalFE.h:426
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > d_linAlgOpContext
Definition: ElectrostaticLocalFE.h:401
quadrature::QuadratureValuesContainer< ValueTypeBasisCoeff, memorySpaceHost > * d_atomicTotalElecPotElectronicQuad
Definition: ElectrostaticLocalFE.h:334
quadrature::QuadratureValuesContainer< RealType, memorySpaceHost > * d_nuclearChargesDensity
Definition: ElectrostaticLocalFE.h:329
std::shared_ptr< const basis::FEBasisOperations< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpaceHost, dim > > d_feBasisOpElectronic
Definition: ElectrostaticLocalFE.h:376
typename ElectrostaticFE< ValueTypeBasisData, ValueTypeBasisCoeff, ValueTypeWaveFnBasisData, memorySpace, dim >::RealType RealType
Definition: ElectrostaticLocalFE.h:76
bool hasLocalComponent() const override
Definition: ElectrostaticLocalFE.t.cpp:2754
const quadrature::QuadratureValuesContainer< RealType, memorySpaceHost > * d_electronChargeDensity
Definition: ElectrostaticLocalFE.h:331
RealType d_totNuclearChargeQuad
Definition: ElectrostaticLocalFE.h:418
std::shared_ptr< const basis::FEBasisOperations< ValueTypeBasisCoeff, ValueTypeWaveFnBasisData, memorySpace, dim > > d_feBasisOpHamiltonian
Definition: ElectrostaticLocalFE.h:381
RealType d_integralPhiAtxbSmear
Definition: ElectrostaticLocalFE.h:428
bool d_isNumericalVSelfSolve
Definition: ElectrostaticLocalFE.h:316
double d_integralDiffVZZCorrVSmearxSumBZZCorrBSmear
Definition: ElectrostaticLocalFE.h:436
typename ElectrostaticFE< ValueTypeBasisData, ValueTypeBasisCoeff, ValueTypeWaveFnBasisData, memorySpace, dim >::Storage Storage
Definition: ElectrostaticLocalFE.h:71
std::vector< std::shared_ptr< basis::FEBasisManager< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpaceHost, dim > > > d_feBMNuclearCharge
Definition: ElectrostaticLocalFE.h:365
RealType d_correctionEnergyAtomic
Definition: ElectrostaticLocalFE.h:429
quadrature::QuadratureValuesContainer< ValueType, memorySpaceHost > * d_scratchPotRhoQuad
Definition: ElectrostaticLocalFE.h:349
bool d_useDealiiMatrixFreePoissonSolve
Definition: ElectrostaticLocalFE.h:314
std::shared_ptr< electrostatics::PoissonLinearSolverFunctionFE< ValueTypeBasisData, ValueTypeBasisCoeff, memorySpaceHost, dim > > d_linearSolverFunction
Definition: ElectrostaticLocalFE.h:411
quadrature::QuadratureValuesContainer< ValueType, memorySpaceHost > * d_correctionPotHamQuad
Definition: ElectrostaticLocalFE.h:338
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpaceHost > > d_feBDElectronicChargeRhs
Definition: ElectrostaticLocalFE.h:393
size_type d_cellTimesNumVecPoisson
Definition: ElectrostaticLocalFE.h:405
void applyNonLocal(linearAlgebra::MultiVector< ValueTypeWaveFnBasisData, memorySpace > &X, linearAlgebra::MultiVector< ValueTypeWaveFnBasisData, memorySpace > &Y, bool updateGhostX, bool updateGhostY) const override
Definition: ElectrostaticLocalFE.t.cpp:2733
linearAlgebra::MultiVector< ValueTypeBasisCoeff, memorySpaceHost > * d_totalChargePotential
Definition: ElectrostaticLocalFE.h:357
const double d_smearedChargeRadius
Definition: ElectrostaticLocalFE.h:323
std::shared_ptr< const basis::FEBasisOperations< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpaceHost, dim > > d_feBasisOpNuclear
Definition: ElectrostaticLocalFE.h:371
quadrature::QuadratureValuesContainer< ValueType, memorySpace > * d_potentialHamQuadMemspace
Definition: ElectrostaticLocalFE.h:354
RealType getEnergy() const override
Definition: ElectrostaticLocalFE.t.cpp:2672
std::shared_ptr< const basis::FEBasisManager< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpaceHost, dim > > d_feBMTotalCharge
Definition: ElectrostaticLocalFE.h:387
quadrature::QuadratureValuesContainer< RealType, memorySpaceHost > d_atomicElectronChargeDensity
Definition: ElectrostaticLocalFE.h:336
bool d_isDeltaRhoSolve
Definition: ElectrostaticLocalFE.h:317
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
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: TypeConfig.h:17