Phoebe developer's documentation  1.1.0
Phonon and Electron Boltzmann Equations
harmonic.h
1 #ifndef HARMONIC_H
2 #define HARMONIC_H
3 
4 #include "bandstructure.h"
5 #include "particle.h"
6 #include "points.h"
7 #include "common_kokkos.h"
8 
16  public:
21  virtual int getNumBands() = 0;
22 
26  virtual Particle getParticle() = 0;
27 
35  virtual std::tuple<Eigen::VectorXd, Eigen::MatrixXcd> diagonalize(
36  Point &point) = 0;
37 
47  virtual std::tuple<Eigen::VectorXd, Eigen::MatrixXcd>
49  Eigen::Vector3d &k) = 0;
50 
59  virtual Eigen::Tensor<std::complex<double>, 3> diagonalizeVelocity(
60  Point &point) = 0;
61  virtual Eigen::Tensor<std::complex<double>, 3>
62  diagonalizeVelocityFromCoordinates(
63  Eigen::Vector3d &coordinates) = 0;
64 
77  virtual FullBandStructure populate(Points &fullPoints, const bool &withVelocities,
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;
92 
100  virtual int estimateBatchSize(const bool& withVelocity) {
101  (void) withVelocity;
102  return 1;
103  };
104 };
105 
106 #endif
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