21#ifndef VOTCA_XTP_BSECOUPLING_H
22#define VOTCA_XTP_BSECOUPLING_H
42 std::string
Identify()
const {
return "bsecoupling"; }
45 const Orbitals& orbitalsB)
const override;
55 const Orbitals& orbitalsAB)
override;
88 const std::string& name,
89 const Eigen::MatrixXd& mat,
90 double conversion = 1.0);
93 Index methodindex)
const;
96 Index methodindex)
const;
100 const Eigen::MatrixXd& A_AB,
101 const Eigen::MatrixXd& B_AB)
const;
104 const Eigen::MatrixXd& X_AB,
107 Index bseAB_ctotal)
const;
121 template <
class BSE_OPERATOR>
123 Eigen::MatrixXd& CTStates,
125 Eigen::MatrixXd& J_dimer_out,
126 Eigen::MatrixXd& S_dimer_out,
139 template <
class BSE_OPERATOR>
141 Eigen::MatrixXd& J_dimer_out,
142 Eigen::MatrixXd& S_dimer_out)
const;
160 Eigen::MatrixXd& CTStates)
const;
162 Eigen::MatrixXd
Fulldiag(
const Eigen::MatrixXd& J_dimer)
const;
164 Eigen::MatrixXd
Perturbation(
const Eigen::MatrixXd& J_dimer)
const;
176 const Eigen::MatrixXd& J_pert,
177 const Eigen::MatrixXd& J_diag)
const;
Evaluates electronic coupling elements.
Eigen::VectorXd monomerA_energies_triplet_
Eigen::MatrixXd J_dimer_triplet_
double getSingletCouplingElement(Index levelA, Index levelB, Index methodindex) const
Eigen::VectorXd monomerB_energies_singlet_
double getTripletCouplingElement(Index levelA, Index levelB, Index methodindex) const
Diagnostics diag_triplet_
bool output_perturbation_
std::string Identify() const
void CalculateCouplings(const Orbitals &orbitalsA, const Orbitals &orbitalsB, const Orbitals &orbitalsAB) override
evaluates electronic couplings
void Addoutput(tools::Property &type_summary, const Orbitals &orbitalsA, const Orbitals &orbitalsB) const override
void WriteToProperty(tools::Property &summary, const QMState &stateA, const QMState &stateB) const
Diagnostics ComputeDiagnostics(const Eigen::MatrixXd &J_dimer, const Eigen::MatrixXd &J_pert, const Eigen::MatrixXd &J_diag) const
Compute diagnostics from raw J_dimer and the two effective coupling matrices.
std::array< Eigen::MatrixXd, 2 > JAB_triplet
Eigen::MatrixXd Perturbation(const Eigen::MatrixXd &J_dimer) const
Eigen::VectorXd monomerB_energies_triplet_
std::array< Eigen::MatrixXd, 2 > ProjectExcitons(Eigen::MatrixXd &FE_AB, Eigen::MatrixXd &CTStates, BSE_OPERATOR H, Eigen::MatrixXd &J_dimer_out, Eigen::MatrixXd &S_dimer_out, Diagnostics &diag_out) const
Compute J_pert and J_diag, and store raw J_dimer/S_dimer and diagnostics for later output.
void Initialize(tools::Property &options) override
Eigen::MatrixXd S_dimer_singlet_
Eigen::VectorXd monomerA_energies_singlet_
Eigen::MatrixXd S_dimer_triplet_
std::array< Eigen::MatrixXd, 2 > JAB_singlet
Eigen::MatrixXd ProjectFrenkelExcitons(const Eigen::MatrixXd &BSE_Coeffs, const Eigen::MatrixXd &X_AB, Index bseX_vtotal, Index bseX_ctotal, Index bseAB_vtotal, Index bseAB_ctotal) const
static void WriteMatrixToProperty(tools::Property &prop, const std::string &name, const Eigen::MatrixXd &mat, double conversion=1.0)
Write an Eigen matrix as rows of space-separated values into an XML property node....
Eigen::MatrixXd SetupCTStates(Index bseA_vtotal, Index bseB_vtotal, Index bseAB_vtotal, Index bseAB_ctotal, const Eigen::MatrixXd &A_AB, const Eigen::MatrixXd &B_AB) const
Diagnostics diag_singlet_
Eigen::MatrixXd Fulldiag(const Eigen::MatrixXd &J_dimer) const
Eigen::MatrixXd CalcJ_dimer(BSE_OPERATOR &H, Eigen::MatrixXd &projection, Eigen::MatrixXd &J_dimer_out, Eigen::MatrixXd &S_dimer_out) const
Form J_dimer and S_dimer from the projection, then Lowdin orthogonalize to produce J_ortho.
Eigen::MatrixXd OrthogonalizeCTs(Eigen::MatrixXd &FE_AB, Eigen::MatrixXd &CTStates) const
Merge FE and CT projection vectors into a single projection matrix without pre-orthogonalization.
Eigen::MatrixXd J_dimer_singlet_
Base Class to derive DFT and BSE coupling from.
Container for molecular orbitals and derived one-particle data.
Identifier for QMstates. Strings like S1 are converted into enum +zero indexed int.
Provides a means for comparing floating point numbers.
Diagnostic quantities for assessing whether CT downfolding is safe.