DFT-EFE
 
Loading...
Searching...
No Matches
dftefe::ksdft::RDM1Mixing< ValueType, memorySpace > Class Template Reference

RDM1 implementation that performs Anderson mixing of the electron density. Derives directly from RDM1 — no spectral decomposition. More...

#include <RDM1Mixing.h>

Inheritance diagram for dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >:
Collaboration diagram for dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >:

Public Types

using RealType = linearAlgebra::blasLapack::real_type< ValueType >
 
using AttrStorage = typename RDM1< ValueType, memorySpace >::AttrStorage
 
- Public Types inherited from dftefe::ksdft::RDM1< ValueType, memorySpace >
using AttrStorage = std::vector< dftefe::quadrature::QuadratureValuesContainer< double, dftefe::utils::MemorySpace::HOST > >
 
using AttrStorageRef = std::reference_wrapper< AttrStorage >
 
using AttrStorageConstRef = std::reference_wrapper< const AttrStorage >
 

Public Member Functions

 RDM1Mixing (MixingScheme< RealType, RealType > &mixingScheme, const size_type mixingHistory, const std::vector< RealType > &jxwDataHost, const double mixingParameter, const bool isAdaptiveMixingParameter, std::shared_ptr< linearAlgebra::LinAlgOpContext< utils::MemorySpace::HOST > > linAlgOpContextHost, const MPI_Comm &mpiCommDomain)
 Constructor. More...
 
virtual ~RDM1Mixing ()=default
 
void setRDM1 (std::shared_ptr< RDM1< ValueType, memorySpace > > rdm1)
 Store rdm1 as a weak_ptr (non-owning). More...
 
const RDM1< ValueType, memorySpace > & getRDM1 () const
 
void mix ()
 Execute the Anderson mixing pipeline using the stored d_rdm1Ptr. On the first call d_densityInAttrVals is adopted from densOut. Subsequent calls compute residual, mix, and update d_densityInAttrVals. No normalization is performed here. More...
 
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). More...
 
void setDescriptors (const std::unordered_map< DensityDescrAttr, AttrStorage > &densityAttrVals, const std::unordered_map< WfcDescrAttr, AttrStorage > &wfcAttrVals) override
 
void getDensityObs (const std::set< DensityObsAttr > &densityObsAttrs, std::unordered_map< DensityObsAttr, std::vector< std::vector< double > > > &densityObsAttrVals) override
 
void setEvalDescrFlag (const bool evalFlag) override
 
bool isSpinPolarized () const override
 
bool isNonCollinear () const override
 
bool isSOC () const override
 
size_type getnKSOrbs () const override
 
std::vector< double > getkPointCoords () const override
 
std::vector< double > getkPointWeights () const override
 
std::unique_ptr< RDM1< ValueType, memorySpace > > clone () const override
 
- Public Member Functions inherited from dftefe::ksdft::RDM1< ValueType, memorySpace >
virtual ~RDM1 ()=default
 Default destructor. More...
 
virtual void setEvalDescrFlag (const bool evalFlag)=0
 
virtual void getDescriptors (const std::set< DensityDescrAttr > &densityAttrs, const std::set< WfcDescrAttr > &wfcAttrs, std::unordered_map< DensityDescrAttr, AttrStorage > &densityAttrVals, std::unordered_map< WfcDescrAttr, AttrStorage > &wfcAttrVals)=0
 
virtual void setDescriptors (const std::unordered_map< DensityDescrAttr, AttrStorage > &densityAttrVals, const std::unordered_map< WfcDescrAttr, AttrStorage > &wfcAttrVals)=0
 
virtual void getDensityObs (const std::set< DensityObsAttr > &densityObsAttrs, std::unordered_map< DensityObsAttr, std::vector< std::vector< double > > > &densityObsAttrVals)=0
 
virtual bool isSpinPolarized () const =0
 
virtual bool isNonCollinear () const =0
 
virtual bool isSOC () const =0
 
virtual size_type getnKSOrbs () const =0
 
virtual std::vector< double > getkPointCoords () const =0
 
virtual std::vector< double > getkPointWeights () const =0
 
virtual std::unique_ptr< RDM1< ValueType, memorySpace > > clone () const =0
 

Private Attributes

std::weak_ptr< RDM1< ValueType, memorySpace > > d_rdm1Ptr
 
MixingScheme< RealType, RealType > & d_mixingScheme
 
size_type d_mixingHistory
 
size_type d_numElectrons
 
std::shared_ptr< linearAlgebra::LinAlgOpContext< utils::MemorySpace::HOST > > d_linAlgOpContextHost
 
std::reference_wrapper< const MPI_Comm > d_mpiCommDomain
 
AttrStorage d_densityInAttrVals
 
AttrStorage d_gradDensityInAttrVals
 

Detailed Description

template<typename ValueType, dftefe::utils::MemorySpace memorySpace>
class dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >

RDM1 implementation that performs Anderson mixing of the electron density. Derives directly from RDM1 — no spectral decomposition.

setRDM1(rdm1) — stores the RDM1 pointer. mix() — explicit call from KohnShamDFT after each eigensolve. Fetches densOut from d_rdm1Ptr->getDescriptors(), computes residual = densOut - in, and performs Anderson mixing. No normalization is done here; KohnShamDFT normalizes densIn and densOut externally. getDescriptors — returns d_densityInAttrVals (the last mixed in-density).

