26#ifndef dftefe_RDM1Mixing_h
27#define dftefe_RDM1Mixing_h
31#include <unordered_map>
62 template <
typename ValueType, dftefe::utils::MemorySpace memorySpace>
94 const std::vector<RealType> & jxwDataHost,
95 const double mixingParameter,
96 const bool isAdaptiveMixingParameter,
97 const double spinMixingEnhancementFactor,
99 const std::string & xcType,
103 const MPI_Comm &mpiCommDomain);
134 const std::set<DensityDescrAttr> & densityAttrs,
135 const std::set<WfcDescrAttr> & wfcAttrs,
136 std::unordered_map<DensityDescrAttr, AttrStorage> &densityAttrVals,
137 std::unordered_map<WfcDescrAttr, AttrStorage> &wfcAttrVals)
override;
140 setDescriptors(
const std::unordered_map<DensityDescrAttr, AttrStorage>
142 const std::unordered_map<WfcDescrAttr, AttrStorage>
143 &wfcAttrVals)
override;
147 const std::set<DensityObsAttr> &densityObsAttrs,
148 std::unordered_map<
DensityObsAttr, std::vector<std::vector<double>>>
149 &densityObsAttrVals)
override;
156 isSOC()
const override;
163 std::unique_ptr<RDM1<ValueType, memorySpace>>
164 clone()
const override;
172 std::shared_ptr<linearAlgebra::LinAlgOpContext<utils::MemorySpace::HOST>>
This class performs the anderson mixing in a variable agnostic way This class takes can take differen...
Definition: MixingScheme.h:72
RDM1 implementation that performs Anderson mixing of the electron density. Derives directly from RDM1...
Definition: RDM1Mixing.h:64
bool isSOC() const override
Definition: RDM1Mixing.t.cpp:306
MixingScheme< RealType, RealType > & d_mixingScheme
Definition: RDM1Mixing.h:169
AttrStorage d_gradDensityInAttrVals
Definition: RDM1Mixing.h:177
void setRDM1(std::shared_ptr< RDM1< ValueType, memorySpace > > rdm1)
Store rdm1 as a weak_ptr (non-owning).
Definition: RDM1Mixing.t.cpp:122
std::shared_ptr< linearAlgebra::LinAlgOpContext< utils::MemorySpace::HOST > > d_linAlgOpContextHost
Definition: RDM1Mixing.h:173
void getDensityObs(const std::set< DensityObsAttr > &densityObsAttrs, std::unordered_map< DensityObsAttr, std::vector< std::vector< double > > > &densityObsAttrVals) override
Definition: RDM1Mixing.t.cpp:275
SpinMode spinMode() const override
Definition: RDM1Mixing.t.cpp:295
std::weak_ptr< RDM1< ValueType, memorySpace > > d_rdm1Ptr
Definition: RDM1Mixing.h:167
size_type d_numElectrons
Definition: RDM1Mixing.h:171
const RDM1< ValueType, memorySpace > & getRDM1() const
Definition: RDM1Mixing.t.cpp:130
std::vector< double > getkPointWeights() const override
Definition: RDM1Mixing.t.cpp:339
void getDescriptors(const std::set< DensityDescrAttr > &densityAttrs, const std::set< WfcDescrAttr > &wfcAttrs, std::unordered_map< DensityDescrAttr, AttrStorage > &densityAttrVals, std::unordered_map< WfcDescrAttr, AttrStorage > &wfcAttrVals) override
Returns d_densityInAttrVals (the last mixed in-density).
Definition: RDM1Mixing.t.cpp:243
std::vector< double > getkPointCoords() const override
Definition: RDM1Mixing.t.cpp:328
linearAlgebra::blasLapack::real_type< ValueType > RealType
Definition: RDM1Mixing.h:66
virtual ~RDM1Mixing()=default
std::unique_ptr< RDM1< ValueType, memorySpace > > clone() const override
Definition: RDM1Mixing.t.cpp:350
void mix()
Execute the Anderson mixing pipeline using the stored d_rdm1Ptr. Computes residual = densOut - d_dens...
Definition: RDM1Mixing.t.cpp:141
void setEvalDescrFlag(const bool evalFlag) override
Definition: RDM1Mixing.t.cpp:289
void setDescriptors(const std::unordered_map< DensityDescrAttr, AttrStorage > &densityAttrVals, const std::unordered_map< WfcDescrAttr, AttrStorage > &wfcAttrVals) override
Definition: RDM1Mixing.t.cpp:261
size_type d_mixingHistory
Definition: RDM1Mixing.h:170
typename RDM1< ValueType, memorySpace >::AttrStorage AttrStorage
Definition: RDM1Mixing.h:67
size_type getnKSOrbs() const override
Definition: RDM1Mixing.t.cpp:317
std::reference_wrapper< const MPI_Comm > d_mpiCommDomain
Definition: RDM1Mixing.h:174
AttrStorage d_densityInAttrVals
Definition: RDM1Mixing.h:176
Abstract class for the one-particle reduced density matrix.
Definition: RDM1.h:52
std::vector< dftefe::quadrature::QuadratureValuesContainer< double, dftefe::utils::MemorySpace::HOST > > AttrStorage
Definition: RDM1.h:59
Definition: LinAlgOpContext.h:52
DensityObsAttr
Definition: KSAttributes.h:48
SpinMode
Definition: KSAttributes.h:55
typeInternal::real_type< ValueType > real_type
Definition: BlasLapackTypedef.h:177
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
std::uint64_t size_type
Definition: TypeConfig.h:9