Changelog
All notable changes to this project will be documented in this file.
[1.0.0] - Unreleased
Better support for user-defined scalar types in
expression. In particular, it is now possible to use integer-like and rational-like numeric types, as requested by Dr. Cezary Śliwa. Possible incompatibility of a scalar type with a certain algebra generator (e.g. spin operators vs an integer scalar) is checked at runtime. This is achieved by storing the structure constants of the algebra in the tagged union typevar_number, which retains information about the category of the stored value (integer, rational or floating point). The compatibility is then checked in the trait methodscalar_traits<ScalarType>::make_const(var_number const& vn).Added optional support for boost::rational and GMP C++ types
mpz_class,mpq_class,mpf_classasScalarType.n_fermion_sector_viewandn_fermion_multisector_vieware now parameterized 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_rankingandtrie_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_typeeven 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_componentto 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::libcommuteinstead 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_1dand minor updates to the documentation.
[0.7.0] - 2021-10-09
Added an implementation of the
StateVectorconcept for some Eigen 3 types (vectors, vector segments, column-like matrix blocks and one-dimensionalEigen::Mapviews). The corresponding header file isloperator/state_vector_eigen3.hpp.New classes
n_fermion_sector_viewandn_fermion_multisector_viewthat 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
constexprintegerLIBCOMMUTE_MIN_USER_DEFINED_ALGEBRA_IDtomin_user_defined_algebra_idso that it does not appear to be a macro.In the 3-argument constructor of
basis_mapper, change the type of the last argumentNfrominttounsigned 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-tidyandcppcheckstatic 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-formatand a style based onLLVM.
[0.6.1] - 2021-03-30
New method
hilbert_space::index().