The caller (KohnShamDFT) owns and configures the MixingScheme object (including addMixingVariable) before the first setRDM1() call. d_rdm1Ptr is null until the first setRDM1() call.

Member Typedef Documentation

◆ AttrStorage

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
using dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::AttrStorage = typename RDM1<ValueType, memorySpace>::AttrStorage

◆ RealType

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
using dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::RealType = linearAlgebra::blasLapack::real_type<ValueType>

Constructor & Destructor Documentation

◆ RDM1Mixing()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::RDM1Mixing ( MixingScheme< RealType, RealType > &  mixingScheme,
const size_type  mixingHistory,
const std::vector< RealType > &  jxwDataHost,
const double  mixingParameter,
const bool  isAdaptiveMixingParameter,
std::shared_ptr< linearAlgebra::LinAlgOpContext< utils::MemorySpace::HOST > >  linAlgOpContextHost,
const MPI_Comm &  mpiCommDomain 
)

Constructor.

Parameters
mixingSchemeAnderson mixing scheme owned by the caller. RDM1Mixing calls addVariableToInHist, addVariableToResidualHist, popOldHistory, computeAndersonMixingCoeff, and mixVariable on it inside mix(). The caller is responsible for calling addMixingVariable() on the scheme before the first setRDM1() call.
mixingHistoryAnderson mixing history length.
numElectronsNumber of electrons (unused internally; kept for interface compatibility).
linAlgOpContextHostLinAlg context for HOST-side operations.
mpiCommDomainMPI communicator.
Here is the call graph for this function:

◆ ~RDM1Mixing()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
virtual dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::~RDM1Mixing ( )
virtualdefault

Member Function Documentation

◆ clone()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
std::unique_ptr< RDM1< ValueType, memorySpace > > dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::clone
overridevirtual

◆ getDensityObs()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
void dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::getDensityObs ( const std::set< DensityObsAttr > &  densityObsAttrs,
std::unordered_map< DensityObsAttr, std::vector< std::vector< double > > > &  densityObsAttrVals 
)
overridevirtual

◆ getDescriptors()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
void dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::getDescriptors ( const std::set< DensityDescrAttr > &  densityAttrs,
const std::set< WfcDescrAttr > &  wfcAttrs,
std::unordered_map< DensityDescrAttr, AttrStorage > &  densityAttrVals,
std::unordered_map< WfcDescrAttr, AttrStorage > &  wfcAttrVals 
)
overridevirtual

Returns d_densityInAttrVals (the last mixed in-density).

Implements dftefe::ksdft::RDM1< ValueType, memorySpace >.

◆ getkPointCoords()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
std::vector< double > dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::getkPointCoords
overridevirtual

◆ getkPointWeights()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
std::vector< double > dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::getkPointWeights
overridevirtual

◆ getnKSOrbs()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
size_type dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::getnKSOrbs
overridevirtual

◆ getRDM1()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
const RDM1< ValueType, memorySpace > & dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::getRDM1

◆ isNonCollinear()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
bool dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::isNonCollinear
overridevirtual

◆ isSOC()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
bool dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::isSOC
overridevirtual

◆ isSpinPolarized()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
bool dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::isSpinPolarized
overridevirtual

◆ mix()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
void dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::mix

Execute the Anderson mixing pipeline using the stored d_rdm1Ptr. On the first call d_densityInAttrVals is adopted from densOut. Subsequent calls compute residual, mix, and update d_densityInAttrVals. No normalization is performed here.

Here is the call graph for this function:

◆ setDescriptors()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
void dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::setDescriptors ( const std::unordered_map< DensityDescrAttr, AttrStorage > &  densityAttrVals,
const std::unordered_map< WfcDescrAttr, AttrStorage > &  wfcAttrVals 
)
overridevirtual

◆ setEvalDescrFlag()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
void dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::setEvalDescrFlag ( const bool  evalFlag)
overridevirtual

◆ setRDM1()

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
void dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::setRDM1 ( std::shared_ptr< RDM1< ValueType, memorySpace > >  rdm1)

Store rdm1 as a weak_ptr (non-owning).

Member Data Documentation

◆ d_densityInAttrVals

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
AttrStorage dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::d_densityInAttrVals
private

◆ d_gradDensityInAttrVals

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
AttrStorage dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::d_gradDensityInAttrVals
private

◆ d_linAlgOpContextHost

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
std::shared_ptr<linearAlgebra::LinAlgOpContext<utils::MemorySpace::HOST> > dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::d_linAlgOpContextHost
private

◆ d_mixingHistory

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
size_type dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::d_mixingHistory
private

◆ d_mixingScheme

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
MixingScheme<RealType, RealType>& dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::d_mixingScheme
private

◆ d_mpiCommDomain

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
std::reference_wrapper<const MPI_Comm> dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::d_mpiCommDomain
private

◆ d_numElectrons

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
size_type dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::d_numElectrons
private

◆ d_rdm1Ptr

template<typename ValueType , dftefe::utils::MemorySpace memorySpace>
std::weak_ptr<RDM1<ValueType, memorySpace> > dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::d_rdm1Ptr
private

The documentation for this class was generated from the following files: