HubbardGPU
Hubbard diagonalisation on the GPU (and CPU)
 All Classes Files Functions Variables Typedefs Friends Macros
BareHamiltonian Class Referenceabstract

#include <bare-ham.h>

+ Inheritance diagram for BareHamiltonian:

Public Member Functions

 BareHamiltonian (int L, int Nu, int Nd, double J, double U)
 
virtual ~BareHamiltonian ()
 
std::string print_bin (myint num) const
 
virtual void BuildBase ()
 
virtual void BuildFullHam ()=0
 
virtual void BuildHam ()
 
int getL () const
 
int getNu () const
 
int getNd () const
 
int getDim () const
 
double getJ () const
 
double getU () const
 
void setU (double)
 
myint getBaseUp (unsigned int i) const
 
myint getBaseDown (unsigned int i) const
 
virtual std::vector< double > ExactDiagonalizeFull (bool calc_eigenvectors=false)
 
virtual double LanczosDiagonalize (int m=0)
 
virtual double arpackDiagonalize ()
 
void Print (bool list=false) const
 
void PrintBase () const
 
void PrintGroundstateVector () const
 
virtual void mvprod (double *x, double *y, double alpha) const =0
 
double MemoryNeededFull () const
 
double MemoryNeededLanczos () const
 
double MemoryNeededArpack () const
 
virtual void SaveToFile (const std::string filename) const
 

Static Public Member Functions

static int CalcDim (int L, int N)
 
static int CountBits (myint bits)
 
static std::string print_bin (myint num, int bitcount)
 

Protected Member Functions

int CalcSign (int i, int j, myint a) const
 
void SaveToFile (const std::string filename, double *data, int dim) const
 

Static Protected Member Functions

static void Diagonalize (int dim, double *mat, double *eigs, bool calc_eigenvectors)
 

Protected Attributes

int L
 Number of sites. More...
 
int Nu
 Number of up electrons. More...
 
int Nd
 Number of down electrons. More...
 
double J
 Hopping strength. More...
 
double U
 On site interaction strength. More...
 
double * ham
 Storage for the BareHamiltonian matrix. More...
 
int dim
 Dimension of the BareHamiltonian matrix. More...
 
myint Hb
 Hightest bit used. More...
 
int Hbc
 the location of the highest bit More...
 
std::vector< myintbaseUp
 vector to hold all bases ket's for up electrons More...
 
std::vector< myintbaseDown
 vector to hold all bases ket's for down electrons More...
 

Detailed Description

The is a pure virtual basic hamiltonian class. It's the base class for both the sites basis and the momentum basis

Author
Ward Poelmans wpoel.nosp@m.y86@.nosp@m.gmail.nosp@m..com

Definition at line 55 of file bare-ham.h.

Constructor & Destructor Documentation

BareHamiltonian::BareHamiltonian ( int  L,
int  Nu,
int  Nd,
double  J,
double  U 
)

Constructor of the BareHamiltonian class

Parameters
LNumber of lattice sites
NuNumber of Up Electrons
NdNumber of Down Electrons
JThe hopping strengh
UThe onsite interaction strength

Definition at line 43 of file bare-ham.cpp.

+ Here is the call graph for this function:

BareHamiltonian::~BareHamiltonian ( )
virtual

Destructor of the BareHamiltonian class

Definition at line 68 of file bare-ham.cpp.

Member Function Documentation

double BareHamiltonian::arpackDiagonalize ( )
virtual

Definition at line 436 of file bare-ham.cpp.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void BareHamiltonian::BuildBase ( )
virtual

Builds all the up and down base kets

Reimplemented in SpinHamiltonian, and MomHamiltonian.

Definition at line 146 of file bare-ham.cpp.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

virtual void BareHamiltonian::BuildFullHam ( )
pure virtual

Implemented in SpinHamiltonian, MomHamiltonian, HubHam2D, and Hamiltonian.

+ Here is the caller graph for this function:

void BareHamiltonian::BuildHam ( )
virtual

This method is always present and should build the Hamiltonian, either full or sparse

Definition at line 165 of file bare-ham.cpp.

+ Here is the call graph for this function:

int BareHamiltonian::CalcDim ( int  L,
int  N 
)
static

Calculates the dimension for the up or down electron space. Basically, it calculates the N-combination out of L. This algorithm is not perfect, overflow can occur but should be no problem for our small problems.

