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

#include <hamsparse2D_CSR.h>

+ Inheritance diagram for SparseHamiltonian2D_CSR:
+ Collaboration diagram for SparseHamiltonian2D_CSR:

Public Member Functions

 SparseHamiltonian2D_CSR (int L, int D, int Nu, int Nd, double J, double U)
 
virtual ~SparseHamiltonian2D_CSR ()
 
void BuildSparseHam ()
 
void PrintSparse () const
 
void PrintRawCSR () const
 
virtual void mvprod (double *, double *, double) const
 
double * Umatrix () const
 
void BuildFullHam ()
 
std::string print_bin (myint num) const
 
virtual void BuildBase ()
 
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
 
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 hopping (myint a, myint b, int jump=0) const
 
void SaveToFile (const std::string filename, double *data, int dim) const
 
int CalcSign (int i, int j, myint a) const
 

Static Protected Member Functions

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

Protected Attributes

std::vector< double > Up_data_CSR
 The array to hold the data (CSR format) for the up hamiltonian. More...
 
std::vector< double > Down_data_CSR
 The array to hold the data (CSR format) for the down hamiltonian. More...
 
std::vector< unsigned int > Up_col
 The array to hold the column indices for the up hamiltonian. More...
 
std::vector< unsigned int > Down_col
 The array to hold the column indices for the down hamiltonian. More...
 
std::vector< unsigned int > Up_row
 The array to hold the row indices for the up hamiltonian. More...
 
std::vector< unsigned int > Down_row
 The array to hold the row indices for the down hamiltonian. More...
 
int L
 The length of the 2D grid. More...
 
int D
 The depth of the 2D grid. 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

Store the Hamiltonian for 2D Hubbard in the CSR format

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

Definition at line 29 of file hamsparse2D_CSR.h.

Constructor & Destructor Documentation

SparseHamiltonian2D_CSR::SparseHamiltonian2D_CSR ( int  L,
int  D,
int  Nu,
int  Nd,
double  J,
double  U 
)

Constructor of the SparseHamiltonian2D_CSR class

Parameters
LThe Length of the 2D grid
DThe depth of the 2D grid
NuNumber of Up Electrons
NdNumber of Down Electrons
JThe hopping strengh
UThe onsite interaction strength

Definition at line 33 of file hamsparse2D_CSR.cpp.

SparseHamiltonian2D_CSR::~SparseHamiltonian2D_CSR ( )
virtual

Destructor of the SparseHamiltonian2D_CSR class

Definition at line 41 of file hamsparse2D_CSR.cpp.

Member Function Documentation

double BareHamiltonian::arpackDiagonalize ( )
virtualinherited

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 ( )
virtualinherited

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:

void HubHam2D::BuildFullHam ( )
virtualinherited

Builds the full 2D Hubbard Hamiltonian matrix

Reimplemented from Hamiltonian.

Definition at line 123 of file ham2D.cpp.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void BareHamiltonian::BuildHam ( )
virtualinherited

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:

void SparseHamiltonian2D_CSR::BuildSparseHam ( )

Builds and fills the sparse hamiltonian

Definition at line 48 of file hamsparse2D_CSR.cpp.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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

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
protectedinherited

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)
staticinherited

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 
)
staticprotectedinherited

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)
virtualinherited

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
inherited

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
inherited

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
inherited

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
inherited

Getter for the hopping strength

Returns
the hopping strength

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

int BareHamiltonian::getL ( ) const
inherited

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
inherited

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
inherited

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
inherited

Getter for the onsite interaction strength

Returns
the onsite interaction strength

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

int HubHam2D::hopping ( myint  a,
myint  b,
int  jump = 0 
) const
protectedvirtualinherited

private method used to see if a hopping between state a and b is possible and with which sign: this is for 2D hubbard.

Parameters
athe bra to use
bthe ket to use
jumpdoes nothing, is set by default to zero, please ignore.
Returns
matrix element of the hopping term between the ket and the bra. You still have to multiply this with the hopping strength J

Reimplemented from Hamiltonian.

Definition at line 54 of file ham2D.cpp.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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

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
inherited

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
inherited

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
inherited

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:

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

Matrix vector product with (sparse) hamiltonian: y = ham*x + alpha*y

Parameters
xthe x vector
ythe y vector
alphathe scaling value

Reimplemented from Hamiltonian.

Reimplemented in SparseHamiltonian2D.

Definition at line 188 of file hamsparse2D_CSR.cpp.

+ Here is the call graph for this function:

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

Prints the full BareHamiltonian matrix to stdout

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

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

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 
)
staticinherited

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
inherited

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
inherited

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 SparseHamiltonian2D_CSR::PrintRawCSR ( ) const

Print the raw CSR array's

Definition at line 145 of file hamsparse2D_CSR.cpp.

void SparseHamiltonian2D_CSR::PrintSparse ( ) const

Prints the Sparse Hamiltonian

Definition at line 106 of file hamsparse2D_CSR.cpp.

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

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
protectedinherited

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)
inherited

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:

double * SparseHamiltonian2D_CSR::Umatrix ( ) const

Builds the interaction diagonal

Returns
pointer to interaction vector. You have to free this yourself

Definition at line 218 of file hamsparse2D_CSR.cpp.

+ Here is the call graph for this function:

Member Data Documentation

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

vector to hold all bases ket's for down electrons

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

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

vector to hold all bases ket's for up electrons

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

int HubHam2D::D
protectedinherited

The depth of the 2D grid.

Definition at line 48 of file ham2D.h.

int BareHamiltonian::dim
protectedinherited

Dimension of the BareHamiltonian matrix.

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

std::vector<unsigned int> SparseHamiltonian2D_CSR::Down_col
protected

The array to hold the column indices for the down hamiltonian.

Definition at line 55 of file hamsparse2D_CSR.h.

std::vector<double> SparseHamiltonian2D_CSR::Down_data_CSR
protected

The array to hold the data (CSR format) for the down hamiltonian.

Definition at line 50 of file hamsparse2D_CSR.h.

std::vector<unsigned int> SparseHamiltonian2D_CSR::Down_row
protected

The array to hold the row indices for the down hamiltonian.

Definition at line 60 of file hamsparse2D_CSR.h.

double* BareHamiltonian::ham
protectedinherited

Storage for the BareHamiltonian matrix.

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

myint BareHamiltonian::Hb
protectedinherited

Hightest bit used.

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

int BareHamiltonian::Hbc
protectedinherited

the location of the highest bit

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

double BareHamiltonian::J
protectedinherited

Hopping strength.

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

int HubHam2D::L
protectedinherited

The length of the 2D grid.

Definition at line 46 of file ham2D.h.

int BareHamiltonian::Nd
protectedinherited

Number of down electrons.

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

int BareHamiltonian::Nu
protectedinherited

Number of up electrons.

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

double BareHamiltonian::U
protectedinherited

On site interaction strength.

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

std::vector<unsigned int> SparseHamiltonian2D_CSR::Up_col
protected

The array to hold the column indices for the up hamiltonian.

Definition at line 53 of file hamsparse2D_CSR.h.

std::vector<double> SparseHamiltonian2D_CSR::Up_data_CSR
protected

The array to hold the data (CSR format) for the up hamiltonian.

Definition at line 48 of file hamsparse2D_CSR.h.

std::vector<unsigned int> SparseHamiltonian2D_CSR::Up_row
protected

The array to hold the row indices for the up hamiltonian.

Definition at line 58 of file hamsparse2D_CSR.h.


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