A quantum operator algebra domain-specific language and exact diagonalization toolkit for C++11/14/17
MPL-2.0 License
libcommute::libcommute
instead of plain libcommute
.${CMAKE_INSTALL_PREFIX}/lib/cmake/libcommute
, which is the recommended location.Published by krivenko almost 3 years ago
space_partition::subspace_basis()
and space_partition::subspace_bases()
.sparse_state_vector::prune()
(two overloads).hubbard_holstein_1d
and minor updates to the documentation.Published by krivenko about 3 years ago
StateVector
concept for some Eigen 3 types (vectors, vector segments,Eigen::Map
views). The corresponding header file is loperator/state_vector_eigen3.hpp
.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()
.hilbert_space::index_types
.hilbert_space::has_algebra()
.space_partition::find_connections()
.constexpr
integer LIBCOMMUTE_MIN_USER_DEFINED_ALGEBRA_ID
to min_user_defined_algebra_id
so that it does not appear to be a macro.basis_mapper
, change the type of the last argument N
from int
to unsigned int
.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.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.clang-format
and a style based on LLVM
.Published by krivenko over 3 years ago
Added a new method, hilbert_space::index()
.
Published by krivenko over 3 years ago
Minor corrections and additions to API required for pycommute.
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/.