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