Base class for different wannier minimizers: More...
#include <WannierMinimizer.h>
Classes | |
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 ¶ms) |
Minimize this objective function with algorithm controlled by params and return the minimized value. | |
void | fdTest (const MinimizeParams ¶ms) |
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 Everything & | e |
const Wannier & | wannier |
const std::vector< matrix3< int > > & | 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 |
std::vector< KmeshEntry > | kMesh |
k-point mesh with FD formula | |
std::set< Kpoint > | kpoints |
list of all k-points that will be in use (including those in FD formulae) | |
std::shared_ptr< ColumnBundleTransform::BasisWrapper > | basisWrapper |
std::shared_ptr< ColumnBundleTransform::BasisWrapper > | basisSuperWrapper |
look-up tables for initializing transforms | |
std::map< Kpoint, std::shared_ptr< ColumnBundleTransform > > | transformMap |
std::map< Kpoint, std::shared_ptr< ColumnBundleTransform > > | transformMapSuper |
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< ColumnBundle > | Cother |
std::map< Kpoint, std::shared_ptr< ColumnBundle > > | numericalOrbitals |
Friends | |
struct | WannierGradient |
Base class for different wannier minimizers:
|
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.
|
protected |
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)
|
virtual |
Override for optional processing/reporting after each/every few iterations It should return whether the state was modified
Reimplemented from Minimizable< WannierGradient >.