Go to file
Jiri Pittner 0ff55b66bb working on tensor : stream I/O 2024-04-10 18:28:50 +02:00
.gitignore included kernel ridge regression module 2024-02-14 15:33:25 +01:00
ChangeLog Version 1.0 migration to git 2021-04-21 17:28:25 +02:00
LICENSE added some aux files previously not migrated 2021-04-21 17:44:46 +02:00
Makefile.am Tensor class initial commit 2024-03-21 23:24:21 +01:00
README updated readme 2021-04-22 11:23:23 +02:00
acinclude.m4 Version 1.0 migration to git 2021-04-21 17:28:25 +02:00
aminclude.am Version 1.0 migration to git 2021-04-21 17:28:25 +02:00
auxstorage.h *** empty log message *** 2009-11-12 21:01:19 +00:00
bisection.h *** empty log message *** 2009-11-12 21:01:19 +00:00
bitvector.cc bitvector - some bugfixes and further implementations 2024-01-01 21:26:35 +01:00
bitvector.h finishing bitvector 2024-01-02 14:05:28 +01:00
configure.ac release 1.3 2023-09-15 14:59:44 +02:00
conjgrad.h *** empty log message *** 2009-11-12 21:01:19 +00:00
contfrac.cc finished ContFrac implementation 2022-02-22 15:46:07 +01:00
contfrac.h ContFrac constructor from list 2022-06-09 20:55:10 +02:00
csrmat.cc *** empty log message *** 2021-04-21 13:04:37 +00:00
csrmat.h *** empty log message *** 2011-01-18 14:37:05 +00:00
cuda.h *** empty log message *** 2010-06-18 09:59:22 +00:00
cuda_la.cc std::complex in cuda_la.cc and noncblas.cc 2023-04-28 15:49:18 +02:00
cuda_la.h cuda 2010-09-08 16:27:58 +00:00
davidson.h added warnings in davidson 2022-07-08 17:04:28 +02:00
diis.h *** empty log message *** 2017-11-01 15:20:58 +00:00
doxygen.cfg added some aux files previously not migrated 2021-04-21 17:44:46 +02:00
efector.cc *** empty log message *** 2010-01-17 20:28:38 +00:00
footer.html added some aux files previously not migrated 2021-04-21 17:44:46 +02:00
fortran.h *** empty log message *** 2013-11-04 14:56:39 +00:00
fourindex.cc *** empty log message *** 2019-11-12 23:52:44 +00:00
fourindex.h added symmetry declaration for complex 2-el integrals to fourindex.h 2021-09-30 14:55:26 +02:00
get_git_version improved get_git_version 2023-05-14 21:00:45 +02:00
gmres.h *** empty log message *** 2009-11-12 21:01:19 +00:00
graph.cc tiny change in graph 2023-07-30 13:44:59 +02:00
graph.h tiny change in graph 2023-07-30 13:44:59 +02:00
la.h Tensor class initial commit 2024-03-21 23:24:21 +01:00
la_random.cc implementing some new functionality to bitvecotr 2023-12-27 23:24:13 +01:00
la_random.h implementing some new functionality to bitvecotr 2023-12-27 23:24:13 +01:00
la_traits.h abs2() in la_traits.h 2024-01-15 15:33:57 +01:00
laerror.cc bitvector - some bugfixes and further implementations 2024-01-01 21:26:35 +01:00
laerror.h bitvector - some bugfixes and further implementations 2024-01-01 21:26:35 +01:00
mat.cc bugfix in NRMat:: rsum() and csum() 2024-02-08 15:01:06 +01:00
mat.h copyonwrite() on nested LA types will recursively call element copyonwrites even if the top type had count=1 2024-04-03 22:12:08 +02:00
matexp.h matrix exp() normtype->elementtype for complex exp 2022-08-10 16:05:14 +02:00
miscfunc.cc inverse_simplicial fix 2024-04-08 16:02:46 +02:00
miscfunc.h inverse simplicial number function 2024-04-08 15:41:37 +02:00
noncblas.cc scnrm2 in noncblas.cc 2023-04-28 16:47:12 +02:00
noncblas.h *** empty log message *** 2019-11-13 22:22:25 +00:00
nonclass.cc ipiv diagnostics also for zgesv 2023-05-15 16:53:25 +02:00
nonclass.h template for general power, power of NRPerm and CyclePerm 2023-08-08 16:39:15 +02:00
numbers.cc finishing bitvector 2024-01-02 14:05:28 +01:00
numbers.h finishing bitvector 2024-01-02 14:05:28 +01:00
permutation.cc created miscfunc.h and .cc to separate some miscellaneous and special functions 2024-03-20 17:25:21 +01:00
permutation.h created miscfunc.h and .cc to separate some miscellaneous and special functions 2024-03-20 17:25:21 +01:00
polynomial.cc created miscfunc.h and .cc to separate some miscellaneous and special functions 2024-03-20 17:25:21 +01:00
polynomial.h polynomial irreducibility test in GF2 2024-01-01 10:58:30 +01:00
qsort.h network sorting for short arrays 2024-04-03 16:17:32 +02:00
quaternion.cc switchable random number generators 2023-11-17 21:57:28 +01:00
quaternion.h template for general power, power of NRPerm and CyclePerm 2023-08-08 16:39:15 +02:00
reg.cc included kernel ridge regression module 2024-02-14 15:33:25 +01:00
reg.h included kernel ridge regression module 2024-02-14 15:33:25 +01:00
regsurf.cc bugfix in regsurf 2024-02-21 15:04:34 +01:00
regsurf.h bugfix in regsurf 2024-02-21 15:04:34 +01:00
simple.cc simple.h and simple.cc for algorithms independent on external libraries 2021-11-21 22:22:01 +01:00
simple.h simple fit weight scaling 2021-11-22 23:06:22 +01:00
smat.cc conversion constructor from vec3 and mat3 to nrvec and nrmat 2023-11-18 15:15:32 +01:00
smat.h copyonwrite() on nested LA types will recursively call element copyonwrites even if the top type had count=1 2024-04-03 22:12:08 +02:00
sparsemat.cc copyonwrite() on nested LA types will recursively call element copyonwrites even if the top type had count=1 2024-04-03 22:12:08 +02:00
sparsemat.h copyonwrite() on nested LA types will recursively call element copyonwrites even if the top type had count=1 2024-04-03 22:12:08 +02:00
sparsemat_traits.h *** empty log message *** 2008-02-26 13:55:23 +00:00
sparsesmat.cc *** empty log message *** 2021-04-21 13:04:37 +00:00
sparsesmat.h *** empty log message *** 2011-01-18 14:37:05 +00:00
strassen.cc *** empty log message *** 2009-11-12 21:01:19 +00:00
t.cc working on tensor : stream I/O 2024-04-10 18:28:50 +02:00
t2.cc removed dependence on libtraceback 2021-09-22 18:12:40 +02:00
tX.cc tX.cc 2023-04-11 18:35:07 +02:00
tensor.cc working on tensor : stream I/O 2024-04-10 18:28:50 +02:00
tensor.h working on tensor : stream I/O 2024-04-10 18:28:50 +02:00
test.cc *** empty log message *** 2009-11-13 14:33:33 +00:00
test_reg.cc included kernel ridge regression module 2024-02-14 15:33:25 +01:00
test_regsurf.cc included kernel ridge regression module 2024-02-14 15:33:25 +01:00
vec.cc conversion constructor from vec3 and mat3 to nrvec and nrmat 2023-11-18 15:15:32 +01:00
vec.h copyonwrite() on nested LA types will recursively call element copyonwrites even if the top type had count=1 2024-04-03 22:12:08 +02:00
vecmat3.cc cosmetic change in vecmat3.cc 2024-01-26 23:17:26 +01:00
vecmat3.h avoid warnings about DBL_EPSILON redefinition in vecmat3 2024-02-14 15:42:58 +01:00
version.h added git version string access in the code 2023-05-14 16:58:55 +02:00

