Program Listing for File lattice_operator.hpp

Return to documentation for file (src_qcm/lattice_operator.hpp)

#ifndef latticeOperator_h
#define latticeOperator_h

#include <iomanip>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <iterator>

#include "vector3D.hpp"
#include "types.hpp"
#include "qcm_ED.hpp"
#include "lattice_matrix_element.hpp"
#include "sector.hpp"

enum class latt_op_type {one_body, singlet, dz, dy, dx, Hubbard, Hund, Heisenberg, X, Y, Z};

template<typename T>
T native(Complex x);

struct lattice_model;


struct lattice_operator
{
    bool is_active;
    bool is_closed;
    bool is_complex;
    bool is_density_wave;
    bool is_interaction;
    double average;
    double nambu_correction_full;
    double nambu_correction;
    double norm;
    int mixing;
    lattice_model &model;
    latt_op_type type;
    static map<string,latt_op_type> op_type_map;
    string name;
    vector<bool> in_cluster;
    vector<GF_matrix_element<Complex>> IGF_elem_down;
    vector<GF_matrix_element<Complex>> IGF_elem;
    vector<lattice_matrix_element> elements;
    vector<matrix_element<Complex>> GF_elem_down;
    vector<matrix_element<Complex>> GF_elem;


    lattice_operator(lattice_model& _model, const string& _name, latt_op_type _type = latt_op_type::one_body);
    lattice_operator(lattice_model& _model, const string& _name, const string& _type);
    void add_matrix_element(const vector3D<int64_t>& pos1, const vector3D<int64_t>& link, Complex v, const string& opt="");
    void close();
    void consolidate();
    void check_spin_symmetry();
    void one_body_matrix(bool spin_down);
};


#endif