Template Struct anomalous_operator

Inheritance Relationships

Base Type

Struct Documentation

template<typename op_field>
struct anomalous_operator : public Hermitian_operator

Represents a pairing operator. op_field is meant to be either “double” or “complex<double>”.

Public Functions

anomalous_operator(const string &_name, shared_ptr<model> the_model, const vector<matrix_element<op_field>> &_elements)

Constructor from name and matrix elements.

Parameters:
  • _name – name of the operator

  • _the_model – model

  • _elements – nonzero one-body matrix elements

void check_spin_flip()

determines whether the operator has spin-flip/triplet terms sets the bool variable spin_flip accordingly Since this is an pairing operator, ‘spin flip’ occurs when there are triplet terms, i.e.

terms that couple the same spin!

virtual void set_target(vector<bool> &in_bath)

set the target of an operator 1 : cluster 2 : bath only 3 : hybridization

Parameters:

in_bath – vector of bool defining the status of each site

virtual void set_hopping_matrix(double value, matrix<double> &tc, bool spin_down, int sys_mixing)
inline virtual void set_hopping_matrix(double value, matrix<Complex> &tc, bool spin_down, int sys_mixing)
virtual double average_from_GF(matrix<Complex> &Gave, bool spin_down)

Computes the average of the operator in an uncorrelated ground state, determined solely by the average of the uncorrelated Green function.

virtual shared_ptr<HS_Hermitian_operator> build_HS_operator(sector sec, bool complex_HS_op)

returns a pointer to, and constructs the associated HS operator in the sector sec.

Parameters:
  • sec – : sector of the Hilbert space

  • complex_HS_op – : true if the Hilbert space is complex

virtual void print(ostream &fout)

prints definition to a file

Parameters:

fout – output stream

template<typename HS_field>
void set_hopping_matrix_templ(double value, matrix<HS_field> &tc, bool spin_down, int sys_mixing)
virtual vector<matrix_element<Complex>> matrix_elements()

returns a list of complexified matrix elements

inline virtual string type()
virtual void multiply_add_OTF(const vector<double> &x, vector<double> &y, double z, shared_ptr<ED_mixed_basis> B)

Applies the HS operator associated to the anomalous operator in the basis B to state vector x and adds the result to state vector y, by computing the matrix elements “on the fly” (OTF).

This is used in the “onthefly” option of the Hamiltonian format. This is the version for a real Hilbert space

virtual void multiply_add_OTF(const vector<Complex> &x, vector<Complex> &y, double z, shared_ptr<ED_mixed_basis> B)

Applies the HS operator associated to the anomalous operator in the basis B to state vector x and adds the result to state vector y, by computing the matrix elements “on the fly” (OTF).

This is used in the “onthefly” option of the Hamiltonian format. This is the version for a complex Hilbert space

inline virtual void set_hopping_matrix(double value, matrix<double> &tc, bool spin_down, int sys_mixing)

Adds the contribution of the operator to the 1-body matrices tc, tb and tcb.

Parameters:
  • value – : value of the matrix element

  • tc – : 1-body matrix the operator contributes to

  • spin_down – : true in the spin-down case of mixing=4

  • sys_mixing – : mixing state of the model (not that of the operator)

inline virtual void set_hopping_matrix(double value, matrix<double> &tc, bool spin_down, int sys_mixing)

Public Members

bool spin_flip

true if Nambu doubling is required (i.e., x or y component of the triplet d-vector)

vector<matrix_element<op_field>> elements

one-body matrix elements

matrix<op_field> e

dense one-body matrix (anomalous sector only)

matrix<op_field> E

dense one-body matrix, but within the mixing state of the model (may be extended)