From f76868e9d59149252ec79a79158eadefcdc5952f Mon Sep 17 00:00:00 2001 From: Tim Davis Date: Sat, 19 Oct 2019 14:13:36 -0500 Subject: [PATCH] v4.5.1 --- .gitignore | 184 ++++++++ AMD/Demo/amd_demo.out | 6 +- AMD/Demo/amd_demo2.out | 4 +- AMD/Demo/amd_l_demo.out | 6 +- AMD/Doc/AMD_UserGuide.pdf | Bin 169377 -> 169347 bytes AMD/Doc/AMD_UserGuide.tex | 2 +- AMD/Doc/ChangeLog | 4 + AMD/Include/amd.h | 4 +- AMD/Lib/Makefile | 26 +- AMD/Makefile | 3 + BTF/Doc/ChangeLog | 4 + BTF/Include/btf.h | 4 +- BTF/Lib/Makefile | 25 +- BTF/Makefile | 3 + CAMD/Demo/camd_demo.out | 6 +- CAMD/Demo/camd_demo2.out | 4 +- CAMD/Demo/camd_l_demo.out | 6 +- CAMD/Doc/CAMD_UserGuide.pdf | Bin 162347 -> 162330 bytes CAMD/Doc/CAMD_UserGuide.tex | 2 +- CAMD/Doc/ChangeLog | 4 + CAMD/Include/camd.h | 4 +- CAMD/Lib/Makefile | 24 +- CAMD/Makefile | 3 + CCOLAMD/Demo/ccolamd_example.out | 4 +- CCOLAMD/Demo/ccolamd_l_example.out | 4 +- CCOLAMD/Doc/ChangeLog | 4 + CCOLAMD/Include/ccolamd.h | 4 +- CCOLAMD/Lib/Makefile | 23 +- CCOLAMD/Makefile | 3 + CHOLMOD/Check/cholmod_write.c | 1 + CHOLMOD/Core/cholmod_error.c | 26 +- CHOLMOD/Demo/cholmod_demo.c | 25 +- CHOLMOD/Demo/cholmod_l_demo.c | 19 +- CHOLMOD/Demo/cholmod_simple.c | 4 + CHOLMOD/Doc/CHOLMOD_UserGuide.pdf | Bin 454677 -> 454973 bytes CHOLMOD/Doc/CHOLMOD_UserGuide.tex | 6 +- CHOLMOD/Doc/ChangeLog | 9 + CHOLMOD/Include/cholmod_core.h | 4 +- CHOLMOD/Lib/Makefile | 36 +- CHOLMOD/Makefile | 3 + COLAMD/Demo/colamd_example.out | 4 +- COLAMD/Demo/colamd_l_example.out | 4 +- COLAMD/Doc/ChangeLog | 4 + COLAMD/Include/colamd.h | 4 +- COLAMD/Lib/Makefile | 23 +- COLAMD/Makefile | 3 + CSparse/Demo/Makefile | 2 +- CSparse/Doc/ChangeLog | 4 + CSparse/Include/cs.h | 4 +- CSparse/Lib/Makefile | 83 +--- CSparse/README.txt | 2 +- CXSparse/Demo/cs_demo.out | 422 +++++++++--------- CXSparse/Doc/ChangeLog | 4 + CXSparse/Include/cs.h | 4 +- CXSparse/Lib/Makefile | 28 +- CXSparse/Makefile | 3 + CXSparse_newfiles/Include/cs.h | 4 +- CXSparse_newfiles/Lib/Makefile | 28 +- CXSparse_newfiles/Makefile | 3 + ChangeLog | 11 + GPUQREngine/Doc/ChangeLog | 4 + GPUQREngine/Include/GPUQREngine.hpp | 4 +- GPUQREngine/Lib/Makefile | 29 +- GPUQREngine/Makefile | 3 + GPUQREngine/README.txt | 2 - KLU/Doc/ChangeLog | 4 + KLU/Doc/KLU_UserGuide.pdf | Bin 214980 -> 214960 bytes KLU/Doc/KLU_UserGuide.tex | 2 +- KLU/Include/klu.h | 4 +- KLU/Lib/Makefile | 25 +- KLU/Makefile | 3 + KLU/Tcov/Makefile | 4 +- LDL/Demo/ldlamd.out | 96 ++-- LDL/Demo/ldllamd.out | 96 ++-- LDL/Doc/ChangeLog | 4 + LDL/Doc/ldl_userguide.pdf | Bin 143265 -> 143266 bytes LDL/Doc/ldl_userguide.tex | 2 +- LDL/Include/ldl.h | 4 +- LDL/Lib/Makefile | 23 +- LDL/Makefile | 3 + .../spqr_rank/save_samples_demo_spqr_rank.mat | Bin 21542 -> 0 bytes Makefile | 58 +-- RBio/Doc/ChangeLog | 4 + RBio/Include/RBio.h | 4 +- RBio/Lib/Makefile | 23 +- RBio/Makefile | 3 + README.txt | 67 +-- SPQR/Demo/Makefile | 7 +- SPQR/Demo/qrdemo.cpp | 5 + SPQR/Demo/qrsimple.cpp | 6 +- SPQR/Demo/qrsimplec.c | 6 +- SPQR/Doc/ChangeLog | 7 + SPQR/Doc/spqr_user_guide.pdf | Bin 167258 -> 167256 bytes SPQR/Doc/spqr_user_guide.tex | 2 +- SPQR/Include/SuiteSparseQR_definitions.h | 4 +- SPQR/Lib/Makefile | 38 +- SPQR/Makefile | 3 + SPQR/Source/spqr_analyze.cpp | 13 + SuiteSparse_GPURuntime/Doc/ChangeLog | 4 + .../Include/SuiteSparseGPU_Runtime.hpp | 4 +- SuiteSparse_GPURuntime/Lib/Makefile | 27 +- SuiteSparse_GPURuntime/Makefile | 3 + SuiteSparse_config/Makefile | 26 +- SuiteSparse_config/SuiteSparse_config.h | 32 +- SuiteSparse_config/SuiteSparse_config.mk | 138 ++++-- SuiteSparse_config/xerbla/Makefile | 29 +- UMFPACK/Demo/Makefile | 20 +- UMFPACK/Demo/umfpack_di_demo.out | 48 +- UMFPACK/Demo/umfpack_dl_demo.out | 56 +-- UMFPACK/Demo/umfpack_zi_demo.out | 58 +-- UMFPACK/Demo/umfpack_zl_demo.out | 56 +-- UMFPACK/Doc/ChangeLog | 4 + UMFPACK/Doc/UMFPACK_QuickStart.pdf | Bin 130261 -> 130372 bytes UMFPACK/Doc/UMFPACK_QuickStart.tex | 2 +- UMFPACK/Doc/UMFPACK_UserGuide.pdf | Bin 384944 -> 385061 bytes UMFPACK/Doc/UMFPACK_UserGuide.stex | 2 +- UMFPACK/Include/umfpack.h | 6 +- UMFPACK/Lib/Makefile | 27 +- UMFPACK/Makefile | 5 +- UMFPACK/Tcov/Make.1 | 14 +- UMFPACK/Tcov/Make.2 | 14 +- UMFPACK/Tcov/Make.3 | 13 +- UMFPACK/Tcov/Make.4 | 13 +- UMFPACK/Tcov/Make.5 | 14 +- UMFPACK/Tcov/Make.6 | 14 +- UMFPACK/Tcov/Make.7 | 14 +- UMFPACK/Tcov/Make.8 | 14 +- UMFPACK/Tcov/Makefile | 2 + UMFPACK/Tcov/Makefile.di | 4 +- UMFPACK/Tcov/Makefile.dl | 4 +- UMFPACK/Tcov/Makefile.zi | 4 +- UMFPACK/Tcov/Makefile.zl | 4 +- doc/.gitignore | 4 - metis-5.1.0/README.txt | 51 ++- metis-5.1.0/include/metis.h | 51 ++- share/.gitignore | 4 + 136 files changed, 1452 insertions(+), 1042 deletions(-) create mode 100644 .gitignore delete mode 100644 MATLAB_Tools/spqr_rank/save_samples_demo_spqr_rank.mat delete mode 100644 doc/.gitignore create mode 100644 share/.gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..172cd84d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,184 @@ +# Ignore these files: +*.o +*.so.* +*.so +*.dylib +*.a +*.obj +*.ln +*.bb +*.bbg +*.da +*.tcov +*.gcov +gmon.out +*.bak +*.d +*.gcda +*.gcno +*.aux +*.bbl +*.blg +*.log +*.toc +*.dvi +*.lof +*.lot +*.dll +*.dSYM +my_*.out +*.gcda +*.gcno +*.mex* +*.profile +*.swp + +# ignore these specific programs in the Package/Demo directories +AMD/Demo/amd_demo +AMD/Demo/amd_demo2 +AMD/Demo/amd_l_demo +AMD/Demo/amd_simple +CAMD/Demo/camd_demo +CAMD/Demo/camd_demo2 +CAMD/Demo/camd_l_demo +CAMD/Demo/camd_simple +CCOLAMD/Demo/ccolamd_example +CCOLAMD/Demo/ccolamd_l_example +CHOLMOD/Demo/cholmod_demo +CHOLMOD/Demo/cholmod_l_demo +CHOLMOD/Demo/cholmod_simple +CHOLMOD/Demo/timelog.m +COLAMD/Demo/colamd_example +COLAMD/Demo/colamd_l_example +CSparse/Demo/cs_demo1 +CSparse/Demo/cs_demo2 +CSparse/Demo/cs_demo3 +CXSparse/Demo/cs_ci_demo1 +CXSparse/Demo/cs_ci_demo2 +CXSparse/Demo/cs_ci_demo3 +CXSparse/Demo/cs_cl_demo1 +CXSparse/Demo/cs_cl_demo2 +CXSparse/Demo/cs_cl_demo3 +CXSparse/Demo/cs_demo1 +CXSparse/Demo/cs_demo2 +CXSparse/Demo/cs_demo3 +CXSparse/Demo/cs_di_demo1 +CXSparse/Demo/cs_di_demo2 +CXSparse/Demo/cs_di_demo3 +CXSparse/Demo/cs_dl_demo1 +CXSparse/Demo/cs_dl_demo2 +CXSparse/Demo/cs_dl_demo3 +CXSparse/Demo/cs_idemo +CXSparse/Demo/cs_ldemo +KLU/Demo/klu_simple +KLU/Demo/kludemo +KLU/Demo/kluldemo +LDL/Demo/ldlamd +LDL/Demo/ldllamd +LDL/Demo/ldllmain +LDL/Demo/ldllsimple +LDL/Demo/ldlmain +LDL/Demo/ldlsimple +RBio/Demo/RBdemo +RBio/Demo/temp.rb +SPQR/Demo/qrdemo +SPQR/Demo/qrsimple +SPQR/Demo/qrsimplec +SPQR/Demo/C.mtx +SPQR/Demo/E.txt +SPQR/Demo/R.mtx +SPQR/Demo/X.mtx +SPQR/Demo/gpu_results.txt +SPQR/Demo/qrdemo_gpu +SPQR/Demo/qrdemo_gpu2 +SPQR/Demo/qrdemo_gpu3 +UMFPACK/Demo/numeric.umf +UMFPACK/Demo/symbolic.umf +UMFPACK/Demo/umfpack_di_demo +UMFPACK/Demo/umfpack_dl_demo +UMFPACK/Demo/umfpack_simple +UMFPACK/Demo/umfpack_zi_demo +UMFPACK/Demo/umfpack_zl_demo + +# ignore these specific programs in the Package/Tcov directories +CHOLMOD/Tcov/cl +CHOLMOD/Tcov/clread +CHOLMOD/Tcov/cm +CHOLMOD/Tcov/cmread +CHOLMOD/Tcov/covs.out +CHOLMOD/Tcov/ldemo +CHOLMOD/Tcov/ldemo.c +CHOLMOD/Tcov/temp*.mtx +CHOLMOD/Tcov/timelog.m +CHOLMOD/Tcov/l_*.c +CHOLMOD/Tcov/z_*.c +CHOLMOD/Tcov/zz_*.c +CHOLMOD/Tcov/zl_*.c +CHOLMOD/Tcov/zdemo +CHOLMOD/Tcov/zdemo.c + +CSparse/Tcov/cov.out +CSparse/Tcov/cov.sort +CSparse/Tcov/cover.out +CSparse/Tcov/covs.out +CSparse/Tcov/cs_*.c +CSparse/Tcov/cstcov_test +CSparse/Tcov/*.out +CSparse/Tcov/cs_demo1 +CSparse/Tcov/cs_demo2 +CSparse/Tcov/cs_demo3 + +CXSparse/Tcov/cov.out +CXSparse/Tcov/cov.sort +CXSparse/Tcov/cover.out +CXSparse/Tcov/covs.out +CXSparse/Tcov/cs_*.c +CXSparse/Tcov/cs*_ci.c +CXSparse/Tcov/cs*_cl.c +CXSparse/Tcov/cs*_di.c +CXSparse/Tcov/cs*_dl.c +CXSparse/Tcov/*.out +CXSparse/Tcov/cs_demo1_ci +CXSparse/Tcov/cs_demo1_cl +CXSparse/Tcov/cs_demo1_di +CXSparse/Tcov/cs_demo1_dl +CXSparse/Tcov/cs_demo2_ci +CXSparse/Tcov/cs_demo2_cl +CXSparse/Tcov/cs_demo2_di +CXSparse/Tcov/cs_demo2_dl +CXSparse/Tcov/cs_demo3_ci +CXSparse/Tcov/cs_demo3_cl +CXSparse/Tcov/cs_demo3_di +CXSparse/Tcov/cs_demo3_dl +CXSparse/Tcov/cs_idemo +CXSparse/Tcov/cs_ldemo +CXSparse/Tcov/cstcov_test_ci +CXSparse/Tcov/cstcov_test_cl +CXSparse/Tcov/cstcov_test_di +CXSparse/Tcov/cstcov_test_dl + +KLU/Tcov/cov_*.c +KLU/Tcov/klutest +KLU/Tcov/klultest +KLU/Tcov/*.out + +SPQR/Tcov/X.mtx +SPQR/Tcov/gpu_results.txt +SPQR/Tcov/gpuqrengine_demo +SPQR/Tcov/qrdemo_gpu +SPQR/Tcov/qrtest +SPQR/Tcov/qrtest_out.txt +SPQR/Tcov/troll.m +SPQR/Tcov/cov.out + +UMFPACK/Tcov/covall_err.out +UMFPACK/Tcov/cover.out + +# ignore these specific files in the Package/MATLAB directories +MATLAB_Tools/spqr_rank/save_samples_demo_spqr_rank.mat +CXSparse/MATLAB/CSparse/cs_cl_*.c +CXSparse/MATLAB/Test/cs_*.c + +# Do not ignore this file +!.gitignore + diff --git a/AMD/Demo/amd_demo.out b/AMD/Demo/amd_demo.out index 3ce8a8213..823a875af 100644 --- a/AMD/Demo/amd_demo.out +++ b/AMD/Demo/amd_demo.out @@ -1,7 +1,7 @@ -AMD version 2.4.3, date: Jan 30, 2016 +AMD version 2.4.4, date: Feb 1, 2016 AMD demo, with the 24-by-24 Harwell/Boeing matrix, can_24: -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -115,7 +115,7 @@ Plot of input matrix pattern: 23: . . . . . . X . . . . X X . . . . . . . . . . X return value from amd_order: 0 (should be 0) -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 24 nz, number of nonzeros in A: 160 diff --git a/AMD/Demo/amd_demo2.out b/AMD/Demo/amd_demo2.out index 5241647fd..73be9409d 100644 --- a/AMD/Demo/amd_demo2.out +++ b/AMD/Demo/amd_demo2.out @@ -1,7 +1,7 @@ AMD demo, with a jumbled version of the 24-by-24 Harwell/Boeing matrix, can_24: -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -144,7 +144,7 @@ Plot of symmetric matrix to be ordered by amd_order: 23: . . . . . . X . . . . X X . . . . . . . . . . X return value from amd_order: 1 (should be 1) -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 24 nz, number of nonzeros in A: 102 diff --git a/AMD/Demo/amd_l_demo.out b/AMD/Demo/amd_l_demo.out index 60f38bac4..f7fb1dfd6 100644 --- a/AMD/Demo/amd_l_demo.out +++ b/AMD/Demo/amd_l_demo.out @@ -1,7 +1,7 @@ -AMD version 2.4.3, date: Jan 30, 2016 +AMD version 2.4.4, date: Feb 1, 2016 AMD demo, with the 24-by-24 Harwell/Boeing matrix, can_24: -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -115,7 +115,7 @@ Plot of input matrix pattern: 23: . . . . . . X . . . . X X . . . . . . . . . . X return value from amd_l_order: 0 (should be 0) -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 24 nz, number of nonzeros in A: 160 diff --git a/AMD/Doc/AMD_UserGuide.pdf b/AMD/Doc/AMD_UserGuide.pdf index cdddb673f2a1c921d4ecffb107a19a9ed2b76dcc..cf4dced3dda43d9abb001740a8e62946f88dd16e 100644 GIT binary patch delta 12809 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 QN(cyy#>gnGB7^q-0O{pUEdT%j diff --git a/AMD/Doc/AMD_UserGuide.tex b/AMD/Doc/AMD_UserGuide.tex index 5e41583d5..b1ebab4c5 100644 --- a/AMD/Doc/AMD_UserGuide.tex +++ b/AMD/Doc/AMD_UserGuide.tex @@ -32,7 +32,7 @@ This work was supported by the EPSRC under grant GR/R46441. }} -\date{VERSION 2.4.3, Jan 30, 2016} +\date{VERSION 2.4.4, Feb 1, 2016} \maketitle %------------------------------------------------------------------------------ diff --git a/AMD/Doc/ChangeLog b/AMD/Doc/ChangeLog index 6efb43723..bf181372b 100644 --- a/AMD/Doc/ChangeLog +++ b/AMD/Doc/ChangeLog @@ -1,3 +1,7 @@ +Feb 1, 2016: version 2.4.4 + + * update to Makefiles + Jan 30, 2016: version 2.4.3 * modifications to Makefiles diff --git a/AMD/Include/amd.h b/AMD/Include/amd.h index 17c0edb6d..8c4b69a10 100644 --- a/AMD/Include/amd.h +++ b/AMD/Include/amd.h @@ -386,11 +386,11 @@ void amd_l_info (double Info [ ]) ; * Versions 1.1 and earlier of AMD do not include a #define'd version number. */ -#define AMD_DATE "Jan 30, 2016" +#define AMD_DATE "Feb 1, 2016" #define AMD_VERSION_CODE(main,sub) ((main) * 1000 + (sub)) #define AMD_MAIN_VERSION 2 #define AMD_SUB_VERSION 4 -#define AMD_SUBSUB_VERSION 3 +#define AMD_SUBSUB_VERSION 4 #define AMD_VERSION AMD_VERSION_CODE(AMD_MAIN_VERSION,AMD_SUB_VERSION) #ifdef __cplusplus diff --git a/AMD/Lib/Makefile b/AMD/Lib/Makefile index f4f479e0b..fbbc19324 100644 --- a/AMD/Lib/Makefile +++ b/AMD/Lib/Makefile @@ -3,16 +3,19 @@ #------------------------------------------------------------------------------- LIBRARY = libamd -VERSION = 2.4.3 +VERSION = 2.4.4 SO_VERSION = 2 default: library - $(MAKE) install INSTALL=$(CURDIR)/../.. \ - INSTALL_DOC=$(CURDIR)/../../doc include ../../SuiteSparse_config/SuiteSparse_config.mk -library: $(AR_TARGET) $(SO_TARGET) +# AMD depends on SuiteSparse_config +LDLIBS += -lsuitesparseconfig + +# compile and install in SuiteSparse/lib +library: + $(MAKE) install INSTALL=$(SUITESPARSE) C = $(CC) $(CF) -I../Include -I../../SuiteSparse_config @@ -33,6 +36,7 @@ INC = ../Include/amd.h ../Include/amd_internal.h \ AMDI = $(addsuffix .o, $(subst amd_,amd_i_,$(AMD))) AMDL = $(addsuffix .o, $(subst amd_,amd_l_,$(AMD))) +OBJ = $(AMDI) $(AMDL) #------------------------------------------------------------------------------- # compile each int and long routine (with no real/complex version) @@ -45,16 +49,13 @@ amd_l_%.o: ../Source/amd_%.c $(INC) $(C) -DDLONG -c $< -o $@ #------------------------------------------------------------------------------- -# Create the static and shared libraries (C versions only) +# Create the static library (C versions only) #------------------------------------------------------------------------------- -$(AR_TARGET): $(AMDI) $(AMDL) +$(AR_TARGET): $(OBJ) $(ARCHIVE) $@ $^ - $(RANLIB) $@ -$(SO_TARGET): $(AMDI) $(AMDL) - $(CC) $(SO_OPTS) $^ -o $@ - #------------------------------------------------------------------------------- # compile the Fortran versions and the libamdf77.a library (static only) #------------------------------------------------------------------------------- @@ -78,14 +79,13 @@ libamdf77.a: $(AMDF77) #------------------------------------------------------------------------------- # install AMD -install: $(INSTALL_LIB)/$(SO_TARGET) +install: $(AR_TARGET) $(INSTALL_LIB)/$(SO_TARGET) -$(INSTALL_LIB)/$(SO_TARGET): $(SO_TARGET) +$(INSTALL_LIB)/$(SO_TARGET): $(OBJ) @mkdir -p $(INSTALL_LIB) @mkdir -p $(INSTALL_INCLUDE) @mkdir -p $(INSTALL_DOC) - $(CP) $(SO_TARGET) $(INSTALL_LIB) - $(SO_INSTALL_NAME) $(INSTALL_LIB)/$(SO_TARGET) $(INSTALL_LIB)/$(SO_TARGET) + $(CC) $(SO_OPTS) $^ -o $@ $(LDLIBS) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_PLAIN) ) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_MAIN) ) $(CP) ../Include/amd.h $(INSTALL_INCLUDE) diff --git a/AMD/Makefile b/AMD/Makefile index f0dbb2791..4ec4ad2af 100644 --- a/AMD/Makefile +++ b/AMD/Makefile @@ -2,6 +2,9 @@ # AMD Makefile #------------------------------------------------------------------------------ +SUITESPARSE ?= $(realpath $(CURDIR)/..) +export SUITESPARSE + default: all include ../SuiteSparse_config/SuiteSparse_config.mk diff --git a/BTF/Doc/ChangeLog b/BTF/Doc/ChangeLog index e21b5c923..61d91f5f7 100644 --- a/BTF/Doc/ChangeLog +++ b/BTF/Doc/ChangeLog @@ -1,3 +1,7 @@ +Feb 1, 2016: version 1.2.4 + + * update to Makefiles + Jan 30, 2016: version 1.2.3 * modifications to Makefiles diff --git a/BTF/Include/btf.h b/BTF/Include/btf.h index 621c0ffff..c055249b9 100644 --- a/BTF/Include/btf.h +++ b/BTF/Include/btf.h @@ -254,11 +254,11 @@ SuiteSparse_long btf_l_order (SuiteSparse_long, SuiteSparse_long *, * #endif */ -#define BTF_DATE "Jan 30, 2016" +#define BTF_DATE "Feb 1, 2016" #define BTF_VERSION_CODE(main,sub) ((main) * 1000 + (sub)) #define BTF_MAIN_VERSION 1 #define BTF_SUB_VERSION 2 -#define BTF_SUBSUB_VERSION 3 +#define BTF_SUBSUB_VERSION 4 #define BTF_VERSION BTF_VERSION_CODE(BTF_MAIN_VERSION,BTF_SUB_VERSION) #ifdef __cplusplus diff --git a/BTF/Lib/Makefile b/BTF/Lib/Makefile index 17fff8642..29a8afa4d 100644 --- a/BTF/Lib/Makefile +++ b/BTF/Lib/Makefile @@ -3,16 +3,21 @@ #------------------------------------------------------------------------------- LIBRARY = libbtf -VERSION = 1.2.3 +VERSION = 1.2.4 SO_VERSION = 1 default: library - $(MAKE) install INSTALL=$(CURDIR)/../.. \ - INSTALL_DOC=$(CURDIR)/../../doc + +include ../../SuiteSparse_config/SuiteSparse_config.mk + +# BTF depends on SuiteSparse_config +LDLIBS += -lsuitesparseconfig ccode: all -include ../../SuiteSparse_config/SuiteSparse_config.mk +# compile and install in SuiteSparse/lib +library: + $(MAKE) install INSTALL=$(SUITESPARSE) # for testing only: # TEST = -DTESTING @@ -25,8 +30,6 @@ I = -I../Include -I../../SuiteSparse_config all: library -library: $(AR_TARGET) $(SO_TARGET) - OBJ = btf_order.o btf_maxtrans.o btf_strongcomp.o \ btf_l_order.o btf_l_maxtrans.o btf_l_strongcomp.o @@ -34,9 +37,6 @@ $(AR_TARGET): $(OBJ) $(ARCHIVE) $@ $^ - $(RANLIB) $@ -$(SO_TARGET): $(OBJ) - $(CC) $(SO_OPTS) $^ -o $@ - $(OBJ): $(INC) #------------------------------------------------------------------------------- @@ -64,14 +64,13 @@ btf_l_strongcomp.o: ../Source/btf_strongcomp.c #------------------------------------------------------------------------------- # install BTF -install: $(INSTALL_LIB)/$(SO_TARGET) +install: $(AR_TARGET) $(INSTALL_LIB)/$(SO_TARGET) -$(INSTALL_LIB)/$(SO_TARGET): $(SO_TARGET) +$(INSTALL_LIB)/$(SO_TARGET): $(OBJ) @mkdir -p $(INSTALL_LIB) @mkdir -p $(INSTALL_INCLUDE) @mkdir -p $(INSTALL_DOC) - $(CP) $(SO_TARGET) $(INSTALL_LIB) - $(SO_INSTALL_NAME) $(INSTALL_LIB)/$(SO_TARGET) $(INSTALL_LIB)/$(SO_TARGET) + $(CC) $(SO_OPTS) $^ -o $@ $(LDLIBS) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_PLAIN) ) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_MAIN) ) $(CP) ../Include/btf.h $(INSTALL_INCLUDE) diff --git a/BTF/Makefile b/BTF/Makefile index e132d32ca..39438a642 100644 --- a/BTF/Makefile +++ b/BTF/Makefile @@ -2,6 +2,9 @@ # BTF Makefile #------------------------------------------------------------------------------ +SUITESPARSE ?= $(realpath $(CURDIR)/..) +export SUITESPARSE + default: library include ../SuiteSparse_config/SuiteSparse_config.mk diff --git a/CAMD/Demo/camd_demo.out b/CAMD/Demo/camd_demo.out index a07050898..fe0065ad5 100644 --- a/CAMD/Demo/camd_demo.out +++ b/CAMD/Demo/camd_demo.out @@ -1,7 +1,7 @@ -CAMD version 2.4, date: Jan 30, 2016 +CAMD version 2.4, date: Feb 1, 2016 CAMD demo, with the 24-by-24 Harwell/Boeing matrix, can_24: -camd version 2.4, Jan 30, 2016: approximate minimum degree ordering: +camd version 2.4, Feb 1, 2016: approximate minimum degree ordering: dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -115,7 +115,7 @@ Plot of input matrix pattern: 23: . . . . . . X . . . . X X . . . . . . . . . . X return value from camd_order: 0 (should be 0) -CAMD version 2.4.3, Jan 30, 2016, results: +CAMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 24 nz, number of nonzeros in A: 160 diff --git a/CAMD/Demo/camd_demo2.out b/CAMD/Demo/camd_demo2.out index ef06e2fdf..addc095f3 100644 --- a/CAMD/Demo/camd_demo2.out +++ b/CAMD/Demo/camd_demo2.out @@ -1,7 +1,7 @@ CAMD demo, with a jumbled version of the 24-by-24 Harwell/Boeing matrix, can_24: -camd version 2.4, Jan 30, 2016: approximate minimum degree ordering: +camd version 2.4, Feb 1, 2016: approximate minimum degree ordering: dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -144,7 +144,7 @@ Plot of symmetric matrix to be ordered by camd_order: 23: . . . . . . X . . . . X X . . . . . . . . . . X return value from camd_order: 1 (should be 1) -CAMD version 2.4.3, Jan 30, 2016, results: +CAMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 24 nz, number of nonzeros in A: 102 diff --git a/CAMD/Demo/camd_l_demo.out b/CAMD/Demo/camd_l_demo.out index 7219b0c95..c203375c1 100644 --- a/CAMD/Demo/camd_l_demo.out +++ b/CAMD/Demo/camd_l_demo.out @@ -1,7 +1,7 @@ -CAMD version 2.4, date: Jan 30, 2016 +CAMD version 2.4, date: Feb 1, 2016 CAMD demo, with the 24-by-24 Harwell/Boeing matrix, can_24: -camd version 2.4, Jan 30, 2016: approximate minimum degree ordering: +camd version 2.4, Feb 1, 2016: approximate minimum degree ordering: dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -115,7 +115,7 @@ Plot of input matrix pattern: 23: . . . . . . X . . . . X X . . . . . . . . . . X return value from camd_l_order: 0 (should be 0) -CAMD version 2.4.3, Jan 30, 2016, results: +CAMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 24 nz, number of nonzeros in A: 160 diff --git a/CAMD/Doc/CAMD_UserGuide.pdf b/CAMD/Doc/CAMD_UserGuide.pdf index 23b8746d24603d60773e733ba8e6af772e5e1303..36d9a6bd527a3a544b4e33b77e4802e31b944cad 100644 GIT binary patch delta 15600 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 Kow%X|=KlvmZ(6DV delta 15535 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 0 && Common->print > 1) { - SuiteSparse_config.printf_func ("CHOLMOD warning: %s\n", - message) ; + SuiteSparse_config.printf_func ("CHOLMOD warning:") ; + if (message != NULL) + { + SuiteSparse_config.printf_func (" %s.", message) ; + } + if (file != NULL) + { + SuiteSparse_config.printf_func (" file: %s", file) ; + SuiteSparse_config.printf_func (" line: %d", line) ; + } + SuiteSparse_config.printf_func ("\n") ; fflush (stdout) ; fflush (stderr) ; } else if (Common->print > 0) { - SuiteSparse_config.printf_func ("CHOLMOD error: %s\n", - message) ; + SuiteSparse_config.printf_func ("CHOLMOD error:") ; + if (message != NULL) + { + SuiteSparse_config.printf_func (" %s.", message) ; + } + if (file != NULL) + { + SuiteSparse_config.printf_func (" file: %s", file) ; + SuiteSparse_config.printf_func (" line: %d", line) ; + } + SuiteSparse_config.printf_func ("\n") ; fflush (stdout) ; fflush (stderr) ; } diff --git a/CHOLMOD/Demo/cholmod_demo.c b/CHOLMOD/Demo/cholmod_demo.c index ead395a94..ca313092a 100644 --- a/CHOLMOD/Demo/cholmod_demo.c +++ b/CHOLMOD/Demo/cholmod_demo.c @@ -59,7 +59,7 @@ int main (int argc, char **argv) anz, axbnorm, rnorm2, resid2, rcond ; FILE *f ; cholmod_sparse *A ; - cholmod_dense *X = NULL, *B, *W, *R ; + cholmod_dense *X = NULL, *B, *W, *R = NULL ; double one [2], zero [2], minusone [2], beta [2], xlnz ; cholmod_common Common, *cm ; cholmod_factor *L ; @@ -137,10 +137,13 @@ int main (int argc, char **argv) fclose (ff) ; ff = NULL ; } - anorm = cholmod_norm_sparse (A, 0, cm) ; xtype = A->xtype ; + anorm = 1 ; +#ifndef NMATRIXOPS + anorm = cholmod_norm_sparse (A, 0, cm) ; printf ("norm (A,inf) = %g\n", anorm) ; printf ("norm (A,1) = %g\n", cholmod_norm_sparse (A, 1, cm)) ; +#endif cholmod_print_sparse (A, "A", cm) ; if (A->nrow > A->ncol) @@ -191,8 +194,11 @@ int main (int argc, char **argv) #endif cholmod_print_dense (B, "B", cm) ; + bnorm = 1 ; +#ifndef NMATRIXOPS bnorm = cholmod_norm_dense (B, 0, cm) ; /* max norm */ printf ("bnorm %g\n", bnorm) ; +#endif /* ---------------------------------------------------------------------- */ /* analyze and factorize */ @@ -265,6 +271,7 @@ int main (int argc, char **argv) for (method = 0 ; method <= 3 ; method++) { double x = n ; + resid [method] = -1 ; /* not yet computed */ if (method == 0) { @@ -433,7 +440,9 @@ int main (int argc, char **argv) fclose (timelog) ; } +#ifndef NMATRIXOPS resid [3] = resid [3] / cholmod_norm_dense (X, 1, cm) ; +#endif cholmod_free_dense (&Ywork, cm) ; cholmod_free_dense (&Ework, cm) ; @@ -449,6 +458,7 @@ int main (int argc, char **argv) if (method < 3) { +#ifndef NMATRIXOPS if (A->stype == 0) { @@ -457,6 +467,7 @@ int main (int argc, char **argv) W = cholmod_allocate_dense (A->ncol, 1, A->ncol, xtype, cm) ; cholmod_sdmult (A, 2, one, zero, X, W, cm) ; /* R = B - beta*X */ + cholmod_free_dense (&R, cm) ; R = cholmod_zeros (n, 1, xtype, cm) ; Rx = R->x ; Xx = X->x ; @@ -483,14 +494,19 @@ int main (int argc, char **argv) else { /* Ax=b was factorized and solved, R = B-A*X */ + cholmod_free_dense (&R, cm) ; R = cholmod_copy_dense (B, cm) ; cholmod_sdmult (A, 0, minusone, one, X, R, cm) ; } + rnorm = -1 ; + xnorm = 1 ; rnorm = cholmod_norm_dense (R, 0, cm) ; /* max abs. entry */ xnorm = cholmod_norm_dense (X, 0, cm) ; /* max abs. entry */ - axbnorm = (anorm * xnorm + bnorm + ((n == 0) ? 1 : 0)) ; resid [method] = rnorm / axbnorm ; +#else + printf ("residual not computed (requires CHOLMOD/MatrixOps)\n") ; +#endif } } @@ -501,6 +517,7 @@ int main (int argc, char **argv) /* ---------------------------------------------------------------------- */ resid2 = -1 ; +#ifndef NMATRIXOPS if (A->stype != 0 && A->xtype == CHOLMOD_REAL) { cholmod_dense *R2 ; @@ -518,11 +535,13 @@ int main (int argc, char **argv) cholmod_free_dense (&R, cm) ; /* compute the new residual, R = B-A*X */ + cholmod_free_dense (&R, cm) ; R = cholmod_copy_dense (B, cm) ; cholmod_sdmult (A, 0, minusone, one, X, R, cm) ; rnorm2 = cholmod_norm_dense (R, 0, cm) ; resid2 = rnorm2 / axbnorm ; } +#endif cholmod_free_dense (&R, cm) ; diff --git a/CHOLMOD/Demo/cholmod_l_demo.c b/CHOLMOD/Demo/cholmod_l_demo.c index 786eb3574..de55c4adb 100644 --- a/CHOLMOD/Demo/cholmod_l_demo.c +++ b/CHOLMOD/Demo/cholmod_l_demo.c @@ -58,7 +58,7 @@ int main (int argc, char **argv) anz, axbnorm, rnorm2, resid2, rcond ; FILE *f ; cholmod_sparse *A ; - cholmod_dense *X = NULL, *B, *W, *R ; + cholmod_dense *X = NULL, *B, *W, *R = NULL ; double one [2], zero [2], minusone [2], beta [2], xlnz ; cholmod_common Common, *cm ; cholmod_factor *L ; @@ -142,9 +142,12 @@ int main (int argc, char **argv) fclose (ff) ; ff = NULL ; } + anorm = 1 ; +#ifndef NMATRIXOPS anorm = cholmod_l_norm_sparse (A, 0, cm) ; printf ("norm (A,inf) = %g\n", anorm) ; printf ("norm (A,1) = %g\n", cholmod_l_norm_sparse (A, 1, cm)) ; +#endif if (prefer_zomplex && A->xtype == CHOLMOD_COMPLEX) { @@ -261,8 +264,11 @@ int main (int argc, char **argv) #endif cholmod_l_print_dense (B, "B", cm) ; + bnorm = 1 ; +#ifndef NMATRIXOPS bnorm = cholmod_l_norm_dense (B, 0, cm) ; /* max norm */ printf ("bnorm %g\n", bnorm) ; +#endif /* ---------------------------------------------------------------------- */ /* analyze and factorize */ @@ -515,7 +521,9 @@ int main (int argc, char **argv) fclose (timelog) ; } +#ifndef NMATRIXOPS resid [3] = resid [3] / cholmod_l_norm_dense (X, 1, cm) ; +#endif cholmod_l_free_dense (&Ywork, cm) ; cholmod_l_free_dense (&Ework, cm) ; @@ -531,6 +539,7 @@ int main (int argc, char **argv) if (method < 3) { +#ifndef NMATRIXOPS if (A->stype == 0) { /* (AA'+beta*I)x=b is the linear system that was solved */ @@ -538,6 +547,7 @@ int main (int argc, char **argv) W = cholmod_l_allocate_dense (A->ncol, 1, A->ncol, xtype, cm) ; cholmod_l_sdmult (A, 2, one, zero, X, W, cm) ; /* R = B - beta*X */ + cholmod_l_free_dense (&R, cm) ; R = cholmod_l_zeros (n, 1, xtype, cm) ; Rx = R->x ; Rz = R->z ; @@ -576,6 +586,7 @@ int main (int argc, char **argv) else { /* Ax=b was factorized and solved, R = B-A*X */ + cholmod_l_free_dense (&R, cm) ; R = cholmod_l_copy_dense (B, cm) ; cholmod_l_sdmult (A, 0, minusone, one, X, R, cm) ; } @@ -584,6 +595,9 @@ int main (int argc, char **argv) axbnorm = (anorm * xnorm + bnorm + ((n == 0) ? 1 : 0)) ; resid [method] = rnorm / axbnorm ; +#else + printf ("residual not computed (requires CHOLMOD/MatrixOps)\n") ; +#endif } } @@ -594,6 +608,7 @@ int main (int argc, char **argv) /* ---------------------------------------------------------------------- */ resid2 = -1 ; +#ifndef NMATRIXOPS if (A->stype != 0 && A->xtype == CHOLMOD_REAL) { cholmod_dense *R2 ; @@ -611,11 +626,13 @@ int main (int argc, char **argv) cholmod_l_free_dense (&R, cm) ; /* compute the new residual, R = B-A*X */ + cholmod_l_free_dense (&R, cm) ; R = cholmod_l_copy_dense (B, cm) ; cholmod_l_sdmult (A, 0, minusone, one, X, R, cm) ; rnorm2 = cholmod_l_norm_dense (R, 0, cm) ; resid2 = rnorm2 / axbnorm ; } +#endif cholmod_l_free_dense (&R, cm) ; diff --git a/CHOLMOD/Demo/cholmod_simple.c b/CHOLMOD/Demo/cholmod_simple.c index fa60641ff..baba01235 100644 --- a/CHOLMOD/Demo/cholmod_simple.c +++ b/CHOLMOD/Demo/cholmod_simple.c @@ -36,9 +36,13 @@ int main (void) cholmod_factorize (A, L, &c) ; /* factorize */ x = cholmod_solve (CHOLMOD_A, L, b, &c) ; /* solve Ax=b */ r = cholmod_copy_dense (b, &c) ; /* r = b */ +#ifndef NMATRIXOPS cholmod_sdmult (A, 0, m1, one, x, r, &c) ; /* r = r-Ax */ printf ("norm(b-Ax) %8.1e\n", cholmod_norm_dense (r, 0, &c)) ; /* print norm(r) */ +#else + printf ("residual norm not computed (requires CHOLMOD/MatrixOps)\n") ; +#endif cholmod_free_factor (&L, &c) ; /* free matrices */ cholmod_free_sparse (&A, &c) ; cholmod_free_dense (&r, &c) ; diff --git a/CHOLMOD/Doc/CHOLMOD_UserGuide.pdf b/CHOLMOD/Doc/CHOLMOD_UserGuide.pdf index 3c2512d84f0c31873468bbaa5a40110c0f96b733..79c95301f42ca801db6c4c3434b3d9b9b6650791 100644 GIT binary patch delta 25341 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%0A9}App_i(&;24OLJh`Ns(j=Fqabt^%0@-(NtatMI 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 delta 25051 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 diff --git a/CHOLMOD/Doc/CHOLMOD_UserGuide.tex b/CHOLMOD/Doc/CHOLMOD_UserGuide.tex index b528652a5..8b1e03734 100644 --- a/CHOLMOD/Doc/CHOLMOD_UserGuide.tex +++ b/CHOLMOD/Doc/CHOLMOD_UserGuide.tex @@ -21,7 +21,7 @@ \title{User Guide for CHOLMOD: a sparse Cholesky factorization and modification package} -\date{VERSION 3.0.8, Jan 30, 2016} +\date{VERSION 3.0.9, Feb 1, 2016} \maketitle %------------------------------------------------------------------------------- @@ -2164,9 +2164,9 @@ \subsection{{\tt cholmod\_version}: return current CHOLMOD version} No CHOLMOD routines print anything, except for the {\tt cholmod\_print\_*} routines in the {\tt Check} Module, and the {\tt cholmod\_error} routine. The -{\tt Common->print\_function} is a pointer to {\tt printf} by default; +{\tt SuiteSparse\_config.printf\_function} is a pointer to {\tt printf} by default; you can redirect the output of CHOLMOD by redefining this pointer. -If {\tt Common->print\_function} is {\tt NULL}, CHOLMOD does not print anything. +If the function pointer is {\tt NULL}, CHOLMOD does not print anything. The {\tt Common->print} parameter determines how much detail is printed. Each value of {\tt Common->print} listed below also prints the items listed diff --git a/CHOLMOD/Doc/ChangeLog b/CHOLMOD/Doc/ChangeLog index 8b4869f55..26defc6bc 100644 --- a/CHOLMOD/Doc/ChangeLog +++ b/CHOLMOD/Doc/ChangeLog @@ -1,3 +1,12 @@ +Feb 1, 2016: version 3.0.9 + + * update to Makefiles + * minor change to CHOLMOD/Check/cholmod_write.c, when compiling with + -DNGPL + * more verbose error reporting + * Demos now compile with -DNGPL, but they don't compute all residuals + (requires the GPL CHOLMOD/MatrixOps package) + Jan 30, 2016: version 3.0.8 * better Makefiles for creating and installing shared libraries diff --git a/CHOLMOD/Include/cholmod_core.h b/CHOLMOD/Include/cholmod_core.h index d64149b43..6ce301c2f 100644 --- a/CHOLMOD/Include/cholmod_core.h +++ b/CHOLMOD/Include/cholmod_core.h @@ -246,11 +246,11 @@ #define CHOLMOD_HAS_VERSION_FUNCTION -#define CHOLMOD_DATE "Jan 30, 2016" +#define CHOLMOD_DATE "Feb 1, 2016" #define CHOLMOD_VER_CODE(main,sub) ((main) * 1000 + (sub)) #define CHOLMOD_MAIN_VERSION 3 #define CHOLMOD_SUB_VERSION 0 -#define CHOLMOD_SUBSUB_VERSION 8 +#define CHOLMOD_SUBSUB_VERSION 9 #define CHOLMOD_VERSION \ CHOLMOD_VER_CODE(CHOLMOD_MAIN_VERSION,CHOLMOD_SUB_VERSION) diff --git a/CHOLMOD/Lib/Makefile b/CHOLMOD/Lib/Makefile index 314b9439d..65e1e33cd 100644 --- a/CHOLMOD/Lib/Makefile +++ b/CHOLMOD/Lib/Makefile @@ -1,19 +1,35 @@ #=============================================================================== -# CHOLOMD/Lib/Makefile: for compiling the CHOLMOD library +# CHOLMOD/Lib/Makefile: for compiling the CHOLMOD library #=============================================================================== LIBRARY = libcholmod -VERSION = 3.0.8 +VERSION = 3.0.9 SO_VERSION = 3 default: library - $(MAKE) install INSTALL=$(CURDIR)/../.. \ - INSTALL_DOC=$(CURDIR)/../../doc ccode: all include ../../SuiteSparse_config/SuiteSparse_config.mk +# CHOLMOD depends on AMD, SuiteSparse_config, LAPACK, BLAS, +# and optionally METIS, CAMD, and CCOLAMD if the Partition Module is in use +LDLIBS += -lamd -lcolamd -lsuitesparseconfig \ + $(LIB_WITH_PARTITION) $(LAPACK) $(BLAS) + +SO_OPTS += $(CFOPENMP) + +#------------------------------------------------------------------------------- +# With the CUDA BLAS: +ifneq ($(GPU_CONFIG),) +LDLIBS += $(CUDART_LIB) $(CUBLAS_LIB) +endif +#------------------------------------------------------------------------------- + +# compile and install in SuiteSparse/lib +library: + $(MAKE) install INSTALL=$(SUITESPARSE) + #------------------------------------------------------------------------------- I = -I../../AMD/Include -I../../AMD/Source -I../../COLAMD/Include \ @@ -26,8 +42,6 @@ C = $(CC) $(CF) $(CHOLMOD_CONFIG) $(CONFIG_PARTITION) all: library -library: $(AR_TARGET) $(SO_TARGET) - purge: distclean distclean: clean @@ -142,9 +156,6 @@ $(AR_TARGET): $(OBJ) $(ARCHIVE) $@ $^ - $(RANLIB) $@ -$(SO_TARGET): $(OBJ) - $(CC) $(SO_OPTS) $^ -o $@ - $(OBJ): $(INC) #------------------------------------------------------------------------------- @@ -522,14 +533,13 @@ cholmod_l_gpu.o: ../GPU/cholmod_gpu.c #------------------------------------------------------------------------------- # install CHOLMOD -install: $(INSTALL_LIB)/$(SO_TARGET) +install: $(AR_TARGET) $(INSTALL_LIB)/$(SO_TARGET) -$(INSTALL_LIB)/$(SO_TARGET): $(SO_TARGET) +$(INSTALL_LIB)/$(SO_TARGET): $(OBJ) @mkdir -p $(INSTALL_LIB) @mkdir -p $(INSTALL_INCLUDE) @mkdir -p $(INSTALL_DOC) - $(CP) $(SO_TARGET) $(INSTALL_LIB) - $(SO_INSTALL_NAME) $(INSTALL_LIB)/$(SO_TARGET) $(INSTALL_LIB)/$(SO_TARGET) + $(CC) $(SO_OPTS) $^ -o $@ $(LDLIBS) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_PLAIN) ) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_MAIN) ) $(CP) ../Include/cholmod*.h $(INSTALL_INCLUDE) diff --git a/CHOLMOD/Makefile b/CHOLMOD/Makefile index 4aa3e326d..bdbf59e61 100644 --- a/CHOLMOD/Makefile +++ b/CHOLMOD/Makefile @@ -2,6 +2,9 @@ # CHOLMOD Makefile #------------------------------------------------------------------------------- +SUITESPARSE ?= $(realpath $(CURDIR)/..) +export SUITESPARSE + default: all include ../SuiteSparse_config/SuiteSparse_config.mk diff --git a/COLAMD/Demo/colamd_example.out b/COLAMD/Demo/colamd_example.out index e6478fd07..d2fbc298c 100644 --- a/COLAMD/Demo/colamd_example.out +++ b/COLAMD/Demo/colamd_example.out @@ -15,7 +15,7 @@ Column 3, with 2 entries: row 1 row 3 -colamd version 2.9, Jan 30, 2016: OK. +colamd version 2.9, Feb 1, 2016: OK. colamd: number of dense or empty rows ignored: 0 colamd: number of dense or empty columns ignored: 0 colamd: number of garbage collections performed: 0 @@ -38,7 +38,7 @@ Column 3, with 1 entries: row 4 Column 4, with 0 entries: -symamd version 2.9, Jan 30, 2016: OK. +symamd version 2.9, Feb 1, 2016: OK. symamd: number of dense or empty rows ignored: 0 symamd: number of dense or empty columns ignored: 0 symamd: number of garbage collections performed: 0 diff --git a/COLAMD/Demo/colamd_l_example.out b/COLAMD/Demo/colamd_l_example.out index b9d6f99a8..ce864b199 100644 --- a/COLAMD/Demo/colamd_l_example.out +++ b/COLAMD/Demo/colamd_l_example.out @@ -15,7 +15,7 @@ Column 3, with 2 entries: row 1 row 3 -colamd version 2.9, Jan 30, 2016: OK. +colamd version 2.9, Feb 1, 2016: OK. colamd: number of dense or empty rows ignored: 0 colamd: number of dense or empty columns ignored: 0 colamd: number of garbage collections performed: 0 @@ -38,7 +38,7 @@ Column 3, with 1 entries: row 4 Column 4, with 0 entries: -symamd version 2.9, Jan 30, 2016: OK. +symamd version 2.9, Feb 1, 2016: OK. symamd: number of dense or empty rows ignored: 0 symamd: number of dense or empty columns ignored: 0 symamd: number of garbage collections performed: 0 diff --git a/COLAMD/Doc/ChangeLog b/COLAMD/Doc/ChangeLog index b1114ad3a..349e6b9cb 100644 --- a/COLAMD/Doc/ChangeLog +++ b/COLAMD/Doc/ChangeLog @@ -1,3 +1,7 @@ +Feb 1, 2016: version 2.9.4 + + * update to Makefiles + Jan 30, 2016: version 2.9.3 * modifications to Makefiles diff --git a/COLAMD/Include/colamd.h b/COLAMD/Include/colamd.h index 7db144eb8..2d7b454ba 100644 --- a/COLAMD/Include/colamd.h +++ b/COLAMD/Include/colamd.h @@ -77,11 +77,11 @@ extern "C" { * Versions 2.3 and earlier of COLAMD do not include a #define'd version number. */ -#define COLAMD_DATE "Jan 30, 2016" +#define COLAMD_DATE "Feb 1, 2016" #define COLAMD_VERSION_CODE(main,sub) ((main) * 1000 + (sub)) #define COLAMD_MAIN_VERSION 2 #define COLAMD_SUB_VERSION 9 -#define COLAMD_SUBSUB_VERSION 3 +#define COLAMD_SUBSUB_VERSION 4 #define COLAMD_VERSION \ COLAMD_VERSION_CODE(COLAMD_MAIN_VERSION,COLAMD_SUB_VERSION) diff --git a/COLAMD/Lib/Makefile b/COLAMD/Lib/Makefile index 97b4f450f..38d5d1566 100644 --- a/COLAMD/Lib/Makefile +++ b/COLAMD/Lib/Makefile @@ -3,15 +3,20 @@ #------------------------------------------------------------------------------- LIBRARY = libcolamd -VERSION = 2.9.3 +VERSION = 2.9.4 SO_VERSION = 2 default: library - $(MAKE) install INSTALL=$(CURDIR)/../.. \ - INSTALL_DOC=$(CURDIR)/../../doc include ../../SuiteSparse_config/SuiteSparse_config.mk +# COLAMD depends on SuiteSparse_config +LDLIBS += -lsuitesparseconfig + +# compile and install in SuiteSparse/lib +library: + $(MAKE) install INSTALL=$(SUITESPARSE) + I = -I../Include -I../../SuiteSparse_config INC = ../Include/colamd.h ../../SuiteSparse_config/SuiteSparse_config.h @@ -31,13 +36,8 @@ $(AR_TARGET): $(OBJ) $(ARCHIVE) $@ $^ - $(RANLIB) $@ -$(SO_TARGET): $(OBJ) - $(CC) $(SO_OPTS) $^ -o $@ - ccode: library -library: $(AR_TARGET) $(SO_TARGET) - clean: - $(RM) -r $(CLEAN) @@ -47,14 +47,13 @@ distclean: clean - $(RM) -r $(PURGE) # install COLAMD -install: $(INSTALL_LIB)/$(SO_TARGET) +install: $(AR_TARGET) $(INSTALL_LIB)/$(SO_TARGET) -$(INSTALL_LIB)/$(SO_TARGET): $(SO_TARGET) +$(INSTALL_LIB)/$(SO_TARGET): $(OBJ) @mkdir -p $(INSTALL_LIB) @mkdir -p $(INSTALL_INCLUDE) @mkdir -p $(INSTALL_DOC) - $(CP) $(SO_TARGET) $(INSTALL_LIB) - $(SO_INSTALL_NAME) $(INSTALL_LIB)/$(SO_TARGET) $(INSTALL_LIB)/$(SO_TARGET) + $(CC) $(SO_OPTS) $^ -o $@ $(LDLIBS) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_PLAIN) ) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_MAIN) ) $(CP) ../Include/colamd.h $(INSTALL_INCLUDE) diff --git a/COLAMD/Makefile b/COLAMD/Makefile index e0bcd04a3..cefc4257c 100644 --- a/COLAMD/Makefile +++ b/COLAMD/Makefile @@ -2,6 +2,9 @@ # COLAMD Makefile #------------------------------------------------------------------------------ +SUITESPARSE ?= $(realpath $(CURDIR)/..) +export SUITESPARSE + default: all include ../SuiteSparse_config/SuiteSparse_config.mk diff --git a/CSparse/Demo/Makefile b/CSparse/Demo/Makefile index 84d43aa70..3f02e020c 100644 --- a/CSparse/Demo/Makefile +++ b/CSparse/Demo/Makefile @@ -2,7 +2,7 @@ CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O I = -I../Include LDLIBS += -lm -CS = $(LDFLAGS) -L../Lib -lcsparse $(LDLIBS) +CS = $(LDFLAGS) ../Lib/libcsparse.a $(LDLIBS) all: lib cs_demo1 cs_demo2 cs_demo3 - ./cs_demo1 < ../Matrix/t1 diff --git a/CSparse/Doc/ChangeLog b/CSparse/Doc/ChangeLog index 12aa9a41a..e48da6297 100644 --- a/CSparse/Doc/ChangeLog +++ b/CSparse/Doc/ChangeLog @@ -1,3 +1,7 @@ +Feb 1, 2016: version 3.1.7 + + * update to Makefiles + Jan 30, 2016: version 3.1.6 * correction to Makefiles diff --git a/CSparse/Include/cs.h b/CSparse/Include/cs.h index 3d3719778..3abc86193 100644 --- a/CSparse/Include/cs.h +++ b/CSparse/Include/cs.h @@ -10,8 +10,8 @@ #endif #define CS_VER 3 /* CSparse Version */ #define CS_SUBVER 1 -#define CS_SUBSUB 6 -#define CS_DATE "Jan 30, 2016" /* CSparse release date */ +#define CS_SUBSUB 7 +#define CS_DATE "Feb 1, 2016" /* CSparse release date */ #define CS_COPYRIGHT "Copyright (c) Timothy A. Davis, 2006-2016" #ifdef MATLAB_MEX_FILE diff --git a/CSparse/Lib/Makefile b/CSparse/Lib/Makefile index c54ed2663..ec57e71e0 100644 --- a/CSparse/Lib/Makefile +++ b/CSparse/Lib/Makefile @@ -9,18 +9,12 @@ # To run a demo using the library # cd ../Demo ; make # -# To install CSparse for all users, do this in the command line: -# make install -# Once you do this, you can just compile your program with: -# cc myprogram.c -lcsparse -# where myprogram.c needs to have the line: -# #include "cs.h" -# See Demo/cs_demo1.c for an example, which can now be compiled with -# cc cs_demo1.c -o cs_demo1 -lcsparse +# For system-wide installation, I recommend that you install CXSparse instead. +# The CSparse library is meant for personal experimentation. The 'make +# install' in this Makefile only installs a static compiled library in +# CSparse/Lib. It does not install it for system-wide usage. LIBRARY = libcsparse -VERSION = 3.1.6 -SO_VERSION = 3 CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O -fPIC I = -I../Include @@ -28,46 +22,9 @@ RANLIB = ranlib ARCHIVE = $(AR) $(ARFLAGS) CP = cp -f -# how to build/install shared and static libraries for Mac and Linux: -# For "make install" and "make uninstall" -ifeq ($(wildcard $(INSTALL)),) - # default location is /usr/local/lib and /usr/local/include - INSTALL = /usr/local -endif -INSTALL_LIB = $(INSTALL)/lib -INSTALL_INCLUDE = $(INSTALL)/include -INSTALL_DOC = /usr/share/doc/CSparse-$(VERSION) -ifeq ($(OS),Windows_NT) - # Windows (untested) - AR_TARGET = $(LIBRARY).lib - SO_PLAIN = $(LIBRARY).dll - SO_MAIN = $(LIBRARY).$(SO_VERSION).dll - SO_TARGET = $(LIBRARY).$(VERSION).dll - SO_INSTALL_NAME = echo -else - # Mac or Linux/Unix - UNAME := $(shell uname) - AR_TARGET = $(LIBRARY).a - ifeq ($(UNAME),Darwin) - # Mac - SO_PLAIN = $(LIBRARY).dylib - SO_MAIN = $(LIBRARY).$(SO_VERSION).dylib - SO_TARGET = $(LIBRARY).$(VERSION).dylib - SO_OPTS = -dynamiclib -compatibility_version $(VERSION) \ - -current_version $(VERSION) \ - -shared -undefined dynamic_lookup - SO_INSTALL_NAME = install_name_tool -id - else - # Linux and other variants of Unix - SO_PLAIN = $(LIBRARY).so - SO_MAIN = $(LIBRARY).so.$(SO_VERSION) - SO_TARGET = $(LIBRARY).so.$(VERSION) - SO_OPTS = -shared -lm -Wl,-soname -Wl,$(SO_MAIN) - SO_INSTALL_NAME = echo - endif -endif +AR_TARGET = $(LIBRARY).a -all: $(AR_TARGET) $(SO_TARGET) +all: install CS = cs_add.o cs_amd.o cs_chol.o cs_cholsol.o cs_counts.o cs_cumsum.o \ cs_droptol.o cs_dropzeros.o cs_dupl.o cs_entry.o \ @@ -88,33 +45,11 @@ $(AR_TARGET): $(CS) $(ARCHIVE) $@ $^ - $(RANLIB) $@ -$(SO_TARGET): $(CS) - $(CC) $(SO_OPTS) $^ -o $@ - -# install CSparse -install: $(INSTALL_LIB)/$(SO_TARGET) - -$(INSTALL_LIB)/$(SO_TARGET): $(SO_TARGET) - @mkdir -p $(INSTALL_LIB) - @mkdir -p $(INSTALL_INCLUDE) - @mkdir -p $(INSTALL_DOC) - $(CP) $(SO_TARGET) $(INSTALL_LIB) - $(SO_INSTALL_NAME) $(INSTALL_LIB)/$(SO_TARGET) $(INSTALL_LIB)/$(SO_TARGET) - ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_PLAIN) ) - ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_MAIN) ) - $(CP) ../Include/cs.h $(INSTALL_INCLUDE) - $(CP) ../README.txt $(INSTALL_DOC)/CSPARSE_README.txt - chmod 755 $(INSTALL_LIB)/$(SO_TARGET) - chmod 644 $(INSTALL_INCLUDE)/cs.h - chmod 644 $(INSTALL_DOC)/CSPARSE_README.txt +# install CSparse in this directory +install: $(AR_TARGET) # uninstall CSparse -uninstall: - $(RM) $(INSTALL_LIB)/$(SO_TARGET) - $(RM) $(INSTALL_LIB)/$(SO_PLAIN) - $(RM) $(INSTALL_LIB)/$(SO_MAIN) - $(RM) $(INSTALL_INCLUDE)/cs.h - $(RM) $(INSTALL_DOC)/CSPARSE_README.txt +uninstall: purge clean: - $(RM) *.o diff --git a/CSparse/README.txt b/CSparse/README.txt index fd378ebb8..b27f35b86 100644 --- a/CSparse/README.txt +++ b/CSparse/README.txt @@ -1,5 +1,5 @@ CSparse: a Concise Sparse Matrix package. -VERSION 3.1.6, Copyright (c) 2006-2016, Timothy A. Davis. +VERSION 3.1.7, Copyright (c) 2006-2016, Timothy A. Davis. http://www.suitesparse.com Refer to "Direct Methods for Sparse Linear Systems," Timothy A. Davis, diff --git a/CXSparse/Demo/cs_demo.out b/CXSparse/Demo/cs_demo.out index 356ceff2f..280dc6b50 100644 --- a/CXSparse/Demo/cs_demo.out +++ b/CXSparse/Demo/cs_demo.out @@ -1,15 +1,24 @@ -( cd ../Lib ; /Applications/Xcode.app/Contents/Developer/usr/bin/make ) -/Applications/Xcode.app/Contents/Developer/usr/bin/make install INSTALL=/Users/davis/sparse/SuiteSparse/CXSparse/Lib/../.. +make[1]: Entering directory `/research/davis/sparse/SuiteSparse/CXSparse/Demo' +( cd ../Lib ; make ) +make[2]: Entering directory `/research/davis/sparse/SuiteSparse/CXSparse/Lib' +make install INSTALL=/research/davis/sparse/SuiteSparse +make[3]: Entering directory `/research/davis/sparse/SuiteSparse/CXSparse/Lib' make[3]: Nothing to be done for `install'. -( cd ../../SuiteSparse_config ; /Applications/Xcode.app/Contents/Developer/usr/bin/make ) -/Applications/Xcode.app/Contents/Developer/usr/bin/make install INSTALL=/Users/davis/sparse/SuiteSparse/SuiteSparse_config/.. +make[3]: Leaving directory `/research/davis/sparse/SuiteSparse/CXSparse/Lib' +make[2]: Leaving directory `/research/davis/sparse/SuiteSparse/CXSparse/Lib' +( cd ../../SuiteSparse_config ; make ) +make[2]: Entering directory `/research/davis/sparse/SuiteSparse/SuiteSparse_config' +make install INSTALL=/research/davis/sparse/SuiteSparse +make[3]: Entering directory `/research/davis/sparse/SuiteSparse/SuiteSparse_config' make[3]: Nothing to be done for `install'. +make[3]: Leaving directory `/research/davis/sparse/SuiteSparse/SuiteSparse_config' +make[2]: Leaving directory `/research/davis/sparse/SuiteSparse/SuiteSparse_config' ./cs_idemo < ../Matrix/t2 --- cs_idemo, size of CS_INT: 4 T: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 triplet: 4-by-4, nzmax: 16 nnz: 10 2 2 : (3, 3.14159) 1 0 : (3.1, 42) @@ -23,7 +32,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10 2 1 : (1.7, 1) Treal: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 triplet: 4-by-4, nzmax: 16 nnz: 10 2 2 : 3 1 0 : 3.1 @@ -37,7 +46,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10 2 1 : 1.7 Timag: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 triplet: 4-by-4, nzmax: 16 nnz: 10 2 2 : 3.14159 1 0 : 42 @@ -51,7 +60,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10 2 1 : 1 A: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106.075 col 0 : locations 0 to 2 1 : (3.1, 42) @@ -69,7 +78,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 1 : (0.9, 99) C1 = real(A): -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 11.1 col 0 : locations 0 to 2 1 : 3.1 @@ -87,7 +96,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 1 : 0.9 C2 = imag(A): -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106 col 0 : locations 0 to 2 1 : 42 @@ -105,7 +114,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 1 : 99 A1: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 11.1 col 0 : locations 0 to 2 1 : (3.1, 0) @@ -123,7 +132,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 1 : (0.9, 0) A2: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106 col 0 : locations 0 to 2 1 : (0, 42) @@ -141,7 +150,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 1 : (0, 99) B = conj(A): -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106.075 col 0 : locations 0 to 2 1 : (3.1, -42) @@ -162,7 +171,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 --- cs_ldemo, size of CS_INT: 8 T: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 triplet: 4-by-4, nzmax: 16 nnz: 10 2 2 : (3, 3.14159) 1 0 : (3.1, 42) @@ -176,7 +185,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10 2 1 : (1.7, 1) Treal: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 triplet: 4-by-4, nzmax: 16 nnz: 10 2 2 : 3 1 0 : 3.1 @@ -190,7 +199,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10 2 1 : 1.7 Timag: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 triplet: 4-by-4, nzmax: 16 nnz: 10 2 2 : 3.14159 1 0 : 42 @@ -204,7 +213,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10 2 1 : 1 A: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106.075 col 0 : locations 0 to 2 1 : (3.1, 42) @@ -222,7 +231,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 1 : (0.9, 99) C1 = real(A): -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 11.1 col 0 : locations 0 to 2 1 : 3.1 @@ -240,7 +249,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 1 : 0.9 C2 = imag(A): -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106 col 0 : locations 0 to 2 1 : 42 @@ -258,7 +267,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 1 : 99 A1: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 11.1 col 0 : locations 0 to 2 1 : (3.1, 0) @@ -276,7 +285,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 1 : (0.9, 0) A2: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106 col 0 : locations 0 to 2 1 : (0, 42) @@ -294,7 +303,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 1 : (0, 99) B = conj(A): -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106.075 col 0 : locations 0 to 2 1 : (3.1, -42) @@ -312,7 +321,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 1 : (0.9, -99) ./cs_demo1 < ../Matrix/t1 T: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 triplet: 4-by-4, nzmax: 16 nnz: 10 2 2 : 3 1 0 : 3.1 @@ -325,7 +334,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10 0 0 : 4.5 2 1 : 1.7 A: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 11.1 col 0 : locations 0 to 2 1 : 3.1 @@ -342,7 +351,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 3 : 1 1 : 0.9 AT: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 7.7 col 0 : locations 0 to 1 0 : 4.5 @@ -359,7 +368,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 1 : 0.4 3 : 1 D: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 16 nnz: 16, 1-norm: 139.58 col 0 : locations 0 to 3 1 : 13.95 @@ -397,8 +406,8 @@ LU amd(A'*A) time: 0.00 resid: 1.53e-17 zero entries dropped: 71 tiny entries dropped: 10 blocks: 38 singletons: 37 structural rank: 183 -QR natural time: 0.00 resid: 1.42e-27 -QR amd(A'*A) time: 0.00 resid: 3.35e-28 +QR natural time: 0.00 resid: 6.62e-28 +QR amd(A'*A) time: 0.00 resid: 4.62e-28 LU natural time: 0.00 resid: 6.20e-28 LU amd(A+A') time: 0.00 resid: 1.55e-27 LU amd(S'*S) time: 0.00 resid: 6.98e-28 @@ -407,8 +416,8 @@ LU amd(A'*A) time: 0.00 resid: 6.98e-28 --- Matrix: 67-by-67, nnz: 294 (sym: 0: nnz 0), norm: 6.14e+00 blocks: 2 singletons: 1 structural rank: 67 -QR natural time: 0.00 resid: 5.19e-17 -QR amd(A'*A) time: 0.00 resid: 3.25e-17 +QR natural time: 0.00 resid: 3.33e-17 +QR amd(A'*A) time: 0.00 resid: 5.84e-17 LU natural time: 0.00 resid: 3.89e-17 LU amd(A+A') time: 0.00 resid: 2.27e-17 LU amd(S'*S) time: 0.00 resid: 1.95e-17 @@ -417,8 +426,8 @@ LU amd(A'*A) time: 0.00 resid: 2.60e-17 --- Matrix: 27-by-51, nnz: 102 (sym: 0: nnz 0), norm: 3.43e+00 blocks: 1 singletons: 0 structural rank: 27 -QR natural time: 0.00 resid: 3.85e-16 -QR amd(A'*A) time: 0.00 resid: 1.50e-16 +QR natural time: 0.00 resid: 2.25e-16 +QR amd(A'*A) time: 0.00 resid: 1.61e-16 ./cs_demo2 < ../Matrix/ash219 --- Matrix: 219-by-85, nnz: 438 (sym: 0: nnz 0), norm: 9.00e+00 @@ -429,14 +438,14 @@ QR amd(A'*A) time: 0.00 resid: 1.61e-02 --- Matrix: 492-by-490, nnz: 49920 (sym: 0: nnz 0), norm: 9.29e-01 blocks: 10 singletons: 8 structural rank: 448 -QR natural time: 0.06 resid: nan -QR amd(A'*A) time: 0.05 resid: nan +QR natural time: 0.03 resid: nan +QR amd(A'*A) time: 0.03 resid: nan ./cs_demo2 < ../Matrix/bcsstk01 --- Matrix: 48-by-48, nnz: 224 (sym: -1: nnz 400), norm: 3.57e+09 blocks: 1 singletons: 0 structural rank: 48 -QR natural time: 0.00 resid: 3.65e-19 -QR amd(A'*A) time: 0.00 resid: 4.02e-19 +QR natural time: 0.00 resid: 3.15e-19 +QR amd(A'*A) time: 0.00 resid: 2.55e-19 LU natural time: 0.00 resid: 2.17e-19 LU amd(A+A') time: 0.00 resid: 1.87e-19 LU amd(S'*S) time: 0.00 resid: 2.38e-19 @@ -453,36 +462,36 @@ numeric chol time 0.00 solve chol time 0.00 original: resid: 2.55e-19 update: time: 0.00 -update: time: 0.00 (incl solve) resid: 3.52e-18 -rechol: time: 0.00 (incl solve) resid: 2.93e-18 +update: time: 0.00 (incl solve) resid: 9.66e-19 +rechol: time: 0.00 (incl solve) resid: 1.55e-18 downdate: time: 0.00 -downdate: time: 0.00 (incl solve) resid: 4.32e-17 +downdate: time: 0.00 (incl solve) resid: 3.74e-17 ./cs_demo2 < ../Matrix/bcsstk16 --- Matrix: 4884-by-4884, nnz: 147631 (sym: -1: nnz 290378), norm: 7.01e+09 blocks: 75 singletons: 74 structural rank: 4884 -QR amd(A'*A) time: 0.55 resid: 2.01e-22 -LU amd(A+A') time: 0.27 resid: 1.10e-22 -LU amd(S'*S) time: 0.27 resid: 1.28e-22 -LU amd(A'*A) time: 0.28 resid: 1.78e-22 -Chol amd(A+A') time: 0.08 resid: 1.19e-22 +QR amd(A'*A) time: 0.32 resid: 9.72e-23 +LU amd(A+A') time: 0.21 resid: 1.10e-22 +LU amd(S'*S) time: 0.22 resid: 1.28e-22 +LU amd(A'*A) time: 0.23 resid: 1.78e-22 +Chol amd(A+A') time: 0.07 resid: 1.19e-22 ./cs_demo3 < ../Matrix/bcsstk16 --- Matrix: 4884-by-4884, nnz: 147631 (sym: -1: nnz 290378), norm: 7.01e+09 chol then update/downdate amd(A+A') -symbolic chol time 0.01 -numeric chol time 0.08 +symbolic chol time 0.00 +numeric chol time 0.06 solve chol time 0.00 original: resid: 1.19e-22 update: time: 0.00 -update: time: 0.00 (incl solve) resid: 1.71e-23 -rechol: time: 0.07 (incl solve) resid: 1.61e-23 +update: time: 0.00 (incl solve) resid: 1.12e-23 +rechol: time: 0.06 (incl solve) resid: 1.17e-23 downdate: time: 0.00 -downdate: time: 0.00 (incl solve) resid: 1.24e-21 +downdate: time: 0.00 (incl solve) resid: 4.09e-22 ./cs_di_demo1 < ../Matrix/t1 T: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 triplet: 4-by-4, nzmax: 16 nnz: 10 2 2 : 3 1 0 : 3.1 @@ -495,7 +504,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10 0 0 : 4.5 2 1 : 1.7 A: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 11.1 col 0 : locations 0 to 2 1 : 3.1 @@ -512,7 +521,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 3 : 1 1 : 0.9 AT: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 7.7 col 0 : locations 0 to 1 0 : 4.5 @@ -529,7 +538,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 1 : 0.4 3 : 1 D: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 16 nnz: 16, 1-norm: 139.58 col 0 : locations 0 to 3 1 : 13.95 @@ -567,8 +576,8 @@ LU amd(A'*A) time: 0.00 resid: 1.53e-17 zero entries dropped: 71 tiny entries dropped: 10 blocks: 38 singletons: 37 structural rank: 183 -QR natural time: 0.00 resid: 1.42e-27 -QR amd(A'*A) time: 0.00 resid: 3.35e-28 +QR natural time: 0.00 resid: 6.62e-28 +QR amd(A'*A) time: 0.00 resid: 4.62e-28 LU natural time: 0.00 resid: 6.20e-28 LU amd(A+A') time: 0.00 resid: 1.55e-27 LU amd(S'*S) time: 0.00 resid: 6.98e-28 @@ -577,8 +586,8 @@ LU amd(A'*A) time: 0.00 resid: 6.98e-28 --- Matrix: 67-by-67, nnz: 294 (sym: 0: nnz 0), norm: 6.14e+00 blocks: 2 singletons: 1 structural rank: 67 -QR natural time: 0.00 resid: 5.19e-17 -QR amd(A'*A) time: 0.00 resid: 3.25e-17 +QR natural time: 0.00 resid: 3.33e-17 +QR amd(A'*A) time: 0.00 resid: 5.84e-17 LU natural time: 0.00 resid: 3.89e-17 LU amd(A+A') time: 0.00 resid: 2.27e-17 LU amd(S'*S) time: 0.00 resid: 1.95e-17 @@ -587,8 +596,8 @@ LU amd(A'*A) time: 0.00 resid: 2.60e-17 --- Matrix: 27-by-51, nnz: 102 (sym: 0: nnz 0), norm: 3.43e+00 blocks: 1 singletons: 0 structural rank: 27 -QR natural time: 0.00 resid: 3.85e-16 -QR amd(A'*A) time: 0.00 resid: 1.50e-16 +QR natural time: 0.00 resid: 2.25e-16 +QR amd(A'*A) time: 0.00 resid: 1.61e-16 ./cs_di_demo2 < ../Matrix/ash219 --- Matrix: 219-by-85, nnz: 438 (sym: 0: nnz 0), norm: 9.00e+00 @@ -599,14 +608,14 @@ QR amd(A'*A) time: 0.00 resid: 1.61e-02 --- Matrix: 492-by-490, nnz: 49920 (sym: 0: nnz 0), norm: 9.29e-01 blocks: 10 singletons: 8 structural rank: 448 -QR natural time: 0.04 resid: nan -QR amd(A'*A) time: 0.06 resid: nan +QR natural time: 0.02 resid: nan +QR amd(A'*A) time: 0.04 resid: nan ./cs_di_demo2 < ../Matrix/bcsstk01 --- Matrix: 48-by-48, nnz: 224 (sym: -1: nnz 400), norm: 3.57e+09 blocks: 1 singletons: 0 structural rank: 48 -QR natural time: 0.00 resid: 3.65e-19 -QR amd(A'*A) time: 0.00 resid: 4.02e-19 +QR natural time: 0.00 resid: 3.15e-19 +QR amd(A'*A) time: 0.00 resid: 2.55e-19 LU natural time: 0.00 resid: 2.17e-19 LU amd(A+A') time: 0.00 resid: 1.87e-19 LU amd(S'*S) time: 0.00 resid: 2.38e-19 @@ -623,36 +632,36 @@ numeric chol time 0.00 solve chol time 0.00 original: resid: 2.55e-19 update: time: 0.00 -update: time: 0.00 (incl solve) resid: 3.52e-18 -rechol: time: 0.00 (incl solve) resid: 2.93e-18 +update: time: 0.00 (incl solve) resid: 9.66e-19 +rechol: time: 0.00 (incl solve) resid: 1.55e-18 downdate: time: 0.00 -downdate: time: 0.00 (incl solve) resid: 4.32e-17 +downdate: time: 0.00 (incl solve) resid: 3.74e-17 ./cs_di_demo2 < ../Matrix/bcsstk16 --- Matrix: 4884-by-4884, nnz: 147631 (sym: -1: nnz 290378), norm: 7.01e+09 blocks: 75 singletons: 74 structural rank: 4884 -QR amd(A'*A) time: 0.55 resid: 2.01e-22 -LU amd(A+A') time: 0.28 resid: 1.10e-22 -LU amd(S'*S) time: 0.33 resid: 1.28e-22 -LU amd(A'*A) time: 0.30 resid: 1.78e-22 -Chol amd(A+A') time: 0.09 resid: 1.19e-22 +QR amd(A'*A) time: 0.32 resid: 9.72e-23 +LU amd(A+A') time: 0.21 resid: 1.10e-22 +LU amd(S'*S) time: 0.22 resid: 1.28e-22 +LU amd(A'*A) time: 0.23 resid: 1.78e-22 +Chol amd(A+A') time: 0.06 resid: 1.19e-22 ./cs_di_demo3 < ../Matrix/bcsstk16 --- Matrix: 4884-by-4884, nnz: 147631 (sym: -1: nnz 290378), norm: 7.01e+09 chol then update/downdate amd(A+A') symbolic chol time 0.01 -numeric chol time 0.08 +numeric chol time 0.05 solve chol time 0.00 original: resid: 1.19e-22 update: time: 0.00 -update: time: 0.00 (incl solve) resid: 1.71e-23 -rechol: time: 0.08 (incl solve) resid: 1.61e-23 +update: time: 0.00 (incl solve) resid: 1.12e-23 +rechol: time: 0.07 (incl solve) resid: 1.17e-23 downdate: time: 0.00 -downdate: time: 0.00 (incl solve) resid: 1.24e-21 +downdate: time: 0.00 (incl solve) resid: 4.09e-22 ./cs_dl_demo1 < ../Matrix/t1 T: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 triplet: 4-by-4, nzmax: 16 nnz: 10 2 2 : 3 1 0 : 3.1 @@ -665,7 +674,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10 0 0 : 4.5 2 1 : 1.7 A: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 11.1 col 0 : locations 0 to 2 1 : 3.1 @@ -682,7 +691,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 3 : 1 1 : 0.9 AT: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 7.7 col 0 : locations 0 to 1 0 : 4.5 @@ -699,7 +708,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 1 : 0.4 3 : 1 D: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 16 nnz: 16, 1-norm: 139.58 col 0 : locations 0 to 3 1 : 13.95 @@ -737,18 +746,18 @@ LU amd(A'*A) time: 0.00 resid: 1.53e-17 zero entries dropped: 71 tiny entries dropped: 10 blocks: 38 singletons: 37 structural rank: 183 -QR natural time: 0.00 resid: 1.42e-27 -QR amd(A'*A) time: 0.00 resid: 3.35e-28 +QR natural time: 0.00 resid: 6.62e-28 +QR amd(A'*A) time: 0.00 resid: 4.62e-28 LU natural time: 0.00 resid: 6.20e-28 -LU amd(A+A') time: 0.00 resid: 1.55e-27 +LU amd(A+A') time: 0.01 resid: 1.55e-27 LU amd(S'*S) time: 0.00 resid: 6.98e-28 LU amd(A'*A) time: 0.00 resid: 6.98e-28 ./cs_dl_demo2 < ../Matrix/west0067 --- Matrix: 67-by-67, nnz: 294 (sym: 0: nnz 0), norm: 6.14e+00 blocks: 2 singletons: 1 structural rank: 67 -QR natural time: 0.00 resid: 5.19e-17 -QR amd(A'*A) time: 0.00 resid: 3.25e-17 +QR natural time: 0.00 resid: 3.33e-17 +QR amd(A'*A) time: 0.00 resid: 5.84e-17 LU natural time: 0.00 resid: 3.89e-17 LU amd(A+A') time: 0.00 resid: 2.27e-17 LU amd(S'*S) time: 0.00 resid: 1.95e-17 @@ -757,8 +766,8 @@ LU amd(A'*A) time: 0.00 resid: 2.60e-17 --- Matrix: 27-by-51, nnz: 102 (sym: 0: nnz 0), norm: 3.43e+00 blocks: 1 singletons: 0 structural rank: 27 -QR natural time: 0.00 resid: 3.85e-16 -QR amd(A'*A) time: 0.00 resid: 1.50e-16 +QR natural time: 0.00 resid: 2.25e-16 +QR amd(A'*A) time: 0.00 resid: 1.61e-16 ./cs_dl_demo2 < ../Matrix/ash219 --- Matrix: 219-by-85, nnz: 438 (sym: 0: nnz 0), norm: 9.00e+00 @@ -769,14 +778,14 @@ QR amd(A'*A) time: 0.00 resid: 1.61e-02 --- Matrix: 492-by-490, nnz: 49920 (sym: 0: nnz 0), norm: 9.29e-01 blocks: 10 singletons: 8 structural rank: 448 -QR natural time: 0.04 resid: nan -QR amd(A'*A) time: 0.06 resid: nan +QR natural time: 0.02 resid: nan +QR amd(A'*A) time: 0.04 resid: nan ./cs_dl_demo2 < ../Matrix/bcsstk01 --- Matrix: 48-by-48, nnz: 224 (sym: -1: nnz 400), norm: 3.57e+09 blocks: 1 singletons: 0 structural rank: 48 -QR natural time: 0.00 resid: 3.65e-19 -QR amd(A'*A) time: 0.00 resid: 4.02e-19 +QR natural time: 0.00 resid: 3.15e-19 +QR amd(A'*A) time: 0.00 resid: 2.55e-19 LU natural time: 0.00 resid: 2.17e-19 LU amd(A+A') time: 0.00 resid: 1.87e-19 LU amd(S'*S) time: 0.00 resid: 2.38e-19 @@ -793,36 +802,36 @@ numeric chol time 0.00 solve chol time 0.00 original: resid: 2.55e-19 update: time: 0.00 -update: time: 0.00 (incl solve) resid: 3.52e-18 -rechol: time: 0.00 (incl solve) resid: 2.93e-18 +update: time: 0.00 (incl solve) resid: 9.66e-19 +rechol: time: 0.00 (incl solve) resid: 1.55e-18 downdate: time: 0.00 -downdate: time: 0.00 (incl solve) resid: 4.32e-17 +downdate: time: 0.00 (incl solve) resid: 3.74e-17 ./cs_dl_demo2 < ../Matrix/bcsstk16 --- Matrix: 4884-by-4884, nnz: 147631 (sym: -1: nnz 290378), norm: 7.01e+09 blocks: 75 singletons: 74 structural rank: 4884 -QR amd(A'*A) time: 0.58 resid: 2.01e-22 -LU amd(A+A') time: 0.28 resid: 1.10e-22 -LU amd(S'*S) time: 0.29 resid: 1.28e-22 -LU amd(A'*A) time: 0.34 resid: 1.78e-22 -Chol amd(A+A') time: 0.11 resid: 1.19e-22 +QR amd(A'*A) time: 0.33 resid: 9.72e-23 +LU amd(A+A') time: 0.20 resid: 1.10e-22 +LU amd(S'*S) time: 0.22 resid: 1.28e-22 +LU amd(A'*A) time: 0.22 resid: 1.78e-22 +Chol amd(A+A') time: 0.07 resid: 1.19e-22 ./cs_dl_demo3 < ../Matrix/bcsstk16 --- Matrix: 4884-by-4884, nnz: 147631 (sym: -1: nnz 290378), norm: 7.01e+09 chol then update/downdate amd(A+A') symbolic chol time 0.01 -numeric chol time 0.09 +numeric chol time 0.06 solve chol time 0.00 original: resid: 1.19e-22 update: time: 0.00 -update: time: 0.00 (incl solve) resid: 1.71e-23 -rechol: time: 0.09 (incl solve) resid: 1.61e-23 +update: time: 0.00 (incl solve) resid: 1.12e-23 +rechol: time: 0.06 (incl solve) resid: 1.17e-23 downdate: time: 0.00 -downdate: time: 0.00 (incl solve) resid: 1.24e-21 +downdate: time: 0.00 (incl solve) resid: 4.09e-22 ./cs_ci_demo1 < ../Matrix/t2 T: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 triplet: 4-by-4, nzmax: 16 nnz: 10 2 2 : (3, 3.14159) 1 0 : (3.1, 42) @@ -835,7 +844,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10 0 0 : (4.5, 6) 2 1 : (1.7, 1) A: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106.075 col 0 : locations 0 to 2 1 : (3.1, 42) @@ -852,7 +861,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 3 : (1, 7) 1 : (0.9, 99) AT: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 144.296 col 0 : locations 0 to 1 0 : (4.5, -6) @@ -869,7 +878,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 1 : (0.4, -2.71828) 3 : (1, -7) D: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 16 nnz: 16, 1-norm: 25308.3 col 0 : locations 0 to 3 1 : (265.95, 170.4) @@ -895,12 +904,12 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 --- Matrix: 4-by-4, nnz: 10 (sym: 0: nnz 0), norm: 1.06e+02 blocks: 1 singletons: 0 structural rank: 4 -QR natural time: 0.00 resid: 1.95e-17 -QR amd(A'*A) time: 0.00 resid: 3.09e-17 -LU natural time: 0.00 resid: 7.38e-18 -LU amd(A+A') time: 0.00 resid: 5.40e-18 -LU amd(S'*S) time: 0.00 resid: 3.84e-18 -LU amd(A'*A) time: 0.00 resid: 5.40e-18 +QR natural time: 0.00 resid: 2.10e-17 +QR amd(A'*A) time: 0.00 resid: 2.51e-17 +LU natural time: 0.00 resid: 5.25e-18 +LU amd(A+A') time: 0.00 resid: 3.65e-18 +LU amd(S'*S) time: 0.00 resid: 6.90e-18 +LU amd(A'*A) time: 0.00 resid: 3.65e-18 ./cs_ci_demo2 < ../Matrix/t3 --- Matrix: 3-by-4, nnz: 12 (sym: 0: nnz 0), norm: 3.06e+00 @@ -923,58 +932,58 @@ Chol amd(A+A') time: 0.00 (failed) --- Matrix: 67-by-67, nnz: 294 (sym: 0: nnz 0), norm: 6.17e+00 blocks: 2 singletons: 1 structural rank: 67 -QR natural time: 0.00 resid: 7.86e-17 -QR amd(A'*A) time: 0.00 resid: 1.13e-16 -LU natural time: 0.00 resid: 6.30e-17 -LU amd(A+A') time: 0.00 resid: 5.29e-17 -LU amd(S'*S) time: 0.00 resid: 5.28e-17 -LU amd(A'*A) time: 0.00 resid: 4.33e-17 +QR natural time: 0.00 resid: 7.53e-17 +QR amd(A'*A) time: 0.00 resid: 1.15e-16 +LU natural time: 0.00 resid: 5.44e-17 +LU amd(A+A') time: 0.00 resid: 8.06e-17 +LU amd(S'*S) time: 0.00 resid: 6.73e-17 +LU amd(A'*A) time: 0.00 resid: 3.80e-17 ./cs_ci_demo2 < ../Matrix/c_mbeacxc --- Matrix: 492-by-490, nnz: 49920 (sym: 0: nnz 0), norm: 9.29e-01 blocks: 10 singletons: 8 structural rank: 448 -QR natural time: 0.14 resid: nan -QR amd(A'*A) time: 0.15 resid: nan +QR natural time: 0.06 resid: nan +QR amd(A'*A) time: 0.08 resid: nan ./cs_ci_demo2 < ../Matrix/young1c --- Matrix: 841-by-841, nnz: 4089 (sym: 0: nnz 0), norm: 7.30e+02 blocks: 1 singletons: 0 structural rank: 841 -QR natural time: 0.01 resid: 1.76e-16 -QR amd(A'*A) time: 0.01 resid: 1.36e-16 -LU natural time: 0.01 resid: 1.56e-16 -LU amd(A+A') time: 0.01 resid: 3.55e-16 -LU amd(S'*S) time: 0.00 resid: 2.93e-16 -LU amd(A'*A) time: 0.00 resid: 2.93e-16 +QR natural time: 0.00 resid: 1.71e-16 +QR amd(A'*A) time: 0.00 resid: 1.43e-16 +LU natural time: 0.01 resid: 1.43e-16 +LU amd(A+A') time: 0.00 resid: 3.18e-16 +LU amd(S'*S) time: 0.00 resid: 3.16e-16 +LU amd(A'*A) time: 0.01 resid: 3.16e-16 ./cs_ci_demo2 < ../Matrix/qc324 --- Matrix: 324-by-324, nnz: 26730 (sym: 0: nnz 0), norm: 1.71e+00 blocks: 1 singletons: 0 structural rank: 324 -QR natural time: 0.02 resid: 9.31e-17 -QR amd(A'*A) time: 0.03 resid: 9.34e-17 -LU natural time: 0.01 resid: 4.32e-17 -LU amd(A+A') time: 0.01 resid: 3.99e-17 -LU amd(S'*S) time: 0.01 resid: 4.00e-17 -LU amd(A'*A) time: 0.01 resid: 4.00e-17 +QR natural time: 0.01 resid: 9.24e-17 +QR amd(A'*A) time: 0.02 resid: 8.71e-17 +LU natural time: 0.00 resid: 3.70e-17 +LU amd(A+A') time: 0.01 resid: 5.05e-17 +LU amd(S'*S) time: 0.00 resid: 3.70e-17 +LU amd(A'*A) time: 0.01 resid: 3.70e-17 ./cs_ci_demo2 < ../Matrix/neumann --- Matrix: 1600-by-1600, nnz: 7840 (sym: 0: nnz 0), norm: 1.41e+01 blocks: 1 singletons: 0 structural rank: 1600 -QR amd(A'*A) time: 0.02 resid: 8.80e-16 -LU amd(A+A') time: 0.00 resid: 4.59e-16 -LU amd(S'*S) time: 0.01 resid: 4.56e-16 -LU amd(A'*A) time: 0.01 resid: 4.56e-16 +QR amd(A'*A) time: 0.01 resid: 1.18e-15 +LU amd(A+A') time: 0.00 resid: 3.55e-16 +LU amd(S'*S) time: 0.00 resid: 4.03e-16 +LU amd(A'*A) time: 0.00 resid: 4.03e-16 ./cs_ci_demo2 < ../Matrix/c4 --- Matrix: 4-by-4, nnz: 10 (sym: -1: nnz 16), norm: 7.37e+01 blocks: 1 singletons: 0 structural rank: 4 QR natural time: 0.00 resid: 5.98e-17 QR amd(A'*A) time: 0.00 resid: 5.98e-17 -LU natural time: 0.00 resid: 4.59e-17 -LU amd(A+A') time: 0.00 resid: 4.59e-17 -LU amd(S'*S) time: 0.00 resid: 4.59e-17 -LU amd(A'*A) time: 0.00 resid: 4.59e-17 -Chol natural time: 0.00 resid: 9.17e-17 -Chol amd(A+A') time: 0.00 resid: 9.17e-17 +LU natural time: 0.00 resid: 4.73e-17 +LU amd(A+A') time: 0.00 resid: 4.73e-17 +LU amd(S'*S) time: 0.00 resid: 4.73e-17 +LU amd(A'*A) time: 0.00 resid: 4.73e-17 +Chol natural time: 0.00 resid: 6.88e-17 +Chol amd(A+A') time: 0.00 resid: 6.88e-17 ./cs_ci_demo3 < ../Matrix/c4 --- Matrix: 4-by-4, nnz: 10 (sym: -1: nnz 16), norm: 7.37e+01 @@ -983,22 +992,22 @@ chol then update/downdate amd(A+A') symbolic chol time 0.00 numeric chol time 0.00 solve chol time 0.00 -original: resid: 9.17e-17 +original: resid: 6.88e-17 update: time: 0.00 -update: time: 0.00 (incl solve) resid: 7.03e-17 -rechol: time: 0.00 (incl solve) resid: 4.83e-17 +update: time: 0.00 (incl solve) resid: 6.49e-17 +rechol: time: 0.00 (incl solve) resid: 6.49e-17 downdate: time: 0.00 -downdate: time: 0.00 (incl solve) resid: 9.17e-17 +downdate: time: 0.00 (incl solve) resid: 5.85e-17 ./cs_ci_demo2 < ../Matrix/mhd1280b --- Matrix: 1280-by-1280, nnz: 11963 (sym: -1: nnz 22646), norm: 8.00e+01 tiny entries dropped: 66 blocks: 20 singletons: 14 structural rank: 1280 -QR amd(A'*A) time: 0.00 resid: 5.96e-25 +QR amd(A'*A) time: 0.00 resid: 4.15e-25 LU amd(A+A') time: 0.00 resid: 2.33e-25 -LU amd(S'*S) time: 0.00 resid: 2.45e-25 -LU amd(A'*A) time: 0.00 resid: 2.45e-25 -Chol amd(A+A') time: 0.00 resid: 1.58e-25 +LU amd(S'*S) time: 0.01 resid: 3.96e-25 +LU amd(A'*A) time: 0.00 resid: 3.96e-25 +Chol amd(A+A') time: 0.00 resid: 1.69e-25 ./cs_ci_demo3 < ../Matrix/mhd1280b --- Matrix: 1280-by-1280, nnz: 12029 (sym: -1: nnz 22778), norm: 8.00e+01 @@ -1007,15 +1016,15 @@ chol then update/downdate amd(A+A') symbolic chol time 0.00 numeric chol time 0.00 solve chol time 0.00 -original: resid: 2.14e-25 +original: resid: 1.69e-25 update: time: 0.00 -update: time: 0.00 (incl solve) resid: 2.14e-25 -rechol: time: 0.00 (incl solve) resid: 2.14e-25 +update: time: 0.00 (incl solve) resid: 1.75e-25 +rechol: time: 0.00 (incl solve) resid: 1.71e-25 downdate: time: 0.00 -downdate: time: 0.00 (incl solve) resid: 6.54e-25 +downdate: time: 0.00 (incl solve) resid: 5.85e-25 ./cs_cl_demo1 < ../Matrix/t2 T: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 triplet: 4-by-4, nzmax: 16 nnz: 10 2 2 : (3, 3.14159) 1 0 : (3.1, 42) @@ -1028,7 +1037,7 @@ triplet: 4-by-4, nzmax: 16 nnz: 10 0 0 : (4.5, 6) 2 1 : (1.7, 1) A: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 106.075 col 0 : locations 0 to 2 1 : (3.1, 42) @@ -1045,7 +1054,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 3 : (1, 7) 1 : (0.9, 99) AT: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 10 nnz: 10, 1-norm: 144.296 col 0 : locations 0 to 1 0 : (4.5, -6) @@ -1062,7 +1071,7 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 1 : (0.4, -2.71828) 3 : (1, -7) D: -CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 +CXSparse Version 3.1.7, Feb 1, 2016. Copyright (c) Timothy A. Davis, 2006-2016 4-by-4, nzmax: 16 nnz: 16, 1-norm: 25308.3 col 0 : locations 0 to 3 1 : (265.95, 170.4) @@ -1088,12 +1097,12 @@ CXSparse Version 3.1.6, Jan 30, 2016. Copyright (c) Timothy A. Davis, 2006-2016 --- Matrix: 4-by-4, nnz: 10 (sym: 0: nnz 0), norm: 1.06e+02 blocks: 1 singletons: 0 structural rank: 4 -QR natural time: 0.00 resid: 1.95e-17 -QR amd(A'*A) time: 0.00 resid: 3.09e-17 -LU natural time: 0.00 resid: 7.38e-18 -LU amd(A+A') time: 0.00 resid: 5.40e-18 -LU amd(S'*S) time: 0.00 resid: 3.84e-18 -LU amd(A'*A) time: 0.00 resid: 5.40e-18 +QR natural time: 0.00 resid: 2.10e-17 +QR amd(A'*A) time: 0.00 resid: 2.51e-17 +LU natural time: 0.00 resid: 5.25e-18 +LU amd(A+A') time: 0.00 resid: 3.65e-18 +LU amd(S'*S) time: 0.00 resid: 6.90e-18 +LU amd(A'*A) time: 0.00 resid: 3.65e-18 ./cs_cl_demo2 < ../Matrix/t3 --- Matrix: 3-by-4, nnz: 12 (sym: 0: nnz 0), norm: 3.06e+00 @@ -1116,58 +1125,58 @@ Chol amd(A+A') time: 0.00 (failed) --- Matrix: 67-by-67, nnz: 294 (sym: 0: nnz 0), norm: 6.17e+00 blocks: 2 singletons: 1 structural rank: 67 -QR natural time: 0.00 resid: 7.86e-17 -QR amd(A'*A) time: 0.00 resid: 1.13e-16 -LU natural time: 0.00 resid: 6.30e-17 -LU amd(A+A') time: 0.00 resid: 5.29e-17 -LU amd(S'*S) time: 0.00 resid: 5.28e-17 -LU amd(A'*A) time: 0.00 resid: 4.33e-17 +QR natural time: 0.00 resid: 7.53e-17 +QR amd(A'*A) time: 0.00 resid: 1.15e-16 +LU natural time: 0.00 resid: 5.44e-17 +LU amd(A+A') time: 0.00 resid: 8.06e-17 +LU amd(S'*S) time: 0.00 resid: 6.73e-17 +LU amd(A'*A) time: 0.00 resid: 3.80e-17 ./cs_cl_demo2 < ../Matrix/c_mbeacxc --- Matrix: 492-by-490, nnz: 49920 (sym: 0: nnz 0), norm: 9.29e-01 blocks: 10 singletons: 8 structural rank: 448 -QR natural time: 0.14 resid: nan -QR amd(A'*A) time: 0.15 resid: nan +QR natural time: 0.07 resid: nan +QR amd(A'*A) time: 0.07 resid: nan ./cs_cl_demo2 < ../Matrix/young1c --- Matrix: 841-by-841, nnz: 4089 (sym: 0: nnz 0), norm: 7.30e+02 blocks: 1 singletons: 0 structural rank: 841 -QR natural time: 0.01 resid: 1.76e-16 -QR amd(A'*A) time: 0.01 resid: 1.36e-16 -LU natural time: 0.01 resid: 1.56e-16 -LU amd(A+A') time: 0.01 resid: 3.55e-16 -LU amd(S'*S) time: 0.00 resid: 2.93e-16 -LU amd(A'*A) time: 0.00 resid: 2.93e-16 +QR natural time: 0.00 resid: 1.71e-16 +QR amd(A'*A) time: 0.00 resid: 1.43e-16 +LU natural time: 0.01 resid: 1.43e-16 +LU amd(A+A') time: 0.00 resid: 3.18e-16 +LU amd(S'*S) time: 0.00 resid: 3.16e-16 +LU amd(A'*A) time: 0.01 resid: 3.16e-16 ./cs_cl_demo2 < ../Matrix/qc324 --- Matrix: 324-by-324, nnz: 26730 (sym: 0: nnz 0), norm: 1.71e+00 blocks: 1 singletons: 0 structural rank: 324 -QR natural time: 0.02 resid: 9.31e-17 -QR amd(A'*A) time: 0.03 resid: 9.34e-17 -LU natural time: 0.01 resid: 4.32e-17 -LU amd(A+A') time: 0.01 resid: 3.99e-17 -LU amd(S'*S) time: 0.01 resid: 4.00e-17 -LU amd(A'*A) time: 0.01 resid: 4.00e-17 +QR natural time: 0.01 resid: 9.24e-17 +QR amd(A'*A) time: 0.01 resid: 8.71e-17 +LU natural time: 0.01 resid: 3.70e-17 +LU amd(A+A') time: 0.01 resid: 5.05e-17 +LU amd(S'*S) time: 0.00 resid: 3.70e-17 +LU amd(A'*A) time: 0.01 resid: 3.70e-17 ./cs_cl_demo2 < ../Matrix/neumann --- Matrix: 1600-by-1600, nnz: 7840 (sym: 0: nnz 0), norm: 1.41e+01 blocks: 1 singletons: 0 structural rank: 1600 -QR amd(A'*A) time: 0.02 resid: 8.80e-16 -LU amd(A+A') time: 0.01 resid: 4.59e-16 -LU amd(S'*S) time: 0.01 resid: 4.56e-16 -LU amd(A'*A) time: 0.01 resid: 4.56e-16 +QR amd(A'*A) time: 0.01 resid: 1.18e-15 +LU amd(A+A') time: 0.00 resid: 3.55e-16 +LU amd(S'*S) time: 0.00 resid: 4.03e-16 +LU amd(A'*A) time: 0.01 resid: 4.03e-16 ./cs_cl_demo2 < ../Matrix/c4 --- Matrix: 4-by-4, nnz: 10 (sym: -1: nnz 16), norm: 7.37e+01 blocks: 1 singletons: 0 structural rank: 4 QR natural time: 0.00 resid: 5.98e-17 QR amd(A'*A) time: 0.00 resid: 5.98e-17 -LU natural time: 0.00 resid: 4.59e-17 -LU amd(A+A') time: 0.00 resid: 4.59e-17 -LU amd(S'*S) time: 0.00 resid: 4.59e-17 -LU amd(A'*A) time: 0.00 resid: 4.59e-17 -Chol natural time: 0.00 resid: 9.17e-17 -Chol amd(A+A') time: 0.00 resid: 9.17e-17 +LU natural time: 0.00 resid: 4.73e-17 +LU amd(A+A') time: 0.00 resid: 4.73e-17 +LU amd(S'*S) time: 0.00 resid: 4.73e-17 +LU amd(A'*A) time: 0.00 resid: 4.73e-17 +Chol natural time: 0.00 resid: 6.88e-17 +Chol amd(A+A') time: 0.00 resid: 6.88e-17 ./cs_cl_demo3 < ../Matrix/c4 --- Matrix: 4-by-4, nnz: 10 (sym: -1: nnz 16), norm: 7.37e+01 @@ -1176,22 +1185,22 @@ chol then update/downdate amd(A+A') symbolic chol time 0.00 numeric chol time 0.00 solve chol time 0.00 -original: resid: 9.17e-17 +original: resid: 6.88e-17 update: time: 0.00 -update: time: 0.00 (incl solve) resid: 7.03e-17 -rechol: time: 0.00 (incl solve) resid: 4.83e-17 +update: time: 0.00 (incl solve) resid: 6.49e-17 +rechol: time: 0.00 (incl solve) resid: 6.49e-17 downdate: time: 0.00 -downdate: time: 0.00 (incl solve) resid: 9.17e-17 +downdate: time: 0.00 (incl solve) resid: 5.85e-17 ./cs_cl_demo2 < ../Matrix/mhd1280b --- Matrix: 1280-by-1280, nnz: 11963 (sym: -1: nnz 22646), norm: 8.00e+01 tiny entries dropped: 66 blocks: 20 singletons: 14 structural rank: 1280 -QR amd(A'*A) time: 0.00 resid: 5.96e-25 +QR amd(A'*A) time: 0.00 resid: 4.15e-25 LU amd(A+A') time: 0.00 resid: 2.33e-25 -LU amd(S'*S) time: 0.00 resid: 2.45e-25 -LU amd(A'*A) time: 0.00 resid: 2.45e-25 -Chol amd(A+A') time: 0.00 resid: 1.58e-25 +LU amd(S'*S) time: 0.01 resid: 3.96e-25 +LU amd(A'*A) time: 0.00 resid: 3.96e-25 +Chol amd(A+A') time: 0.00 resid: 1.69e-25 ./cs_cl_demo3 < ../Matrix/mhd1280b --- Matrix: 1280-by-1280, nnz: 12029 (sym: -1: nnz 22778), norm: 8.00e+01 @@ -1200,9 +1209,10 @@ chol then update/downdate amd(A+A') symbolic chol time 0.00 numeric chol time 0.00 solve chol time 0.00 -original: resid: 2.14e-25 +original: resid: 1.69e-25 update: time: 0.00 -update: time: 0.00 (incl solve) resid: 2.14e-25 -rechol: time: 0.00 (incl solve) resid: 2.14e-25 +update: time: 0.00 (incl solve) resid: 1.75e-25 +rechol: time: 0.00 (incl solve) resid: 1.71e-25 downdate: time: 0.00 -downdate: time: 0.00 (incl solve) resid: 6.54e-25 +downdate: time: 0.00 (incl solve) resid: 5.85e-25 +make[1]: Leaving directory `/research/davis/sparse/SuiteSparse/CXSparse/Demo' diff --git a/CXSparse/Doc/ChangeLog b/CXSparse/Doc/ChangeLog index 12aa9a41a..e48da6297 100644 --- a/CXSparse/Doc/ChangeLog +++ b/CXSparse/Doc/ChangeLog @@ -1,3 +1,7 @@ +Feb 1, 2016: version 3.1.7 + + * update to Makefiles + Jan 30, 2016: version 3.1.6 * correction to Makefiles diff --git a/CXSparse/Include/cs.h b/CXSparse/Include/cs.h index e3b7e8781..48b4c8a8d 100644 --- a/CXSparse/Include/cs.h +++ b/CXSparse/Include/cs.h @@ -44,8 +44,8 @@ extern "C" { #define CS_VER 3 /* CXSparse Version */ #define CS_SUBVER 1 -#define CS_SUBSUB 6 -#define CS_DATE "Jan 30, 2016" /* CXSparse release date */ +#define CS_SUBSUB 7 +#define CS_DATE "Feb 1, 2016" /* CXSparse release date */ #define CS_COPYRIGHT "Copyright (c) Timothy A. Davis, 2006-2016" #define CXSPARSE diff --git a/CXSparse/Lib/Makefile b/CXSparse/Lib/Makefile index d35fb3595..5a3e4f5eb 100644 --- a/CXSparse/Lib/Makefile +++ b/CXSparse/Lib/Makefile @@ -2,27 +2,25 @@ # CXSparse Lib/Makefile #------------------------------------------------------------------------------- -# NOTE: you should do "make install" on either CSparse or CXSparse, but -# not both. This is because both use the same name for the include file, cs.h. -# CXSparse is a superset of CSparse, so any package that relies on CSparse can -# rely on CXSparse instead, with no change to its code. - LIBRARY = libcxsparse -VERSION = 3.1.6 +VERSION = 3.1.7 SO_VERSION = 3 default: library - $(MAKE) install INSTALL=$(CURDIR)/../.. \ - INSTALL_DOC=$(CURDIR)/../../doc include ../../SuiteSparse_config/SuiteSparse_config.mk +# CXSparse depends on SuiteSparse_config +LDLIBS += -lsuitesparseconfig + +# compile and install in SuiteSparse/lib +library: + $(MAKE) install INSTALL=$(SUITESPARSE) + I = -I../../SuiteSparse_config -I../Include all: library -library: $(AR_TARGET) $(SO_TARGET) - CS_SOURCE = cs_add.c cs_amd.c cs_chol.c cs_cholsol.c cs_counts.c cs_cumsum.c \ cs_droptol.c cs_dropzeros.c cs_dupl.c cs_entry.c \ cs_etree.c cs_fkeep.c cs_gaxpy.c cs_happly.c cs_house.c cs_ipvec.c \ @@ -104,9 +102,6 @@ $(AR_TARGET): $(CS) $(ARCHIVE) $@ $^ - $(RANLIB) $@ -$(SO_TARGET): $(CS) - $(CC) $(SO_OPTS) $^ -o $@ - clean: - $(RM) -r $(CLEAN) @@ -116,14 +111,13 @@ distclean: clean - $(RM) -r $(PURGE) # install CXSparse -install: $(INSTALL_LIB)/$(SO_TARGET) +install: $(AR_TARGET) $(INSTALL_LIB)/$(SO_TARGET) -$(INSTALL_LIB)/$(SO_TARGET): $(SO_TARGET) +$(INSTALL_LIB)/$(SO_TARGET): $(CS) @mkdir -p $(INSTALL_LIB) @mkdir -p $(INSTALL_INCLUDE) @mkdir -p $(INSTALL_DOC) - $(CP) $(SO_TARGET) $(INSTALL_LIB) - $(SO_INSTALL_NAME) $(INSTALL_LIB)/$(SO_TARGET) $(INSTALL_LIB)/$(SO_TARGET) + $(CC) $(SO_OPTS) $^ -o $@ $(LDLIBS) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_PLAIN) ) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_MAIN) ) $(CP) ../Include/cs.h $(INSTALL_INCLUDE) diff --git a/CXSparse/Makefile b/CXSparse/Makefile index 487b9115a..dd041afe7 100644 --- a/CXSparse/Makefile +++ b/CXSparse/Makefile @@ -2,6 +2,9 @@ # CXSparse Makefile #------------------------------------------------------------------------------ +SUITESPARSE ?= $(realpath $(CURDIR)/..) +export SUITESPARSE + default: C include ../SuiteSparse_config/SuiteSparse_config.mk diff --git a/CXSparse_newfiles/Include/cs.h b/CXSparse_newfiles/Include/cs.h index e3b7e8781..48b4c8a8d 100644 --- a/CXSparse_newfiles/Include/cs.h +++ b/CXSparse_newfiles/Include/cs.h @@ -44,8 +44,8 @@ extern "C" { #define CS_VER 3 /* CXSparse Version */ #define CS_SUBVER 1 -#define CS_SUBSUB 6 -#define CS_DATE "Jan 30, 2016" /* CXSparse release date */ +#define CS_SUBSUB 7 +#define CS_DATE "Feb 1, 2016" /* CXSparse release date */ #define CS_COPYRIGHT "Copyright (c) Timothy A. Davis, 2006-2016" #define CXSPARSE diff --git a/CXSparse_newfiles/Lib/Makefile b/CXSparse_newfiles/Lib/Makefile index d35fb3595..5a3e4f5eb 100644 --- a/CXSparse_newfiles/Lib/Makefile +++ b/CXSparse_newfiles/Lib/Makefile @@ -2,27 +2,25 @@ # CXSparse Lib/Makefile #------------------------------------------------------------------------------- -# NOTE: you should do "make install" on either CSparse or CXSparse, but -# not both. This is because both use the same name for the include file, cs.h. -# CXSparse is a superset of CSparse, so any package that relies on CSparse can -# rely on CXSparse instead, with no change to its code. - LIBRARY = libcxsparse -VERSION = 3.1.6 +VERSION = 3.1.7 SO_VERSION = 3 default: library - $(MAKE) install INSTALL=$(CURDIR)/../.. \ - INSTALL_DOC=$(CURDIR)/../../doc include ../../SuiteSparse_config/SuiteSparse_config.mk +# CXSparse depends on SuiteSparse_config +LDLIBS += -lsuitesparseconfig + +# compile and install in SuiteSparse/lib +library: + $(MAKE) install INSTALL=$(SUITESPARSE) + I = -I../../SuiteSparse_config -I../Include all: library -library: $(AR_TARGET) $(SO_TARGET) - CS_SOURCE = cs_add.c cs_amd.c cs_chol.c cs_cholsol.c cs_counts.c cs_cumsum.c \ cs_droptol.c cs_dropzeros.c cs_dupl.c cs_entry.c \ cs_etree.c cs_fkeep.c cs_gaxpy.c cs_happly.c cs_house.c cs_ipvec.c \ @@ -104,9 +102,6 @@ $(AR_TARGET): $(CS) $(ARCHIVE) $@ $^ - $(RANLIB) $@ -$(SO_TARGET): $(CS) - $(CC) $(SO_OPTS) $^ -o $@ - clean: - $(RM) -r $(CLEAN) @@ -116,14 +111,13 @@ distclean: clean - $(RM) -r $(PURGE) # install CXSparse -install: $(INSTALL_LIB)/$(SO_TARGET) +install: $(AR_TARGET) $(INSTALL_LIB)/$(SO_TARGET) -$(INSTALL_LIB)/$(SO_TARGET): $(SO_TARGET) +$(INSTALL_LIB)/$(SO_TARGET): $(CS) @mkdir -p $(INSTALL_LIB) @mkdir -p $(INSTALL_INCLUDE) @mkdir -p $(INSTALL_DOC) - $(CP) $(SO_TARGET) $(INSTALL_LIB) - $(SO_INSTALL_NAME) $(INSTALL_LIB)/$(SO_TARGET) $(INSTALL_LIB)/$(SO_TARGET) + $(CC) $(SO_OPTS) $^ -o $@ $(LDLIBS) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_PLAIN) ) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_MAIN) ) $(CP) ../Include/cs.h $(INSTALL_INCLUDE) diff --git a/CXSparse_newfiles/Makefile b/CXSparse_newfiles/Makefile index 487b9115a..dd041afe7 100644 --- a/CXSparse_newfiles/Makefile +++ b/CXSparse_newfiles/Makefile @@ -2,6 +2,9 @@ # CXSparse Makefile #------------------------------------------------------------------------------ +SUITESPARSE ?= $(realpath $(CURDIR)/..) +export SUITESPARSE + default: C include ../SuiteSparse_config/SuiteSparse_config.mk diff --git a/ChangeLog b/ChangeLog index 71a6c6d66..160a74fee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +Feb 1, 2016: SuiteSparse 4.5.1 + + * update to Makefiles. Version 4.5.0 is broken on the Mac. + That version also compiles *.so libraries on Linux with + underlinked dependencies to other libraries in SuiteSparse. + For example, AMD requires SuiteSparse_config. The links to + required libraries are now explicitly included in each library, + in SuiteSparse 4.5.1. + * minor change to CHOLMOD/Check/cholmod_write.c, when compiling with + -DNGPL + Jan 30, 2016: SuiteSparse 4.5.0 * better Makefiles for creating and installing shared libraries diff --git a/GPUQREngine/Doc/ChangeLog b/GPUQREngine/Doc/ChangeLog index 9739dc21a..fbcc476e5 100644 --- a/GPUQREngine/Doc/ChangeLog +++ b/GPUQREngine/Doc/ChangeLog @@ -1,3 +1,7 @@ +Feb 1, 2016: version 1.0.3 + + * update to Makefiles + Jan 30, 2016: version 1.0.2 * modifications to Makefiles diff --git a/GPUQREngine/Include/GPUQREngine.hpp b/GPUQREngine/Include/GPUQREngine.hpp index 51741a0fa..06851a9b3 100644 --- a/GPUQREngine/Include/GPUQREngine.hpp +++ b/GPUQREngine/Include/GPUQREngine.hpp @@ -47,11 +47,11 @@ Int *GPUQREngine_FindStaircase ); // Version information: -#define GPUQRENGINE_DATE "Jan 30, 2016" +#define GPUQRENGINE_DATE "Feb 1, 2016" #define GPUQRENGINE_VER_CODE(main,sub) ((main) * 1000 + (sub)) #define GPUQRENGINE_MAIN_VERSION 1 #define GPUQRENGINE_SUB_VERSION 0 -#define GPUQRENGINE_SUBSUB_VERSION 2 +#define GPUQRENGINE_SUBSUB_VERSION 3 #define GPUQRENGINE_VERSION \ GPUQRENGINE_VER_CODE(GPUQRENGINE_MAIN_VERSION,GPUQRENGINE_SUB_VERSION) diff --git a/GPUQREngine/Lib/Makefile b/GPUQREngine/Lib/Makefile index b21630a8b..f22531bb6 100644 --- a/GPUQREngine/Lib/Makefile +++ b/GPUQREngine/Lib/Makefile @@ -3,17 +3,22 @@ #------------------------------------------------------------------------------- LIBRARY = libGPUQREngine -VERSION = 1.0.2 +VERSION = 1.0.3 SO_VERSION = 1 default: library - $(MAKE) install INSTALL=$(CURDIR)/../.. \ - INSTALL_DOC=$(CURDIR)/../../doc ccode: all include ../../SuiteSparse_config/SuiteSparse_config.mk +# GPUQREngine depends on SuiteSparse_config, CUDA, and SuiteSparse_GPURuntime +LDLIBS += -lSuiteSparse_GPURuntime -lsuitesparseconfig $(CUDART_LIB) + +# compile and install in SuiteSparse/lib +library: + $(MAKE) install INSTALL=$(SUITESPARSE) + OBJS = GPUQREngine_GraphVizHelper.o \ GPUQREngine_Internal.o \ GPUQREngine_ExpertDense.o \ @@ -42,9 +47,6 @@ OBJS = GPUQREngine_GraphVizHelper.o \ TaskDescriptor_flops.o \ GPUQREngine_UberKernel.o -# LIBS = $(CUDART_LIB) \ -# ../../SuiteSparse_GPURuntime/Lib/libSuiteSparse_GPURuntime.a - INC = -I../../SuiteSparse_GPURuntime/Include -I../Include \ -I../../SuiteSparse_config @@ -99,8 +101,7 @@ H3 = \ ../../SuiteSparse_GPURuntime/Include/SuiteSparseGPU_macros.hpp \ ../../SuiteSparse_GPURuntime/Include/SuiteSparseGPU_Runtime.hpp \ ../../SuiteSparse_GPURuntime/Include/SuiteSparseGPU_Workspace.hpp \ - ../../SuiteSparse_GPURuntime/Include/SuiteSparseGPU_workspace_macros.hpp \ - Makefile + ../../SuiteSparse_GPURuntime/Include/SuiteSparseGPU_workspace_macros.hpp H += $(H3) H2 += $(H3) @@ -111,8 +112,6 @@ C = $(NVCC) $(NVCCFLAGS) $(INC) all: library -library: $(AR_TARGET) $(SO_TARGET) - clean: $(RM) -r $(CLEAN) @@ -125,20 +124,16 @@ $(AR_TARGET): $(OBJS) $(ARCHIVE) $@ $^ - $(RANLIB) $@ -$(SO_TARGET): $(OBJS) - $(CC) $(SO_OPTS) $^ -o $@ - #------------------------------------------------------------------------------- # install GPUQREngine. Note that the include files are not installed. -install: $(INSTALL_LIB)/$(SO_TARGET) +install: $(AR_TARGET) $(INSTALL_LIB)/$(SO_TARGET) -$(INSTALL_LIB)/$(SO_TARGET): $(SO_TARGET) +$(INSTALL_LIB)/$(SO_TARGET): $(OBJS) @mkdir -p $(INSTALL_LIB) @mkdir -p $(INSTALL_INCLUDE) @mkdir -p $(INSTALL_DOC) - $(CP) $(SO_TARGET) $(INSTALL_LIB) - $(SO_INSTALL_NAME) $(INSTALL_LIB)/$(SO_TARGET) $(INSTALL_LIB)/$(SO_TARGET) + $(CC) $(SO_OPTS) $^ -o $@ $(LDLIBS) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_PLAIN) ) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_MAIN) ) $(CP) ../README.txt $(INSTALL_DOC)/GPUQRENGINE_README.txt diff --git a/GPUQREngine/Makefile b/GPUQREngine/Makefile index 6281ecc32..189484efe 100644 --- a/GPUQREngine/Makefile +++ b/GPUQREngine/Makefile @@ -2,6 +2,9 @@ # GPUQREngine Makefile #------------------------------------------------------------------------------- +SUITESPARSE ?= $(realpath $(CURDIR)/..) +export SUITESPARSE + # default is 'library' since there is no demo program default: library diff --git a/GPUQREngine/README.txt b/GPUQREngine/README.txt index 9024e0856..39c062845 100644 --- a/GPUQREngine/README.txt +++ b/GPUQREngine/README.txt @@ -2,8 +2,6 @@ GPUQREngine Copyright (c) 2013, Timothy A. Davis, Sencer Nuri Yeralan, and Sanjay Ranka. http://www.suitesparse.com -GPUQREngine VERSION 1.0.2 - GPUQREngine is a gpu-accelerated QR factorization engine supporting SuiteSparseQR. diff --git a/KLU/Doc/ChangeLog b/KLU/Doc/ChangeLog index 5bccaeac1..64fc9b8a8 100644 --- a/KLU/Doc/ChangeLog +++ b/KLU/Doc/ChangeLog @@ -1,3 +1,7 @@ +Feb 1, 2016: version 1.3.6 + + * update to Makefiles + Jan 30, 2016: version 1.3.5 * modifications to Makefiles diff --git a/KLU/Doc/KLU_UserGuide.pdf b/KLU/Doc/KLU_UserGuide.pdf index 662b321fbc47839881870d1d67add4ebb1c12828..08077c5ed8d7c3e3dc70990501784afb0e21da4a 100644 GIT binary patch delta 28117 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 delta 28078 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 Ef7ubs$^ZZW diff --git a/KLU/Doc/KLU_UserGuide.tex b/KLU/Doc/KLU_UserGuide.tex index c056229dd..a40bffabf 100644 --- a/KLU/Doc/KLU_UserGuide.tex +++ b/KLU/Doc/KLU_UserGuide.tex @@ -26,7 +26,7 @@ } \and Eka Palamadai Natarajan} -\date{VERSION 1.3.5, Jan 30, 2016} +\date{VERSION 1.3.6, Feb 1, 2016} \maketitle %------------------------------------------------------------------------------ diff --git a/KLU/Include/klu.h b/KLU/Include/klu.h index ec774dd33..ecf9629c8 100644 --- a/KLU/Include/klu.h +++ b/KLU/Include/klu.h @@ -819,11 +819,11 @@ void *klu_l_realloc (size_t, size_t, size_t, void *, klu_l_common *) ; * #endif */ -#define KLU_DATE "Jan 30, 2016" +#define KLU_DATE "Feb 1, 2016" #define KLU_VERSION_CODE(main,sub) ((main) * 1000 + (sub)) #define KLU_MAIN_VERSION 1 #define KLU_SUB_VERSION 3 -#define KLU_SUBSUB_VERSION 5 +#define KLU_SUBSUB_VERSION 6 #define KLU_VERSION KLU_VERSION_CODE(KLU_MAIN_VERSION,KLU_SUB_VERSION) #ifdef __cplusplus diff --git a/KLU/Lib/Makefile b/KLU/Lib/Makefile index d85784489..8ded04bfc 100644 --- a/KLU/Lib/Makefile +++ b/KLU/Lib/Makefile @@ -3,32 +3,35 @@ #------------------------------------------------------------------------------- LIBRARY = libklu -VERSION = 1.3.5 +VERSION = 1.3.6 SO_VERSION = 1 default: library - $(MAKE) install INSTALL=$(CURDIR)/../.. \ - INSTALL_DOC=$(CURDIR)/../../doc ccode: all include ../../SuiteSparse_config/SuiteSparse_config.mk +# KLU depends on BTF, AMD, COLAMD, and SuiteSparse_config +LDLIBS += -lamd -lcolamd -lbtf -lsuitesparseconfig + +# compile and install in SuiteSparse/lib +library: + $(MAKE) install INSTALL=$(SUITESPARSE) + # for testing only: # TEST = -DTESTING C = $(CC) $(CF) INC = ../Include/klu.h ../Include/klu_internal.h ../Include/klu_version.h \ - ../../SuiteSparse_config/SuiteSparse_config.h Makefile + ../../SuiteSparse_config/SuiteSparse_config.h I = -I../../AMD/Include -I../../COLAMD/Include -I../../BTF/Include \ -I../Include -I../../SuiteSparse_config all: library -library: $(AR_TARGET) $(SO_TARGET) - KLU_D = klu_d.o klu_d_kernel.o klu_d_dump.o \ klu_d_factor.o klu_d_free_numeric.o klu_d_solve.o \ klu_d_scale.o klu_d_refactor.o \ @@ -61,9 +64,6 @@ $(AR_TARGET): $(OBJ) $(ARCHIVE) $@ $^ - $(RANLIB) $@ -$(SO_TARGET): $(OBJ) - $(CC) $(SO_OPTS) $^ -o $@ - $(OBJ): $(INC) #------------------------------------------------------------------------------- @@ -261,14 +261,13 @@ klu_l_memory.o: ../Source/klu_memory.c #------------------------------------------------------------------------------- # install KLU -install: $(INSTALL_LIB)/$(SO_TARGET) +install: $(AR_TARGET) $(INSTALL_LIB)/$(SO_TARGET) -$(INSTALL_LIB)/$(SO_TARGET): $(SO_TARGET) +$(INSTALL_LIB)/$(SO_TARGET): $(OBJ) @mkdir -p $(INSTALL_LIB) @mkdir -p $(INSTALL_INCLUDE) @mkdir -p $(INSTALL_DOC) - $(CP) $(SO_TARGET) $(INSTALL_LIB) - $(SO_INSTALL_NAME) $(INSTALL_LIB)/$(SO_TARGET) $(INSTALL_LIB)/$(SO_TARGET) + $(CC) $(SO_OPTS) $^ -o $@ $(LDLIBS) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_PLAIN) ) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_MAIN) ) $(CP) ../Include/klu.h $(INSTALL_INCLUDE) diff --git a/KLU/Makefile b/KLU/Makefile index 8f8d62f0c..85287841a 100644 --- a/KLU/Makefile +++ b/KLU/Makefile @@ -2,6 +2,9 @@ # KLU Makefile #------------------------------------------------------------------------------ +SUITESPARSE ?= $(realpath $(CURDIR)/..) +export SUITESPARSE + default: all include ../SuiteSparse_config/SuiteSparse_config.mk diff --git a/KLU/Tcov/Makefile b/KLU/Tcov/Makefile index 423170ea4..787c0a062 100644 --- a/KLU/Tcov/Makefile +++ b/KLU/Tcov/Makefile @@ -27,7 +27,7 @@ C = $(CC) $(CF) LDLIBS = -L../../lib -lamd -lcolamd -lcholmod -lcamd -lccolamd \ -lmetis -lsuitesparseconfig \ $(LAPACK) $(BLAS) $(CUDART_LIB) $(CUBLAS_LIB) -lm -lrt \ - -Wl,-rpath=$(SUITESPARSE)/lib + -Wl,-rpath=$(SUITESPARSE)/lib -lstdc++ I = -I../../include -I../Include -I../User -I../../BTF/Include @@ -42,13 +42,13 @@ valgrind: purge klutest klultest - ./coverage libs: + ( cd ../../SuiteSparse_config && $(MAKE) TCOV=yes) ( cd ../../AMD && $(MAKE) library TCOV=yes) ( cd ../../COLAMD && $(MAKE) library TCOV=yes) ( cd ../../CAMD && $(MAKE) library TCOV=yes) ( cd ../../CCOLAMD && $(MAKE) library TCOV=yes) ( cd ../.. && $(MAKE) metis ) ( cd ../../CHOLMOD && $(MAKE) library TCOV=yes) - ( cd ../../SuiteSparse_config && $(MAKE) TCOV=yes) purge: distclean diff --git a/LDL/Demo/ldlamd.out b/LDL/Demo/ldlamd.out index 6cf4b302a..aa61f24b7 100644 --- a/LDL/Demo/ldlamd.out +++ b/LDL/Demo/ldlamd.out @@ -6,7 +6,7 @@ name: Dense/0 n: 0 entries: 0 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -14,7 +14,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 0 @@ -37,7 +37,7 @@ name: Dense/0 n: 0 entries: 0 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -45,7 +45,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 0 @@ -68,7 +68,7 @@ name: Dense/1 n: 1 entries: 1 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -76,7 +76,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 1 nz, number of nonzeros in A: 1 @@ -119,7 +119,7 @@ name: Dense/1 n: 1 entries: 2 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -127,7 +127,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 1 nz, number of nonzeros in A: 1 @@ -170,7 +170,7 @@ name: Dense/2 n: 2 entries: 4 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -178,7 +178,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 2 nz, number of nonzeros in A: 4 @@ -221,7 +221,7 @@ name: Dense/2 n: 2 entries: 5 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -229,7 +229,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 2 nz, number of nonzeros in A: 4 @@ -272,7 +272,7 @@ name: Dense/3 n: 3 entries: 9 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -280,7 +280,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 3 nz, number of nonzeros in A: 9 @@ -323,7 +323,7 @@ name: Dense/3 n: 3 entries: 11 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -331,7 +331,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 3 nz, number of nonzeros in A: 9 @@ -374,7 +374,7 @@ name: HB/can_24 n: 24 entries: 160 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -382,7 +382,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 24 nz, number of nonzeros in A: 160 @@ -425,7 +425,7 @@ name: HB/can_24 n: 24 entries: 188 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -433,7 +433,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 24 nz, number of nonzeros in A: 160 @@ -476,7 +476,7 @@ name: FIDAP/ex5 n: 27 entries: 279 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -484,7 +484,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 27 nz, number of nonzeros in A: 279 @@ -527,7 +527,7 @@ name: FIDAP/ex5 n: 27 entries: 325 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -535,7 +535,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 27 nz, number of nonzeros in A: 279 @@ -578,7 +578,7 @@ name: HB/bcsstk01 n: 48 entries: 400 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -586,7 +586,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 48 nz, number of nonzeros in A: 400 @@ -629,7 +629,7 @@ name: HB/bcsstk01 n: 48 entries: 472 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -637,7 +637,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 48 nz, number of nonzeros in A: 400 @@ -680,7 +680,7 @@ name: HB/bcsstm01 n: 48 entries: 24 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -688,7 +688,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 48 nz, number of nonzeros in A: 24 @@ -731,7 +731,7 @@ name: HB/bcsstm01 n: 48 entries: 26 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -739,7 +739,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 48 nz, number of nonzeros in A: 24 @@ -782,7 +782,7 @@ name: Pothen/mesh1e1 n: 48 entries: 306 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -790,7 +790,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 48 nz, number of nonzeros in A: 306 @@ -833,7 +833,7 @@ name: Pothen/mesh1e1 n: 48 entries: 359 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -841,7 +841,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 48 nz, number of nonzeros in A: 306 @@ -884,7 +884,7 @@ name: Bai/bfwb62 n: 62 entries: 342 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -892,7 +892,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 62 nz, number of nonzeros in A: 342 @@ -935,7 +935,7 @@ name: Bai/bfwb62 n: 62 entries: 407 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -943,7 +943,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 62 nz, number of nonzeros in A: 342 @@ -986,7 +986,7 @@ name: HB/bcsstk02 n: 66 entries: 4356 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -994,7 +994,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 66 nz, number of nonzeros in A: 4356 @@ -1037,7 +1037,7 @@ name: HB/bcsstk02 n: 66 entries: 5175 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -1045,7 +1045,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 66 nz, number of nonzeros in A: 4356 @@ -1088,7 +1088,7 @@ name: HB/bcsstm02 n: 66 entries: 66 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -1096,7 +1096,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 66 nz, number of nonzeros in A: 66 @@ -1139,7 +1139,7 @@ name: HB/bcsstm02 n: 66 entries: 72 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -1147,7 +1147,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 4 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 66 nz, number of nonzeros in A: 66 diff --git a/LDL/Demo/ldllamd.out b/LDL/Demo/ldllamd.out index 6ed033c02..4a2dceb1a 100644 --- a/LDL/Demo/ldllamd.out +++ b/LDL/Demo/ldllamd.out @@ -6,7 +6,7 @@ name: Dense/0 n: 0 entries: 0 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -14,7 +14,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 0 @@ -37,7 +37,7 @@ name: Dense/0 n: 0 entries: 0 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -45,7 +45,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 0 @@ -68,7 +68,7 @@ name: Dense/1 n: 1 entries: 1 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -76,7 +76,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 1 nz, number of nonzeros in A: 1 @@ -119,7 +119,7 @@ name: Dense/1 n: 1 entries: 2 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -127,7 +127,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 1 nz, number of nonzeros in A: 1 @@ -170,7 +170,7 @@ name: Dense/2 n: 2 entries: 4 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -178,7 +178,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 2 nz, number of nonzeros in A: 4 @@ -221,7 +221,7 @@ name: Dense/2 n: 2 entries: 5 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -229,7 +229,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 2 nz, number of nonzeros in A: 4 @@ -272,7 +272,7 @@ name: Dense/3 n: 3 entries: 9 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -280,7 +280,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 3 nz, number of nonzeros in A: 9 @@ -323,7 +323,7 @@ name: Dense/3 n: 3 entries: 11 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -331,7 +331,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 3 nz, number of nonzeros in A: 9 @@ -374,7 +374,7 @@ name: HB/can_24 n: 24 entries: 160 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -382,7 +382,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 24 nz, number of nonzeros in A: 160 @@ -425,7 +425,7 @@ name: HB/can_24 n: 24 entries: 188 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -433,7 +433,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 24 nz, number of nonzeros in A: 160 @@ -476,7 +476,7 @@ name: FIDAP/ex5 n: 27 entries: 279 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -484,7 +484,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 27 nz, number of nonzeros in A: 279 @@ -527,7 +527,7 @@ name: FIDAP/ex5 n: 27 entries: 325 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -535,7 +535,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 27 nz, number of nonzeros in A: 279 @@ -578,7 +578,7 @@ name: HB/bcsstk01 n: 48 entries: 400 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -586,7 +586,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 48 nz, number of nonzeros in A: 400 @@ -629,7 +629,7 @@ name: HB/bcsstk01 n: 48 entries: 472 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -637,7 +637,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 48 nz, number of nonzeros in A: 400 @@ -680,7 +680,7 @@ name: HB/bcsstm01 n: 48 entries: 24 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -688,7 +688,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 48 nz, number of nonzeros in A: 24 @@ -731,7 +731,7 @@ name: HB/bcsstm01 n: 48 entries: 26 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -739,7 +739,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 48 nz, number of nonzeros in A: 24 @@ -782,7 +782,7 @@ name: Pothen/mesh1e1 n: 48 entries: 306 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -790,7 +790,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 48 nz, number of nonzeros in A: 306 @@ -833,7 +833,7 @@ name: Pothen/mesh1e1 n: 48 entries: 359 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -841,7 +841,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 48 nz, number of nonzeros in A: 306 @@ -884,7 +884,7 @@ name: Bai/bfwb62 n: 62 entries: 342 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -892,7 +892,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 62 nz, number of nonzeros in A: 342 @@ -935,7 +935,7 @@ name: Bai/bfwb62 n: 62 entries: 407 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -943,7 +943,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 62 nz, number of nonzeros in A: 342 @@ -986,7 +986,7 @@ name: HB/bcsstk02 n: 66 entries: 4356 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -994,7 +994,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 66 nz, number of nonzeros in A: 4356 @@ -1037,7 +1037,7 @@ name: HB/bcsstk02 n: 66 entries: 5175 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -1045,7 +1045,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 66 nz, number of nonzeros in A: 4356 @@ -1088,7 +1088,7 @@ name: HB/bcsstm02 n: 66 entries: 66 -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -1096,7 +1096,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK n, dimension of A: 66 nz, number of nonzeros in A: 66 @@ -1139,7 +1139,7 @@ name: HB/bcsstm02 n: 66 entries: 72 (jumbled version) -------------------------------------------------------- -AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering +AMD version 2.4.4, Feb 1, 2016: approximate minimum degree ordering dense row parameter: 10 (rows with more than max (10 * sqrt (n), 16) entries are considered "dense", and placed last in output permutation) @@ -1147,7 +1147,7 @@ AMD version 2.4.3, Jan 30, 2016: approximate minimum degree ordering size of AMD integer: 8 -AMD version 2.4.3, Jan 30, 2016, results: +AMD version 2.4.4, Feb 1, 2016, results: status: OK, but jumbled n, dimension of A: 66 nz, number of nonzeros in A: 66 diff --git a/LDL/Doc/ChangeLog b/LDL/Doc/ChangeLog index 622a3693f..9c057cf1a 100644 --- a/LDL/Doc/ChangeLog +++ b/LDL/Doc/ChangeLog @@ -1,3 +1,7 @@ +Feb 1, 2016: version 2.2.4 + + * update to Makefiles + Jan 30, 2016: version 2.2.3 * modifications to Makefiles diff --git a/LDL/Doc/ldl_userguide.pdf b/LDL/Doc/ldl_userguide.pdf index 60efc2ccae07f487028baa06a877aec7c619f647..f5c5fbdd82d5ef6659843e11b50489e0e95a4271 100644 GIT binary patch delta 4871 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 I0K$L?0}-TFEC2ui diff --git a/Makefile b/Makefile index e1500a884..9bd7bf67a 100644 --- a/Makefile +++ b/Makefile @@ -13,16 +13,16 @@ include SuiteSparse_config/SuiteSparse_config.mk go: metis ( cd SuiteSparse_config && $(MAKE) ) ( cd AMD && $(MAKE) ) - ( cd CAMD && $(MAKE) ) - ( cd COLAMD && $(MAKE) ) ( cd BTF && $(MAKE) ) - ( cd KLU && $(MAKE) ) - ( cd LDL && $(MAKE) ) + ( cd CAMD && $(MAKE) ) ( cd CCOLAMD && $(MAKE) ) - ( cd UMFPACK && $(MAKE) ) + ( cd COLAMD && $(MAKE) ) ( cd CHOLMOD && $(MAKE) ) ( cd CSparse && $(MAKE) ) ( cd CXSparse && $(MAKE) ) + ( cd LDL && $(MAKE) ) + ( cd KLU && $(MAKE) ) + ( cd UMFPACK && $(MAKE) ) ( cd RBio && $(MAKE) ) ifneq ($(GPU_CONFIG),) ( cd SuiteSparse_GPURuntime && $(MAKE) ) @@ -37,17 +37,17 @@ endif install: metis ( cd SuiteSparse_config && $(MAKE) install ) ( cd AMD && $(MAKE) install ) - ( cd CAMD && $(MAKE) install ) - ( cd COLAMD && $(MAKE) install ) ( cd BTF && $(MAKE) install ) - ( cd KLU && $(MAKE) install ) - ( cd LDL && $(MAKE) install ) + ( cd CAMD && $(MAKE) install ) ( cd CCOLAMD && $(MAKE) install ) - ( cd UMFPACK && $(MAKE) install ) + ( cd COLAMD && $(MAKE) install ) ( cd CHOLMOD && $(MAKE) install ) ( cd CXSparse && $(MAKE) install ) + ( cd LDL && $(MAKE) install ) + ( cd KLU && $(MAKE) install ) + ( cd UMFPACK && $(MAKE) install ) ( cd RBio && $(MAKE) install ) -ifneq ($(GPU_CONFIG),) +ifneq (,$(GPU_CONFIG)) ( cd SuiteSparse_GPURuntime && $(MAKE) install ) ( cd GPUQREngine && $(MAKE) install ) endif @@ -56,14 +56,14 @@ endif # ( cd SKYLINE_SVD && $(MAKE) install ) $(CP) README.txt $(INSTALL_DOC)/SuiteSparse_README.txt chmod 644 $(INSTALL_DOC)/SuiteSparse_README.txt -ifneq ($(wildcard metis-5.1.0),) - # install METIS - $(CP) lib/libmetis.* $(INSTALL_LIB) - $(CP) metis-5.1.0/manual/manual.pdf $(INSTALL_DOC)/METIS_manual.pdf - $(CP) metis-5.1.0/README.txt $(INSTALL_DOC)/METIS_README.txt +ifeq (,$(MY_METIS_LIB)) + # install METIS from SuiteSparse/metis-5.1.0 + - $(CP) lib/libmetis.* $(INSTALL_LIB) + - $(CP) metis-5.1.0/manual/manual.pdf $(INSTALL_DOC)/METIS_manual.pdf + - $(CP) metis-5.1.0/README.txt $(INSTALL_DOC)/METIS_README.txt # the following is needed only on the Mac, so *.dylib is hardcoded: - - $(SO_INSTALL_NAME) $(INSTALL_LIB)/libmetis.dylib $(INSTALL_LIB)/libmetis.dylib - $(CP) include/metis.h $(INSTALL_INCLUDE) + $(SO_INSTALL_NAME) $(INSTALL_LIB)/libmetis.dylib $(INSTALL_LIB)/libmetis.dylib + - $(CP) include/metis.h $(INSTALL_INCLUDE) chmod 755 $(INSTALL_LIB)/libmetis.* chmod 644 $(INSTALL_INCLUDE)/metis.h chmod 644 $(INSTALL_DOC)/METIS_manual.pdf @@ -84,15 +84,16 @@ uninstall: ( cd CCOLAMD && $(MAKE) uninstall ) ( cd UMFPACK && $(MAKE) uninstall ) ( cd CHOLMOD && $(MAKE) uninstall ) - ( cd CXSparse && $(MAKE) uninstall ) ( cd CSparse && $(MAKE) uninstall ) + ( cd CXSparse && $(MAKE) uninstall ) ( cd RBio && $(MAKE) uninstall ) ( cd SuiteSparse_GPURuntime && $(MAKE) uninstall ) ( cd GPUQREngine && $(MAKE) uninstall ) ( cd SPQR && $(MAKE) uninstall ) # ( cd PIRO_BAND && $(MAKE) uninstall ) # ( cd SKYLINE_SVD && $(MAKE) uninstall ) -ifneq ($(wildcard metis-5.1.0),) +ifeq (,$(MY_METIS_LIB)) + # uninstall METIS, which came from SuiteSparse/metis-5.1.0 $(RM) $(INSTALL_LIB)/libmetis.* $(RM) $(INSTALL_INCLUDE)/metis.h $(RM) $(INSTALL_DOC)/METIS_manual.pdf @@ -114,7 +115,7 @@ library: metis ( cd CSparse && $(MAKE) library ) ( cd CXSparse && $(MAKE) library ) ( cd RBio && $(MAKE) library ) -ifneq ($(GPU_CONFIG),) +ifneq (,$(GPU_CONFIG)) ( cd SuiteSparse_GPURuntime && $(MAKE) library ) ( cd GPUQREngine && $(MAKE) library ) endif @@ -146,7 +147,7 @@ purge: # - ( cd PIRO_BAND && $(MAKE) purge ) # - ( cd SKYLINE_SVD && $(MAKE) purge ) - $(RM) MATLAB_Tools/*/*.mex* MATLAB_Tools/spok/private/*.mex* - - $(RM) include/* bin/* lib/* doc/* + - $(RM) -r include/* bin/* lib/* share/* # Remove all files not in the original distribution, but keep the libraries clean: @@ -188,6 +189,7 @@ distclean: purge # Note that the CXSparse directory should initially not exist. cx: ( cd CSparse ; $(MAKE) purge ) + ( cd SuiteSparse_config && $(MAKE) ) ( cd CXSparse_newfiles ; tar cfv - * | gzip -9 > ../CXSparse_newfiles.tar.gz ) ./CSparse_to_CXSparse CSparse CXSparse CXSparse_newfiles.tar.gz ( cd CXSparse/Demo ; $(MAKE) ) @@ -200,8 +202,8 @@ cx: cov: purge ( cd CXSparse && $(MAKE) cov ) ( cd CSparse && $(MAKE) cov ) - ( cd KLU && $(MAKE) cov ) ( cd CHOLMOD && $(MAKE) cov ) + ( cd KLU && $(MAKE) cov ) ( cd SPQR && $(MAKE) cov ) ( cd UMFPACK && $(MAKE) cov ) # ( cd PIRO_BAND && $(MAKE) cov ) @@ -212,18 +214,16 @@ cov: purge metis: include/metis.h # Install the shared version of METIS in SuiteSparse/lib. -# The SO_INSTALL_NAME is only needed on the Mac, so *.dylib is hardcoded +# The SO_INSTALL_NAME commmand is only needed on the Mac, so *.dylib is +# hardcoded below. include/metis.h: -ifneq ($(wildcard metis-5.1.0),) +ifeq (,$(MY_METIS_LIB)) - ( cd metis-5.1.0 && $(MAKE) config shared=1 prefix=$(SUITESPARSE) ) - ( cd metis-5.1.0 && $(MAKE) ) - ( cd metis-5.1.0 && $(MAKE) install ) - $(SO_INSTALL_NAME) $(SUITESPARSE)/lib/libmetis.dylib \ $(SUITESPARSE)/lib/libmetis.dylib else - # METIS 5.1.0 not present, put in a place-holder that disables its use - # in SuiteSparse - echo "/* METIS 5.1.0 not installed for use in SuiteSparse */" > include/metis.h - echo "#define NPARTITION" >> include/metis.h + @echo 'Using pre-installed METIS 5.1.0 library at ' '[$(MY_METIS_LIB)]' endif diff --git a/RBio/Doc/ChangeLog b/RBio/Doc/ChangeLog index 43832c4a9..524c124e9 100644 --- a/RBio/Doc/ChangeLog +++ b/RBio/Doc/ChangeLog @@ -1,3 +1,7 @@ +Feb 1, 2016: version 2.2.4 + + * update to Makefiles + Jan 30, 2016: version 2.2.3 * modifications to Makefiles diff --git a/RBio/Include/RBio.h b/RBio/Include/RBio.h index 3adb26334..ea43245ff 100644 --- a/RBio/Include/RBio.h +++ b/RBio/Include/RBio.h @@ -86,11 +86,11 @@ extern "C" { #define RBIO_VALUE_IOERROR (-94) /* I/O error: numerical values */ #define RBIO_FILE_IOERROR (-95) /* I/O error: cannot read/write the file */ -#define RBIO_DATE "Jan 30, 2016" +#define RBIO_DATE "Feb 1, 2016" #define RBIO_VER_CODE(main,sub) ((main) * 1000 + (sub)) #define RBIO_MAIN_VERSION 2 #define RBIO_SUB_VERSION 2 -#define RBIO_SUBSUB_VERSION 3 +#define RBIO_SUBSUB_VERSION 4 #define RBIO_VERSION RBIO_VER_CODE(RBIO_MAIN_VERSION,RBIO_SUB_VERSION) diff --git a/RBio/Lib/Makefile b/RBio/Lib/Makefile index 6ad59c0b4..5456b70d0 100644 --- a/RBio/Lib/Makefile +++ b/RBio/Lib/Makefile @@ -3,25 +3,28 @@ #=============================================================================== LIBRARY = librbio -VERSION = 2.2.3 +VERSION = 2.2.4 SO_VERSION = 2 default: library - $(MAKE) install INSTALL=$(CURDIR)/../.. \ - INSTALL_DOC=$(CURDIR)/../../doc ccode: all include ../../SuiteSparse_config/SuiteSparse_config.mk +# RBio depends on SuiteSparse_config +LDLIBS += -lsuitesparseconfig + +# compile and install in SuiteSparse/lib +library: + $(MAKE) install INSTALL=$(SUITESPARSE) + C = $(CC) $(CF) I = -I../Include -I../../SuiteSparse_config all: library -library: $(AR_TARGET) $(SO_TARGET) - purge: distclean distclean: clean @@ -42,9 +45,6 @@ $(AR_TARGET): $(OBJ) $(ARCHIVE) $@ $^ - $(RANLIB) $@ -$(SO_TARGET): $(OBJ) - $(CC) $(SO_OPTS) $^ -o $@ - #------------------------------------------------------------------------------- # 64-bit long version (default) @@ -58,14 +58,13 @@ RBio_i.o: ../Source/RBio.c #------------------------------------------------------------------------------- # install RBio -install: $(INSTALL_LIB)/$(SO_TARGET) +install: $(AR_TARGET) $(INSTALL_LIB)/$(SO_TARGET) -$(INSTALL_LIB)/$(SO_TARGET): $(SO_TARGET) +$(INSTALL_LIB)/$(SO_TARGET): $(OBJ) @mkdir -p $(INSTALL_LIB) @mkdir -p $(INSTALL_INCLUDE) @mkdir -p $(INSTALL_DOC) - $(CP) $(SO_TARGET) $(INSTALL_LIB) - $(SO_INSTALL_NAME) $(INSTALL_LIB)/$(SO_TARGET) $(INSTALL_LIB)/$(SO_TARGET) + $(CC) $(SO_OPTS) $^ -o $@ $(LDLIBS) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_PLAIN) ) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_MAIN) ) $(CP) ../Include/RBio.h $(INSTALL_INCLUDE) diff --git a/RBio/Makefile b/RBio/Makefile index 4c7b26927..2abf4c189 100644 --- a/RBio/Makefile +++ b/RBio/Makefile @@ -2,6 +2,9 @@ # RBio Makefile #------------------------------------------------------------------------------- +SUITESPARSE ?= $(realpath $(CURDIR)/..) +export SUITESPARSE + default: all include ../SuiteSparse_config/SuiteSparse_config.mk diff --git a/README.txt b/README.txt index 2237f1844..ad94378b6 100644 --- a/README.txt +++ b/README.txt @@ -1,6 +1,6 @@ SuiteSparse: A Suite of Sparse matrix packages at http://www.suitesparse.com -Jan 30, 2016. SuiteSparse VERSION 4.5.0 +Feb 1, 2016. SuiteSparse VERSION 4.5.1 ------------------ SuiteSparse/README @@ -154,9 +154,14 @@ in the metis-5.1.0 directory. Its use is optional, so you can remove it before compiling SuiteSparse, if you desire. The use of METIS will improve the ordering quality. METIS has been slightly modified for use in SuiteSparse; see the metis-5.1.0/README.txt file for details. SuiteSparse can use the -unmodified METIS 5.1.0, however. Use 'make METIS_PATH=/my/stuff/metis-5.1.0'. -If you want to use METIS in MATLAB, however, you must use the version provided -here, with SuiteSparse. +unmodified METIS 5.1.0, however. To use your own copy of METIS, or a +pre-installed copy of METIS use 'make MY_METIS_LIB=-lmymetis' or +'make MY_METIS_LIB=/my/stuff/metis-5.1.0/whereeveritis/libmetis.so + MY_METIS_INC=/my/stuff/metis-5.1.0/include'. +If you want to use METIS in MATLAB, however, you MUST use the version provided +here, in SuiteSparse/metis-5.1.0. The MATLAB interface to METIS required some +small changes in METIS itself to get it to work. The original METIS 5.1.0 +will segfault MATLAB. Refer to each package for license, copyright, and author information. All codes are authored or co-authored by Timothy A. Davis. @@ -185,8 +190,8 @@ your library search patch, you can do the following (for example): cc myprogram.c -I$(S)/include -lumfpack -lamd -lcholmod -lsuitesparseconfig -lm Do 'make install' if you want to install the libraries and include files in -/usr/local/lib and /usr/local/include, and the documentation in -/usr/share/doc/suitesparse-VERSION. +SuiteSparse/lib and SuiteSparse/include, and the documentation in +SuiteSparse/doc/suitesparse-VERSION. This will work on Linux/Unix and the Mac. It should automatically detect if you have the Intel compilers or not, and whether or not you have CUDA. If this fails, see the SuiteSparse_config/SuiteSparse_config.mk file. There are many @@ -195,13 +200,16 @@ edit that file. For example, to compile with your own BLAS: make BLAS=-lmyblaslibraryhere -To list the primary configuration options (but not compile anything), do: +To list all configuration options (but not compile anything), do: make config +Any parameter you see in the output of 'make config' with an equal sign +can be modified at the 'make' command line. + If you do "make install" by itself, then the packages are all installed in -/usr/local/lib (libraries), /usr/local/include (include *.h files), and -/usr/share/doc/suitesparse-VERSION (documentation). If you want to install +SuiteSparse/lib (libraries), SuiteSparse/include (include *.h files), and +SuiteSparse/doc/suitesparse-VERSION (documentation). If you want to install elsewhere, do: make install INSTALL=/my/path @@ -220,6 +228,13 @@ includes in /usr/local/lib and /usr/local/include, do: which copies the documentation to /tmp/doc where you can then remove it later. +Both the static (*.a) and shared (*.so) libraries are compiled. The *.a +libraries are left in the package Lib folder (AMD/Lib/libamd.a for example). +The main exception to this rule is the SuiteSparse_config library, which is in +SuiteSparse/libsuiteSparseconfig.a. SuiteSparse_config is required by all +packages. The (extremely) optional xerbla library is also an exception, but it +is highly unlikely that you need that library. + The 'make uninstall' takes the same command-line arguments. ---------------------------------- @@ -237,13 +252,11 @@ Step-by-step details: This is optionally used by SuiteSparseQR. Refer to the User Guide in SuiteSparse/SPQR/Doc/spqr_user_guide.pdf for details. -(3) Make other changes to SuiteSparse_config/SuiteSparse_config.mk as needed, - or determine what other command line options you need for 'make'. All - options can be set at the 'make' command line without the need to edit this - file. Browse that file to see what options you can control. If you - choose different options and wish to recompile, be sure to do 'make - distclean' in this directory first, to remove all files not in the - original distribution. +(3) Determine what other command line options you need for 'make'. All options + can be set at the 'make' command line without the need to edit this file. + Browse that file to see what options you can control. If you choose + different options and wish to recompile, be sure to do 'make distclean' in + this directory first, to remove all files not in the original distribution. (4) Type "make" in this directory. All packages will be be compiled. METIS 5.1.0 will be compiled if you have it (note that METIS require CMake to @@ -259,16 +272,20 @@ Step-by-step details: and the compiled libraries are copied into SuiteSparse/lib. Documentation is copied into SuiteSparse/doc. + NOTE: on Linux, you may see some errors when you compile METIS + ('make: *** No rule to make target 'w'.). You can safely ignore those + errors. + (6) To install, type "make install". This will place copies of all - libraries in /usr/local/lib, and all include files in /usr/local/include, - and all documentation in /usr/share/doc/suitesparse-VERSION. You can - change the install location by editting SuiteSparse_config.mk. You can - also do "make install INSTALL=/my/path" which puts the libraries in - /my/path/lib and the include files in /my/path/include. These directories - need not already exist. + libraries in SuiteSparse/lib, and all include files in SuiteSparse/include, + and all documentation in SuiteSparse/doc/suitesparse-VERSION. You can + change the install location by "make install INSTALL=/my/path" which puts + the libraries in /my/path/lib, the include files in /my/path/include, and + documentation in /my/path/doc. These directories are created if they do + not already exist. (7) To uninstall, type "make uninstall", which reverses "make install" - by removing the SuiteSparse libraries from /usr/local/lib, the - include files from /usr/local/include, and the documentaion from - /usr/share/doc. + by removing the SuiteSparse libraries, include files, and documentation + from the place they were installed. If you pass INSTALL_***= options + to 'make install', you must pass the same to 'make uninstall'. diff --git a/SPQR/Demo/Makefile b/SPQR/Demo/Makefile index a5882bf07..14326838e 100644 --- a/SPQR/Demo/Makefile +++ b/SPQR/Demo/Makefile @@ -27,7 +27,7 @@ CLIB = $(LDFLAGS) -L../../lib -lspqr -lsuitesparseconfig -lcholmod -lamd \ # use the BLAS and LAPACK defined by SuiteSparse_config.mk; do not use valgrind FLIB = $(LAPACK) $(BLAS) -V = +V = # To use Valgrind and the plain BLAS and plain LAPACK (non-optimized): # FLIB = -lgfortran -llapack_plain -lblas_plain -lg2c @@ -159,7 +159,8 @@ INC = ../Include/spqr.hpp ../Include/SuiteSparseQR_C.h \ I = -I../../include $(I_WITH_SPQRGPU) -C = $(CXX) $(CF) $(SPQR_CONFIG) $(CONFIG_PARTITION) $(CONFIG_GPU) $(I) +C = $(CXX) $(CF) $(SPQR_CONFIG) $(CONFIG_PARTITION) $(CONFIG_GPU) $(I) \ + $(CHOLMOD_CONFIG) LIBS = $(CLIB) $(FLIB) $(TBB) $(GPULIB) @@ -204,7 +205,7 @@ qrdemoc: qrdemoc.o $(INC) $(C) -o qrdemoc qrdemoc.o $(LIBS) qrsimplec.o: qrsimplec.c $(INC) - $(CC) $(CF) $(SPQR_CONFIG) -ansi $(I) -c $< + $(CC) $(CF) $(SPQR_CONFIG) $(CHOLMOD_CONFIG) -ansi $(I) -c $< qrsimplec: qrsimplec.o $(INC) $(C) -o qrsimplec qrsimplec.o $(LIBS) diff --git a/SPQR/Demo/qrdemo.cpp b/SPQR/Demo/qrdemo.cpp index 764a53474..3f76d974f 100644 --- a/SPQR/Demo/qrdemo.cpp +++ b/SPQR/Demo/qrdemo.cpp @@ -37,6 +37,7 @@ void check_residual // get the rank(A) estimate rnk = cc->SPQR_istat [4] ; +#ifndef NMATRIXOPS // anorm = norm (A,1) ; anorm = cholmod_l_norm_sparse (A, 1, cc) ; @@ -63,6 +64,10 @@ void check_residual "rel. norm(A'(Ax-b)) %8.1e\n", rnorm, rnk, atrnorm) ; cholmod_l_free_dense (&r, cc) ; cholmod_l_free_dense (&atr, cc) ; +#else + printf ("relative norm(Ax-b): not computed (requires CHOLMOD/MatrixOps)\n"); + printf ("rank: %6ld\n", rnk) ; +#endif } // ============================================================================= diff --git a/SPQR/Demo/qrsimple.cpp b/SPQR/Demo/qrsimple.cpp index 27330ccc6..647ca357f 100644 --- a/SPQR/Demo/qrsimple.cpp +++ b/SPQR/Demo/qrsimple.cpp @@ -10,7 +10,7 @@ int main (int argc, char **argv) { cholmod_common Common, *cc ; cholmod_sparse *A ; - cholmod_dense *X, *B, *Residual ; + cholmod_dense *X, *B, *Residual = NULL ; double rnorm, one [2] = {1,0}, minusone [2] = {-1,0} ; int mtype ; @@ -28,11 +28,15 @@ int main (int argc, char **argv) // X = A\B X = SuiteSparseQR (A, B, cc) ; +#ifndef NMATRIXOPS // rnorm = norm (B-A*X) Residual = cholmod_l_copy_dense (B, cc) ; cholmod_l_sdmult (A, 0, minusone, one, X, Residual, cc) ; rnorm = cholmod_l_norm_dense (Residual, 2, cc) ; printf ("2-norm of residual: %8.1e\n", rnorm) ; +#else + printf ("2-norm of residual: not computed (requires CHOLMOD/MatrixOps)\n") ; +#endif printf ("rank %ld\n", cc->SPQR_istat [4]) ; // free everything and finish CHOLMOD diff --git a/SPQR/Demo/qrsimplec.c b/SPQR/Demo/qrsimplec.c index 4596bb904..5fabe2593 100644 --- a/SPQR/Demo/qrsimplec.c +++ b/SPQR/Demo/qrsimplec.c @@ -10,7 +10,7 @@ int main (int argc, char **argv) { cholmod_common Common, *cc ; cholmod_sparse *A ; - cholmod_dense *X, *B, *Residual ; + cholmod_dense *X, *B, *Residual = NULL ; double rnorm, one [2] = {1,0}, minusone [2] = {-1,0} ; int mtype ; @@ -28,11 +28,15 @@ int main (int argc, char **argv) /* X = A\B */ X = SuiteSparseQR_C_backslash_default (A, B, cc) ; +#ifndef NMATRIXOPS /* rnorm = norm (B-A*X) */ Residual = cholmod_l_copy_dense (B, cc) ; cholmod_l_sdmult (A, 0, minusone, one, X, Residual, cc) ; rnorm = cholmod_l_norm_dense (Residual, 2, cc) ; printf ("2-norm of residual: %8.1e\n", rnorm) ; +#else + printf ("2-norm of residual: not computed (requires CHOLMOD/MatrixOps)\n") ; +#endif printf ("rank %ld\n", cc->SPQR_istat [4]) ; /* free everything and finish CHOLMOD */ diff --git a/SPQR/Doc/ChangeLog b/SPQR/Doc/ChangeLog index 80c1b2d0c..dbb5c4c21 100644 --- a/SPQR/Doc/ChangeLog +++ b/SPQR/Doc/ChangeLog @@ -1,3 +1,10 @@ +Feb 1, 2016: version 2.0.5 + + * update to Makefiles + * better error handling when -DNGPL is used in CHOLMOD. + SuiteSparseQR requires the CHOLMOD/Supernodal module. This is now + checked both at compile time and at run time. + Jan 30, 2016: versions 2.0.4 * modifications to Makefiles diff --git a/SPQR/Doc/spqr_user_guide.pdf b/SPQR/Doc/spqr_user_guide.pdf index a9d051904fb3252db6cc3bc5b00f6e47385de937..d6be318d6850eb96f6bd9eb5b6eeac5d6e0471b0 100644 GIT binary patch delta 5660 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 delta 6348 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 || !(Sc->is_ll)) + { + cholmod_l_free_factor (&Sc, cc) ; + FREE_WORK ; + ERROR (CHOLMOD_INVALID, + "SuiteSparseQR requires the CHOLMOD/Supernodal module") ; + return (NULL) ; + } + ASSERT (Sc != NULL && Sc->is_ll && Sc->is_super) ; // ------------------------------------------------------------------------- diff --git a/SuiteSparse_GPURuntime/Doc/ChangeLog b/SuiteSparse_GPURuntime/Doc/ChangeLog index e0bfc1445..cb8c100ab 100644 --- a/SuiteSparse_GPURuntime/Doc/ChangeLog +++ b/SuiteSparse_GPURuntime/Doc/ChangeLog @@ -1,3 +1,7 @@ +Feb 1, 2016: version 1.0.3 + + * update to Makefiles + Jan 30, 2016: version 1.0.2 * modifications to Makefiles diff --git a/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_Runtime.hpp b/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_Runtime.hpp index 0de78ad7a..616a4bc9b 100644 --- a/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_Runtime.hpp +++ b/SuiteSparse_GPURuntime/Include/SuiteSparseGPU_Runtime.hpp @@ -21,11 +21,11 @@ class Workspace; #include "SuiteSparseGPU_Workspace.hpp" // Version information: -#define SUITESPARSE_GPURUNTIME_DATE "Jan 30, 2016" +#define SUITESPARSE_GPURUNTIME_DATE "Feb 1, 2016" #define SUITESPARSE_GPURUNTIME_VER_CODE(main,sub) ((main) * 1000 + (sub)) #define SUITESPARSE_GPURUNTIME_MAIN_VERSION 1 #define SUITESPARSE_GPURUNTIME_SUB_VERSION 0 -#define SUITESPARSE_GPURUNTIME_SUBSUB_VERSION 2 +#define SUITESPARSE_GPURUNTIME_SUBSUB_VERSION 3 #define SUITESPARSE_GPURUNTIME_VERSION \ SUITESPARSE_GPURUNTIME_VER_CODE(SUITESPARSE_GPURUNTIME_MAIN_VERSION,SUITESPARSE_GPURUNTIME_SUB_VERSION) diff --git a/SuiteSparse_GPURuntime/Lib/Makefile b/SuiteSparse_GPURuntime/Lib/Makefile index e21ce350a..4da8153e3 100644 --- a/SuiteSparse_GPURuntime/Lib/Makefile +++ b/SuiteSparse_GPURuntime/Lib/Makefile @@ -3,30 +3,33 @@ #------------------------------------------------------------------------------- LIBRARY = libSuiteSparse_GPURuntime -VERSION = 1.0.2 +VERSION = 1.0.3 SO_VERSION = 1 default: library - $(MAKE) install INSTALL=$(CURDIR)/../.. \ - INSTALL_DOC=$(CURDIR)/../../doc include ../../SuiteSparse_config/SuiteSparse_config.mk +# SuiteSparse_GPURuntime depends on SuiteSparse_config and CUDA +LDLIBS += -lsuitesparseconfig $(CUDART_LIB) + +# compile and install in SuiteSparse/lib +library: + $(MAKE) install INSTALL=$(SUITESPARSE) + OBJS = SuiteSparseGPU_Workspace.o \ SuiteSparseGPU_Workspace_cpuAllocators.o \ SuiteSparseGPU_Workspace_gpuAllocators.o \ SuiteSparseGPU_Workspace_transfer.o INC = -I../Include -I../../SuiteSparse_config -LIBS = $(CUDART_LIB) H = \ ../Include/SuiteSparseGPU_Workspace.hpp \ ../Include/SuiteSparseGPU_debug.hpp \ ../Include/SuiteSparseGPU_macros.hpp \ ../Include/SuiteSparseGPU_workspace_macros.hpp \ - ../Include/SuiteSparseGPU_Runtime.hpp \ - Makefile + ../Include/SuiteSparseGPU_Runtime.hpp #------------------------------------------------------------------------------- @@ -36,8 +39,6 @@ runtime: library lib: library -library: $(AR_TARGET) $(SO_TARGET) - clean: $(RM) -r $(CLEAN) @@ -50,9 +51,6 @@ $(AR_TARGET): $(OBJS) $(ARCHIVE) $@ $^ - $(RANLIB) $@ -$(SO_TARGET): $(OBJS) - $(CC) $(SO_OPTS) $^ -o $@ - #------------------------------------------------------------------------------- SuiteSparseGPU_Workspace.o: ../Source/SuiteSparseGPU_Workspace.cpp $(H) @@ -70,14 +68,13 @@ SuiteSparseGPU_Workspace_transfer.o: ../Source/SuiteSparseGPU_Workspace_transfer #------------------------------------------------------------------------------- # install SuiteSparse_GPURuntime (just the library, not the include files) -install: $(INSTALL_LIB)/$(SO_TARGET) +install: $(AR_TARGET) $(INSTALL_LIB)/$(SO_TARGET) -$(INSTALL_LIB)/$(SO_TARGET): $(SO_TARGET) +$(INSTALL_LIB)/$(SO_TARGET): $(OBJS) @mkdir -p $(INSTALL_LIB) @mkdir -p $(INSTALL_INCLUDE) @mkdir -p $(INSTALL_DOC) - $(CP) $(SO_TARGET) $(INSTALL_LIB) - $(SO_INSTALL_NAME) $(INSTALL_LIB)/$(SO_TARGET) $(INSTALL_LIB)/$(SO_TARGET) + $(CC) $(SO_OPTS) $^ -o $@ $(LDLIBS) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_PLAIN) ) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_MAIN) ) $(CP) ../README.txt $(INSTALL_DOC)/GPURUNTIME_README.txt diff --git a/SuiteSparse_GPURuntime/Makefile b/SuiteSparse_GPURuntime/Makefile index 994b7ce24..099948f16 100644 --- a/SuiteSparse_GPURuntime/Makefile +++ b/SuiteSparse_GPURuntime/Makefile @@ -2,6 +2,9 @@ # SuiteSparse_GPURuntime Makefile #------------------------------------------------------------------------------- +SUITESPARSE ?= $(realpath $(CURDIR)/..) +export SUITESPARSE + default: all include ../SuiteSparse_config/SuiteSparse_config.mk diff --git a/SuiteSparse_config/Makefile b/SuiteSparse_config/Makefile index 70ebdf6ab..2f53093fc 100644 --- a/SuiteSparse_config/Makefile +++ b/SuiteSparse_config/Makefile @@ -2,32 +2,35 @@ # SuiteSparse_config Makefile #------------------------------------------------------------------------------- +SUITESPARSE ?= $(realpath $(CURDIR)/..) +export SUITESPARSE + # version of SuiteSparse_config is also version of SuiteSparse meta-package LIBRARY = libsuitesparseconfig -VERSION = 4.5.0 +VERSION = 4.5.1 SO_VERSION = 4 default: library - $(MAKE) install INSTALL=$(CURDIR)/.. INSTALL_DOC=$(CURDIR)/../doc include SuiteSparse_config.mk ccode: all -all: $(AR_TARGET) $(SO_TARGET) +all: library + +# compile and install in SuiteSparse/lib +library: $(AR_TARGET) + $(MAKE) install INSTALL=$(SUITESPARSE) -library: $(AR_TARGET) $(SO_TARGET) +OBJ = SuiteSparse_config.o SuiteSparse_config.o: SuiteSparse_config.c SuiteSparse_config.h $(CC) $(CF) -c SuiteSparse_config.c -$(AR_TARGET): SuiteSparse_config.o +$(AR_TARGET): $(OBJ) $(ARCHIVE) $(AR_TARGET) SuiteSparse_config.o $(RANLIB) $(AR_TARGET) -$(SO_TARGET): SuiteSparse_config.o - $(CC) $(SO_OPTS) $^ -o $@ - distclean: purge purge: clean @@ -39,14 +42,13 @@ clean: - $(RM) -r $(CLEAN) # install SuiteSparse_config -install: $(INSTALL_LIB)/$(SO_TARGET) +install: $(AR_TARGET) $(INSTALL_LIB)/$(SO_TARGET) -$(INSTALL_LIB)/$(SO_TARGET): $(SO_TARGET) +$(INSTALL_LIB)/$(SO_TARGET): $(OBJ) @mkdir -p $(INSTALL_LIB) @mkdir -p $(INSTALL_INCLUDE) @mkdir -p $(INSTALL_DOC) - $(CP) $(SO_TARGET) $(INSTALL_LIB) - $(SO_INSTALL_NAME) $(INSTALL_LIB)/$(SO_TARGET) $(INSTALL_LIB)/$(SO_TARGET) + $(CC) $(SO_OPTS) $^ -o $@ $(LDLIBS) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_PLAIN) ) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_MAIN) ) $(CP) SuiteSparse_config.h $(INSTALL_INCLUDE) diff --git a/SuiteSparse_config/SuiteSparse_config.h b/SuiteSparse_config/SuiteSparse_config.h index 10b464de6..c4b4cfcf3 100644 --- a/SuiteSparse_config/SuiteSparse_config.h +++ b/SuiteSparse_config/SuiteSparse_config.h @@ -184,24 +184,24 @@ int SuiteSparse_divcomplex * * SuiteSparse contains the following packages: * - * SuiteSparse_config version 4.5.0 (version always the same as SuiteSparse) - * AMD version 2.4.3 - * BTF version 1.2.3 - * CAMD version 2.4.3 - * CCOLAMD version 2.9.3 - * CHOLMOD version 3.0.8 - * COLAMD version 2.9.3 - * CSparse version 3.1.6 - * CXSparse version 3.1.6 - * GPUQREngine version 1.0.2 - * KLU version 1.3.5 - * LDL version 2.2.3 - * RBio version 2.2.3 - * SPQR version 2.0.4 - * SuiteSparse_GPURuntime version 1.0.2 + * SuiteSparse_config version 4.5.1 (version always the same as SuiteSparse) + * AMD version 2.4.4 + * BTF version 1.2.4 + * CAMD version 2.4.4 + * CCOLAMD version 2.9.4 + * CHOLMOD version 3.0.9 + * COLAMD version 2.9.4 + * CSparse version 3.1.7 + * CXSparse version 3.1.7 + * GPUQREngine version 1.0.3 + * KLU version 1.3.6 + * LDL version 2.2.4 + * RBio version 2.2.4 + * SPQR version 2.0.5 + * SuiteSparse_GPURuntime version 1.0.3 * UMFPACK version 5.7.3 * MATLAB_Tools various packages & M-files - * xerbla version 1.0.1 + * xerbla version 1.0.2 * * Other package dependencies: * BLAS required by CHOLMOD and UMFPACK diff --git a/SuiteSparse_config/SuiteSparse_config.mk b/SuiteSparse_config/SuiteSparse_config.mk index a4d8ec4bc..91a424bd9 100644 --- a/SuiteSparse_config/SuiteSparse_config.mk +++ b/SuiteSparse_config/SuiteSparse_config.mk @@ -5,7 +5,7 @@ # This file contains all configuration settings for all packages in SuiteSparse, # except for CSparse (which is stand-alone) and the packages in MATLAB_Tools. -SUITESPARSE_VERSION = 4.5.0 +SUITESPARSE_VERSION = 4.5.1 #=============================================================================== # Options you can change without editing this file: @@ -31,7 +31,31 @@ SUITESPARSE_VERSION = 4.5.0 # Most Makefiles are in SuiteSparse/Pkg/Lib or SuiteSparse/Pkg/Demo, so # the top-level of SuiteSparse is in ../.. unless otherwise specified. - SUITESPARSE ?= $(CURDIR)/../.. + # This is true for all but the SuiteSparse_config package. + SUITESPARSE ?= $(realpath $(CURDIR)/../..) + + #--------------------------------------------------------------------------- + # installation location + #--------------------------------------------------------------------------- + + # For "make install" and "make uninstall", the default location is + # SuiteSparse/lib, SuiteSparse/include, and + # SuiteSparse/share/doc/suitesparse-x.y.z + # If you do this: + # make install INSTALL=/usr/local + # then the libraries are installed in /usr/local/lib, include files in + # /usr/local/include, and documentation in + # /usr/local/share/doc/suitesparse-x.y.z. + # You can instead specify the install location of each of these 3 components + # separately, via (for example): + # make install INSTALL_LIB=/yada/mylibs INSTALL_INCLUDE=/yoda/myinc \ + # INSTALL_DOC=/solo/mydox + # which puts the libraries in /yada/mylibs, include files in /yoda/myinc, + # and documentation in /solo/mydox. + INSTALL ?= $(SUITESPARSE) + INSTALL_LIB ?= $(INSTALL)/lib + INSTALL_INCLUDE ?= $(INSTALL)/include + INSTALL_DOC ?= $(INSTALL)/share/doc/suitesparse-$(SUITESPARSE_VERSION) #--------------------------------------------------------------------------- # optimization level @@ -52,8 +76,11 @@ SUITESPARSE_VERSION = 4.5.0 AUTOCC = no CC = gcc CXX = g++ - BLAS = -lrefblas -lgfortran + BLAS = -lrefblas -lgfortran -lstdc++ LAPACK = -llapack + CFLAGS += --coverage + OPTIMIZATION = -g + LDFLAGS += --coverage endif #--------------------------------------------------------------------------- @@ -109,6 +136,7 @@ SUITESPARSE_VERSION = 4.5.0 # It places its shared *.so libraries in SuiteSparse/lib. # Linux also requires the -lrt library (see below) LDLIBS ?= -lm + LDFLAGS += -L$(INSTALL_LIB) # See http://www.openblas.net for a recent and freely available optimzed # BLAS. LAPACK is at http://www.netlib.org/lapack/ . You can use the @@ -137,8 +165,7 @@ SUITESPARSE_VERSION = 4.5.0 endif # For ACML, use this instead: - ## BLAS = -lacml -lgfortran - ## LAPACK = + # make BLAS='-lacml -lgfortran' #--------------------------------------------------------------------------- # shell commands @@ -160,17 +187,6 @@ SUITESPARSE_VERSION = 4.5.0 F77 ?= gfortran F77FLAGS ?= $(FFLAGS) $(OPTIMIZATION) - #--------------------------------------------------------------------------- - # installation location - #--------------------------------------------------------------------------- - - # For "make install" and "make uninstall", default location is - # /usr/local/lib, /usr/local/include, and /usr/share/doc/suitesparse-x.y.z - INSTALL ?= /usr/local - INSTALL_LIB ?= $(INSTALL)/lib - INSTALL_INCLUDE ?= $(INSTALL)/include - INSTALL_DOC ?= /usr/share/doc/suitesparse-$(SUITESPARSE_VERSION) - #--------------------------------------------------------------------------- # NVIDIA CUDA configuration for CHOLMOD and SPQR #--------------------------------------------------------------------------- @@ -215,16 +231,6 @@ SUITESPARSE_VERSION = 4.5.0 -gencode=arch=compute_50,code=compute_50 endif - #--------------------------------------------------------------------------- - # METIS configuration - #--------------------------------------------------------------------------- - - # Most packages are built in SuiteSparse/PackageName/Lib, so this is a - # relative path to SuiteSparse/metis-5.1.0. If you use a pre-installed - # copy of METIS, you can use it instead via 'make METIS=/my/metis-5.1.0'. - - METIS_PATH ?= $(SUITESPARSE)/metis-5.1.0 - #--------------------------------------------------------------------------- # UMFPACK configuration: #--------------------------------------------------------------------------- @@ -238,14 +244,14 @@ SUITESPARSE_VERSION = 4.5.0 # -DNRECIPROCAL do not multiply by the reciprocal # -DNO_DIVIDE_BY_ZERO do not divide by zero # -DNCHOLMOD do not use CHOLMOD as a ordering method. If -DNCHOLMOD is - # included in UMFPACK_CONFIG, then UMFPACK does not rely on + # included in UMFPACK_CONFIG, then UMFPACK does not rely on # CHOLMOD, CAMD, CCOLAMD, COLAMD, and METIS. UMFPACK_CONFIG ?= # For example, uncomment this line to compile UMFPACK without CHOLMOD: # UMFPACK_CONFIG = -DNCHOLMOD - # or use 'make UMFPACK_CONFIG=-DCHOLMOD' + # or use 'make UMFPACK_CONFIG=-DNCHOLMOD' #--------------------------------------------------------------------------- # CHOLMOD configuration @@ -296,7 +302,7 @@ SUITESPARSE_VERSION = 4.5.0 # -DNPARTITION do not include the CHOLMOD partition module # -DNEXPERT do not include the functions in SuiteSparseQR_expert.cpp # -DHAVE_TBB enable the use of Intel's Threading Building Blocks - # -DGPU_BLAS enable the use of the CUDA BLAS + # -DGPU_BLAS enable the use of the CUDA BLAS SPQR_CONFIG ?= $(GPU_CONFIG) @@ -333,7 +339,7 @@ SUITESPARSE_VERSION = 4.5.0 ifeq ($(UNAME),Linux) # add the realtime library, librt, and SuiteSparse/lib - LDLIBS += -lrt -Wl,-rpath=$(SUITESPARSE)/lib + LDLIBS += -lrt -Wl,-rpath=$(INSTALL_LIB) endif #--------------------------------------------------------------------------- @@ -447,42 +453,73 @@ else SO_PLAIN = $(LIBRARY).so SO_MAIN = $(LIBRARY).so.$(SO_VERSION) SO_TARGET = $(LIBRARY).so.$(VERSION) - SO_OPTS += -shared -Wl,-soname -Wl,$(SO_MAIN) + SO_OPTS += -shared -Wl,-soname -Wl,$(SO_MAIN) -Wl,--no-undefined # Linux/Unix *.so files can be moved without modification: SO_INSTALL_NAME = echo endif endif #=============================================================================== -# Configure METIS for the CHOLMOD/Partition module +# Configure CHOLMOD/Partition module with METIS, CAMD, and CCOLAMD #=============================================================================== -# the optional CHOLMOD Partition module requires METIS, CAMD, and CCOLAMD. -# CAMD and CCOLAMD can be installed without METIS, but are optional. +# By default, SuiteSparse uses METIS 5.1.0 in the SuiteSparse/metis-5.1.0 +# directory. SuiteSparse's interface to METIS is only through the +# SuiteSparse/CHOLMOD/Partition module, which also requires SuiteSparse/CAMD +# and SuiteSparse/CCOLAMD. +# +# If you wish to use your own pre-installed copy of METIS, use the MY_METIS_LIB +# and MY_METIS_INC options passed to 'make'. For example: +# make MY_METIS_LIB=-lmetis +# make MY_METIS_LIB=/home/myself/mylibraries/libmetis.so +# make MY_METIS_LIB='-L/home/myself/mylibraries -lmetis' +# If you need to tell the compiler where to find the metis.h include file, +# then add MY_METIS_INC=/home/myself/metis-5.1.0/include as well, which points +# to the directory containing metis.h. If metis.h is already installed in +# a location known to the compiler (/usr/local/include/metis.h for example) +# then you do not need to add MY_METIS_INC. + I_WITH_PARTITION = LIB_WITH_PARTITION = CONFIG_PARTITION = -DNPARTITION -DNCAMD # check if CAMD/CCOLAMD and METIS are requested and available ifeq (,$(findstring -DNCAMD, $(CHOLMOD_CONFIG))) - # CAMD and CCOLAMD are requested. See if they are available - ifeq (../../CAMD, $(wildcard ../../CAMD)) - ifeq (../../CCOLAMD, $(wildcard ../../CCOLAMD)) + # CAMD and CCOLAMD are requested. See if they are available in + # SuiteSparse/CAMD and SuiteSparse/CCOLAMD + ifneq (, $(wildcard $(SUITESPARSE)/CAMD)) + ifneq (, $(wildcard $(SUITESPARSE)/CCOLAMD)) # CAMD and CCOLAMD are requested and available LIB_WITH_PARTITION = -lccolamd -lcamd - I_WITH_PARTITION = -I../../CCOLAMD/Include -I../../CAMD/Include + I_WITH_PARTITION = -I$(SUITESPARSE)/CCOLAMD/Include -I$(SUITESPARSE)/CAMD/Include CONFIG_PARTITION = -DNPARTITION # check if METIS is requested and available ifeq (,$(findstring -DNPARTITION, $(CHOLMOD_CONFIG))) - # METIS is requested. See if it is available - ifeq ($(METIS_PATH), $(wildcard $(METIS_PATH))) - # METIS is available - ifeq ($(UNAME), Darwin) - LIB_WITH_PARTITION += ../../lib/libmetis.dylib - else - LIB_WITH_PARTITION += -lmetis + # METIS is requested. See if it is available. + ifneq (,$(MY_METIS_LIB)) + # METIS 5.1.0 is provided elsewhere, and we are not using + # SuiteSparse/metis-5.1.0. To do so, we link with + # $(MY_METIS_LIB) and add the -I$(MY_METIS_INC) option for + # the compiler. The latter can be empty if you have METIS + # installed in a place where the compiler can find the + # metis.h include file by itself without any -I option + # (/usr/local/include/metis.h for example). + LIB_WITH_PARTITION += $(MY_METIS_LIB) + ifneq (,$(MY_METIS_INC)) + I_WITH_PARTITION += -I$(MY_METIS_INC) endif - I_WITH_PARTITION += -I$(METIS_PATH)/include CONFIG_PARTITION = + else + # see if METIS is in SuiteSparse/metis-5.1.0 + ifneq (, $(wildcard $(SUITESPARSE)/metis-5.1.0)) + # SuiteSparse/metis5.1.0 is available + ifeq ($(UNAME), Darwin) + LIB_WITH_PARTITION += $(SUITESPARSE)/lib/libmetis.dylib + else + LIB_WITH_PARTITION += -lmetis + endif + I_WITH_PARTITION += -I$(SUITESPARSE)/metis-5.1.0/include + CONFIG_PARTITION = + endif endif endif endif @@ -520,7 +557,6 @@ config: @echo 'Optimization level: OPTIMIZATION= ' '$(OPTIMIZATION)' @echo 'BLAS library: BLAS= ' '$(BLAS)' @echo 'LAPACK library: LAPACK= ' '$(LAPACK)' - @echo 'METIS path: METIS_PATH= ' '$(METIS_PATH)' @echo 'Intel TBB library: TBB= ' '$(TBB)' @echo 'Other libraries: LDLIBS= ' '$(LDLIBS)' @echo 'static library: AR_TARGET= ' '$(AR_TARGET)' @@ -551,6 +587,14 @@ config: @echo 'SuiteSparseQR config: SPQR_CONFIG= ' '$(SPQR_CONFIG)' @echo 'CUDA library: CUDART_LIB= ' '$(CUDART_LIB)' @echo 'CUBLAS library: CUBLAS_LIB= ' '$(CUBLAS_LIB)' + @echo 'METIS and CHOLMOD/Partition configuration:' + @echo 'Your METIS library: MY_METIS_LIB= ' '$(MY_METIS_LIB)' + @echo 'Your metis.h is in: MY_METIS_INC= ' '$(MY_METIS_INC)' + @echo 'METIS is used via the CHOLMOD/Partition module, configured as follows.' + @echo 'If the next line has -DNPARTITION then METIS will not be used:' + @echo 'CHOLMOD Partition config: ' '$(CONFIG_PARTITION)' + @echo 'CHOLMOD Partition libs: ' '$(LIB_WITH_PARTITION)' + @echo 'CHOLMOD Partition include:' '$(I_WITH_PARTITION)' ifeq ($(TCOV),yes) @echo 'TCOV=yes, for extensive testing only (gcc, g++, vanilla BLAS)' endif diff --git a/SuiteSparse_config/xerbla/Makefile b/SuiteSparse_config/xerbla/Makefile index d76e45d5e..420c50e88 100644 --- a/SuiteSparse_config/xerbla/Makefile +++ b/SuiteSparse_config/xerbla/Makefile @@ -4,13 +4,16 @@ USE_FORTRAN = 0 # USE_FORTRAN = 1 -VERSION = 1.0.1 +VERSION = 1.0.2 SO_VERSION = 1 -default: - $(MAKE) install INSTALL=$(CURDIR)/../.. +default: library -all: ccode fortran +# compile and install in SuiteSparse/lib +library: + $(MAKE) install INSTALL=$(SUITESPARSE) + +all: library ifeq ($(USE_FORTRAN),0) LIBRARY = libcerbla @@ -28,9 +31,9 @@ else DEPENDS = xerbla.f endif -ccode: $(AR_TARGET) $(SO_TARGET) +ccode: all -fortran: ccode +fortran: all $(AR_TARGET): $(DEPENDS) $(COMPILE) @@ -38,20 +41,16 @@ $(AR_TARGET): $(DEPENDS) - $(RANLIB) $(AR_TARGET) - $(RM) xerbla.o -$(SO_TARGET): $(DEPENDS) - $(COMPILE) - $(CC) $(SO_OPTS) xerbla.o -o $@ - - $(RM) xerbla.o - # install libcerbla / libxerbla -install: $(INSTALL_LIB)/$(SO_TARGET) +install: $(AR_TARGET) $(INSTALL_LIB)/$(SO_TARGET) -$(INSTALL_LIB)/$(SO_TARGET): $(SO_TARGET) +$(INSTALL_LIB)/$(SO_TARGET): $(DEPENDS) @mkdir -p $(INSTALL_LIB) @mkdir -p $(INSTALL_INCLUDE) @mkdir -p $(INSTALL_DOC) - $(CP) $(SO_TARGET) $(INSTALL_LIB) - $(SO_INSTALL_NAME) $(INSTALL_LIB)/$(SO_TARGET) $(INSTALL_LIB)/$(SO_TARGET) + $(COMPILE) + $(CC) $(SO_OPTS) xerbla.o -o $@ + - $(RM) xerbla.o ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_PLAIN) ) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_MAIN) ) $(CP) xerbla.h $(INSTALL_INCLUDE) diff --git a/UMFPACK/Demo/Makefile b/UMFPACK/Demo/Makefile index 5002ee401..ce11b4201 100644 --- a/UMFPACK/Demo/Makefile +++ b/UMFPACK/Demo/Makefile @@ -17,33 +17,23 @@ include ../../SuiteSparse_config/SuiteSparse_config.mk #------------------------------------------------------------------------------- # UMFPACK optionally uses the CHOLMOD Partition module -CONFIG1 = -DNCHOLMOD LIB_WITH_CHOLMOD = ifeq (,$(findstring -DNCHOLMOD, $(UMFPACK_CONFIG))) - # CHOLMOD is requested. See if it is available - ifeq (../../CHOLMOD, $(wildcard ../../CHOLMOD)) - ifeq (../../COLAMD, $(wildcard ../../COLAMD)) - # CHOLMOD and COLAMD are available - CONFIG1 = - LIB_WITH_CHOLMOD = -lcholmod -lcolamd - endif - endif + LIB_WITH_CHOLMOD = $(LIB_WITH_PARTITION) $(CUBLAS_LIB) $(CUDART_LIB) endif #------------------------------------------------------------------------------- -C = $(CC) $(CF) $(UMFPACK_CONFIG) $(CONFIG1) $(CONFIG_PARTITION) \ +C = $(CC) $(CF) $(UMFPACK_CONFIG) $(CONFIG_PARTITION) \ -I../../include -LIBS = -L../../lib -lumfpack -lamd -lsuitesparseconfig \ - $(LIB_WITH_CHOLMOD) \ - $(LAPACK) $(BLAS) $(LDLIBS) \ - $(LIB_WITH_PARTITION) $(CUBLAS_LIB) $(CUDART_LIB) +LIBS = $(LDLIBS) -L../../lib -lumfpack -lamd -lsuitesparseconfig \ + $(LIB_WITH_CHOLMOD) $(LAPACK) $(BLAS) libs: metis ( cd ../../SuiteSparse_config ; $(MAKE) ) - ( cd ../Lib ; $(MAKE) ) ( cd ../../AMD ; $(MAKE) library ) + ( cd ../Lib ; $(MAKE) ) - ( cd ../../CHOLMOD && $(MAKE) library ) - ( cd ../../COLAMD && $(MAKE) library ) - ( cd ../../CCOLAMD ; $(MAKE) library ) diff --git a/UMFPACK/Demo/umfpack_di_demo.out b/UMFPACK/Demo/umfpack_di_demo.out index f1b5269ed..2264385e1 100644 --- a/UMFPACK/Demo/umfpack_di_demo.out +++ b/UMFPACK/Demo/umfpack_di_demo.out @@ -1,5 +1,5 @@ -UMFPACK V5.7 (Jan 30, 2016) demo: _di_ version +UMFPACK V5.7 (Feb 1, 2016) demo: _di_ version UMFPACK: Copyright (c) 2005-2013 by Timothy A. Davis. All Rights Reserved. @@ -38,9 +38,9 @@ UMFPACK License: and a notice that the code was modified is included. Availability: http://www.suitesparse.com -UMFPACK V5.7.3 (Jan 30, 2016): OK +UMFPACK V5.7.4 (Feb 1, 2016): OK -UMFPACK V5.7.3 (Jan 30, 2016), Control: +UMFPACK V5.7.4 (Feb 1, 2016), Control: Matrix entry defined as: double Int (generic integer) defined as: int @@ -70,8 +70,8 @@ UMFPACK V5.7.3 (Jan 30, 2016), Control: The following options can only be changed at compile-time: 8: BLAS library used: Fortran BLAS. size of BLAS integer: 4 compiled for ANSI C - no timer used. - computer/operating system: Mac + POSIX C clock_getttime. + computer/operating system: Linux size of int: 4 SuiteSparse_long: 8 Int: 4 pointer: 8 double: 8 Entry: 8 (in bytes) @@ -191,7 +191,7 @@ Numeric factorization of A: Numeric object: largest actual frontal matrix size: 4 memory defragmentations: 1 memory reallocations: 1 - costly memory reallocations: 1 + costly memory reallocations: 0 entries in compressed pattern (L and U): 2 number of nonzeros in L (excl diag): 4 number of entries stored in L (excl diag): 2 @@ -279,12 +279,12 @@ diagonal of U: dense vector, n = 5. Numeric object: OK -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double Int (generic integer) defined as: int BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -352,8 +352,9 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: numerical values stored in Numeric object: 9 numeric factorization defragmentations: 1 numeric factorization reallocations: 1 - costly numeric factorization reallocations: 1 + costly numeric factorization reallocations: 0 numeric factorization wallclock time (sec): 0.00 + numeric factorization mflops (wallclock): 0.00 solve flops: 1.19000e+02 iterative refinement steps taken: 0 @@ -367,7 +368,7 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: UMFPACK: Copyright (c) 2005-2013 by Timothy A. Davis. All Rights Reserved. -UMFPACK V5.7.3 (Jan 30, 2016): OK +UMFPACK V5.7.4 (Feb 1, 2016): OK x (solution of Ax=b): dense vector, n = 5. @@ -383,7 +384,7 @@ maxnorm of residual: 1.06581e-14 UMFPACK: Copyright (c) 2005-2013 by Timothy A. Davis. All Rights Reserved. -UMFPACK V5.7.3 (Jan 30, 2016): OK +UMFPACK V5.7.4 (Feb 1, 2016): OK determinant: (1.14) * 10^(2) @@ -397,12 +398,12 @@ x (solution of Ax=b, solve is split into 3 steps): dense vector, n = 5. maxnorm of residual: 1.06581e-14 -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double Int (generic integer) defined as: int BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -470,8 +471,9 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: numerical values stored in Numeric object: 9 numeric factorization defragmentations: 1 numeric factorization reallocations: 1 - costly numeric factorization reallocations: 1 + costly numeric factorization reallocations: 0 numeric factorization wallclock time (sec): 0.00 + numeric factorization mflops (wallclock): 0.00 solve flops: 1.11000e+02 iterative refinement steps taken: 0 @@ -625,12 +627,12 @@ diagonal of U: dense vector, n = 5. Numeric object: OK -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double Int (generic integer) defined as: int BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -872,12 +874,12 @@ diagonal of U: dense vector, n = 5. Numeric object: OK -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double Int (generic integer) defined as: int BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -1263,12 +1265,12 @@ Freeing numeric object: Loading numeric object: Done loading numeric object -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double Int (generic integer) defined as: int BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -1361,12 +1363,12 @@ maxnorm of residual: 3.55271e-15 Solving C'x=b again, using umfpack_di_wsolve instead: -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double Int (generic integer) defined as: int BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -1459,4 +1461,4 @@ maxnorm of residual: 3.55271e-15 umfpack_di_demo complete. -Total time: 0.00 seconds (CPU time), 0.00 seconds (wallclock time) +Total time: 0.01 seconds (CPU time), 0.01 seconds (wallclock time) diff --git a/UMFPACK/Demo/umfpack_dl_demo.out b/UMFPACK/Demo/umfpack_dl_demo.out index 548789130..ad3d343b1 100644 --- a/UMFPACK/Demo/umfpack_dl_demo.out +++ b/UMFPACK/Demo/umfpack_dl_demo.out @@ -1,5 +1,5 @@ -UMFPACK V5.7 (Jan 30, 2016) demo: _dl_ version +UMFPACK V5.7 (Feb 1, 2016) demo: _dl_ version UMFPACK: Copyright (c) 2005-2013 by Timothy A. Davis. All Rights Reserved. @@ -38,9 +38,9 @@ UMFPACK License: and a notice that the code was modified is included. Availability: http://www.suitesparse.com -UMFPACK V5.7.3 (Jan 30, 2016): OK +UMFPACK V5.7.4 (Feb 1, 2016): OK -UMFPACK V5.7.3 (Jan 30, 2016), Control: +UMFPACK V5.7.4 (Feb 1, 2016), Control: Matrix entry defined as: double Int (generic integer) defined as: SuiteSparse_long @@ -70,8 +70,8 @@ UMFPACK V5.7.3 (Jan 30, 2016), Control: The following options can only be changed at compile-time: 8: BLAS library used: Fortran BLAS. size of BLAS integer: 4 compiled for ANSI C - no timer used. - computer/operating system: Mac + POSIX C clock_getttime. + computer/operating system: Linux size of int: 4 SuiteSparse_long: 8 Int: 8 pointer: 8 double: 8 Entry: 8 (in bytes) @@ -191,7 +191,7 @@ Numeric factorization of A: Numeric object: largest actual frontal matrix size: 4 memory defragmentations: 1 memory reallocations: 1 - costly memory reallocations: 1 + costly memory reallocations: 0 entries in compressed pattern (L and U): 2 number of nonzeros in L (excl diag): 4 number of entries stored in L (excl diag): 2 @@ -279,12 +279,12 @@ diagonal of U: dense vector, n = 5. Numeric object: OK -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double Int (generic integer) defined as: SuiteSparse_long BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -352,8 +352,9 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: numerical values stored in Numeric object: 9 numeric factorization defragmentations: 1 numeric factorization reallocations: 1 - costly numeric factorization reallocations: 1 + costly numeric factorization reallocations: 0 numeric factorization wallclock time (sec): 0.00 + numeric factorization mflops (wallclock): 0.00 solve flops: 1.19000e+02 iterative refinement steps taken: 0 @@ -367,7 +368,7 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: UMFPACK: Copyright (c) 2005-2013 by Timothy A. Davis. All Rights Reserved. -UMFPACK V5.7.3 (Jan 30, 2016): OK +UMFPACK V5.7.4 (Feb 1, 2016): OK x (solution of Ax=b): dense vector, n = 5. @@ -383,7 +384,7 @@ maxnorm of residual: 1.06581e-14 UMFPACK: Copyright (c) 2005-2013 by Timothy A. Davis. All Rights Reserved. -UMFPACK V5.7.3 (Jan 30, 2016): OK +UMFPACK V5.7.4 (Feb 1, 2016): OK determinant: (1.14) * 10^(2) @@ -397,12 +398,12 @@ x (solution of Ax=b, solve is split into 3 steps): dense vector, n = 5. maxnorm of residual: 1.06581e-14 -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double Int (generic integer) defined as: SuiteSparse_long BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -470,8 +471,9 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: numerical values stored in Numeric object: 9 numeric factorization defragmentations: 1 numeric factorization reallocations: 1 - costly numeric factorization reallocations: 1 + costly numeric factorization reallocations: 0 numeric factorization wallclock time (sec): 0.00 + numeric factorization mflops (wallclock): 0.00 solve flops: 1.11000e+02 iterative refinement steps taken: 0 @@ -538,7 +540,7 @@ Numeric factorization of modified A: Numeric object: largest actual frontal matrix size: 4 memory defragmentations: 1 memory reallocations: 1 - costly memory reallocations: 1 + costly memory reallocations: 0 entries in compressed pattern (L and U): 2 number of nonzeros in L (excl diag): 4 number of entries stored in L (excl diag): 2 @@ -625,12 +627,12 @@ diagonal of U: dense vector, n = 5. Numeric object: OK -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double Int (generic integer) defined as: SuiteSparse_long BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -698,7 +700,7 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: numerical values stored in Numeric object: 8 numeric factorization defragmentations: 1 numeric factorization reallocations: 1 - costly numeric factorization reallocations: 1 + costly numeric factorization reallocations: 0 numeric factorization wallclock time (sec): 0.00 solve flops: 1.17000e+02 @@ -784,7 +786,7 @@ Numeric factorization of completely modified A: Numeric object: largest actual frontal matrix size: 4 memory defragmentations: 1 memory reallocations: 1 - costly memory reallocations: 1 + costly memory reallocations: 0 entries in compressed pattern (L and U): 2 number of nonzeros in L (excl diag): 4 number of entries stored in L (excl diag): 2 @@ -872,12 +874,12 @@ diagonal of U: dense vector, n = 5. Numeric object: OK -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double Int (generic integer) defined as: SuiteSparse_long BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -945,7 +947,7 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: numerical values stored in Numeric object: 9 numeric factorization defragmentations: 1 numeric factorization reallocations: 1 - costly numeric factorization reallocations: 1 + costly numeric factorization reallocations: 0 numeric factorization wallclock time (sec): 0.00 solve flops: 1.19000e+02 @@ -1263,12 +1265,12 @@ Freeing numeric object: Loading numeric object: Done loading numeric object -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double Int (generic integer) defined as: SuiteSparse_long BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -1361,12 +1363,12 @@ maxnorm of residual: 3.55271e-15 Solving C'x=b again, using umfpack_dl_wsolve instead: -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double Int (generic integer) defined as: SuiteSparse_long BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -1459,4 +1461,4 @@ maxnorm of residual: 3.55271e-15 umfpack_dl_demo complete. -Total time: 0.00 seconds (CPU time), 0.00 seconds (wallclock time) +Total time: 0.01 seconds (CPU time), 0.01 seconds (wallclock time) diff --git a/UMFPACK/Demo/umfpack_zi_demo.out b/UMFPACK/Demo/umfpack_zi_demo.out index 7b5d90d89..cde29a156 100644 --- a/UMFPACK/Demo/umfpack_zi_demo.out +++ b/UMFPACK/Demo/umfpack_zi_demo.out @@ -1,5 +1,5 @@ -UMFPACK V5.7 (Jan 30, 2016) demo: _zi_ version +UMFPACK V5.7 (Feb 1, 2016) demo: _zi_ version UMFPACK: Copyright (c) 2005-2013 by Timothy A. Davis. All Rights Reserved. @@ -38,9 +38,9 @@ UMFPACK License: and a notice that the code was modified is included. Availability: http://www.suitesparse.com -UMFPACK V5.7.3 (Jan 30, 2016): OK +UMFPACK V5.7.4 (Feb 1, 2016): OK -UMFPACK V5.7.3 (Jan 30, 2016), Control: +UMFPACK V5.7.4 (Feb 1, 2016), Control: Matrix entry defined as: double complex Int (generic integer) defined as: int @@ -70,8 +70,8 @@ UMFPACK V5.7.3 (Jan 30, 2016), Control: The following options can only be changed at compile-time: 8: BLAS library used: Fortran BLAS. size of BLAS integer: 4 compiled for ANSI C - no timer used. - computer/operating system: Mac + POSIX C clock_getttime. + computer/operating system: Linux size of int: 4 SuiteSparse_long: 8 Int: 4 pointer: 8 double: 8 Entry: 16 (in bytes) @@ -191,7 +191,7 @@ Numeric factorization of A: Numeric object: largest actual frontal matrix size: 4 memory defragmentations: 1 memory reallocations: 1 - costly memory reallocations: 1 + costly memory reallocations: 0 entries in compressed pattern (L and U): 2 number of nonzeros in L (excl diag): 4 number of entries stored in L (excl diag): 2 @@ -279,12 +279,12 @@ diagonal of U: dense vector, n = 5. Numeric object: OK -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double complex Int (generic integer) defined as: int BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -352,8 +352,9 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: numerical values stored in Numeric object: 9 numeric factorization defragmentations: 1 numeric factorization reallocations: 1 - costly numeric factorization reallocations: 1 + costly numeric factorization reallocations: 0 numeric factorization wallclock time (sec): 0.00 + numeric factorization mflops (wallclock): 0.01 solve flops: 1.02800e+03 iterative refinement steps taken: 1 @@ -367,7 +368,7 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: UMFPACK: Copyright (c) 2005-2013 by Timothy A. Davis. All Rights Reserved. -UMFPACK V5.7.3 (Jan 30, 2016): OK +UMFPACK V5.7.4 (Feb 1, 2016): OK x (solution of Ax=b): dense vector, n = 5. @@ -383,7 +384,7 @@ maxnorm of residual: 1.77636e-15 UMFPACK: Copyright (c) 2005-2013 by Timothy A. Davis. All Rights Reserved. -UMFPACK V5.7.3 (Jan 30, 2016): OK +UMFPACK V5.7.4 (Feb 1, 2016): OK determinant: (-1.7814+ (2.3784)i) * 10^(2) @@ -397,12 +398,12 @@ x (solution of Ax=b, solve is split into 3 steps): dense vector, n = 5. maxnorm of residual: 1.77636e-14 -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double complex Int (generic integer) defined as: int BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -470,8 +471,9 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: numerical values stored in Numeric object: 9 numeric factorization defragmentations: 1 numeric factorization reallocations: 1 - costly numeric factorization reallocations: 1 + costly numeric factorization reallocations: 0 numeric factorization wallclock time (sec): 0.00 + numeric factorization mflops (wallclock): 0.01 solve flops: 4.80000e+02 iterative refinement steps taken: 0 @@ -625,12 +627,12 @@ diagonal of U: dense vector, n = 5. Numeric object: OK -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double complex Int (generic integer) defined as: int BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -784,7 +786,7 @@ Numeric factorization of completely modified A: Numeric object: largest actual frontal matrix size: 4 memory defragmentations: 1 memory reallocations: 1 - costly memory reallocations: 1 + costly memory reallocations: 0 entries in compressed pattern (L and U): 2 number of nonzeros in L (excl diag): 4 number of entries stored in L (excl diag): 2 @@ -872,12 +874,12 @@ diagonal of U: dense vector, n = 5. Numeric object: OK -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double complex Int (generic integer) defined as: int BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -945,7 +947,7 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: numerical values stored in Numeric object: 9 numeric factorization defragmentations: 1 numeric factorization reallocations: 1 - costly numeric factorization reallocations: 1 + costly numeric factorization reallocations: 0 numeric factorization wallclock time (sec): 0.00 solve flops: 5.23000e+02 @@ -1082,7 +1084,7 @@ Numeric factorization of C: Numeric object: largest actual frontal matrix size: 4 memory defragmentations: 1 memory reallocations: 1 - costly memory reallocations: 0 + costly memory reallocations: 1 entries in compressed pattern (L and U): 2 number of nonzeros in L (excl diag): 3 number of entries stored in L (excl diag): 2 @@ -1263,12 +1265,12 @@ Freeing numeric object: Loading numeric object: Done loading numeric object -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double complex Int (generic integer) defined as: int BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -1336,7 +1338,7 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: numerical values stored in Numeric object: 9 numeric factorization defragmentations: 1 numeric factorization reallocations: 1 - costly numeric factorization reallocations: 0 + costly numeric factorization reallocations: 1 numeric factorization wallclock time (sec): 0.00 solve flops: 4.80000e+02 @@ -1361,12 +1363,12 @@ maxnorm of residual: 4.88498e-15 Solving C'x=b again, using umfpack_zi_wsolve instead: -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double complex Int (generic integer) defined as: int BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -1434,7 +1436,7 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: numerical values stored in Numeric object: 9 numeric factorization defragmentations: 1 numeric factorization reallocations: 1 - costly numeric factorization reallocations: 0 + costly numeric factorization reallocations: 1 numeric factorization wallclock time (sec): 0.00 solve flops: 4.80000e+02 @@ -1459,4 +1461,4 @@ maxnorm of residual: 4.88498e-15 umfpack_zi_demo complete. -Total time: 0.00 seconds (CPU time), 0.00 seconds (wallclock time) +Total time: 0.01 seconds (CPU time), 0.01 seconds (wallclock time) diff --git a/UMFPACK/Demo/umfpack_zl_demo.out b/UMFPACK/Demo/umfpack_zl_demo.out index 8e4f0e8c0..dcd9dabc3 100644 --- a/UMFPACK/Demo/umfpack_zl_demo.out +++ b/UMFPACK/Demo/umfpack_zl_demo.out @@ -1,5 +1,5 @@ -UMFPACK V5.7 (Jan 30, 2016) demo: _zl_ version +UMFPACK V5.7 (Feb 1, 2016) demo: _zl_ version UMFPACK: Copyright (c) 2005-2013 by Timothy A. Davis. All Rights Reserved. @@ -38,9 +38,9 @@ UMFPACK License: and a notice that the code was modified is included. Availability: http://www.suitesparse.com -UMFPACK V5.7.3 (Jan 30, 2016): OK +UMFPACK V5.7.4 (Feb 1, 2016): OK -UMFPACK V5.7.3 (Jan 30, 2016), Control: +UMFPACK V5.7.4 (Feb 1, 2016), Control: Matrix entry defined as: double complex Int (generic integer) defined as: SuiteSparse_long @@ -70,8 +70,8 @@ UMFPACK V5.7.3 (Jan 30, 2016), Control: The following options can only be changed at compile-time: 8: BLAS library used: Fortran BLAS. size of BLAS integer: 4 compiled for ANSI C - no timer used. - computer/operating system: Mac + POSIX C clock_getttime. + computer/operating system: Linux size of int: 4 SuiteSparse_long: 8 Int: 8 pointer: 8 double: 8 Entry: 16 (in bytes) @@ -191,7 +191,7 @@ Numeric factorization of A: Numeric object: largest actual frontal matrix size: 4 memory defragmentations: 1 memory reallocations: 1 - costly memory reallocations: 1 + costly memory reallocations: 0 entries in compressed pattern (L and U): 2 number of nonzeros in L (excl diag): 4 number of entries stored in L (excl diag): 2 @@ -279,12 +279,12 @@ diagonal of U: dense vector, n = 5. Numeric object: OK -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double complex Int (generic integer) defined as: SuiteSparse_long BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -352,8 +352,9 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: numerical values stored in Numeric object: 9 numeric factorization defragmentations: 1 numeric factorization reallocations: 1 - costly numeric factorization reallocations: 1 + costly numeric factorization reallocations: 0 numeric factorization wallclock time (sec): 0.00 + numeric factorization mflops (wallclock): 0.02 solve flops: 1.02800e+03 iterative refinement steps taken: 1 @@ -367,7 +368,7 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: UMFPACK: Copyright (c) 2005-2013 by Timothy A. Davis. All Rights Reserved. -UMFPACK V5.7.3 (Jan 30, 2016): OK +UMFPACK V5.7.4 (Feb 1, 2016): OK x (solution of Ax=b): dense vector, n = 5. @@ -383,7 +384,7 @@ maxnorm of residual: 1.77636e-15 UMFPACK: Copyright (c) 2005-2013 by Timothy A. Davis. All Rights Reserved. -UMFPACK V5.7.3 (Jan 30, 2016): OK +UMFPACK V5.7.4 (Feb 1, 2016): OK determinant: (-1.7814+ (2.3784)i) * 10^(2) @@ -397,12 +398,12 @@ x (solution of Ax=b, solve is split into 3 steps): dense vector, n = 5. maxnorm of residual: 1.77636e-14 -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double complex Int (generic integer) defined as: SuiteSparse_long BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -470,8 +471,9 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: numerical values stored in Numeric object: 9 numeric factorization defragmentations: 1 numeric factorization reallocations: 1 - costly numeric factorization reallocations: 1 + costly numeric factorization reallocations: 0 numeric factorization wallclock time (sec): 0.00 + numeric factorization mflops (wallclock): 0.02 solve flops: 4.80000e+02 iterative refinement steps taken: 0 @@ -538,7 +540,7 @@ Numeric factorization of modified A: Numeric object: largest actual frontal matrix size: 4 memory defragmentations: 1 memory reallocations: 1 - costly memory reallocations: 1 + costly memory reallocations: 0 entries in compressed pattern (L and U): 2 number of nonzeros in L (excl diag): 3 number of entries stored in L (excl diag): 1 @@ -625,12 +627,12 @@ diagonal of U: dense vector, n = 5. Numeric object: OK -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double complex Int (generic integer) defined as: SuiteSparse_long BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -698,7 +700,7 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: numerical values stored in Numeric object: 8 numeric factorization defragmentations: 1 numeric factorization reallocations: 1 - costly numeric factorization reallocations: 1 + costly numeric factorization reallocations: 0 numeric factorization wallclock time (sec): 0.00 solve flops: 5.15000e+02 @@ -784,7 +786,7 @@ Numeric factorization of completely modified A: Numeric object: largest actual frontal matrix size: 4 memory defragmentations: 1 memory reallocations: 1 - costly memory reallocations: 1 + costly memory reallocations: 0 entries in compressed pattern (L and U): 2 number of nonzeros in L (excl diag): 4 number of entries stored in L (excl diag): 2 @@ -872,12 +874,12 @@ diagonal of U: dense vector, n = 5. Numeric object: OK -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double complex Int (generic integer) defined as: SuiteSparse_long BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -945,7 +947,7 @@ UMFPACK V5.7.3 (Jan 30, 2016), Info: numerical values stored in Numeric object: 9 numeric factorization defragmentations: 1 numeric factorization reallocations: 1 - costly numeric factorization reallocations: 1 + costly numeric factorization reallocations: 0 numeric factorization wallclock time (sec): 0.00 solve flops: 5.23000e+02 @@ -1263,12 +1265,12 @@ Freeing numeric object: Loading numeric object: Done loading numeric object -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double complex Int (generic integer) defined as: SuiteSparse_long BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -1361,12 +1363,12 @@ maxnorm of residual: 4.88498e-15 Solving C'x=b again, using umfpack_zl_wsolve instead: -UMFPACK V5.7.3 (Jan 30, 2016), Info: +UMFPACK V5.7.4 (Feb 1, 2016), Info: matrix entry defined as: double complex Int (generic integer) defined as: SuiteSparse_long BLAS library used: Fortran BLAS. size of BLAS integer: 4 MATLAB: no. - CPU timer: none. + CPU timer: POSIX C clock_getttime ( ) routine. number of rows in matrix A: 5 number of columns in matrix A: 5 entries in matrix A: 12 @@ -1459,4 +1461,4 @@ maxnorm of residual: 4.88498e-15 umfpack_zl_demo complete. -Total time: 0.00 seconds (CPU time), 0.00 seconds (wallclock time) +Total time: 0.01 seconds (CPU time), 0.01 seconds (wallclock time) diff --git a/UMFPACK/Doc/ChangeLog b/UMFPACK/Doc/ChangeLog index 2bc006d36..38544841b 100644 --- a/UMFPACK/Doc/ChangeLog +++ b/UMFPACK/Doc/ChangeLog @@ -1,3 +1,7 @@ +Feb 1, 2016: version 5.7.4 + + * update to Makefiles + Jan 30, 2016: version 5.7.3 * better Makefiles for creating and installing shared libraries diff --git a/UMFPACK/Doc/UMFPACK_QuickStart.pdf b/UMFPACK/Doc/UMFPACK_QuickStart.pdf index ef9309c9cc494b6420517315500f5cd067e796fd..d0d043e43442ef234da6c4876d571b7fdb8d6e51 100644 GIT binary patch delta 13944 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

