votca 2026-dev
Loading...
Searching...
No Matches
votca::xtp::BSECoupling Class Reference

Evaluates electronic coupling elements. More...

#include <bsecoupling.h>

Inheritance diagram for votca::xtp::BSECoupling:
Collaboration diagram for votca::xtp::BSECoupling:

Classes

struct  Diagnostics
 Diagnostic quantities for assessing whether CT downfolding is safe. More...

Public Member Functions

void Initialize (tools::Property &options) override
std::string Identify () const
void Addoutput (tools::Property &type_summary, const Orbitals &orbitalsA, const Orbitals &orbitalsB) const override
void CalculateCouplings (const Orbitals &orbitalsA, const Orbitals &orbitalsB, const Orbitals &orbitalsAB) override
 evaluates electronic couplings
Public Member Functions inherited from votca::xtp::CouplingBase
void setLogger (Logger *pLog)

Private Member Functions

void WriteToProperty (tools::Property &summary, const QMState &stateA, const QMState &stateB) const
double getSingletCouplingElement (Index levelA, Index levelB, Index methodindex) const
double getTripletCouplingElement (Index levelA, Index levelB, Index methodindex) const
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
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
template<class BSE_OPERATOR>
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.
template<class BSE_OPERATOR>
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 Fulldiag (const Eigen::MatrixXd &J_dimer) const
Eigen::MatrixXd Perturbation (const Eigen::MatrixXd &J_dimer) 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.

Static Private Member Functions

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. Each row becomes an attribute "row_N".

Private Attributes

std::array< Eigen::MatrixXd, 2 > JAB_singlet
std::array< Eigen::MatrixXd, 2 > JAB_triplet
Eigen::MatrixXd J_dimer_singlet_
Eigen::MatrixXd S_dimer_singlet_
Eigen::MatrixXd J_dimer_triplet_
Eigen::MatrixXd S_dimer_triplet_
Diagnostics diag_singlet_
Diagnostics diag_triplet_
Eigen::VectorXd monomerA_energies_singlet_
Eigen::VectorXd monomerB_energies_singlet_
Eigen::VectorXd monomerA_energies_triplet_
Eigen::VectorXd monomerB_energies_triplet_
bool doTriplets_
bool doSinglets_
bool output_perturbation_
bool output_tb_ = false
Index levA_
Index levB_
Index occA_
Index unoccA_
Index occB_
Index unoccB_

Additional Inherited Members

Protected Member Functions inherited from votca::xtp::CouplingBase
void CheckAtomCoordinates (const Orbitals &orbitalsA, const Orbitals &orbitalsB, const Orbitals &orbitalsAB) const
Eigen::MatrixXd CalculateOverlapMatrix (const Orbitals &orbitalsAB) const
Protected Attributes inherited from votca::xtp::CouplingBase
LoggerpLog_

Detailed Description

Evaluates electronic coupling elements.

J. Wehner,B. Baumeier, JCTC DOI: 10.1021/acs.jctc.6b00935

Definition at line 39 of file bsecoupling.h.

Member Function Documentation

◆ Addoutput()

void votca::xtp::BSECoupling::Addoutput ( tools::Property & type_summary,
const Orbitals & orbitalsA,
const Orbitals & orbitalsB ) const
overridevirtual

Implements votca::xtp::CouplingBase.

Definition at line 128 of file bsecoupling.cc.

◆ CalcJ_dimer()

template<class BSE_OPERATOR>
Eigen::MatrixXd votca::xtp::BSECoupling::CalcJ_dimer ( BSE_OPERATOR & H,
Eigen::MatrixXd & projection,
Eigen::MatrixXd & J_dimer_out,
Eigen::MatrixXd & S_dimer_out ) const
private

Form J_dimer and S_dimer from the projection, then Lowdin orthogonalize to produce J_ortho.

Parameters
HBSE Hamiltonian operator
projectionmerged FE+CT projection matrix (consumed)
J_dimer_outraw Hamiltonian matrix before Lowdin [out]
S_dimer_outraw overlap matrix before Lowdin [out]
Returns
Lowdin-orthogonalized Hamiltonian J_ortho

Definition at line 690 of file bsecoupling.cc.

◆ CalculateCouplings()

void votca::xtp::BSECoupling::CalculateCouplings ( const Orbitals & orbitalsA,
const Orbitals & orbitalsB,
const Orbitals & orbitalsAB )
overridevirtual

evaluates electronic couplings

