diff -c -r sparselib_1_5d/README sparselib_1_5d-new/README *** sparselib_1_5d/README Fri Feb 23 11:39:09 2001 --- sparselib_1_5d-new/README Tue Jun 15 10:52:24 2004 *************** *** 1,5 **** ! SparseLib++ v. 1.5d: Numerical Sparse Matrix Classes in C++ SparseLib++ is a C++ class library for efficient sparse matrix computations across various computational platforms. The software package consists of --- 1,5 ---- ! SparseLib++ v. 1.5e: Numerical Sparse Matrix Classes in C++ SparseLib++ is a C++ class library for efficient sparse matrix computations across various computational platforms. The software package consists of *************** *** 12,17 **** --- 12,30 ---- used in iterative solvers for linear systems of equations. The focus is on computational support for iterative methods, but the sparse matrix objects presented here can be used on their own. + + .1) Note for release 'e'. + + This is an unofficial release. I made changes to get the library working with + g++ 3.3. I also repaired apparent problems in the compressed-column sparse + matrix class, which was preventing successful use for me. + + Contact me if there are any problems stemming from these two changes. + + Aaron Krowne + akrowne@emory.edu + + 2004-06-15 0) What's new in v. 1.5 ----------------------- diff -c -r sparselib_1_5d/makefile.def sparselib_1_5d-new/makefile.def *** sparselib_1_5d/makefile.def Thu Apr 25 11:49:44 1996 --- sparselib_1_5d-new/makefile.def Fri Mar 19 11:09:32 2004 *************** *** 49,89 **** # IBM xlC v. 1.1 # ! CCC = xlC ! CC = xlc ! CCCFLAGS = -+ -O -DCOMPLEX=complex ! LDFLAGS = $(SPARSELIB_DIR)/lib/libsparse.a $(SPARSELIB_DIR)/lib/libspblas.a \ ! $(SPARSELIB_DIR)/lib/libmv.a -lm -lcomplex # Sun C++ 4.0.1 # ! CCC = CC ! CC = acc ! CCCFLAGS = -O +w -DMV_VECTOR_BOUNDS_CHECK -g ! CCCFLAGS = +w -DMV_VECTOR_BOUNDS_CHECK -g -DCOMPLEX_OSTREAM -DCOMPLEX=complex ! LDFLAGS = $(SPARSELIB_DIR)/lib/libsparse.a $(SPARSELIB_DIR)/lib/libspblas.a \ ! $(SPARSELIB_DIR)/lib/libmv.a -lm -lcomplex # g++ v. 2.6.3 # ! CCC = g++ ! CC = gcc ! CCCFLAGS = -Wall -DMV_VECTOR_BOUNDS_CHECK -g -DCOMPLEX=complex ! LDFLAGS = $(SPARSELIB_DIR)/lib/libsparse.a $(SPARSELIB_DIR)/lib/libspblas.a \ $(SPARSELIB_DIR)/lib/libmv.a -lm # g++ v. 2.7.0 # CCC = g++ CC = gcc ! CCCFLAGS = -DMV_VECTOR_BOUNDS_CHECK -g '-DCOMPLEX=complex' LDFLAGS = $(SPARSELIB_DIR)/lib/libsparse.a $(SPARSELIB_DIR)/lib/libspblas.a \ $(SPARSELIB_DIR)/lib/libmv.a -lm - # ranlib available on this system? 't' or 'f' HASRANLIB = t --- 49,97 ---- # IBM xlC v. 1.1 # ! #CCC = xlC ! #CC = xlc ! #CCCFLAGS = -+ -O -DCOMPLEX=complex ! #LDFLAGS = $(SPARSELIB_DIR)/lib/libsparse.a $(SPARSELIB_DIR)/lib/libspblas.a \ ! # $(SPARSELIB_DIR)/lib/libmv.a -lm -lcomplex # Sun C++ 4.0.1 # ! #CCC = CC ! #CC = acc ! #CCCFLAGS = -O +w -DMV_VECTOR_BOUNDS_CHECK -g ! #CCCFLAGS = +w -DMV_VECTOR_BOUNDS_CHECK -g -DCOMPLEX_OSTREAM -DCOMPLEX=complex ! #LDFLAGS = $(SPARSELIB_DIR)/lib/libsparse.a $(SPARSELIB_DIR)/lib/libspblas.a \ ! # $(SPARSELIB_DIR)/lib/libmv.a -lm -lcomplex # g++ v. 2.6.3 # ! #CCC = g++ ! #CC = gcc ! #CCCFLAGS = -Wall -DMV_VECTOR_BOUNDS_CHECK -g -DCOMPLEX=complex ! #LDFLAGS = $(SPARSELIB_DIR)/lib/libsparse.a $(SPARSELIB_DIR)/lib/libspblas.a \ $(SPARSELIB_DIR)/lib/libmv.a -lm # g++ v. 2.7.0 # + #CCC = g++ + #CC = gcc + #CCCFLAGS = -DMV_VECTOR_BOUNDS_CHECK -g '-DCOMPLEX=complex' + #LDFLAGS = $(SPARSELIB_DIR)/lib/libsparse.a $(SPARSELIB_DIR)/lib/libspblas.a \ + # $(SPARSELIB_DIR)/lib/libmv.a -lm + # + + # g++ v. 3.3.x + # CCC = g++ CC = gcc ! CCCFLAGS = -DMV_VECTOR_BOUNDS_CHECK -g '-DCOMPLEX=complex' -Wno-deprecated LDFLAGS = $(SPARSELIB_DIR)/lib/libsparse.a $(SPARSELIB_DIR)/lib/libspblas.a \ $(SPARSELIB_DIR)/lib/libmv.a -lm # ranlib available on this system? 't' or 'f' HASRANLIB = t diff -c -r sparselib_1_5d/spblas/spmm.cc sparselib_1_5d-new/spblas/spmm.cc *** sparselib_1_5d/spblas/spmm.cc Thu Apr 25 11:49:54 1996 --- sparselib_1_5d-new/spblas/spmm.cc Fri Mar 12 15:28:50 2004 *************** *** 42,48 **** #include #include "spblas.h" ! #define _SpMatVal(_a,_lda,_row,_col) ((_a)[(_lda)*(_col)+(_row)]) static void CoordMatVec_float(int m, int n, int k, const float &alpha, const float *val, const int *indx, const int *jndx, --- 42,48 ---- #include #include "spblas.h" ! #define _SpMatVal(_a,_lda,_row,_col) ((_a)[(_lda)*(_row)+(_col)]) static void CoordMatVec_float(int m, int n, int k, const float &alpha, const float *val, const int *indx, const int *jndx, *************** *** 129,148 **** ; // Frob these so we can use one-based indexing externally ! c -= 1; val -= pntr[0]; indx -= pntr[0]; ! if (alpha == 1.0) { if (n == 1) for (i = 0; i < k; i++) ! for (j = pntr[i]; j < pntr[i+1]; j++) ! c[indx[j]] += b[i] * val[j]; else for (l = 0; l < n; l++) ! for (i = 0; i < k; i++) ! for (j = pntr[i]; j < pntr[i+1]; j++) ! _SpMatVal(c, ldc, indx[j], l) += _SpMatVal(b, ldb, i, l) * val[j]; } else { if (n == 1) for (i = 0; i < k; i++) --- 129,153 ---- ; // Frob these so we can use one-based indexing externally ! /* c -= 1; val -= pntr[0]; indx -= pntr[0]; ! */ if (alpha == 1.0) { if (n == 1) for (i = 0; i < k; i++) ! for (j = pntr[i]; j < pntr[i+1]; j++) ! c[indx[j]] += b[i] * val[j]; else for (l = 0; l < n; l++) ! for (i = 0; i < k; i++) { ! ! for (j = pntr[i]; j < pntr[i+1]; j++) { ! // APK- this was backwards. apparently they never tested csc. ! //_SpMatVal(c, ldc, indx[j], l) += _SpMatVal(b, ldb, i, l) * val[j]; ! _SpMatVal(c, ldc, indx[j], l) += _SpMatVal(b, ldb, i, l) * val[j]; ! } ! } } else { if (n == 1) for (i = 0; i < k; i++) *************** *** 152,159 **** for (l = 0; l < n; l++) for (i = 0; i < k; i++) for (j = pntr[i]; j < pntr[i+1]; j++) ! _SpMatVal(c, ldc, indx[j], l) += ! alpha * _SpMatVal(b, ldb, i, l) * val[j]; } } --- 157,165 ---- for (l = 0; l < n; l++) for (i = 0; i < k; i++) for (j = pntr[i]; j < pntr[i+1]; j++) ! // APK-backwards ! //_SpMatVal(c, ldc, indx[j], l) += alpha * _SpMatVal(b, ldb, i, l) * val[j]; ! _SpMatVal(c, ldc, indx[j], l) += alpha * _SpMatVal(b, ldb, i, l) * val[j]; } } *************** *** 214,224 **** if (m || k) ; // Frob these so we can use one-based indexing externally ! b -= 1; val -= pntr[0]; indx -= pntr[0]; ! if (alpha == 1.0) { if (n == 1) for (i = 0; i < m; i++) --- 220,232 ---- if (m || k) ; + // cout << "m = " << m << ", n = " << n << ", k = " << k << endl; + // Frob these so we can use one-based indexing externally ! /* b -= 1; val -= pntr[0]; indx -= pntr[0]; ! */ if (alpha == 1.0) { if (n == 1) for (i = 0; i < m; i++) *************** *** 226,234 **** c[i] += b[indx[j]] * val[j]; else for (l = 0; l < n; l++) ! for (i = 0; i < m; i++) for (j = pntr[i]; j < pntr[i+1]; j++) _SpMatVal(c, ldc, i, l) += _SpMatVal(b, ldb, indx[j], l) * val[j]; } else { if (n == 1) for (i = 0; i < m; i++) --- 234,246 ---- c[i] += b[indx[j]] * val[j]; else for (l = 0; l < n; l++) ! for (i = 0; i < m; i++) { ! // cout << " l = " << l << ", i = " << i << endl << endl; ! // cout << "_SpMatVal(c, ldc, i, l) += _SpMatVal(b, ldb, indx[j], l) * val[j] = " << endl; for (j = pntr[i]; j < pntr[i+1]; j++) _SpMatVal(c, ldc, i, l) += _SpMatVal(b, ldb, indx[j], l) * val[j]; + // cout << " _SpMatVal(" << c << ", " << ldc << ", " << i << ", " << l << ") += _SpMatVal(" << b << ", " << ldb << ", " << indx[j] << ", " << l << ") * " << val[j] << endl; + } } else { if (n == 1) for (i = 0; i < m; i++) *************** *** 238,244 **** for (l = 0; l < n; l++) for (i = 0; i < m; i++) for (j = pntr[i]; j < pntr[i+1]; j++) ! _SpMatVal(c, ldc, i, l) += alpha * _SpMatVal(b, ldb, indx[j], l) * val[j]; } } --- 250,256 ---- for (l = 0; l < n; l++) for (i = 0; i < m; i++) for (j = pntr[i]; j < pntr[i+1]; j++) ! _SpMatVal(c, ldc, l, i) += alpha * _SpMatVal(b, ldb, indx[j], l) * val[j]; } } diff -c -r sparselib_1_5d/src/compcol_double.cc sparselib_1_5d-new/src/compcol_double.cc *** sparselib_1_5d/src/compcol_double.cc Thu Apr 25 11:49:50 1996 --- sparselib_1_5d-new/src/compcol_double.cc Thu Mar 18 16:04:00 2004 *************** *** 248,255 **** os.width(20); os << mat(M-1,N-1) << "\n"; } ! os.setf(olda,ios::adjustfield); ! os.setf(oldf,ios::floatfield); os.precision(oldp); return os; --- 248,256 ---- os.width(20); os << mat(M-1,N-1) << "\n"; } ! // APK - find out how to make this work in g++ 3.3 ! // os.setf(olda,ios::adjustfield); ! // os.setf(oldf,ios::floatfield); os.precision(oldp); return os; diff -c -r sparselib_1_5d/src/comprow_double.cc sparselib_1_5d-new/src/comprow_double.cc *** sparselib_1_5d/src/comprow_double.cc Thu Apr 25 11:49:50 1996 --- sparselib_1_5d-new/src/comprow_double.cc Thu Mar 18 16:07:14 2004 *************** *** 254,262 **** os.width(20); os << mat(M-1,N-1) << "\n"; } ! ! os.setf(olda,ios::adjustfield); ! os.setf(oldf,ios::floatfield); os.precision(oldp); return os; --- 254,262 ---- os.width(20); os << mat(M-1,N-1) << "\n"; } ! // APK - figure out how to do in g++ 3.3 ! // os.setf(olda,ios::adjustfield); ! // os.setf(oldf,ios::floatfield); os.precision(oldp); return os; diff -c -r sparselib_1_5d/src/coord_double.cc sparselib_1_5d-new/src/coord_double.cc *** sparselib_1_5d/src/coord_double.cc Thu Apr 25 11:49:50 1996 --- sparselib_1_5d-new/src/coord_double.cc Fri Mar 19 11:07:54 2004 *************** *** 230,237 **** os.width(20); os << mat(M-1,N-1) << "\n"; } ! os.setf(olda,ios::adjustfield); ! os.setf(oldf,ios::floatfield); os.precision(oldp); return os; } --- 230,238 ---- os.width(20); os << mat(M-1,N-1) << "\n"; } ! // APK -- learn how g++-3.3 does this ! // os.setf(olda,ios::adjustfield); ! // os.setf(oldf,ios::floatfield); os.precision(oldp); return os; } diff -c -r sparselib_1_5d/testing/makefile sparselib_1_5d-new/testing/makefile *** sparselib_1_5d/testing/makefile Fri Feb 23 11:37:53 2001 --- sparselib_1_5d-new/testing/makefile Fri Mar 12 15:28:51 2004 *************** *** 6,14 **** include $(SPARSELIB_DIR)/makefile.def ! SRCS = tsl.cc tpre.cc tspsm.cc tsp.cc ! EXECS = tsl tpre tspsm tsp ! OBJS = tsl.o tpre.o tspsm.o tsp.o all: progs progs: $(EXECS) --- 6,14 ---- include $(SPARSELIB_DIR)/makefile.def ! SRCS = tsl.cc tpre.cc tspsm.cc tsp.cc cluster.cc ! EXECS = tsl tpre tspsm tsp cluster ! OBJS = tsl.o tpre.o tspsm.o tsp.o cluster.o all: progs progs: $(EXECS) *************** *** 23,28 **** --- 23,32 ---- tpre.o : tpre.cc tspsm.o : tspsm.cc tsp.o : tsp.cc + cluster.o : cluster.cc + + cluster : cluster.o + $(CCC) $(CCCFLAGS) -o cluster cluster.o $(LDFLAGS) tsl : tsl.o $(CCC) $(CCCFLAGS) -o tsl tsl.o $(LDFLAGS)