Phoebe developer's documentation  1.1.0
Phonon and Electron Boltzmann Equations
ph_scattering_matrix.h
1 #ifndef PH_SCATTERING_MATRIX_H
2 #define PH_SCATTERING_MATRIX_H
3 
4 #include "interaction_3ph.h"
5 #include "phonon_h0.h"
6 #include "base_ph_scattering_matrix.h"
7 #include "vector_bte.h"
8 
15  public:
35  PhScatteringMatrix(Context &context_, StatisticsSweep &statisticsSweep_,
36  BaseBandStructure &innerBandStructure_,
37  BaseBandStructure &outerBandStructure_,
38  PhononH0 *phononH0_ = nullptr);
39 
40  protected:
41 
42  PhononH0 *phononH0;
43 
44  // implementation of the scattering matrix
45  void builder(std::shared_ptr<VectorBTE> linewidth,
46  std::vector<VectorBTE> &inPopulations,
47  std::vector<VectorBTE> &outPopulations) override;
48 
49  // friend functions for adding scattering rates,
50  // these live in ph_scattering.cpp
51  // TODO write docstrings for these
52 
53  friend void addPhPhScattering(BasePhScatteringMatrix &matrix, Context &context,
54  std::vector<VectorBTE> &inPopulations,
55  std::vector<VectorBTE> &outPopulations,
56  std::vector<std::tuple<std::vector<int>, int>> qPairIterator,
57  Eigen::MatrixXd &innerBose, Eigen::MatrixXd &outerBose,
58  BaseBandStructure &innerBandStructure,
59  BaseBandStructure &outerBandStructure,
60  PhononH0& phononH0,
61  Interaction3Ph& coupling3Ph,
62  std::shared_ptr<VectorBTE> linewidth);
63 
64  friend void addIsotopeScattering(BasePhScatteringMatrix &matrix, Context &context,
65  std::vector<VectorBTE> &inPopulations,
66  std::vector<VectorBTE> &outPopulations,
67  std::vector<std::tuple<std::vector<int>, int>> qPairIterator,
68  Eigen::MatrixXd &innerBose, Eigen::MatrixXd &outerBose,
69  BaseBandStructure &innerBandStructure,
70  BaseBandStructure &outerBandStructure,
71  std::shared_ptr<VectorBTE> linewidth);
72 
73  friend void addPhElScattering(BasePhScatteringMatrix &matrix, Context &context,
74  std::vector<VectorBTE> &inPopulations,
75  std::vector<VectorBTE> &outPopulations,
76  BaseBandStructure &phBandStructure,
77  BaseBandStructure &elBandStructure,
78  StatisticsSweep& statisticsSweep,
79  InteractionElPhWan &couplingElPhWan,
80  std::shared_ptr<VectorBTE> linewidth);
81 
82 };
83 
84 #endif
Base class for describing objects containing the band structure, i.e.
Definition: bandstructure.h:15
class representing the phonon scattering matrix.
Definition: base_ph_scattering_matrix.h:16
Class containing the user input variables.
Definition: context.h:15
Class to calculate the probability rate for one 3-phonon scattering event.
Definition: interaction_3ph.h:47
Class to handle the coupling between electron and phonons.
Definition: interaction_elph.h:30
class representing the phonon scattering matrix.
Definition: ph_scattering_matrix.h:14
PhScatteringMatrix(Context &context_, StatisticsSweep &statisticsSweep_, BaseBandStructure &innerBandStructure_, BaseBandStructure &outerBandStructure_, PhononH0 *phononH0_=nullptr)
Default constructor.
Definition: ph_scattering_matrix.cpp:14
friend void addPhPhScattering(BasePhScatteringMatrix &matrix, Context &context, std::vector< VectorBTE > &inPopulations, std::vector< VectorBTE > &outPopulations, std::vector< std::tuple< std::vector< int >, int >> qPairIterator, Eigen::MatrixXd &innerBose, Eigen::MatrixXd &outerBose, BaseBandStructure &innerBandStructure, BaseBandStructure &outerBandStructure, PhononH0 &phononH0, Interaction3Ph &coupling3Ph, std::shared_ptr< VectorBTE > linewidth)
Definition: ph_scattering.cpp:19
void builder(std::shared_ptr< VectorBTE > linewidth, std::vector< VectorBTE > &inPopulations, std::vector< VectorBTE > &outPopulations) override
Method that actually computes the scattering matrix.
Definition: ph_scattering_matrix.cpp:28
class that computes phonon energies, velocities and eigenvectors.
Definition: phonon_h0.h:21
Object for controlling the loop over temperatures and chemical potentials.
Definition: statistics_sweep.h:26