Program Listing for File lattice_model_instance.hpp

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

#ifndef lattice_model_instance_hpp
#define lattice_model_instance_hpp

#include <array>
#include "lattice_model.hpp"
#include "block_matrix.hpp"

struct lattice_model_instance{
    int label;
    bool gs_solved;
    bool gf_solved;
    bool average_solved;
    bool SEF_solved;
    bool PE_solved;
    bool complex_HS;
    shared_ptr<lattice_model> model;
    matrix<Complex> H;
    matrix<Complex> H_down;
    block_matrix<Complex> Hc;
    block_matrix<Complex> Hc_down;
    map<string, double> params;
    vector<pair<double,string>> gs;
    vector<vector<tuple<string,double,double>>> clus_ave;
    vector<pair<string,double>> ave;
    vector<double> GS_energy;
    double omega;
    double E_pot;
    double E_kin;
    vector<double> G_host_cumul;
    vector<vector<matrix<Complex>>> G_host;
    vector<vector<matrix<Complex>>> G_host_down;
    vector<double> CDMFT_freqs;
    vector<double> CDMFT_weights;

    complex<double> TrSigmaG(Complex w, vector3D<double> &k, bool spin_down);
    double Berry_flux(const vector<vector3D<double>> &k, int orb, bool spin_down);
    double Berry_plaquette(Green_function &G, const vector3D<double> &k1, const double deltax, const double deltay, const int opt, int dir, int orb);
    double CDMFT_distance(const vector<double>& p, int clus);
    vector<double> CDMFT_residuals(const vector<double>& p, int clus);
    vector<double> CDMFT_gradient(const vector<double>& p, int clus);
    double monopole_part(vector3D<double>& k, double a, int nk, int orb, bool rec, int dir, bool spin_down);
    double monopole(vector3D<double>& k, double a, int nk, int orb, bool rec);
    double potential_energy();
    double Potthoff_functional();
    double spectral_average(const string& name, const complex<double> w);
    Green_function cluster_Green_function(Complex w, bool sig, bool spin_down);
    lattice_model_instance(shared_ptr<lattice_model> _model, int label);
    ~lattice_model_instance();
    matrix<complex<double>> cluster_Green_function_remix(size_t i, complex<double> w, bool spin_down, bool blocks);
    matrix<complex<double>> cluster_Green_function(size_t i, complex<double> w, bool spin_down, bool blocks);
    matrix<complex<double>> cluster_hopping_matrix(size_t i, bool spin_down);
    matrix<complex<double>> cluster_self_energy_remix(size_t i, complex<double> w, bool spin_down);
    matrix<complex<double>> cluster_self_energy(size_t i, complex<double> w, bool spin_down);
    matrix<complex<double>> hybridization_function_remix(size_t i, complex<double> w, bool spin_down);
    matrix<complex<double>> hybridization_function(size_t i, complex<double> w, bool spin_down);
    matrix<complex<double>> Green_integral(bool spin_down, int clus);
    matrix<Complex> epsilon(Green_function_k &M);
    matrix<Complex> projected_Green_function(Complex w, bool spin_down);
    matrix<Complex> band_Green_function(Green_function_k &M);
    matrix<Complex> upgrade_cluster_matrix_anomalous(int latt_mix, int clus_mix, matrix<Complex> &g, matrix<Complex> &gm);
    matrix<Complex> upgrade_cluster_matrix(int latt_mix, int clus_mix, matrix<Complex> &g);
    pair<vector<array<double,9>>, vector<array<complex<double>, 11>>> site_and_bond_profile();
    vector<double> Berry_curvature(vector3D<double>& k1, vector3D<double>& k2, int nk, int orb, bool recursive=false, int dir=3);
    vector<double> dispersion(Green_function_k &M);
    vector<double> dos(const complex<double> w, bool use_grid=false);
    vector<double> momentum_profile_per(const lattice_operator& op, const vector<vector3D<double>> &k);
    vector<double> momentum_profile(const lattice_operator& op, const vector<vector3D<double>> &k);
    vector<pair<double,string>> ground_state();
    vector<pair<string,double>> averages(const vector<string> &_ops);
    vector<pair<vector<double>, vector<double>>> Lehmann_Green_function(vector<vector3D<double>> &k, int orb, bool spin_down);
    vector<vector<matrix<Complex>>> get_CDMFT_host(bool spin_down);
    void set_CDMFT_host(const vector<double>& freqs, const int clus, const vector<matrix<Complex>>& H, const bool spin_down);
    void average_integrand_per(Complex w, vector3D<double> &k, const int *nv, double *I);
    void average_integrand(Complex w, vector3D<double> &k, const int *nv, double *I);
    void average_integrand(int iw, int ik, vector<double> &I);
    void average_integrand_k(Green_function &G_up, Green_function *G_down, vector3D<double> &k, const int *nv, double *I);
    void build_cluster_H();
    void build_H();
    void CDMFT_host(const vector<double>& freqs, const vector<double>& weights);
    void CDMFT_host();
    void cluster_self_energy(Green_function& G);
    void Green_eigensystem(Green_function &G, const vector3D<double> &k, vector<double> &e, matrix<Complex> &U, int opt);
    void Green_function_solve();
    void inverse_Gcpt(const block_matrix<Complex> &Ginv, Green_function_k &M);
    void periodized_Green_function(Green_function_k &M);
    void potential_energy_integrand(Complex w, vector3D<double> &k, const int *nv, double *I);
    void potential_energy_integrand_k(Green_function &G_up, Green_function *G_down, vector3D<double> &k, const int *nv, double *I);
    void print_parameters(ostream& out, print_format format);
    void SEF_integrand(Complex w, vector3D<double> &k, const int *nv, double *I);
    void SEF_integrand_k(Green_function &G_up, Green_function *G_down, vector3D<double> &k, const int *nv, double *I);
    void self_energy(Green_function_k& M);
    void set_Gcpt(Green_function_k &M);
    void set_V(Green_function_k &M, bool nohybrid=false);
};

void SEF_integrand(Complex w, vector3D<double> &k, const int *nv, double *I);

#endif /* lattice_model_instance_hpp */