JDFTx  1.2.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
WannierMinimizer Class Referenceabstract

Base class for different wannier minimizers: More...

#include <WannierMinimizer.h>

Inheritance diagram for WannierMinimizer:
Minimizable< WannierGradient > WannierMinimizerFD WannierMinimizerRS


struct  KmeshEntry
 Entry in the k-point mesh, including state of minimizer (subspace rotations) More...
struct  Kpoint
 Entries in the k-point mesh. More...

Public Member Functions

 WannierMinimizer (const Everything &e, const Wannier &wannier, bool needSuperOverride=false)
void initTransformDependent ()
void saveMLWF ()
void saveMLWF (int iSpin)
void step (const WannierGradient &grad, double alpha)
 Move the state in parameter space along direction dir with scale alpha.
double compute (WannierGradient *grad, WannierGradient *Kgrad)
 Returns the objective function at the current state and store the gradient in grad and preconditioned gradient in Kgrad, if non-null.
void constrain (WannierGradient &grad)
 Constrain search directions to the space of free directions for minimize.
bool report (int iter)
double sync (double x) const
 All processes minimize together; make sure scalars are in sync to round-off error.
virtual void initialize (int iSpin)=0
 Prepare for minimization of spin channel iSpin.
virtual double getOmega (bool grad=false)=0
virtual double getOmegaI (bool grad=false)=0
- Public Member Functions inherited from Minimizable< WannierGradient >
virtual double safeStepSize (const WannierGradient &dir) const
 Override to return maximum safe step size along a given direction. Steps can be arbitrarily large by default.
double minimize (const MinimizeParams &params)
 Minimize this objective function with algorithm controlled by params and return the minimized value.
void fdTest (const MinimizeParams &params)

Protected Member Functions

bool isMine (size_t ik) const
int whose (size_t ik) const
bool isMine_q (int ik, int iSpin) const
int whose_q (int ik, int iSpin) const
ColumnBundle getWfns (const Kpoint &kpoint, int iSpin) const
 Get the wavefunctions for a particular k-point in the common basis.
void axpyWfns (double alpha, const matrix &A, const Kpoint &kpoint, int iSpin, ColumnBundle &result) const
 Like getWfns, but accumulate instead of setting, and with optional transformation matrix: result += alpha * wfns * A.
void axpyWfns_grad (double alpha, matrix &Omega_A, const Kpoint &kpoint, int iSpin, const ColumnBundle &Omega_result) const
 Gradient propagation corresponding to axpyWfns: from dOmega/d(result) to dOmega/dA.
ColumnBundle trialWfns (const Kpoint &kpoint) const
 Get the trial wavefunctions (hydrogenic, atomic or numerical orbitals) for the group of centers in the common basis.
matrix overlap (const ColumnBundle &C1, const ColumnBundle &C2) const
void dumpMatrix (const matrix &H, string varName, bool realPartOnly, int iSpin) const
virtual WannierGradient precondition (const WannierGradient &grad)

Static Protected Member Functions

static matrix fixUnitary (const matrix &U)

Protected Attributes

const Everythinge
const Wannierwannier
const std::vector< SpaceGroupOp > & sym
int nCenters
int nFrozen
int nBands
 number of Wannier centers (total and frozen) and source bands
int nSpins
int qCount
 number of spins, and number of states per spin
int nSpinor
 number of spinor components
std::vector< double > rSqExpect
 Expectation values for r^2 per center in current group.
std::vector< vector3<> > rExpect
 Expectation values for r per center in current group.
std::vector< bool > pinned
std::vector< vector3<> > rPinned
 Whether centers are pinned or free.
bool needSuper
 Where centers are pinned to (if they are)
GridInfo gInfoSuper
Basis basisSuper
QuantumNumber qnumSuper
std::map< vector3< int >, double > iCellMap
std::map< vector3< int >, double > phononCellMap
int nPhononModes
diagMatrix invsqrtM
std::vector< KmeshEntrykMesh
 k-point mesh with FD formula
std::set< Kpointkpoints
 list of all k-points that will be in use (including those in FD formulae)
< ColumnBundleTransform::BasisWrapper
< ColumnBundleTransform::BasisWrapper
 look-up tables for initializing transforms
std::map< Kpoint,
< ColumnBundleTransform > > 
std::map< Kpoint,
< ColumnBundleTransform > > 
 wave-function transforms for each k-point to the common bases
Basis basis
 common basis (with indexing into full G-space)
TaskDivision kDivision
size_t ikStart
size_t ikStop
std::vector< ColumnBundleCother
std::map< Kpoint,
std::shared_ptr< ColumnBundle > > 


struct WannierGradient

Detailed Description

Base class for different wannier minimizers:

Member Function Documentation

virtual double WannierMinimizer::getOmega ( bool  grad = false)
pure virtual

Return Omega and set rExpect and rSqExpect. If grad=true, set Omega_U in the KMeshEntry array. Note base class handles computing U and propagating gradients. At input, U will be available on all processes and Omega_U will be zero. Base class will accumulate Omega_U across processes on return.

Implemented in WannierMinimizerFD, and WannierMinimizerRS.

matrix WannierMinimizer::overlap ( const ColumnBundle C1,
const ColumnBundle C2 
) const

Overlap between columnbundles of different k-points, with appropriate ultrasoft augmentation (Note that the augmentation in the O() from electronic/operators.h assumes both sides have same k-point)

bool WannierMinimizer::report ( int  iter)

Override for optional processing/reporting after each/every few iterations It should return whether the state was modified

Reimplemented from Minimizable< WannierGradient >.

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