README

    LA: linear algebra C++ interface library

    Copyright (C) 2008- Jiri Pittner <jiri.pittner@jh-inst.cas.cz> or <jiri@pittnerovi.com>
    complex versions written by Roman Curik <roman.curik@jh-inst.cas.cz>
    cuda interface contributed by Miroslav Sulc <miroslav.sulc@jh-inst.cas.cz>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
--------------------------------------------------------------------------------------------------
This software provides a C++ vector and matrix class with an interface
to BLAS and ATLAS linear algebra libraries and a few additional features.
Templates are employed in order to achieve generic applicability of the algorithms.
In particular, iterative methods suitable for sparse matrices (Davidson diagonalization, linear solvers, matrix exponential)
can be applied to your custom matrix class, which does not need to contain any explicit
storage of the matrix (only matrix times vector operation has to be provided).
(In quantum chemistry, a particular application of this technique is called direct-CI.)
The library implements reference counting to avoid overhead when copying matrices and passing them by value;
on the other hand it does NOT optimize matrix expressions, you should yourself call gemv, axpy etc. instead of using operator* etc. where appropriate.

vec.h, vec.cc : vector class
mat.h, mat.cc : general matrix class
smat.h, smat.cc: symmetric matrix class
vecmat3.h, vecmat3.cc : simplified class for 3-dimensional entities
quaternion.h, quaternion.cc : quaternions and 3-dim rotations
sparsemat.h sparsemat.cc: sparse matrix class
sparsesmat.h sparsesmat.cc: sparse symmetric matrix class
csrmat.h, csrmat.cc: unfinished work on compressed row format sparse matrices
nonclass.h nonclass.cc: some methods not belonging to a class - linear solver, diagonalization
conjgrad.h: conjugate gradient sparse linear solver
gmres.h: generalized minimal residual sparse linear solver
matexp.h: matrix exponential (suitable both for dense and sparse matrices - cf. exptimes routine)
qsort.h: generic quick-sort template
bitvector.h: bit vector class
bisection.h: generic bisection search
diis.h: DIIS convergence acceleration
davidson.h: Davidson (modified Lanczos) sparse matrix diagonalization
fourindex.h, fourindex.cc: class for four-index quantities, in particular two-electron integrals in quantum chemistry, allows transparent access to externally stored integrals
auxstorage.h: class facilitating simple file IO for the vectors and matrices
permutation.h, qsort.h : permutations and sorting