-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 gI#hy!7$2Ps9G%=8O-wPK!b5lf7<6fdBvi delta 13833 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

vKP=7xYw5{2^0IZQlk$NZDfySN6k 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 K^x}#VX#Woa+2M}> diff --git a/UMFPACK/Doc/UMFPACK_QuickStart.tex b/UMFPACK/Doc/UMFPACK_QuickStart.tex index d466dc129..82007d750 100644 --- a/UMFPACK/Doc/UMFPACK_QuickStart.tex +++ b/UMFPACK/Doc/UMFPACK_QuickStart.tex @@ -18,7 +18,7 @@ \author{Timothy A. Davis \\ DrTimothyAldenDavis@gmail.com, http://www.suitesparse.com} \title{UMFPACK Quick Start Guide} -\date{VERSION 5.7.3, Jan 30, 2016} +\date{VERSION 5.7.4, Feb 1, 2016} \maketitle %------------------------------------------------------------------------------- diff --git a/UMFPACK/Doc/UMFPACK_UserGuide.pdf b/UMFPACK/Doc/UMFPACK_UserGuide.pdf index 1ae5688377cec7cf8510456e7056dde596f29ba0..4f8226c9303512f0d171f368ad0b214274b75ecd 100644 GIT binary patch delta 21297 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 U?MzJR!6^VH(DU(KRFTw}OfHvSr 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 Q5=B7KA3ds|rAYt(04Q-gE&u=k diff --git a/UMFPACK/Doc/UMFPACK_UserGuide.stex b/UMFPACK/Doc/UMFPACK_UserGuide.stex index 06db83029..315f7d147 100644 --- a/UMFPACK/Doc/UMFPACK_UserGuide.stex +++ b/UMFPACK/Doc/UMFPACK_UserGuide.stex @@ -20,7 +20,7 @@ \author{Timothy A. Davis \\ DrTimothyAldenDavis@gmail.com, http://www.suitesparse.com} \title{UMFPACK User Guide} -\date{VERSION 5.7.3, Jan 30, 2016} +\date{VERSION 5.7.4, Feb 1, 2016} \maketitle %------------------------------------------------------------------------------- diff --git a/UMFPACK/Include/umfpack.h b/UMFPACK/Include/umfpack.h index 7357a9d12..3b9282e12 100644 --- a/UMFPACK/Include/umfpack.h +++ b/UMFPACK/Include/umfpack.h @@ -95,7 +95,7 @@ extern "C" { /* Version, copyright, and license */ /* -------------------------------------------------------------------------- */ -#define UMFPACK_VERSION "UMFPACK V5.7.3 (Jan 30, 2016)" +#define UMFPACK_VERSION "UMFPACK V5.7.4 (Feb 1, 2016)" #define UMFPACK_COPYRIGHT \ "UMFPACK: Copyright (c) 2005-2013 by Timothy A. Davis. All Rights Reserved.\n" @@ -161,11 +161,11 @@ extern "C" { * above. */ -#define UMFPACK_DATE "Jan 30, 2016" +#define UMFPACK_DATE "Feb 1, 2016" #define UMFPACK_VER_CODE(main,sub) ((main) * 1000 + (sub)) #define UMFPACK_MAIN_VERSION 5 #define UMFPACK_SUB_VERSION 7 -#define UMFPACK_SUBSUB_VERSION 3 +#define UMFPACK_SUBSUB_VERSION 4 #define UMFPACK_VER UMFPACK_VER_CODE(UMFPACK_MAIN_VERSION,UMFPACK_SUB_VERSION) /* -------------------------------------------------------------------------- */ diff --git a/UMFPACK/Lib/Makefile b/UMFPACK/Lib/Makefile index fed564807..776a630f3 100644 --- a/UMFPACK/Lib/Makefile +++ b/UMFPACK/Lib/Makefile @@ -3,21 +3,28 @@ #------------------------------------------------------------------------------- LIBRARY = libumfpack -VERSION = 5.7.3 +VERSION = 5.7.4 SO_VERSION = 5 default: library - $(MAKE) install INSTALL=$(CURDIR)/../.. \ - INSTALL_DOC=$(CURDIR)/../../doc include ../../SuiteSparse_config/SuiteSparse_config.mk +# UMFPACK depends on AMD, SuiteSparse_config, LAPACK, and the BLAS. +# It optionally relies on CHOLMOD +LDLIBS += -lamd -lsuitesparseconfig $(LAPACK) $(BLAS) + +# compile and install in SuiteSparse/lib +library: + $(MAKE) install INSTALL=$(SUITESPARSE) + # UMFPACK can use CHOLMOD by default as an ordering option ifneq (,$(findstring -DNCHOLMOD, $(UMFPACK_CONFIG))) I = -I../Include -I../Source -I../../AMD/Include -I../../SuiteSparse_config else I = -I../Include -I../Source -I../../AMD/Include \ -I../../SuiteSparse_config -I../../CHOLMOD/Include + LDLIBS += -lcholmod endif C = $(CC) $(CF) $(UMFPACK_CONFIG) $(I) @@ -261,17 +268,10 @@ umfpack_gn_%.o: ../Source/umfpack_%.c $(INC) OBJ = $(II) $(LL) $(GN) $(DI) $(DL) $(ZI) $(ZL) -library: $(AR_TARGET) $(SO_TARGET) - -so: $(SO_TARGET) - $(AR_TARGET): $(OBJ) $(ARCHIVE) $@ $^ - $(RANLIB) $@ -$(SO_TARGET): $(OBJ) - $(CC) $(SO_OPTS) $^ -o $@ - #------------------------------------------------------------------------------- # Remove all but the files in the original distribution #------------------------------------------------------------------------------- @@ -286,14 +286,13 @@ clean: #------------------------------------------------------------------------------- # install UMFPACK -install: $(INSTALL_LIB)/$(SO_TARGET) +install: $(AR_TARGET) $(INSTALL_LIB)/$(SO_TARGET) -$(INSTALL_LIB)/$(SO_TARGET): $(SO_TARGET) +$(INSTALL_LIB)/$(SO_TARGET): $(OBJ) @mkdir -p $(INSTALL_LIB) @mkdir -p $(INSTALL_INCLUDE) @mkdir -p $(INSTALL_DOC) - $(CP) $(SO_TARGET) $(INSTALL_LIB) - $(SO_INSTALL_NAME) $(INSTALL_LIB)/$(SO_TARGET) $(INSTALL_LIB)/$(SO_TARGET) + $(CC) $(SO_OPTS) $^ -o $@ $(LDLIBS) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_PLAIN) ) ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_MAIN) ) $(CP) ../Include/umfpack*.h $(INSTALL_INCLUDE) diff --git a/UMFPACK/Makefile b/UMFPACK/Makefile index 158ba7935..e021d688d 100644 --- a/UMFPACK/Makefile +++ b/UMFPACK/Makefile @@ -2,7 +2,8 @@ # UMFPACK Makefile #------------------------------------------------------------------------------- -# UMFPACK requires the AMD package to be in ../AMD +SUITESPARSE ?= $(realpath $(CURDIR)/..) +export SUITESPARSE default: all @@ -62,7 +63,7 @@ lib: library # statement coverage (requires Linux; takes a lot of time and disk space) cov: purge - ( cd Tcov ; ./DO.all $(TCOV_TMP) ) + ( cd Tcov ; $(MAKE) ) # install UMFPACK install: diff --git a/UMFPACK/Tcov/Make.1 b/UMFPACK/Tcov/Make.1 index d6bb55de2..d03f67636 100644 --- a/UMFPACK/Tcov/Make.1 +++ b/UMFPACK/Tcov/Make.1 @@ -2,10 +2,17 @@ # no BLAS, test for integer overflow. #=============================================================================== +INSTALL ?= /garbage +INSTALL_LIB = $(INSTALL)/lib +INSTALL_INCLUDE = $(INSTALL)/include +INSTALL_DOC = $(INSTALL)/doc + CC = gcc CF = -O0 -g --coverage -fPIC -fopenmp +LDFLAGS = --coverage UMFPACK_CONFIG = -DNBLAS -DTEST_FOR_INTEGER_OVERFLOW -DTESTING -LDLIBS = -llapack -lrefblas -lgfortran -lm -lrt -Wl,-rpath=lib $(LIB2) +LDLIBS = -L$(INSTALL)/lib -llapack -lrefblas -lgfortran -lm -lrt \ + -Wl,-rpath=lib $(LIB2) -lgcov ifneq ($(CUDA),no) CUDA_PATH = $(shell which nvcc 2>/dev/null | sed "s/\/bin\/nvcc//") @@ -27,11 +34,6 @@ SO_TARGET = $(LIBRARY).so.$(VERSION) SO_OPTS = -shared -Wl,-soname -Wl,$(SO_MAIN) SO_INSTALL_NAME = echo -INSTALL ?= /garbage -INSTALL_LIB = $(INSTALL)/lib -INSTALL_INCLUDE = $(INSTALL)/include -INSTALL_DOC = $(INSTALL)/doc - #=============================================================================== CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out diff --git a/UMFPACK/Tcov/Make.2 b/UMFPACK/Tcov/Make.2 index f5f2a9c84..cb8a21a6d 100644 --- a/UMFPACK/Tcov/Make.2 +++ b/UMFPACK/Tcov/Make.2 @@ -2,10 +2,17 @@ # BLAS, no test for integer overflow. #=============================================================================== +INSTALL ?= /garbage +INSTALL_LIB = $(INSTALL)/lib +INSTALL_INCLUDE = $(INSTALL)/include +INSTALL_DOC = $(INSTALL)/doc + CC = gcc CF = -O0 -g --coverage -fPIC -fopenmp +LDFLAGS = --coverage UMFPACK_CONFIG = -DTESTING -LDLIBS = -llapack -lrefblas -lgfortran -lm -lrt -Wl,-rpath=lib +LDLIBS = -L$(INSTALL)/lib -llapack -lrefblas -lgfortran -lm -lrt \ + -Wl,-rpath=lib -lgcov ifneq ($(CUDA),no) CUDA_PATH = $(shell which nvcc 2>/dev/null | sed "s/\/bin\/nvcc//") @@ -27,11 +34,6 @@ SO_TARGET = $(LIBRARY).so.$(VERSION) SO_OPTS = -shared -Wl,-soname -Wl,$(SO_MAIN) SO_INSTALL_NAME = echo -INSTALL ?= /garbage -INSTALL_LIB = $(INSTALL)/lib -INSTALL_INCLUDE = $(INSTALL)/include -INSTALL_DOC = $(INSTALL)/doc - #=============================================================================== CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out diff --git a/UMFPACK/Tcov/Make.3 b/UMFPACK/Tcov/Make.3 index afcc652e8..4888f4149 100644 --- a/UMFPACK/Tcov/Make.3 +++ b/UMFPACK/Tcov/Make.3 @@ -2,10 +2,16 @@ # no BLAS, test for integer overflow. #=============================================================================== +INSTALL ?= /garbage +INSTALL_LIB = $(INSTALL)/lib +INSTALL_INCLUDE = $(INSTALL)/include +INSTALL_DOC = $(INSTALL)/doc + CC = gcc CF = -O3 -fPIC -fopenmp UMFPACK_CONFIG = -DNBLAS -DTEST_FOR_INTEGER_OVERFLOW -DTESTING -LDLIBS = -llapack -lrefblas -lgfortran -lm -lrt -Wl,-rpath=lib +LDLIBS = -L$(INSTALL)/lib -llapack -lrefblas -lgfortran -lm -lrt \ + -Wl,-rpath=lib ifneq ($(CUDA),no) CUDA_PATH = $(shell which nvcc 2>/dev/null | sed "s/\/bin\/nvcc//") @@ -27,11 +33,6 @@ SO_TARGET = $(LIBRARY).so.$(VERSION) SO_OPTS = -shared -Wl,-soname -Wl,$(SO_MAIN) SO_INSTALL_NAME = echo -INSTALL ?= /garbage -INSTALL_LIB = $(INSTALL)/lib -INSTALL_INCLUDE = $(INSTALL)/include -INSTALL_DOC = $(INSTALL)/doc - #=============================================================================== CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out diff --git a/UMFPACK/Tcov/Make.4 b/UMFPACK/Tcov/Make.4 index 8baaf5f20..b97ffd792 100644 --- a/UMFPACK/Tcov/Make.4 +++ b/UMFPACK/Tcov/Make.4 @@ -2,10 +2,16 @@ # BLAS, no test for integer overflow. #=============================================================================== +INSTALL ?= /garbage +INSTALL_LIB = $(INSTALL)/lib +INSTALL_INCLUDE = $(INSTALL)/include +INSTALL_DOC = $(INSTALL)/doc + CC = gcc CF = -O3 -fPIC -fopenmp UMFPACK_CONFIG = -DTESTING -LDLIBS = -llapack -lrefblas -lgfortran -lm -lrt -Wl,-rpath=lib +LDLIBS = -L$(INSTALL)/lib -llapack -lrefblas -lgfortran -lm -lrt \ + -Wl,-rpath=lib ifneq ($(CUDA),no) CUDA_PATH = $(shell which nvcc 2>/dev/null | sed "s/\/bin\/nvcc//") @@ -27,11 +33,6 @@ SO_TARGET = $(LIBRARY).so.$(VERSION) SO_OPTS = -shared -Wl,-soname -Wl,$(SO_MAIN) SO_INSTALL_NAME = echo -INSTALL ?= /garbage -INSTALL_LIB = $(INSTALL)/lib -INSTALL_INCLUDE = $(INSTALL)/include -INSTALL_DOC = $(INSTALL)/doc - #=============================================================================== CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out diff --git a/UMFPACK/Tcov/Make.5 b/UMFPACK/Tcov/Make.5 index 05de6d627..1774a0b08 100644 --- a/UMFPACK/Tcov/Make.5 +++ b/UMFPACK/Tcov/Make.5 @@ -2,10 +2,17 @@ # no BLAS, test for integer overflow. No reciprocal #=============================================================================== +INSTALL ?= /garbage +INSTALL_LIB = $(INSTALL)/lib +INSTALL_INCLUDE = $(INSTALL)/include +INSTALL_DOC = $(INSTALL)/doc + CC = gcc CF = -O0 -g --coverage -fPIC -fopenmp +LDFLAGS = --coverage UMFPACK_CONFIG = -DNBLAS -DTEST_FOR_INTEGER_OVERFLOW -DTESTING -DNRECIPROCAL -LDLIBS = -llapack -lrefblas -lgfortran -lm -lrt -Wl,-rpath=lib +LDLIBS = -L$(INSTALL)/lib -llapack -lrefblas -lgfortran -lm -lrt \ + -Wl,-rpath=lib -lgcov ifneq ($(CUDA),no) CUDA_PATH = $(shell which nvcc 2>/dev/null | sed "s/\/bin\/nvcc//") @@ -27,11 +34,6 @@ SO_TARGET = $(LIBRARY).so.$(VERSION) SO_OPTS = -shared -Wl,-soname -Wl,$(SO_MAIN) SO_INSTALL_NAME = echo -INSTALL ?= /garbage -INSTALL_LIB = $(INSTALL)/lib -INSTALL_INCLUDE = $(INSTALL)/include -INSTALL_DOC = $(INSTALL)/doc - #=============================================================================== CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out diff --git a/UMFPACK/Tcov/Make.6 b/UMFPACK/Tcov/Make.6 index b0ccbe844..d73b3e5c5 100644 --- a/UMFPACK/Tcov/Make.6 +++ b/UMFPACK/Tcov/Make.6 @@ -2,10 +2,17 @@ # BLAS, no test for integer overflow. No timers #=============================================================================== +INSTALL ?= /garbage +INSTALL_LIB = $(INSTALL)/lib +INSTALL_INCLUDE = $(INSTALL)/include +INSTALL_DOC = $(INSTALL)/doc + CC = gcc CF = -O0 -g --coverage -fPIC -fopenmp +LDFLAGS = --coverage UMFPACK_CONFIG = -DTESTING -DNTIMER -LDLIBS = -llapack -lrefblas -lgfortran -lm -lrt -Wl,-rpath=lib +LDLIBS = -L$(INSTALL)/lib -llapack -lrefblas -lgfortran -lm -lrt \ + -Wl,-rpath=lib -lgcov ifneq ($(CUDA),no) CUDA_PATH = $(shell which nvcc 2>/dev/null | sed "s/\/bin\/nvcc//") @@ -27,11 +34,6 @@ SO_TARGET = $(LIBRARY).so.$(VERSION) SO_OPTS = -shared -Wl,-soname -Wl,$(SO_MAIN) SO_INSTALL_NAME = echo -INSTALL ?= /garbage -INSTALL_LIB = $(INSTALL)/lib -INSTALL_INCLUDE = $(INSTALL)/include -INSTALL_DOC = $(INSTALL)/doc - #=============================================================================== CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out diff --git a/UMFPACK/Tcov/Make.7 b/UMFPACK/Tcov/Make.7 index 782727d4d..2f7ad3386 100644 --- a/UMFPACK/Tcov/Make.7 +++ b/UMFPACK/Tcov/Make.7 @@ -2,10 +2,17 @@ # no BLAS, test for integer overflow. No divide by zero. #=============================================================================== +INSTALL ?= /garbage +INSTALL_LIB = $(INSTALL)/lib +INSTALL_INCLUDE = $(INSTALL)/include +INSTALL_DOC = $(INSTALL)/doc + CC = gcc CF = -O0 -g --coverage -fPIC -fopenmp +LDFLAGS = --coverage UMFPACK_CONFIG = -DNBLAS -DTEST_FOR_INTEGER_OVERFLOW -DTESTING -DNO_DIVIDE_BY_ZERO -LDLIBS = -llapack -lrefblas -lgfortran -lm -lrt -Wl,-rpath=lib +LDLIBS = -L$(INSTALL)/lib -llapack -lrefblas -lgfortran -lm -lrt \ + -Wl,-rpath=lib -lgcov ifneq ($(CUDA),no) CUDA_PATH = $(shell which nvcc 2>/dev/null | sed "s/\/bin\/nvcc//") @@ -27,11 +34,6 @@ SO_TARGET = $(LIBRARY).so.$(VERSION) SO_OPTS = -shared -Wl,-soname -Wl,$(SO_MAIN) SO_INSTALL_NAME = echo -INSTALL ?= /garbage -INSTALL_LIB = $(INSTALL)/lib -INSTALL_INCLUDE = $(INSTALL)/include -INSTALL_DOC = $(INSTALL)/doc - #=============================================================================== CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out diff --git a/UMFPACK/Tcov/Make.8 b/UMFPACK/Tcov/Make.8 index 3aba99e28..80e29fc53 100644 --- a/UMFPACK/Tcov/Make.8 +++ b/UMFPACK/Tcov/Make.8 @@ -2,10 +2,17 @@ # BLAS, no test for integer overflow. #=============================================================================== +INSTALL ?= /garbage +INSTALL_LIB = $(INSTALL)/lib +INSTALL_INCLUDE = $(INSTALL)/include +INSTALL_DOC = $(INSTALL)/doc + CC = gcc CF = -O0 -g --coverage -fPIC -fopenmp +LDFLAGS = --coverage UMFPACK_CONFIG = -DTESTING -DNO_DIVIDE_BY_ZERO -LDLIBS = -llapack -lrefblas -lgfortran -lm -lrt -Wl,-rpath=lib +LDLIBS = -L$(INSTALL)/lib -llapack -lrefblas -lgfortran -lm -lrt \ + -Wl,-rpath=lib -lgcov ifneq ($(CUDA),no) CUDA_PATH = $(shell which nvcc 2>/dev/null | sed "s/\/bin\/nvcc//") @@ -27,11 +34,6 @@ SO_TARGET = $(LIBRARY).so.$(VERSION) SO_OPTS = -shared -Wl,-soname -Wl,$(SO_MAIN) SO_INSTALL_NAME = echo -INSTALL ?= /garbage -INSTALL_LIB = $(INSTALL)/lib -INSTALL_INCLUDE = $(INSTALL)/include -INSTALL_DOC = $(INSTALL)/doc - #=============================================================================== CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.c.tcov *.c.gcov gmon.out diff --git a/UMFPACK/Tcov/Makefile b/UMFPACK/Tcov/Makefile index a8e3f41dc..b2bf9886f 100644 --- a/UMFPACK/Tcov/Makefile +++ b/UMFPACK/Tcov/Makefile @@ -6,6 +6,8 @@ include ../../SuiteSparse_config/SuiteSparse_config.mk linux: distclean # ( cd ../.. && $(MAKE) purge ) ( cd ../.. && $(MAKE) metis ) + ( cd ../../SuiteSparse_config && $(MAKE) TCOV=yes ) + ( cd ../../AMD && $(MAKE) TCOV=yes ) ( cd ../../CAMD && $(MAKE) TCOV=yes ) ( cd ../../COLAMD && $(MAKE) TCOV=yes ) ( cd ../../CCOLAMD && $(MAKE) TCOV=yes ) diff --git a/UMFPACK/Tcov/Makefile.di b/UMFPACK/Tcov/Makefile.di index db5aa980f..06eb9b668 100644 --- a/UMFPACK/Tcov/Makefile.di +++ b/UMFPACK/Tcov/Makefile.di @@ -17,12 +17,12 @@ run: prog prog: ( cd SuiteSparse_config ; $(MAKE) ) - ( cd UMFPACK ; $(MAKE) library ) ( cd AMD ; $(MAKE) library ) + ( cd UMFPACK ; $(MAKE) library ) $(CC) $(KIND) $(CF) $(UMFPACK_CONFIG) -IUMFPACK/Source -IAMD/Include \ -Iinclude -o ut ut.c UMFPACK/Lib/*.o \ SuiteSparse_config/*.o AMD/Lib/*.o \ - -Llib -lcholmod -lcolamd -lmetis -lccolamd -lcamd \ + -Llib -lcholmod -lcolamd -lmetis -lccolamd -lcamd -lsuitesparseconfig \ $(LDLIBS) utcov: diff --git a/UMFPACK/Tcov/Makefile.dl b/UMFPACK/Tcov/Makefile.dl index ab2e222b0..a89d0f512 100644 --- a/UMFPACK/Tcov/Makefile.dl +++ b/UMFPACK/Tcov/Makefile.dl @@ -17,12 +17,12 @@ run: prog prog: ( cd SuiteSparse_config ; $(MAKE) ) - ( cd UMFPACK ; $(MAKE) library ) ( cd AMD ; $(MAKE) library ) + ( cd UMFPACK ; $(MAKE) library ) $(CC) $(KIND) $(CF) $(UMFPACK_CONFIG) -IUMFPACK/Source -IAMD/Include \ -Iinclude -o ut ut.c UMFPACK/Lib/*.o \ SuiteSparse_config/*.o AMD/Lib/*.o \ - -Llib -lcholmod -lcolamd -lmetis -lccolamd -lcamd \ + -Llib -lcholmod -lcolamd -lmetis -lccolamd -lcamd -lsuitesparseconfig \ $(LDLIBS) utcov: diff --git a/UMFPACK/Tcov/Makefile.zi b/UMFPACK/Tcov/Makefile.zi index f4aadc2bb..c84e1d036 100644 --- a/UMFPACK/Tcov/Makefile.zi +++ b/UMFPACK/Tcov/Makefile.zi @@ -17,12 +17,12 @@ run: prog prog: ( cd SuiteSparse_config ; $(MAKE) ) - ( cd UMFPACK ; $(MAKE) library ) ( cd AMD ; $(MAKE) library ) + ( cd UMFPACK ; $(MAKE) library ) $(CC) $(KIND) $(CF) $(UMFPACK_CONFIG) -IUMFPACK/Source -IAMD/Include \ -Iinclude -o ut ut.c UMFPACK/Lib/*.o \ SuiteSparse_config/*.o AMD/Lib/*.o \ - -Llib -lcholmod -lcolamd -lmetis -lccolamd -lcamd \ + -Llib -lcholmod -lcolamd -lmetis -lccolamd -lcamd -lsuitesparseconfig \ $(LDLIBS) utcov: diff --git a/UMFPACK/Tcov/Makefile.zl b/UMFPACK/Tcov/Makefile.zl index 8fd679d8f..2bb54716f 100644 --- a/UMFPACK/Tcov/Makefile.zl +++ b/UMFPACK/Tcov/Makefile.zl @@ -17,12 +17,12 @@ run: prog prog: ( cd SuiteSparse_config ; $(MAKE) ) - ( cd UMFPACK ; $(MAKE) library ) ( cd AMD ; $(MAKE) library ) + ( cd UMFPACK ; $(MAKE) library ) $(CC) $(KIND) $(CF) $(UMFPACK_CONFIG) -IUMFPACK/Source -IAMD/Include \ -Iinclude -o ut ut.c UMFPACK/Lib/*.o \ SuiteSparse_config/*.o AMD/Lib/*.o \ - -Llib -lcholmod -lcolamd -lmetis -lccolamd -lcamd \ + -Llib -lcholmod -lcolamd -lmetis -lccolamd -lcamd -lsuitesparseconfig \ $(LDLIBS) utcov: diff --git a/doc/.gitignore b/doc/.gitignore deleted file mode 100644 index 5e7d2734c..000000000 --- a/doc/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore diff --git a/metis-5.1.0/README.txt b/metis-5.1.0/README.txt index ad795c4ff..a29199e9e 100644 --- a/metis-5.1.0/README.txt +++ b/metis-5.1.0/README.txt @@ -5,33 +5,36 @@ SuiteSparse can work with the unmodified version of METIS 5.1.0. These changes are optional, unless you want to use METIS in MATLAB. -(1) The integer type, idx_t, has been set to 64 bits -in metis-5.1.0 include/metis.h. This is the primary change. -If you compile SuiteSparse with the original METIS, it will -work but SuiteSparse will be unable to use METIS on the very -largest matrices. - -(2) with this change to 64 bit integers, a compiler warning -is generated in two files, regarding the use of abs and iabs. -These two files (balance.c and parmetis.c) have been modified -to avoid that warning. - -(3) modified the memory manager to use the MATLAB malloc, -calloc, realloc, and free equivalents when compiling METIS -for MATLAB (GKlib/GKlib.h). Disabled the internal signal -handling of METIS. Has no effect on the compiled -libmetis.so (libmetis.dylib on the Mac). This has no -effect on programs outside of MATLAB, but only when METIS -is used inside a MATLAB mexFunction. - -(4) modified many *.c and *.h files to remove C++ comments -of the form "//". These cause some C compilers to break -(in particular, the C compiler flags used by the MATLAB -mex command on Linux). +(1) In metis-5.1.0/include/metis.h, the default integer size has been changed + from 32 bits to 64 (IDXTYPEWIDTH). METIS 5.1.0 gives this flexility to the + user, asking the user to modify this file. That has been done here. You + may instead use the original METIS 5.1.0, with 32-bit integers. When + compiled, SuiteSparse will properly detect the size of the METIS idx_t, and + it will work gracefully with both versions. The only constraint is that + SuiteSparse will not be able to use METIS on the largest problems, if you + limit its version of METIS to 32-bit integers. + +(2) The files b64.c, rw.c, seq.c, timers.c, in metis-5.1.0/GKlib, and the files + coarsen.c, fm.c, macros.h, mcutil.c, mincon.c, ometis.c, in + metis-5.1.0/libmetis had C++ style comments (//) which break some C + compilers (the MATLAB mex command on Linux, in particular). They have been + removed. If your compiler is OK with //-style comments, then this fix + is optional. + +(3) The files metis-5.1.0/GKlib/GKLib.h and metis-5.1.0/GKlib/memory.c have + been modified to disable the signal-handing in METIS when used via the + MATLAB interface to METIS in CHOLMOD/MATLAB. These signals are used when + METIS runs out of memory, but they break MATLAB (you will get a segfault). + This change is essential if METIS is to be used in MATLAB. + +(4) The abs and iabs functions in the original metis-5.1.0/libmetis/parmetis.c + and metis-5.1.0/libmetis/balance.c give compiler warnings when IDXTYPEWIDTH + is 64, so they have been replaced with a type-agnostic macro, ABS. This is + just a compiler warning, so the fix is optional. See http://glaros.dtc.umn.edu/gkhome/metis/metis/overview for the primary distrubtion of METIS, by George Karypis University of Minnesota. -Tim Davis, Jan 30, 2016, Texas A&M University +Tim Davis, Feb 1, 2016, Texas A&M University diff --git a/metis-5.1.0/include/metis.h b/metis-5.1.0/include/metis.h index d6237aa69..a295fa925 100644 --- a/metis-5.1.0/include/metis.h +++ b/metis-5.1.0/include/metis.h @@ -7,24 +7,39 @@ \version\verbatim $Id$\endverbatim -------------------------------------------------------------------------------- -This file appears as SuiteSparse/metis-5.1.0/metis.h. This copy of metis-5.1.0 -is unchanged from the original distribution, with the exception of this file, -and minor modifications in libmetis/parmetis.c and libmetis/balance.c to -avoid a compiler warning. - -The default integer size has been changed from 32 bits to 64 (IDXTYPEWIDTH). -Modified by Tim Davis, Jan 11, 2016, for SuiteSparse 4.5.0 (and subsequent -versions). You may use the original METIS 5.1.0, with 32-bit integers. When -compiled, SuiteSparse will properly detect the size of the METIS idx_t, and it -will work with both versions. The only constraint is that SuiteSparse will not -be able to use METIS on the largest problems, if you limit its version of METIS -to 32-bit integers. - -The abs and iabs functions in the original libmetis/parmetis.c and -libmetis/balance.c give compiler warnings with this change, so they have been -replaced with a type-agnostic macro, ABS. - -Tim Davis, Jan 30, 2016, Texas A&M University +This file appears as SuiteSparse/metis-5.1.0/include/metis.h. This copy of +SuiteSparse/metis-5.1.0 is changed from the original metis-5.1.0 distribution: + +(1) In metis-5.1.0/include/metis.h, the default integer size has been changed + from 32 bits to 64 (IDXTYPEWIDTH). METIS 5.1.0 gives this flexility to the + user, asking the user to modify this file. That has been done here. You + may instead use the original METIS 5.1.0, with 32-bit integers. When + compiled, SuiteSparse will properly detect the size of the METIS idx_t, and + it will work gracefully with both versions. The only constraint is that + SuiteSparse will not be able to use METIS on the largest problems, if you + limit its version of METIS to 32-bit integers. + +(2) The files b64.c, rw.c, seq.c, timers.c, in metis-5.1.0/GKlib, and the files + coarsen.c, fm.c, macros.h, mcutil.c, mincon.c, ometis.c, in + metis-5.1.0/libmetis had C++ style comments (//) which break some C + compilers (the MATLAB mex command on Linux, in particular). They have been + removed. If your compiler is OK with //-style comments, then this fix + is optional. + +(3) The files metis-5.1.0/GKlib/GKLib.h and metis-5.1.0/GKlib/memory.c have + been modified to disable the signal-handing in METIS when used via the + MATLAB interface to METIS in CHOLMOD/MATLAB. These signals are used when + METIS runs out of memory, but they break MATLAB (you will get a segfault). + This change is essential if METIS is to be used in MATLAB. + +(4) The abs and iabs functions in the original metis-5.1.0/libmetis/parmetis.c + and metis-5.1.0/libmetis/balance.c give compiler warnings when IDXTYPEWIDTH + is 64, so they have been replaced with a type-agnostic macro, ABS. This is + just a compiler warning, so the fix is optional. + +If these changes do not affect you then you can use the original METIS 5.1.0. + +Tim Davis, Feb 1, 2016, Texas A&M University -------------------------------------------------------------------------------- */ diff --git a/share/.gitignore b/share/.gitignore new file mode 100644 index 000000000..b04cc4f1e --- /dev/null +++ b/share/.gitignore @@ -0,0 +1,4 @@ +# Ignore everything in this directory +* +# Except this file +!.gitignore