Program Listing for File qcm_ED.hpp

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

#ifndef qcm_ED_h
#define qcm_ED_h

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <complex>
#include <array>
#include <tuple>
#include <functional>

#include "matrix_element.hpp"
#include "matrix.hpp"

using namespace::std;

namespace ED{

  void new_model(const string &name, const size_t n_sites, const size_t n_bath, const vector<vector<int>> &gen, bool bath_irrep);



  tuple<size_t,size_t,size_t> model_size(const string &name);





  void new_operator(const string &model_name, const string &name, const string &type, const vector<matrix_element<double>> &elements);
  void new_operator(const string &model_name, const string &name, const string &type, const vector<matrix_element<complex<double>>> &elements);



  bool exists(const string &model_name, const string &name);



  void new_model_instance(const string &model_name, map<string, double> &param, const string &sec, size_t label);

  void erase_model_instance(size_t label);


  int mixing(size_t label);

  bool complex_HS(size_t label);




  pair<double, string> ground_state_solve(size_t label);



  vector<tuple<string,double,double>> cluster_averages(size_t label);




  void Green_function_solve(size_t label);



  matrix<complex<double>> Green_function(const complex<double> &z, bool spin_down, const size_t label, bool blocks);


  matrix<complex<double>> Green_function_average(bool spin_down, const size_t label);



  double Green_function_density(const size_t label);




  matrix<complex<double>> self_energy(const complex<double> &z, bool spin_down, const size_t label);



  matrix<complex<double>> hopping_matrix(bool spin_down, const size_t label);
  matrix<complex<double>> hopping_matrix_full(bool spin_down, bool diag, const size_t label);

  vector<tuple<int,int,double>> interactions(const size_t label);


  matrix<complex<double>> hybridization_function(const complex<double> w, bool spin_down, const size_t label);




  vector<complex<double>> susceptibility(const string &op, const vector<complex<double>> &w, const size_t label);




  vector<pair<double,double>> susceptibility_poles(const string &op, const size_t label);




  double Potthoff_functional(const size_t label);





  size_t Green_function_dimension(size_t label);



  double fidelity(const int label1, const int label2);



  double tr_sigma_inf(const size_t label);


  void write_instance_hdf5(const string& filename, int label, const string& group);

  void read_instance_hdf5(const string& filename, int label, const string& group);


  void print_models(ostream& fout);


  void global_parameter_init();


  pair<vector<double>, vector<complex<double>>> qmatrix(bool spin_down, const size_t label);


  pair<vector<double>, vector<complex<double>>> hybridization(bool spin_down, const size_t label);



  string print_wavefunction(const size_t label);

  pair<string, vector<matrix_element<Complex>>> matrix_elements(const string& model_name, const string& op_name);

  pair<matrix<Complex>, vector<uint64_t>> density_matrix(const vector<int> &sites, size_t label);


  struct CombinedMCF_data {
    vector<matrix<Complex>> A;
    vector<matrix<Complex>> B;
    matrix<Complex>         W;
  };

  CombinedMCF_data get_combined_mcf(bool spin_down, size_t label);
};

#endif