1 #ifndef EL_PH_INTERACTION_H
2 #define EL_PH_INTERACTION_H
11 #include "utilities.h"
13 #include "common_kokkos.h"
14 #include <Kokkos_Core.hpp>
34 int numPhBands, numElBands, numWsR1Vectors, numWsR2Vectors;
35 std::vector<Eigen::Tensor<double, 3>> cacheCoupling;
36 bool usePolarCorrection =
false;
37 const int phaseConvention;
40 ComplexView4D elPhCached;
41 ComplexView5D couplingWannier_k;
42 DoubleView2D wsR2Vectors_k;
43 DoubleView1D wsR2VectorsDegeneracies_k;
44 DoubleView2D wsR1Vectors_k;
45 DoubleView1D wsR1VectorsDegeneracies_k;
46 std::vector<ComplexView4D::HostMirror> elPhCached_hs;
49 Eigen::MatrixXd wsR1Vectors;
50 Eigen::VectorXd wsR1VectorsDegeneracies;
51 Eigen::MatrixXd wsR2Vectors;
52 Eigen::VectorXd wsR2VectorsDegeneracies;
53 Eigen::Tensor<std::complex<double>, 4> elPhCached_old;
54 Eigen::Vector3d cachedK1;
55 Eigen::Tensor<std::complex<double>, 5> couplingWannier;
58 std::vector<MPI_Request> mpi_requests;
66 static const int GiustinoPhaseConvention = 0;
67 static const int JdftxPhaseConvention = 1;
70 static const int spinNonPolarized = 1;
71 static const int spinPolarizedOrSOC = 2;
97 const Eigen::Tensor<std::complex<double>, 5> &couplingWannier_,
98 const Eigen::MatrixXd &wsR1Vectors_,
99 const Eigen::VectorXd &wsR1VectorsDegeneracies_,
100 const Eigen::MatrixXd &wsR2Vectors_,
101 const Eigen::VectorXd &wsR2VectorsDegeneracies_,
102 const int& phaseConvention,
const PhononH0& phononH0_);
156 const Eigen::MatrixXcd &eigvec1,
157 const std::vector<Eigen::MatrixXcd> &eigvecs2,
158 const std::vector<Eigen::MatrixXcd> &eigvecs3,
159 const std::vector<Eigen::Vector3d> &q3Cs,
160 const Eigen::Vector3d &k1C,
161 const std::vector<Eigen::VectorXcd> &polarData);
163 void oldCalcCouplingSquared(
164 const Eigen::MatrixXcd &eigvec1,
165 const std::vector<Eigen::MatrixXcd> &eigvecs2,
166 const std::vector<Eigen::MatrixXcd> &eigvecs3,
const Eigen::Vector3d &k1C,
167 const std::vector<Eigen::Vector3d> &k2Cs,
168 const std::vector<Eigen::Vector3d> &q3Cs);
175 void cacheElPh(
const Eigen::MatrixXcd &eigvec1,
const Eigen::Vector3d &k1C);
209 Eigen::Tensor<std::complex<double>, 3>
211 const Eigen::MatrixXcd &ev2,
const Eigen::MatrixXcd &ev3);
242 static Eigen::Tensor<std::complex<double>, 3> getPolarCorrectionStatic(
243 const Eigen::Vector3d &q3,
const Eigen::MatrixXcd &ev1,
244 const Eigen::MatrixXcd &ev2,
const Eigen::MatrixXcd &ev3,
245 const double &volume,
const Eigen::Matrix3d &reciprocalUnitCell,
246 const Eigen::Matrix3d &epsilon,
247 const Eigen::Tensor<double, 3> &bornCharges,
248 const Eigen::MatrixXd &atomicPositions,
249 const Eigen::Vector3i &qCoarseMesh,
const int dimensionality);
252 static Eigen::VectorXcd polarCorrectionPart1Static(
253 const Eigen::Vector3d &q3,
const Eigen::MatrixXcd &ev3,
254 const double &volume,
const Eigen::Matrix3d &reciprocalUnitCell,
255 const Eigen::Matrix3d &epsilon,
const Eigen::Tensor<double, 3> &bornCharges,
256 const Eigen::MatrixXd &atomicPositions,
257 const Eigen::Vector3i &qCoarseMesh,
const int dimensionality);
263 Eigen::VectorXcd polarCorrectionPart1(
264 const Eigen::Vector3d &q3,
const Eigen::MatrixXcd &ev3);
268 static Eigen::Tensor<std::complex<double>, 3> polarCorrectionPart2(
269 const Eigen::MatrixXcd &ev1,
const Eigen::MatrixXcd &ev2,
const Eigen::VectorXcd &x);
277 const bool useMinusQ =
false);
Base class for describing objects containing the band structure, i.e.
Definition: bandstructure.h:15
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 to handle the coupling between electron and phonons.
Definition: interaction_elph.h:30
double getDeviceMemoryUsage()
Estimate the memory in bytes, occupied by the kokkos Views containing the coupling tensor to be inter...
Definition: interaction_elph.cpp:895
Eigen::VectorXi getCouplingDimensions()
Auxiliary function to return the shape of the electron-phonon tensor.
Definition: interaction_elph.cpp:617
Eigen::MatrixXcd precomputeQDependentPolar(BaseBandStructure &phBandStructure, const bool useMinusQ=false)
precompute the q-dependent part of the polar correction
Definition: interaction_elph.cpp:113
void cacheElPh(const Eigen::MatrixXcd &eigvec1, const Eigen::Vector3d &k1C)
Computes a partial Fourier transform over the k1/R_el variables.
Definition: interaction_elph.cpp:660
Eigen::Tensor< double, 3 > & getCouplingSquared(const int &ik2)
Get the coupling for the values of the wavevectors triplet (k1,k2,q3), where k1 is the wavevector use...
Definition: interaction_elph.cpp:87
InteractionElPhWan(const Crystal &crystal_, const Eigen::Tensor< std::complex< double >, 5 > &couplingWannier_, const Eigen::MatrixXd &wsR1Vectors_, const Eigen::VectorXd &wsR1VectorsDegeneracies_, const Eigen::MatrixXd &wsR2Vectors_, const Eigen::VectorXd &wsR2VectorsDegeneracies_, const int &phaseConvention, const PhononH0 &phononH0_)
Main constructor.
Definition: interaction_elph.cpp:11
static InteractionElPhWan parse(Context &context, Crystal &crystal, PhononH0 &phononH0_)
Static method to initialize the class by parsing a file.
Definition: interaction_elph_parsing.cpp:747
int estimateNumBatches(const int &nk2, const int &nb1)
Estimate the number of batches that the list of k2 wavevectors must be split into,...
Definition: interaction_elph.cpp:625
~InteractionElPhWan()
Almost empty constructor.
Definition: interaction_elph.cpp:79
void calcCouplingSquared(const Eigen::MatrixXcd &eigvec1, const std::vector< Eigen::MatrixXcd > &eigvecs2, const std::vector< Eigen::MatrixXcd > &eigvecs3, const std::vector< Eigen::Vector3d > &q3Cs, const Eigen::Vector3d &k1C, const std::vector< Eigen::VectorXcd > &polarData)
Computes the values of the el-ph coupling strength for transitions of type k1,q3 -> k2,...
Definition: interaction_elph.cpp:351
Eigen::Tensor< std::complex< double >, 3 > getPolarCorrection(const Eigen::Vector3d &q3, const Eigen::MatrixXcd &ev1, const Eigen::MatrixXcd &ev2, const Eigen::MatrixXcd &ev3)
Add polar correction to the electron-phonon coupling.
Definition: interaction_elph.cpp:94
class that computes phonon energies, velocities and eigenvectors.
Definition: phonon_h0.h:21