# ABACUS Copyright (c) [J.-S. Caux](https://jscaux.org). ABACUS is a general set of algorithms for dealing with Bethe Ansatz-solvable systems including: * Lieb-Liniger (delta-)interacting bosons * Heisenberg spin chains * Isotropic antiferromagnet (XXX) * Anisotropic gapless antiferromagnet (XXZ, 0 < Delta < 1) * Anisotropic gapped antiferromagnet (XXZ_gpd, Delta > 1) * Interacting fermions (Jordan-Wigner'd XXZ) The principal purposes of ABACUS are to: * provide structs and classes to construct Bethe eigenstates * provide structs and classes to solve TBA equations * provide functions to compute matrix elements and other ABA-obtained quantities (overlaps, ...) * provide Hilbert space scanning functions, enabling the computation of dynamical correlation functions of basic observables * provide a set of executables to perform such computations, either serially from the command-line or in parallel on a cluster. The ABACUS codebase is written in C++. The serial executables are OpenMP-aware. Parallel versions use MPICH. ## Installation From the base directory, simply run ``` shell $ make ``` This will produce all serial executables, together with a library `ABACUS_[vn].a` where vn is of the form [digit][character]. The digit marks a release number, with the optional letter marking a subversion. ##### Serial executables All executables are in the `bin/` folder. Invoking them with no arguments will print out usage instructions. ##### Parallel executables To compile, invoke ``` shell $ make parallel ``` Three executables must be run sequentially: `[prefix]_par_Prepare`, `[prefix]_par_Run` and `[prefix_par_Wrapup`, in which `prefix` is `Heis_DSF`, `LienLin_DSF` or `LiebLin_DSF_General_State`. ## Documentation Documentation for the ABACUS codebase is automatically generated using Doxygen. To generate the documentation, invoke `make docs` (you will need to have Doxygen installed on your system). The configuration file is `ABACUS_Doxygen`. The HTML version is anchored at `docs/html/index.html`. The PDF version is located at `docs/ABACUS_[vn]_manual.pdf`. An outdated description of ABACUS can be found in J.-S. Caux, J. Math. Phys. 50, 095214 (2009), [doi:10.1063/1.3216474](https://doi.org/10.1063/1.3216474). ## Note on versions and branches Versions are labeled `ABACUS_[vn][subvn]`, where `vn` is a version number and `subvn` is a letter subversion label. Branch `master` sits on the latest version/subversion available. In the repo, development takes place in branches labeled `dev_from[vn][subvn]` where vn marks the version from which development takes place. Sub-branches for specific features are labeled `dev_from[vn]_[feature]`, where feature is a short descriptor. Completed and accepted features are merged into the dev branch, before this is ultimately merged into master and released as a new [sub]version. ## Warnings * The ODSLF part (for one-dimensional spinless fermions) is not functional: it is based on the old Young Tableaux ids, and must be upgraded to `State_Label`s. * The Richardson part is not implemented; what exists is old and long deprecated. ## Acknowledgements _(in historical order)_ __Antoine Klauser__ provided functions for computing neighbour-operator-product matrix elements in XXX: `ln_Szz_ME`, `ln_Szm_p_Smz_ME` and `ln_Smm_ME`. __MiƂosz Panfil__ contributed to code to help in the calculation of finite-temperature correlations of Lieb-Liniger. __Jacopo De Nardis__ contributed code for the `ln_g2_ME` function for Lieb-Liniger. __Teun Zwart__ has given much useful advice concerning C++ code organization. ## Version history Development of ABACUS was started by [J.-S. Caux](https://jscaux.org) around 2004 and has known an embarrassingly large number of versions. Some notes on the more recent versions can be found in file [ABACUS_version_history.md](ABACUS_version_history.md) in this directory.