Program Listing for File model_instance_base.hpp

Return to documentation for file (src_ed/model_instance_base.hpp)

#ifndef model_instance_base_h
#define model_instance_base_h

#include "model.hpp"
#include "Green_function_set.hpp"
#include "hdf5_io.hpp"

struct sector_data
{
  double E0;
  double weight;
};

struct model_instance_base
{

  // members
    double SEF_bath;
  bool complex_Hilbert;
  bool gf_read;
  bool gf_solved;
  bool gs_solved;
  bool hopping_solved;
  bool is_correlated; // true if interactions are non zero on the cluster
  bool spin_down;
  double E0;
  double GS_energy;
  GF_FORMAT GF_solver;
  int dim_GF;
  int mixing;
  map<sector, sector_data> sec_data;
  map<string, double> value;
  matrix<Complex> M_down;
  matrix<Complex> M;
  sector GS_sector;
  set<sector> sector_set;
  set<sector> target_sectors;
  shared_ptr<model> the_model;
  size_t label;
  size_t n_mixed;
  size_t total_dim;
  vector<tuple<string,double,double>> averages;
  double GF_density;

  model_instance_base(size_t _label, shared_ptr<model> _the_model, const map<string,double> _value, const string &_sectors);
  ~model_instance_base();

  string full_name();
  size_t dimension();

  virtual pair<double, string> low_energy_states() = 0;
  virtual pair<double, double> cluster_averages(shared_ptr<Hermitian_operator> h) = 0;
  virtual void Green_function_solve() = 0;
  virtual pair<double, string> one_body_solve() = 0;
  virtual matrix<Complex> Green_function(const Complex &z, bool spin_down, bool blocks) = 0;
  virtual void Green_function_average() = 0;
  virtual void Green_function_density() = 0;
  virtual matrix<Complex> self_energy(const Complex &z, bool spin_down) = 0;
  virtual matrix<Complex> hopping_matrix(bool spin_down) = 0;
  virtual vector<tuple<int,int,double>> interactions() = 0;
  virtual matrix<Complex> hopping_matrix_full(bool spin_down, bool diag) = 0;
  virtual vector<Complex> susceptibility(shared_ptr<Hermitian_operator> h, const vector<Complex> &w) = 0;
  virtual matrix<Complex> hybridization_function(Complex w, bool spin_down) = 0;
  virtual vector<pair<double,double>> susceptibility_poles(shared_ptr<Hermitian_operator> h) = 0;
  virtual void print(ostream& fout) = 0;
  virtual double tr_sigma_inf() = 0;
  virtual void merge_states() = 0;
  virtual void write_hdf5(H5::Group& grp) = 0;
  virtual void read_hdf5(H5::Group& grp)  = 0;
  virtual void print_wavefunction(ostream& fout) = 0;
  virtual pair<matrix<Complex>, vector<uint64_t>>  density_matrix_mixed(vector<int> sites) = 0;
  virtual pair<matrix<Complex>, vector<uint64_t>>  density_matrix_factorized(vector<int> sites) = 0;
};





#endif /* model_instance_base_hpp */