RDM1 implementation that performs Anderson mixing of the electron density. Derives directly from RDM1 — no spectral decomposition. More...
#include <RDM1Mixing.h>


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 |
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.
| using dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::AttrStorage = typename RDM1<ValueType, memorySpace>::AttrStorage |
| using dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::RealType = linearAlgebra::blasLapack::real_type<ValueType> |
| 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.
| mixingScheme | Anderson 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. |
| mixingHistory | Anderson mixing history length. |
| numElectrons | Number of electrons (unused internally; kept for interface compatibility). |
| linAlgOpContextHost | LinAlg context for HOST-side operations. |
| mpiCommDomain | MPI communicator. |

|
virtualdefault |
|
overridevirtual |
Implements dftefe::ksdft::RDM1< ValueType, memorySpace >.
|
overridevirtual |
Implements dftefe::ksdft::RDM1< ValueType, memorySpace >.
|
overridevirtual |
Returns d_densityInAttrVals (the last mixed in-density).
Implements dftefe::ksdft::RDM1< ValueType, memorySpace >.
|
overridevirtual |
Implements dftefe::ksdft::RDM1< ValueType, memorySpace >.
|
overridevirtual |
Implements dftefe::ksdft::RDM1< ValueType, memorySpace >.
|
overridevirtual |
Implements dftefe::ksdft::RDM1< ValueType, memorySpace >.
| const RDM1< ValueType, memorySpace > & dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::getRDM1 |
|
overridevirtual |
Implements dftefe::ksdft::RDM1< ValueType, memorySpace >.
|
overridevirtual |
Implements dftefe::ksdft::RDM1< ValueType, memorySpace >.
|
overridevirtual |
Implements dftefe::ksdft::RDM1< ValueType, 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.

|
overridevirtual |
Implements dftefe::ksdft::RDM1< ValueType, memorySpace >.
|
overridevirtual |
Implements dftefe::ksdft::RDM1< ValueType, memorySpace >.
| void dftefe::ksdft::RDM1Mixing< ValueType, memorySpace >::setRDM1 | ( | std::shared_ptr< RDM1< ValueType, memorySpace > > | rdm1 | ) |
Store rdm1 as a weak_ptr (non-owning).
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |