
   LAPACK++ v. 2.x
   http://www.sourceforge.net/projects/lapackpp
   Download page: http://sourceforge.net/project/showfiles.php?group_id=99696

LAPACK++ is a library for high performance linear algebra
computations.  This version includes support for solving linear
systems using LU, Cholesky, QR matrix factorizations, and symmetric
eigenvalue problems.


Platforms
=========

- Linux/Unix gcc2.95.x, gcc3.x, gcc4.x
- Windows 9x/NT/2000 under MinGW and gcc3.x (see file README.W32)
- Windows 9x/NT/2000 under MSVC Visual Studio .NET; project file is included
- Mac OS X (note: this platform required to set 
  FLIBS="-L/sw/lib -lfrtbegin -lg2c -lSystem" before 
  the ./configure completed successfully.)

Some similar functionality as in LAPACK++ is offered by the
library IT++, see http://itpp.sourceforge.net/, but one important
high-performance feature missing in IT++ is the ability to create
"submatrix views" and "shallow copies" of matrices, i.e. pass
submatrices by reference instead of by value.


Requirements
============

This package requires the packages "blas", "lapack" (without the
"++"), and a Fortran compiler. On most Linuxes these are available
as pre-compiled binaries under the name "blas" and "lapack". For
SuSE 10.x, the Fortran compiler is available as package
"gfortran".


Compile and Install
===================

Windows: On Windows, an older .exe setup package with the pre-compiled
DLL is provided. Watch out: This DLL works only with the gcc
compiler, not with the Microsoft Visual Studio C++ (MSVC)
compiler! 

For compiling on Windows with the Microsoft Visual Studio C++
(MSVC) compiler:

 1. Install the older .exe setup package because it contains the
 auxiliary libraries LIBBLAS32.LIB and others. (Alternatively: Get it
 from the SVN source in the contrib/ sub-folder.) The linker library
 LIBBLAS32.LIB and LIBLAPACK32.Lib is installed into
 c:\Program-Files\Lapackpp\lib\ whereas the corresponding
 LIBBLAS32.DLL and LIBLAPACK32.DLL are installed into your Windows
 system directory, e.g. c:\WINNT. These files are unchanged since
 years, so you can safely use these four files from an earlier
 release of lapackpp to compile a newer release from source code.

 2. Unpack the tar.gz package with the source code, and

 3. compile the source code using the provided
 lapackpp.vcproj MSVC project file, which will also
 compile two small test programs. You might have to adapt the
 linker input directories (Project Properties -> Linker -> Input)
 so that the LIBBLAS32.LIB linker library can be found in
 c:\Program-Files\Lapackpp\lib\.

 4. After successfully compiling the DLL, you need to copy the
 LAPACKPP.DLL file to whatever location you consider
 appropriate. This can either be your c:\WINNT directory, or the
 working directory of your actual application that should use
 lapackpp.

Note: This has been tested only with MSVC 7.1. In older MSVC
versions, lapackpp probably doesn't compile anymore. This might be
due to problems with the data types for complex-valued matrices,
and in that case you can try to compile the real-valued matrices
only by using the included project file lapackpp-onlyreal.vcproj.

For compiling on windows with gcc/mingw32, see README.WIN32.

Linux/Unix: If you retrieved this package from SVN, you first need
to run
  ./autogen.sh
and continue with compilation after that.

For compilation, run the following commands:

  ./configure --prefix=/your/install/path
  make
  make install

Type "./configure --help" to see more configuration options. After
successful compilation, you can run various test programs by the
command "make check".

The setup package was created with the Inno Setup Compiler
http://www.jrsoftware.org/isdl.php . To create the .exe setup
package by yourself, you need to run "make setup", which will run
the InnoCompiler on the provided setup file lapackpp.iss.


Documentation
=============

The documentation is in the header files. The comments in the
header files are used by the doxygen tool for the auto-generated
HTML documentation. An online copy of this generated HTML
documentation is at http://www.sourceforge.net/projects/lapackpp

Linux/Unix/mingw32: To have the HTML documentation of the API
generated by doxygen in the directory api-doc/html, run

  make srcdoc

There is some old, outdated information about the original
LAPACK++-1.1 in the LAPACK++ User's Manual and Class Reference
Manual, all available from http://www.netlib.org/ or on
http://math.nist.gov/lapack++/ , but please keep in mind that this
is old and outdated!


Library Usage
=============

The resulting shared library is called "liblapackpp.so" or, on
Windows, "liblapackpp32.dll". 

To use it in your program, you need to specify the location of the
header files by the compiler argument -I (for gcc), the location
of the shared library by the compiler argument -L and the library
itself by -llapackpp . All of these arguments can be obtained from
the pkg-config helper program, see "man pkg-config".  A linker
command might look like this:

  gcc `pkg-config lapackpp --libs` foo.o

If your application uses autoconf/automake, these compiler
arguments can alternatively be obtained from the ACX_LAPACKPP
macro from macros/acx_lapackpp.m4. A linker command might look
like this:

  gcc -L/usr/local/lib -llapackpp foo.o

To switch on the support for complex-valued matrices, you need to
define the macro LA_COMPLEX_SUPPORT in the source code of your
application.


Contact
=======

The developers can be reached by sending email to the mailing list
lapackpp-devel@lists.sourceforge.net , also listed on
http://sourceforge.net/mail/?group_id=99696


Related projects
================

 * http://www.cvmlib.com/ CVM Class Library with a long history of
   improvements

 * http://sourceforge.net/projects/lpp/ Recently started; only
   low-level classes


LAPACK++ v1.1 vs. v2.x and higher
=================================

The original LAPACK++ (up to v1.1a) has been written by R. Pozo et
al. at the University of Tennessee, Knoxvilee, TN., and Oak Ridge
National Laboratory, Oak Ridge, TN, and is available on
http://math.nist.gov/lapack++/

However, they abandoned LAPACK in the year 2000 and stated: "Lapack++
is no longer actively supported. The successor to this project is that
Template Numerical Toolkit (TNT), see http://math.nist.gov/tnt for
details." Unfortunately, the project TNT never really took off.

Therefore this fork from the original LAPACK++ has been started. There
are a whole number of changes now in here. Most notably, this local
copy has complex matrices enabled again by adding a custom copy of
stdc++'s complex type (see include/lacomplex.h and include/lacomplex).

Along these lines, wrapper functions for more and more LAPACK and BLAS
routines have been added. Also, this includes fixes in various wrong
default arguments.


Features
========

LAPACK++ v. 2.x supports various matrix classes for vectors,
non-symmetric matrices, symmetric positive definite (SPD) matrices,
symmetric matrices, banded, triangular, and tridiagonal matrices;
however, Version 1.1 does not include all of the capabilities of
original f77 LAPACK.  Emphasis is given to routines for solving linear
systems consisting of non-symmetric matrices, symmetric positive
definite systems, and solving linear least- square systems.

2004-08-04, Christian Stimming <stimming@tuhh.de>
