Loading...
Searching...
No Matches
q3::PlanewaveLocalOrbitalSet Class Referenceabstract

#include <init.hpp>

+ Inheritance diagram for q3::PlanewaveLocalOrbitalSet:

Public Member Functions

virtual ~PlanewaveLocalOrbitalSet ()=default
 
virtual void build (int kpoint_index, int number_of_plane_waves, const std::vector< int > &g_vector_indices, const Crystal &crystal_structure, const KPointsGrid &kpoint_grid, const PlanewaveBasis &planewave_basis, std::vector< std::vector< Complex > > &orbitals) const =0
 
virtual std::vector< Vector3D > centers_crystal () const =0
 
virtual std::string description () const =0
 One line for logs, naming the source and the count.
 
virtual int number_of_orbitals () const =0
 

Detailed Description

Definition at line 34 of file init.hpp.

Constructor & Destructor Documentation

◆ ~PlanewaveLocalOrbitalSet()

virtual q3::PlanewaveLocalOrbitalSet::~PlanewaveLocalOrbitalSet ( )
virtualdefault

Member Function Documentation

◆ build()

virtual void q3::PlanewaveLocalOrbitalSet::build ( int  kpoint_index,
int  number_of_plane_waves,
const std::vector< int > &  g_vector_indices,
const Crystal &  crystal_structure,
const KPointsGrid &  kpoint_grid,
const PlanewaveBasis &  planewave_basis,
std::vector< std::vector< Complex > > &  orbitals 
) const
pure virtual

Render every orbital at one k-point: on return orbitals[orbital_index][g_index] holds the coefficient of the g_vector_indices[g_index]-th plane wave, so the result is stored against exactly the G-vector list the wavefunctions at that k-point use and can be contracted with them directly.

Normalisation is left to the implementation; consumers that need orthonormal orbitals in a given metric orthonormalize them.

Implemented in q3::PlanewaveHydrogenicOrbitalSet, and q3::PlanewavePseudoAtomicOrbitalSet.

Referenced by q3::PlanewaveTrialOrbitalProjectionCalculator::compute_projections_at_kpoint().

◆ centers_crystal()

virtual std::vector< Vector3D > q3::PlanewaveLocalOrbitalSet::centers_crystal ( ) const
pure virtual

Where each orbital sits, in crystal (fractional) coordinates, in orbital order. A localiser needs these: the branch of Im ln M_nn is fixed by choosing, for each diagonal overlap, the value nearest the one a known centre implies, and the trial orbital's own position is the one thing known about the Wannier function before anything has been minimised. Deriving a guide from the projection gauge's Berry-phase centres instead was tried and fails on exactly the structures that need guiding – when the branches are inconsistent across k, those centres are already wrong.

Implemented in q3::PlanewaveHydrogenicOrbitalSet, and q3::PlanewavePseudoAtomicOrbitalSet.

◆ description()

virtual std::string q3::PlanewaveLocalOrbitalSet::description ( ) const
pure virtual

One line for logs, naming the source and the count.

Implemented in q3::PlanewaveHydrogenicOrbitalSet, and q3::PlanewavePseudoAtomicOrbitalSet.

◆ number_of_orbitals()

virtual int q3::PlanewaveLocalOrbitalSet::number_of_orbitals ( ) const
pure virtual

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