Parameters
Lnumber of lattice sites
Nnumber of up or down electrons
Returns
the dimension of the up or down electron space

Definition at line 83 of file bare-ham.cpp.

+ Here is the caller graph for this function:

int BareHamiltonian::CalcSign ( int  i,
int  j,
myint  a 
) const
protected

Calculates the sign of the hop between site i and site j on ket a. Make sure that i < j!

Parameters
ithe first sp
jthe second sp
athe ket to use
Returns
the sign of the hop

Definition at line 178 of file bare-ham.cpp.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int BareHamiltonian::CountBits ( myint  bits)
static

Counts the number of bits set. It uses the builtin gcc function __buildtin_popcount. You must compile with -march=native and it will then generate a POPCNT instruction on platforms that support it. Otherwise it will be slow. Consider using a different method here if you don't have the POPCNT instruction: there are fast SSSE3 and SSE2 ways to do this(google is your friend).

Parameters
bitsthe myint of which to count the number of bits set
Returns
the number of bits set

Definition at line 106 of file bare-ham.cpp.

+ Here is the caller graph for this function:

void BareHamiltonian::Diagonalize ( int  dim,
double *  mat,
double *  eigs,
bool  calc_eigenvectors 
)
staticprotected

Helper for exact diagonalization: diagonalize the matrix given in mat with dimension dim, stores the eigenvalues in eigs and optionally the eigenvectors in mat

Parameters
dimthe dimension of the matrix
matthe actual matrix (size: dim*dim)
eigsarray of size dim to store eigenvalues
calc_eigenvectorswhether or not the calculate the eigenvectors

Definition at line 681 of file bare-ham.cpp.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

std::vector< double > BareHamiltonian::ExactDiagonalizeFull ( bool  calc_eigenvectors = false)
virtual

Exactly calculates the eigenvalues of the BareHamiltonian matrix. Needs lapack.

Returns
the lowest eigenvalue

Reimplemented in SpinHamiltonian, and MomHamiltonian.

Definition at line 280 of file bare-ham.cpp.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

myint BareHamiltonian::getBaseDown ( unsigned int  i) const

Getter for the i base down ket

Parameters
ithe number of the base ket
Returns
the base ket

Definition at line 270 of file bare-ham.cpp.

+ Here is the caller graph for this function:

myint BareHamiltonian::getBaseUp ( unsigned int  i) const

Getter for the i base up ket

Parameters
ithe number of the base ket
Returns
the base ket

Definition at line 260 of file bare-ham.cpp.

+ Here is the caller graph for this function:

int BareHamiltonian::getDim ( ) const

Getter for the dimension of the BareHamiltonian matrix

Returns
dimension of the BareHamiltonian matrix

Definition at line 223 of file bare-ham.cpp.

+ Here is the caller graph for this function:

double BareHamiltonian::getJ ( ) const

Getter for the hopping strength

Returns
the hopping strength

Definition at line 232 of file bare-ham.cpp.

int BareHamiltonian::getL ( ) const

Getter for the number of lattice sites

Returns
the number of lattice sites

Definition at line 196 of file bare-ham.cpp.

int BareHamiltonian::getNd ( ) const

Getter for the number of down electrons

Returns
the number of down electrons

Definition at line 214 of file bare-ham.cpp.

int BareHamiltonian::getNu ( ) const

Getter for the number of up electrons

Returns
the number of up electrons

Definition at line 205 of file bare-ham.cpp.

double BareHamiltonian::getU ( ) const

Getter for the onsite interaction strength

Returns
the onsite interaction strength

Definition at line 241 of file bare-ham.cpp.

double BareHamiltonian::LanczosDiagonalize ( int  m = 0)
virtual

Calculates the lowest eigenvalue of the BareHamiltonian matrix using the lanczos algorithm. Needs lapack.

Parameters
man optional estimate for the lanczos space size
Returns
the lowest eigenvalue

Definition at line 313 of file bare-ham.cpp.

+ Here is the call graph for this function:

double BareHamiltonian::MemoryNeededArpack ( ) const

Calculates the amount of memory needed for the calculation if we use the arpack. It doesn't include the program code and stuff.

Returns
the amount of memory needed in bytes

Definition at line 643 of file bare-ham.cpp.

+ Here is the call graph for this function:

double BareHamiltonian::MemoryNeededFull ( ) const

