Changelog
All notable changes to this project will be documented in this file.
[0.8.0] - Unreleased
n_fermion_sector_view
andn_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 arecombination_ranking
(selected by default),staggered_ranking
andtrie_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 wayhilbert_space::dim()
can return a valid value of typesv_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 widestd::uint8_t
.New CMake option
CPPCHECK_EXTRA_FLAGS
. It can be used to pass additional command line flags tocppcheck
.
[0.7.2] - 2022-11-12
Export namespaced CMake target
libcommute::libcommute
instead of plainlibcommute
.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()
andspace_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-dimensionalEigen::Map
views). The corresponding header file isloperator/state_vector_eigen3.hpp
.New classes
n_fermion_sector_view
andn_fermion_multisector_view
that implement N-fermion (multi)sector views of a state vector. The classes are supplemented with free utility functionsmake_nf(m)s_view()
,make_const_nf(m)s_view()
,n_fermion_(multi)sector_size()
andn_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
integerLIBCOMMUTE_MIN_USER_DEFINED_ALGEBRA_ID
tomin_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 argumentN
fromint
tounsigned 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, theclang-tidy
andcppcheck
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 onLLVM
.
[0.6.1] - 2021-03-30
New method
hilbert_space::index()
.