libcommute

A quantum operator algebra domain-specific language and exact diagonalization toolkit for C++11/14/17

MPL-2.0 License

Stars
21
libcommute - Release v0.7.2 Latest Release

Published by krivenko almost 2 years ago

  • Export namespaced CMake target libcommute::libcommute instead of plain libcommute.
  • Install CMake configuration files into ${CMAKE_INSTALL_PREFIX}/lib/cmake/libcommute, which is the recommended location.
  • Upgraded bundled Catch2 to version 2.13.9 (this fixes issue #2 a.k.a. catchorg/Catch2#2178).
  • Fixed compilation with clang/libc++ 15 (issue #5).
  • Added project citation information.
libcommute - Release v0.7.1

Published by krivenko almost 3 years ago

  • New methods space_partition::subspace_basis() and space_partition::subspace_bases().
  • New methods sparse_state_vector::prune() (two overloads).
  • New example hubbard_holstein_1d and minor updates to the documentation.
libcommute - Release v0.7.0

Published by krivenko about 3 years ago

  • Added an implementation of the StateVector concept for some Eigen 3 types (vectors, vector segments,
    column-like matrix blocks and one-dimensional Eigen::Map views). The corresponding header file is loperator/state_vector_eigen3.hpp.
  • New classes n_fermion_sector_view and n_fermion_multisector_view that implement N-fermion (multi)sector views of a state vector. The classes are supplemented with free utility functions make_nf(m)s_view(), make_const_nf(m)s_view(), n_fermion_(multi)sector_size() and n_fermion_(multi)sector_basis_states().
  • New member typedef hilbert_space::index_types.
  • New method hilbert_space::has_algebra().
  • New method space_partition::find_connections().
  • Renamed the constexpr integer LIBCOMMUTE_MIN_USER_DEFINED_ALGEBRA_ID to min_user_defined_algebra_id so that it does not appear to be a macro.
  • In the 3-argument constructor of basis_mapper, change the type of the last argument N from int to unsigned int.
  • Removed methods basis_mapper::make_(const_)view_no_ref(). basis_mapper::make_(const_)view() will now return a non-reference view when supplied with a non lvalue-reference argument.
  • New CMake option STATIC_ANALYSIS. When enabled, the clang-tidy and cppcheck static analysis tools will be run on the C++ sources of unit tests and examples as part of build process.
  • Minor bugfixes in unit tests and improvements in coding style.
  • Reformatted C++ sources using clang-format and a style based on LLVM.
libcommute - Release v0.6.1

Published by krivenko over 3 years ago

Added a new method, hilbert_space::index().

libcommute - Release v0.6

Published by krivenko over 3 years ago

Minor corrections and additions to API required for pycommute.

libcommute - Release v0.5

Published by krivenko about 4 years ago

This is the first feature-complete, fully documented release.

libcommute is a C++11/14/17 template library without external dependencies. It is made of two major parts.

  • A Domain-Specific Language (DSL) designed to easily construct and manipulate polynomial expressions with quantum-mechanical operators, especially those used in the theory of many interacting fermions, bosons and spins. The goal here is to make expressions written in C++ code closely resemble the standard mathematical notation.

  • A fast representation of the quantum-mechanical operators that enables their action on finite-dimensional state vectors. This feature provides a basis for writing highly performant Exact Diagonalization (ED) codes without loss of flexibility.

libcommute is designed with extensibility in mind and can be easily adapted to work with new operator algebras, numeric types and matrix/vector algebra libraries (Eigen, Armadillo, etc).

Learn more about libcommute's capabilities at https://krivenko.github.io/libcommute/.