Parameters
orbitalsAmolecular orbitals of molecule A
orbitalsBmolecular orbitals of molecule B
orbitalsABmolecular orbitals of the dimer AB

Implements votca::xtp::CouplingBase.

Definition at line 355 of file bsecoupling.cc.

◆ ComputeDiagnostics()

BSECoupling::Diagnostics votca::xtp::BSECoupling::ComputeDiagnostics ( const Eigen::MatrixXd & J_dimer,
const Eigen::MatrixXd & J_pert,
const Eigen::MatrixXd & J_diag ) const
private

Compute diagnostics from raw J_dimer and the two effective coupling matrices.

Parameters
J_dimerraw (pre-Lowdin) Hamiltonian in FE+CT basis
J_perteffective couplings from perturbation theory
J_diageffective couplings from reduction method
Returns
populated Diagnostics struct

Definition at line 747 of file bsecoupling.cc.

◆ Fulldiag()

Eigen::MatrixXd votca::xtp::BSECoupling::Fulldiag ( const Eigen::MatrixXd & J_dimer) const
private

Definition at line 912 of file bsecoupling.cc.

◆ getSingletCouplingElement()

double votca::xtp::BSECoupling::getSingletCouplingElement ( Index levelA,
Index levelB,
Index methodindex ) const
private

Definition at line 260 of file bsecoupling.cc.

◆ getTripletCouplingElement()

double votca::xtp::BSECoupling::getTripletCouplingElement ( Index levelA,
Index levelB,
Index methodindex ) const
private

Definition at line 266 of file bsecoupling.cc.

◆ Identify()

std::string votca::xtp::BSECoupling::Identify ( ) const
inline

Definition at line 42 of file bsecoupling.h.

◆ Initialize()

void votca::xtp::BSECoupling::Initialize ( tools::Property & options)
overridevirtual

Implements votca::xtp::CouplingBase.

Definition at line 38 of file bsecoupling.cc.

◆ OrthogonalizeCTs()

Eigen::MatrixXd votca::xtp::BSECoupling::OrthogonalizeCTs ( Eigen::MatrixXd & FE_AB,
Eigen::MatrixXd & CTStates ) const
private

Merge FE and CT projection vectors into a single projection matrix without pre-orthogonalization.

The non-orthogonality between FE and CT states is handled correctly downstream by the joint Lowdin in CalcJ_dimer (for the reduction method) or by the generalized eigenvalue problem / SRG (for TB use of J_dimer and S_dimer directly).

Pre-orthogonalizing CT states against FE states (previous behaviour) used the incorrect projector P = F*F^T, which is only exact when FE_AB columns are orthonormal. This introduced a systematic error that grows with the number of CT states included. The function name is retained for interface compatibility but the orthogonalization step has been removed.

Definition at line 645 of file bsecoupling.cc.

◆ Perturbation()

Eigen::MatrixXd votca::xtp::BSECoupling::Perturbation ( const Eigen::MatrixXd & J_dimer) const
private

Definition at line 838 of file bsecoupling.cc.

◆ ProjectExcitons()

template<class BSE_OPERATOR>
std::array< Eigen::MatrixXd, 2 > votca::xtp::BSECoupling::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
private

Compute J_pert and J_diag, and store raw J_dimer/S_dimer and diagnostics for later output.

Parameters
FE_ABprojected FE states in dimer basis
CTStatesCT states in dimer basis
HBSE Hamiltonian operator
J_dimer_outraw (pre-Lowdin) Hamiltonian matrix [out]
S_dimer_outraw overlap matrix [out]
diag_outdiagnostics struct [out]
Returns
array of {J_pert, J_diag} matrices

Definition at line 794 of file bsecoupling.cc.

◆ ProjectFrenkelExcitons()

Eigen::MatrixXd votca::xtp::BSECoupling::ProjectFrenkelExcitons ( const Eigen::MatrixXd & BSE_Coeffs,
const Eigen::MatrixXd & X_AB,
Index bseX_vtotal,
Index bseX_ctotal,
Index bseAB_vtotal,
Index bseAB_ctotal ) const
private

Definition at line 325 of file bsecoupling.cc.

◆ SetupCTStates()

Eigen::MatrixXd votca::xtp::BSECoupling::SetupCTStates ( Index bseA_vtotal,
Index bseB_vtotal,
Index bseAB_vtotal,
Index bseAB_ctotal,
const Eigen::MatrixXd & A_AB,
const Eigen::MatrixXd & B_AB ) const
private

