26#ifndef dftefeElectrostaticLocalFE_h
27#define dftefeElectrostaticLocalFE_h
48 template <
typename ValueTypeBasisData,
49 typename ValueTypeBasisCoeff,
50 typename ValueTypeWaveFnBasisData,
56 ValueTypeWaveFnBasisData,
63 ValueTypeWaveFnBasisData,
68 ValueTypeWaveFnBasisData,
73 ValueTypeWaveFnBasisData,
83 const std::vector<utils::Point> &atomCoordinates,
84 const std::vector<double> & atomCharges,
85 const double & smearedChargeRadius,
87 & electronChargeDensity,
91 dim>> feBMTotalCharge,
94 feBDTotalChargeStiffnessMatrix,
100 feBDElectronicChargeRhs,
103 memorySpace>> feBDHamiltonian,
108 bool useDealiiMatrixFreePoissonSolve =
true);
112 const std::vector<utils::Point> &atomCoordinates,
113 const std::vector<double> & atomCharges,
114 const double & smearedChargeRadius,
116 & electronChargeDensity,
120 dim>> feBMTotalCharge,
123 feBDTotalChargeStiffnessMatrix,
126 feBDNuclearChargeRhs,
129 feBDElectronicChargeRhs,
132 feBDNuclChargeStiffnessMatrixNumSol,
135 feBDNuclChargeRhsNumSol,
138 memorySpace>> feBDHamiltonian,
143 bool useDealiiMatrixFreePoissonSolve =
true);
148 const std::vector<utils::Point> &atomCoordinates,
149 const std::vector<std::string> & atomSymbols,
150 const std::vector<double> & atomCharges,
151 const double & smearedChargeRadius,
161 &atomicTotalElectroPotentialFunction,
163 &atomicElectronicChargeDensityFunction,
172 feBDTotalChargeStiffnessMatrix,
175 feBDNuclearChargeRhs,
178 feBDElectronicChargeRhs,
181 memorySpace>> feBDHamiltonian,
186 const std::unordered_map<std::string,
187 std::shared_ptr<atoms::AtomTCIASpline>>
188 fieldToTCIASplineMap = {},
189 const bool useDealiiMatrixFreePoissonSolve =
true,
190 const bool calculateIntegralDeltaRho =
false);
198 const std::vector<utils::Point> & atomCoordinates,
202 dim>> feBMTotalCharge,
205 feBDTotalChargeStiffnessMatrix,
208 feBDNuclearChargeRhs,
211 feBDElectronicChargeRhs,
214 memorySpace>> feBDHamiltonian,
220 const std::vector<utils::Point> & atomCoordinates,
224 dim>> feBMTotalCharge,
227 feBDTotalChargeStiffnessMatrix,
230 feBDNuclearChargeRhs,
233 feBDElectronicChargeRhs,
236 feBDNuclChargeStiffnessMatrixNumSol,
239 feBDNuclChargeRhsNumSol,
242 memorySpace>> feBDHamiltonian,
249 const std::vector<utils::Point> &atomCoordinates,
259 &atomicTotalElectroPotentialFunction,
261 &atomicElectronicChargeDensityFunction,
265 dim>> feBMTotalCharge,
268 feBDTotalChargeStiffnessMatrix,
271 feBDNuclearChargeRhs,
274 feBDElectronicChargeRhs,
277 memorySpace>> feBDHamiltonian,
283 &electronChargeDensity);
302 bool updateGhostY)
const override;
318 feBDNuclearChargeStiffnessMatrix,
321 feBDNuclearChargeRhs);
369 std::vector<linearAlgebra::MultiVector<ValueType, memorySpace> *>
389 ValueTypeWaveFnBasisData,
411 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpace>>
441 const std::unordered_map<std::string,
442 std::shared_ptr<atoms::AtomTCIASpline>>
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:57
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:73
A derived class of linearAlgebra::OperatorContext to encapsulate the action of a discrete operator on...
Definition: ElectrostaticFE.h:65
Definition: ElectrostaticLocalFE.h:59
RealType d_intRhoAtPhiAt
Definition: ElectrostaticLocalFE.h:437
quadrature::QuadratureValuesContainer< ValueType, memorySpace > * d_correctionPotRhoQuad
Definition: ElectrostaticLocalFE.h:354
void getLocal(Storage &cellWiseStorage) const override
Definition: ElectrostaticLocalFE.t.cpp:1882
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > d_feBDNuclChargeRhsNumSol
Definition: ElectrostaticLocalFE.h:410
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > d_feBDElectronicChargeRhs
Definition: ElectrostaticLocalFE.h:404
typename ElectrostaticFE< ValueTypeBasisData, ValueTypeBasisCoeff, ValueTypeWaveFnBasisData, memorySpace, dim >::ValueType ValueType
Definition: ElectrostaticLocalFE.h:65
RealType d_energy
Definition: ElectrostaticLocalFE.h:339
~ElectrostaticLocalFE()
Definition: ElectrostaticLocalFE.t.cpp:435
const size_type d_numAtoms
Definition: ElectrostaticLocalFE.h:336
void deleteStorages()
Definition: ElectrostaticLocalFE.t.cpp:450
std::vector< utils::Point > d_atomCoordinates
Definition: ElectrostaticLocalFE.h:335
double d_integralAtRho
Definition: ElectrostaticLocalFE.h:446
const quadrature::QuadratureValuesContainer< RealType, memorySpace > * d_electronChargeDensity
Definition: ElectrostaticLocalFE.h:346
RealType d_nuclearSelfEnergy
Definition: ElectrostaticLocalFE.h:340
void evalEnergy()
Definition: ElectrostaticLocalFE.t.cpp:2334
std::vector< linearAlgebra::MultiVector< ValueType, memorySpace > * > d_nuclearChargesPotential
Definition: ElectrostaticLocalFE.h:370
std::shared_ptr< electrostatics::PoissonSolverDealiiMatrixFreeFE< ValueTypeBasisData, ValueTypeBasisCoeff, memorySpace, dim > > d_poissonSolverDealiiMatFree
Definition: ElectrostaticLocalFE.h:426
utils::ConditionalOStream d_rootCout
Definition: ElectrostaticLocalFE.h:429
bool hasNonLocalComponent() const override
Definition: ElectrostaticLocalFE.t.cpp:2603
const std::unordered_map< std::string, std::shared_ptr< atoms::AtomTCIASpline > > d_fieldToTCIASplineMap
Definition: ElectrostaticLocalFE.h:443
bool d_isTCIEnabled
Definition: ElectrostaticLocalFE.h:444
std::shared_ptr< electrostatics::PoissonLinearSolverFunctionFE< ValueTypeBasisData, ValueTypeBasisCoeff, memorySpace, dim > > d_linearSolverFunction
Definition: ElectrostaticLocalFE.h:420
quadrature::QuadratureValuesContainer< ValueType, memorySpace > * d_scratchPotHamQuad
Definition: ElectrostaticLocalFE.h:361
std::vector< RealType > d_nuclearChargeQuad
Definition: ElectrostaticLocalFE.h:413
quadrature::QuadratureValuesContainer< RealType, memorySpace > * d_nuclearChargesDensity
Definition: ElectrostaticLocalFE.h:344
const quadrature::QuadratureValuesContainer< ValueType, memorySpace > & getFunctionalDerivative() const override
Definition: ElectrostaticLocalFE.t.cpp:2533
void reinitBasis(const std::vector< utils::Point > &atomCoordinates, std::shared_ptr< const basis::FEBasisManager< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace, dim > > feBMTotalCharge, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > feBDTotalChargeStiffnessMatrix, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > feBDNuclearChargeRhs, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > feBDElectronicChargeRhs, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeWaveFnBasisData, memorySpace > > feBDHamiltonian, const utils::ScalarSpatialFunctionReal &externalPotentialFunction)
Definition: ElectrostaticLocalFE.t.cpp:835
std::shared_ptr< const basis::FEBasisOperations< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace, dim > > d_feBasisOpNuclear
Definition: ElectrostaticLocalFE.h:382
std::vector< std::string > d_atomSymbolVec
Definition: ElectrostaticLocalFE.h:440
const bool d_isCalculateIntegralDeltaRho
Definition: ElectrostaticLocalFE.h:330
quadrature::QuadratureValuesContainer< ValueTypeBasisCoeff, memorySpace > * d_atomicTotalElecPotElectronicQuad
Definition: ElectrostaticLocalFE.h:348
void computeNuclearSelfEnergy()
Definition: ElectrostaticLocalFE.t.cpp:2123
const std::vector< double > d_atomCharges
Definition: ElectrostaticLocalFE.h:337
const size_type d_numComponents
Definition: ElectrostaticLocalFE.h:334
const size_type d_maxCellBlock
Definition: ElectrostaticLocalFE.h:333
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > d_linAlgOpContext
Definition: ElectrostaticLocalFE.h:412
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > d_feBDNuclearChargeRhs
Definition: ElectrostaticLocalFE.h:407
typename ElectrostaticFE< ValueTypeBasisData, ValueTypeBasisCoeff, ValueTypeWaveFnBasisData, memorySpace, dim >::RealType RealType
Definition: ElectrostaticLocalFE.h:75
bool hasLocalComponent() const override
Definition: ElectrostaticLocalFE.t.cpp:2588
RealType d_totNuclearChargeQuad
Definition: ElectrostaticLocalFE.h:427
std::shared_ptr< const basis::FEBasisOperations< ValueTypeBasisCoeff, ValueTypeWaveFnBasisData, memorySpace, dim > > d_feBasisOpHamiltonian
Definition: ElectrostaticLocalFE.h:392
RealType d_integralPhiAtxbSmear
Definition: ElectrostaticLocalFE.h:437
bool d_isNumericalVSelfSolve
Definition: ElectrostaticLocalFE.h:331
double d_integralDiffVZZCorrVSmearxSumBZZCorrBSmear
Definition: ElectrostaticLocalFE.h:445
quadrature::QuadratureValuesContainer< ValueType, memorySpace > * d_scratchPotNuclearQuad
Definition: ElectrostaticLocalFE.h:365
void reinitField(const quadrature::QuadratureValuesContainer< RealType, memorySpace > &electronChargeDensity)
Definition: ElectrostaticLocalFE.t.cpp:1623
typename ElectrostaticFE< ValueTypeBasisData, ValueTypeBasisCoeff, ValueTypeWaveFnBasisData, memorySpace, dim >::Storage Storage
Definition: ElectrostaticLocalFE.h:70
std::map< std::string, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > > d_feBasisDataStorageRhsMap
Definition: ElectrostaticLocalFE.h:435
RealType d_correctionEnergyAtomic
Definition: ElectrostaticLocalFE.h:438
quadrature::QuadratureValuesContainer< ValueType, memorySpace > * d_correctionPotHamQuad
Definition: ElectrostaticLocalFE.h:352
bool d_useDealiiMatrixFreePoissonSolve
Definition: ElectrostaticLocalFE.h:329
quadrature::QuadratureValuesContainer< RealType, memorySpace > * d_scratchDensRhoQuad
Definition: ElectrostaticLocalFE.h:359
size_type d_cellTimesNumVecPoisson
Definition: ElectrostaticLocalFE.h:414
void applyNonLocal(linearAlgebra::MultiVector< ValueTypeWaveFnBasisData, memorySpace > &X, linearAlgebra::MultiVector< ValueTypeWaveFnBasisData, memorySpace > &Y, bool updateGhostX, bool updateGhostY) const override
Definition: ElectrostaticLocalFE.t.cpp:2567
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_atomicElectronChargeDensity
Definition: ElectrostaticLocalFE.h:350
std::shared_ptr< const basis::FEBasisManager< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace, dim > > d_feBMTotalCharge
Definition: ElectrostaticLocalFE.h:398
std::vector< std::shared_ptr< basis::FEBasisManager< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace, dim > > > d_feBMNuclearCharge
Definition: ElectrostaticLocalFE.h:376
std::shared_ptr< const basis::FEBasisOperations< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace, dim > > d_feBasisOpElectronic
Definition: ElectrostaticLocalFE.h:387
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > d_feBDTotalChargeStiffnessMatrix
Definition: ElectrostaticLocalFE.h:401
const double d_smearedChargeRadius
Definition: ElectrostaticLocalFE.h:338
RealType getEnergy() const override
Definition: ElectrostaticLocalFE.t.cpp:2512
linearAlgebra::MultiVector< ValueTypeBasisCoeff, memorySpace > * d_totalChargePotential
Definition: ElectrostaticLocalFE.h:368
quadrature::QuadratureValuesContainer< ValueType, memorySpace > * d_scratchPotRhoQuad
Definition: ElectrostaticLocalFE.h:363
quadrature::QuadratureValuesContainer< RealType, memorySpace > * d_scratchDensNuclearQuad
Definition: ElectrostaticLocalFE.h:357
void nuclearPotentialSolve(std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > feBDNuclearChargeStiffnessMatrix, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > feBDNuclearChargeRhs)
Definition: ElectrostaticLocalFE.t.cpp:1928
bool d_isDeltaRhoSolve
Definition: ElectrostaticLocalFE.h:332
Definition: LinAlgOpContext.h:38
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
Definition: Function.h:10
MemorySpace
Definition: MemorySpaceType.h:37
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
unsigned int size_type
Definition: TypeConfig.h:8
Definition: TypeConfig.h:15