Program Listing for File ED_basis.hpp¶
↰ Return to documentation for file (src_ed/ED_basis.hpp)
#ifndef ED_basis_h
#define ED_basis_h
#include <cstdio>
#include <string>
#include <map>
#include <memory>
#include <tuple>
#include "parser.hpp"
#include "symmetry_group.hpp"
#include "sector.hpp"
#include "binary_state.hpp"
#define PARAMETER_ZERO 1e-10
#define MIN_DUMP_SIZE 13
#define MIN_BASIS_DUMP_SIZE 13
#define MAX_ORBITAL 32
struct ED_basis
{
int L;
sector sec;
std::string name;
uint32_t dim;
static bool verb;
ED_basis(const sector &_sec, int L);
virtual binary_state bin(uint32_t I) const = 0;
virtual uint32_t index(const binary_state &b) const = 0;
virtual void print_state(std::ostream &flux, uint32_t i) const = 0;
template<typename T>
void print_state(std::ostream &flux, const vector<T>& psi) const
{
if(psi.size() != dim) qcm_ED_throw("dimensions of vector psi and basis do not match!");
if(psi.size() > global_int("max_dim_print")) return;
for(int i=0; i<psi.size(); i++){
flux << psi[i] << "\t: ";
print_state(flux, i);
flux << '\n';
}
}
};
struct ED_halfbasis
{
int N;
int L;
uint32_t dim;
vector<uint32_t> bin;
ED_halfbasis(int L, int N);
uint32_t index(const uint32_t &b) const;
void print_state(std::ostream &flux, int i) const;
};
struct ED_factorized_basis : ED_basis
{
shared_ptr<ED_halfbasis> up;
shared_ptr<ED_halfbasis> down;
ED_factorized_basis(const sector &_sec, int _L);
binary_state bin(uint32_t I) const;
uint32_t index(const binary_state &b) const;
void print_state(std::ostream &flux, uint32_t i) const;
tuple<uint32_t, uint32_t, uint32_t, uint32_t> components(uint32_t label) const;
};
struct ED_mixed_basis : ED_basis
{
shared_ptr<symmetry_group> group;
vector<binary_state> binlist;
ED_mixed_basis(const sector &_sec, shared_ptr<symmetry_group> _group);
~ED_mixed_basis();
binary_state bin(uint32_t I) const;
uint32_t index(const binary_state &b) const;
void print_state(std::ostream &flux, uint32_t i) const;
};
std::ostream & operator<<(std::ostream &flux, const ED_basis &B);
tuple<uint32_t, int, int, bool> Destroy(const int a, const uint32_t label, const ED_mixed_basis &Bx, const ED_mixed_basis &By);
tuple<uint32_t, int, int, bool> Destroy(const int a, const uint32_t label, const ED_factorized_basis &Bx, const ED_factorized_basis &By);
#endif