4 #include "bandstructure.h"
7 #include "common_kokkos.h"
35 virtual std::tuple<Eigen::VectorXd, Eigen::MatrixXcd>
diagonalize(
47 virtual std::tuple<Eigen::VectorXd, Eigen::MatrixXcd>
49 Eigen::Vector3d &k) = 0;
61 virtual Eigen::Tensor<std::complex<double>, 3>
62 diagonalizeVelocityFromCoordinates(
63 Eigen::Vector3d &coordinates) = 0;
78 const bool &withEigenvectors,
79 const bool isDistributed =
false) = 0;
80 virtual std::tuple<DoubleView2D, StridedComplexView3D, ComplexView4D>
81 kokkosBatchedDiagonalizeWithVelocities(
82 const DoubleView2D &cartesianCoordinates) = 0;
84 const DoubleView2D& cartesianCoordinates,
85 const DoubleView2D& resultEnergies, ComplexView4D& resultVelocities,
86 const double& threshold);
87 virtual StridedComplexView3D kokkosBatchedBuildBlochHamiltonian(
88 const DoubleView2D &cartesianCoordinates) = 0;
89 virtual std::tuple<DoubleView2D, StridedComplexView3D>
90 kokkosBatchedDiagonalizeFromCoordinates(
91 const DoubleView2D &cartesianCoordinates,
const bool withMassScaling=
true) = 0;
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
virtual FullBandStructure populate(Points &fullPoints, const bool &withVelocities, const bool &withEigenvectors, const bool isDistributed=false)=0
Method for the construction of the band structure on a grid of of wavevectors of the Brillouin zone.
virtual int estimateBatchSize(const bool &withVelocity)
Estimate how many k-points we can compute on the GPU in one batch.
Definition: harmonic.h:100
virtual std::tuple< Eigen::VectorXd, Eigen::MatrixXcd > diagonalize(Point &point)=0
Diagonalize the Harmonic Hamiltonian at an arbitrary wavevector.
virtual std::tuple< Eigen::VectorXd, Eigen::MatrixXcd > diagonalizeFromCoordinates(Eigen::Vector3d &k)=0
Diagonalize the Harmonic Hamiltonian at an arbitrary wavevector.
virtual Particle getParticle()=0
Returns the Particle object to distinguish between electrons and phonons.
virtual int getNumBands()=0
Returns the total number of phonon branches / electron bands that are available in the interpolator.
virtual Eigen::Tensor< std::complex< double >, 3 > diagonalizeVelocity(Point &point)=0
Computes the velocity operator (if possible, otherwise just its diagonal matrix elements i....
void kokkosBatchedTreatDegenerateVelocities(const DoubleView2D &cartesianCoordinates, const DoubleView2D &resultEnergies, ComplexView4D &resultVelocities, const double &threshold)
Definition: harmonic.cpp:3
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