Giter Club home page Giter Club logo

xdiag's Introduction

license cpp docs Linux CI Mac OSX CI DOI

XDiag

High-performance Yxact Diagonalization Routines and Algorithms

A C++ library to perform efficient Exact Diagonalizations of quantum many body systems.

Features:

  • Basic algebra of operators in quantum many-body systems
  • Iterative linear algebra for computing eigendecompositions and time-evolutions (e.g. Lanczos algorithm)
  • Local spin, t-J, or fermionic models
  • Full support of generic space group symmetries
  • parallelization both with OpenMP and MPI
  • modern C++17 impementation simplifying usage

Installation:

Clone this repository first. Afterwards, the xdiag library can be compiled using the standard CMake instructions

cmake -S . -B build
cmake --build build
cmake --install build

Example Code:

#include <xdiag/all.hpp>

using namespace xdiag;

int main() try {
  
  int n_sites = 16;
  int nup = n_sites / 2;
  Spinhalf block(n_sites, nup);

  // Define the nearest-neighbor Heisenberg model
  OpSum ops;
  for (int i = 0; i < n_sites; ++i) {
    ops += Op("HB", "J", {i, (i + 1) % n_sites});
  }
  ops["J"] = 1.0;

  set_verbosity(2);                // set verbosity for monitoring progress
  double e0 = eigval0(ops, block); // compute ground state energy
  
  Log("Ground state energy: {:.12f}", e0);
  
} catch (Error e) {
  error_trace(e);
}

Documentation

The full documentation is available at awietek.github.io/xdiag.

About

author: Alexander Wietek license: Apache License 2.0

xdiag's People

Contributors

awietek avatar hshackle avatar lukes118 avatar spuriosity1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

xdiag's Issues

Build fails when using Homebrew gcc on M1 macOS

Steps to reproduce

% cmake -S . -B build
-- The CXX compiler identification is GNU 14.1.0
-- Checking whether CXX compiler has -isysroot
-- Checking whether CXX compiler has -isysroot - yes
-- Checking whether CXX compiler supports OSX deployment target flag
-- Checking whether CXX compiler supports OSX deployment target flag - yes
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /opt/homebrew/bin/g++-14 - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Compiler ID     : GNU
-- Compiler version: 14.1.0
-- Build type: Release
-- CMAKE_INSTALL_PREFIX is not set
Default value: /usr/local
Will set it to /Users/spuriosity1/gh/xdiag/install
-- --------    BUILDING NORMAL XDIAG LIBRARY   -------------
-- -------- Determining Linear Algebra backend -------------
-- Could NOT find MKL (missing: MKL_LIBRARIES MKL_INCLUDE_DIRS MKL_INTERFACE_LIBRARY MKL_THREAD_LAYER_LIBRARY MKL_CORE_LIBRARY)
-- Looking for sgemm_
-- Looking for sgemm_ - not found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Looking for dgemm_
-- Looking for dgemm_ - found
-- Found BLAS: /Library/Developer/CommandLineTools/SDKs/MacOSX13.1.sdk/System/Library/Frameworks/Accelerate.framework
-- Looking for cheev_
-- Looking for cheev_ - found
-- Found LAPACK: /Library/Developer/CommandLineTools/SDKs/MacOSX13.1.sdk/System/Library/Frameworks/Accelerate.framework;-lm;-ldl
-- Employing Lapack/Blas as linear algebra backend
-- --------  Determining if OpenMP is present  -------------
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- Employing OpenMP
-- --------   Determining if HDF5 is present   -------------
-- Found HDF5: hdf5_cpp-shared (found version "1.14.3") found components: CXX
-- Employing HDF5
-- --------         Creating config.hpp        -------------
-- Found Git: /usr/bin/git (found version "2.37.1 (Apple Git-137.1)")
-- Configuring done (1.8s)
-- Generating done (0.0s)
-- Build files have been written to: /Users/spuriosity1/gh/xdiag/build
% cmake --build build
/Users/spuriosity1/gh/xdiag/xdiag/utils/error.cpp:13:13: error: redefinition of 'const char* std::bad_variant_access::what() const'
   13 | const char *std::bad_variant_access::what() const noexcept {
      |             ^~~
In file included from /Users/spuriosity1/gh/xdiag/xdiag/utils/error.cpp:4:
/opt/homebrew/Cellar/gcc/14.1.0_1/include/c++/14/variant:1334:17: note: 'virtual const char* std::bad_variant_access::what() const' previously defined here
 1334 |     const char* what() const noexcept override
      |                 ^~~~

Note that build also fails under Apple clang, but for different reasons.

Problem in Lanczos with Hilbert space greater than 2^32 (Sz=0)

Hi,
using the xcode version #49f8fe7, @riccardo-rende and I tried to diagonalize an Heisenberg chain using this code :

#include <xdiag/all.hpp>

using namespace xdiag;

int main() try {
  
  int n_sites = 36;
  int nup = n_sites / 2;
  Spinhalf block(n_sites, nup);

  // Define the nearest-neighbor Heisenberg model
  BondList bonds;
  for (int i = 0; i < n_sites; ++i) {
    bonds += Bond("HB", "J", {i, (i + 1) % n_sites});
  }
  bonds["J"] = 1.0;

  set_verbosity(2);                  // set verbosity for monitoring progress
  double e0 = eigval0(bonds, block); // compute ground state energy
  
  Log("Ground state energy: {:.12f}", e0);
  
} catch (Error e) {
  error_trace(e);
}

We checked that up to L=32 we get the correct results.
However, for L=34 we obtain the following error:

Warning: Tmatrix zero dimensional in eig0_cplx
Ground state energy: nan

and for L=36 the code runs but the energy is wrong, namely it goes below the exact one :

Exact energy per site : -0.44378432839067183
Lanczos energy per site after 64 iterations : -0.4737482323668045

The same happens for the square lattice, the energy for the 4x4 is correct, instead for the 6x6 goes below the exact one.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.