|
| | PhScatteringMatrix (Context &context_, StatisticsSweep &statisticsSweep_, BaseBandStructure &innerBandStructure_, BaseBandStructure &outerBandStructure_, PhononH0 *phononH0_=nullptr) |
| | Default constructor. More...
|
| |
|
| BasePhScatteringMatrix (Context &context_, StatisticsSweep &statisticsSweep_, BaseBandStructure &innerBandStructure_, BaseBandStructure &outerBandStructure_) |
| | Constructor that just calls the constructor of scattering matrix.
|
| |
| | ScatteringMatrix (Context &context_, StatisticsSweep &statisticsSweep_, BaseBandStructure &innerBandStructure_, BaseBandStructure &outerBandStructure_) |
| | Scattering matrix constructor. More...
|
| |
|
| ScatteringMatrix () |
| | Default constructor.
|
| |
| void | setup () |
| | This method needs to be called right after the constructor. More...
|
| |
| VectorBTE | diagonal () |
| | Returns the diagonal matrix elements. More...
|
| |
| double & | operator() (const int &row, const int &col) |
| | Get and set operator. More...
|
| |
|
VectorBTE | offDiagonalDot (VectorBTE &inPopulation) |
| | Computes the product A*f - diagonal(A)*f where A is the scattering matrix and f is the vector of quasiparticle populations.
|
| |
|
std::vector< VectorBTE > | offDiagonalDot (std::vector< VectorBTE > &inPopulations) |
| |
|
VectorBTE | dot (VectorBTE &inPopulation) |
| | Computes the product A*f where A is the scattering matrix and f is the vector of quasiparticle populations.
|
| |
|
std::vector< VectorBTE > | dot (std::vector< VectorBTE > &inPopulations) |
| |
| VectorBTE | getSingleModeTimes () |
| | Call to obtain the single-particle relaxation times of the systems. More...
|
| |
| VectorBTE | getLinewidths () |
| | Converts symmetrized internal scattering matrix diagonal to linewidths and returns the result. More...
|
| |
| void | setLinewidths (VectorBTE &linewidths) |
| | Call to set the single-particle linewidths. More...
|
| |
| VectorBTE | getSingleModeTimes (const VectorBTE &anyInternalDiagonal) |
| | Call to obtain the single-particle relaxation times of the systems given any internal diagonal like object – (basically, the linewidths but potentially scaled by some symmetrization factor) More...
|
| |
| VectorBTE | getLinewidths (const VectorBTE &anyInternalDiagonal) |
| | Call to obtain the single-particle linewidths. More...
|
| |
| void | a2Omega () |
| | Converts the scattering matrix from the form A to the symmetrised Omega. More...
|
| |
|
void | omega2A () |
| | The inverse of a2Omega, converts the matrix Omega to A.
|
| |
| std::tuple< Eigen::VectorXd, ParallelMatrix< double > > | diagonalize (int numEigenvalues=0) |
| | Diagonalize the scattering matrix. More...
|
| |
| int | getSMatrixIndex (BteIndex &bteIndex, CartIndex &cartIndex) |
| | Function to combine a BTE index and a cartesian index into one index of the scattering matrix. More...
|
| |
| std::tuple< BteIndex, CartIndex > | getSMatrixIndex (const int &iMat) |
| | Function to split a scattering matrix index (on rows/columns of S) into a BTE index and a cartesian index. More...
|
| |
|
void | symmetrize () |
| | Reinforce the condition that the matrix is symmetric.
|
| |
| void | relaxonsToJSON (const std::string &fileName, const Eigen::VectorXd &eigenvalues) |
| | Output relaxons scattering matrix quantities to file (particularly the tau values) Jenny's note: However, I have a feeling this should be elsewhere, as we're actually passing the eigenvalues back into this function. More...
|
| |
| std::vector< std::tuple< int, int > > | getAllLocalStates () |
| | Call the underlying PMatrix function to return the iterator of all elements of the matrix which are local. More...
|
| |
| void | outputToHDF5 (const std::string &outFileName) |
| | Outputs the matrix to an hdf5 file. More...
|
| |
|
| void | builder (std::shared_ptr< VectorBTE > linewidth, std::vector< VectorBTE > &inPopulations, std::vector< VectorBTE > &outPopulations) override |
| | Method that actually computes the scattering matrix. More...
|
| |
| std::vector< std::tuple< std::vector< int >, int > > | getIteratorWavevectorPairs (const bool &rowMajor=false) |
| | Returns a vector of pairs of wavevector indices to iterate over during the construction of the scattering matrix. More...
|
| |
| void | degeneracyAveragingLinewidths (std::shared_ptr< VectorBTE > linewidth) |
| | Performs an average of the linewidths over degenerate states. More...
|
| |
| Eigen::MatrixXd | precomputeOccupations (BaseBandStructure &bandStructure) |
| | Function to precompute particle populations before scattering rates are calculated. More...
|
| |
| std::vector< int > | getExcludeIndices (BaseBandStructure &bandStructure) |
| | Method which for a phonon bandstructure returns the indices to be discarded in a phonon calculation due to very low phonon frequencies. More...
|
| |
|
void | setMatrixCase (std::shared_ptr< VectorBTE > linewidth, std::vector< VectorBTE > &inPopulations, std::vector< VectorBTE > &outPopulations) |
| |
| void | addRateToMatrix (const Context &context, double linewidthRate, double matrixRate, int iCalc, int is1, int is2Irr, int iBte1, int iBte2, const Particle &p1, const Particle &p2, const Eigen::Matrix3d &rotation, std::shared_ptr< VectorBTE > linewidth, const std::vector< VectorBTE > &inPopulations, std::vector< VectorBTE > &outPopulations) |
| | Method to add scattering rate to matrix and linewidth containers. More...
|
| |
|
void | enforceDetailedBalance () |
| | A function to fix the linewidths to agree with the off diagonal elements, to enforce finding the special eigenvectors.
|
| |
|
void | replaceMatrixLinewidths () |
| | Replace the linewidths of the scatterng matrix with the supplied VectorBTE values.
|
| |
| std::tuple< BaseBandStructure *, BaseBandStructure * > | getStateBandStructures (const BteIndex &iBte1, const BteIndex &iBte2) |
| | Returns a tuple of final and initial particles for a give state. More...
|
| |
| std::tuple< int, int > | coupledToBandStructureIndices (const int &iBte1, const int &iBte2, const Particle &p1, const Particle &p2) |
| | If we have a coupled scattering matrix, we need to shift the matrix element indices back to those associated with ph and el bandstructures before accessing their quantities. More...
|
| |
| template<size_t n> |
| void | addUNRates (int iCalc, int iBte, double rate, const std::array< Point, n > &crysPoints, auto momentumConsExpr) |
| | Generic function to add UN times to their containers. More...
|
| |
|
| 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) |
| |
|
void | addIsotopeScattering (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, std::shared_ptr< VectorBTE > linewidth) |
| |
|
void | addPhElScattering (BasePhScatteringMatrix &matrix, Context &context, std::vector< VectorBTE > &inPopulations, std::vector< VectorBTE > &outPopulations, BaseBandStructure &phBandStructure, BaseBandStructure &elBandStructure, StatisticsSweep &statisticsSweep, InteractionElPhWan &couplingElPhWan, std::shared_ptr< VectorBTE > linewidth) |
| |
This class contains the logic to compute the phonon scattering matrix. The parent class ScatteringMatrix instead contains the logic for managing the operations with phonon distribution vectors.
- Parameters
-
| context | the user-initialized variables. |
| statisticsSweep | the object containing the information on the temperatures to be used in the calculation. |
| innerBandStructure | this is the band structure object used for integrating the sum over q2 wavevectors. |
| outerBandStructure | this is the bandStructure object used for integrating the sum over q1 wavevectors. |
| h0 | the object used for constructing phonon energies. |
Note: inner and outer band structures may be different, for example, if we want to compute the phonon linewidths on a path, the outer band structure contains the phonon dispersion relation along high symmetry lines, whereas the inner band structure contains the dispersion relation on a full grid of wavevectors. For transport calculations instead, inner=outer. Especially in the case of computing linewidths on a path, it might be necessary to compute phonon energies on a wavevector q3=q1+q2: for this reason, we need to pass also the phonon h0 object.
| 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 |
|
) |
| |
|
friend |
Very important: the code must be executed with a loop over q2 outside and a loop over q1 inside. This is because the 3-ph coupling must compute the Fourier transform on q1 and q2. The 3-ph class splits the Fourier transform in two parts, recycling the FT over q2 for more values of q1. Thus, we have some speed when executing in this order. PointHelper too assumes that order of loop execution.
Very important: the code must be executed with a loop over q2 outside and a loop over q1 inside. This is because the 3-ph coupling must compute the Fourier transform on q1 and q2. The 3-ph class splits the Fourier transform in two parts, recycling the FT over q2 for more values of q1. Thus, we have some speed when executing in this order. PointHelper too assumes that order of loop execution.