Changelog

All notable changes to this project will be documented in this file.

[0.8.0] - Unreleased

  • n_fermion_sector_view and n_fermion_multisector_view are now parametrized on the type of ranking algorithm used to map basis state indices from a full Hilbert space to a sector. Supported ranking algorithms are combination_ranking (selected by default), staggered_ranking and trie_ranking. All three algorithms are described in M. Wallerberger, K. Held, Phys. Rev. Research 4, 033238 (2022).

  • Reduced the maximum allowed number of bits in the binary representation of a basis state index (hilbert_space::max_n_bits) to 63. This way hilbert_space::dim() can return a valid value of type sv_index_type even when all 63 bits are used up.

  • Improved performance and stability of space_partition::merge_subspaces() by switching to a non-recursive variant of the algorithm.

  • Fixed a negative index bug in n_fermion_sector_view. Credits to Dr. Cezary Śliwa for providing the patch.

  • Whenever possible, use compiler intrinsics to speed up complex bit manipulation operations (popcount, tzcount, pdep, pext).

  • Change base type of spin_component to the 1-byte wide std::uint8_t.

  • New CMake option CPPCHECK_EXTRA_FLAGS. It can be used to pass additional command line flags to cppcheck.

[0.7.2] - 2022-11-12

  • 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.

[0.7.1] - 2021-12-17

  • 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.

[0.7.0] - 2021-10-09

  • 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.

[0.6.1] - 2021-03-30

  • New method hilbert_space::index().