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 >.