diff main/sparse/README @ 0:6b33357c7561 octave-forge

Initial revision
author pkienzle
date Wed, 10 Oct 2001 19:54:49 +0000
parents
children e34650e2b2b4
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main/sparse/README	Wed Oct 10 19:54:49 2001 +0000
@@ -0,0 +1,202 @@
+This is a sparse matrix toolkit for octave based
+on the SuperLU package.
+
+ID: $Id$
+
+AUTHOR:  Andy Adler <adler@ncf.ca>
+
+INSTRUCTIONS
+
+0. Check that you have the following files:
+  a Makefile
+  b make_sparse.cc
+  c make_sparse.h
+  d sp_test.m
+  e fem_test.m
+  f superlu2.0patch.diff
+  
+0a. This is tested to work with octave-2.1.32
+    It works with >2.1.30 if you apply the mkoctfile patch
+    at www.octave.org/mailing-lists/octave-maintainers/2000/175
+
+0b. If you already have a SuperLU subdirectory with
+    SuperLU/SRC and SuperLU/CBLAS then ignore 
+    steps 1-3
+
+1. Download SuperLU from one of the following sites
+                         http://www.netlib.org/scalapack/prototype
+                         ftp://ftp.cs.berkeley/pub/src/lapack/SuperLU
+                         http://www.nersc.gov/~xiaoye/SuperLU/
+
+2. Unpack SuperLU into the directory you'll be building the
+    octave sparse functions from
+
+3. Apply the patch
+          patch -p0 < superlu2.0patch.diff
+
+4. Build the octave sparse functions
+          make    in the octave sparse functions directory
+          NOTE: do not run the SuperLU makefiles - 
+               it doesn't build the right objects into the library
+
+This makefile assumes that the SuperLU package has been unpacked
+ in this directory. It compiles files directly from their locations
+ in the SuperLU source. You do not need to use SuperLU makefiles.
+
+SuperLU is available from http://www.netlib.org/scalapack/prototype
+                          ftp://ftp.cs.berkeley/pub/src/lapack/SuperLU
+
+
+AUTHOR:  Andy Adler <en254@ncf.ca>
+
+COPYRIGHT:
+Copyright (C) 1998-00 Andy Adler
+
+   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 2 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, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+
+SUPERLU COPYRIGHT:
+The following copyright is taken from any of the
+files in the SuperLU/SRC directory
+
+/*
+ * -- SuperLU routine (version 2.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * November 15, 1997
+ *
+ */
+/*
+  Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
+
+  THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+  EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+
+  Permission is hereby granted to use or copy this program for any
+  purpose, provided the above notices are retained on all copies.
+  Permission to modify the code and to distribute modified code is
+  granted, provided the above notices are retained, and a notice that
+  the code was modified is included with the above copyright notice.
+*/ 
+
+USAGE:
+   sparse functions are provided for
+
+   sparse -> create sparse matrices
+   full   -> create full matrices from sparse
+   splu   -> spare lu decomposition
+   spfind -> find elements of sparse matrices
+   nnz    -> number of non zero elements
+
+   Unitary operators
+
+   S'    S.'   -S    ~S
+
+   Binary operators
+   ==  +   -   *   .*   \ 
+
+   Selection
+   A( fortran_vec ) ,   A( idx1, idx2 )
+
+
+MISSING FEATURES (TODO FILE)
+(This is more or less in the order of importance, and
+ probability of accomplishment)
+
+1.  Sparse solution: there is no code for
+    sparse(index1,index2) = submatrix
+    [ sparse , sparse ]
+
+2.  More efficient code for:
+    sparse \ sparse
+    spinv
+    splu
+
+3.  More "sophisticated" matrix operations on sparse
+    eigenvectors
+    chol
+    SVD
+    etc.
+
+KNOWN AND PREDICTED BUGS AND FEATURES:
+
+1.  It probably leaks memory. I'll try to test this more carefully
+    after I stop adding features.
+
+2.  It does not support empty matrices properly.
+    It does not support completely sparse (all zero) matricies either.
+
+3.  The attempt here is to provide compatability to the main MATLAB
+    sparse matrix entry points. The SuperLU provides slightly different
+    fuctionality to MATLAB, and, therefore this toolkit provides
+    different features.
+
+    For example, the column permutation algorithm (and approach) is
+    different.
+
+    Additionally, I don't intend to provide replacements for the
+    MATLAB sparse functions I consider frills. eg sprand.m, treeplot.m
+
+4.  SuperLU uses the int data type as indices. Since ints are normally
+    4 bytes (at least on i386 machines), this is not a great problem.
+    There may be still a few places where an int is used to refer
+    to i+j*m, which means that sparse operations on matrices where
+    m*n > maxint/2 may be buggy. I've tried to fix this, but there
+    may be some left.  Email me if you find any.
+
+5.  Sparse solve is a little faster than the MATLAB equivalent, except
+    it seems not to choose the factoring as well. Using a perm_c spec of
+    2 for symetric matrices will get speed improvements of ~ 1.5.
+    (For the FEM problems I use it for)
+
+TODO:
+
+add complex test cases 
+
+add tests for failures (matrix size mismatch)
+
+go though sparse_ops.h and support all zero matrices
+
+test code for all zero and empty matrices
+
+more efficient code for sparse \ sparse
+  - fix casting spagetti
+
+support sparse \ sparse for complex
+
+move code to c++ operators - so we can use sparse from liboctave
+
+fix error for sparse(1)\1
+   DEBUG:sparse - matrix_to_sparse
+   DEBUG:sparse( SuperMatrix A)
+   DEBUG:sparse - numeric_conversion_function
+   DEBUG:sparse - default_numeric_conversion_function
+   DEBUG:sparse - matrix_value
+   DEBUG:sparse - sparse_to_full
+   error: operator \: nonconformant arguments (op1 is 1x1, op2 is 1x1)
+
+   #include <octave/oct.h>
+   defun_dld (jnk, args, , "jnk" ) {
+     matrix x(1,1); x(0,0)= 1; octave_value o1(x);
+     octave_value o2(2.0);
+     octave_value_list retval; retval(0)= o1/(o2);
+     return retval;
+   }
+
+complex sparse constructor will create real sparse if matrix
+is actually real
+
+make debug constructor which sanity checks matrices
+ - option which checks if no nonzero elems isist
+
+complex sparse functions for splu - spinv