All notable changes to this project will be documented in this file.
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
.
- 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.
- 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.
- 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
.
- New method
hilbert_space::index()
.