Published November 29, 2021 | Version 2.0
Software Open

pomerol: An exact diagonalization code written in C++

  • 1. I. Institute of Theoretical Physics, University of Hamburg, Hamburg, Germany
  • 2. Microsoft Quantum, Microsoft Station Q, University of California, Santa Barbara, CA, USA
  • 3. University of Michigan, Ann Arbor, MI, USA
  • 4. Research Institute for Interdisciplinary Science, Okayama University, Okayama, Japan

Description

  • The Mozilla Public License Version 2.0 has been adopted.

  • Pomerol 2.0 requires a C++11 compatible compiler to build.

  • Dependence on Boost.MPI and Boost.Serialization has been dropped. Pomerol 2.0 still depends on a few header-only Boost libraries and an MPI-3.0 implementation that provides a working <mpi.h>.

  • Changed extension of all header files from .h to .hpp.

  • The input layer and diagonalization routines have been rewritten to benefit from facilities provided by libcommute. Hamiltonians to be solved are now specified as libcommute's expressions with arbitrary static types of indices carried by creation/annihilation operators.

  • Thanks to the use of libcommute's expressions, it is now possible to solve models, whose Hamiltonians involve bosonic degrees of freedom.

  • The Lattice class has been retired. The LatticePresets class has been turned into a namespace with preset functions returning their respective expressions of Hamiltonian terms. For the sake of backward compatibility, operators in the expressions returned by these functions carry the traditional (site label, orbital index, spin projection) index triplets.

  • The spin enumeration type is now declared in the LatticePresets namespace. The enumeration has also been extended with an extra undef value, which is meant to be used on bosonic creation/annihilation operators.

  • The POMEROL_COMPLEX_MATRIX_ELEMENTS CMake option has been removed. A proper matrix storage format is selected at runtime depending on the types of input expressions for Hamiltonians and operators of physical observables.

  • API of class IndexClassification has been made more generic (it is now templated on the operator index types to accommodate the flexibility of libcommute's expressions).

  • Class IndexHamiltonian has been removed.

  • Functionality of the Symmetrizer and StatesClassification classes has been redistributed between StatesClassification and a new class HilbertSpace. The notion of quantum numbers has been abandoned since partition of a Hilbert space into sectors is now performed by libcommute's space_partition algorithm.

  • Class FieldOperator has been generalized and renamed into MonomialOperator. It can now compute and store matrices of arbitrary monomial operators, i.e. operators that are products of creation/annihilation operators, possibly with a real or complex prefactor.

  • It is now possible to use EnsembleAverage and Susceptibility to compute averages/dynamical fluctuations of monomial operators instead of just quadratic operators.

  • Renamed EnsembleAverage::getResult() to EnsembleAverage::operator()().

  • The outdated ENABLE_SAVE_PLAINTEXT macro has been removed.

  • The pomerol/first_include.h.in header has been renamed into pomerol/Version.hpp.in.

  • API reference documentation and the tutorial have been updated and cleaned up.

  • Unit tests have been ported from Google Test to Catch2. The header file of Catch2 is bundled to the source code.

Notes

If you use this software, please cite it as below.

Files

aeantipov/pomerol-2.0.zip

Files (662.4 kB)

Name Size Download all
md5:3d3654f58793469e9a8d522e2c1417f2
662.4 kB Preview Download

Additional details

Related works