INSTALLATION:
0. autoreconf --install if ./configure does not exist
1. ./configure with DEBUG, OPTIMIZE and MATPTR options, export CXXFLAGS=-I<path> and export LDFLAGS=-L<path> (and possibly added -latlas -lcblas) 
   pointing to your preferred BLAS/LAPACK, your preferred --prefix and --enable/--disable options for optimization and debugging
2. make
3. make check (to see that the programs t and test compile and link without errors)
4. make install

USING:
1. #include "la.h"
2. using namespace LA;
3. look at test.cc and t.cc for examples of use
4. remember to always call .copyonwrite() before you start writing to individual matrix elements explicitly
   (when modifying a matrix via provided methods or operators other than () and [], copy on write is performed transparently)
5. Note that the library does not attempt to do any optimizations of the evaluation of matrix expressions (by template metaprogramming and postponed evaluation techniques), so instead of inefficient "z=A*2*x + y*1.5 " call gemv and axpy methods. On the other hand it makes shallow copies, so you can pass matrix by value to a subroutine and you are allowed to write x=A*x, as a temporary will be created.
6. you may compile it with DEBUG defined to perform index range and other checks

NOTE: 
We named the classes NRMat, NRVec etc. since we started to use them together with the Numerical Recipes library. They can be used with Numerical Recipes in C++, however, they are completely independent of this library.

This is a beta release. The library has already been in use, but not every function/method has been tested.
There is no documentation except the source itself, since I originaly did not intend to distribute it.
I will appreciate your bugfixes, exhancements, suggestions etc.

Jiri Pittner