Definition at line 272 of file bsecoupling.cc.

◆ WriteMatrixToProperty()

void votca::xtp::BSECoupling::WriteMatrixToProperty ( tools::Property & prop,
const std::string & name,
const Eigen::MatrixXd & mat,
double conversion = 1.0 )
staticprivate

Write an Eigen matrix as rows of space-separated values into an XML property node. Each row becomes an attribute "row_N".

Parameters
propparent Property node to attach the matrix node to
namename of the new child node
matmatrix to write
conversionoptional unit conversion factor (default 1.0)

Definition at line 76 of file bsecoupling.cc.

◆ WriteToProperty()

void votca::xtp::BSECoupling::WriteToProperty ( tools::Property & summary,
const QMState & stateA,
const QMState & stateB ) const
private

Definition at line 98 of file bsecoupling.cc.

Member Data Documentation

◆ diag_singlet_

Diagnostics votca::xtp::BSECoupling::diag_singlet_
private

Definition at line 192 of file bsecoupling.h.

◆ diag_triplet_

Diagnostics votca::xtp::BSECoupling::diag_triplet_
private

Definition at line 193 of file bsecoupling.h.

◆ doSinglets_

bool votca::xtp::BSECoupling::doSinglets_
private

Definition at line 208 of file bsecoupling.h.

◆ doTriplets_

bool votca::xtp::BSECoupling::doTriplets_
private

Definition at line 207 of file bsecoupling.h.

◆ J_dimer_singlet_

Eigen::MatrixXd votca::xtp::BSECoupling::J_dimer_singlet_
private

Definition at line 186 of file bsecoupling.h.

◆ J_dimer_triplet_

Eigen::MatrixXd votca::xtp::BSECoupling::J_dimer_triplet_
private

Definition at line 188 of file bsecoupling.h.

◆ JAB_singlet

std::array<Eigen::MatrixXd, 2> votca::xtp::BSECoupling::JAB_singlet
private

Definition at line 180 of file bsecoupling.h.

◆ JAB_triplet

std::array<Eigen::MatrixXd, 2> votca::xtp::BSECoupling::JAB_triplet
private

Definition at line 181 of file bsecoupling.h.

◆ levA_

Index votca::xtp::BSECoupling::levA_
private

Definition at line 214 of file bsecoupling.h.

◆ levB_

Index votca::xtp::BSECoupling::levB_
private

Definition at line 215 of file bsecoupling.h.

◆ monomerA_energies_singlet_

Eigen::VectorXd votca::xtp::BSECoupling::monomerA_energies_singlet_
private

Definition at line 202 of file bsecoupling.h.

◆ monomerA_energies_triplet_

Eigen::VectorXd votca::xtp::BSECoupling::monomerA_energies_triplet_
private

Definition at line 204 of file bsecoupling.h.

◆ monomerB_energies_singlet_

Eigen::VectorXd votca::xtp::BSECoupling::monomerB_energies_singlet_
private

Definition at line 203 of file bsecoupling.h.

◆ monomerB_energies_triplet_

Eigen::VectorXd votca::xtp::BSECoupling::monomerB_energies_triplet_
private

Definition at line 205 of file bsecoupling.h.

◆ occA_

Index votca::xtp::BSECoupling::occA_
private

Definition at line 216 of file bsecoupling.h.

◆ occB_

Index votca::xtp::BSECoupling::occB_
private

Definition at line 218 of file bsecoupling.h.

◆ output_perturbation_

bool votca::xtp::BSECoupling::output_perturbation_
private

Definition at line 209 of file bsecoupling.h.

◆ output_tb_

bool votca::xtp::BSECoupling::output_tb_ = false
private

Definition at line 213 of file bsecoupling.h.

◆ S_dimer_singlet_

Eigen::MatrixXd votca::xtp::BSECoupling::S_dimer_singlet_
private

Definition at line 187 of file bsecoupling.h.

◆ S_dimer_triplet_

Eigen::MatrixXd votca::xtp::BSECoupling::S_dimer_triplet_
private

Definition at line 189 of file bsecoupling.h.

◆ unoccA_

Index votca::xtp::BSECoupling::unoccA_
private

Definition at line 217 of file bsecoupling.h.

◆ unoccB_

Index votca::xtp::BSECoupling::unoccB_
private

Definition at line 219 of file bsecoupling.h.


The documentation for this class was generated from the following files: