Phoebe developer's documentation  1.1.0
Phonon and Electron Boltzmann Equations
ElectronH0Fourier Class Reference

Class for a Fourier-like interpolation of an electronic band structure. More...

#include <electron_h0_fourier.h>

Inheritance diagram for ElectronH0Fourier:
Collaboration diagram for ElectronH0Fourier:

Public Member Functions

 ElectronH0Fourier (Crystal &crystal_, const Points &coarsePoints_, const FullBandStructure &coarseBandStructure_, double cutoff)
 Constructor of the Fourier interpolation This class stores a copy of the electronic band structure on the coarse grid. More...
 
Particle getParticle () override
 Method to return that the underlying is that of an electronic Fermion.
 
int getNumBands () override
 Get the total number of bands available at ech wavevector.
 
std::tuple< Eigen::VectorXd, Eigen::MatrixXcd > diagonalize (Point &point) override
 get the electronic energies (in Ry) at a single k-point. More...
 
std::tuple< Eigen::VectorXd, Eigen::MatrixXcd > diagonalizeFromCoordinates (Eigen::Vector3d &wavevector) override
 Diagonalize the Harmonic Hamiltonian at an arbitrary wavevector. More...
 
Eigen::Tensor< std::complex< double >, 3 > diagonalizeVelocity (Point &point) override
 get the electron velocities (in atomic units) at a single k-point. More...
 
Eigen::Tensor< std::complex< double >, 3 > diagonalizeVelocityFromCoordinates (Eigen::Vector3d &coordinates) override
 
FullBandStructure populate (Points &fullPoints, const bool &withVelocities, const bool &withEigenvectors, const bool isDistributed=false) override
 This method constructs an electron band structure. More...
 
void trimBands (Context &context, const double &minEn, const double &maxEn)
 
virtual StridedComplexView3D kokkosBatchedBuildBlochHamiltonian (const DoubleView2D &cartesianCoordinates) override
 
virtual std::tuple< DoubleView2D, StridedComplexView3D, ComplexView4D > kokkosBatchedDiagonalizeWithVelocities (const DoubleView2D &cartesianCoordinates) override
 
std::tuple< DoubleView2D, StridedComplexView3D > kokkosBatchedDiagonalizeFromCoordinates (const DoubleView2D &cartesianCoordinates, const bool withMassScaling=true) override
 
- Public Member Functions inherited from HarmonicHamiltonian
void kokkosBatchedTreatDegenerateVelocities (const DoubleView2D &cartesianCoordinates, const DoubleView2D &resultEnergies, ComplexView4D &resultVelocities, const double &threshold)
 
virtual int estimateBatchSize (const bool &withVelocity)
 Estimate how many k-points we can compute on the GPU in one batch. More...
 

Protected Member Functions

void setPositionVectors ()
 
Eigen::VectorXcd getLagrangeMultipliers (Eigen::VectorXd energies)
 
Eigen::VectorXcd getCoefficients (Eigen::VectorXd energies)
 
std::complex< double > getStarFunction (Eigen::Vector3d &wavevector, int &iR)
 
Eigen::Vector3cd getDerivativeStarFunction (Eigen::Vector3d &wavevector, int &iR)
 
double getRoughnessFunction (const Eigen::Vector3d &position) const
 
double getEnergyFromCoordinates (Eigen::Vector3d &wavevector, int &bandIndex)
 
Eigen::Vector3d getGroupVelocityFromCoordinates (Eigen::Vector3d &wavevector, int &bandIndex)
 

Protected Attributes

Crystalcrystal
 
FullBandStructure coarseBandStructure
 
Points coarsePoints
 
Particle particle
 
Eigen::MatrixXcd expansionCoefficients
 
int numBands
 
double cutoff
 
int numDataPoints
 
int numPositionVectors = 0
 
double minDistance = 10.
 
Eigen::VectorXd positionDegeneracies
 
Eigen::MatrixXd positionVectors
 
Eigen::Vector3d refWavevector
 
const double coefficient1 = 0.75
 
const double coefficient2 = 0.75
 

Detailed Description

Takes the information on the band structure computed on a uniform coarse grid of k-points, and interpolates it to finer grids with a plane wave based method.

Constructor & Destructor Documentation

◆ ElectronH0Fourier()

ElectronH0Fourier::ElectronH0Fourier ( Crystal crystal_,
const Points coarsePoints_,
const FullBandStructure coarseBandStructure_,
double  cutoff 
)
Parameters
crystalthe crystal used in the band structure calculation
coarseBandStructurevalues of the electronic bands over a full grid of k-points, provided by an external (DFT) code.
cutoffa parameter used to define the number of coefficients in the plane-wave interpolation. It should be an integer >1. This parameter controls that the interpolation is generated using a grid of lattice vectors which is of size 2*Grid(i)*cutoff, where i is the direction index and grid(i) is the size of the wavevector coarse grid.
Here is the call graph for this function:

Member Function Documentation

◆ diagonalize()

std::tuple< Eigen::VectorXd, Eigen::MatrixXcd > ElectronH0Fourier::diagonalize ( Point point)
overridevirtual

Energies don't have any reference value, and must be used in connection with a chemical potential.

Parameters
ka point object with the wavevector. Must have the cartesian coordinates of the wavevector.
Returns
tuple(energies, eigenvectors): the energies are a double vector of size (numBands). Eigenvectors of size (numBands,numBands), but are simply set to zero, since there is no diagonalization happening here.

Implements HarmonicHamiltonian.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ diagonalizeFromCoordinates()

std::tuple< Eigen::VectorXd, Eigen::MatrixXcd > ElectronH0Fourier::diagonalizeFromCoordinates ( Eigen::Vector3d &  k)
overridevirtual

Same as diagonalize(), but the wavevector coordinates are explicitly passed in input.

Parameters
pointthe wavevector in cartesian coordinates.
Returns
eigenvalues: the values of quasiparticle energies, a double vector of size numBands.
eigenvectors: a complex matrix of size (numBands,numBands) with the eigenvectors, ordered in columns, computed at the input wavevector.

Implements HarmonicHamiltonian.

Here is the caller graph for this function:

◆ diagonalizeVelocity()

Eigen::Tensor< std::complex< double >, 3 > ElectronH0Fourier::diagonalizeVelocity ( Point point)
overridevirtual
Parameters
ka Point object with the wavevector coordinates.
Returns
velocity(numBands,numBands,3): values of the velocity operator for this state, in atomic units. Note that the off-diagonal matrix elements are set to zero, because this kind of interpolation, at the moment, doesn't have any information on the off-diagonal elements.

Implements HarmonicHamiltonian.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ populate()

FullBandStructure ElectronH0Fourier::populate ( Points fullPoints,
const bool &  withVelocities,
const bool &  withEigenvectors,
const bool  isDistributed = false 
)
overridevirtual
Parameters
pointsthe object with the list/mesh of wavevectors
withVelocitiesif true, compute the electron velocity operator.
withEigenvectorscan only be false, as there are no eigenvectors with this kind of interpolation.
Returns
FullBandStructure: the band structure object containing the complete electronic band structure.

Implements HarmonicHamiltonian.

Here is the call graph for this function: