26#ifndef dftefeElectrostaticLocalFE_h
27#define dftefeElectrostaticLocalFE_h
46 template <
typename ValueTypeBasisData,
47 typename ValueTypeBasisCoeff,
48 typename ValueTypeWaveFnBasisData,
54 ValueTypeWaveFnBasisData,
61 ValueTypeWaveFnBasisData,
66 ValueTypeWaveFnBasisData,
71 ValueTypeWaveFnBasisData,
81 const std::vector<utils::Point> &atomCoordinates,
82 const std::vector<double> & atomCharges,
83 const std::vector<double> & smearedChargeRadius,
85 & electronChargeDensity,
89 dim>> feBMTotalCharge,
92 feBDTotalChargeStiffnessMatrix,
98 feBDElectronicChargeRhs,
101 memorySpace>> feBDHamiltonian,
106 bool useDealiiMatrixFreePoissonSolve =
true);
110 const std::vector<utils::Point> &atomCoordinates,
111 const std::vector<double> & atomCharges,
112 const std::vector<double> & smearedChargeRadius,
114 & electronChargeDensity,
118 dim>> feBMTotalCharge,
121 feBDTotalChargeStiffnessMatrix,
124 feBDNuclearChargeRhs,
127 feBDElectronicChargeRhs,
130 feBDNuclChargeStiffnessMatrixNumSol,
133 feBDNuclChargeRhsNumSol,
136 memorySpace>> feBDHamiltonian,
141 bool useDealiiMatrixFreePoissonSolve =
true);
146 const std::vector<utils::Point> &atomCoordinates,
147 const std::vector<double> & atomCharges,
148 const std::vector<double> & smearedChargeRadius,
158 &atomicTotalElectroPotentialFunction,
160 &atomicElectronicChargeDensityFunction,
169 feBDTotalChargeStiffnessMatrix,
172 feBDNuclearChargeRhs,
175 feBDElectronicChargeRhs,
178 memorySpace>> feBDHamiltonian,
183 const bool useDealiiMatrixFreePoissonSolve =
true,
184 const bool calculateIntegralDeltaRho =
false);
192 const std::vector<utils::Point> & atomCoordinates,
196 dim>> feBMTotalCharge,
199 feBDTotalChargeStiffnessMatrix,
202 feBDNuclearChargeRhs,
205 feBDElectronicChargeRhs,
208 memorySpace>> feBDHamiltonian,
214 const std::vector<utils::Point> & atomCoordinates,
218 dim>> feBMTotalCharge,
221 feBDTotalChargeStiffnessMatrix,
224 feBDNuclearChargeRhs,
227 feBDElectronicChargeRhs,
230 feBDNuclChargeStiffnessMatrixNumSol,
233 feBDNuclChargeRhsNumSol,
236 memorySpace>> feBDHamiltonian,
243 const std::vector<utils::Point> &atomCoordinates,
253 &atomicTotalElectroPotentialFunction,
255 &atomicElectronicChargeDensityFunction,
259 dim>> feBMTotalCharge,
262 feBDTotalChargeStiffnessMatrix,
265 feBDNuclearChargeRhs,
268 feBDElectronicChargeRhs,
271 memorySpace>> feBDHamiltonian,
277 &electronChargeDensity);
296 bool updateGhostY)
const override;
312 feBDNuclearChargeStiffnessMatrix,
315 feBDNuclearChargeRhs);
365 std::vector<linearAlgebra::MultiVector<ValueType, memorySpace> *>
385 ValueTypeWaveFnBasisData,
407 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpace>>
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:57
quadrature::QuadratureValuesContainer< ValueType, memorySpace > * d_correctionPotRhoQuad
Definition: ElectrostaticLocalFE.h:348
void getLocal(Storage &cellWiseStorage) const override
Definition: ElectrostaticLocalFE.t.cpp:1594
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > d_feBDNuclChargeRhsNumSol
Definition: ElectrostaticLocalFE.h:406
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > d_feBDElectronicChargeRhs
Definition: ElectrostaticLocalFE.h:400
typename ElectrostaticFE< ValueTypeBasisData, ValueTypeBasisCoeff, ValueTypeWaveFnBasisData, memorySpace, dim >::ValueType ValueType
Definition: ElectrostaticLocalFE.h:63
RealType d_energy
Definition: ElectrostaticLocalFE.h:333
~ElectrostaticLocalFE()
Definition: ElectrostaticLocalFE.t.cpp:405
const size_type d_numAtoms
Definition: ElectrostaticLocalFE.h:330
void deleteStorages()
Definition: ElectrostaticLocalFE.t.cpp:420
std::vector< utils::Point > d_atomCoordinates
Definition: ElectrostaticLocalFE.h:329
const quadrature::QuadratureValuesContainer< RealType, memorySpace > * d_electronChargeDensity
Definition: ElectrostaticLocalFE.h:340
RealType d_nuclearSelfEnergy
Definition: ElectrostaticLocalFE.h:334
void evalEnergy()
Definition: ElectrostaticLocalFE.t.cpp:2027
std::vector< linearAlgebra::MultiVector< ValueType, memorySpace > * > d_nuclearChargesPotential
Definition: ElectrostaticLocalFE.h:366
std::shared_ptr< electrostatics::PoissonSolverDealiiMatrixFreeFE< ValueTypeBasisData, ValueTypeBasisCoeff, memorySpace, dim > > d_poissonSolverDealiiMatFree
Definition: ElectrostaticLocalFE.h:422
utils::ConditionalOStream d_rootCout
Definition: ElectrostaticLocalFE.h:425
bool hasNonLocalComponent() const override
Definition: ElectrostaticLocalFE.t.cpp:2278
const bool d_useDealiiMatrixFreePoissonSolve
Definition: ElectrostaticLocalFE.h:323
std::shared_ptr< electrostatics::PoissonLinearSolverFunctionFE< ValueTypeBasisData, ValueTypeBasisCoeff, memorySpace, dim > > d_linearSolverFunction
Definition: ElectrostaticLocalFE.h:416
quadrature::QuadratureValuesContainer< ValueType, memorySpace > * d_scratchPotHamQuad
Definition: ElectrostaticLocalFE.h:357
std::vector< RealType > d_nuclearChargeQuad
Definition: ElectrostaticLocalFE.h:409
quadrature::QuadratureValuesContainer< RealType, memorySpace > * d_nuclearChargesDensity
Definition: ElectrostaticLocalFE.h:338
const quadrature::QuadratureValuesContainer< ValueType, memorySpace > & getFunctionalDerivative() const override
Definition: ElectrostaticLocalFE.t.cpp:2208
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:814
std::shared_ptr< const basis::FEBasisOperations< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace, dim > > d_feBasisOpNuclear
Definition: ElectrostaticLocalFE.h:378
const bool d_isCalculateIntegralDeltaRho
Definition: ElectrostaticLocalFE.h:324
void computeNuclearSelfEnergy()
Definition: ElectrostaticLocalFE.t.cpp:1834
const std::vector< double > d_atomCharges
Definition: ElectrostaticLocalFE.h:331
const size_type d_numComponents
Definition: ElectrostaticLocalFE.h:328
const size_type d_maxCellBlock
Definition: ElectrostaticLocalFE.h:327
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > d_linAlgOpContext
Definition: ElectrostaticLocalFE.h:408
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > d_feBDNuclearChargeRhs
Definition: ElectrostaticLocalFE.h:403
typename ElectrostaticFE< ValueTypeBasisData, ValueTypeBasisCoeff, ValueTypeWaveFnBasisData, memorySpace, dim >::RealType RealType
Definition: ElectrostaticLocalFE.h:73
quadrature::QuadratureValuesContainer< ValueTypeBasisCoeff, memorySpace > * d_atomicTotalElecPotElectronicQuad
Definition: ElectrostaticLocalFE.h:342
bool hasLocalComponent() const override
Definition: ElectrostaticLocalFE.t.cpp:2263
RealType d_totNuclearChargeQuad
Definition: ElectrostaticLocalFE.h:423
std::shared_ptr< const basis::FEBasisOperations< ValueTypeBasisCoeff, ValueTypeWaveFnBasisData, memorySpace, dim > > d_feBasisOpHamiltonian
Definition: ElectrostaticLocalFE.h:388
bool d_isNumericalVSelfSolve
Definition: ElectrostaticLocalFE.h:325
quadrature::QuadratureValuesContainer< ValueType, memorySpace > * d_scratchPotNuclearQuad
Definition: ElectrostaticLocalFE.h:361
void reinitField(const quadrature::QuadratureValuesContainer< RealType, memorySpace > &electronChargeDensity)
Definition: ElectrostaticLocalFE.t.cpp:1410
typename ElectrostaticFE< ValueTypeBasisData, ValueTypeBasisCoeff, ValueTypeWaveFnBasisData, memorySpace, dim >::Storage Storage
Definition: ElectrostaticLocalFE.h:68
std::map< std::string, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > > d_feBasisDataStorageRhsMap
Definition: ElectrostaticLocalFE.h:431
quadrature::QuadratureValuesContainer< ValueType, memorySpace > * d_correctionPotNucQuad
Definition: ElectrostaticLocalFE.h:350
quadrature::QuadratureValuesContainer< ValueType, memorySpace > * d_correctionPotHamQuad
Definition: ElectrostaticLocalFE.h:346
quadrature::QuadratureValuesContainer< ValueTypeBasisCoeff, memorySpace > * d_atomicTotalElecPotNuclearQuad
Definition: ElectrostaticLocalFE.h:342
quadrature::QuadratureValuesContainer< RealType, memorySpace > * d_scratchDensRhoQuad
Definition: ElectrostaticLocalFE.h:355
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:2242
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_atomicElectronChargeDensity
Definition: ElectrostaticLocalFE.h:344
std::shared_ptr< const basis::FEBasisManager< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace, dim > > d_feBMTotalCharge
Definition: ElectrostaticLocalFE.h:394
std::vector< std::shared_ptr< basis::FEBasisManager< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace, dim > > > d_feBMNuclearCharge
Definition: ElectrostaticLocalFE.h:372
const std::vector< double > d_smearedChargeRadius
Definition: ElectrostaticLocalFE.h:332
std::shared_ptr< const basis::FEBasisOperations< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace, dim > > d_feBasisOpElectronic
Definition: ElectrostaticLocalFE.h:383
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > d_feBDTotalChargeStiffnessMatrix
Definition: ElectrostaticLocalFE.h:397
RealType getEnergy() const override
Definition: ElectrostaticLocalFE.t.cpp:2187
quadrature::QuadratureValuesContainer< RealType, memorySpace > d_atomicElectronChargeDensityNucQuad
Definition: ElectrostaticLocalFE.h:344
linearAlgebra::MultiVector< ValueTypeBasisCoeff, memorySpace > * d_totalChargePotential
Definition: ElectrostaticLocalFE.h:364
quadrature::QuadratureValuesContainer< ValueType, memorySpace > * d_scratchPotRhoQuad
Definition: ElectrostaticLocalFE.h:359
quadrature::QuadratureValuesContainer< RealType, memorySpace > * d_scratchDensNuclearQuad
Definition: ElectrostaticLocalFE.h:353
void nuclearPotentialSolve(std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > feBDNuclearChargeStiffnessMatrix, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > feBDNuclearChargeRhs)
Definition: ElectrostaticLocalFE.t.cpp:1640
bool d_isDeltaRhoSolve
Definition: ElectrostaticLocalFE.h:326
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