Calculates the amount of memory needed for the calculation of all eigenvalues using the exact method. It doesn't include the program code and stuff.

Returns
the amount of memory needed in bytes

Definition at line 591 of file bare-ham.cpp.

+ Here is the call graph for this function:

double BareHamiltonian::MemoryNeededLanczos ( ) const

Calculates the amount of memory needed for the calculation if we use the lanczos method. It doesn't include the program code and stuff.

Returns
the amount of memory needed in bytes

Definition at line 617 of file bare-ham.cpp.

+ Here is the call graph for this function:

virtual void BareHamiltonian::mvprod ( double *  x,
double *  y,
double  alpha 
) const
pure virtual

Implemented in SpinHamiltonian, MomHamiltonian, SparseHamiltonian2D_CSR, SparseHamiltonian2D, and Hamiltonian.

+ Here is the caller graph for this function:

void BareHamiltonian::Print ( bool  list = false) const

Prints the full BareHamiltonian matrix to stdout

Definition at line 410 of file bare-ham.cpp.

std::string BareHamiltonian::print_bin ( myint  num) const

Print a int in binary form to a string. Prints a much as needed to represent the current system.

Parameters
numthe myint to print in binary form
Returns
a string with the binary representation of num

Definition at line 138 of file bare-ham.cpp.

+ Here is the caller graph for this function:

std::string BareHamiltonian::print_bin ( myint  num,
int  bitcount 
)
static

Print a int in binary form to a string. It only prints the bitcount least significant bits

Parameters
numthe myint to print in binary form
bitcountthe number of bits to print (starting from the LSB)
Returns
a string with the binary representation of num

Definition at line 118 of file bare-ham.cpp.

void BareHamiltonian::PrintBase ( ) const

Print the basis set used.

Definition at line 429 of file bare-ham.cpp.

+ Here is the call graph for this function:

void BareHamiltonian::PrintGroundstateVector ( ) const

Prints the groundstate in function of the basis vectors Only gives meanfull output after running BareHamiltonian::ExactDiagonalizeFull(true)

Definition at line 295 of file bare-ham.cpp.

+ Here is the call graph for this function:

void BareHamiltonian::SaveToFile ( const std::string  filename) const
virtual

Save the hamiltonian matrix to a file in the HDF5 format

Parameters
filenamethe name of the file to write to

Definition at line 727 of file bare-ham.cpp.

+ Here is the caller graph for this function:

void BareHamiltonian::SaveToFile ( const std::string  filename,
double *  data,
int  dim 
) const
protected

Save a array to a file in the HDF5 format

Parameters
filenamethe name of the file to write to
dataa pointer to the array to write to a file
dimthe size of the array

Definition at line 741 of file bare-ham.cpp.

void BareHamiltonian::setU ( double  myU)

Set the value of U

Parameters
myUthe value of U

Definition at line 250 of file bare-ham.cpp.

+ Here is the caller graph for this function:

Member Data Documentation

std::vector<myint> BareHamiltonian::baseDown
protected

vector to hold all bases ket's for down electrons

Definition at line 138 of file bare-ham.h.

std::vector<myint> BareHamiltonian::baseUp
protected

vector to hold all bases ket's for up electrons

Definition at line 136 of file bare-ham.h.

int BareHamiltonian::dim
protected

Dimension of the BareHamiltonian matrix.

Definition at line 128 of file bare-ham.h.

double* BareHamiltonian::ham
protected

Storage for the BareHamiltonian matrix.

Definition at line 126 of file bare-ham.h.

myint BareHamiltonian::Hb
protected

Hightest bit used.

Definition at line 131 of file bare-ham.h.

int BareHamiltonian::Hbc
protected

the location of the highest bit

Definition at line 133 of file bare-ham.h.

double BareHamiltonian::J
protected

Hopping strength.

Definition at line 122 of file bare-ham.h.

int BareHamiltonian::L
protected

Number of sites.

Definition at line 116 of file bare-ham.h.

int BareHamiltonian::Nd
protected

Number of down electrons.

Definition at line 120 of file bare-ham.h.

int BareHamiltonian::Nu
protected

Number of up electrons.

Definition at line 118 of file bare-ham.h.

double BareHamiltonian::U
protected

On site interaction strength.

Definition at line 124 of file bare-ham.h.


The documentation for this class was generated from the following files: