26#ifndef dftefeElectrostaticONCVNonLocFE_h
27#define dftefeElectrostaticONCVNonLocFE_h
49 template <
typename ValueTypeBasisData,
50 typename ValueTypeBasisCoeff,
51 typename ValueTypeWaveFnBasis,
52 typename ValueTypeWaveFnCoeff,
85 const std::vector<utils::Point> &atomCoordinates,
86 const std::vector<double> & atomCharges,
87 const std::vector<std::string> & atomSymbolVec,
88 const std::shared_ptr<atoms::AtomSphericalDataContainer>
89 atomSphericalDataContainerPSP,
90 const double &smearedChargeRadius,
92 & electronChargeDensity,
96 dim>> feBMTotalCharge,
103 feBDTotalChargeStiffnessMatrix,
106 feBDNuclearChargeRhs,
109 feBDElectronicChargeRhs,
115 feBDAtomCenterNonLocalOperator,
120 const bool useDealiiMatrixFreePoissonSolve =
true);
125 const std::vector<utils::Point> &atomCoordinates,
126 const std::vector<double> & atomCharges,
127 const std::vector<std::string> & atomSymbolVec,
128 const std::shared_ptr<atoms::AtomSphericalDataContainer>
129 atomSphericalDataContainerPSP,
130 const double &smearedChargeRadius,
140 &atomicTotalElectroPotentialFunction,
142 &atomicElectronicChargeDensityFunction,
150 ValueTypeWaveFnBasis,
155 feBDTotalChargeStiffnessMatrix,
158 feBDNuclearChargeRhs,
161 feBDElectronicChargeRhs,
167 feBDAtomCenterNonLocalOperator,
172 const std::unordered_map<std::string,
173 std::shared_ptr<atoms::AtomTCIASpline>>
174 fieldToTCIASplineMap = {},
175 const bool useDealiiMatrixFreePoissonSolve =
true);
182 const std::vector<utils::Point> & atomCoordinates,
186 dim>> feBMTotalCharge,
188 ValueTypeWaveFnBasis,
193 feBDTotalChargeStiffnessMatrix,
196 feBDNuclearChargeRhs,
199 feBDElectronicChargeRhs,
205 feBDAtomCenterNonLocalOperator);
211 const std::vector<utils::Point> &atomCoordinates,
221 &atomicTotalElectroPotentialFunction,
223 &atomicElectronicChargeDensityFunction,
227 dim>> feBMTotalCharge,
229 ValueTypeWaveFnBasis,
234 feBDTotalChargeStiffnessMatrix,
237 feBDNuclearChargeRhs,
240 feBDElectronicChargeRhs,
246 feBDAtomCenterNonLocalOperator);
251 &electronChargeDensity);
261 bool updateGhostY)
const override;
271 const std::vector<RealType> &occupation,
282 ValueTypeWaveFnCoeff,
288 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpace>>
290 std::shared_ptr<atoms::AtomSphericalDataContainer>
295 ValueTypeWaveFnCoeff,
301 ValueTypeWaveFnBasis,
314 std::shared_ptr<linearAlgebra::MultiVector<ValueType, memorySpace>>
316 std::shared_ptr<const utils::mpi::MPIPatternP2P<memorySpace>>
Definition: AtomCenterNonLocalOpContextFE.h:50
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
A derived class of linearAlgebra::OperatorContext to encapsulate the action of a discrete operator on...
Definition: ElectrostaticFE.h:65
Definition: ElectrostaticLocalFE.h:59
Definition: ElectrostaticONCVNonLocFE.h:61
bool hasNonLocalComponent() const override
Definition: ElectrostaticONCVNonLocFE.t.cpp:571
utils::ConditionalOStream d_rootCout
Definition: ElectrostaticONCVNonLocFE.h:307
std::shared_ptr< const utils::mpi::MPIPatternP2P< memorySpace > > d_mpiPatternP2P
Definition: ElectrostaticONCVNonLocFE.h:317
bool hasLocalComponent() const override
Definition: ElectrostaticONCVNonLocFE.t.cpp:554
void getLocal(Storage &cellWiseStorage) const override
Definition: ElectrostaticONCVNonLocFE.t.cpp:509
RealType getEnergy() const override
Definition: ElectrostaticONCVNonLocFE.t.cpp:720
void reinitField(const quadrature::QuadratureValuesContainer< RealType, memorySpace > &electronChargeDensity)
Definition: ElectrostaticONCVNonLocFE.t.cpp:490
std::shared_ptr< const atoms::AtomSevereFunction< dim > > d_atomVLocFunction
Definition: ElectrostaticONCVNonLocFE.h:292
~ElectrostaticONCVNonLocFE()=default
void reinitBasis(const std::vector< utils::Point > &atomCoordinates, std::shared_ptr< const basis::FEBasisManager< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace, dim > > feBMTotalCharge, std::shared_ptr< const basis::FEBasisManager< ValueTypeWaveFnCoeff, ValueTypeWaveFnBasis, memorySpace, dim > > feBMWaveFn, 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< ValueTypeWaveFnBasis, memorySpace > > feBDHamiltonian, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeWaveFnBasis, memorySpace > > feBDAtomCenterNonLocalOperator)
Definition: ElectrostaticONCVNonLocFE.t.cpp:320
const utils::mpi::MPIComm d_mpiComm
Definition: ElectrostaticONCVNonLocFE.h:308
std::shared_ptr< linearAlgebra::MultiVector< ValueType, memorySpace > > d_YBatchSmall
Definition: ElectrostaticONCVNonLocFE.h:315
std::shared_ptr< const basis::AtomCenterNonLocalOpContextFE< ValueTypeWaveFnBasis, ValueTypeWaveFnCoeff, memorySpace, dim > > getAtomCenterNonLocalOpContextFE() const
Definition: ElectrostaticONCVNonLocFE.t.cpp:764
const size_type d_maxWaveFnBlock
Definition: ElectrostaticONCVNonLocFE.h:310
std::shared_ptr< atoms::AtomSphericalDataContainer > d_atomSphericalDataContainerPSP
Definition: ElectrostaticONCVNonLocFE.h:291
void applyNonLocal(linearAlgebra::MultiVector< ValueTypeWaveFnCoeff, memorySpace > &X, linearAlgebra::MultiVector< ValueTypeWaveFnCoeff, memorySpace > &Y, bool updateGhostX, bool updateGhostY) const override
Definition: ElectrostaticONCVNonLocFE.t.cpp:527
std::shared_ptr< linearAlgebra::MultiVector< ValueType, memorySpace > > d_YBatch
Definition: ElectrostaticONCVNonLocFE.h:315
std::shared_ptr< linearAlgebra::MultiVector< ValueType, memorySpace > > d_psiBatch
Definition: ElectrostaticONCVNonLocFE.h:315
typename ElectrostaticFE< ValueTypeBasisData, ValueTypeBasisCoeff, ValueTypeWaveFnBasis, memorySpace, dim >::RealType RealType
Definition: ElectrostaticONCVNonLocFE.h:77
const std::vector< std::string > d_atomSymbolVec
Definition: ElectrostaticONCVNonLocFE.h:311
const quadrature::QuadratureValuesContainer< ValueType, memorySpace > & getFunctionalDerivative() const override
Definition: ElectrostaticONCVNonLocFE.t.cpp:743
void evalEnergy(const std::vector< RealType > &occupation, linearAlgebra::MultiVector< ValueTypeWaveFnCoeff, memorySpace > &X)
Definition: ElectrostaticONCVNonLocFE.t.cpp:590
RealType d_energy
Definition: ElectrostaticONCVNonLocFE.h:305
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > d_linAlgOpContext
Definition: ElectrostaticONCVNonLocFE.h:289
const size_type d_numComponents
Definition: ElectrostaticONCVNonLocFE.h:306
typename ElectrostaticFE< ValueTypeBasisData, ValueTypeBasisCoeff, ValueTypeWaveFnBasis, memorySpace, dim >::Storage Storage
Definition: ElectrostaticONCVNonLocFE.h:72
std::shared_ptr< linearAlgebra::MultiVector< ValueType, memorySpace > > d_psiBatchSmall
Definition: ElectrostaticONCVNonLocFE.h:315
bool d_isNonLocPSP
Definition: ElectrostaticONCVNonLocFE.h:312
std::shared_ptr< const basis::AtomCenterNonLocalOpContextFE< ValueTypeWaveFnBasis, ValueTypeWaveFnCoeff, memorySpace, dim > > d_atomNonLocOpContext
Definition: ElectrostaticONCVNonLocFE.h:298
typename ElectrostaticFE< ValueTypeBasisData, ValueTypeBasisCoeff, ValueTypeWaveFnBasis, memorySpace, dim >::ValueType ValueType
Definition: ElectrostaticONCVNonLocFE.h:67
const size_type d_maxCellBlock
Definition: ElectrostaticONCVNonLocFE.h:309
std::shared_ptr< ElectrostaticLocalFE< ValueTypeBasisData, ValueTypeBasisCoeff, ValueTypeWaveFnBasis, memorySpace, dim > > d_electrostaticLocal
Definition: ElectrostaticONCVNonLocFE.h:304
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
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