diff --git a/AMD/CMakeLists.txt b/AMD/CMakeLists.txt index 1203411ff8..286c794473 100644 --- a/AMD/CMakeLists.txt +++ b/AMD/CMakeLists.txt @@ -2,7 +2,7 @@ # SuiteSparse/AMD/CMakeLists.txt: cmake for AMD #------------------------------------------------------------------------------- -# Copyright (c) 1996-2022, Timothy A. Davis, Patrick Amestoy, Iain Duff. +# Copyright (c) 1996-2023, Timothy A. Davis, Patrick Amestoy, Iain Duff. # All Rights Reserved. # SPDX-License-Identifier: BSD-3-clause @@ -12,10 +12,10 @@ cmake_minimum_required ( VERSION 3.20 ) -set ( AMD_DATE "Sept 18, 2023" ) +set ( AMD_DATE "Nov 30, 2023" ) set ( AMD_VERSION_MAJOR 3 ) set ( AMD_VERSION_MINOR 2 ) -set ( AMD_VERSION_SUB 1 ) +set ( AMD_VERSION_SUB 2 ) message ( STATUS "Building AMD version: v" ${AMD_VERSION_MAJOR}. @@ -56,10 +56,10 @@ endif ( ) # find library dependencies #------------------------------------------------------------------------------- -find_package ( SuiteSparse_config 7.2.0 +find_package ( SuiteSparse_config 7.4.0 PATHS ${CMAKE_SOURCE_DIR}/../SuiteSparse_config/build NO_DEFAULT_PATH ) if ( NOT TARGET SuiteSparse::SuiteSparseConfig ) - find_package ( SuiteSparse_config 7.2.0 REQUIRED ) + find_package ( SuiteSparse_config 7.4.0 REQUIRED ) endif ( ) #------------------------------------------------------------------------------- diff --git a/AMD/Demo/amd_demo.out b/AMD/Demo/amd_demo.out index 820ca13055..91142aa77b 100644 --- a/AMD/Demo/amd_demo.out +++ b/AMD/Demo/amd_demo.out @@ -1,7 +1,7 @@ -AMD version 3.2.1, date: Sept 18, 2023 +AMD version 3.2.2, date: Nov 30, 2023 AMD demo, with the 24-by-24 Harwell/Boeing matrix, can_24: -AMD version 3.2.1, Sept 18, 2023: approximate minimum degree ordering +AMD version 3.2.2, Nov 30, 2023: 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 3.2.1, Sept 18, 2023, results: +AMD version 3.2.2, Nov 30, 2023, 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 d3b26e4378..38da8d02e2 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 3.2.1, Sept 18, 2023: approximate minimum degree ordering +AMD version 3.2.2, Nov 30, 2023: 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 3.2.1, Sept 18, 2023, results: +AMD version 3.2.2, Nov 30, 2023, 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 6d588a728a..01ef350a2e 100644 --- a/AMD/Demo/amd_l_demo.out +++ b/AMD/Demo/amd_l_demo.out @@ -1,7 +1,7 @@ -AMD version 3.2.1, date: Sept 18, 2023 +AMD version 3.2.2, date: Nov 30, 2023 AMD demo, with the 24-by-24 Harwell/Boeing matrix, can_24: -AMD version 3.2.1, Sept 18, 2023: approximate minimum degree ordering +AMD version 3.2.2, Nov 30, 2023: 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 3.2.1, Sept 18, 2023, results: +AMD version 3.2.2, Nov 30, 2023, 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 5fcfb1e848..6349d5a785 100644 Binary files a/AMD/Doc/AMD_UserGuide.pdf and b/AMD/Doc/AMD_UserGuide.pdf differ diff --git a/AMD/Doc/ChangeLog b/AMD/Doc/ChangeLog index 7ca9034be8..7bf8a87da3 100644 --- a/AMD/Doc/ChangeLog +++ b/AMD/Doc/ChangeLog @@ -1,3 +1,7 @@ +Nov 30, 2023: version 3.2.2 + + * revised test for integer overflow: for CHOLMOD 5.1.0 tests + Sept 18, 2023: version 3.2.1 * cmake update: add "None" build type, from Antonio Rojas, for Arch Linux diff --git a/AMD/Doc/amd_version.tex b/AMD/Doc/amd_version.tex index 4ddd353e4e..87190dac94 100644 --- a/AMD/Doc/amd_version.tex +++ b/AMD/Doc/amd_version.tex @@ -1,2 +1,2 @@ % version of SuiteSparse/AMD -\date{VERSION 3.2.1, Sept 18, 2023} +\date{VERSION 3.2.2, Nov 30, 2023} diff --git a/AMD/Include/amd.h b/AMD/Include/amd.h index 1f30143771..230c530be9 100644 --- a/AMD/Include/amd.h +++ b/AMD/Include/amd.h @@ -374,10 +374,10 @@ void amd_l_info (double Info [ ]) ; * Versions 1.1 and earlier of AMD do not include a #define'd version number. */ -#define AMD_DATE "Sept 18, 2023" +#define AMD_DATE "Nov 30, 2023" #define AMD_MAIN_VERSION 3 #define AMD_SUB_VERSION 2 -#define AMD_SUBSUB_VERSION 1 +#define AMD_SUBSUB_VERSION 2 #define AMD_VERSION_CODE(main,sub) ((main) * 1000 + (sub)) #define AMD_VERSION AMD_VERSION_CODE(AMD_MAIN_VERSION,AMD_SUB_VERSION) diff --git a/CAMD/CMakeLists.txt b/CAMD/CMakeLists.txt index 7418c5cbca..15661951a8 100644 --- a/CAMD/CMakeLists.txt +++ b/CAMD/CMakeLists.txt @@ -11,10 +11,10 @@ cmake_minimum_required ( VERSION 3.20 ) -set ( CAMD_DATE "Sept 18, 2023" ) +set ( CAMD_DATE "Nov 30, 2023" ) set ( CAMD_VERSION_MAJOR 3 ) set ( CAMD_VERSION_MINOR 2 ) -set ( CAMD_VERSION_SUB 1 ) +set ( CAMD_VERSION_SUB 2 ) message ( STATUS "Building CAMD version: v" ${CAMD_VERSION_MAJOR}. @@ -42,10 +42,10 @@ project ( camd # find library dependencies #------------------------------------------------------------------------------- -find_package ( SuiteSparse_config 7.2.0 +find_package ( SuiteSparse_config 7.4.0 PATHS ${CMAKE_SOURCE_DIR}/../SuiteSparse_config/build NO_DEFAULT_PATH ) if ( NOT TARGET SuiteSparse::SuiteSparseConfig ) - find_package ( SuiteSparse_config 7.2.0 REQUIRED ) + find_package ( SuiteSparse_config 7.4.0 REQUIRED ) endif ( ) #------------------------------------------------------------------------------- diff --git a/CAMD/Demo/camd_demo.out b/CAMD/Demo/camd_demo.out index 4ad3925190..a3c6ac3622 100644 --- a/CAMD/Demo/camd_demo.out +++ b/CAMD/Demo/camd_demo.out @@ -1,7 +1,7 @@ -CAMD version 3.2, date: Sept 18, 2023 +CAMD version 3.2, date: Nov 30, 2023 CAMD demo, with the 24-by-24 Harwell/Boeing matrix, can_24: -camd version 3.2.1, Sept 18, 2023: approximate minimum degree ordering: +camd version 3.2.2, Nov 30, 2023: 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 3.2.1, Sept 18, 2023, results: +CAMD version 3.2.2, Nov 30, 2023, 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 549538d17e..6ac6b740f7 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 3.2.1, Sept 18, 2023: approximate minimum degree ordering: +camd version 3.2.2, Nov 30, 2023: 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 3.2.1, Sept 18, 2023, results: +CAMD version 3.2.2, Nov 30, 2023, 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 6df94cf9f9..6c58e87abc 100644 --- a/CAMD/Demo/camd_l_demo.out +++ b/CAMD/Demo/camd_l_demo.out @@ -1,7 +1,7 @@ -CAMD version 3.2, date: Sept 18, 2023 +CAMD version 3.2, date: Nov 30, 2023 CAMD demo, with the 24-by-24 Harwell/Boeing matrix, can_24: -camd version 3.2.1, Sept 18, 2023: approximate minimum degree ordering: +camd version 3.2.2, Nov 30, 2023: 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 3.2.1, Sept 18, 2023, results: +CAMD version 3.2.2, Nov 30, 2023, 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 b58c5f5cc9..f1f8960542 100644 Binary files a/CAMD/Doc/CAMD_UserGuide.pdf and b/CAMD/Doc/CAMD_UserGuide.pdf differ diff --git a/CAMD/Doc/ChangeLog b/CAMD/Doc/ChangeLog index 421680dd02..96f3f020e9 100644 --- a/CAMD/Doc/ChangeLog +++ b/CAMD/Doc/ChangeLog @@ -1,3 +1,7 @@ +Nov 30, 2023: version 3.2.2 + + * revised test for integer overflow: for CHOLMOD 5.1.0 tests + Sept 18, 2023: version 3.2.1 * cmake update: add "None" build type, from Antonio Rojas, for Arch Linux diff --git a/CAMD/Doc/camd_version.tex b/CAMD/Doc/camd_version.tex index 8ad69e49ae..98f0744f14 100644 --- a/CAMD/Doc/camd_version.tex +++ b/CAMD/Doc/camd_version.tex @@ -1,2 +1,2 @@ % version of SuiteSparse/CAMD -\date{VERSION 3.2.1, Sept 18, 2023} +\date{VERSION 3.2.2, Nov 30, 2023} diff --git a/CAMD/Include/camd.h b/CAMD/Include/camd.h index 6c48f0e2c8..0f9bcc62a7 100644 --- a/CAMD/Include/camd.h +++ b/CAMD/Include/camd.h @@ -384,10 +384,10 @@ void camd_l_info (double Info [ ]) ; * #endif */ -#define CAMD_DATE "Sept 18, 2023" +#define CAMD_DATE "Nov 30, 2023" #define CAMD_MAIN_VERSION 3 #define CAMD_SUB_VERSION 2 -#define CAMD_SUBSUB_VERSION 1 +#define CAMD_SUBSUB_VERSION 2 #define CAMD_VERSION_CODE(main,sub) ((main) * 1000 + (sub)) #define CAMD_VERSION CAMD_VERSION_CODE(CAMD_MAIN_VERSION,CAMD_SUB_VERSION) diff --git a/CHOLMOD/CMakeLists.txt b/CHOLMOD/CMakeLists.txt index 2a875a2de6..8dd2e5e8f9 100644 --- a/CHOLMOD/CMakeLists.txt +++ b/CHOLMOD/CMakeLists.txt @@ -90,10 +90,10 @@ if ( NOT TARGET SuiteSparse::COLAMD ) find_package ( COLAMD 3.2.1 REQUIRED ) endif ( ) -find_package ( AMD 3.2.1 +find_package ( AMD 3.2.2 PATHS ${CMAKE_SOURCE_DIR}/../AMD/build NO_DEFAULT_PATH ) if ( NOT TARGET SuiteSparse::AMD ) - find_package ( AMD 3.2.1 REQUIRED ) + find_package ( AMD 3.2.2 REQUIRED ) endif ( ) #------------------------------------------------------------------------------- @@ -196,10 +196,10 @@ endif ( ) if ( NOT NCAMD ) # find CAMD and CCOLAMD - find_package ( CAMD 3.2.1 + find_package ( CAMD 3.2.2 PATHS ${CMAKE_SOURCE_DIR}/../CAMD/build NO_DEFAULT_PATH ) if ( NOT TARGET SuiteSparse::CAMD ) - find_package ( CAMD 3.2.1 ) + find_package ( CAMD 3.2.2 ) endif ( ) find_package ( CCOLAMD 3.2.1 diff --git a/CHOLMOD/Config/cholmod.h.in b/CHOLMOD/Config/cholmod.h.in index 34f4425447..e30d3417a2 100644 --- a/CHOLMOD/Config/cholmod.h.in +++ b/CHOLMOD/Config/cholmod.h.in @@ -1609,7 +1609,7 @@ int cholmod_change_factor // L->dtype remains unchanged. int to_ll, // if true: convert to LL'; else to LDL' int to_super, // if true: convert to supernodal; else to simplicial - int to_packed, // if true: pack simplicial columns' else: do not pack + int to_packed, // if true: pack simplicial columns; else: do not pack int to_monotonic, // if true, put simplicial columns in order // input/output: cholmod_factor *L, // factor to change. diff --git a/CHOLMOD/Doc/CHOLMOD_UserGuide.pdf b/CHOLMOD/Doc/CHOLMOD_UserGuide.pdf index dcaa7d383a..c9aa957d5a 100644 Binary files a/CHOLMOD/Doc/CHOLMOD_UserGuide.pdf and b/CHOLMOD/Doc/CHOLMOD_UserGuide.pdf differ diff --git a/CHOLMOD/Doc/CHOLMOD_UserGuide.tex b/CHOLMOD/Doc/CHOLMOD_UserGuide.tex index 34474a01cf..f9104eff8b 100644 --- a/CHOLMOD/Doc/CHOLMOD_UserGuide.tex +++ b/CHOLMOD/Doc/CHOLMOD_UserGuide.tex @@ -2186,15 +2186,15 @@ \subsection{{\tt cholmod\_factor\_to\_sparse}: sparse matrix copy of a factor} %--------------------------------------- \input{_factor_to_sparse.tex} -Returns a column-oriented sparse matrix containing the pattern and values -of a simplicial or supernodal numerical factor, and then converts the factor -into a simplicial symbolic factor. If {\tt L} is already packed, monotonic, -and simplicial (which is the case when {\tt cholmod\_factorize} uses the simplicial +Returns a column-oriented sparse matrix containing the pattern and values of a +simplicial or supernodal numerical factor, and then converts the factor into a +simplicial symbolic factor. If {\tt L} is already packed, monotonic, and +simplicial (which is the case when {\tt cholmod\_factorize} uses the simplicial Cholesky factorization algorithm) then this routine requires only a small -amount of time and memory, independent of {\tt n}. -It only operates on numeric factors (real, complex, or zomplex). It does not -change {\tt L->xtype} (the resulting sparse matrix has the same {\tt xtype} -as {\tt L}). If this routine fails, {\tt L} is left unmodified. +amount of time and memory, independent of {\tt n}. It only operates on numeric +factors (real, complex, or zomplex). It does not change {\tt L->xtype} (the +resulting sparse matrix has the same {\tt xtype} as {\tt L}). If this routine +fails, {\tt L} is left unmodified. %--------------------------------------- \subsection{{\tt cholmod\_copy\_factor}: copy factor} @@ -2211,6 +2211,140 @@ \subsection{{\tt cholmod\_factor\_xtype}: change factor xtype} Changes the {\tt xtype} of a factor, to pattern, real, complex, or zomplex. Changing from complex or zomplex to real discards the imaginary part. You cannot change a supernodal factor to the zomplex xtype. + +%--------------------------------------- +\subsection{How many entries are in a CHOLMOD sparse Cholesky factorization?} +%--------------------------------------- + +This is a simple question perhaps a surprisingly complex question to answer. +For a sparse Cholesky factorization in CHOLMOD, there are at least 6 ways to +answer this question. First of all, the kind of factorization ($LL'$ or +$LDL'$) doesn't affect this answer, if the $n$ entries in unit diagonal of $L$ +in the $LDL'$ factorization are excluded. So all of the discussion here +includes this simplification, and ``\verb'L''' can be considered the same +as ``\verb'LD'.'' + +In strictly increasing order of size (except that definition 5 can be larger or +smaller than 3 and/or 4): + +\begin{enumerate} + +\item +The number of entries not numerically equal to zero. This is a bit ephemeral +since it's affected by roundoff, denormals flushing to zero, and so on. +Computing this requires converting a factor to sparse matrix with +\verb'cholmod_factor_to_sparse', followed by \verb'cholmod_drop' with a +\verb'tol' of zero, and then a call to \verb'cholmod_nnz'. There is no method +in CHOLMOD to compute this otherwise. This number is \verb'nnz(L)' in MATLAB +after the built-in \verb'R=chol(A)' (which uses CHOLMOD and where \verb"R=L'") +or in my MATLAB interface as \verb'R=chol2(A)' or \verb'L=lchol(A)', since a +valid MATLAB sparse matrix cannot include any explicit entries that are +numerically equal to zero. However, such a matrix cannot be used in an +update/downdate, nor in my internal solve routines, since those methods require +the chordal property of \verb'L'. That property is broken if entries are +dropped because of exact numerical cancellation. Zero entries are not dropped +by \verb'LD=ldlchol(A)', which works fine in practice but the matrix \verb'LD' +is thus technically not a valid MATLAB sparse matrix. + +\item +The number of entries in the filled graph of \verb'L'. This is a very stable +number, and doesn't depend on roundoff, data structures, or factorization +method used. It only depends on the symbolic pattern of \verb'A', and the +fill-reducing ordering. Some entries can be exactly zero because of roundoff +but this is ignored. This is returned as \verb'Common->lnz' after the call to +\verb'cholmod_analyze'. The value is not saved in \verb'L' itself because it +can change with update/downdates. This can be computed in MATLAB via any +of the following, where any fill-reducing ordering would first need to be +applied to the input matrix \verb'A': + +{\small +\begin{verbatim} + [count] = symbfact (A, ...) ; % built-in + sum (count) + + [count] = symbfact2 (A, ...) ; % mine, but it's the same as symbfact + sum (count) + + [count, h, parent, post, R] = symbfact (A, ...) ; % built-in + nnz (R) + + [count, h, parent, post, R] = symbfact2 (A, ...) ; % mine, the same + nnz (R) + + [count, h, parent, post, L] = symbfact2 (A, ..., 'L') ; % mine, with L not R + nnz (L) +\end{verbatim}} + +Internally the built-in MATLAB \verb'symbfact' function calls CHOLMOD. +The \verb'L' or \verb'R' matrix returned above has the entire pattern, +but where each entry is equal to one. + +\item +The number of entries in the supernodal \verb'L', which is like (2) but with +added entries because of relaxed amalgamation. This affected by everything in +(2), but also the relaxed amalgamation parameters. Entries in the upper +trianglar part of each supernode are excluded, since mathematically, each +supernode is lower trapezoidal (with a square lower triangular part stacked on +top of a rectangular part). This number is computed internally during +the computation to change a factor from a \verb'cholmod_factor' to a +\verb'cholmod_sparse' object, in \verb'cholmod_factor_to_sparse' +and \verb'cholmod_change_factor', when \verb'L' is converted to a +simplicial form that is packed and monotonic. + +\item +The same as (3), but with entries in the upper triangular part included. This +is the bare minimum space required to hold \verb'L' in supernodal form. The +value \verb'L->xsize' is a tight bound on this number (almost always identical +to this value, but I can't guarantee this will always be true). + +\item +The number of entries in \verb'L' after any update/downdates. The +factorization would no longer be supernodal, since doing any update/downdate +converts a superondal \verb'L' into a simplicial one (supernodes are exploited +to reduce the time for each update/downdate, however, but this is done +dynamically). A downdate can delete entries but I don't keep track of when +this happens. I would need to keep \verb'L' as a collection of multisets, and +update/downdate the multiplicity of each entry. I actually did this for a +while but it's costly. So instead I have a \verb'cholmod_resymbol' method to +prune these down to (2). This number can be computed by +\verb'sum(L->nz[0..n-1])', if \verb'L' is simplicial. + +\item +The size of the data structure to hold the entries of \verb'L'. This +number if \verb'L->xsize' for the supernodal case, and \verb'L->nzmax' +otherwise. For a supernodal \verb'L', \verb'L->xsize' treats each supernode as +rectangular, not lower trapezoidal. For a simplicial \verb'L,' after +update/downdate, I can include gaps in the columns of \verb'L' to allow for +room for growth. This value can be obtained from any factor object, +either supernodal or simplicial, and either symbolic or numeric, with the +following expression: + +\begin{verbatim} + (L->is_super) ? L->xsize : L->nzmax +\end{verbatim} + +If \verb'L' is simplicial, this number can change when \verb'L' converted from +symbolic to numeric, depending on the \verb'to_packed' parameter. However, at +any stage this value does give the size of the \verb'L->x' array (and the +\verb'L->z' array if zomplex) that holds the numerical values. If \verb'L' is +symbolic (supernodal or simplicial) these arrays are not yet allocated, and +both \verb'L->x' and \verb'L->z' are \verb'NULL'. This number is in terms of +entires, not bytes, so to get the number of bytes, multiply by +\verb'sizeof(float)' if \verb'L->dtype' is \verb'CHOLMOD_SINGLE', by +\verb'sizeof(double)' if \verb'L->dtype' is \verb'CHOLMOD_DOUBLE', and again by +another factor of 2 if the matrix to factorize is complex or zomplex. + +\end{enumerate} + +Except for the simple expressions for: +\begin{itemize} +\item +(2) \verb'Common->lnz' +\item +and (5) \verb'(L->is_super) ? L->xsize : L->nzmax', +\end{itemize} +there is no user-callable method in CHOLMOD to compute these values. +I may consider adding such a method in a future release. %------------------------------------------------------------------------------- \newpage \section{{\tt Utility} Module: {\tt cholmod\_dense} object} diff --git a/CHOLMOD/Include/cholmod.h b/CHOLMOD/Include/cholmod.h index b2aaa2b973..91c92d17ef 100644 --- a/CHOLMOD/Include/cholmod.h +++ b/CHOLMOD/Include/cholmod.h @@ -1609,7 +1609,7 @@ int cholmod_change_factor // L->dtype remains unchanged. int to_ll, // if true: convert to LL'; else to LDL' int to_super, // if true: convert to supernodal; else to simplicial - int to_packed, // if true: pack simplicial columns' else: do not pack + int to_packed, // if true: pack simplicial columns; else: do not pack int to_monotonic, // if true, put simplicial columns in order // input/output: cholmod_factor *L, // factor to change. diff --git a/CHOLMOD/Utility/t_cholmod_change_factor.c b/CHOLMOD/Utility/t_cholmod_change_factor.c index 2f456f1a70..e93442ca97 100644 --- a/CHOLMOD/Utility/t_cholmod_change_factor.c +++ b/CHOLMOD/Utility/t_cholmod_change_factor.c @@ -1124,7 +1124,7 @@ int CHOLMOD(change_factor) int to_xtype, // CHOLMOD_PATTERN, _REAL, _COMPLEX, or _ZOMPLEX int to_ll, // if true: convert to LL'; else to LDL' int to_super, // if true: convert to supernodal; else to simplicial - int to_packed, // if true: pack simplicial columns' else: do not pack + int to_packed, // if true: pack simplicial columns; else: do not pack int to_monotonic, // if true, put simplicial columns in order cholmod_factor *L, // factor to change cholmod_common *Common diff --git a/CXSparse/Source/cs_updown.c b/CXSparse/Source/cs_updown.c index 64e428c26f..a3fa1e459b 100644 --- a/CXSparse/Source/cs_updown.c +++ b/CXSparse/Source/cs_updown.c @@ -25,7 +25,11 @@ CS_INT cs_updown (cs *L, CS_INT sigma, const cs *C, const CS_INT *parent) { p = Lp [j] ; alpha = w [j] / Lx [p] ; /* alpha = w(j) / L(j,j) */ - beta2 = beta*beta + sigma*alpha*CS_CONJ(alpha) ; + #ifdef CS_COMPLEX + beta2 = beta*beta + sigma*creal(alpha*CS_CONJ(alpha)) ; + #else + beta2 = beta*beta + sigma*(alpha*alpha) ; + #endif if (beta2 <= 0) break ; /* not positive definite */ beta2 = sqrt (beta2) ; delta = (sigma > 0) ? (beta / beta2) : (beta2 / beta) ; diff --git a/ChangeLog b/ChangeLog index 7f30c2b8b1..f0c8339129 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Nov 30, 2023: version 7.4.0 + + * CHOLMOD 5.1.0: full support for sparse single precision matrices + * AMD 3.2.2: minor change for CHOLMOD 5.1.0 tests + * CAMD 3.2.2: minor change for CHOLMOD 5.1.0 tests + * SuiteSparse_config 7.4.0: added wrappers for single-precision BLAS/LAPACK + Oct 31, 2023: version 7.3.1 * CHOLMOD 5.0.1: remove "I" from cholmod.h. diff --git a/Example/CMakeLists.txt b/Example/CMakeLists.txt index 60f61fab98..530e20e472 100644 --- a/Example/CMakeLists.txt +++ b/Example/CMakeLists.txt @@ -12,10 +12,10 @@ cmake_minimum_required ( VERSION 3.20 ) # cmake inserts the date and version number into Include/my.h: -set ( MY_DATE "Oct 23, 2023" ) +set ( MY_DATE "Nov 30, 2023" ) set ( MY_VERSION_MAJOR 1 ) set ( MY_VERSION_MINOR 4 ) -set ( MY_VERSION_PATCH 3 ) +set ( MY_VERSION_PATCH 4 ) message ( STATUS "Building MY library version: v" ${MY_VERSION_MAJOR}. @@ -61,13 +61,13 @@ project ( my #------------------------------------------------------------------------------- # look for all SuiteSparse packages: -find_package ( SuiteSparse_config 7.3.0 REQUIRED ) -find_package ( AMD 3.2.1 REQUIRED ) +find_package ( SuiteSparse_config 7.4.0 REQUIRED ) +find_package ( AMD 3.2.2 REQUIRED ) find_package ( BTF 2.2.1 REQUIRED ) -find_package ( CAMD 3.2.1 REQUIRED ) +find_package ( CAMD 3.2.2 REQUIRED ) find_package ( CCOLAMD 3.2.1 REQUIRED ) find_package ( COLAMD 3.2.1 REQUIRED ) -find_package ( CHOLMOD 5.0.0 REQUIRED ) +find_package ( CHOLMOD 5.1.0 REQUIRED ) find_package ( CXSparse 4.2.1 REQUIRED ) find_package ( GraphBLAS 8.2.1 ) find_package ( KLU 2.2.2 REQUIRED ) diff --git a/Example/Include/my.h b/Example/Include/my.h index 5b10b7b337..71272afdef 100644 --- a/Example/Include/my.h +++ b/Example/Include/my.h @@ -11,10 +11,10 @@ // file, since it is constructed from Config/my.h.in by cmake. // version and date for example user library -#define MY_DATE "Oct 23, 2023" +#define MY_DATE "Nov 30, 2023" #define MY_MAJOR_VERSION 1 #define MY_MINOR_VERSION 4 -#define MY_PATCH_VERSION 3 +#define MY_PATCH_VERSION 4 #ifdef __cplusplus extern "C" { diff --git a/README.md b/README.md index 680d8321f6..bfac29cf9e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ SuiteSparse: A Suite of Sparse matrix packages at http://suitesparse.com ----------------------------------------------------------------------------- -Oct 31, 2023, SuiteSparse VERSION 7.3.1 +Nov 30, 2023, SuiteSparse VERSION 7.4.0 SuiteSparse is a set of sparse-matrix-related packages written or co-authored by Tim Davis, available at https://github.com/DrTimothyAldenDavis/SuiteSparse . diff --git a/SuiteSparse_config/CMakeLists.txt b/SuiteSparse_config/CMakeLists.txt index 6b4bc6d699..dfc8a1596f 100644 --- a/SuiteSparse_config/CMakeLists.txt +++ b/SuiteSparse_config/CMakeLists.txt @@ -14,10 +14,10 @@ cmake_minimum_required ( VERSION 3.22 ) # version of both SuiteSparse and SuiteSparse_config -set ( SUITESPARSE_DATE "Oct 31, 2023" ) +set ( SUITESPARSE_DATE "Nov 30, 2023" ) set ( SUITESPARSE_VERSION_MAJOR 7 ) -set ( SUITESPARSE_VERSION_MINOR 3 ) -set ( SUITESPARSE_VERSION_SUB 1 ) +set ( SUITESPARSE_VERSION_MINOR 4 ) +set ( SUITESPARSE_VERSION_SUB 0 ) message ( STATUS "Building SuiteSparse_config version: v" ${SUITESPARSE_VERSION_MAJOR}. diff --git a/SuiteSparse_config/SuiteSparse_config.h b/SuiteSparse_config/SuiteSparse_config.h index 3f0223f804..aac73c7bb3 100644 --- a/SuiteSparse_config/SuiteSparse_config.h +++ b/SuiteSparse_config/SuiteSparse_config.h @@ -409,10 +409,10 @@ int SuiteSparse_version // returns SUITESPARSE_VERSION #define SUITESPARSE_HAS_VERSION_FUNCTION -#define SUITESPARSE_DATE "Oct 31, 2023" +#define SUITESPARSE_DATE "Nov 30, 2023" #define SUITESPARSE_MAIN_VERSION 7 -#define SUITESPARSE_SUB_VERSION 3 -#define SUITESPARSE_SUBSUB_VERSION 1 +#define SUITESPARSE_SUB_VERSION 4 +#define SUITESPARSE_SUBSUB_VERSION 0 #define SUITESPARSE_VER_CODE(main,sub) ((main) * 1000 + (sub)) #define SUITESPARSE_VERSION \ @@ -507,7 +507,7 @@ int SuiteSparse_version // returns SUITESPARSE_VERSION #else // let CMake determine the size of the integer in the Fortran BLAS - #define SUITESPARSE_BLAS_INT int64_t + #define SUITESPARSE_BLAS_INT int32_t #endif