21#ifndef VOTCA_XTP_BSE_OPERATOR_UKS_H
22#define VOTCA_XTP_BSE_OPERATOR_UKS_H
40template <Index cqp, Index cx, Index cd, Index cd2>
45 const Eigen::MatrixXd& Hqp_alpha,
46 const Eigen::MatrixXd& Hqp_beta)
55 Eigen::MatrixXd
matmul(
const Eigen::MatrixXd& input)
const override;
82 Eigen::VectorXd
Hqp_row(
const Eigen::MatrixXd& Hqp,
const SpinBlockInfo& blk,
86 const SpinBlockInfo& blk,
const Eigen::MatrixXd& Hqp)
const;
89 const SpinBlockInfo& out_blk,
90 const SpinBlockInfo& in_blk,
92 double prefactor)
const;
95 const SpinBlockInfo& out_blk,
100 const SpinBlockInfo& out_blk,
101 const SpinBlockInfo& in_blk,
103 double prefactor)
const;
106 const SpinBlockInfo& out_blk,
107 const SpinBlockInfo& in_blk,
110 double prefactor)
const;
void add_exchange_block(Eigen::MatrixXd &y, const Eigen::MatrixXd &x, const SpinBlockInfo &out_blk, const SpinBlockInfo &in_blk, const TCMatrix_gwbse &Mout, const TCMatrix_gwbse &Min, double prefactor) const
const Eigen::MatrixXd & Hqp_beta_
Eigen::VectorXd diagonal() const override
const TCMatrix_gwbse_spin & Mmn_
const Eigen::MatrixXd & Hqp_alpha_
void configure(BSEOperatorUKS_Options opt)
void add_direct_block(Eigen::MatrixXd &y, const Eigen::MatrixXd &x, const SpinBlockInfo &out_blk, const SpinBlockInfo &in_blk, const TCMatrix_gwbse &Mout, const TCMatrix_gwbse &Min, double prefactor) const
void add_direct_cross_tda_block(Eigen::MatrixXd &y, const Eigen::MatrixXd &x, const SpinBlockInfo &out_blk, const SpinBlockInfo &in_blk, const TCMatrix_gwbse &Mout, const TCMatrix_gwbse &Min, double prefactor) const
BSEOperatorUKS_Options opt_
void add_direct2_block(Eigen::MatrixXd &y, const Eigen::MatrixXd &x, const SpinBlockInfo &out_blk, const SpinBlockInfo &in_blk, const TCMatrix_gwbse &Mout, const TCMatrix_gwbse &Min, double prefactor) const
BSE_OPERATOR_UKS(const Eigen::VectorXd &epsilon_0_inv, const TCMatrix_gwbse_spin &Mmn, const Eigen::MatrixXd &Hqp_alpha, const Eigen::MatrixXd &Hqp_beta)
Eigen::VectorXd Hqp_row(const Eigen::MatrixXd &Hqp, const SpinBlockInfo &blk, Index v1, Index c1) const
void setup_block(SpinBlockInfo &blk, Index homo, Index offset)
Eigen::MatrixXd matmul(const Eigen::MatrixXd &input) const override
Eigen::MatrixXd dense_matrix() const
void add_qp_block(Eigen::MatrixXd &y, const Eigen::MatrixXd &x, const SpinBlockInfo &blk, const Eigen::MatrixXd &Hqp) const
const Eigen::VectorXd & epsilon_0_inv_
BSE_OPERATOR_UKS< 0, 1, 0, 1 > ExcitonUKSOperator_BTDA_B
BSE_OPERATOR_UKS< 1, 1, 1, 0 > ExcitonUKSOperator_TDA
BSE_OPERATOR_UKS< 0, 0, 0, 1 > Hd2UKSOperator
BSE_OPERATOR_UKS< 0, 0, 1, 0 > HdUKSOperator
BSE_OPERATOR_UKS< 0, 1, 0, 0 > HxUKSOperator
BSE_OPERATOR_UKS< 1, 0, 0, 0 > QpUKSOperator
Provides a means for comparing floating point numbers.