6 #include "bandstructure.h"
10 #include "common_kokkos.h"
53 std::tuple<Eigen::VectorXd, Eigen::MatrixXcd>
diagonalize(
Point &point)
override;
56 Eigen::Vector3d &wavevector)
override;
66 Eigen::Tensor<std::complex<double>, 3> diagonalizeVelocityFromCoordinates(
67 Eigen::Vector3d &coordinates)
override;
78 const bool &withEigenvectors,
79 const bool isDistributed=
false)
override;
81 void trimBands(
Context &context,
const double &minEn,
const double &maxEn);
82 virtual StridedComplexView3D kokkosBatchedBuildBlochHamiltonian(
83 const DoubleView2D &cartesianCoordinates)
override;
84 virtual std::tuple<DoubleView2D, StridedComplexView3D, ComplexView4D>
85 kokkosBatchedDiagonalizeWithVelocities(
86 const DoubleView2D &cartesianCoordinates)
override;
87 std::tuple<DoubleView2D, StridedComplexView3D>
88 kokkosBatchedDiagonalizeFromCoordinates(
89 const DoubleView2D &cartesianCoordinates,
const bool withMassScaling=
true)
override;
96 Eigen::MatrixXcd expansionCoefficients;
101 int numPositionVectors = 0;
102 double minDistance = 10.;
103 Eigen::VectorXd positionDegeneracies;
104 Eigen::MatrixXd positionVectors;
105 Eigen::Vector3d refWavevector;
107 void setPositionVectors();
108 Eigen::VectorXcd getLagrangeMultipliers(Eigen::VectorXd energies);
109 Eigen::VectorXcd getCoefficients(Eigen::VectorXd energies);
110 std::complex<double> getStarFunction(Eigen::Vector3d &wavevector,
int &iR);
111 Eigen::Vector3cd getDerivativeStarFunction(Eigen::Vector3d &wavevector,
113 double getRoughnessFunction(
const Eigen::Vector3d &position)
const;
114 const double coefficient1 = 0.75;
115 const double coefficient2 = 0.75;
116 double getEnergyFromCoordinates(Eigen::Vector3d &wavevector,
int &bandIndex);
117 Eigen::Vector3d getGroupVelocityFromCoordinates(Eigen::Vector3d &wavevector,
Class containing the user input variables.
Definition: context.h:15
Object to store the information on the crystal unit cell, such as atomic positions,...
Definition: crystal.h:18
Class for a Fourier-like interpolation of an electronic band structure.
Definition: electron_h0_fourier.h:17
std::tuple< Eigen::VectorXd, Eigen::MatrixXcd > diagonalize(Point &point) override
get the electronic energies (in Ry) at a single k-point.
Definition: electron_h0_fourier.cpp:82
Particle getParticle() override
Method to return that the underlying is that of an electronic Fermion.
Definition: electron_h0_fourier.cpp:77
Eigen::Tensor< std::complex< double >, 3 > diagonalizeVelocity(Point &point) override
get the electron velocities (in atomic units) at a single k-point.
Definition: electron_h0_fourier.cpp:103
std::tuple< Eigen::VectorXd, Eigen::MatrixXcd > diagonalizeFromCoordinates(Eigen::Vector3d &wavevector) override
Diagonalize the Harmonic Hamiltonian at an arbitrary wavevector.
Definition: electron_h0_fourier.cpp:92
int getNumBands() override
Get the total number of bands available at ech wavevector.
Definition: electron_h0_fourier.cpp:79
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...
Definition: electron_h0_fourier.cpp:45
FullBandStructure populate(Points &fullPoints, const bool &withVelocities, const bool &withEigenvectors, const bool isDistributed=false) override
This method constructs an electron band structure.
Definition: electron_h0_fourier.cpp:123
FullBandStructure is the class that stores the energies, velocities and eigenvectors of a quasipartic...
Definition: bandstructure.h:318
Virtual base class for Harmonic Hamiltonian.
Definition: harmonic.h:15
Determines whether we are dealing with phonons or electrons.
Definition: particle.h:17
Class used to pass a single wavevector.
Definition: points.h:18
Base class for storing wavevectors in the Brillouin zone.
Definition: points.h:73