From f09da0cd3697ce45914bc77ff29f4499769e17d6 Mon Sep 17 00:00:00 2001 From: andrewzm Date: Sun, 7 Jan 2018 18:25:42 +1100 Subject: [PATCH] Minor changes 0.1.7 --- R/geometryfns.R | 7 +- cran-comments.md | 5 + src-i386/FRK.so | Bin 699478 -> 0 bytes src-i386/RcppExports.cpp | 19 - src-i386/RcppExports.o | Bin 68216 -> 0 bytes src-i386/SuiteSparse_config.h | 202 ---- src-i386/amd.h | 411 -------- src-i386/amd_1.c | 183 ---- src-i386/amd_1.o | Bin 1611 -> 0 bytes src-i386/amd_2.c | 1842 --------------------------------- src-i386/amd_2.o | Bin 6648 -> 0 bytes src-i386/amd_aat.c | 184 ---- src-i386/amd_aat.o | Bin 1521 -> 0 bytes src-i386/amd_control.c | 63 -- src-i386/amd_control.o | Bin 1716 -> 0 bytes src-i386/amd_defaults.c | 37 - src-i386/amd_defaults.o | Bin 863 -> 0 bytes src-i386/amd_dump.c | 179 ---- src-i386/amd_dump.o | Bin 446 -> 0 bytes src-i386/amd_global.c | 85 -- src-i386/amd_global.o | Bin 723 -> 0 bytes src-i386/amd_info.c | 119 --- src-i386/amd_info.o | Bin 4311 -> 0 bytes src-i386/amd_internal.h | 351 ------- src-i386/amd_order.c | 206 ---- src-i386/amd_order.o | Bin 2509 -> 0 bytes src-i386/amd_order_wrapper.c | 16 - src-i386/amd_order_wrapper.h | 16 - src-i386/amd_order_wrapper.o | Bin 943 -> 0 bytes src-i386/amd_post_tree.c | 120 --- src-i386/amd_post_tree.o | Bin 902 -> 0 bytes src-i386/amd_postorder.c | 206 ---- src-i386/amd_postorder.o | Bin 1313 -> 0 bytes src-i386/amd_preprocess.c | 118 --- src-i386/amd_preprocess.o | Bin 1103 -> 0 bytes src-i386/amd_valid.c | 92 -- src-i386/amd_valid.o | Bin 982 -> 0 bytes src-i386/distR.cpp | 34 - src-i386/distR.h | 25 - src-i386/distR.o | Bin 24286 -> 0 bytes src-i386/sparseinvR.c | 180 ---- src-i386/sparseinvR.h | 33 - src-i386/sparseinvR.o | Bin 1864 -> 0 bytes src-x64/FRK-init.c | 51 - src-x64/FRK-init.o | Bin 1697 -> 0 bytes src-x64/FRK-win.def | 3 - src-x64/FRK.so | Bin 699478 -> 0 bytes src-x64/RcppExports.cpp | 19 - src-x64/RcppExports.o | Bin 74609 -> 0 bytes src-x64/SuiteSparse_config.h | 202 ---- src-x64/amd.h | 411 -------- src-x64/amd_1.c | 183 ---- src-x64/amd_1.o | Bin 1699 -> 0 bytes src-x64/amd_2.c | 1842 --------------------------------- src-x64/amd_2.o | Bin 7477 -> 0 bytes src-x64/amd_aat.c | 184 ---- src-x64/amd_aat.o | Bin 1697 -> 0 bytes src-x64/amd_control.c | 63 -- src-x64/amd_control.o | Bin 1935 -> 0 bytes src-x64/amd_defaults.c | 37 - src-x64/amd_defaults.o | Bin 928 -> 0 bytes src-x64/amd_dump.c | 179 ---- src-x64/amd_dump.o | Bin 450 -> 0 bytes src-x64/amd_global.c | 85 -- src-x64/amd_global.o | Bin 729 -> 0 bytes src-x64/amd_info.c | 119 --- src-x64/amd_info.o | Bin 4361 -> 0 bytes src-x64/amd_internal.h | 351 ------- src-x64/amd_order.c | 206 ---- src-x64/amd_order.o | Bin 2801 -> 0 bytes src-x64/amd_order_wrapper.c | 16 - src-x64/amd_order_wrapper.h | 16 - src-x64/amd_order_wrapper.o | Bin 964 -> 0 bytes src-x64/amd_post_tree.c | 120 --- src-x64/amd_post_tree.o | Bin 905 -> 0 bytes src-x64/amd_postorder.c | 206 ---- src-x64/amd_postorder.o | Bin 1263 -> 0 bytes src-x64/amd_preprocess.c | 118 --- src-x64/amd_preprocess.o | Bin 1138 -> 0 bytes vignettes/FRK_intro.pdf | Bin 1759619 -> 1759142 bytes 80 files changed, 10 insertions(+), 9134 deletions(-) delete mode 100644 src-i386/FRK.so delete mode 100644 src-i386/RcppExports.cpp delete mode 100644 src-i386/RcppExports.o delete mode 100644 src-i386/SuiteSparse_config.h delete mode 100644 src-i386/amd.h delete mode 100644 src-i386/amd_1.c delete mode 100644 src-i386/amd_1.o delete mode 100644 src-i386/amd_2.c delete mode 100644 src-i386/amd_2.o delete mode 100644 src-i386/amd_aat.c delete mode 100644 src-i386/amd_aat.o delete mode 100644 src-i386/amd_control.c delete mode 100644 src-i386/amd_control.o delete mode 100644 src-i386/amd_defaults.c delete mode 100644 src-i386/amd_defaults.o delete mode 100644 src-i386/amd_dump.c delete mode 100644 src-i386/amd_dump.o delete mode 100644 src-i386/amd_global.c delete mode 100644 src-i386/amd_global.o delete mode 100644 src-i386/amd_info.c delete mode 100644 src-i386/amd_info.o delete mode 100644 src-i386/amd_internal.h delete mode 100644 src-i386/amd_order.c delete mode 100644 src-i386/amd_order.o delete mode 100644 src-i386/amd_order_wrapper.c delete mode 100644 src-i386/amd_order_wrapper.h delete mode 100644 src-i386/amd_order_wrapper.o delete mode 100644 src-i386/amd_post_tree.c delete mode 100644 src-i386/amd_post_tree.o delete mode 100644 src-i386/amd_postorder.c delete mode 100644 src-i386/amd_postorder.o delete mode 100644 src-i386/amd_preprocess.c delete mode 100644 src-i386/amd_preprocess.o delete mode 100644 src-i386/amd_valid.c delete mode 100644 src-i386/amd_valid.o delete mode 100644 src-i386/distR.cpp delete mode 100644 src-i386/distR.h delete mode 100644 src-i386/distR.o delete mode 100644 src-i386/sparseinvR.c delete mode 100644 src-i386/sparseinvR.h delete mode 100644 src-i386/sparseinvR.o delete mode 100644 src-x64/FRK-init.c delete mode 100644 src-x64/FRK-init.o delete mode 100644 src-x64/FRK-win.def delete mode 100644 src-x64/FRK.so delete mode 100644 src-x64/RcppExports.cpp delete mode 100644 src-x64/RcppExports.o delete mode 100644 src-x64/SuiteSparse_config.h delete mode 100644 src-x64/amd.h delete mode 100644 src-x64/amd_1.c delete mode 100644 src-x64/amd_1.o delete mode 100644 src-x64/amd_2.c delete mode 100644 src-x64/amd_2.o delete mode 100644 src-x64/amd_aat.c delete mode 100644 src-x64/amd_aat.o delete mode 100644 src-x64/amd_control.c delete mode 100644 src-x64/amd_control.o delete mode 100644 src-x64/amd_defaults.c delete mode 100644 src-x64/amd_defaults.o delete mode 100644 src-x64/amd_dump.c delete mode 100644 src-x64/amd_dump.o delete mode 100644 src-x64/amd_global.c delete mode 100644 src-x64/amd_global.o delete mode 100644 src-x64/amd_info.c delete mode 100644 src-x64/amd_info.o delete mode 100644 src-x64/amd_internal.h delete mode 100644 src-x64/amd_order.c delete mode 100644 src-x64/amd_order.o delete mode 100644 src-x64/amd_order_wrapper.c delete mode 100644 src-x64/amd_order_wrapper.h delete mode 100644 src-x64/amd_order_wrapper.o delete mode 100644 src-x64/amd_post_tree.c delete mode 100644 src-x64/amd_post_tree.o delete mode 100644 src-x64/amd_postorder.c delete mode 100644 src-x64/amd_postorder.o delete mode 100644 src-x64/amd_preprocess.c delete mode 100644 src-x64/amd_preprocess.o diff --git a/R/geometryfns.R b/R/geometryfns.R index d78a651..c814a00 100644 --- a/R/geometryfns.R +++ b/R/geometryfns.R @@ -1165,6 +1165,7 @@ setMethod("map_data_to_BAUs",signature(data_sp="SpatialPolygons"), ## Attach the ID of the data polygon to the data frame data_sp$id <- row.names(data_sp) + data_sp$id <- as.character(data_sp$id) ## Assume the BAUs are so small that it is sufficient to see whether the ## BAU centroid falls in the data polygon. To do this we first make @@ -1181,10 +1182,12 @@ setMethod("map_data_to_BAUs",signature(data_sp="SpatialPolygons"), BAUs_aux_data <- .parallel_over(data_sp,BAU_as_points,fn=.safe_mean) ## Now include the ID in the table so we merge by it later - BAUs_aux_data$id <- row.names(BAUs_aux_data) + BAUs_aux_data$id <- as.character(row.names(BAUs_aux_data)) ## Do the merging - updated_df <- left_join(data_sp@data,BAUs_aux_data,by="id") + updated_df <- left_join(data_sp@data, + BAUs_aux_data, + by="id") ## Make sure the rownames are OK row.names(updated_df) <- data_sp$id diff --git a/cran-comments.md b/cran-comments.md index a099a94..2a64bdb 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -1,3 +1,8 @@ +## v0.1.7 ++ Made compatible with new update of Hmisc ++ Added support for change of support spatio-temporal prediction ++ Changed from pred_locs to newdata in arguments to SRE.predict + ## v0.1.6 * Added scale_aperture to have control on aperture of basis functions * Adde remove_basis to easily remove basis functions diff --git a/src-i386/FRK.so b/src-i386/FRK.so deleted file mode 100644 index 6b541dfcd44c3560b2b2efc61d9d80cdc79444a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 699478 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

?k^*aYpu~KV7t6E8I%(bzdaE6*Y}Ps`&SB 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 H!&?6Xdh|=7 diff --git a/src-i386/RcppExports.cpp b/src-i386/RcppExports.cpp deleted file mode 100644 index 6253e43..0000000 --- a/src-i386/RcppExports.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// Generated by using Rcpp::compileAttributes() -> do not edit by hand -// Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 - -#include - -using namespace Rcpp; - -// distR_C -NumericMatrix distR_C(NumericMatrix x, NumericMatrix y); -RcppExport SEXP _FRK_distR_C(SEXP xSEXP, SEXP ySEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< NumericMatrix >::type x(xSEXP); - Rcpp::traits::input_parameter< NumericMatrix >::type y(ySEXP); - rcpp_result_gen = Rcpp::wrap(distR_C(x, y)); - return rcpp_result_gen; -END_RCPP -} diff --git a/src-i386/RcppExports.o b/src-i386/RcppExports.o deleted file mode 100644 index 762ffb7edd661377ba8997241087b2d5fc645ab0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68216 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 diff --git a/src-i386/SuiteSparse_config.h b/src-i386/SuiteSparse_config.h deleted file mode 100644 index fff5ea0..0000000 --- a/src-i386/SuiteSparse_config.h +++ /dev/null @@ -1,202 +0,0 @@ -/* ========================================================================== */ -/* === SuiteSparse_config =================================================== */ -/* ========================================================================== */ - -/* Configuration file for SuiteSparse: a Suite of Sparse matrix packages - * (AMD, COLAMD, CCOLAMD, CAMD, CHOLMOD, UMFPACK, CXSparse, and others). - * - * SuiteSparse_config.h provides the definition of the long integer. On most - * systems, a C program can be compiled in LP64 mode, in which long's and - * pointers are both 64-bits, and int's are 32-bits. Windows 64, however, uses - * the LLP64 model, in which int's and long's are 32-bits, and long long's and - * pointers are 64-bits. - * - * SuiteSparse packages that include long integer versions are - * intended for the LP64 mode. However, as a workaround for Windows 64 - * (and perhaps other systems), the long integer can be redefined. - * - * If _WIN64 is defined, then the __int64 type is used instead of long. - * - * The long integer can also be defined at compile time. For example, this - * could be added to SuiteSparse_config.mk: - * - * CFLAGS = -O -D'SuiteSparse_long=long long' \ - * -D'SuiteSparse_long_max=9223372036854775801' -D'SuiteSparse_long_idd="lld"' - * - * This file defines SuiteSparse_long as either long (on all but _WIN64) or - * __int64 on Windows 64. The intent is that a SuiteSparse_long is always a - * 64-bit integer in a 64-bit code. ptrdiff_t might be a better choice than - * long; it is always the same size as a pointer. - * - * This file also defines the SUITESPARSE_VERSION and related definitions. - * - * Copyright (c) 2012, Timothy A. Davis. No licensing restrictions apply - * to this file or to the SuiteSparse_config directory. - * Author: Timothy A. Davis. - */ - -#ifndef _SUITESPARSECONFIG_H -#define _SUITESPARSECONFIG_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -/* ========================================================================== */ -/* === SuiteSparse_long ===================================================== */ -/* ========================================================================== */ - -#ifndef SuiteSparse_long - -#ifdef _WIN64 - -#define SuiteSparse_long __int64 -#define SuiteSparse_long_max _I64_MAX -#define SuiteSparse_long_idd "I64d" - -#else - -#define SuiteSparse_long long -#define SuiteSparse_long_max LONG_MAX -#define SuiteSparse_long_idd "ld" - -#endif -#define SuiteSparse_long_id "%" SuiteSparse_long_idd -#endif - -/* For backward compatibility with prior versions of SuiteSparse. The UF_* - * macros are deprecated and will be removed in a future version. */ -#ifndef UF_long -#define UF_long SuiteSparse_long -#define UF_long_max SuiteSparse_long_max -#define UF_long_idd SuiteSparse_long_idd -#define UF_long_id SuiteSparse_long_id -#endif - -/* ========================================================================== */ -/* === SuiteSparse_config parameters and functions ========================== */ -/* ========================================================================== */ - -/* SuiteSparse-wide parameters will be placed in this struct. */ - -typedef struct SuiteSparse_config_struct -{ - void *(*malloc_memory) (size_t) ; /* pointer to malloc */ - void *(*realloc_memory) (void *, size_t) ; /* pointer to realloc */ - void (*free_memory) (void *) ; /* pointer to free */ - void *(*calloc_memory) (size_t, size_t) ; /* pointer to calloc */ - -} SuiteSparse_config ; - -void *SuiteSparse_malloc /* pointer to allocated block of memory */ -( - size_t nitems, /* number of items to malloc (>=1 is enforced) */ - size_t size_of_item, /* sizeof each item */ - int *ok, /* TRUE if successful, FALSE otherwise */ - SuiteSparse_config *config /* SuiteSparse-wide configuration */ -) ; - -void *SuiteSparse_free /* always returns NULL */ -( - void *p, /* block to free */ - SuiteSparse_config *config /* SuiteSparse-wide configuration */ -) ; - -void SuiteSparse_tic /* start the timer */ -( - double tic [2] /* output, contents undefined on input */ -) ; - -double SuiteSparse_toc /* return time in seconds since last tic */ -( - double tic [2] /* input: from last call to SuiteSparse_tic */ -) ; - -double SuiteSparse_time /* returns current wall clock time in seconds */ -( - void -) ; - -/* determine which timer to use, if any */ -#ifndef NTIMER -#ifdef _POSIX_C_SOURCE -#if _POSIX_C_SOURCE >= 199309L -#define SUITESPARSE_TIMER_ENABLED -#endif -#endif -#endif - -/* ========================================================================== */ -/* === SuiteSparse version ================================================== */ -/* ========================================================================== */ - -/* SuiteSparse is not a package itself, but a collection of packages, some of - * which must be used together (UMFPACK requires AMD, CHOLMOD requires AMD, - * COLAMD, CAMD, and CCOLAMD, etc). A version number is provided here for the - * collection itself. The versions of packages within each version of - * SuiteSparse are meant to work together. Combining one packge from one - * version of SuiteSparse, with another package from another version of - * SuiteSparse, may or may not work. - * - * SuiteSparse contains the following packages: - * - * SuiteSparse_config version 4.2.1 (version always the same as SuiteSparse) - * AMD version 2.3.1 - * BTF version 1.2.0 - * CAMD version 2.3.1 - * CCOLAMD version 2.8.0 - * CHOLMOD version 2.1.2 - * COLAMD version 2.8.0 - * CSparse version 3.1.2 - * CXSparse version 3.1.2 - * KLU version 1.2.1 - * LDL version 2.1.0 - * RBio version 2.1.1 - * SPQR version 1.3.1 (full name is SuiteSparseQR) - * UMFPACK version 5.6.2 - * MATLAB_Tools various packages & M-files - * - * Other package dependencies: - * BLAS required by CHOLMOD and UMFPACK - * LAPACK required by CHOLMOD - * METIS 4.0.1 required by CHOLMOD (optional) and KLU (optional) - */ - - -int SuiteSparse_version /* returns SUITESPARSE_VERSION */ -( - /* output, not defined on input. Not used if NULL. Returns - the three version codes in version [0..2]: - version [0] is SUITESPARSE_MAIN_VERSION - version [1] is SUITESPARSE_SUB_VERSION - version [2] is SUITESPARSE_SUBSUB_VERSION - */ - int version [3] -) ; - -/* Versions prior to 4.2.0 do not have the above function. The following - code fragment will work with any version of SuiteSparse: - - #ifdef SUITESPARSE_HAS_VERSION_FUNCTION - v = SuiteSparse_version (NULL) ; - #else - v = SUITESPARSE_VERSION ; - #endif -*/ -#define SUITESPARSE_HAS_VERSION_FUNCTION - -#define SUITESPARSE_DATE "April 25, 2013" -#define SUITESPARSE_VER_CODE(main,sub) ((main) * 1000 + (sub)) -#define SUITESPARSE_MAIN_VERSION 4 -#define SUITESPARSE_SUB_VERSION 2 -#define SUITESPARSE_SUBSUB_VERSION 1 -#define SUITESPARSE_VERSION \ - SUITESPARSE_VER_CODE(SUITESPARSE_MAIN_VERSION,SUITESPARSE_SUB_VERSION) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/src-i386/amd.h b/src-i386/amd.h deleted file mode 100644 index 210967b..0000000 --- a/src-i386/amd.h +++ /dev/null @@ -1,411 +0,0 @@ -/* ========================================================================= */ -/* === AMD: approximate minimum degree ordering =========================== */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD Version 2.2, Copyright (c) 2007 by Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* AMD finds a symmetric ordering P of a matrix A so that the Cholesky - * factorization of P*A*P' has fewer nonzeros and takes less work than the - * Cholesky factorization of A. If A is not symmetric, then it performs its - * ordering on the matrix A+A'. Two sets of user-callable routines are - * provided, one for int integers and the other for SuiteSparse_long integers. - * - * The method is based on the approximate minimum degree algorithm, discussed - * in Amestoy, Davis, and Duff, "An approximate degree ordering algorithm", - * SIAM Journal of Matrix Analysis and Applications, vol. 17, no. 4, pp. - * 886-905, 1996. This package can perform both the AMD ordering (with - * aggressive absorption), and the AMDBAR ordering (without aggressive - * absorption) discussed in the above paper. This package differs from the - * Fortran codes discussed in the paper: - * - * (1) it can ignore "dense" rows and columns, leading to faster run times - * (2) it computes the ordering of A+A' if A is not symmetric - * (3) it is followed by a depth-first post-ordering of the assembly tree - * (or supernodal elimination tree) - * - * For historical reasons, the Fortran versions, amd.f and amdbar.f, have - * been left (nearly) unchanged. They compute the identical ordering as - * described in the above paper. - */ - -#ifndef AMD_H -#define AMD_H - -/* make it easy for C++ programs to include AMD */ -#ifdef __cplusplus -extern "C" { -#endif - -/* get the definition of size_t: */ -#include - -#include "SuiteSparse_config.h" - -int amd_order /* returns AMD_OK, AMD_OK_BUT_JUMBLED, - * AMD_INVALID, or AMD_OUT_OF_MEMORY */ -( - int n, /* A is n-by-n. n must be >= 0. */ - const int Ap [ ], /* column pointers for A, of size n+1 */ - const int Ai [ ], /* row indices of A, of size nz = Ap [n] */ - int P [ ], /* output permutation, of size n */ - double Control [ ], /* input Control settings, of size AMD_CONTROL */ - double Info [ ] /* output Info statistics, of size AMD_INFO */ -) ; - -SuiteSparse_long amd_l_order /* see above for description of arguments */ -( - SuiteSparse_long n, - const SuiteSparse_long Ap [ ], - const SuiteSparse_long Ai [ ], - SuiteSparse_long P [ ], - double Control [ ], - double Info [ ] -) ; - -/* Input arguments (not modified): - * - * n: the matrix A is n-by-n. - * Ap: an int/SuiteSparse_long array of size n+1, containing column - * pointers of A. - * Ai: an int/SuiteSparse_long array of size nz, containing the row - * indices of A, where nz = Ap [n]. - * Control: a double array of size AMD_CONTROL, containing control - * parameters. Defaults are used if Control is NULL. - * - * Output arguments (not defined on input): - * - * P: an int/SuiteSparse_long array of size n, containing the output - * permutation. If row i is the kth pivot row, then P [k] = i. In - * MATLAB notation, the reordered matrix is A (P,P). - * Info: a double array of size AMD_INFO, containing statistical - * information. Ignored if Info is NULL. - * - * On input, the matrix A is stored in column-oriented form. The row indices - * of nonzero entries in column j are stored in Ai [Ap [j] ... Ap [j+1]-1]. - * - * If the row indices appear in ascending order in each column, and there - * are no duplicate entries, then amd_order is slightly more efficient in - * terms of time and memory usage. If this condition does not hold, a copy - * of the matrix is created (where these conditions do hold), and the copy is - * ordered. This feature is new to v2.0 (v1.2 and earlier required this - * condition to hold for the input matrix). - * - * Row indices must be in the range 0 to - * n-1. Ap [0] must be zero, and thus nz = Ap [n] is the number of nonzeros - * in A. The array Ap is of size n+1, and the array Ai is of size nz = Ap [n]. - * The matrix does not need to be symmetric, and the diagonal does not need to - * be present (if diagonal entries are present, they are ignored except for - * the output statistic Info [AMD_NZDIAG]). The arrays Ai and Ap are not - * modified. This form of the Ap and Ai arrays to represent the nonzero - * pattern of the matrix A is the same as that used internally by MATLAB. - * If you wish to use a more flexible input structure, please see the - * umfpack_*_triplet_to_col routines in the UMFPACK package, at - * http://www.suitesparse.com. - * - * Restrictions: n >= 0. Ap [0] = 0. Ap [j] <= Ap [j+1] for all j in the - * range 0 to n-1. nz = Ap [n] >= 0. Ai [0..nz-1] must be in the range 0 - * to n-1. Finally, Ai, Ap, and P must not be NULL. If any of these - * restrictions are not met, AMD returns AMD_INVALID. - * - * AMD returns: - * - * AMD_OK if the matrix is valid and sufficient memory can be allocated to - * perform the ordering. - * - * AMD_OUT_OF_MEMORY if not enough memory can be allocated. - * - * AMD_INVALID if the input arguments n, Ap, Ai are invalid, or if P is - * NULL. - * - * AMD_OK_BUT_JUMBLED if the matrix had unsorted columns, and/or duplicate - * entries, but was otherwise valid. - * - * The AMD routine first forms the pattern of the matrix A+A', and then - * computes a fill-reducing ordering, P. If P [k] = i, then row/column i of - * the original is the kth pivotal row. In MATLAB notation, the permuted - * matrix is A (P,P), except that 0-based indexing is used instead of the - * 1-based indexing in MATLAB. - * - * The Control array is used to set various parameters for AMD. If a NULL - * pointer is passed, default values are used. The Control array is not - * modified. - * - * Control [AMD_DENSE]: controls the threshold for "dense" rows/columns. - * A dense row/column in A+A' can cause AMD to spend a lot of time in - * ordering the matrix. If Control [AMD_DENSE] >= 0, rows/columns - * with more than Control [AMD_DENSE] * sqrt (n) entries are ignored - * during the ordering, and placed last in the output order. The - * default value of Control [AMD_DENSE] is 10. If negative, no - * rows/columns are treated as "dense". Rows/columns with 16 or - * fewer off-diagonal entries are never considered "dense". - * - * Control [AMD_AGGRESSIVE]: controls whether or not to use aggressive - * absorption, in which a prior element is absorbed into the current - * element if is a subset of the current element, even if it is not - * adjacent to the current pivot element (refer to Amestoy, Davis, - * & Duff, 1996, for more details). The default value is nonzero, - * which means to perform aggressive absorption. This nearly always - * leads to a better ordering (because the approximate degrees are - * more accurate) and a lower execution time. There are cases where - * it can lead to a slightly worse ordering, however. To turn it off, - * set Control [AMD_AGGRESSIVE] to 0. - * - * Control [2..4] are not used in the current version, but may be used in - * future versions. - * - * The Info array provides statistics about the ordering on output. If it is - * not present, the statistics are not returned. This is not an error - * condition. - * - * Info [AMD_STATUS]: the return value of AMD, either AMD_OK, - * AMD_OK_BUT_JUMBLED, AMD_OUT_OF_MEMORY, or AMD_INVALID. - * - * Info [AMD_N]: n, the size of the input matrix - * - * Info [AMD_NZ]: the number of nonzeros in A, nz = Ap [n] - * - * Info [AMD_SYMMETRY]: the symmetry of the matrix A. It is the number - * of "matched" off-diagonal entries divided by the total number of - * off-diagonal entries. An entry A(i,j) is matched if A(j,i) is also - * an entry, for any pair (i,j) for which i != j. In MATLAB notation, - * S = spones (A) ; - * B = tril (S, -1) + triu (S, 1) ; - * symmetry = nnz (B & B') / nnz (B) ; - * - * Info [AMD_NZDIAG]: the number of entries on the diagonal of A. - * - * Info [AMD_NZ_A_PLUS_AT]: the number of nonzeros in A+A', excluding the - * diagonal. If A is perfectly symmetric (Info [AMD_SYMMETRY] = 1) - * with a fully nonzero diagonal, then Info [AMD_NZ_A_PLUS_AT] = nz-n - * (the smallest possible value). If A is perfectly unsymmetric - * (Info [AMD_SYMMETRY] = 0, for an upper triangular matrix, for - * example) with no diagonal, then Info [AMD_NZ_A_PLUS_AT] = 2*nz - * (the largest possible value). - * - * Info [AMD_NDENSE]: the number of "dense" rows/columns of A+A' that were - * removed from A prior to ordering. These are placed last in the - * output order P. - * - * Info [AMD_MEMORY]: the amount of memory used by AMD, in bytes. In the - * current version, this is 1.2 * Info [AMD_NZ_A_PLUS_AT] + 9*n - * times the size of an integer. This is at most 2.4nz + 9n. This - * excludes the size of the input arguments Ai, Ap, and P, which have - * a total size of nz + 2*n + 1 integers. - * - * Info [AMD_NCMPA]: the number of garbage collections performed. - * - * Info [AMD_LNZ]: the number of nonzeros in L (excluding the diagonal). - * This is a slight upper bound because mass elimination is combined - * with the approximate degree update. It is a rough upper bound if - * there are many "dense" rows/columns. The rest of the statistics, - * below, are also slight or rough upper bounds, for the same reasons. - * The post-ordering of the assembly tree might also not exactly - * correspond to a true elimination tree postordering. - * - * Info [AMD_NDIV]: the number of divide operations for a subsequent LDL' - * or LU factorization of the permuted matrix A (P,P). - * - * Info [AMD_NMULTSUBS_LDL]: the number of multiply-subtract pairs for a - * subsequent LDL' factorization of A (P,P). - * - * Info [AMD_NMULTSUBS_LU]: the number of multiply-subtract pairs for a - * subsequent LU factorization of A (P,P), assuming that no numerical - * pivoting is required. - * - * Info [AMD_DMAX]: the maximum number of nonzeros in any column of L, - * including the diagonal. - * - * Info [14..19] are not used in the current version, but may be used in - * future versions. - */ - -/* ------------------------------------------------------------------------- */ -/* direct interface to AMD */ -/* ------------------------------------------------------------------------- */ - -/* amd_2 is the primary AMD ordering routine. It is not meant to be - * user-callable because of its restrictive inputs and because it destroys - * the user's input matrix. It does not check its inputs for errors, either. - * However, if you can work with these restrictions it can be faster than - * amd_order and use less memory (assuming that you can create your own copy - * of the matrix for AMD to destroy). Refer to AMD/Source/amd_2.c for a - * description of each parameter. */ - -void amd_2 -( - int n, - int Pe [ ], - int Iw [ ], - int Len [ ], - int iwlen, - int pfree, - int Nv [ ], - int Next [ ], - int Last [ ], - int Head [ ], - int Elen [ ], - int Degree [ ], - int W [ ], - double Control [ ], - double Info [ ] -) ; - -void amd_l2 -( - SuiteSparse_long n, - SuiteSparse_long Pe [ ], - SuiteSparse_long Iw [ ], - SuiteSparse_long Len [ ], - SuiteSparse_long iwlen, - SuiteSparse_long pfree, - SuiteSparse_long Nv [ ], - SuiteSparse_long Next [ ], - SuiteSparse_long Last [ ], - SuiteSparse_long Head [ ], - SuiteSparse_long Elen [ ], - SuiteSparse_long Degree [ ], - SuiteSparse_long W [ ], - double Control [ ], - double Info [ ] -) ; - -/* ------------------------------------------------------------------------- */ -/* amd_valid */ -/* ------------------------------------------------------------------------- */ - -/* Returns AMD_OK or AMD_OK_BUT_JUMBLED if the matrix is valid as input to - * amd_order; the latter is returned if the matrix has unsorted and/or - * duplicate row indices in one or more columns. Returns AMD_INVALID if the - * matrix cannot be passed to amd_order. For amd_order, the matrix must also - * be square. The first two arguments are the number of rows and the number - * of columns of the matrix. For its use in AMD, these must both equal n. - * - * NOTE: this routine returned TRUE/FALSE in v1.2 and earlier. - */ - -int amd_valid -( - int n_row, /* # of rows */ - int n_col, /* # of columns */ - const int Ap [ ], /* column pointers, of size n_col+1 */ - const int Ai [ ] /* row indices, of size Ap [n_col] */ -) ; - -SuiteSparse_long amd_l_valid -( - SuiteSparse_long n_row, - SuiteSparse_long n_col, - const SuiteSparse_long Ap [ ], - const SuiteSparse_long Ai [ ] -) ; - -/* ------------------------------------------------------------------------- */ -/* AMD memory manager and printf routines */ -/* ------------------------------------------------------------------------- */ - -/* The user can redefine these to change the malloc, free, and printf routines - * that AMD uses. */ - -#ifndef EXTERN -#define EXTERN extern -#endif - -EXTERN void *(*amd_malloc) (size_t) ; /* pointer to malloc */ -EXTERN void (*amd_free) (void *) ; /* pointer to free */ -EXTERN void *(*amd_realloc) (void *, size_t) ; /* pointer to realloc */ -EXTERN void *(*amd_calloc) (size_t, size_t) ; /* pointer to calloc */ -EXTERN int (*amd_printf) (const char *, ...) ; /* pointer to printf */ - -/* ------------------------------------------------------------------------- */ -/* AMD Control and Info arrays */ -/* ------------------------------------------------------------------------- */ - -/* amd_defaults: sets the default control settings */ -void amd_defaults (double Control [ ]) ; -void amd_l_defaults (double Control [ ]) ; - -/* amd_control: prints the control settings */ -void amd_control (double Control [ ]) ; -void amd_l_control (double Control [ ]) ; - -/* amd_info: prints the statistics */ -void amd_info (double Info [ ]) ; -void amd_l_info (double Info [ ]) ; - -#define AMD_CONTROL 5 /* size of Control array */ -#define AMD_INFO 20 /* size of Info array */ - -/* contents of Control */ -#define AMD_DENSE 0 /* "dense" if degree > Control [0] * sqrt (n) */ -#define AMD_AGGRESSIVE 1 /* do aggressive absorption if Control [1] != 0 */ - -/* default Control settings */ -#define AMD_DEFAULT_DENSE 10.0 /* default "dense" degree 10*sqrt(n) */ -#define AMD_DEFAULT_AGGRESSIVE 1 /* do aggressive absorption by default */ - -/* contents of Info */ -#define AMD_STATUS 0 /* return value of amd_order and amd_l_order */ -#define AMD_N 1 /* A is n-by-n */ -#define AMD_NZ 2 /* number of nonzeros in A */ -#define AMD_SYMMETRY 3 /* symmetry of pattern (1 is sym., 0 is unsym.) */ -#define AMD_NZDIAG 4 /* # of entries on diagonal */ -#define AMD_NZ_A_PLUS_AT 5 /* nz in A+A' */ -#define AMD_NDENSE 6 /* number of "dense" rows/columns in A */ -#define AMD_MEMORY 7 /* amount of memory used by AMD */ -#define AMD_NCMPA 8 /* number of garbage collections in AMD */ -#define AMD_LNZ 9 /* approx. nz in L, excluding the diagonal */ -#define AMD_NDIV 10 /* number of fl. point divides for LU and LDL' */ -#define AMD_NMULTSUBS_LDL 11 /* number of fl. point (*,-) pairs for LDL' */ -#define AMD_NMULTSUBS_LU 12 /* number of fl. point (*,-) pairs for LU */ -#define AMD_DMAX 13 /* max nz. in any column of L, incl. diagonal */ - -/* ------------------------------------------------------------------------- */ -/* return values of AMD */ -/* ------------------------------------------------------------------------- */ - -#define AMD_OK 0 /* success */ -#define AMD_OUT_OF_MEMORY -1 /* malloc failed, or problem too large */ -#define AMD_INVALID -2 /* input arguments are not valid */ -#define AMD_OK_BUT_JUMBLED 1 /* input matrix is OK for amd_order, but - * columns were not sorted, and/or duplicate entries were present. AMD had - * to do extra work before ordering the matrix. This is a warning, not an - * error. */ - -/* ========================================================================== */ -/* === AMD version ========================================================== */ -/* ========================================================================== */ - -/* AMD Version 1.2 and later include the following definitions. - * As an example, to test if the version you are using is 1.2 or later: - * - * #ifdef AMD_VERSION - * if (AMD_VERSION >= AMD_VERSION_CODE (1,2)) ... - * #endif - * - * This also works during compile-time: - * - * #if defined(AMD_VERSION) && (AMD_VERSION >= AMD_VERSION_CODE (1,2)) - * printf ("This is version 1.2 or later\n") ; - * #else - * printf ("This is an early version\n") ; - * #endif - * - * Versions 1.1 and earlier of AMD do not include a #define'd version number. - */ - -#define AMD_DATE "Jun 20, 2012" -#define AMD_VERSION_CODE(main,sub) ((main) * 1000 + (sub)) -#define AMD_MAIN_VERSION 2 -#define AMD_SUB_VERSION 3 -#define AMD_SUBSUB_VERSION 1 -#define AMD_VERSION AMD_VERSION_CODE(AMD_MAIN_VERSION,AMD_SUB_VERSION) - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src-i386/amd_1.c b/src-i386/amd_1.c deleted file mode 100644 index 296d198..0000000 --- a/src-i386/amd_1.c +++ /dev/null @@ -1,183 +0,0 @@ -/* ========================================================================= */ -/* === AMD_1 =============================================================== */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* AMD_1: Construct A+A' for a sparse matrix A and perform the AMD ordering. - * - * The n-by-n sparse matrix A can be unsymmetric. It is stored in MATLAB-style - * compressed-column form, with sorted row indices in each column, and no - * duplicate entries. Diagonal entries may be present, but they are ignored. - * Row indices of column j of A are stored in Ai [Ap [j] ... Ap [j+1]-1]. - * Ap [0] must be zero, and nz = Ap [n] is the number of entries in A. The - * size of the matrix, n, must be greater than or equal to zero. - * - * This routine must be preceded by a call to AMD_aat, which computes the - * number of entries in each row/column in A+A', excluding the diagonal. - * Len [j], on input, is the number of entries in row/column j of A+A'. This - * routine constructs the matrix A+A' and then calls AMD_2. No error checking - * is performed (this was done in AMD_valid). - */ - -#include /* required */ -#include /* for distribution functions etc. */ - -#include "amd_internal.h" - -GLOBAL void AMD_1 -( - Int n, /* n > 0 */ - const Int Ap [ ], /* input of size n+1, not modified */ - const Int Ai [ ], /* input of size nz = Ap [n], not modified */ - Int P [ ], /* size n output permutation */ - Int Pinv [ ], /* size n output inverse permutation */ - Int Len [ ], /* size n input, undefined on output */ - Int slen, /* slen >= sum (Len [0..n-1]) + 7n, - * ideally slen = 1.2 * sum (Len) + 8n */ - Int S [ ], /* size slen workspace */ - double Control [ ], /* input array of size AMD_CONTROL */ - double Info [ ] /* output array of size AMD_INFO */ -) -{ - Int i, j, k, p, pfree, iwlen, pj, p1, p2, pj2, *Iw, *Pe, *Nv, *Head, - *Elen, *Degree, *s, *W, *Sp, *Tp ; - - /* --------------------------------------------------------------------- */ - /* construct the matrix for AMD_2 */ - /* --------------------------------------------------------------------- */ - - ASSERT (n > 0) ; - - iwlen = slen - 6*n ; - s = S ; - Pe = s ; s += n ; - Nv = s ; s += n ; - Head = s ; s += n ; - Elen = s ; s += n ; - Degree = s ; s += n ; - W = s ; s += n ; - Iw = s ; s += iwlen ; - - ASSERT (AMD_valid (n, n, Ap, Ai) == AMD_OK) ; - - /* construct the pointers for A+A' */ - Sp = Nv ; /* use Nv and W as workspace for Sp and Tp [ */ - Tp = W ; - pfree = 0 ; - for (j = 0 ; j < n ; j++) - { - Pe [j] = pfree ; - Sp [j] = pfree ; - pfree += Len [j] ; - } - - /* Note that this restriction on iwlen is slightly more restrictive than - * what is strictly required in AMD_2. AMD_2 can operate with no elbow - * room at all, but it will be very slow. For better performance, at - * least size-n elbow room is enforced. */ - ASSERT (iwlen >= pfree + n) ; - -#ifndef NDEBUG - for (p = 0 ; p < iwlen ; p++) Iw [p] = EMPTY ; -#endif - - for (k = 0 ; k < n ; k++) - { - AMD_DEBUG1 (("Construct row/column k= "ID" of A+A'\n", k)) ; - p1 = Ap [k] ; - p2 = Ap [k+1] ; - - /* construct A+A' */ - for (p = p1 ; p < p2 ; ) - { - /* scan the upper triangular part of A */ - j = Ai [p] ; - ASSERT (j >= 0 && j < n) ; - if (j < k) - { - /* entry A (j,k) in the strictly upper triangular part */ - ASSERT (Sp [j] < (j == n-1 ? pfree : Pe [j+1])) ; - ASSERT (Sp [k] < (k == n-1 ? pfree : Pe [k+1])) ; - Iw [Sp [j]++] = k ; - Iw [Sp [k]++] = j ; - p++ ; - } - else if (j == k) - { - /* skip the diagonal */ - p++ ; - break ; - } - else /* j > k */ - { - /* first entry below the diagonal */ - break ; - } - /* scan lower triangular part of A, in column j until reaching - * row k. Start where last scan left off. */ - ASSERT (Ap [j] <= Tp [j] && Tp [j] <= Ap [j+1]) ; - pj2 = Ap [j+1] ; - for (pj = Tp [j] ; pj < pj2 ; ) - { - i = Ai [pj] ; - ASSERT (i >= 0 && i < n) ; - if (i < k) - { - /* A (i,j) is only in the lower part, not in upper */ - ASSERT (Sp [i] < (i == n-1 ? pfree : Pe [i+1])) ; - ASSERT (Sp [j] < (j == n-1 ? pfree : Pe [j+1])) ; - Iw [Sp [i]++] = j ; - Iw [Sp [j]++] = i ; - pj++ ; - } - else if (i == k) - { - /* entry A (k,j) in lower part and A (j,k) in upper */ - pj++ ; - break ; - } - else /* i > k */ - { - /* consider this entry later, when k advances to i */ - break ; - } - } - Tp [j] = pj ; - } - Tp [k] = p ; - } - - /* clean up, for remaining mismatched entries */ - for (j = 0 ; j < n ; j++) - { - for (pj = Tp [j] ; pj < Ap [j+1] ; pj++) - { - i = Ai [pj] ; - ASSERT (i >= 0 && i < n) ; - /* A (i,j) is only in the lower part, not in upper */ - ASSERT (Sp [i] < (i == n-1 ? pfree : Pe [i+1])) ; - ASSERT (Sp [j] < (j == n-1 ? pfree : Pe [j+1])) ; - Iw [Sp [i]++] = j ; - Iw [Sp [j]++] = i ; - } - } - -#ifndef NDEBUG - for (j = 0 ; j < n-1 ; j++) ASSERT (Sp [j] == Pe [j+1]) ; - ASSERT (Sp [n-1] == pfree) ; -#endif - - /* Tp and Sp no longer needed ] */ - - /* --------------------------------------------------------------------- */ - /* order the matrix */ - /* --------------------------------------------------------------------- */ - - AMD_2 (n, Pe, Iw, Len, iwlen, pfree, - Nv, Pinv, P, Head, Elen, Degree, W, Control, Info) ; -} diff --git a/src-i386/amd_1.o b/src-i386/amd_1.o deleted file mode 100644 index 61f08908d89e0d98bc8701e69bbc71355ed35220..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1611 zcmZuxUuauZ96l$x8^wit`*0D#Fz>@bE3~(X3w2p4G%i?_D+ImTh;ePUq$V!yN}Fn1 zqHWeT^Kg1fAF48#&<6z(A2z5(SRb-(wr?VPQG5^|t&CA$eDGoQJNIUomK@0aet*96 zo!{@AljG2n#2Y6FF+4+~cBL>=@uS{19VA4fggnsvAWUMB^oX6$RdOx7cIE(yH0+C0 zQ|)rCu?6sYW37?)wnZW%z0vrQWIsH&S=-|T)*a|Q6M5`-hQ+8 zUOdo0a>h`H{=-f#R~gIkz%*v2gsz2)xY4b$<1d0L}Xb8a%oXz&SHvXDZ1dl z(_QhTe2sFQS3e`dyshleZQ-yqcMw?d*K?^BOtB&=aj^{}g2Z=>)nDlUOPaN~%bfXV z_O}p}Ti$x>el_OR1X6~)q3BhXL5GPHb7lAoaZ1iookZVKMJmq^5H1QAmbbeJ z{|J$CjODK%VV1)((S}Dd>&<;mxOMI0L0)E#{E*1)=e&M4{guO?FYZv;e_gyN$0_d> zAo0}q*!7zHg!29x&%*JKD-N0YJ$0o1qVv~L{ym66xdRoPh1*bWip9`u5f}khf!)9v zU>C3gWT1ZMQ!SV`eKU+~2HB^8WuOV10Cs|+ZWzoEOm&N4YA`pHsj)u+q;^l;_IED~ zzjqgHdZ)C$V{F~0Kl5GCkMIBTg4!+Y+y1vOaKZAP^CcWy*RoRF591it{4sd`{5h+u z)OWV8XX46KX{IOtQEqay+j@DrRIXSTXRX&uJ+9t#6Lv`n#96aDVf9`EtLzf)Od7A$on)mmLHDVm;8|T z9ri+gfMRX{^&B6qZ>CBIsjBiQvGu(~Dc~GeA*A)KRBg87s99ajsd%=*IoI@#g4$0t z)C(V^>h(Lipx4(6ilGMjA};~GPVDLNa_MrRJWK3J^~$rkxjAANio>Imxv@g~;D0^m BbzT4f diff --git a/src-i386/amd_2.c b/src-i386/amd_2.c deleted file mode 100644 index 7e8c838..0000000 --- a/src-i386/amd_2.c +++ /dev/null @@ -1,1842 +0,0 @@ -/* ========================================================================= */ -/* === AMD_2 =============================================================== */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* AMD_2: performs the AMD ordering on a symmetric sparse matrix A, followed - * by a postordering (via depth-first search) of the assembly tree using the - * AMD_postorder routine. - */ - -#include "amd_internal.h" - -/* ========================================================================= */ -/* === clear_flag ========================================================== */ -/* ========================================================================= */ - -static Int clear_flag (Int wflg, Int wbig, Int W [ ], Int n) -{ - Int x ; - if (wflg < 2 || wflg >= wbig) - { - for (x = 0 ; x < n ; x++) - { - if (W [x] != 0) W [x] = 1 ; - } - wflg = 2 ; - } - /* at this point, W [0..n-1] < wflg holds */ - return (wflg) ; -} - - -/* ========================================================================= */ -/* === AMD_2 =============================================================== */ -/* ========================================================================= */ - -GLOBAL void AMD_2 -( - Int n, /* A is n-by-n, where n > 0 */ - Int Pe [ ], /* Pe [0..n-1]: index in Iw of row i on input */ - Int Iw [ ], /* workspace of size iwlen. Iw [0..pfree-1] - * holds the matrix on input */ - Int Len [ ], /* Len [0..n-1]: length for row/column i on input */ - Int iwlen, /* length of Iw. iwlen >= pfree + n */ - Int pfree, /* Iw [pfree ... iwlen-1] is empty on input */ - - /* 7 size-n workspaces, not defined on input: */ - Int Nv [ ], /* the size of each supernode on output */ - Int Next [ ], /* the output inverse permutation */ - Int Last [ ], /* the output permutation */ - Int Head [ ], - Int Elen [ ], /* the size columns of L for each supernode */ - Int Degree [ ], - Int W [ ], - - /* control parameters and output statistics */ - double Control [ ], /* array of size AMD_CONTROL */ - double Info [ ] /* array of size AMD_INFO */ -) -{ - -/* - * Given a representation of the nonzero pattern of a symmetric matrix, A, - * (excluding the diagonal) perform an approximate minimum (UMFPACK/MA38-style) - * degree ordering to compute a pivot order such that the introduction of - * nonzeros (fill-in) in the Cholesky factors A = LL' is kept low. At each - * step, the pivot selected is the one with the minimum UMFAPACK/MA38-style - * upper-bound on the external degree. This routine can optionally perform - * aggresive absorption (as done by MC47B in the Harwell Subroutine - * Library). - * - * The approximate degree algorithm implemented here is the symmetric analog of - * the degree update algorithm in MA38 and UMFPACK (the Unsymmetric-pattern - * MultiFrontal PACKage, both by Davis and Duff). The routine is based on the - * MA27 minimum degree ordering algorithm by Iain Duff and John Reid. - * - * This routine is a translation of the original AMDBAR and MC47B routines, - * in Fortran, with the following modifications: - * - * (1) dense rows/columns are removed prior to ordering the matrix, and placed - * last in the output order. The presence of a dense row/column can - * increase the ordering time by up to O(n^2), unless they are removed - * prior to ordering. - * - * (2) the minimum degree ordering is followed by a postordering (depth-first - * search) of the assembly tree. Note that mass elimination (discussed - * below) combined with the approximate degree update can lead to the mass - * elimination of nodes with lower exact degree than the current pivot - * element. No additional fill-in is caused in the representation of the - * Schur complement. The mass-eliminated nodes merge with the current - * pivot element. They are ordered prior to the current pivot element. - * Because they can have lower exact degree than the current element, the - * merger of two or more of these nodes in the current pivot element can - * lead to a single element that is not a "fundamental supernode". The - * diagonal block can have zeros in it. Thus, the assembly tree used here - * is not guaranteed to be the precise supernodal elemination tree (with - * "funadmental" supernodes), and the postordering performed by this - * routine is not guaranteed to be a precise postordering of the - * elimination tree. - * - * (3) input parameters are added, to control aggressive absorption and the - * detection of "dense" rows/columns of A. - * - * (4) additional statistical information is returned, such as the number of - * nonzeros in L, and the flop counts for subsequent LDL' and LU - * factorizations. These are slight upper bounds, because of the mass - * elimination issue discussed above. - * - * (5) additional routines are added to interface this routine to MATLAB - * to provide a simple C-callable user-interface, to check inputs for - * errors, compute the symmetry of the pattern of A and the number of - * nonzeros in each row/column of A+A', to compute the pattern of A+A', - * to perform the assembly tree postordering, and to provide debugging - * ouput. Many of these functions are also provided by the Fortran - * Harwell Subroutine Library routine MC47A. - * - * (6) both int and SuiteSparse_long versions are provided. In the - * descriptions below and integer is and int or SuiteSparse_long depending - * on which version is being used. - - ********************************************************************** - ***** CAUTION: ARGUMENTS ARE NOT CHECKED FOR ERRORS ON INPUT. ****** - ********************************************************************** - ** If you want error checking, a more versatile input format, and a ** - ** simpler user interface, use amd_order or amd_l_order instead. ** - ** This routine is not meant to be user-callable. ** - ********************************************************************** - - * ---------------------------------------------------------------------------- - * References: - * ---------------------------------------------------------------------------- - * - * [1] Timothy A. Davis and Iain Duff, "An unsymmetric-pattern multifrontal - * method for sparse LU factorization", SIAM J. Matrix Analysis and - * Applications, vol. 18, no. 1, pp. 140-158. Discusses UMFPACK / MA38, - * which first introduced the approximate minimum degree used by this - * routine. - * - * [2] Patrick Amestoy, Timothy A. Davis, and Iain S. Duff, "An approximate - * minimum degree ordering algorithm," SIAM J. Matrix Analysis and - * Applications, vol. 17, no. 4, pp. 886-905, 1996. Discusses AMDBAR and - * MC47B, which are the Fortran versions of this routine. - * - * [3] Alan George and Joseph Liu, "The evolution of the minimum degree - * ordering algorithm," SIAM Review, vol. 31, no. 1, pp. 1-19, 1989. - * We list below the features mentioned in that paper that this code - * includes: - * - * mass elimination: - * Yes. MA27 relied on supervariable detection for mass elimination. - * - * indistinguishable nodes: - * Yes (we call these "supervariables"). This was also in the MA27 - * code - although we modified the method of detecting them (the - * previous hash was the true degree, which we no longer keep track - * of). A supervariable is a set of rows with identical nonzero - * pattern. All variables in a supervariable are eliminated together. - * Each supervariable has as its numerical name that of one of its - * variables (its principal variable). - * - * quotient graph representation: - * Yes. We use the term "element" for the cliques formed during - * elimination. This was also in the MA27 code. The algorithm can - * operate in place, but it will work more efficiently if given some - * "elbow room." - * - * element absorption: - * Yes. This was also in the MA27 code. - * - * external degree: - * Yes. The MA27 code was based on the true degree. - * - * incomplete degree update and multiple elimination: - * No. This was not in MA27, either. Our method of degree update - * within MC47B is element-based, not variable-based. It is thus - * not well-suited for use with incomplete degree update or multiple - * elimination. - * - * Authors, and Copyright (C) 2004 by: - * Timothy A. Davis, Patrick Amestoy, Iain S. Duff, John K. Reid. - * - * Acknowledgements: This work (and the UMFPACK package) was supported by the - * National Science Foundation (ASC-9111263, DMS-9223088, and CCR-0203270). - * The UMFPACK/MA38 approximate degree update algorithm, the unsymmetric analog - * which forms the basis of AMD, was developed while Tim Davis was supported by - * CERFACS (Toulouse, France) in a post-doctoral position. This C version, and - * the etree postorder, were written while Tim Davis was on sabbatical at - * Stanford University and Lawrence Berkeley National Laboratory. - - * ---------------------------------------------------------------------------- - * INPUT ARGUMENTS (unaltered): - * ---------------------------------------------------------------------------- - - * n: The matrix order. Restriction: n >= 1. - * - * iwlen: The size of the Iw array. On input, the matrix is stored in - * Iw [0..pfree-1]. However, Iw [0..iwlen-1] should be slightly larger - * than what is required to hold the matrix, at least iwlen >= pfree + n. - * Otherwise, excessive compressions will take place. The recommended - * value of iwlen is 1.2 * pfree + n, which is the value used in the - * user-callable interface to this routine (amd_order.c). The algorithm - * will not run at all if iwlen < pfree. Restriction: iwlen >= pfree + n. - * Note that this is slightly more restrictive than the actual minimum - * (iwlen >= pfree), but AMD_2 will be very slow with no elbow room. - * Thus, this routine enforces a bare minimum elbow room of size n. - * - * pfree: On input the tail end of the array, Iw [pfree..iwlen-1], is empty, - * and the matrix is stored in Iw [0..pfree-1]. During execution, - * additional data is placed in Iw, and pfree is modified so that - * Iw [pfree..iwlen-1] is always the unused part of Iw. - * - * Control: A double array of size AMD_CONTROL containing input parameters - * that affect how the ordering is computed. If NULL, then default - * settings are used. - * - * Control [AMD_DENSE] is used to determine whether or not a given input - * row is "dense". A row is "dense" if the number of entries in the row - * exceeds Control [AMD_DENSE] times sqrt (n), except that rows with 16 or - * fewer entries are never considered "dense". To turn off the detection - * of dense rows, set Control [AMD_DENSE] to a negative number, or to a - * number larger than sqrt (n). The default value of Control [AMD_DENSE] - * is AMD_DEFAULT_DENSE, which is defined in amd.h as 10. - * - * Control [AMD_AGGRESSIVE] is used to determine whether or not aggressive - * absorption is to be performed. If nonzero, then aggressive absorption - * is performed (this is the default). - - * ---------------------------------------------------------------------------- - * INPUT/OUPUT ARGUMENTS: - * ---------------------------------------------------------------------------- - * - * Pe: An integer array of size n. On input, Pe [i] is the index in Iw of - * the start of row i. Pe [i] is ignored if row i has no off-diagonal - * entries. Thus Pe [i] must be in the range 0 to pfree-1 for non-empty - * rows. - * - * During execution, it is used for both supervariables and elements: - * - * Principal supervariable i: index into Iw of the description of - * supervariable i. A supervariable represents one or more rows of - * the matrix with identical nonzero pattern. In this case, - * Pe [i] >= 0. - * - * Non-principal supervariable i: if i has been absorbed into another - * supervariable j, then Pe [i] = FLIP (j), where FLIP (j) is defined - * as (-(j)-2). Row j has the same pattern as row i. Note that j - * might later be absorbed into another supervariable j2, in which - * case Pe [i] is still FLIP (j), and Pe [j] = FLIP (j2) which is - * < EMPTY, where EMPTY is defined as (-1) in amd_internal.h. - * - * Unabsorbed element e: the index into Iw of the description of element - * e, if e has not yet been absorbed by a subsequent element. Element - * e is created when the supervariable of the same name is selected as - * the pivot. In this case, Pe [i] >= 0. - * - * Absorbed element e: if element e is absorbed into element e2, then - * Pe [e] = FLIP (e2). This occurs when the pattern of e (which we - * refer to as Le) is found to be a subset of the pattern of e2 (that - * is, Le2). In this case, Pe [i] < EMPTY. If element e is "null" - * (it has no nonzeros outside its pivot block), then Pe [e] = EMPTY, - * and e is the root of an assembly subtree (or the whole tree if - * there is just one such root). - * - * Dense variable i: if i is "dense", then Pe [i] = EMPTY. - * - * On output, Pe holds the assembly tree/forest, which implicitly - * represents a pivot order with identical fill-in as the actual order - * (via a depth-first search of the tree), as follows. If Nv [i] > 0, - * then i represents a node in the assembly tree, and the parent of i is - * Pe [i], or EMPTY if i is a root. If Nv [i] = 0, then (i, Pe [i]) - * represents an edge in a subtree, the root of which is a node in the - * assembly tree. Note that i refers to a row/column in the original - * matrix, not the permuted matrix. - * - * Info: A double array of size AMD_INFO. If present, (that is, not NULL), - * then statistics about the ordering are returned in the Info array. - * See amd.h for a description. - - * ---------------------------------------------------------------------------- - * INPUT/MODIFIED (undefined on output): - * ---------------------------------------------------------------------------- - * - * Len: An integer array of size n. On input, Len [i] holds the number of - * entries in row i of the matrix, excluding the diagonal. The contents - * of Len are undefined on output. - * - * Iw: An integer array of size iwlen. On input, Iw [0..pfree-1] holds the - * description of each row i in the matrix. The matrix must be symmetric, - * and both upper and lower triangular parts must be present. The - * diagonal must not be present. Row i is held as follows: - * - * Len [i]: the length of the row i data structure in the Iw array. - * Iw [Pe [i] ... Pe [i] + Len [i] - 1]: - * the list of column indices for nonzeros in row i (simple - * supervariables), excluding the diagonal. All supervariables - * start with one row/column each (supervariable i is just row i). - * If Len [i] is zero on input, then Pe [i] is ignored on input. - * - * Note that the rows need not be in any particular order, and there - * may be empty space between the rows. - * - * During execution, the supervariable i experiences fill-in. This is - * represented by placing in i a list of the elements that cause fill-in - * in supervariable i: - * - * Len [i]: the length of supervariable i in the Iw array. - * Iw [Pe [i] ... Pe [i] + Elen [i] - 1]: - * the list of elements that contain i. This list is kept short - * by removing absorbed elements. - * Iw [Pe [i] + Elen [i] ... Pe [i] + Len [i] - 1]: - * the list of supervariables in i. This list is kept short by - * removing nonprincipal variables, and any entry j that is also - * contained in at least one of the elements (j in Le) in the list - * for i (e in row i). - * - * When supervariable i is selected as pivot, we create an element e of - * the same name (e=i): - * - * Len [e]: the length of element e in the Iw array. - * Iw [Pe [e] ... Pe [e] + Len [e] - 1]: - * the list of supervariables in element e. - * - * An element represents the fill-in that occurs when supervariable i is - * selected as pivot (which represents the selection of row i and all - * non-principal variables whose principal variable is i). We use the - * term Le to denote the set of all supervariables in element e. Absorbed - * supervariables and elements are pruned from these lists when - * computationally convenient. - * - * CAUTION: THE INPUT MATRIX IS OVERWRITTEN DURING COMPUTATION. - * The contents of Iw are undefined on output. - - * ---------------------------------------------------------------------------- - * OUTPUT (need not be set on input): - * ---------------------------------------------------------------------------- - * - * Nv: An integer array of size n. During execution, ABS (Nv [i]) is equal to - * the number of rows that are represented by the principal supervariable - * i. If i is a nonprincipal or dense variable, then Nv [i] = 0. - * Initially, Nv [i] = 1 for all i. Nv [i] < 0 signifies that i is a - * principal variable in the pattern Lme of the current pivot element me. - * After element me is constructed, Nv [i] is set back to a positive - * value. - * - * On output, Nv [i] holds the number of pivots represented by super - * row/column i of the original matrix, or Nv [i] = 0 for non-principal - * rows/columns. Note that i refers to a row/column in the original - * matrix, not the permuted matrix. - * - * Elen: An integer array of size n. See the description of Iw above. At the - * start of execution, Elen [i] is set to zero for all rows i. During - * execution, Elen [i] is the number of elements in the list for - * supervariable i. When e becomes an element, Elen [e] = FLIP (esize) is - * set, where esize is the size of the element (the number of pivots, plus - * the number of nonpivotal entries). Thus Elen [e] < EMPTY. - * Elen (i) = EMPTY set when variable i becomes nonprincipal. - * - * For variables, Elen (i) >= EMPTY holds until just before the - * postordering and permutation vectors are computed. For elements, - * Elen [e] < EMPTY holds. - * - * On output, Elen [i] is the degree of the row/column in the Cholesky - * factorization of the permuted matrix, corresponding to the original row - * i, if i is a super row/column. It is equal to EMPTY if i is - * non-principal. Note that i refers to a row/column in the original - * matrix, not the permuted matrix. - * - * Note that the contents of Elen on output differ from the Fortran - * version (Elen holds the inverse permutation in the Fortran version, - * which is instead returned in the Next array in this C version, - * described below). - * - * Last: In a degree list, Last [i] is the supervariable preceding i, or EMPTY - * if i is the head of the list. In a hash bucket, Last [i] is the hash - * key for i. - * - * Last [Head [hash]] is also used as the head of a hash bucket if - * Head [hash] contains a degree list (see the description of Head, - * below). - * - * On output, Last [0..n-1] holds the permutation. That is, if - * i = Last [k], then row i is the kth pivot row (where k ranges from 0 to - * n-1). Row Last [k] of A is the kth row in the permuted matrix, PAP'. - * - * Next: Next [i] is the supervariable following i in a link list, or EMPTY if - * i is the last in the list. Used for two kinds of lists: degree lists - * and hash buckets (a supervariable can be in only one kind of list at a - * time). - * - * On output Next [0..n-1] holds the inverse permutation. That is, if - * k = Next [i], then row i is the kth pivot row. Row i of A appears as - * the (Next[i])-th row in the permuted matrix, PAP'. - * - * Note that the contents of Next on output differ from the Fortran - * version (Next is undefined on output in the Fortran version). - - * ---------------------------------------------------------------------------- - * LOCAL WORKSPACE (not input or output - used only during execution): - * ---------------------------------------------------------------------------- - * - * Degree: An integer array of size n. If i is a supervariable, then - * Degree [i] holds the current approximation of the external degree of - * row i (an upper bound). The external degree is the number of nonzeros - * in row i, minus ABS (Nv [i]), the diagonal part. The bound is equal to - * the exact external degree if Elen [i] is less than or equal to two. - * - * We also use the term "external degree" for elements e to refer to - * |Le \ Lme|. If e is an element, then Degree [e] is |Le|, which is the - * degree of the off-diagonal part of the element e (not including the - * diagonal part). - * - * Head: An integer array of size n. Head is used for degree lists. - * Head [deg] is the first supervariable in a degree list. All - * supervariables i in a degree list Head [deg] have the same approximate - * degree, namely, deg = Degree [i]. If the list Head [deg] is empty then - * Head [deg] = EMPTY. - * - * During supervariable detection Head [hash] also serves as a pointer to - * a hash bucket. If Head [hash] >= 0, there is a degree list of degree - * hash. The hash bucket head pointer is Last [Head [hash]]. If - * Head [hash] = EMPTY, then the degree list and hash bucket are both - * empty. If Head [hash] < EMPTY, then the degree list is empty, and - * FLIP (Head [hash]) is the head of the hash bucket. After supervariable - * detection is complete, all hash buckets are empty, and the - * (Last [Head [hash]] = EMPTY) condition is restored for the non-empty - * degree lists. - * - * W: An integer array of size n. The flag array W determines the status of - * elements and variables, and the external degree of elements. - * - * for elements: - * if W [e] = 0, then the element e is absorbed. - * if W [e] >= wflg, then W [e] - wflg is the size of the set - * |Le \ Lme|, in terms of nonzeros (the sum of ABS (Nv [i]) for - * each principal variable i that is both in the pattern of - * element e and NOT in the pattern of the current pivot element, - * me). - * if wflg > W [e] > 0, then e is not absorbed and has not yet been - * seen in the scan of the element lists in the computation of - * |Le\Lme| in Scan 1 below. - * - * for variables: - * during supervariable detection, if W [j] != wflg then j is - * not in the pattern of variable i. - * - * The W array is initialized by setting W [i] = 1 for all i, and by - * setting wflg = 2. It is reinitialized if wflg becomes too large (to - * ensure that wflg+n does not cause integer overflow). - - * ---------------------------------------------------------------------------- - * LOCAL INTEGERS: - * ---------------------------------------------------------------------------- - */ - - Int deg, degme, dext, lemax, e, elenme, eln, i, ilast, inext, j, - jlast, jnext, k, knt1, knt2, knt3, lenj, ln, me, mindeg, nel, nleft, - nvi, nvj, nvpiv, slenme, wbig, we, wflg, wnvi, ok, ndense, ncmpa, - dense, aggressive ; - - unsigned Int hash ; /* unsigned, so that hash % n is well defined.*/ - -/* - * deg: the degree of a variable or element - * degme: size, |Lme|, of the current element, me (= Degree [me]) - * dext: external degree, |Le \ Lme|, of some element e - * lemax: largest |Le| seen so far (called dmax in Fortran version) - * e: an element - * elenme: the length, Elen [me], of element list of pivotal variable - * eln: the length, Elen [...], of an element list - * hash: the computed value of the hash function - * i: a supervariable - * ilast: the entry in a link list preceding i - * inext: the entry in a link list following i - * j: a supervariable - * jlast: the entry in a link list preceding j - * jnext: the entry in a link list, or path, following j - * k: the pivot order of an element or variable - * knt1: loop counter used during element construction - * knt2: loop counter used during element construction - * knt3: loop counter used during compression - * lenj: Len [j] - * ln: length of a supervariable list - * me: current supervariable being eliminated, and the current - * element created by eliminating that supervariable - * mindeg: current minimum degree - * nel: number of pivots selected so far - * nleft: n - nel, the number of nonpivotal rows/columns remaining - * nvi: the number of variables in a supervariable i (= Nv [i]) - * nvj: the number of variables in a supervariable j (= Nv [j]) - * nvpiv: number of pivots in current element - * slenme: number of variables in variable list of pivotal variable - * wbig: = (INT_MAX - n) for the int version, (SuiteSparse_long_max - n) - * for the SuiteSparse_long version. wflg is not allowed to - * be >= wbig. - * we: W [e] - * wflg: used for flagging the W array. See description of Iw. - * wnvi: wflg - Nv [i] - * x: either a supervariable or an element - * - * ok: true if supervariable j can be absorbed into i - * ndense: number of "dense" rows/columns - * dense: rows/columns with initial degree > dense are considered "dense" - * aggressive: true if aggressive absorption is being performed - * ncmpa: number of garbage collections - - * ---------------------------------------------------------------------------- - * LOCAL DOUBLES, used for statistical output only (except for alpha): - * ---------------------------------------------------------------------------- - */ - - double f, r, ndiv, s, nms_lu, nms_ldl, dmax, alpha, lnz, lnzme ; - -/* - * f: nvpiv - * r: degme + nvpiv - * ndiv: number of divisions for LU or LDL' factorizations - * s: number of multiply-subtract pairs for LU factorization, for the - * current element me - * nms_lu number of multiply-subtract pairs for LU factorization - * nms_ldl number of multiply-subtract pairs for LDL' factorization - * dmax: the largest number of entries in any column of L, including the - * diagonal - * alpha: "dense" degree ratio - * lnz: the number of nonzeros in L (excluding the diagonal) - * lnzme: the number of nonzeros in L (excl. the diagonal) for the - * current element me - - * ---------------------------------------------------------------------------- - * LOCAL "POINTERS" (indices into the Iw array) - * ---------------------------------------------------------------------------- -*/ - - Int p, p1, p2, p3, p4, pdst, pend, pj, pme, pme1, pme2, pn, psrc ; - -/* - * Any parameter (Pe [...] or pfree) or local variable starting with "p" (for - * Pointer) is an index into Iw, and all indices into Iw use variables starting - * with "p." The only exception to this rule is the iwlen input argument. - * - * p: pointer into lots of things - * p1: Pe [i] for some variable i (start of element list) - * p2: Pe [i] + Elen [i] - 1 for some variable i - * p3: index of first supervariable in clean list - * p4: - * pdst: destination pointer, for compression - * pend: end of memory to compress - * pj: pointer into an element or variable - * pme: pointer into the current element (pme1...pme2) - * pme1: the current element, me, is stored in Iw [pme1...pme2] - * pme2: the end of the current element - * pn: pointer into a "clean" variable, also used to compress - * psrc: source pointer, for compression -*/ - -/* ========================================================================= */ -/* INITIALIZATIONS */ -/* ========================================================================= */ - - /* Note that this restriction on iwlen is slightly more restrictive than - * what is actually required in AMD_2. AMD_2 can operate with no elbow - * room at all, but it will be slow. For better performance, at least - * size-n elbow room is enforced. */ - ASSERT (iwlen >= pfree + n) ; - ASSERT (n > 0) ; - - /* initialize output statistics */ - lnz = 0 ; - ndiv = 0 ; - nms_lu = 0 ; - nms_ldl = 0 ; - dmax = 1 ; - me = EMPTY ; - - mindeg = 0 ; - ncmpa = 0 ; - nel = 0 ; - lemax = 0 ; - - /* get control parameters */ - if (Control != (double *) NULL) - { - alpha = Control [AMD_DENSE] ; - aggressive = (Control [AMD_AGGRESSIVE] != 0) ; - } - else - { - alpha = AMD_DEFAULT_DENSE ; - aggressive = AMD_DEFAULT_AGGRESSIVE ; - } - /* Note: if alpha is NaN, this is undefined: */ - if (alpha < 0) - { - /* only remove completely dense rows/columns */ - dense = n-2 ; - } - else - { - dense = alpha * sqrt ((double) n) ; - } - dense = MAX (16, dense) ; - dense = MIN (n, dense) ; - AMD_DEBUG1 (("\n\nAMD (debug), alpha %g, aggr. "ID"\n", - alpha, aggressive)) ; - - for (i = 0 ; i < n ; i++) - { - Last [i] = EMPTY ; - Head [i] = EMPTY ; - Next [i] = EMPTY ; - /* if separate Hhead array is used for hash buckets: * - Hhead [i] = EMPTY ; - */ - Nv [i] = 1 ; - W [i] = 1 ; - Elen [i] = 0 ; - Degree [i] = Len [i] ; - } - -#ifndef NDEBUG - AMD_DEBUG1 (("\n======Nel "ID" initial\n", nel)) ; - AMD_dump (n, Pe, Iw, Len, iwlen, pfree, Nv, Next, Last, - Head, Elen, Degree, W, -1) ; -#endif - - /* initialize wflg */ - wbig = Int_MAX - n ; - wflg = clear_flag (0, wbig, W, n) ; - - /* --------------------------------------------------------------------- */ - /* initialize degree lists and eliminate dense and empty rows */ - /* --------------------------------------------------------------------- */ - - ndense = 0 ; - - for (i = 0 ; i < n ; i++) - { - deg = Degree [i] ; - ASSERT (deg >= 0 && deg < n) ; - if (deg == 0) - { - - /* ------------------------------------------------------------- - * we have a variable that can be eliminated at once because - * there is no off-diagonal non-zero in its row. Note that - * Nv [i] = 1 for an empty variable i. It is treated just - * the same as an eliminated element i. - * ------------------------------------------------------------- */ - - Elen [i] = FLIP (1) ; - nel++ ; - Pe [i] = EMPTY ; - W [i] = 0 ; - - } - else if (deg > dense) - { - - /* ------------------------------------------------------------- - * Dense variables are not treated as elements, but as unordered, - * non-principal variables that have no parent. They do not take - * part in the postorder, since Nv [i] = 0. Note that the Fortran - * version does not have this option. - * ------------------------------------------------------------- */ - - AMD_DEBUG1 (("Dense node "ID" degree "ID"\n", i, deg)) ; - ndense++ ; - Nv [i] = 0 ; /* do not postorder this node */ - Elen [i] = EMPTY ; - nel++ ; - Pe [i] = EMPTY ; - - } - else - { - - /* ------------------------------------------------------------- - * place i in the degree list corresponding to its degree - * ------------------------------------------------------------- */ - - inext = Head [deg] ; - ASSERT (inext >= EMPTY && inext < n) ; - if (inext != EMPTY) Last [inext] = i ; - Next [i] = inext ; - Head [deg] = i ; - - } - } - -/* ========================================================================= */ -/* WHILE (selecting pivots) DO */ -/* ========================================================================= */ - - while (nel < n) - { - -#ifndef NDEBUG - AMD_DEBUG1 (("\n======Nel "ID"\n", nel)) ; - if (AMD_debug >= 2) - { - AMD_dump (n, Pe, Iw, Len, iwlen, pfree, Nv, Next, - Last, Head, Elen, Degree, W, nel) ; - } -#endif - -/* ========================================================================= */ -/* GET PIVOT OF MINIMUM DEGREE */ -/* ========================================================================= */ - - /* ----------------------------------------------------------------- */ - /* find next supervariable for elimination */ - /* ----------------------------------------------------------------- */ - - ASSERT (mindeg >= 0 && mindeg < n) ; - for (deg = mindeg ; deg < n ; deg++) - { - me = Head [deg] ; - if (me != EMPTY) break ; - } - mindeg = deg ; - ASSERT (me >= 0 && me < n) ; - AMD_DEBUG1 (("=================me: "ID"\n", me)) ; - - /* ----------------------------------------------------------------- */ - /* remove chosen variable from link list */ - /* ----------------------------------------------------------------- */ - - inext = Next [me] ; - ASSERT (inext >= EMPTY && inext < n) ; - if (inext != EMPTY) Last [inext] = EMPTY ; - Head [deg] = inext ; - - /* ----------------------------------------------------------------- */ - /* me represents the elimination of pivots nel to nel+Nv[me]-1. */ - /* place me itself as the first in this set. */ - /* ----------------------------------------------------------------- */ - - elenme = Elen [me] ; - nvpiv = Nv [me] ; - ASSERT (nvpiv > 0) ; - nel += nvpiv ; - -/* ========================================================================= */ -/* CONSTRUCT NEW ELEMENT */ -/* ========================================================================= */ - - /* ----------------------------------------------------------------- - * At this point, me is the pivotal supervariable. It will be - * converted into the current element. Scan list of the pivotal - * supervariable, me, setting tree pointers and constructing new list - * of supervariables for the new element, me. p is a pointer to the - * current position in the old list. - * ----------------------------------------------------------------- */ - - /* flag the variable "me" as being in Lme by negating Nv [me] */ - Nv [me] = -nvpiv ; - degme = 0 ; - ASSERT (Pe [me] >= 0 && Pe [me] < iwlen) ; - - if (elenme == 0) - { - - /* ------------------------------------------------------------- */ - /* construct the new element in place */ - /* ------------------------------------------------------------- */ - - pme1 = Pe [me] ; - pme2 = pme1 - 1 ; - - for (p = pme1 ; p <= pme1 + Len [me] - 1 ; p++) - { - i = Iw [p] ; - ASSERT (i >= 0 && i < n && Nv [i] >= 0) ; - nvi = Nv [i] ; - if (nvi > 0) - { - - /* ----------------------------------------------------- */ - /* i is a principal variable not yet placed in Lme. */ - /* store i in new list */ - /* ----------------------------------------------------- */ - - /* flag i as being in Lme by negating Nv [i] */ - degme += nvi ; - Nv [i] = -nvi ; - Iw [++pme2] = i ; - - /* ----------------------------------------------------- */ - /* remove variable i from degree list. */ - /* ----------------------------------------------------- */ - - ilast = Last [i] ; - inext = Next [i] ; - ASSERT (ilast >= EMPTY && ilast < n) ; - ASSERT (inext >= EMPTY && inext < n) ; - if (inext != EMPTY) Last [inext] = ilast ; - if (ilast != EMPTY) - { - Next [ilast] = inext ; - } - else - { - /* i is at the head of the degree list */ - ASSERT (Degree [i] >= 0 && Degree [i] < n) ; - Head [Degree [i]] = inext ; - } - } - } - } - else - { - - /* ------------------------------------------------------------- */ - /* construct the new element in empty space, Iw [pfree ...] */ - /* ------------------------------------------------------------- */ - - p = Pe [me] ; - pme1 = pfree ; - slenme = Len [me] - elenme ; - - for (knt1 = 1 ; knt1 <= elenme + 1 ; knt1++) - { - - if (knt1 > elenme) - { - /* search the supervariables in me. */ - e = me ; - pj = p ; - ln = slenme ; - AMD_DEBUG2 (("Search sv: "ID" "ID" "ID"\n", me,pj,ln)) ; - } - else - { - /* search the elements in me. */ - e = Iw [p++] ; - ASSERT (e >= 0 && e < n) ; - pj = Pe [e] ; - ln = Len [e] ; - AMD_DEBUG2 (("Search element e "ID" in me "ID"\n", e,me)) ; - ASSERT (Elen [e] < EMPTY && W [e] > 0 && pj >= 0) ; - } - ASSERT (ln >= 0 && (ln == 0 || (pj >= 0 && pj < iwlen))) ; - - /* --------------------------------------------------------- - * search for different supervariables and add them to the - * new list, compressing when necessary. this loop is - * executed once for each element in the list and once for - * all the supervariables in the list. - * --------------------------------------------------------- */ - - for (knt2 = 1 ; knt2 <= ln ; knt2++) - { - i = Iw [pj++] ; - ASSERT (i >= 0 && i < n && (i == me || Elen [i] >= EMPTY)); - nvi = Nv [i] ; - AMD_DEBUG2 ((": "ID" "ID" "ID" "ID"\n", - i, Elen [i], Nv [i], wflg)) ; - - if (nvi > 0) - { - - /* ------------------------------------------------- */ - /* compress Iw, if necessary */ - /* ------------------------------------------------- */ - - if (pfree >= iwlen) - { - - AMD_DEBUG1 (("GARBAGE COLLECTION\n")) ; - - /* prepare for compressing Iw by adjusting pointers - * and lengths so that the lists being searched in - * the inner and outer loops contain only the - * remaining entries. */ - - Pe [me] = p ; - Len [me] -= knt1 ; - /* check if nothing left of supervariable me */ - if (Len [me] == 0) Pe [me] = EMPTY ; - Pe [e] = pj ; - Len [e] = ln - knt2 ; - /* nothing left of element e */ - if (Len [e] == 0) Pe [e] = EMPTY ; - - ncmpa++ ; /* one more garbage collection */ - - /* store first entry of each object in Pe */ - /* FLIP the first entry in each object */ - for (j = 0 ; j < n ; j++) - { - pn = Pe [j] ; - if (pn >= 0) - { - ASSERT (pn >= 0 && pn < iwlen) ; - Pe [j] = Iw [pn] ; - Iw [pn] = FLIP (j) ; - } - } - - /* psrc/pdst point to source/destination */ - psrc = 0 ; - pdst = 0 ; - pend = pme1 - 1 ; - - while (psrc <= pend) - { - /* search for next FLIP'd entry */ - j = FLIP (Iw [psrc++]) ; - if (j >= 0) - { - AMD_DEBUG2 (("Got object j: "ID"\n", j)) ; - Iw [pdst] = Pe [j] ; - Pe [j] = pdst++ ; - lenj = Len [j] ; - /* copy from source to destination */ - for (knt3 = 0 ; knt3 <= lenj - 2 ; knt3++) - { - Iw [pdst++] = Iw [psrc++] ; - } - } - } - - /* move the new partially-constructed element */ - p1 = pdst ; - for (psrc = pme1 ; psrc <= pfree-1 ; psrc++) - { - Iw [pdst++] = Iw [psrc] ; - } - pme1 = p1 ; - pfree = pdst ; - pj = Pe [e] ; - p = Pe [me] ; - - } - - /* ------------------------------------------------- */ - /* i is a principal variable not yet placed in Lme */ - /* store i in new list */ - /* ------------------------------------------------- */ - - /* flag i as being in Lme by negating Nv [i] */ - degme += nvi ; - Nv [i] = -nvi ; - Iw [pfree++] = i ; - AMD_DEBUG2 ((" s: "ID" nv "ID"\n", i, Nv [i])); - - /* ------------------------------------------------- */ - /* remove variable i from degree link list */ - /* ------------------------------------------------- */ - - ilast = Last [i] ; - inext = Next [i] ; - ASSERT (ilast >= EMPTY && ilast < n) ; - ASSERT (inext >= EMPTY && inext < n) ; - if (inext != EMPTY) Last [inext] = ilast ; - if (ilast != EMPTY) - { - Next [ilast] = inext ; - } - else - { - /* i is at the head of the degree list */ - ASSERT (Degree [i] >= 0 && Degree [i] < n) ; - Head [Degree [i]] = inext ; - } - } - } - - if (e != me) - { - /* set tree pointer and flag to indicate element e is - * absorbed into new element me (the parent of e is me) */ - AMD_DEBUG1 ((" Element "ID" => "ID"\n", e, me)) ; - Pe [e] = FLIP (me) ; - W [e] = 0 ; - } - } - - pme2 = pfree - 1 ; - } - - /* ----------------------------------------------------------------- */ - /* me has now been converted into an element in Iw [pme1..pme2] */ - /* ----------------------------------------------------------------- */ - - /* degme holds the external degree of new element */ - Degree [me] = degme ; - Pe [me] = pme1 ; - Len [me] = pme2 - pme1 + 1 ; - ASSERT (Pe [me] >= 0 && Pe [me] < iwlen) ; - - Elen [me] = FLIP (nvpiv + degme) ; - /* FLIP (Elen (me)) is now the degree of pivot (including - * diagonal part). */ - -#ifndef NDEBUG - AMD_DEBUG2 (("New element structure: length= "ID"\n", pme2-pme1+1)) ; - for (pme = pme1 ; pme <= pme2 ; pme++) AMD_DEBUG3 ((" "ID"", Iw[pme])); - AMD_DEBUG3 (("\n")) ; -#endif - - /* ----------------------------------------------------------------- */ - /* make sure that wflg is not too large. */ - /* ----------------------------------------------------------------- */ - - /* With the current value of wflg, wflg+n must not cause integer - * overflow */ - - wflg = clear_flag (wflg, wbig, W, n) ; - -/* ========================================================================= */ -/* COMPUTE (W [e] - wflg) = |Le\Lme| FOR ALL ELEMENTS */ -/* ========================================================================= */ - - /* ----------------------------------------------------------------- - * Scan 1: compute the external degrees of previous elements with - * respect to the current element. That is: - * (W [e] - wflg) = |Le \ Lme| - * for each element e that appears in any supervariable in Lme. The - * notation Le refers to the pattern (list of supervariables) of a - * previous element e, where e is not yet absorbed, stored in - * Iw [Pe [e] + 1 ... Pe [e] + Len [e]]. The notation Lme - * refers to the pattern of the current element (stored in - * Iw [pme1..pme2]). If aggressive absorption is enabled, and - * (W [e] - wflg) becomes zero, then the element e will be absorbed - * in Scan 2. - * ----------------------------------------------------------------- */ - - AMD_DEBUG2 (("me: ")) ; - for (pme = pme1 ; pme <= pme2 ; pme++) - { - i = Iw [pme] ; - ASSERT (i >= 0 && i < n) ; - eln = Elen [i] ; - AMD_DEBUG3 ((""ID" Elen "ID": \n", i, eln)) ; - if (eln > 0) - { - /* note that Nv [i] has been negated to denote i in Lme: */ - nvi = -Nv [i] ; - ASSERT (nvi > 0 && Pe [i] >= 0 && Pe [i] < iwlen) ; - wnvi = wflg - nvi ; - for (p = Pe [i] ; p <= Pe [i] + eln - 1 ; p++) - { - e = Iw [p] ; - ASSERT (e >= 0 && e < n) ; - we = W [e] ; - AMD_DEBUG4 ((" e "ID" we "ID" ", e, we)) ; - if (we >= wflg) - { - /* unabsorbed element e has been seen in this loop */ - AMD_DEBUG4 ((" unabsorbed, first time seen")) ; - we -= nvi ; - } - else if (we != 0) - { - /* e is an unabsorbed element */ - /* this is the first we have seen e in all of Scan 1 */ - AMD_DEBUG4 ((" unabsorbed")) ; - we = Degree [e] + wnvi ; - } - AMD_DEBUG4 (("\n")) ; - W [e] = we ; - } - } - } - AMD_DEBUG2 (("\n")) ; - -/* ========================================================================= */ -/* DEGREE UPDATE AND ELEMENT ABSORPTION */ -/* ========================================================================= */ - - /* ----------------------------------------------------------------- - * Scan 2: for each i in Lme, sum up the degree of Lme (which is - * degme), plus the sum of the external degrees of each Le for the - * elements e appearing within i, plus the supervariables in i. - * Place i in hash list. - * ----------------------------------------------------------------- */ - - for (pme = pme1 ; pme <= pme2 ; pme++) - { - i = Iw [pme] ; - ASSERT (i >= 0 && i < n && Nv [i] < 0 && Elen [i] >= 0) ; - AMD_DEBUG2 (("Updating: i "ID" "ID" "ID"\n", i, Elen[i], Len [i])); - p1 = Pe [i] ; - p2 = p1 + Elen [i] - 1 ; - pn = p1 ; - hash = 0 ; - deg = 0 ; - ASSERT (p1 >= 0 && p1 < iwlen && p2 >= -1 && p2 < iwlen) ; - - /* ------------------------------------------------------------- */ - /* scan the element list associated with supervariable i */ - /* ------------------------------------------------------------- */ - - /* UMFPACK/MA38-style approximate degree: */ - if (aggressive) - { - for (p = p1 ; p <= p2 ; p++) - { - e = Iw [p] ; - ASSERT (e >= 0 && e < n) ; - we = W [e] ; - if (we != 0) - { - /* e is an unabsorbed element */ - /* dext = | Le \ Lme | */ - dext = we - wflg ; - if (dext > 0) - { - deg += dext ; - Iw [pn++] = e ; - hash += e ; - AMD_DEBUG4 ((" e: "ID" hash = "ID"\n",e,hash)) ; - } - else - { - /* external degree of e is zero, absorb e into me*/ - AMD_DEBUG1 ((" Element "ID" =>"ID" (aggressive)\n", - e, me)) ; - ASSERT (dext == 0) ; - Pe [e] = FLIP (me) ; - W [e] = 0 ; - } - } - } - } - else - { - for (p = p1 ; p <= p2 ; p++) - { - e = Iw [p] ; - ASSERT (e >= 0 && e < n) ; - we = W [e] ; - if (we != 0) - { - /* e is an unabsorbed element */ - dext = we - wflg ; - ASSERT (dext >= 0) ; - deg += dext ; - Iw [pn++] = e ; - hash += e ; - AMD_DEBUG4 ((" e: "ID" hash = "ID"\n",e,hash)) ; - } - } - } - - /* count the number of elements in i (including me): */ - Elen [i] = pn - p1 + 1 ; - - /* ------------------------------------------------------------- */ - /* scan the supervariables in the list associated with i */ - /* ------------------------------------------------------------- */ - - /* The bulk of the AMD run time is typically spent in this loop, - * particularly if the matrix has many dense rows that are not - * removed prior to ordering. */ - p3 = pn ; - p4 = p1 + Len [i] ; - for (p = p2 + 1 ; p < p4 ; p++) - { - j = Iw [p] ; - ASSERT (j >= 0 && j < n) ; - nvj = Nv [j] ; - if (nvj > 0) - { - /* j is unabsorbed, and not in Lme. */ - /* add to degree and add to new list */ - deg += nvj ; - Iw [pn++] = j ; - hash += j ; - AMD_DEBUG4 ((" s: "ID" hash "ID" Nv[j]= "ID"\n", - j, hash, nvj)) ; - } - } - - /* ------------------------------------------------------------- */ - /* update the degree and check for mass elimination */ - /* ------------------------------------------------------------- */ - - /* with aggressive absorption, deg==0 is identical to the - * Elen [i] == 1 && p3 == pn test, below. */ - ASSERT (IMPLIES (aggressive, (deg==0) == (Elen[i]==1 && p3==pn))) ; - - if (Elen [i] == 1 && p3 == pn) - { - - /* --------------------------------------------------------- */ - /* mass elimination */ - /* --------------------------------------------------------- */ - - /* There is nothing left of this node except for an edge to - * the current pivot element. Elen [i] is 1, and there are - * no variables adjacent to node i. Absorb i into the - * current pivot element, me. Note that if there are two or - * more mass eliminations, fillin due to mass elimination is - * possible within the nvpiv-by-nvpiv pivot block. It is this - * step that causes AMD's analysis to be an upper bound. - * - * The reason is that the selected pivot has a lower - * approximate degree than the true degree of the two mass - * eliminated nodes. There is no edge between the two mass - * eliminated nodes. They are merged with the current pivot - * anyway. - * - * No fillin occurs in the Schur complement, in any case, - * and this effect does not decrease the quality of the - * ordering itself, just the quality of the nonzero and - * flop count analysis. It also means that the post-ordering - * is not an exact elimination tree post-ordering. */ - - AMD_DEBUG1 ((" MASS i "ID" => parent e "ID"\n", i, me)) ; - Pe [i] = FLIP (me) ; - nvi = -Nv [i] ; - degme -= nvi ; - nvpiv += nvi ; - nel += nvi ; - Nv [i] = 0 ; - Elen [i] = EMPTY ; - - } - else - { - - /* --------------------------------------------------------- */ - /* update the upper-bound degree of i */ - /* --------------------------------------------------------- */ - - /* the following degree does not yet include the size - * of the current element, which is added later: */ - - Degree [i] = MIN (Degree [i], deg) ; - - /* --------------------------------------------------------- */ - /* add me to the list for i */ - /* --------------------------------------------------------- */ - - /* move first supervariable to end of list */ - Iw [pn] = Iw [p3] ; - /* move first element to end of element part of list */ - Iw [p3] = Iw [p1] ; - /* add new element, me, to front of list. */ - Iw [p1] = me ; - /* store the new length of the list in Len [i] */ - Len [i] = pn - p1 + 1 ; - - /* --------------------------------------------------------- */ - /* place in hash bucket. Save hash key of i in Last [i]. */ - /* --------------------------------------------------------- */ - - /* NOTE: this can fail if hash is negative, because the ANSI C - * standard does not define a % b when a and/or b are negative. - * That's why hash is defined as an unsigned Int, to avoid this - * problem. */ - hash = hash % n ; - ASSERT (((Int) hash) >= 0 && ((Int) hash) < n) ; - - /* if the Hhead array is not used: */ - j = Head [hash] ; - if (j <= EMPTY) - { - /* degree list is empty, hash head is FLIP (j) */ - Next [i] = FLIP (j) ; - Head [hash] = FLIP (i) ; - } - else - { - /* degree list is not empty, use Last [Head [hash]] as - * hash head. */ - Next [i] = Last [j] ; - Last [j] = i ; - } - - /* if a separate Hhead array is used: * - Next [i] = Hhead [hash] ; - Hhead [hash] = i ; - */ - - Last [i] = hash ; - } - } - - Degree [me] = degme ; - - /* ----------------------------------------------------------------- */ - /* Clear the counter array, W [...], by incrementing wflg. */ - /* ----------------------------------------------------------------- */ - - /* make sure that wflg+n does not cause integer overflow */ - lemax = MAX (lemax, degme) ; - wflg += lemax ; - wflg = clear_flag (wflg, wbig, W, n) ; - /* at this point, W [0..n-1] < wflg holds */ - -/* ========================================================================= */ -/* SUPERVARIABLE DETECTION */ -/* ========================================================================= */ - - AMD_DEBUG1 (("Detecting supervariables:\n")) ; - for (pme = pme1 ; pme <= pme2 ; pme++) - { - i = Iw [pme] ; - ASSERT (i >= 0 && i < n) ; - AMD_DEBUG2 (("Consider i "ID" nv "ID"\n", i, Nv [i])) ; - if (Nv [i] < 0) - { - /* i is a principal variable in Lme */ - - /* --------------------------------------------------------- - * examine all hash buckets with 2 or more variables. We do - * this by examing all unique hash keys for supervariables in - * the pattern Lme of the current element, me - * --------------------------------------------------------- */ - - /* let i = head of hash bucket, and empty the hash bucket */ - ASSERT (Last [i] >= 0 && Last [i] < n) ; - hash = Last [i] ; - - /* if Hhead array is not used: */ - j = Head [hash] ; - if (j == EMPTY) - { - /* hash bucket and degree list are both empty */ - i = EMPTY ; - } - else if (j < EMPTY) - { - /* degree list is empty */ - i = FLIP (j) ; - Head [hash] = EMPTY ; - } - else - { - /* degree list is not empty, restore Last [j] of head j */ - i = Last [j] ; - Last [j] = EMPTY ; - } - - /* if separate Hhead array is used: * - i = Hhead [hash] ; - Hhead [hash] = EMPTY ; - */ - - ASSERT (i >= EMPTY && i < n) ; - AMD_DEBUG2 (("----i "ID" hash "ID"\n", i, hash)) ; - - while (i != EMPTY && Next [i] != EMPTY) - { - - /* ----------------------------------------------------- - * this bucket has one or more variables following i. - * scan all of them to see if i can absorb any entries - * that follow i in hash bucket. Scatter i into w. - * ----------------------------------------------------- */ - - ln = Len [i] ; - eln = Elen [i] ; - ASSERT (ln >= 0 && eln >= 0) ; - ASSERT (Pe [i] >= 0 && Pe [i] < iwlen) ; - /* do not flag the first element in the list (me) */ - for (p = Pe [i] + 1 ; p <= Pe [i] + ln - 1 ; p++) - { - ASSERT (Iw [p] >= 0 && Iw [p] < n) ; - W [Iw [p]] = wflg ; - } - - /* ----------------------------------------------------- */ - /* scan every other entry j following i in bucket */ - /* ----------------------------------------------------- */ - - jlast = i ; - j = Next [i] ; - ASSERT (j >= EMPTY && j < n) ; - - while (j != EMPTY) - { - /* ------------------------------------------------- */ - /* check if j and i have identical nonzero pattern */ - /* ------------------------------------------------- */ - - AMD_DEBUG3 (("compare i "ID" and j "ID"\n", i,j)) ; - - /* check if i and j have the same Len and Elen */ - ASSERT (Len [j] >= 0 && Elen [j] >= 0) ; - ASSERT (Pe [j] >= 0 && Pe [j] < iwlen) ; - ok = (Len [j] == ln) && (Elen [j] == eln) ; - /* skip the first element in the list (me) */ - for (p = Pe [j] + 1 ; ok && p <= Pe [j] + ln - 1 ; p++) - { - ASSERT (Iw [p] >= 0 && Iw [p] < n) ; - if (W [Iw [p]] != wflg) ok = 0 ; - } - if (ok) - { - /* --------------------------------------------- */ - /* found it! j can be absorbed into i */ - /* --------------------------------------------- */ - - AMD_DEBUG1 (("found it! j "ID" => i "ID"\n", j,i)); - Pe [j] = FLIP (i) ; - /* both Nv [i] and Nv [j] are negated since they */ - /* are in Lme, and the absolute values of each */ - /* are the number of variables in i and j: */ - Nv [i] += Nv [j] ; - Nv [j] = 0 ; - Elen [j] = EMPTY ; - /* delete j from hash bucket */ - ASSERT (j != Next [j]) ; - j = Next [j] ; - Next [jlast] = j ; - - } - else - { - /* j cannot be absorbed into i */ - jlast = j ; - ASSERT (j != Next [j]) ; - j = Next [j] ; - } - ASSERT (j >= EMPTY && j < n) ; - } - - /* ----------------------------------------------------- - * no more variables can be absorbed into i - * go to next i in bucket and clear flag array - * ----------------------------------------------------- */ - - wflg++ ; - i = Next [i] ; - ASSERT (i >= EMPTY && i < n) ; - - } - } - } - AMD_DEBUG2 (("detect done\n")) ; - -/* ========================================================================= */ -/* RESTORE DEGREE LISTS AND REMOVE NONPRINCIPAL SUPERVARIABLES FROM ELEMENT */ -/* ========================================================================= */ - - p = pme1 ; - nleft = n - nel ; - for (pme = pme1 ; pme <= pme2 ; pme++) - { - i = Iw [pme] ; - ASSERT (i >= 0 && i < n) ; - nvi = -Nv [i] ; - AMD_DEBUG3 (("Restore i "ID" "ID"\n", i, nvi)) ; - if (nvi > 0) - { - /* i is a principal variable in Lme */ - /* restore Nv [i] to signify that i is principal */ - Nv [i] = nvi ; - - /* --------------------------------------------------------- */ - /* compute the external degree (add size of current element) */ - /* --------------------------------------------------------- */ - - deg = Degree [i] + degme - nvi ; - deg = MIN (deg, nleft - nvi) ; - ASSERT (IMPLIES (aggressive, deg > 0) && deg >= 0 && deg < n) ; - - /* --------------------------------------------------------- */ - /* place the supervariable at the head of the degree list */ - /* --------------------------------------------------------- */ - - inext = Head [deg] ; - ASSERT (inext >= EMPTY && inext < n) ; - if (inext != EMPTY) Last [inext] = i ; - Next [i] = inext ; - Last [i] = EMPTY ; - Head [deg] = i ; - - /* --------------------------------------------------------- */ - /* save the new degree, and find the minimum degree */ - /* --------------------------------------------------------- */ - - mindeg = MIN (mindeg, deg) ; - Degree [i] = deg ; - - /* --------------------------------------------------------- */ - /* place the supervariable in the element pattern */ - /* --------------------------------------------------------- */ - - Iw [p++] = i ; - - } - } - AMD_DEBUG2 (("restore done\n")) ; - -/* ========================================================================= */ -/* FINALIZE THE NEW ELEMENT */ -/* ========================================================================= */ - - AMD_DEBUG2 (("ME = "ID" DONE\n", me)) ; - Nv [me] = nvpiv ; - /* save the length of the list for the new element me */ - Len [me] = p - pme1 ; - if (Len [me] == 0) - { - /* there is nothing left of the current pivot element */ - /* it is a root of the assembly tree */ - Pe [me] = EMPTY ; - W [me] = 0 ; - } - if (elenme != 0) - { - /* element was not constructed in place: deallocate part of */ - /* it since newly nonprincipal variables may have been removed */ - pfree = p ; - } - - /* The new element has nvpiv pivots and the size of the contribution - * block for a multifrontal method is degme-by-degme, not including - * the "dense" rows/columns. If the "dense" rows/columns are included, - * the frontal matrix is no larger than - * (degme+ndense)-by-(degme+ndense). - */ - - if (Info != (double *) NULL) - { - f = nvpiv ; - r = degme + ndense ; - dmax = MAX (dmax, f + r) ; - - /* number of nonzeros in L (excluding the diagonal) */ - lnzme = f*r + (f-1)*f/2 ; - lnz += lnzme ; - - /* number of divide operations for LDL' and for LU */ - ndiv += lnzme ; - - /* number of multiply-subtract pairs for LU */ - s = f*r*r + r*(f-1)*f + (f-1)*f*(2*f-1)/6 ; - nms_lu += s ; - - /* number of multiply-subtract pairs for LDL' */ - nms_ldl += (s + lnzme)/2 ; - } - -#ifndef NDEBUG - AMD_DEBUG2 (("finalize done nel "ID" n "ID"\n ::::\n", nel, n)) ; - for (pme = Pe [me] ; pme <= Pe [me] + Len [me] - 1 ; pme++) - { - AMD_DEBUG3 ((" "ID"", Iw [pme])) ; - } - AMD_DEBUG3 (("\n")) ; -#endif - - } - -/* ========================================================================= */ -/* DONE SELECTING PIVOTS */ -/* ========================================================================= */ - - if (Info != (double *) NULL) - { - - /* count the work to factorize the ndense-by-ndense submatrix */ - f = ndense ; - dmax = MAX (dmax, (double) ndense) ; - - /* number of nonzeros in L (excluding the diagonal) */ - lnzme = (f-1)*f/2 ; - lnz += lnzme ; - - /* number of divide operations for LDL' and for LU */ - ndiv += lnzme ; - - /* number of multiply-subtract pairs for LU */ - s = (f-1)*f*(2*f-1)/6 ; - nms_lu += s ; - - /* number of multiply-subtract pairs for LDL' */ - nms_ldl += (s + lnzme)/2 ; - - /* number of nz's in L (excl. diagonal) */ - Info [AMD_LNZ] = lnz ; - - /* number of divide ops for LU and LDL' */ - Info [AMD_NDIV] = ndiv ; - - /* number of multiply-subtract pairs for LDL' */ - Info [AMD_NMULTSUBS_LDL] = nms_ldl ; - - /* number of multiply-subtract pairs for LU */ - Info [AMD_NMULTSUBS_LU] = nms_lu ; - - /* number of "dense" rows/columns */ - Info [AMD_NDENSE] = ndense ; - - /* largest front is dmax-by-dmax */ - Info [AMD_DMAX] = dmax ; - - /* number of garbage collections in AMD */ - Info [AMD_NCMPA] = ncmpa ; - - /* successful ordering */ - Info [AMD_STATUS] = AMD_OK ; - } - -/* ========================================================================= */ -/* POST-ORDERING */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- - * Variables at this point: - * - * Pe: holds the elimination tree. The parent of j is FLIP (Pe [j]), - * or EMPTY if j is a root. The tree holds both elements and - * non-principal (unordered) variables absorbed into them. - * Dense variables are non-principal and unordered. - * - * Elen: holds the size of each element, including the diagonal part. - * FLIP (Elen [e]) > 0 if e is an element. For unordered - * variables i, Elen [i] is EMPTY. - * - * Nv: Nv [e] > 0 is the number of pivots represented by the element e. - * For unordered variables i, Nv [i] is zero. - * - * Contents no longer needed: - * W, Iw, Len, Degree, Head, Next, Last. - * - * The matrix itself has been destroyed. - * - * n: the size of the matrix. - * No other scalars needed (pfree, iwlen, etc.) - * ------------------------------------------------------------------------- */ - - /* restore Pe */ - for (i = 0 ; i < n ; i++) - { - Pe [i] = FLIP (Pe [i]) ; - } - - /* restore Elen, for output information, and for postordering */ - for (i = 0 ; i < n ; i++) - { - Elen [i] = FLIP (Elen [i]) ; - } - -/* Now the parent of j is Pe [j], or EMPTY if j is a root. Elen [e] > 0 - * is the size of element e. Elen [i] is EMPTY for unordered variable i. */ - -#ifndef NDEBUG - AMD_DEBUG2 (("\nTree:\n")) ; - for (i = 0 ; i < n ; i++) - { - AMD_DEBUG2 ((" "ID" parent: "ID" ", i, Pe [i])) ; - ASSERT (Pe [i] >= EMPTY && Pe [i] < n) ; - if (Nv [i] > 0) - { - /* this is an element */ - e = i ; - AMD_DEBUG2 ((" element, size is "ID"\n", Elen [i])) ; - ASSERT (Elen [e] > 0) ; - } - AMD_DEBUG2 (("\n")) ; - } - AMD_DEBUG2 (("\nelements:\n")) ; - for (e = 0 ; e < n ; e++) - { - if (Nv [e] > 0) - { - AMD_DEBUG3 (("Element e= "ID" size "ID" nv "ID" \n", e, - Elen [e], Nv [e])) ; - } - } - AMD_DEBUG2 (("\nvariables:\n")) ; - for (i = 0 ; i < n ; i++) - { - Int cnt ; - if (Nv [i] == 0) - { - AMD_DEBUG3 (("i unordered: "ID"\n", i)) ; - j = Pe [i] ; - cnt = 0 ; - AMD_DEBUG3 ((" j: "ID"\n", j)) ; - if (j == EMPTY) - { - AMD_DEBUG3 ((" i is a dense variable\n")) ; - } - else - { - ASSERT (j >= 0 && j < n) ; - while (Nv [j] == 0) - { - AMD_DEBUG3 ((" j : "ID"\n", j)) ; - j = Pe [j] ; - AMD_DEBUG3 ((" j:: "ID"\n", j)) ; - cnt++ ; - if (cnt > n) break ; - } - e = j ; - AMD_DEBUG3 ((" got to e: "ID"\n", e)) ; - } - } - } -#endif - -/* ========================================================================= */ -/* compress the paths of the variables */ -/* ========================================================================= */ - - for (i = 0 ; i < n ; i++) - { - if (Nv [i] == 0) - { - - /* ------------------------------------------------------------- - * i is an un-ordered row. Traverse the tree from i until - * reaching an element, e. The element, e, was the principal - * supervariable of i and all nodes in the path from i to when e - * was selected as pivot. - * ------------------------------------------------------------- */ - - AMD_DEBUG1 (("Path compression, i unordered: "ID"\n", i)) ; - j = Pe [i] ; - ASSERT (j >= EMPTY && j < n) ; - AMD_DEBUG3 ((" j: "ID"\n", j)) ; - if (j == EMPTY) - { - /* Skip a dense variable. It has no parent. */ - AMD_DEBUG3 ((" i is a dense variable\n")) ; - continue ; - } - - /* while (j is a variable) */ - while (Nv [j] == 0) - { - AMD_DEBUG3 ((" j : "ID"\n", j)) ; - j = Pe [j] ; - AMD_DEBUG3 ((" j:: "ID"\n", j)) ; - ASSERT (j >= 0 && j < n) ; - } - /* got to an element e */ - e = j ; - AMD_DEBUG3 (("got to e: "ID"\n", e)) ; - - /* ------------------------------------------------------------- - * traverse the path again from i to e, and compress the path - * (all nodes point to e). Path compression allows this code to - * compute in O(n) time. - * ------------------------------------------------------------- */ - - j = i ; - /* while (j is a variable) */ - while (Nv [j] == 0) - { - jnext = Pe [j] ; - AMD_DEBUG3 (("j "ID" jnext "ID"\n", j, jnext)) ; - Pe [j] = e ; - j = jnext ; - ASSERT (j >= 0 && j < n) ; - } - } - } - -/* ========================================================================= */ -/* postorder the assembly tree */ -/* ========================================================================= */ - - AMD_postorder (n, Pe, Nv, Elen, - W, /* output order */ - Head, Next, Last) ; /* workspace */ - -/* ========================================================================= */ -/* compute output permutation and inverse permutation */ -/* ========================================================================= */ - - /* W [e] = k means that element e is the kth element in the new - * order. e is in the range 0 to n-1, and k is in the range 0 to - * the number of elements. Use Head for inverse order. */ - - for (k = 0 ; k < n ; k++) - { - Head [k] = EMPTY ; - Next [k] = EMPTY ; - } - for (e = 0 ; e < n ; e++) - { - k = W [e] ; - ASSERT ((k == EMPTY) == (Nv [e] == 0)) ; - if (k != EMPTY) - { - ASSERT (k >= 0 && k < n) ; - Head [k] = e ; - } - } - - /* construct output inverse permutation in Next, - * and permutation in Last */ - nel = 0 ; - for (k = 0 ; k < n ; k++) - { - e = Head [k] ; - if (e == EMPTY) break ; - ASSERT (e >= 0 && e < n && Nv [e] > 0) ; - Next [e] = nel ; - nel += Nv [e] ; - } - ASSERT (nel == n - ndense) ; - - /* order non-principal variables (dense, & those merged into supervar's) */ - for (i = 0 ; i < n ; i++) - { - if (Nv [i] == 0) - { - e = Pe [i] ; - ASSERT (e >= EMPTY && e < n) ; - if (e != EMPTY) - { - /* This is an unordered variable that was merged - * into element e via supernode detection or mass - * elimination of i when e became the pivot element. - * Place i in order just before e. */ - ASSERT (Next [i] == EMPTY && Nv [e] > 0) ; - Next [i] = Next [e] ; - Next [e]++ ; - } - else - { - /* This is a dense unordered variable, with no parent. - * Place it last in the output order. */ - Next [i] = nel++ ; - } - } - } - ASSERT (nel == n) ; - - AMD_DEBUG2 (("\n\nPerm:\n")) ; - for (i = 0 ; i < n ; i++) - { - k = Next [i] ; - ASSERT (k >= 0 && k < n) ; - Last [k] = i ; - AMD_DEBUG2 ((" perm ["ID"] = "ID"\n", k, i)) ; - } -} diff --git a/src-i386/amd_2.o b/src-i386/amd_2.o deleted file mode 100644 index c7959ed8e7d4fb4865e999fe7c50e915d69e9344..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6648 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 D;9lLk diff --git a/src-i386/amd_aat.c b/src-i386/amd_aat.c deleted file mode 100644 index e5e1752..0000000 --- a/src-i386/amd_aat.c +++ /dev/null @@ -1,184 +0,0 @@ -/* ========================================================================= */ -/* === AMD_aat ============================================================= */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* AMD_aat: compute the symmetry of the pattern of A, and count the number of - * nonzeros each column of A+A' (excluding the diagonal). Assumes the input - * matrix has no errors, with sorted columns and no duplicates - * (AMD_valid (n, n, Ap, Ai) must be AMD_OK, but this condition is not - * checked). - */ - -#include "amd_internal.h" - -GLOBAL size_t AMD_aat /* returns nz in A+A' */ -( - Int n, - const Int Ap [ ], - const Int Ai [ ], - Int Len [ ], /* Len [j]: length of column j of A+A', excl diagonal*/ - Int Tp [ ], /* workspace of size n */ - double Info [ ] -) -{ - Int p1, p2, p, i, j, pj, pj2, k, nzdiag, nzboth, nz ; - double sym ; - size_t nzaat ; - -#ifndef NDEBUG - AMD_debug_init ("AMD AAT") ; - for (k = 0 ; k < n ; k++) Tp [k] = EMPTY ; - ASSERT (AMD_valid (n, n, Ap, Ai) == AMD_OK) ; -#endif - - if (Info != (double *) NULL) - { - /* clear the Info array, if it exists */ - for (i = 0 ; i < AMD_INFO ; i++) - { - Info [i] = EMPTY ; - } - Info [AMD_STATUS] = AMD_OK ; - } - - for (k = 0 ; k < n ; k++) - { - Len [k] = 0 ; - } - - nzdiag = 0 ; - nzboth = 0 ; - nz = Ap [n] ; - - for (k = 0 ; k < n ; k++) - { - p1 = Ap [k] ; - p2 = Ap [k+1] ; - AMD_DEBUG2 (("\nAAT Column: "ID" p1: "ID" p2: "ID"\n", k, p1, p2)) ; - - /* construct A+A' */ - for (p = p1 ; p < p2 ; ) - { - /* scan the upper triangular part of A */ - j = Ai [p] ; - if (j < k) - { - /* entry A (j,k) is in the strictly upper triangular part, - * add both A (j,k) and A (k,j) to the matrix A+A' */ - Len [j]++ ; - Len [k]++ ; - AMD_DEBUG3 ((" upper ("ID","ID") ("ID","ID")\n", j,k, k,j)); - p++ ; - } - else if (j == k) - { - /* skip the diagonal */ - p++ ; - nzdiag++ ; - break ; - } - else /* j > k */ - { - /* first entry below the diagonal */ - break ; - } - /* scan lower triangular part of A, in column j until reaching - * row k. Start where last scan left off. */ - ASSERT (Tp [j] != EMPTY) ; - ASSERT (Ap [j] <= Tp [j] && Tp [j] <= Ap [j+1]) ; - pj2 = Ap [j+1] ; - for (pj = Tp [j] ; pj < pj2 ; ) - { - i = Ai [pj] ; - if (i < k) - { - /* A (i,j) is only in the lower part, not in upper. - * add both A (i,j) and A (j,i) to the matrix A+A' */ - Len [i]++ ; - Len [j]++ ; - AMD_DEBUG3 ((" lower ("ID","ID") ("ID","ID")\n", - i,j, j,i)) ; - pj++ ; - } - else if (i == k) - { - /* entry A (k,j) in lower part and A (j,k) in upper */ - pj++ ; - nzboth++ ; - break ; - } - else /* i > k */ - { - /* consider this entry later, when k advances to i */ - break ; - } - } - Tp [j] = pj ; - } - /* Tp [k] points to the entry just below the diagonal in column k */ - Tp [k] = p ; - } - - /* clean up, for remaining mismatched entries */ - for (j = 0 ; j < n ; j++) - { - for (pj = Tp [j] ; pj < Ap [j+1] ; pj++) - { - i = Ai [pj] ; - /* A (i,j) is only in the lower part, not in upper. - * add both A (i,j) and A (j,i) to the matrix A+A' */ - Len [i]++ ; - Len [j]++ ; - AMD_DEBUG3 ((" lower cleanup ("ID","ID") ("ID","ID")\n", - i,j, j,i)) ; - } - } - - /* --------------------------------------------------------------------- */ - /* compute the symmetry of the nonzero pattern of A */ - /* --------------------------------------------------------------------- */ - - /* Given a matrix A, the symmetry of A is: - * B = tril (spones (A), -1) + triu (spones (A), 1) ; - * sym = nnz (B & B') / nnz (B) ; - * or 1 if nnz (B) is zero. - */ - - if (nz == nzdiag) - { - sym = 1 ; - } - else - { - sym = (2 * (double) nzboth) / ((double) (nz - nzdiag)) ; - } - - nzaat = 0 ; - for (k = 0 ; k < n ; k++) - { - nzaat += Len [k] ; - } - - AMD_DEBUG1 (("AMD nz in A+A', excluding diagonal (nzaat) = %g\n", - (double) nzaat)) ; - AMD_DEBUG1 ((" nzboth: "ID" nz: "ID" nzdiag: "ID" symmetry: %g\n", - nzboth, nz, nzdiag, sym)) ; - - if (Info != (double *) NULL) - { - Info [AMD_STATUS] = AMD_OK ; - Info [AMD_N] = n ; - Info [AMD_NZ] = nz ; - Info [AMD_SYMMETRY] = sym ; /* symmetry of pattern of A */ - Info [AMD_NZDIAG] = nzdiag ; /* nonzeros on diagonal of A */ - Info [AMD_NZ_A_PLUS_AT] = nzaat ; /* nonzeros in A+A' */ - } - - return (nzaat) ; -} diff --git a/src-i386/amd_aat.o b/src-i386/amd_aat.o deleted file mode 100644 index 828f1716c2cde3fe8a8c5cc10fb3ff9439c8c9ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1521 zcmah}?`s=n9DknNZ3|ntM9CyFkrN&?!}ON0SiG&mVj~lYAX=@knOwG{E}Cwoy=q&k z9bQj8j?98!!B_ng>MP&)B3oSNz!$UlB4M2Fl{8L9+>364tbV?ijy9#kFWhs__w)UH ze>~sk?wjNL7|CZcV~_benQLZw%Jlc$WhuZ|f-_bEhXg89*&BvdDw;(fdGvCECF|Om ziHS!ux|WOJ9ZCNmi}EH7ZM-)zmG!gK>x;Z6j->P+Z~)qk-FQcnJ-m0Jg%EUV^Sn4Z zqj+x*zw?&$SI#ws=~l%#cUDyGb@LfFE6mnf>sD=H2}Cbq)r0zt$$MVYH{9`J?rCAz zH^Y|>qH(~CYgyq(b_T@dTLC94f@^SOh-<)Hf;mAt-hM+|c{#NXR+5Zv4v)O-=Dw5l zp8&?3oQQ{OOQ_M!+Du>hblO?3{qP(GKyaikSzz&6XrINoC4bM|(~>M@#TcB0%k;+F z6YW>wUHgbx@*=nD96Y^gKJE@7+}+tf^}9|ZJkKZrQt3GnLmk42h3A8QQqsZf%r3wl z(>s1a^Zz10cwcJcPUp9;1C9OmPxw-YQUXuaQ>&7^NHKny zTX%d@)0i|!!GUR)!(Zk=H=tJ176emF?T9o zc&|}2pJi5qqn8Q3qYw7|2RIjc(>{O$I*s1OvOs^qD&j9RLj_rJlJ6DeO??b6^cbuJKF`Z7B(RQ zID7-BYNu?UT4a_u)k@`V$@Ymw7HPLQ+olx_i(NU}CeR+AvpFiZQu(|1roPwb9NS^- zs?>QBn!^&O+0$E8VYECtQGPg&adt)@f`3|V@_e=OVYxcZx+77{%*-&Ye6BDuUK}m& G4*myEi(t6` diff --git a/src-i386/amd_control.c b/src-i386/amd_control.c deleted file mode 100644 index 0b64f77..0000000 --- a/src-i386/amd_control.c +++ /dev/null @@ -1,63 +0,0 @@ -/* ========================================================================= */ -/* === AMD_control ========================================================= */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* User-callable. Prints the control parameters for AMD. See amd.h - * for details. If the Control array is not present, the defaults are - * printed instead. - */ - -#include "amd_internal.h" - -GLOBAL void AMD_control -( - double Control [ ] -) -{ - double alpha ; - Int aggressive ; - - if (Control != (double *) NULL) - { - alpha = Control [AMD_DENSE] ; - aggressive = Control [AMD_AGGRESSIVE] != 0 ; - } - else - { - alpha = AMD_DEFAULT_DENSE ; - aggressive = AMD_DEFAULT_AGGRESSIVE ; - } - - PRINTF (("\nAMD version %d.%d.%d, %s: approximate minimum degree ordering\n" - " dense row parameter: %g\n", AMD_MAIN_VERSION, AMD_SUB_VERSION, - AMD_SUBSUB_VERSION, AMD_DATE, alpha)) ; - - if (alpha < 0) - { - PRINTF ((" no rows treated as dense\n")) ; - } - else - { - PRINTF (( - " (rows with more than max (%g * sqrt (n), 16) entries are\n" - " considered \"dense\", and placed last in output permutation)\n", - alpha)) ; - } - - if (aggressive) - { - PRINTF ((" aggressive absorption: yes\n")) ; - } - else - { - PRINTF ((" aggressive absorption: no\n")) ; - } - - PRINTF ((" size of AMD integer: %d\n\n", sizeof (Int))) ; -} diff --git a/src-i386/amd_control.o b/src-i386/amd_control.o deleted file mode 100644 index c49ca676e7c865c3454e6e1e799192931a7f9c1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1716 zcmah~O>7%Q6rQ!W!E!?aYHo0Nik!+p&emyzm0CU6#8RY+N)>-OfRs$KV`qx@huLxB zSR9Z-5mFneCy)>q&fGX~;bN(vUUMT>W%V2dRa|a<8sZ%c$3r$D|VgjD4K+g+rA*4I`2?p z%!jFQ7GvnIa&6_jZPE=`aqHUh&2!K#x(#a>0mk2r;^=Bl;@v{tJobbH(=c)0Km23$ zK`mFg-<|#PPqg*fF9h`~ndNTp`P0*WZ}z)x|C1cd)=qvvfD!RqVtkOBds552Mm9XB z=_x!j>G-s%Mtm;+#5SD4ale+!8xN?!v(x>1_q+N-WZ1}fh~&X>?Eh(N7Lj$d7SZS6 z`0Q1@uHuzKj7VL56@%GSI3jmr;+3O4);~F$#+B)x9Q}+SJN$L^u@UuAL3uKvAuDMT;-R?)CpQx*E5s(aX!VLCmm2qQc&tvk&R27^Z1j-dk`i(50xWbPF zs9+yLuDB<(P-R$XWEp{eKu82y3H0Lvk79lnV-ub?=)Tmu-~~#6-sL`cybbw<2D}B) zXG%lfUo60KX%U34l@t+hB~0Xg$mf_~>s7V`z*z6)WK@1U*8BMs7rpryl>hEOQ4 zrMbpR7b(1n&l^}!6v;gSd^-wMNN^e8Kt%t`@q@U=NOrI#b)Z&CUyFumfSWZA7*yBS z*2<8VrPb0>7(}wYiyVRgt!6s$P`0ho&h!(^mN+0WFoGmHsi(7EQ^Eu5J%GbfnlvxSML7mfw`0 hisk`}hkUNn=`cs^Zr15n$u`Ft`5%lBf7iOs{sJ8yOiKU& diff --git a/src-i386/amd_defaults.c b/src-i386/amd_defaults.c deleted file mode 100644 index 9d20023..0000000 --- a/src-i386/amd_defaults.c +++ /dev/null @@ -1,37 +0,0 @@ -/* ========================================================================= */ -/* === AMD_defaults ======================================================== */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* User-callable. Sets default control parameters for AMD. See amd.h - * for details. - */ - -#include "amd_internal.h" - -/* ========================================================================= */ -/* === AMD defaults ======================================================== */ -/* ========================================================================= */ - -GLOBAL void AMD_defaults -( - double Control [ ] -) -{ - Int i ; - - if (Control != (double *) NULL) - { - for (i = 0 ; i < AMD_CONTROL ; i++) - { - Control [i] = 0 ; - } - Control [AMD_DENSE] = AMD_DEFAULT_DENSE ; - Control [AMD_AGGRESSIVE] = AMD_DEFAULT_AGGRESSIVE ; - } -} diff --git a/src-i386/amd_defaults.o b/src-i386/amd_defaults.o deleted file mode 100644 index 85f9933741b4d3495f720b491aa34baa1dc71f28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmeZaWM=?@FN_Qf0$>&kqh3jBMG2SEcc3S_TAf?g4-#VkN=IUq+N0ieAO`i7QBA`A>RKwbehb;brL z>Ojs|16214suo0n%nR=hQQ>I4RHD&a#nO54CM!sj;eq2$Dj-Jl^FNwDn-6Lne982A z^KGjPINF&CkMjWqKyk_i#B2--KoX=vgh4MYGba_u0)c=385q(T6LVAIQ&Q6sOLIz! z^^zen3=A4j1|v`}6DSbS0CGA3Ni#EoY)4gyoJN?yYS0V;a*@*qGcGkqaSjT2W=4=- zFo79Vhz&?HGg@IP0E#$5ML{W_nGqD*sBZQKih%v5SDKfTnVp(b$pA@mDpgfg40@>< R@o7bgxv32C$iaqP2>^6cbuj<{ diff --git a/src-i386/amd_dump.c b/src-i386/amd_dump.c deleted file mode 100644 index 01e1fb5..0000000 --- a/src-i386/amd_dump.c +++ /dev/null @@ -1,179 +0,0 @@ -/* ========================================================================= */ -/* === AMD_dump ============================================================ */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* Debugging routines for AMD. Not used if NDEBUG is not defined at compile- - * time (the default). See comments in amd_internal.h on how to enable - * debugging. Not user-callable. - */ - -#include "amd_internal.h" - -#ifndef NDEBUG - -/* This global variable is present only when debugging */ -GLOBAL Int AMD_debug = -999 ; /* default is no debug printing */ - -/* ========================================================================= */ -/* === AMD_debug_init ====================================================== */ -/* ========================================================================= */ - -/* Sets the debug print level, by reading the file debug.amd (if it exists) */ - -GLOBAL void AMD_debug_init ( char *s ) -{ - FILE *f ; - f = fopen ("debug.amd", "r") ; - if (f == (FILE *) NULL) - { - AMD_debug = -999 ; - } - else - { - fscanf (f, ID, &AMD_debug) ; - fclose (f) ; - } - if (AMD_debug >= 0) - { - printf ("%s: AMD_debug_init, D= "ID"\n", s, AMD_debug) ; - } -} - -/* ========================================================================= */ -/* === AMD_dump ============================================================ */ -/* ========================================================================= */ - -/* Dump AMD's data structure, except for the hash buckets. This routine - * cannot be called when the hash buckets are non-empty. - */ - -GLOBAL void AMD_dump ( - Int n, /* A is n-by-n */ - Int Pe [ ], /* pe [0..n-1]: index in iw of start of row i */ - Int Iw [ ], /* workspace of size iwlen, iwlen [0..pfree-1] - * holds the matrix on input */ - Int Len [ ], /* len [0..n-1]: length for row i */ - Int iwlen, /* length of iw */ - Int pfree, /* iw [pfree ... iwlen-1] is empty on input */ - Int Nv [ ], /* nv [0..n-1] */ - Int Next [ ], /* next [0..n-1] */ - Int Last [ ], /* last [0..n-1] */ - Int Head [ ], /* head [0..n-1] */ - Int Elen [ ], /* size n */ - Int Degree [ ], /* size n */ - Int W [ ], /* size n */ - Int nel -) -{ - Int i, pe, elen, nv, len, e, p, k, j, deg, w, cnt, ilast ; - - if (AMD_debug < 0) return ; - ASSERT (pfree <= iwlen) ; - AMD_DEBUG3 (("\nAMD dump, pfree: "ID"\n", pfree)) ; - for (i = 0 ; i < n ; i++) - { - pe = Pe [i] ; - elen = Elen [i] ; - nv = Nv [i] ; - len = Len [i] ; - w = W [i] ; - - if (elen >= EMPTY) - { - if (nv == 0) - { - AMD_DEBUG3 (("\nI "ID": nonprincipal: ", i)) ; - ASSERT (elen == EMPTY) ; - if (pe == EMPTY) - { - AMD_DEBUG3 ((" dense node\n")) ; - ASSERT (w == 1) ; - } - else - { - ASSERT (pe < EMPTY) ; - AMD_DEBUG3 ((" i "ID" -> parent "ID"\n", i, FLIP (Pe[i]))); - } - } - else - { - AMD_DEBUG3 (("\nI "ID": active principal supervariable:\n",i)); - AMD_DEBUG3 ((" nv(i): "ID" Flag: %d\n", nv, (nv < 0))) ; - ASSERT (elen >= 0) ; - ASSERT (nv > 0 && pe >= 0) ; - p = pe ; - AMD_DEBUG3 ((" e/s: ")) ; - if (elen == 0) AMD_DEBUG3 ((" : ")) ; - ASSERT (pe + len <= pfree) ; - for (k = 0 ; k < len ; k++) - { - j = Iw [p] ; - AMD_DEBUG3 ((" "ID"", j)) ; - ASSERT (j >= 0 && j < n) ; - if (k == elen-1) AMD_DEBUG3 ((" : ")) ; - p++ ; - } - AMD_DEBUG3 (("\n")) ; - } - } - else - { - e = i ; - if (w == 0) - { - AMD_DEBUG3 (("\nE "ID": absorbed element: w "ID"\n", e, w)) ; - ASSERT (nv > 0 && pe < 0) ; - AMD_DEBUG3 ((" e "ID" -> parent "ID"\n", e, FLIP (Pe [e]))) ; - } - else - { - AMD_DEBUG3 (("\nE "ID": unabsorbed element: w "ID"\n", e, w)) ; - ASSERT (nv > 0 && pe >= 0) ; - p = pe ; - AMD_DEBUG3 ((" : ")) ; - ASSERT (pe + len <= pfree) ; - for (k = 0 ; k < len ; k++) - { - j = Iw [p] ; - AMD_DEBUG3 ((" "ID"", j)) ; - ASSERT (j >= 0 && j < n) ; - p++ ; - } - AMD_DEBUG3 (("\n")) ; - } - } - } - - /* this routine cannot be called when the hash buckets are non-empty */ - AMD_DEBUG3 (("\nDegree lists:\n")) ; - if (nel >= 0) - { - cnt = 0 ; - for (deg = 0 ; deg < n ; deg++) - { - if (Head [deg] == EMPTY) continue ; - ilast = EMPTY ; - AMD_DEBUG3 ((ID": \n", deg)) ; - for (i = Head [deg] ; i != EMPTY ; i = Next [i]) - { - AMD_DEBUG3 ((" "ID" : next "ID" last "ID" deg "ID"\n", - i, Next [i], Last [i], Degree [i])) ; - ASSERT (i >= 0 && i < n && ilast == Last [i] && - deg == Degree [i]) ; - cnt += Nv [i] ; - ilast = i ; - } - AMD_DEBUG3 (("\n")) ; - } - ASSERT (cnt == n - nel) ; - } - -} - -#endif diff --git a/src-i386/amd_dump.o b/src-i386/amd_dump.o deleted file mode 100644 index 9baa3102a1259ee98a88964a6f7adf7c6f6d36af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 446 zcmeZaWMKe-4?xTXX0bBrm84dbfZ4bS1qOozy_Cd~MBGZiG7by|2lSGPiwP)WXaK6y zH$hcp1LST&6=DFI=iu(_Y^9))X=Y)jTaaIzS)rR!o>-Koqu^AUnNy;WRH@*bndcs^ z8*XNzP*9Ygm6}|lsbHdKsb>r{OD`=mClzYuzyAyj>5PfFDe)<#xdnR3FsqRL&j=J` x1`%ig+3!q1Ijm}s{LPF*4aiu25CH_Bm|$kK0<)0`DIiC$2o%^VRaI5UOaLspGM4}V diff --git a/src-i386/amd_global.c b/src-i386/amd_global.c deleted file mode 100644 index 0f3def0..0000000 --- a/src-i386/amd_global.c +++ /dev/null @@ -1,85 +0,0 @@ -/* ========================================================================= */ -/* === amd_global ========================================================== */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -#include - -#ifdef MATLAB_MEX_FILE -#include "mex.h" -#include "matrix.h" -#endif - -#ifndef NULL -#define NULL 0 -#endif - -/* ========================================================================= */ -/* === Default AMD memory manager ========================================== */ -/* ========================================================================= */ - -/* The user can redefine these global pointers at run-time to change the memory - * manager used by AMD. AMD only uses malloc and free; realloc and calloc are - * include for completeness, in case another package wants to use the same - * memory manager as AMD. - * - * If compiling as a MATLAB mexFunction, the default memory manager is mxMalloc. - * You can also compile AMD as a standard ANSI-C library and link a mexFunction - * against it, and then redefine these pointers at run-time, in your - * mexFunction. - * - * If -DNMALLOC is defined at compile-time, no memory manager is specified at - * compile-time. You must then define these functions at run-time, before - * calling AMD, for AMD to work properly. - */ - -#ifndef NMALLOC -#ifdef MATLAB_MEX_FILE -/* MATLAB mexFunction: */ -void *(*amd_malloc) (size_t) = mxMalloc ; -void (*amd_free) (void *) = mxFree ; -void *(*amd_realloc) (void *, size_t) = mxRealloc ; -void *(*amd_calloc) (size_t, size_t) = mxCalloc ; -#else -/* standard ANSI-C: */ -void *(*amd_malloc) (size_t) = malloc ; -void (*amd_free) (void *) = free ; -void *(*amd_realloc) (void *, size_t) = realloc ; -void *(*amd_calloc) (size_t, size_t) = calloc ; -#endif -#else -/* no memory manager defined at compile-time; you MUST define one at run-time */ -void *(*amd_malloc) (size_t) = NULL ; -void (*amd_free) (void *) = NULL ; -void *(*amd_realloc) (void *, size_t) = NULL ; -void *(*amd_calloc) (size_t, size_t) = NULL ; -#endif - -/* ========================================================================= */ -/* === Default AMD printf routine ========================================== */ -/* ========================================================================= */ - -/* The user can redefine this global pointer at run-time to change the printf - * routine used by AMD. If NULL, no printing occurs. - * - * If -DNPRINT is defined at compile-time, stdio.h is not included. Printing - * can then be enabled at run-time by setting amd_printf to a non-NULL function. - */ - -/*#ifndef NPRINT -#ifdef MATLAB_MEX_FILE -int (*amd_printf) (const char *, ...) = mexPrintf ; -#else -#include -int (*amd_printf) (const char *, ...) = printf ; -#endif -#else -int (*amd_printf) (const char *, ...) = NULL ; -#endif */ -#include -int (*amd_printf) (const char *, ...) = NULL ; diff --git a/src-i386/amd_global.o b/src-i386/amd_global.o deleted file mode 100644 index 747cf1277e62fbb10c5f53c9ead2ae0fc7140028..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 723 zcmZ{gO-sW-5QZnF6c2)5H&1&IsbJTlA!rdS_D}>pN{=z0C6YEFiP+}kkMak2@OP;* zvs>I0+{5IZXNPw-?}OC=Iz0>EkX6T$b-b)u|6c?Qo@M0MzA>_g`h$A(qC?Ij7<|g0 zsu<{^Hkt(B9p}!SHoL+0tBuHSw1HqU9uGw?b+6ohkyq)mAHDfyawhIx)2tT3N<5~E z$+SOp9Z{6|OB~jx!jaeVQXB2!x67}kKj^|X)_qnxSPxjqB+X(}biRK8W|lvXyjhk9 zekMc3&DI7KpjjY$ZxZyRdwEZumi&l34 diff --git a/src-i386/amd_info.c b/src-i386/amd_info.c deleted file mode 100644 index fec12a6..0000000 --- a/src-i386/amd_info.c +++ /dev/null @@ -1,119 +0,0 @@ -/* ========================================================================= */ -/* === AMD_info ============================================================ */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* User-callable. Prints the output statistics for AMD. See amd.h - * for details. If the Info array is not present, nothing is printed. - */ - -#include "amd_internal.h" - -#define PRI(format,x) { if (x >= 0) { PRINTF ((format, x)) ; }} - -GLOBAL void AMD_info -( - double Info [ ] -) -{ - double n, ndiv, nmultsubs_ldl, nmultsubs_lu, lnz, lnzd ; - - PRINTF (("\nAMD version %d.%d.%d, %s, results:\n", - AMD_MAIN_VERSION, AMD_SUB_VERSION, AMD_SUBSUB_VERSION, AMD_DATE)) ; - - if (!Info) - { - return ; - } - - n = Info [AMD_N] ; - ndiv = Info [AMD_NDIV] ; - nmultsubs_ldl = Info [AMD_NMULTSUBS_LDL] ; - nmultsubs_lu = Info [AMD_NMULTSUBS_LU] ; - lnz = Info [AMD_LNZ] ; - lnzd = (n >= 0 && lnz >= 0) ? (n + lnz) : (-1) ; - - /* AMD return status */ - PRINTF ((" status: ")) ; - if (Info [AMD_STATUS] == AMD_OK) - { - PRINTF (("OK\n")) ; - } - else if (Info [AMD_STATUS] == AMD_OUT_OF_MEMORY) - { - PRINTF (("out of memory\n")) ; - } - else if (Info [AMD_STATUS] == AMD_INVALID) - { - PRINTF (("invalid matrix\n")) ; - } - else if (Info [AMD_STATUS] == AMD_OK_BUT_JUMBLED) - { - PRINTF (("OK, but jumbled\n")) ; - } - else - { - PRINTF (("unknown\n")) ; - } - - /* statistics about the input matrix */ - PRI (" n, dimension of A: %.20g\n", n); - PRI (" nz, number of nonzeros in A: %.20g\n", - Info [AMD_NZ]) ; - PRI (" symmetry of A: %.4f\n", - Info [AMD_SYMMETRY]) ; - PRI (" number of nonzeros on diagonal: %.20g\n", - Info [AMD_NZDIAG]) ; - PRI (" nonzeros in pattern of A+A' (excl. diagonal): %.20g\n", - Info [AMD_NZ_A_PLUS_AT]) ; - PRI (" # dense rows/columns of A+A': %.20g\n", - Info [AMD_NDENSE]) ; - - /* statistics about AMD's behavior */ - PRI (" memory used, in bytes: %.20g\n", - Info [AMD_MEMORY]) ; - PRI (" # of memory compactions: %.20g\n", - Info [AMD_NCMPA]) ; - - /* statistics about the ordering quality */ - PRINTF (("\n" - " The following approximate statistics are for a subsequent\n" - " factorization of A(P,P) + A(P,P)'. They are slight upper\n" - " bounds if there are no dense rows/columns in A+A', and become\n" - " looser if dense rows/columns exist.\n\n")) ; - - PRI (" nonzeros in L (excluding diagonal): %.20g\n", - lnz) ; - PRI (" nonzeros in L (including diagonal): %.20g\n", - lnzd) ; - PRI (" # divide operations for LDL' or LU: %.20g\n", - ndiv) ; - PRI (" # multiply-subtract operations for LDL': %.20g\n", - nmultsubs_ldl) ; - PRI (" # multiply-subtract operations for LU: %.20g\n", - nmultsubs_lu) ; - PRI (" max nz. in any column of L (incl. diagonal): %.20g\n", - Info [AMD_DMAX]) ; - - /* total flop counts for various factorizations */ - - if (n >= 0 && ndiv >= 0 && nmultsubs_ldl >= 0 && nmultsubs_lu >= 0) - { - PRINTF (("\n" - " chol flop count for real A, sqrt counted as 1 flop: %.20g\n" - " LDL' flop count for real A: %.20g\n" - " LDL' flop count for complex A: %.20g\n" - " LU flop count for real A (with no pivoting): %.20g\n" - " LU flop count for complex A (with no pivoting): %.20g\n\n", - n + ndiv + 2*nmultsubs_ldl, - ndiv + 2*nmultsubs_ldl, - 9*ndiv + 8*nmultsubs_ldl, - ndiv + 2*nmultsubs_lu, - 9*ndiv + 8*nmultsubs_lu)) ; - } -} diff --git a/src-i386/amd_info.o b/src-i386/amd_info.o deleted file mode 100644 index 047a7a1e0393c3a51ac4857ba113e4b90836e4d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4311 zcmb7IZ)_W98GoHPZSYb%ld3VGVsF=UO_}35ZK$$nlj1q0*_J`HwX_mr$t6A~x1R6Z zyK@pp`%p+SmO&vBNPJ`4m+^&9fRKmtgFEAw?r8PhaqaEDviPj3pzCy}VCer*PtId@_~O zJT1g)B@VN6B{k)`t#o1R67ihv4hQxyb_Kuig1_No17W1K%vpN!SpQ?&l#k=;ldf$L z6aG%5w}IohN}|?L^n?~l7rb-deSYcIReWa(Gu5s=n8qS^V@*HiW zb5!W-8!MZMt_Tb7>!f=Tj)Re&QRpv0j|kDG$85KB=?LOMBKo8UwE}8`R*MEz z{AC{uldBZFNv3Y@AoB+KAxhzwVe)W@+_5HI_cquEiT&*``%;L#_wpR-rBu?AANY>& z|7xQy$~(mGko@eRV#B{T)u@nRFPllws)HDdk-tolZ+3x%ls z1V1hKkL={rG=kq9=GWSSs<0W{9^+IaMiSdDV*EkotN6pM`DP1#ke$8Lvqn;hwaak24Q*KD*_wdycPV#ahmm&{dM&07MxV~CGqs| z->+WvJJKY*SG`ev7g2ir_ikSEKM?W(|4%n>h?{A@U#YG`+XbJaH?Il|<6j$GQ~Og( zikZS()gI2vc_jIP%Z+|WZIi$B?&SAgoOnmgi~l$OW4g5ifAN9Re!3gI$C2u{P*DA2y5G@Dc}h;3Hvx+qf87eIiPt^`DY5bqju`uuPjN>4YCpNQ9DW4{RX^?~scI+HhloY@ zK(EB!ruaYE9zV;au0*$;aM2`{rIfBam(GA^Ouh)^#oJ{EZq*L<@T$lJM;A?A7 zmn?ofoy4#IIB*urJUhbYbjLMpiyzLV#J?mz>?XORyCu_ehhmIlxt`{g+#$}s^GuA{ zC6C*AUeF7+Q;spin$t`p#|xV07z;5_l6(r3mr8{xQ_sa%$+}?K^Hz)rS5}hejDl{7 zm~fLBq5!+E!>QxxnWp_>l3Q@CJCuZFTZ_75yWFsL@f5aq%Y}mOIc2i`e_~T+hf@Q2 zgl8nTh>hmu3~k1?G_!Rv;rQWI>6mN;x~)^cJ>1#B*q#&K-N+ zJvMEdrGn))9W?orXLyC}<+kyXtLKu`wW+eFV`q0=Vf#ZAtl?zZE)=zC57V=|ho*gu zqMVu4dEPcnd)}~SxK=DW_JV=o(Z!S*u4hcUTyu!zaE-gADObN((k)L|=Mm3#j75#2 zin@EpljBGEqdX&oBPkJ~EIhcTF*ED&Qn9Ez!g|UsSvd?#o_n)8LQojXZq-qmCu~WQ zYgUd=>8Ml}9!%SIF?#UOVjJ`Yq@Rk>s4yxuyw_uLcS|{{x;ZXthlwp$vsZMr!``r_ z%`aq+Suy5}oX%}DKy=I%T^$=4JHpZ3v9ot?d^r9gUcf`ZD4OLyY=h^Z_pMxQbMi&) zccu`wFK7$gT1?THYF3%cX{Sv`GpQLZZWY|C@>wBvYkJl;dET^(uq|1hDBjUElV_6L zz36xn)^l8QdA}eIH5^d;MVne$Z>yN7YRT|)*~*%37*k)k=YuC?eYSPpym#L4W@%`P z#+>b8nC{HbZq_RDJsn7EF}oPw3S-?FoHM7h*&%fM=CCqZL_vjzwPXjC`#t8htgw7=4Z$zz?q+ z?5FrvVwrg7kJ>Wvu2H8RcdC}Ly9`_FCNorqL*jozwKw(vd{as<7DeOVyCp|v|N%}jburY->3M(t@4Tb$$VH*nj zv%>zRun1mkWsGk?l5zVL_LRa5g)J!TXA1k3!roTchYI_L!rJf#D`OmjB;y`e*cpY* zDC~8G(c7}L{jHL&DCr!wQfhNb`bbF^u*Xunq$G}x)Bf*gsk~v*YYMIZ))||LXocK_ zVdd@Av_$2xw{a0+oVB5YJ6HHCoYd_Rnl1YFzO%w#;AjgtcXUlD{Pm3jTXRBR-c&_< zgucD+Ug9+iFe%$3Lw6H^JkdaDy4xe;INqJq=>~^RZR~j*MYXAtWf~WBv&`gw1@tT~ aF0zz9JCS#^g3czIjod|DbPUVOv;P5JKfDnD diff --git a/src-i386/amd_internal.h b/src-i386/amd_internal.h deleted file mode 100644 index 01a410a..0000000 --- a/src-i386/amd_internal.h +++ /dev/null @@ -1,351 +0,0 @@ -/* ========================================================================= */ -/* === amd_internal.h ====================================================== */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* This file is for internal use in AMD itself, and does not normally need to - * be included in user code (it is included in UMFPACK, however). All others - * should use amd.h instead. - * - * The following compile-time definitions affect how AMD is compiled. - * - * -DNPRINT - * - * Disable all printing. stdio.h will not be included. Printing can - * be re-enabled at run-time by setting the global pointer amd_printf - * to printf (or mexPrintf for a MATLAB mexFunction). - * - * -DNMALLOC - * - * No memory manager is defined at compile-time. You MUST define the - * function pointers amd_malloc, amd_free, amd_realloc, and - * amd_calloc at run-time for AMD to work properly. - */ - -/* ========================================================================= */ -/* === NDEBUG ============================================================== */ -/* ========================================================================= */ - -/* - * Turning on debugging takes some work (see below). If you do not edit this - * file, then debugging is always turned off, regardless of whether or not - * -DNDEBUG is specified in your compiler options. - * - * If AMD is being compiled as a mexFunction, then MATLAB_MEX_FILE is defined, - * and mxAssert is used instead of assert. If debugging is not enabled, no - * MATLAB include files or functions are used. Thus, the AMD library libamd.a - * can be safely used in either a stand-alone C program or in another - * mexFunction, without any change. - */ - -/* - AMD will be exceedingly slow when running in debug mode. The next three - lines ensure that debugging is turned off. -*/ - -#include /* required */ -#include /* for distribution functions etc. */ - -#ifndef NDEBUG -#define NDEBUG -#endif - -/* - To enable debugging, uncomment the following line: -#undef NDEBUG -*/ - -/* ------------------------------------------------------------------------- */ -/* ANSI include files */ -/* ------------------------------------------------------------------------- */ - -/* from stdlib.h: size_t, malloc, free, realloc, and calloc */ -#include - -#if !defined(NPRINT) || !defined(NDEBUG) -/* from stdio.h: printf. Not included if NPRINT is defined at compile time. - * fopen and fscanf are used when debugging. */ -#include -#endif - -/* from limits.h: INT_MAX and LONG_MAX */ -#include - -/* from math.h: sqrt */ -#include - -/* ------------------------------------------------------------------------- */ -/* MATLAB include files (only if being used in or via MATLAB) */ -/* ------------------------------------------------------------------------- */ - -#ifdef MATLAB_MEX_FILE -#include "matrix.h" -#include "mex.h" -#endif - -/* ------------------------------------------------------------------------- */ -/* basic definitions */ -/* ------------------------------------------------------------------------- */ - -#ifdef FLIP -#undef FLIP -#endif - -#ifdef MAX -#undef MAX -#endif - -#ifdef MIN -#undef MIN -#endif - -#ifdef EMPTY -#undef EMPTY -#endif - -#ifdef GLOBAL -#undef GLOBAL -#endif - -#ifdef PRIVATE -#undef PRIVATE -#endif - -/* FLIP is a "negation about -1", and is used to mark an integer i that is - * normally non-negative. FLIP (EMPTY) is EMPTY. FLIP of a number > EMPTY - * is negative, and FLIP of a number < EMTPY is positive. FLIP (FLIP (i)) = i - * for all integers i. UNFLIP (i) is >= EMPTY. */ -#define EMPTY (-1) -#define FLIP(i) (-(i)-2) -#define UNFLIP(i) ((i < EMPTY) ? FLIP (i) : (i)) - -/* for integer MAX/MIN, or for doubles when we don't care how NaN's behave: */ -#define MAX(a,b) (((a) > (b)) ? (a) : (b)) -#define MIN(a,b) (((a) < (b)) ? (a) : (b)) - -/* logical expression of p implies q: */ -#define IMPLIES(p,q) (!(p) || (q)) - -/* Note that the IBM RS 6000 xlc predefines TRUE and FALSE in . */ -/* The Compaq Alpha also predefines TRUE and FALSE. */ -#ifdef TRUE -#undef TRUE -#endif -#ifdef FALSE -#undef FALSE -#endif - -#define TRUE (1) -#define FALSE (0) -#define PRIVATE static -#define GLOBAL -#define EMPTY (-1) - -/* Note that Linux's gcc 2.96 defines NULL as ((void *) 0), but other */ -/* compilers (even gcc 2.95.2 on Solaris) define NULL as 0 or (0). We */ -/* need to use the ANSI standard value of 0. */ -#ifdef NULL -#undef NULL -#endif - -#define NULL 0 - -/* largest value of size_t */ -#ifndef SIZE_T_MAX -#ifdef SIZE_MAX -/* C99 only */ -#define SIZE_T_MAX SIZE_MAX -#else -#define SIZE_T_MAX ((size_t) (-1)) -#endif -#endif - -/* ------------------------------------------------------------------------- */ -/* integer type for AMD: int or SuiteSparse_long */ -/* ------------------------------------------------------------------------- */ - -#include "amd.h" - -#if defined (DLONG) || defined (ZLONG) - -#define Int SuiteSparse_long -#define ID SuiteSparse_long_id -#define Int_MAX SuiteSparse_long_max - -#define AMD_order amd_l_order -#define AMD_defaults amd_l_defaults -#define AMD_control amd_l_control -#define AMD_info amd_l_info -#define AMD_1 amd_l1 -#define AMD_2 amd_l2 -#define AMD_valid amd_l_valid -#define AMD_aat amd_l_aat -#define AMD_postorder amd_l_postorder -#define AMD_post_tree amd_l_post_tree -#define AMD_dump amd_l_dump -#define AMD_debug amd_l_debug -#define AMD_debug_init amd_l_debug_init -#define AMD_preprocess amd_l_preprocess - -#else - -#define Int int -#define ID "%d" -#define Int_MAX INT_MAX - -#define AMD_order amd_order -#define AMD_defaults amd_defaults -#define AMD_control amd_control -#define AMD_info amd_info -#define AMD_1 amd_1 -#define AMD_2 amd_2 -#define AMD_valid amd_valid -#define AMD_aat amd_aat -#define AMD_postorder amd_postorder -#define AMD_post_tree amd_post_tree -#define AMD_dump amd_dump -#define AMD_debug amd_debug -#define AMD_debug_init amd_debug_init -#define AMD_preprocess amd_preprocess - -#endif - -/* ========================================================================= */ -/* === PRINTF macro ======================================================== */ -/* ========================================================================= */ - -/* All output goes through the PRINTF macro. */ -#define PRINTF(params) { if (amd_printf != NULL) (void) amd_printf params ; } - -/* ------------------------------------------------------------------------- */ -/* AMD routine definitions (not user-callable) */ -/* ------------------------------------------------------------------------- */ - -GLOBAL size_t AMD_aat -( - Int n, - const Int Ap [ ], - const Int Ai [ ], - Int Len [ ], - Int Tp [ ], - double Info [ ] -) ; - -GLOBAL void AMD_1 -( - Int n, - const Int Ap [ ], - const Int Ai [ ], - Int P [ ], - Int Pinv [ ], - Int Len [ ], - Int slen, - Int S [ ], - double Control [ ], - double Info [ ] -) ; - -GLOBAL void AMD_postorder -( - Int nn, - Int Parent [ ], - Int Npiv [ ], - Int Fsize [ ], - Int Order [ ], - Int Child [ ], - Int Sibling [ ], - Int Stack [ ] -) ; - -GLOBAL Int AMD_post_tree -( - Int root, - Int k, - Int Child [ ], - const Int Sibling [ ], - Int Order [ ], - Int Stack [ ] -#ifndef NDEBUG - , Int nn -#endif -) ; - -GLOBAL void AMD_preprocess -( - Int n, - const Int Ap [ ], - const Int Ai [ ], - Int Rp [ ], - Int Ri [ ], - Int W [ ], - Int Flag [ ] -) ; - -/* ------------------------------------------------------------------------- */ -/* debugging definitions */ -/* ------------------------------------------------------------------------- */ - -#ifndef NDEBUG - -/* from assert.h: assert macro */ -#include - -#ifndef EXTERN -#define EXTERN extern -#endif - -EXTERN Int AMD_debug ; - -GLOBAL void AMD_debug_init ( char *s ) ; - -GLOBAL void AMD_dump -( - Int n, - Int Pe [ ], - Int Iw [ ], - Int Len [ ], - Int iwlen, - Int pfree, - Int Nv [ ], - Int Next [ ], - Int Last [ ], - Int Head [ ], - Int Elen [ ], - Int Degree [ ], - Int W [ ], - Int nel -) ; - -#ifdef ASSERT -#undef ASSERT -#endif - -/* Use mxAssert if AMD is compiled into a mexFunction */ -#ifdef MATLAB_MEX_FILE -#define ASSERT(expression) (mxAssert ((expression), "")) -#else -#define ASSERT(expression) (assert (expression)) -#endif - -#define AMD_DEBUG0(params) { PRINTF (params) ; } -#define AMD_DEBUG1(params) { if (AMD_debug >= 1) PRINTF (params) ; } -#define AMD_DEBUG2(params) { if (AMD_debug >= 2) PRINTF (params) ; } -#define AMD_DEBUG3(params) { if (AMD_debug >= 3) PRINTF (params) ; } -#define AMD_DEBUG4(params) { if (AMD_debug >= 4) PRINTF (params) ; } - -#else - -/* no debugging */ -#define ASSERT(expression) -#define AMD_DEBUG0(params) -#define AMD_DEBUG1(params) -#define AMD_DEBUG2(params) -#define AMD_DEBUG3(params) -#define AMD_DEBUG4(params) - -#endif diff --git a/src-i386/amd_order.c b/src-i386/amd_order.c deleted file mode 100644 index f00aff6..0000000 --- a/src-i386/amd_order.c +++ /dev/null @@ -1,206 +0,0 @@ -/* ========================================================================= */ -/* === AMD_order =========================================================== */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* User-callable AMD minimum degree ordering routine. See amd.h for - * documentation. - */ - -#include "amd_internal.h" -#include /* required */ -#include /* for distribution functions etc. */ - -/* ========================================================================= */ -/* === AMD_order =========================================================== */ -/* ========================================================================= */ - -GLOBAL Int AMD_order -( - Int n, - const Int Ap [ ], - const Int Ai [ ], - Int P [ ], - double Control [ ], - double Info [ ] -) -{ - Int *Len, *S, nz, i, *Pinv, info, status, *Rp, *Ri, *Cp, *Ci, ok ; - size_t nzaat, slen ; - double mem = 0 ; - - - - -#ifndef NDEBUG - AMD_debug_init ("amd") ; -#endif - - /* clear the Info array, if it exists */ - info = Info != (double *) NULL ; - if (info) - { - for (i = 0 ; i < AMD_INFO ; i++) - { - Info [i] = EMPTY ; - } - Info [AMD_N] = n ; - Info [AMD_STATUS] = AMD_OK ; - } - - /* make sure inputs exist and n is >= 0 */ - if (Ai == (Int *) NULL || Ap == (Int *) NULL || P == (Int *) NULL || n < 0) - { - if (info) Info [AMD_STATUS] = AMD_INVALID ; - return (AMD_INVALID) ; /* arguments are invalid */ - } - - - if (n == 0) - { - return (AMD_OK) ; /* n is 0 so there's nothing to do */ - } - - nz = Ap [n] ; - if (info) - { - Info [AMD_NZ] = nz ; - } - if (nz < 0) - { - if (info) Info [AMD_STATUS] = AMD_INVALID ; - return (AMD_INVALID) ; - } - - /* check if n or nz will cause size_t overflow */ - if (((size_t) n) >= SIZE_T_MAX / sizeof (Int) - || ((size_t) nz) >= SIZE_T_MAX / sizeof (Int)) - { - if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ; - return (AMD_OUT_OF_MEMORY) ; /* problem too large */ - } - - - - - /* check the input matrix: AMD_OK, AMD_INVALID, or AMD_OK_BUT_JUMBLED */ - status = AMD_valid (n, n, Ap, Ai) ; - if (status == AMD_INVALID) - { - if (info) Info [AMD_STATUS] = AMD_INVALID ; - return (AMD_INVALID) ; /* matrix is invalid */ - } - - /* allocate two size-n integer workspaces */ - Len = amd_malloc (n * sizeof (Int)) ; - Pinv = amd_malloc (n * sizeof (Int)) ; - mem += n ; - mem += n ; - if (!Len || !Pinv) - { - /* :: out of memory :: */ - amd_free (Len) ; - amd_free (Pinv) ; - if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ; - return (AMD_OUT_OF_MEMORY) ; - } - - if (status == AMD_OK_BUT_JUMBLED) - { - /* sort the input matrix and remove duplicate entries */ - AMD_DEBUG1 (("Matrix is jumbled\n")) ; - Rp = amd_malloc ((n+1) * sizeof (Int)) ; - Ri = amd_malloc (MAX (nz,1) * sizeof (Int)) ; - mem += (n+1) ; - mem += MAX (nz,1) ; - if (!Rp || !Ri) - { - /* :: out of memory :: */ - amd_free (Rp) ; - amd_free (Ri) ; - amd_free (Len) ; - amd_free (Pinv) ; - if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ; - return (AMD_OUT_OF_MEMORY) ; - } - /* use Len and Pinv as workspace to create R = A' */ - AMD_preprocess (n, Ap, Ai, Rp, Ri, Len, Pinv) ; - Cp = Rp ; - Ci = Ri ; - } - else - { - /* order the input matrix as-is. No need to compute R = A' first */ - Rp = NULL ; - Ri = NULL ; - Cp = (Int *) Ap ; - Ci = (Int *) Ai ; - } - - /* --------------------------------------------------------------------- */ - /* determine the symmetry and count off-diagonal nonzeros in A+A' */ - /* --------------------------------------------------------------------- */ - - nzaat = AMD_aat (n, Cp, Ci, Len, P, Info) ; - AMD_DEBUG1 (("nzaat: %g\n", (double) nzaat)) ; - ASSERT ((MAX (nz-n, 0) <= nzaat) && (nzaat <= 2 * (size_t) nz)) ; - - /* --------------------------------------------------------------------- */ - /* allocate workspace for matrix, elbow room, and 6 size-n vectors */ - /* --------------------------------------------------------------------- */ - - S = NULL ; - slen = nzaat ; /* space for matrix */ - ok = ((slen + nzaat/5) >= slen) ; /* check for size_t overflow */ - slen += nzaat/5 ; /* add elbow room */ - for (i = 0 ; ok && i < 7 ; i++) - { - ok = ((slen + n) > slen) ; /* check for size_t overflow */ - slen += n ; /* size-n elbow room, 6 size-n work */ - } - mem += slen ; - ok = ok && (slen < SIZE_T_MAX / sizeof (Int)) ; /* check for overflow */ - ok = ok && (slen < Int_MAX) ; /* S[i] for Int i must be OK */ - if (ok) - { - S = amd_malloc (slen * sizeof (Int)) ; - } - AMD_DEBUG1 (("slen %g\n", (double) slen)) ; - if (!S) - { - /* :: out of memory :: (or problem too large) */ - amd_free (Rp) ; - amd_free (Ri) ; - amd_free (Len) ; - amd_free (Pinv) ; - if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ; - return (AMD_OUT_OF_MEMORY) ; - } - if (info) - { - /* memory usage, in bytes. */ - Info [AMD_MEMORY] = mem * sizeof (Int) ; - } - - /* --------------------------------------------------------------------- */ - /* order the matrix */ - /* --------------------------------------------------------------------- */ - AMD_1 (n, Cp, Ci, P, Pinv, Len, slen, S, Control, Info) ; - - /* --------------------------------------------------------------------- */ - /* free the workspace */ - /* --------------------------------------------------------------------- */ - - amd_free (Rp) ; - amd_free (Ri) ; - amd_free (Len) ; - amd_free (Pinv) ; - amd_free (S) ; - if (info) Info [AMD_STATUS] = status ; - return (status) ; /* successful ordering */ -} diff --git a/src-i386/amd_order.o b/src-i386/amd_order.o deleted file mode 100644 index 0f12fa402760f58e294268e46e8070b250f2aa60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2509 zcmbVOZERCj7(TbXV4btKNHHeE*u)#fWGh|PEFG!3$|Czwqaq(Bn~bt`TIpC*ZlNqy z!QLyoX_lB6^$&^uF&aN2F=)`JX@xNsAtKSR2D=cVVPk^$2av$7&wFq0p<}}zo}}kI z=RNQD`<{Cm74Bd(j$*mjM55qV;#tMS)^tK-tWjWW-(qWjKNcT*X0yL9ro?La7J}_8 zQ1oxvzI~yyTH0>#tqj&u7REjn*z8ZwHCzwY>x<^{!*2V^=C(P+Fm|qL4EBM^*AlR| z=K4J54)A?%rG_DNMttixZg?*LXLn(rtb(GQmfkK&>L-BZsgbwd$Er`1&s045qO0vh z=1OJabcdWO z3SKoFG%#kG$sf&7WXlOql1O{{3$;@8;^2oOjlbM5%H}Z$OyEgT_a7Z(4)8Fj=Z} z%k7f79?Wnkr+3RBnc>JU{uXi(m61p(){1+bR8;^lm9%6x8v|IV(^4QGHt4TR}u9ulg(25%D_; z(DXs9MvD+fO-qvc1+k7x>LskGY-d50cLO5U&fhxZ_KCY)*j2hh@Ye@_bKtoT=EI0h z28{}k)syma#OcME=XUXdFMwFB6k`+Q8$D>(AZ!D>D&Ql-0khc}rvJEM7?p_`M`Z#B z0YntyNKo}XL+M~olqEio;rR_l3snk^Bq}kF@s5M)8vIJx|Gu;65 z27;3sLop3cUx4@JshQz7(M>dpjO}h;vwHO^--<+QsI@6IxIK|=>f0Gh_c!{U$Rv`A zZ_6&L)QjRUE(?8cm*Ypb z{3n_sZkOhWxa;>iBW}+dV#MvuFIw$RIsUG5dn1S3p2!h*ePqn-ij2C&$X%=jI_`m( zm#qb=16s^_fjlPK#?eRo^mm}8ro^+j_ZHtCAWQZz5c%q5KLaf>wM=q!j-yK){ln3N zPFo_tQ5#23a`YaMW#dy$`cnD8vT(dIr;d@wC6!BAfGyDi$E?K(=ljwQoNiI|Zs7z4$jr?YoZzf#>F# zjcVU~1hX(t%{xvXZKpsl`TRjWMuVPir?ASzw@!~$3G`$;1$x2fJJneuM1C{2ZXRV5 zryxJ9hmshJDHf4anr$Yc&`8(>MwDIHnR)bQwj~o= /* required */ -#include /* for distribution functions etc. */ -GLOBAL void AMD_order_wrapper -( - Int *n, - const Int *Ap, - const Int *Ai, - Int *P, - double *Control, - double *Info -) { -amd_defaults (Control) ; -amd_order(*n,Ap,Ai,P,Control,Info); -return; -} diff --git a/src-i386/amd_order_wrapper.h b/src-i386/amd_order_wrapper.h deleted file mode 100644 index 8fc8d5e..0000000 --- a/src-i386/amd_order_wrapper.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef _AMD_ORDER_WRAPPER_H_ -#define _AMD_ORDER_WRAPPER_H_ -#include -#define Int int - -void AMD_order_wrapper - ( - Int *n, - const Int *Ap, - const Int *Ai, - Int *P, - double *Control, - double *Info - ); - -#endif diff --git a/src-i386/amd_order_wrapper.o b/src-i386/amd_order_wrapper.o deleted file mode 100644 index 6bdeb5499e415d11a50e0d062f0ec236bb7306f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 zcmah|OKTHR6h1dIEm?$XkXaPWVitE%F_}afLR(zSm_S`5STq`Z)XB6nsiV^-OeVAq z6@=hpm`#3yKSl8MR}@^jR?oRfB+&*BobR5;cg}rqZk??H$>kJ4R$3}EBJVVk_5|9v zs0`o-DhX0ShuyZ}I*}tI%fW=wdt<-fU(T3hULvnp{vV6>Ewzi+w-$&u&~v9}n3xpHkHzC&J`E`UNM#JktJe|PjfpF9@3Nlny~rf4RSFq3mpO9F8#&WX4ta&c3v zeWfzw@n12pprqj~suL-$V+-b>oyLgWQ{@@~f9IPjl)!5J7K{RA-_ y4#DuA+MUoj^1wNA?QZCLp?wlMy`C2u2Vh%`+G6nHTAPYpuj34Ys1MSUt>8Coi-u4D diff --git a/src-i386/amd_post_tree.c b/src-i386/amd_post_tree.c deleted file mode 100644 index 7ab1aa5..0000000 --- a/src-i386/amd_post_tree.c +++ /dev/null @@ -1,120 +0,0 @@ -/* ========================================================================= */ -/* === AMD_post_tree ======================================================= */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* Post-ordering of a supernodal elimination tree. */ - -#include "amd_internal.h" - -GLOBAL Int AMD_post_tree -( - Int root, /* root of the tree */ - Int k, /* start numbering at k */ - Int Child [ ], /* input argument of size nn, undefined on - * output. Child [i] is the head of a link - * list of all nodes that are children of node - * i in the tree. */ - const Int Sibling [ ], /* input argument of size nn, not modified. - * If f is a node in the link list of the - * children of node i, then Sibling [f] is the - * next child of node i. - */ - Int Order [ ], /* output order, of size nn. Order [i] = k - * if node i is the kth node of the reordered - * tree. */ - Int Stack [ ] /* workspace of size nn */ -#ifndef NDEBUG - , Int nn /* nodes are in the range 0..nn-1. */ -#endif -) -{ - Int f, head, h, i ; - -#if 0 - /* --------------------------------------------------------------------- */ - /* recursive version (Stack [ ] is not used): */ - /* --------------------------------------------------------------------- */ - - /* this is simple, but can caouse stack overflow if nn is large */ - i = root ; - for (f = Child [i] ; f != EMPTY ; f = Sibling [f]) - { - k = AMD_post_tree (f, k, Child, Sibling, Order, Stack, nn) ; - } - Order [i] = k++ ; - return (k) ; -#endif - - /* --------------------------------------------------------------------- */ - /* non-recursive version, using an explicit stack */ - /* --------------------------------------------------------------------- */ - - /* push root on the stack */ - head = 0 ; - Stack [0] = root ; - - while (head >= 0) - { - /* get head of stack */ - ASSERT (head < nn) ; - i = Stack [head] ; - AMD_DEBUG1 (("head of stack "ID" \n", i)) ; - ASSERT (i >= 0 && i < nn) ; - - if (Child [i] != EMPTY) - { - /* the children of i are not yet ordered */ - /* push each child onto the stack in reverse order */ - /* so that small ones at the head of the list get popped first */ - /* and the biggest one at the end of the list gets popped last */ - for (f = Child [i] ; f != EMPTY ; f = Sibling [f]) - { - head++ ; - ASSERT (head < nn) ; - ASSERT (f >= 0 && f < nn) ; - } - h = head ; - ASSERT (head < nn) ; - for (f = Child [i] ; f != EMPTY ; f = Sibling [f]) - { - ASSERT (h > 0) ; - Stack [h--] = f ; - AMD_DEBUG1 (("push "ID" on stack\n", f)) ; - ASSERT (f >= 0 && f < nn) ; - } - ASSERT (Stack [h] == i) ; - - /* delete child list so that i gets ordered next time we see it */ - Child [i] = EMPTY ; - } - else - { - /* the children of i (if there were any) are already ordered */ - /* remove i from the stack and order it. Front i is kth front */ - head-- ; - AMD_DEBUG1 (("pop "ID" order "ID"\n", i, k)) ; - Order [i] = k++ ; - ASSERT (k <= nn) ; - } - -#ifndef NDEBUG - AMD_DEBUG1 (("\nStack:")) ; - for (h = head ; h >= 0 ; h--) - { - Int j = Stack [h] ; - AMD_DEBUG1 ((" "ID, j)) ; - ASSERT (j >= 0 && j < nn) ; - } - AMD_DEBUG1 (("\n\n")) ; - ASSERT (head < nn) ; -#endif - - } - return (k) ; -} diff --git a/src-i386/amd_post_tree.o b/src-i386/amd_post_tree.o deleted file mode 100644 index 250f9f9e7541b2e3577e5191a94abf114f1c2ff2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 902 zcmeZaWMcpUJ0=DOJ}`@gQLiMmq6Ex_5DS153nP*Mkg32Bkf4{6Sdxe;jKOnYFgT!> zR9uW9fhN!ZRHtu(CWwWrz+jM|Z)k}kV*}(ZL31C_UI%?+0~B>3K;8qOIuoE@K>(x$ zq%Jhv@MKtU^Bb1#8Wo*x7Zr)_92JG`7!{RH_6fZuY7E^h{kkFZ3?#m63=00r*O&Q=Nm2NtFt|nR)Kvy5VLf3I#>^S*gh-nhGX*mU_lOw~2rp z2n38(K@5yF9E{RDEG!*Bk6Qr6WPq3jh-UyXgCieDE0ZH1Pdl?SpFkUnBcDh!t23Vj zQx~6z<6%Al$76gvj>q{p9FOv`C;*j%^ocO&rDf)%0$CvN?>_@WI%8sPN<7e!CGjOi zsi}I&5Ge)?D9y;Az`z6wb~J#T;y}{Oj9@pRs6tL{pa^8fW)4zHW5%HdWT-ia00LGZ zW@fYkv(X7Br~oK`Ff)SE4yuJdKoPLJ^-A+{GP6^2DjD>OKsiFCs;Y`XFEt}Rttc@! Ml_4G_NU*B`04ngDfdBvi diff --git a/src-i386/amd_postorder.c b/src-i386/amd_postorder.c deleted file mode 100644 index f262bf7..0000000 --- a/src-i386/amd_postorder.c +++ /dev/null @@ -1,206 +0,0 @@ -/* ========================================================================= */ -/* === AMD_postorder ======================================================= */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* Perform a postordering (via depth-first search) of an assembly tree. */ - -#include "amd_internal.h" - -GLOBAL void AMD_postorder -( - /* inputs, not modified on output: */ - Int nn, /* nodes are in the range 0..nn-1 */ - Int Parent [ ], /* Parent [j] is the parent of j, or EMPTY if root */ - Int Nv [ ], /* Nv [j] > 0 number of pivots represented by node j, - * or zero if j is not a node. */ - Int Fsize [ ], /* Fsize [j]: size of node j */ - - /* output, not defined on input: */ - Int Order [ ], /* output post-order */ - - /* workspaces of size nn: */ - Int Child [ ], - Int Sibling [ ], - Int Stack [ ] -) -{ - Int i, j, k, parent, frsize, f, fprev, maxfrsize, bigfprev, bigf, fnext ; - - for (j = 0 ; j < nn ; j++) - { - Child [j] = EMPTY ; - Sibling [j] = EMPTY ; - } - - /* --------------------------------------------------------------------- */ - /* place the children in link lists - bigger elements tend to be last */ - /* --------------------------------------------------------------------- */ - - for (j = nn-1 ; j >= 0 ; j--) - { - if (Nv [j] > 0) - { - /* this is an element */ - parent = Parent [j] ; - if (parent != EMPTY) - { - /* place the element in link list of the children its parent */ - /* bigger elements will tend to be at the end of the list */ - Sibling [j] = Child [parent] ; - Child [parent] = j ; - } - } - } - -#ifndef NDEBUG - { - Int nels, ff, nchild ; - AMD_DEBUG1 (("\n\n================================ AMD_postorder:\n")); - nels = 0 ; - for (j = 0 ; j < nn ; j++) - { - if (Nv [j] > 0) - { - AMD_DEBUG1 (( ""ID" : nels "ID" npiv "ID" size "ID - " parent "ID" maxfr "ID"\n", j, nels, - Nv [j], Fsize [j], Parent [j], Fsize [j])) ; - /* this is an element */ - /* dump the link list of children */ - nchild = 0 ; - AMD_DEBUG1 ((" Children: ")) ; - for (ff = Child [j] ; ff != EMPTY ; ff = Sibling [ff]) - { - AMD_DEBUG1 ((ID" ", ff)) ; - ASSERT (Parent [ff] == j) ; - nchild++ ; - ASSERT (nchild < nn) ; - } - AMD_DEBUG1 (("\n")) ; - parent = Parent [j] ; - if (parent != EMPTY) - { - ASSERT (Nv [parent] > 0) ; - } - nels++ ; - } - } - } - AMD_DEBUG1 (("\n\nGo through the children of each node, and put\n" - "the biggest child last in each list:\n")) ; -#endif - - /* --------------------------------------------------------------------- */ - /* place the largest child last in the list of children for each node */ - /* --------------------------------------------------------------------- */ - - for (i = 0 ; i < nn ; i++) - { - if (Nv [i] > 0 && Child [i] != EMPTY) - { - -#ifndef NDEBUG - Int nchild ; - AMD_DEBUG1 (("Before partial sort, element "ID"\n", i)) ; - nchild = 0 ; - for (f = Child [i] ; f != EMPTY ; f = Sibling [f]) - { - ASSERT (f >= 0 && f < nn) ; - AMD_DEBUG1 ((" f: "ID" size: "ID"\n", f, Fsize [f])) ; - nchild++ ; - ASSERT (nchild <= nn) ; - } -#endif - - /* find the biggest element in the child list */ - fprev = EMPTY ; - maxfrsize = EMPTY ; - bigfprev = EMPTY ; - bigf = EMPTY ; - for (f = Child [i] ; f != EMPTY ; f = Sibling [f]) - { - ASSERT (f >= 0 && f < nn) ; - frsize = Fsize [f] ; - if (frsize >= maxfrsize) - { - /* this is the biggest seen so far */ - maxfrsize = frsize ; - bigfprev = fprev ; - bigf = f ; - } - fprev = f ; - } - ASSERT (bigf != EMPTY) ; - - fnext = Sibling [bigf] ; - - AMD_DEBUG1 (("bigf "ID" maxfrsize "ID" bigfprev "ID" fnext "ID - " fprev " ID"\n", bigf, maxfrsize, bigfprev, fnext, fprev)) ; - - if (fnext != EMPTY) - { - /* if fnext is EMPTY then bigf is already at the end of list */ - - if (bigfprev == EMPTY) - { - /* delete bigf from the element of the list */ - Child [i] = fnext ; - } - else - { - /* delete bigf from the middle of the list */ - Sibling [bigfprev] = fnext ; - } - - /* put bigf at the end of the list */ - Sibling [bigf] = EMPTY ; - ASSERT (Child [i] != EMPTY) ; - ASSERT (fprev != bigf) ; - ASSERT (fprev != EMPTY) ; - Sibling [fprev] = bigf ; - } - -#ifndef NDEBUG - AMD_DEBUG1 (("After partial sort, element "ID"\n", i)) ; - for (f = Child [i] ; f != EMPTY ; f = Sibling [f]) - { - ASSERT (f >= 0 && f < nn) ; - AMD_DEBUG1 ((" "ID" "ID"\n", f, Fsize [f])) ; - ASSERT (Nv [f] > 0) ; - nchild-- ; - } - ASSERT (nchild == 0) ; -#endif - - } - } - - /* --------------------------------------------------------------------- */ - /* postorder the assembly tree */ - /* --------------------------------------------------------------------- */ - - for (i = 0 ; i < nn ; i++) - { - Order [i] = EMPTY ; - } - - k = 0 ; - - for (i = 0 ; i < nn ; i++) - { - if (Parent [i] == EMPTY && Nv [i] > 0) - { - AMD_DEBUG1 (("Root of assembly tree "ID"\n", i)) ; - k = AMD_post_tree (i, k, Child, Sibling, Order, Stack -#ifndef NDEBUG - , nn -#endif - ) ; - } - } -} diff --git a/src-i386/amd_postorder.o b/src-i386/amd_postorder.o deleted file mode 100644 index 48c064e0ed7b358d3769a294a7b1d2b39b9818b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1313 zcmah}PiWI%6#vpjDQ+YMa}XSuL(mCZwz09<(Sz9p5n3EN-N0#E*UVNsCta%BDAN%; z7eeb!;z2!n7d-e6txT-_Ms~lrI&KxjAE*zQlh1F=ph&V4Bv%Rb}ubvzq-xyK0Tmr78<9{g1 z+Zt|Z^VIzReRf(I%H+k| zec0@N+yhFqEpHDgu>wC+0u^|Zgqi1jZ&F2aF;}>W01*Aa4%&tiwG&FrLLBRR_R%gX z!1m8%O4D0y$uxhJjJm9J&F;3+8D_cQJNXg#a^5duPD9?pKBdWVgS38U&ocxav>RqK zOJeR4g`*t&tofs47!RqK$HX2GgR4Ta=(1kg0c3dRTNHysiekYa27jW&m>66|b&cq* zG3%ePMe}DVwP>wc@2v&26U*|~Z7FJ3)? zM-Nfr(+BX>^>x#L!sLGjA?%zUAoyX8I;8 zrM}wIt<2l$BI-+64GL`V=dFH4!b=#^3mJo~hm1mcoS?qti%;gWcXv_(^O^tHiO}(d zzjtR~0Sr^hedP_NyQU}d~#9_#?S5_XddY7 zkk2K@PV2+QZn;DCsqKg@Q34P*b%=3k54XLZ=jYHleS-}+JPz#((*#e(r3v*{+?wE> zdwGNfSbhf&_qX*!6}}^)RA~Xheou9 z`JUn;qtOtGH^!1tJ*f_tO{}pZIVLj~Rk4n$H=E3Ej%ux4o$9S7i~C=3sy3RI>0cO1 z-9-$v3CGQKJNkOoQ+c5Okej0&txXsj)knwmzyBlj<=_JqFZv_6*fHFk-qh6DMEs1N hm}F{_{!Yr&)D%+W^Dh#gp8!Fvp*IbI2Zr` diff --git a/src-i386/amd_preprocess.c b/src-i386/amd_preprocess.c deleted file mode 100644 index 1eb2d1f..0000000 --- a/src-i386/amd_preprocess.c +++ /dev/null @@ -1,118 +0,0 @@ -/* ========================================================================= */ -/* === AMD_preprocess ====================================================== */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* Sorts, removes duplicate entries, and transposes from the nonzero pattern of - * a column-form matrix A, to obtain the matrix R. The input matrix can have - * duplicate entries and/or unsorted columns (AMD_valid (n,Ap,Ai) must not be - * AMD_INVALID). - * - * This input condition is NOT checked. This routine is not user-callable. - */ - -#include "amd_internal.h" - -/* ========================================================================= */ -/* === AMD_preprocess ====================================================== */ -/* ========================================================================= */ - -/* AMD_preprocess does not check its input for errors or allocate workspace. - * On input, the condition (AMD_valid (n,n,Ap,Ai) != AMD_INVALID) must hold. - */ - -GLOBAL void AMD_preprocess -( - Int n, /* input matrix: A is n-by-n */ - const Int Ap [ ], /* size n+1 */ - const Int Ai [ ], /* size nz = Ap [n] */ - - /* output matrix R: */ - Int Rp [ ], /* size n+1 */ - Int Ri [ ], /* size nz (or less, if duplicates present) */ - - Int W [ ], /* workspace of size n */ - Int Flag [ ] /* workspace of size n */ -) -{ - - /* --------------------------------------------------------------------- */ - /* local variables */ - /* --------------------------------------------------------------------- */ - - Int i, j, p, p2 ; - - ASSERT (AMD_valid (n, n, Ap, Ai) != AMD_INVALID) ; - - /* --------------------------------------------------------------------- */ - /* count the entries in each row of A (excluding duplicates) */ - /* --------------------------------------------------------------------- */ - - for (i = 0 ; i < n ; i++) - { - W [i] = 0 ; /* # of nonzeros in row i (excl duplicates) */ - Flag [i] = EMPTY ; /* Flag [i] = j if i appears in column j */ - } - for (j = 0 ; j < n ; j++) - { - p2 = Ap [j+1] ; - for (p = Ap [j] ; p < p2 ; p++) - { - i = Ai [p] ; - if (Flag [i] != j) - { - /* row index i has not yet appeared in column j */ - W [i]++ ; /* one more entry in row i */ - Flag [i] = j ; /* flag row index i as appearing in col j*/ - } - } - } - - /* --------------------------------------------------------------------- */ - /* compute the row pointers for R */ - /* --------------------------------------------------------------------- */ - - Rp [0] = 0 ; - for (i = 0 ; i < n ; i++) - { - Rp [i+1] = Rp [i] + W [i] ; - } - for (i = 0 ; i < n ; i++) - { - W [i] = Rp [i] ; - Flag [i] = EMPTY ; - } - - /* --------------------------------------------------------------------- */ - /* construct the row form matrix R */ - /* --------------------------------------------------------------------- */ - - /* R = row form of pattern of A */ - for (j = 0 ; j < n ; j++) - { - p2 = Ap [j+1] ; - for (p = Ap [j] ; p < p2 ; p++) - { - i = Ai [p] ; - if (Flag [i] != j) - { - /* row index i has not yet appeared in column j */ - Ri [W [i]++] = j ; /* put col j in row i */ - Flag [i] = j ; /* flag row index i as appearing in col j*/ - } - } - } - -#ifndef NDEBUG - ASSERT (AMD_valid (n, n, Rp, Ri) == AMD_OK) ; - for (j = 0 ; j < n ; j++) - { - ASSERT (W [j] == Rp [j+1]) ; - } -#endif -} diff --git a/src-i386/amd_preprocess.o b/src-i386/amd_preprocess.o deleted file mode 100644 index 3ca7cbe50c3d61307eb71b8c1b9ca31d5c9d0139..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1103 zcmZuwL2nX46rN#+LM&N(*aMA?S(8nJ2`rEj(rrC-g`@`|A&T}ON+~RgQc7TnEoq9$ zhPImx4ac7R3wrQs0-_Rc#*>K`Paf2Zo*V0%g(_S3C2w}-d*8hG&CI?8oWLfmx=qLeJq2DcVu5TIJPNG`!;&R- z4OVG~1wv4FCAbi>fMr;9fp;?I(j!sc?X^3%v>(KX3tpov_>Em5)b3q8x(sn6EqKGd zVZ3c78j^!kFs+BB4~=i(&z+a^6o-v-hAQwz;+PoZSn7AU{Z8a)@5))+(f{J;cwEw~ z>eAv)g!NhNHIaTbzG?%!oDsZ@SCB$55>V@-kr9NUSuNZf?`P6&q^C7P>-JkeDUY)L z#tlx>fij`4-})YYuftio9d-VnzRV%$J2cfjlLmT3*z=olQ{S9RnpQa`4i^yWRIu&? zO+MZ8LZ1e)%bd{or1h}`wOh}%H{|a9?7ab1J<@uHbg8YzVoSWQ6kUu4s$2EacA)Si zS1bDY>y1)bc7Fdf$_-bwIk&;)h@)1!I7vR{Od31zu^CrT(ZhXl@$RRvL z3h+5_0)B%&oXoo04w>~FFfu!{Ph^(UoH5qR1n>oxlLzdK{Eqd=L)I<7Wr;kU{2xU8 zI3I_^VyUdairVi}gdX7BW+7XxDWET})azn?6!VQf2*X|nRdLQHJBNlDY-+WzCcB3I zh>TsHiH?EBwB^vGi*x{Uf-`u@oSz?JV}SNKgJ};~3nl?Eb&HKkx%5~m?;x>8J6mWr Un@Ch1W{b7lrh>B8E3qg20rw@;S^xk5 diff --git a/src-i386/amd_valid.c b/src-i386/amd_valid.c deleted file mode 100644 index 4f7b0e0..0000000 --- a/src-i386/amd_valid.c +++ /dev/null @@ -1,92 +0,0 @@ -/* ========================================================================= */ -/* === AMD_valid =========================================================== */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* Check if a column-form matrix is valid or not. The matrix A is - * n_row-by-n_col. The row indices of entries in column j are in - * Ai [Ap [j] ... Ap [j+1]-1]. Required conditions are: - * - * n_row >= 0 - * n_col >= 0 - * nz = Ap [n_col] >= 0 number of entries in the matrix - * Ap [0] == 0 - * Ap [j] <= Ap [j+1] for all j in the range 0 to n_col. - * Ai [0 ... nz-1] must be in the range 0 to n_row-1. - * - * If any of the above conditions hold, AMD_INVALID is returned. If the - * following condition holds, AMD_OK_BUT_JUMBLED is returned (a warning, - * not an error): - * - * row indices in Ai [Ap [j] ... Ap [j+1]-1] are not sorted in ascending - * order, and/or duplicate entries exist. - * - * Otherwise, AMD_OK is returned. - * - * In v1.2 and earlier, this function returned TRUE if the matrix was valid - * (now returns AMD_OK), or FALSE otherwise (now returns AMD_INVALID or - * AMD_OK_BUT_JUMBLED). - */ - -#include "amd_internal.h" - -GLOBAL Int AMD_valid -( - /* inputs, not modified on output: */ - Int n_row, /* A is n_row-by-n_col */ - Int n_col, - const Int Ap [ ], /* column pointers of A, of size n_col+1 */ - const Int Ai [ ] /* row indices of A, of size nz = Ap [n_col] */ -) -{ - Int nz, j, p1, p2, ilast, i, p, result = AMD_OK ; - - if (n_row < 0 || n_col < 0 || Ap == NULL || Ai == NULL) - { - return (AMD_INVALID) ; - } - nz = Ap [n_col] ; - if (Ap [0] != 0 || nz < 0) - { - /* column pointers must start at Ap [0] = 0, and Ap [n] must be >= 0 */ - AMD_DEBUG0 (("column 0 pointer bad or nz < 0\n")) ; - return (AMD_INVALID) ; - } - for (j = 0 ; j < n_col ; j++) - { - p1 = Ap [j] ; - p2 = Ap [j+1] ; - AMD_DEBUG2 (("\nColumn: "ID" p1: "ID" p2: "ID"\n", j, p1, p2)) ; - if (p1 > p2) - { - /* column pointers must be ascending */ - AMD_DEBUG0 (("column "ID" pointer bad\n", j)) ; - return (AMD_INVALID) ; - } - ilast = EMPTY ; - for (p = p1 ; p < p2 ; p++) - { - i = Ai [p] ; - AMD_DEBUG3 (("row: "ID"\n", i)) ; - if (i < 0 || i >= n_row) - { - /* row index out of range */ - AMD_DEBUG0 (("index out of range, col "ID" row "ID"\n", j, i)); - return (AMD_INVALID) ; - } - if (i <= ilast) - { - /* row index unsorted, or duplicate entry present */ - AMD_DEBUG1 (("index unsorted/dupl col "ID" row "ID"\n", j, i)); - result = AMD_OK_BUT_JUMBLED ; - } - ilast = i ; - } - } - return (result) ; -} diff --git a/src-i386/amd_valid.o b/src-i386/amd_valid.o deleted file mode 100644 index 1fec663410e3196019b6240069bc9085b77f8d52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 982 zcmeZaWMcqp7DgliAX9-MAVDuBu_O^y7=!1)U~oV$ zskj(J0!^R+s7~JmO%MxLfx#d_-_R08#sO#ZAf}7uPbi1g?bmypOv>xbWQQ_~{4U`26DI9zu-*SMzbq$CcqoUG!o4;iNklp&0 zzhwqQi3(6$p_^w$w?OMj{*Gpl`W{mg+501KJ9dWKronS8LUI@Zd}NmXoE1od+$??EpEL-}grI zAx6tzr8k>_CNctD$YKq2Wr-B^0nKYZ!Vw)8AA8vFcIS=P zpC&+oyR);Ef<~s9g_&+aesN}nZc2G#QJRi|Q)y;Si9%APf^TM?d$?}6nTbL{QGQlx za*3vbiJqmNG0=JukRO16u_}mxv4(?Dnump@1L!VL9LNAM$d508n8A^cqm{{#kEfm4 zkx!tF#gR{>nbnz3hUpp?pNQjOJ^{yLd_0cF`8XVp^07E_GbjMHfb@zm=%r=mqykwW z@b5nZLpoz(Zc2PvVoqj?UNS@&Olm;cj6l6ippZcW$f+14&CCdP7m6z66bwof%-GC9 zO1;cD)PM{Hg$@X?0x>hA6_|}q*g*wAd5)P8lpawn^Z<&0-K|%emy?;Dnp4T3R|Lvs ZDpgfg40@><@o7bgxv32C@F2l14*>RfxSs$3 diff --git a/src-i386/distR.cpp b/src-i386/distR.cpp deleted file mode 100644 index 601436a..0000000 --- a/src-i386/distR.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/*FRK: An R Software package for spatial and spatio-temporal prediction - with large datasets. - Copyright (c) 2017 University of Wollongong - Author: Andrew Zammit-Mangion, azm (at) uow.edu.au - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. */ - -#include -using namespace Rcpp; - -// [[Rcpp::export]] -NumericMatrix distR_C(NumericMatrix x,NumericMatrix y) { - int nrow_x = x.nrow(), ncol_x = x.ncol(); - int nrow_y = y.nrow(); - NumericMatrix out(nrow_x,nrow_y); - - for (int i = 0; i < nrow_x; i++) { - for (int j = 0; j < nrow_y; j++) { - for (int k = 0; k < ncol_x; k++) { - out(i,j) = out(i,j) + pow(x(i,k) - y(j,k),2); - } - out(i,j) = sqrt(out(i,j)); - } - } - return out; -} diff --git a/src-i386/distR.h b/src-i386/distR.h deleted file mode 100644 index 2a18952..0000000 --- a/src-i386/distR.h +++ /dev/null @@ -1,25 +0,0 @@ -/*FRK: An R Software package for spatial and spatio-temporal prediction - with large datasets. - Copyright (c) 2017 University of Wollongong -Author: Andrew Zammit-Mangion, azm (at) uow.edu.au - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. */ - -#ifndef _DISTR_H_ -#define _DISTR_H_ -#include -#include -#include - -SEXP _FRK_distR_C(SEXP xSEXP, SEXP ySEXP); -SEXP overhead_cpp(SEXP a, SEXP b); - -#endif diff --git a/src-i386/distR.o b/src-i386/distR.o deleted file mode 100644 index faa95774b2bf1ca7e91e9d089be2ccb8e36478e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24286 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 diff --git a/src-i386/sparseinvR.c b/src-i386/sparseinvR.c deleted file mode 100644 index 54188bb..0000000 --- a/src-i386/sparseinvR.c +++ /dev/null @@ -1,180 +0,0 @@ -#include "sparseinvR.h" -#include /* required */ -#include /* for distribution functions etc. */ - -/* sparsinv: computes the sparse inverse subset, using Takahashi's equations. - - On input, the pattern of Z must be equal to the symbolic Cholesky - factorization of A+A', where A=(L+I)*(U+I). The pattern of L+U must be a - subset of Z. Z must have zero-free diagonal. These conditions are - difficult to check, so they are assumed to hold. Results will be completely - wrong if the conditions do not hold. - - This function performs the same amount of work as the initial LU - factorization, assuming that the pattern of P*A*Q is symmetric. For large - matrices, this function can take a lot more time than LU in MATLAB, even if - P*A*Q is symmetric. This is because LU is a multifrontal method, whereas - this sparseinv function is based on gather/scatter operations. - - The basic integer type is an Int, or ptrdiff_t, which is 32 bits on a 32 - bits and 64 bits on a 64 bit system. The function returns the flop count as - an Int. This will not overflow on a 64 bit system but might on a 32 bit. - The total work is flops + O(n + nnz(Z)). Since flops > n and flops > nnz(Z), - this is O(flops). - - Copyright 2011, Timothy A. Davis, University of Florida -*/ - -Int sparseinv /* returns -1 on error, or flop count if OK */ -( - /* inputs, not modified on output: */ - Int *n, /* L, U, D, and Z are n-by-n */ - - Int *Lp, /* L is sparse, lower triangular, stored by column */ - Int *Li, /* the row indices of L must be sorted */ - double *Lx, /* diagonal of L, if present, is ignored */ - - double *d, /* diagonal of D, of size n */ - - Int *Up, /* U is sparse, upper triangular, stored by row */ - Int *Uj, /* the column indices of U need not be sorted */ - double *Ux, /* diagonal of U, if present, is ignored */ - - Int *Zp, /* Z is sparse, stored by column */ - Int *Zi, /* the row indices of Z must be sorted */ - - /* output, not defined on input: */ - double *Zx - - /* workspace: */ - //double *z, /* size n, zero on input, restored as such on output */ - //Int *Zdiagp, /* size n */ - //Int *Lmunch /* size n */ -) -{ - double ljk, zkj ; - Int j, i, k, p, znz, pdiag, up, zp, flops = *n ; - double *z = (double *) calloc(*n,sizeof(double)); - Int *Zdiagp = (Int *) malloc((*n)*sizeof(Int)); - Int *Lmunch = (Int *) malloc((*n)*sizeof(Int)); - - - /* ---------------------------------------------------------------------- */ - /* initializations */ - /* ---------------------------------------------------------------------- */ - - - - /* clear the numerical values of Z */ - znz = Zp [*n] ; - for (p = 0 ; p < znz ; p++) - { - Zx [p] = 0 ; - } - - /* find the diagonal of Z and initialize it */ - for (j = 0 ; j < *n ; j++) - { - pdiag = -1 ; - for (p = Zp [j] ; p < Zp [j+1] && pdiag == -1 ; p++) - { - if (Zi [p] == j) - { - pdiag = p ; - Zx [p] = 1 / d [j] ; - } - } - Zdiagp [j] = pdiag ; - if (pdiag == -1) return (-1) ; /* Z must have a zero-free diagonal */ - } - - /* Lmunch [k] points to the last entry in column k of L */ - for (k = 0 ; k < *n ; k++) - { - Lmunch [k] = Lp [k+1] - 1 ; - } - - /* ---------------------------------------------------------------------- */ - /* compute the sparse inverse subset */ - /* ---------------------------------------------------------------------- */ - - for (j = (*n)-1 ; j >= 0 ; j--) - { - - /* ------------------------------------------------------------------ */ - /* scatter Z (:,j) into z workspace */ - /* ------------------------------------------------------------------ */ - - /* only the lower triangular part is needed, since the upper triangular - part is all zero */ - for (p = Zdiagp [j] ; p < Zp [j+1] ; p++) - { - z [Zi [p]] = Zx [p] ; - } - - /* ------------------------------------------------------------------ */ - /* compute the strictly upper triangular part of Z (:,j) */ - /* ------------------------------------------------------------------ */ - - /* for k = (j-1):-1:1 but only for the entries Z(k,j) */ - for (p = Zdiagp [j]-1 ; p >= Zp [j] ; p--) - { - /* Z (k,j) = - U (k,k+1:n) * Z (k+1:n,j) */ - k = Zi [p] ; - zkj = 0 ; - flops += (Up [k+1] - Up [k]) ; - for (up = Up [k] ; up < Up [k+1] ; up++) - { - /* skip the diagonal of U, if present */ - i = Uj [up] ; - if (i > k) - { - zkj -= Ux [up] * z [i] ; - } - } - z [k] = zkj ; - } - - /* ------------------------------------------------------------------ */ - /* left-looking update to lower triangular part of Z */ - /* ------------------------------------------------------------------ */ - - /* for k = (j-1):-1:1 but only for the entries Z(k,j) */ - for (p = Zdiagp [j]-1 ; p >= Zp [j] ; p--) - { - k = Zi [p] ; - - /* ljk = L (j,k) */ - if (Lmunch [k] < Lp [k] || Li [Lmunch [k]] != j) - { - /* L (j,k) is zero, so there is no work to do */ - continue ; - } - ljk = Lx [Lmunch [k]--] ; - - /* Z (k+1:n,k) = Z (k+1:n,k) - Z (k+1:n,j) * L (j,k) */ - flops += (Zp [k+1] - Zdiagp [k]) ; - for (zp = Zdiagp [k] ; zp < Zp [k+1] ; zp++) - { - Zx [zp] -= z [Zi [zp]] * ljk ; - } - } - - /* ------------------------------------------------------------------ */ - /* gather Z (:,j) back from z workspace */ - /* ------------------------------------------------------------------ */ - - for (p = Zp [j] ; p < Zp [j+1] ; p++) - { - i = Zi [p] ; - Zx [p] = z [i] ; - z [i] = 0 ; - } - } - - free(z); - free(Zdiagp); - free(Lmunch); - - return (flops) ; -} diff --git a/src-i386/sparseinvR.h b/src-i386/sparseinvR.h deleted file mode 100644 index 3ac00d1..0000000 --- a/src-i386/sparseinvR.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef _SPARSEINV_H_ -#define _SPARSEINV_H_ -#include -#define Int int - -Int sparseinv /* returns 1 if OK, 0 if failure */ -( - /* inputs, not modified on output: */ - Int *n, /* L, U, D, and Z are n-by-n */ - - Int *Lp, /* L is sparse, lower triangular, stored by column */ - Int *Li, /* the row indices of L must be sorted */ - double *Lx, /* diagonal of L, if present, is ignored */ - - double *d, /* diagonal of D, of size n */ - - Int *Up, /* U is sparse, upper triangular, stored by row */ - Int *Uj, /* the column indices of U need not be sorted */ - double *Ux, /* diagonal of U, if present, is ignored */ - - Int *Zp, /* Z is sparse, stored by column */ - Int *Zi, /* the row indices of Z must be sorted */ - - /* output, not defined on input: */ - double *Zx - - /* workspace: */ - // double *z, /* size n, zero on input, restored as such on output */ - // Int *Zdiagp, /* size n */ - // Int *Lmunch /* size n */ -) ; - -#endif diff --git a/src-i386/sparseinvR.o b/src-i386/sparseinvR.o deleted file mode 100644 index ac92d27b9b095adc9e8ab6d9adde13b4fc02206e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1864 zcmah~Urbw77(cf?xT?*)xZK1hHhLe9T4E{S8pa(&S3&1PO_mMi!76l6q_g}aj=IjzQ*@MXvebM-^CpBgdJd^=rOEgLhrX}2Mk1!N{+ZJ*4`)*4IxW$v4)9-xW z?|k3)`_Aci!@^?($4nI=`)!E|0WCJH*>Y*gISHWxAql|X*auS~N4o+&Q7vj~9=#kU z^|`=_RO-=)l4T5Vb;18bVchzzx(0O@umyJWbeD=i+{1MT>USvO|6T>-PJWS%A-Iis zOsd0=my>Mn%(Jt%Y^PvCn~RULNfgV@IKUgO7uK>lY3du)Cz#KGYz)jM!-n|xY#h}5 zl6?vekKwKqiqlCR;Z)5_<}VIH%%j4FsIExnB5d?4f}Rsp_qp^Rg`B#w8vNOcED*{3 z3~hId+D)MCHz?OzGJBy{;#ihgy-J2-0i@(&?|^l02|$u`lV8oyUe`<@GhHf?XP)LT}ZO4+920X7B>K z7w+)qn!TT93ZUzQtbD5cdHP55c+q$okO_<41WIE7AG{|i>%LzsmW+nK z^gjU;ys(PQcF2l8AAa}!&iCdDx%G>15FaCWf%hn7PyS;&+BaPeH6OkV1d29%dgnOO z+ImRw#T%O%Ylj9?@!{H@kD|$5zw%l-p3syNr=0bvLu$B2+|3D3AGorL#r6m(vg*jB!S{zpQhE9(e}?g?i|tUgCWqO4c7ie1iO z=M$nFniH!-S4DSdQFMhCL>hWBCdzN@QIhAujR;dF*yto%dc7i@1*zKBMIhc&w$xXV zw2GvF1+$V#pf{d~frR6Jk&q9B)KD~;ip2*`9Sd}q^tk%UqCgbl0B(E7&VG+(r+|#H z%Rd-9dp&dxz&x;ROFR2KICv-qu~>H;RWO~xAzR+Nyi!)+*U2eh=iVK#vpbqd3~rMI zUZk`CznWNoDz^P4voXEN*mlM6TjC&Zf@hn5AU%+Xe;7-gCV?b=*VxF&2nodcI(w7R N{ut@3l=k8Fe*vQ_+}QvC diff --git a/src-x64/FRK-init.c b/src-x64/FRK-init.c deleted file mode 100644 index b12b9e1..0000000 --- a/src-x64/FRK-init.c +++ /dev/null @@ -1,51 +0,0 @@ -/*FRK: An R Software package for spatial and spatio-temporal prediction - with large datasets. - Copyright (c) 2017 University of Wollongong -Author: Andrew Zammit-Mangion, azm (at) uow.edu.au - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. */ - -#include "amd_order_wrapper.h" -#include "sparseinvR.h" -#include "distR.h" -#include -#include -#include -#include - - -void attribute_visible R_init_FRK(DllInfo *info) { - - static R_NativePrimitiveArgType sparseinv_t[] = { - INTSXP,INTSXP,INTSXP,REALSXP,REALSXP,INTSXP,INTSXP,REALSXP,INTSXP,INTSXP,REALSXP - }; - - static R_NativePrimitiveArgType AMD_order_wrapper_t[] = { - INTSXP,INTSXP,INTSXP,INTSXP,REALSXP,REALSXP - }; - - static R_CMethodDef cMethods[] = { - {"sparseinv", (DL_FUNC) &sparseinv, 11, sparseinv_t}, - {"AMD_order_wrapper", (DL_FUNC) &AMD_order_wrapper, 6, AMD_order_wrapper_t}, - {NULL, NULL, 0} - }; - - - static R_CallMethodDef callMethods[] = { - {"_FRK_distR_C", (DL_FUNC) &_FRK_distR_C, 2}, - {NULL, NULL, 0} - }; - - R_registerRoutines(info, cMethods, callMethods, NULL, NULL); - R_useDynamicSymbols(info, FALSE); - -} - diff --git a/src-x64/FRK-init.o b/src-x64/FRK-init.o deleted file mode 100644 index dcebb2a2f986eaf1157a1e5c44cfa759a3e8d73a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1697 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

?k^*aYpu~KV7t6E8I%(bzdaE6*Y}Ps`&SB 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 H!&?6Xdh|=7 diff --git a/src-x64/RcppExports.cpp b/src-x64/RcppExports.cpp deleted file mode 100644 index 6253e43..0000000 --- a/src-x64/RcppExports.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// Generated by using Rcpp::compileAttributes() -> do not edit by hand -// Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 - -#include - -using namespace Rcpp; - -// distR_C -NumericMatrix distR_C(NumericMatrix x, NumericMatrix y); -RcppExport SEXP _FRK_distR_C(SEXP xSEXP, SEXP ySEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< NumericMatrix >::type x(xSEXP); - Rcpp::traits::input_parameter< NumericMatrix >::type y(ySEXP); - rcpp_result_gen = Rcpp::wrap(distR_C(x, y)); - return rcpp_result_gen; -END_RCPP -} diff --git a/src-x64/RcppExports.o b/src-x64/RcppExports.o deleted file mode 100644 index a2fee399fd90b0244cc199d12a9e1028f8e6a94a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74609 zcmeIb31C#!`8RwgGZO+5CMqcIqXxw-OjZ&>n*f1{1c(HYs_i5s14Kg-lZgbkf0Uq% zA&QFDwc>8AwpekkOAti#??Q2@TD54kB}Of-#iix@J?A;++k5Z$mH)noZn}uc=6p(Oq8ZEu!3hcrx+>SiLE(>N=)r`v@ zZxi}(mz}^X%?g!{8=q_A4aePB@J_V)N4(rnp_NE>3lj7RySe$rRvy`%lE4#obI0dd zd1N;X-WdsYb6V{g7)m#cIpCcud6yv`@~?DUUZ}{bkNoR8)-c}dWT^)q!oR$Ne3tN) z{96s4^$`B$727g~{JRdk?VZdNp)blA&dA~NPri;Haaif%H-8OC2NJYl!E#O5ERw-`L@ zA<|KjZ!0%SZz*`bWz5w1Tr%F4FF^!Xf_IqY>GbA?a;*+hJ#BQen;R;yRs^!!0$x#~ z-P};IwSY#MXw3ldSYKXIVtU7d_oBmYe#ojX3-JrU`&jbOOr_m?TZ5~Cd|a5ywW3nK+y`E$iBacGw+XXmy+HhQRxs!|r(7z(96OUF{a7gT~-6+hnOFf6j|#Z*WOtsmAaO73 z=H(Vz#bmbzg0R%5>t9}8p0%E~fY%7#0t-*{2YJr+_KwwnwwrJ3@X79W@VYGe*uVTj zYrP`7Ux9aVY`37qs;>sT^TB&h@-SWH{vfZ= zHj$uwe#g~rp`-u%5WMV55CMmo&xIw{cA15+9pFupJl)Roifj|b8d8D+s+2s_zam>b zCI4!y1&Mo3@A#0lo>IOn0`Dq^f8z_R`9l81z+3C^&prTGf!77z;R);a9v+QtR4I}*ID4!e1d@~wBZn`awW$!;Tf-#P5&jknfQvfBaP z=oJ7sbou7z+a72ry_;R_<~z!F3wWhcpDtg}tkFB6?;Qw!E_owxFY0rCfz9rLke>mE zKbAadznss`ey9VyuN-y@if#QL6m)^NR~(9P9EOwa7UqS7gfFG|_zDph&;uS0({5p* zwR@s`rin$1*Nld$wDYYaPxgy=%aG&0)95_C!r~p8)SYhutFE zIJgRiHiP$rSEeP5Ad$L;!-cypN>vKV_?SWx9c&os(9->|q zG7RG$@O(WiyZ|2}y#;wR4c12`GWN}rpzlf+>3qiXv^8JI zZgwTcF3HpRT##oQS6h&=A@D|A#rmim*=~NJwO*})e9g&*@y#{NGwl}G>L1w+&Booe^Zj<@Cu*_|@aFtQ}iv|D6rmz_{h z1zwKiQT^fc7TFd!=0LvXr>LhlCfY43Msv^y+08x;IwjAvJKi>5s{tv zwLd^LFjj$QJ-A*u$KUI~yVha1#5TTVW#YL9ymgW{ABs7>C56`d_YUOi78=HiTiCMB z=fY6P+W%2{S1rQ4MDlcc3q!W~l>r4efwxxj_EdHYb8Yi+ngiU_fc1?v060v$x#O+# z1G2jXy!ti7vdq^C^K8!xR43j6@8UJYvaY}6+2$pb&%@6Y6nzo-T$rDm*p5bmckLRc znd!|hwAO>QX~(_`^>dv!02N18yomXOQAH=J1w>of6M+#>DJ zwsC=YtDO448*l4hg5a$IuUP8i`a=4~+tv?=*Xyp&wopjCZQ#vy=qtAMyTmh^=wcq6 zj^YAqI|?E=2wu#o&o*umuhdmviEVyGyc+PXa_B3u)hpt4y6dxz=akQDz*{Tz>GCKF z*`D)C!CULlS5rE!C}h(Y1aAj;8x#G*w8>hph?muji{%jcSCng8-v}Z+1l|WueZ`m- z>LUnL<*LvA98bI!;@yc8hpsQE&enc6h_F@e`fTGl@z#QOutQ(IE&qtO#Z_OvZK1Uk zydB_8l=^(QFU_KS&bN(�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 -#include - -/* ========================================================================== */ -/* === SuiteSparse_long ===================================================== */ -/* ========================================================================== */ - -#ifndef SuiteSparse_long - -#ifdef _WIN64 - -#define SuiteSparse_long __int64 -#define SuiteSparse_long_max _I64_MAX -#define SuiteSparse_long_idd "I64d" - -#else - -#define SuiteSparse_long long -#define SuiteSparse_long_max LONG_MAX -#define SuiteSparse_long_idd "ld" - -#endif -#define SuiteSparse_long_id "%" SuiteSparse_long_idd -#endif - -/* For backward compatibility with prior versions of SuiteSparse. The UF_* - * macros are deprecated and will be removed in a future version. */ -#ifndef UF_long -#define UF_long SuiteSparse_long -#define UF_long_max SuiteSparse_long_max -#define UF_long_idd SuiteSparse_long_idd -#define UF_long_id SuiteSparse_long_id -#endif - -/* ========================================================================== */ -/* === SuiteSparse_config parameters and functions ========================== */ -/* ========================================================================== */ - -/* SuiteSparse-wide parameters will be placed in this struct. */ - -typedef struct SuiteSparse_config_struct -{ - void *(*malloc_memory) (size_t) ; /* pointer to malloc */ - void *(*realloc_memory) (void *, size_t) ; /* pointer to realloc */ - void (*free_memory) (void *) ; /* pointer to free */ - void *(*calloc_memory) (size_t, size_t) ; /* pointer to calloc */ - -} SuiteSparse_config ; - -void *SuiteSparse_malloc /* pointer to allocated block of memory */ -( - size_t nitems, /* number of items to malloc (>=1 is enforced) */ - size_t size_of_item, /* sizeof each item */ - int *ok, /* TRUE if successful, FALSE otherwise */ - SuiteSparse_config *config /* SuiteSparse-wide configuration */ -) ; - -void *SuiteSparse_free /* always returns NULL */ -( - void *p, /* block to free */ - SuiteSparse_config *config /* SuiteSparse-wide configuration */ -) ; - -void SuiteSparse_tic /* start the timer */ -( - double tic [2] /* output, contents undefined on input */ -) ; - -double SuiteSparse_toc /* return time in seconds since last tic */ -( - double tic [2] /* input: from last call to SuiteSparse_tic */ -) ; - -double SuiteSparse_time /* returns current wall clock time in seconds */ -( - void -) ; - -/* determine which timer to use, if any */ -#ifndef NTIMER -#ifdef _POSIX_C_SOURCE -#if _POSIX_C_SOURCE >= 199309L -#define SUITESPARSE_TIMER_ENABLED -#endif -#endif -#endif - -/* ========================================================================== */ -/* === SuiteSparse version ================================================== */ -/* ========================================================================== */ - -/* SuiteSparse is not a package itself, but a collection of packages, some of - * which must be used together (UMFPACK requires AMD, CHOLMOD requires AMD, - * COLAMD, CAMD, and CCOLAMD, etc). A version number is provided here for the - * collection itself. The versions of packages within each version of - * SuiteSparse are meant to work together. Combining one packge from one - * version of SuiteSparse, with another package from another version of - * SuiteSparse, may or may not work. - * - * SuiteSparse contains the following packages: - * - * SuiteSparse_config version 4.2.1 (version always the same as SuiteSparse) - * AMD version 2.3.1 - * BTF version 1.2.0 - * CAMD version 2.3.1 - * CCOLAMD version 2.8.0 - * CHOLMOD version 2.1.2 - * COLAMD version 2.8.0 - * CSparse version 3.1.2 - * CXSparse version 3.1.2 - * KLU version 1.2.1 - * LDL version 2.1.0 - * RBio version 2.1.1 - * SPQR version 1.3.1 (full name is SuiteSparseQR) - * UMFPACK version 5.6.2 - * MATLAB_Tools various packages & M-files - * - * Other package dependencies: - * BLAS required by CHOLMOD and UMFPACK - * LAPACK required by CHOLMOD - * METIS 4.0.1 required by CHOLMOD (optional) and KLU (optional) - */ - - -int SuiteSparse_version /* returns SUITESPARSE_VERSION */ -( - /* output, not defined on input. Not used if NULL. Returns - the three version codes in version [0..2]: - version [0] is SUITESPARSE_MAIN_VERSION - version [1] is SUITESPARSE_SUB_VERSION - version [2] is SUITESPARSE_SUBSUB_VERSION - */ - int version [3] -) ; - -/* Versions prior to 4.2.0 do not have the above function. The following - code fragment will work with any version of SuiteSparse: - - #ifdef SUITESPARSE_HAS_VERSION_FUNCTION - v = SuiteSparse_version (NULL) ; - #else - v = SUITESPARSE_VERSION ; - #endif -*/ -#define SUITESPARSE_HAS_VERSION_FUNCTION - -#define SUITESPARSE_DATE "April 25, 2013" -#define SUITESPARSE_VER_CODE(main,sub) ((main) * 1000 + (sub)) -#define SUITESPARSE_MAIN_VERSION 4 -#define SUITESPARSE_SUB_VERSION 2 -#define SUITESPARSE_SUBSUB_VERSION 1 -#define SUITESPARSE_VERSION \ - SUITESPARSE_VER_CODE(SUITESPARSE_MAIN_VERSION,SUITESPARSE_SUB_VERSION) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/src-x64/amd.h b/src-x64/amd.h deleted file mode 100644 index 210967b..0000000 --- a/src-x64/amd.h +++ /dev/null @@ -1,411 +0,0 @@ -/* ========================================================================= */ -/* === AMD: approximate minimum degree ordering =========================== */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD Version 2.2, Copyright (c) 2007 by Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* AMD finds a symmetric ordering P of a matrix A so that the Cholesky - * factorization of P*A*P' has fewer nonzeros and takes less work than the - * Cholesky factorization of A. If A is not symmetric, then it performs its - * ordering on the matrix A+A'. Two sets of user-callable routines are - * provided, one for int integers and the other for SuiteSparse_long integers. - * - * The method is based on the approximate minimum degree algorithm, discussed - * in Amestoy, Davis, and Duff, "An approximate degree ordering algorithm", - * SIAM Journal of Matrix Analysis and Applications, vol. 17, no. 4, pp. - * 886-905, 1996. This package can perform both the AMD ordering (with - * aggressive absorption), and the AMDBAR ordering (without aggressive - * absorption) discussed in the above paper. This package differs from the - * Fortran codes discussed in the paper: - * - * (1) it can ignore "dense" rows and columns, leading to faster run times - * (2) it computes the ordering of A+A' if A is not symmetric - * (3) it is followed by a depth-first post-ordering of the assembly tree - * (or supernodal elimination tree) - * - * For historical reasons, the Fortran versions, amd.f and amdbar.f, have - * been left (nearly) unchanged. They compute the identical ordering as - * described in the above paper. - */ - -#ifndef AMD_H -#define AMD_H - -/* make it easy for C++ programs to include AMD */ -#ifdef __cplusplus -extern "C" { -#endif - -/* get the definition of size_t: */ -#include - -#include "SuiteSparse_config.h" - -int amd_order /* returns AMD_OK, AMD_OK_BUT_JUMBLED, - * AMD_INVALID, or AMD_OUT_OF_MEMORY */ -( - int n, /* A is n-by-n. n must be >= 0. */ - const int Ap [ ], /* column pointers for A, of size n+1 */ - const int Ai [ ], /* row indices of A, of size nz = Ap [n] */ - int P [ ], /* output permutation, of size n */ - double Control [ ], /* input Control settings, of size AMD_CONTROL */ - double Info [ ] /* output Info statistics, of size AMD_INFO */ -) ; - -SuiteSparse_long amd_l_order /* see above for description of arguments */ -( - SuiteSparse_long n, - const SuiteSparse_long Ap [ ], - const SuiteSparse_long Ai [ ], - SuiteSparse_long P [ ], - double Control [ ], - double Info [ ] -) ; - -/* Input arguments (not modified): - * - * n: the matrix A is n-by-n. - * Ap: an int/SuiteSparse_long array of size n+1, containing column - * pointers of A. - * Ai: an int/SuiteSparse_long array of size nz, containing the row - * indices of A, where nz = Ap [n]. - * Control: a double array of size AMD_CONTROL, containing control - * parameters. Defaults are used if Control is NULL. - * - * Output arguments (not defined on input): - * - * P: an int/SuiteSparse_long array of size n, containing the output - * permutation. If row i is the kth pivot row, then P [k] = i. In - * MATLAB notation, the reordered matrix is A (P,P). - * Info: a double array of size AMD_INFO, containing statistical - * information. Ignored if Info is NULL. - * - * On input, the matrix A is stored in column-oriented form. The row indices - * of nonzero entries in column j are stored in Ai [Ap [j] ... Ap [j+1]-1]. - * - * If the row indices appear in ascending order in each column, and there - * are no duplicate entries, then amd_order is slightly more efficient in - * terms of time and memory usage. If this condition does not hold, a copy - * of the matrix is created (where these conditions do hold), and the copy is - * ordered. This feature is new to v2.0 (v1.2 and earlier required this - * condition to hold for the input matrix). - * - * Row indices must be in the range 0 to - * n-1. Ap [0] must be zero, and thus nz = Ap [n] is the number of nonzeros - * in A. The array Ap is of size n+1, and the array Ai is of size nz = Ap [n]. - * The matrix does not need to be symmetric, and the diagonal does not need to - * be present (if diagonal entries are present, they are ignored except for - * the output statistic Info [AMD_NZDIAG]). The arrays Ai and Ap are not - * modified. This form of the Ap and Ai arrays to represent the nonzero - * pattern of the matrix A is the same as that used internally by MATLAB. - * If you wish to use a more flexible input structure, please see the - * umfpack_*_triplet_to_col routines in the UMFPACK package, at - * http://www.suitesparse.com. - * - * Restrictions: n >= 0. Ap [0] = 0. Ap [j] <= Ap [j+1] for all j in the - * range 0 to n-1. nz = Ap [n] >= 0. Ai [0..nz-1] must be in the range 0 - * to n-1. Finally, Ai, Ap, and P must not be NULL. If any of these - * restrictions are not met, AMD returns AMD_INVALID. - * - * AMD returns: - * - * AMD_OK if the matrix is valid and sufficient memory can be allocated to - * perform the ordering. - * - * AMD_OUT_OF_MEMORY if not enough memory can be allocated. - * - * AMD_INVALID if the input arguments n, Ap, Ai are invalid, or if P is - * NULL. - * - * AMD_OK_BUT_JUMBLED if the matrix had unsorted columns, and/or duplicate - * entries, but was otherwise valid. - * - * The AMD routine first forms the pattern of the matrix A+A', and then - * computes a fill-reducing ordering, P. If P [k] = i, then row/column i of - * the original is the kth pivotal row. In MATLAB notation, the permuted - * matrix is A (P,P), except that 0-based indexing is used instead of the - * 1-based indexing in MATLAB. - * - * The Control array is used to set various parameters for AMD. If a NULL - * pointer is passed, default values are used. The Control array is not - * modified. - * - * Control [AMD_DENSE]: controls the threshold for "dense" rows/columns. - * A dense row/column in A+A' can cause AMD to spend a lot of time in - * ordering the matrix. If Control [AMD_DENSE] >= 0, rows/columns - * with more than Control [AMD_DENSE] * sqrt (n) entries are ignored - * during the ordering, and placed last in the output order. The - * default value of Control [AMD_DENSE] is 10. If negative, no - * rows/columns are treated as "dense". Rows/columns with 16 or - * fewer off-diagonal entries are never considered "dense". - * - * Control [AMD_AGGRESSIVE]: controls whether or not to use aggressive - * absorption, in which a prior element is absorbed into the current - * element if is a subset of the current element, even if it is not - * adjacent to the current pivot element (refer to Amestoy, Davis, - * & Duff, 1996, for more details). The default value is nonzero, - * which means to perform aggressive absorption. This nearly always - * leads to a better ordering (because the approximate degrees are - * more accurate) and a lower execution time. There are cases where - * it can lead to a slightly worse ordering, however. To turn it off, - * set Control [AMD_AGGRESSIVE] to 0. - * - * Control [2..4] are not used in the current version, but may be used in - * future versions. - * - * The Info array provides statistics about the ordering on output. If it is - * not present, the statistics are not returned. This is not an error - * condition. - * - * Info [AMD_STATUS]: the return value of AMD, either AMD_OK, - * AMD_OK_BUT_JUMBLED, AMD_OUT_OF_MEMORY, or AMD_INVALID. - * - * Info [AMD_N]: n, the size of the input matrix - * - * Info [AMD_NZ]: the number of nonzeros in A, nz = Ap [n] - * - * Info [AMD_SYMMETRY]: the symmetry of the matrix A. It is the number - * of "matched" off-diagonal entries divided by the total number of - * off-diagonal entries. An entry A(i,j) is matched if A(j,i) is also - * an entry, for any pair (i,j) for which i != j. In MATLAB notation, - * S = spones (A) ; - * B = tril (S, -1) + triu (S, 1) ; - * symmetry = nnz (B & B') / nnz (B) ; - * - * Info [AMD_NZDIAG]: the number of entries on the diagonal of A. - * - * Info [AMD_NZ_A_PLUS_AT]: the number of nonzeros in A+A', excluding the - * diagonal. If A is perfectly symmetric (Info [AMD_SYMMETRY] = 1) - * with a fully nonzero diagonal, then Info [AMD_NZ_A_PLUS_AT] = nz-n - * (the smallest possible value). If A is perfectly unsymmetric - * (Info [AMD_SYMMETRY] = 0, for an upper triangular matrix, for - * example) with no diagonal, then Info [AMD_NZ_A_PLUS_AT] = 2*nz - * (the largest possible value). - * - * Info [AMD_NDENSE]: the number of "dense" rows/columns of A+A' that were - * removed from A prior to ordering. These are placed last in the - * output order P. - * - * Info [AMD_MEMORY]: the amount of memory used by AMD, in bytes. In the - * current version, this is 1.2 * Info [AMD_NZ_A_PLUS_AT] + 9*n - * times the size of an integer. This is at most 2.4nz + 9n. This - * excludes the size of the input arguments Ai, Ap, and P, which have - * a total size of nz + 2*n + 1 integers. - * - * Info [AMD_NCMPA]: the number of garbage collections performed. - * - * Info [AMD_LNZ]: the number of nonzeros in L (excluding the diagonal). - * This is a slight upper bound because mass elimination is combined - * with the approximate degree update. It is a rough upper bound if - * there are many "dense" rows/columns. The rest of the statistics, - * below, are also slight or rough upper bounds, for the same reasons. - * The post-ordering of the assembly tree might also not exactly - * correspond to a true elimination tree postordering. - * - * Info [AMD_NDIV]: the number of divide operations for a subsequent LDL' - * or LU factorization of the permuted matrix A (P,P). - * - * Info [AMD_NMULTSUBS_LDL]: the number of multiply-subtract pairs for a - * subsequent LDL' factorization of A (P,P). - * - * Info [AMD_NMULTSUBS_LU]: the number of multiply-subtract pairs for a - * subsequent LU factorization of A (P,P), assuming that no numerical - * pivoting is required. - * - * Info [AMD_DMAX]: the maximum number of nonzeros in any column of L, - * including the diagonal. - * - * Info [14..19] are not used in the current version, but may be used in - * future versions. - */ - -/* ------------------------------------------------------------------------- */ -/* direct interface to AMD */ -/* ------------------------------------------------------------------------- */ - -/* amd_2 is the primary AMD ordering routine. It is not meant to be - * user-callable because of its restrictive inputs and because it destroys - * the user's input matrix. It does not check its inputs for errors, either. - * However, if you can work with these restrictions it can be faster than - * amd_order and use less memory (assuming that you can create your own copy - * of the matrix for AMD to destroy). Refer to AMD/Source/amd_2.c for a - * description of each parameter. */ - -void amd_2 -( - int n, - int Pe [ ], - int Iw [ ], - int Len [ ], - int iwlen, - int pfree, - int Nv [ ], - int Next [ ], - int Last [ ], - int Head [ ], - int Elen [ ], - int Degree [ ], - int W [ ], - double Control [ ], - double Info [ ] -) ; - -void amd_l2 -( - SuiteSparse_long n, - SuiteSparse_long Pe [ ], - SuiteSparse_long Iw [ ], - SuiteSparse_long Len [ ], - SuiteSparse_long iwlen, - SuiteSparse_long pfree, - SuiteSparse_long Nv [ ], - SuiteSparse_long Next [ ], - SuiteSparse_long Last [ ], - SuiteSparse_long Head [ ], - SuiteSparse_long Elen [ ], - SuiteSparse_long Degree [ ], - SuiteSparse_long W [ ], - double Control [ ], - double Info [ ] -) ; - -/* ------------------------------------------------------------------------- */ -/* amd_valid */ -/* ------------------------------------------------------------------------- */ - -/* Returns AMD_OK or AMD_OK_BUT_JUMBLED if the matrix is valid as input to - * amd_order; the latter is returned if the matrix has unsorted and/or - * duplicate row indices in one or more columns. Returns AMD_INVALID if the - * matrix cannot be passed to amd_order. For amd_order, the matrix must also - * be square. The first two arguments are the number of rows and the number - * of columns of the matrix. For its use in AMD, these must both equal n. - * - * NOTE: this routine returned TRUE/FALSE in v1.2 and earlier. - */ - -int amd_valid -( - int n_row, /* # of rows */ - int n_col, /* # of columns */ - const int Ap [ ], /* column pointers, of size n_col+1 */ - const int Ai [ ] /* row indices, of size Ap [n_col] */ -) ; - -SuiteSparse_long amd_l_valid -( - SuiteSparse_long n_row, - SuiteSparse_long n_col, - const SuiteSparse_long Ap [ ], - const SuiteSparse_long Ai [ ] -) ; - -/* ------------------------------------------------------------------------- */ -/* AMD memory manager and printf routines */ -/* ------------------------------------------------------------------------- */ - -/* The user can redefine these to change the malloc, free, and printf routines - * that AMD uses. */ - -#ifndef EXTERN -#define EXTERN extern -#endif - -EXTERN void *(*amd_malloc) (size_t) ; /* pointer to malloc */ -EXTERN void (*amd_free) (void *) ; /* pointer to free */ -EXTERN void *(*amd_realloc) (void *, size_t) ; /* pointer to realloc */ -EXTERN void *(*amd_calloc) (size_t, size_t) ; /* pointer to calloc */ -EXTERN int (*amd_printf) (const char *, ...) ; /* pointer to printf */ - -/* ------------------------------------------------------------------------- */ -/* AMD Control and Info arrays */ -/* ------------------------------------------------------------------------- */ - -/* amd_defaults: sets the default control settings */ -void amd_defaults (double Control [ ]) ; -void amd_l_defaults (double Control [ ]) ; - -/* amd_control: prints the control settings */ -void amd_control (double Control [ ]) ; -void amd_l_control (double Control [ ]) ; - -/* amd_info: prints the statistics */ -void amd_info (double Info [ ]) ; -void amd_l_info (double Info [ ]) ; - -#define AMD_CONTROL 5 /* size of Control array */ -#define AMD_INFO 20 /* size of Info array */ - -/* contents of Control */ -#define AMD_DENSE 0 /* "dense" if degree > Control [0] * sqrt (n) */ -#define AMD_AGGRESSIVE 1 /* do aggressive absorption if Control [1] != 0 */ - -/* default Control settings */ -#define AMD_DEFAULT_DENSE 10.0 /* default "dense" degree 10*sqrt(n) */ -#define AMD_DEFAULT_AGGRESSIVE 1 /* do aggressive absorption by default */ - -/* contents of Info */ -#define AMD_STATUS 0 /* return value of amd_order and amd_l_order */ -#define AMD_N 1 /* A is n-by-n */ -#define AMD_NZ 2 /* number of nonzeros in A */ -#define AMD_SYMMETRY 3 /* symmetry of pattern (1 is sym., 0 is unsym.) */ -#define AMD_NZDIAG 4 /* # of entries on diagonal */ -#define AMD_NZ_A_PLUS_AT 5 /* nz in A+A' */ -#define AMD_NDENSE 6 /* number of "dense" rows/columns in A */ -#define AMD_MEMORY 7 /* amount of memory used by AMD */ -#define AMD_NCMPA 8 /* number of garbage collections in AMD */ -#define AMD_LNZ 9 /* approx. nz in L, excluding the diagonal */ -#define AMD_NDIV 10 /* number of fl. point divides for LU and LDL' */ -#define AMD_NMULTSUBS_LDL 11 /* number of fl. point (*,-) pairs for LDL' */ -#define AMD_NMULTSUBS_LU 12 /* number of fl. point (*,-) pairs for LU */ -#define AMD_DMAX 13 /* max nz. in any column of L, incl. diagonal */ - -/* ------------------------------------------------------------------------- */ -/* return values of AMD */ -/* ------------------------------------------------------------------------- */ - -#define AMD_OK 0 /* success */ -#define AMD_OUT_OF_MEMORY -1 /* malloc failed, or problem too large */ -#define AMD_INVALID -2 /* input arguments are not valid */ -#define AMD_OK_BUT_JUMBLED 1 /* input matrix is OK for amd_order, but - * columns were not sorted, and/or duplicate entries were present. AMD had - * to do extra work before ordering the matrix. This is a warning, not an - * error. */ - -/* ========================================================================== */ -/* === AMD version ========================================================== */ -/* ========================================================================== */ - -/* AMD Version 1.2 and later include the following definitions. - * As an example, to test if the version you are using is 1.2 or later: - * - * #ifdef AMD_VERSION - * if (AMD_VERSION >= AMD_VERSION_CODE (1,2)) ... - * #endif - * - * This also works during compile-time: - * - * #if defined(AMD_VERSION) && (AMD_VERSION >= AMD_VERSION_CODE (1,2)) - * printf ("This is version 1.2 or later\n") ; - * #else - * printf ("This is an early version\n") ; - * #endif - * - * Versions 1.1 and earlier of AMD do not include a #define'd version number. - */ - -#define AMD_DATE "Jun 20, 2012" -#define AMD_VERSION_CODE(main,sub) ((main) * 1000 + (sub)) -#define AMD_MAIN_VERSION 2 -#define AMD_SUB_VERSION 3 -#define AMD_SUBSUB_VERSION 1 -#define AMD_VERSION AMD_VERSION_CODE(AMD_MAIN_VERSION,AMD_SUB_VERSION) - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src-x64/amd_1.c b/src-x64/amd_1.c deleted file mode 100644 index 296d198..0000000 --- a/src-x64/amd_1.c +++ /dev/null @@ -1,183 +0,0 @@ -/* ========================================================================= */ -/* === AMD_1 =============================================================== */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* AMD_1: Construct A+A' for a sparse matrix A and perform the AMD ordering. - * - * The n-by-n sparse matrix A can be unsymmetric. It is stored in MATLAB-style - * compressed-column form, with sorted row indices in each column, and no - * duplicate entries. Diagonal entries may be present, but they are ignored. - * Row indices of column j of A are stored in Ai [Ap [j] ... Ap [j+1]-1]. - * Ap [0] must be zero, and nz = Ap [n] is the number of entries in A. The - * size of the matrix, n, must be greater than or equal to zero. - * - * This routine must be preceded by a call to AMD_aat, which computes the - * number of entries in each row/column in A+A', excluding the diagonal. - * Len [j], on input, is the number of entries in row/column j of A+A'. This - * routine constructs the matrix A+A' and then calls AMD_2. No error checking - * is performed (this was done in AMD_valid). - */ - -#include /* required */ -#include /* for distribution functions etc. */ - -#include "amd_internal.h" - -GLOBAL void AMD_1 -( - Int n, /* n > 0 */ - const Int Ap [ ], /* input of size n+1, not modified */ - const Int Ai [ ], /* input of size nz = Ap [n], not modified */ - Int P [ ], /* size n output permutation */ - Int Pinv [ ], /* size n output inverse permutation */ - Int Len [ ], /* size n input, undefined on output */ - Int slen, /* slen >= sum (Len [0..n-1]) + 7n, - * ideally slen = 1.2 * sum (Len) + 8n */ - Int S [ ], /* size slen workspace */ - double Control [ ], /* input array of size AMD_CONTROL */ - double Info [ ] /* output array of size AMD_INFO */ -) -{ - Int i, j, k, p, pfree, iwlen, pj, p1, p2, pj2, *Iw, *Pe, *Nv, *Head, - *Elen, *Degree, *s, *W, *Sp, *Tp ; - - /* --------------------------------------------------------------------- */ - /* construct the matrix for AMD_2 */ - /* --------------------------------------------------------------------- */ - - ASSERT (n > 0) ; - - iwlen = slen - 6*n ; - s = S ; - Pe = s ; s += n ; - Nv = s ; s += n ; - Head = s ; s += n ; - Elen = s ; s += n ; - Degree = s ; s += n ; - W = s ; s += n ; - Iw = s ; s += iwlen ; - - ASSERT (AMD_valid (n, n, Ap, Ai) == AMD_OK) ; - - /* construct the pointers for A+A' */ - Sp = Nv ; /* use Nv and W as workspace for Sp and Tp [ */ - Tp = W ; - pfree = 0 ; - for (j = 0 ; j < n ; j++) - { - Pe [j] = pfree ; - Sp [j] = pfree ; - pfree += Len [j] ; - } - - /* Note that this restriction on iwlen is slightly more restrictive than - * what is strictly required in AMD_2. AMD_2 can operate with no elbow - * room at all, but it will be very slow. For better performance, at - * least size-n elbow room is enforced. */ - ASSERT (iwlen >= pfree + n) ; - -#ifndef NDEBUG - for (p = 0 ; p < iwlen ; p++) Iw [p] = EMPTY ; -#endif - - for (k = 0 ; k < n ; k++) - { - AMD_DEBUG1 (("Construct row/column k= "ID" of A+A'\n", k)) ; - p1 = Ap [k] ; - p2 = Ap [k+1] ; - - /* construct A+A' */ - for (p = p1 ; p < p2 ; ) - { - /* scan the upper triangular part of A */ - j = Ai [p] ; - ASSERT (j >= 0 && j < n) ; - if (j < k) - { - /* entry A (j,k) in the strictly upper triangular part */ - ASSERT (Sp [j] < (j == n-1 ? pfree : Pe [j+1])) ; - ASSERT (Sp [k] < (k == n-1 ? pfree : Pe [k+1])) ; - Iw [Sp [j]++] = k ; - Iw [Sp [k]++] = j ; - p++ ; - } - else if (j == k) - { - /* skip the diagonal */ - p++ ; - break ; - } - else /* j > k */ - { - /* first entry below the diagonal */ - break ; - } - /* scan lower triangular part of A, in column j until reaching - * row k. Start where last scan left off. */ - ASSERT (Ap [j] <= Tp [j] && Tp [j] <= Ap [j+1]) ; - pj2 = Ap [j+1] ; - for (pj = Tp [j] ; pj < pj2 ; ) - { - i = Ai [pj] ; - ASSERT (i >= 0 && i < n) ; - if (i < k) - { - /* A (i,j) is only in the lower part, not in upper */ - ASSERT (Sp [i] < (i == n-1 ? pfree : Pe [i+1])) ; - ASSERT (Sp [j] < (j == n-1 ? pfree : Pe [j+1])) ; - Iw [Sp [i]++] = j ; - Iw [Sp [j]++] = i ; - pj++ ; - } - else if (i == k) - { - /* entry A (k,j) in lower part and A (j,k) in upper */ - pj++ ; - break ; - } - else /* i > k */ - { - /* consider this entry later, when k advances to i */ - break ; - } - } - Tp [j] = pj ; - } - Tp [k] = p ; - } - - /* clean up, for remaining mismatched entries */ - for (j = 0 ; j < n ; j++) - { - for (pj = Tp [j] ; pj < Ap [j+1] ; pj++) - { - i = Ai [pj] ; - ASSERT (i >= 0 && i < n) ; - /* A (i,j) is only in the lower part, not in upper */ - ASSERT (Sp [i] < (i == n-1 ? pfree : Pe [i+1])) ; - ASSERT (Sp [j] < (j == n-1 ? pfree : Pe [j+1])) ; - Iw [Sp [i]++] = j ; - Iw [Sp [j]++] = i ; - } - } - -#ifndef NDEBUG - for (j = 0 ; j < n-1 ; j++) ASSERT (Sp [j] == Pe [j+1]) ; - ASSERT (Sp [n-1] == pfree) ; -#endif - - /* Tp and Sp no longer needed ] */ - - /* --------------------------------------------------------------------- */ - /* order the matrix */ - /* --------------------------------------------------------------------- */ - - AMD_2 (n, Pe, Iw, Len, iwlen, pfree, - Nv, Pinv, P, Head, Elen, Degree, W, Control, Info) ; -} diff --git a/src-x64/amd_1.o b/src-x64/amd_1.o deleted file mode 100644 index 105d8f89208928d4f6165b5adee342a787faab98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1699 zcmah~L2MgE6rJ&IN(hm*RU(KGf;}u!ijr*%R+KGO^ z|NHai|Ns8X&L%HCMsQedgzOWRO!QnTpA&ZYC`*L&Q9@MU-~f}TBr&BYr*qT7^XNyM zBm({H+}xuX;YvHSbI2nlR*;ZaBP`(4+3k@A0iy-en)M!~8 z2ekW8yhNN$uoLV!8$UjA;+VDc>l)B}*>-qI+Y2pm+^SvOjqnu>8)Wf{)(&qPjPaX} zbWIxq@aKUj5hnG&F4*EPsVl?*Ud;Z$*IX zt!TX%&#Q<8(IC3Rc=x-Ek1rD@buU@PfEv}sU!a;YtQw8hEw3aBv%Kr#ZSucgapkpP zFZa33uWKb>8FwH_0Sv{Tg(S!n0{z$}<{f56U0MAaX3LIys~8fgUHvKYs(o%NMT;5W^5~~e}NFo`$*)n+^XYu7MZut z_cVT|ZTMu=u z3ssEAw47!aHzC+z<2Pj`RRX#mdM(}iFP0iG}fClOq2fCK_OkvL-^z$1$wjzDdIA+Ygmfxj0_ zJkMaNKf{}pt)(yVGkN{YST?kvqua_;JHHGBR>d?adDjP7cQU zv$J#QeE(ePT%S5TpU&jevlrE|^!Xzb{S$*RHG5(9&6Jzluf}vke<@r}bcnMT?C?6k zrzGsqY6sjQeELi}lL8CJ-8vy}(CN36lTqCbUE(P`4NQqjBGADHNAul_(-K7`t;FVg z7rsy6JQ#(L<~tW#@t>Tgd$dh(dL9bYe24B49K1y_V(WOe0r77l(Sxm%fKdC3_r0K< c><1*&>htF_>9= wbig) - { - for (x = 0 ; x < n ; x++) - { - if (W [x] != 0) W [x] = 1 ; - } - wflg = 2 ; - } - /* at this point, W [0..n-1] < wflg holds */ - return (wflg) ; -} - - -/* ========================================================================= */ -/* === AMD_2 =============================================================== */ -/* ========================================================================= */ - -GLOBAL void AMD_2 -( - Int n, /* A is n-by-n, where n > 0 */ - Int Pe [ ], /* Pe [0..n-1]: index in Iw of row i on input */ - Int Iw [ ], /* workspace of size iwlen. Iw [0..pfree-1] - * holds the matrix on input */ - Int Len [ ], /* Len [0..n-1]: length for row/column i on input */ - Int iwlen, /* length of Iw. iwlen >= pfree + n */ - Int pfree, /* Iw [pfree ... iwlen-1] is empty on input */ - - /* 7 size-n workspaces, not defined on input: */ - Int Nv [ ], /* the size of each supernode on output */ - Int Next [ ], /* the output inverse permutation */ - Int Last [ ], /* the output permutation */ - Int Head [ ], - Int Elen [ ], /* the size columns of L for each supernode */ - Int Degree [ ], - Int W [ ], - - /* control parameters and output statistics */ - double Control [ ], /* array of size AMD_CONTROL */ - double Info [ ] /* array of size AMD_INFO */ -) -{ - -/* - * Given a representation of the nonzero pattern of a symmetric matrix, A, - * (excluding the diagonal) perform an approximate minimum (UMFPACK/MA38-style) - * degree ordering to compute a pivot order such that the introduction of - * nonzeros (fill-in) in the Cholesky factors A = LL' is kept low. At each - * step, the pivot selected is the one with the minimum UMFAPACK/MA38-style - * upper-bound on the external degree. This routine can optionally perform - * aggresive absorption (as done by MC47B in the Harwell Subroutine - * Library). - * - * The approximate degree algorithm implemented here is the symmetric analog of - * the degree update algorithm in MA38 and UMFPACK (the Unsymmetric-pattern - * MultiFrontal PACKage, both by Davis and Duff). The routine is based on the - * MA27 minimum degree ordering algorithm by Iain Duff and John Reid. - * - * This routine is a translation of the original AMDBAR and MC47B routines, - * in Fortran, with the following modifications: - * - * (1) dense rows/columns are removed prior to ordering the matrix, and placed - * last in the output order. The presence of a dense row/column can - * increase the ordering time by up to O(n^2), unless they are removed - * prior to ordering. - * - * (2) the minimum degree ordering is followed by a postordering (depth-first - * search) of the assembly tree. Note that mass elimination (discussed - * below) combined with the approximate degree update can lead to the mass - * elimination of nodes with lower exact degree than the current pivot - * element. No additional fill-in is caused in the representation of the - * Schur complement. The mass-eliminated nodes merge with the current - * pivot element. They are ordered prior to the current pivot element. - * Because they can have lower exact degree than the current element, the - * merger of two or more of these nodes in the current pivot element can - * lead to a single element that is not a "fundamental supernode". The - * diagonal block can have zeros in it. Thus, the assembly tree used here - * is not guaranteed to be the precise supernodal elemination tree (with - * "funadmental" supernodes), and the postordering performed by this - * routine is not guaranteed to be a precise postordering of the - * elimination tree. - * - * (3) input parameters are added, to control aggressive absorption and the - * detection of "dense" rows/columns of A. - * - * (4) additional statistical information is returned, such as the number of - * nonzeros in L, and the flop counts for subsequent LDL' and LU - * factorizations. These are slight upper bounds, because of the mass - * elimination issue discussed above. - * - * (5) additional routines are added to interface this routine to MATLAB - * to provide a simple C-callable user-interface, to check inputs for - * errors, compute the symmetry of the pattern of A and the number of - * nonzeros in each row/column of A+A', to compute the pattern of A+A', - * to perform the assembly tree postordering, and to provide debugging - * ouput. Many of these functions are also provided by the Fortran - * Harwell Subroutine Library routine MC47A. - * - * (6) both int and SuiteSparse_long versions are provided. In the - * descriptions below and integer is and int or SuiteSparse_long depending - * on which version is being used. - - ********************************************************************** - ***** CAUTION: ARGUMENTS ARE NOT CHECKED FOR ERRORS ON INPUT. ****** - ********************************************************************** - ** If you want error checking, a more versatile input format, and a ** - ** simpler user interface, use amd_order or amd_l_order instead. ** - ** This routine is not meant to be user-callable. ** - ********************************************************************** - - * ---------------------------------------------------------------------------- - * References: - * ---------------------------------------------------------------------------- - * - * [1] Timothy A. Davis and Iain Duff, "An unsymmetric-pattern multifrontal - * method for sparse LU factorization", SIAM J. Matrix Analysis and - * Applications, vol. 18, no. 1, pp. 140-158. Discusses UMFPACK / MA38, - * which first introduced the approximate minimum degree used by this - * routine. - * - * [2] Patrick Amestoy, Timothy A. Davis, and Iain S. Duff, "An approximate - * minimum degree ordering algorithm," SIAM J. Matrix Analysis and - * Applications, vol. 17, no. 4, pp. 886-905, 1996. Discusses AMDBAR and - * MC47B, which are the Fortran versions of this routine. - * - * [3] Alan George and Joseph Liu, "The evolution of the minimum degree - * ordering algorithm," SIAM Review, vol. 31, no. 1, pp. 1-19, 1989. - * We list below the features mentioned in that paper that this code - * includes: - * - * mass elimination: - * Yes. MA27 relied on supervariable detection for mass elimination. - * - * indistinguishable nodes: - * Yes (we call these "supervariables"). This was also in the MA27 - * code - although we modified the method of detecting them (the - * previous hash was the true degree, which we no longer keep track - * of). A supervariable is a set of rows with identical nonzero - * pattern. All variables in a supervariable are eliminated together. - * Each supervariable has as its numerical name that of one of its - * variables (its principal variable). - * - * quotient graph representation: - * Yes. We use the term "element" for the cliques formed during - * elimination. This was also in the MA27 code. The algorithm can - * operate in place, but it will work more efficiently if given some - * "elbow room." - * - * element absorption: - * Yes. This was also in the MA27 code. - * - * external degree: - * Yes. The MA27 code was based on the true degree. - * - * incomplete degree update and multiple elimination: - * No. This was not in MA27, either. Our method of degree update - * within MC47B is element-based, not variable-based. It is thus - * not well-suited for use with incomplete degree update or multiple - * elimination. - * - * Authors, and Copyright (C) 2004 by: - * Timothy A. Davis, Patrick Amestoy, Iain S. Duff, John K. Reid. - * - * Acknowledgements: This work (and the UMFPACK package) was supported by the - * National Science Foundation (ASC-9111263, DMS-9223088, and CCR-0203270). - * The UMFPACK/MA38 approximate degree update algorithm, the unsymmetric analog - * which forms the basis of AMD, was developed while Tim Davis was supported by - * CERFACS (Toulouse, France) in a post-doctoral position. This C version, and - * the etree postorder, were written while Tim Davis was on sabbatical at - * Stanford University and Lawrence Berkeley National Laboratory. - - * ---------------------------------------------------------------------------- - * INPUT ARGUMENTS (unaltered): - * ---------------------------------------------------------------------------- - - * n: The matrix order. Restriction: n >= 1. - * - * iwlen: The size of the Iw array. On input, the matrix is stored in - * Iw [0..pfree-1]. However, Iw [0..iwlen-1] should be slightly larger - * than what is required to hold the matrix, at least iwlen >= pfree + n. - * Otherwise, excessive compressions will take place. The recommended - * value of iwlen is 1.2 * pfree + n, which is the value used in the - * user-callable interface to this routine (amd_order.c). The algorithm - * will not run at all if iwlen < pfree. Restriction: iwlen >= pfree + n. - * Note that this is slightly more restrictive than the actual minimum - * (iwlen >= pfree), but AMD_2 will be very slow with no elbow room. - * Thus, this routine enforces a bare minimum elbow room of size n. - * - * pfree: On input the tail end of the array, Iw [pfree..iwlen-1], is empty, - * and the matrix is stored in Iw [0..pfree-1]. During execution, - * additional data is placed in Iw, and pfree is modified so that - * Iw [pfree..iwlen-1] is always the unused part of Iw. - * - * Control: A double array of size AMD_CONTROL containing input parameters - * that affect how the ordering is computed. If NULL, then default - * settings are used. - * - * Control [AMD_DENSE] is used to determine whether or not a given input - * row is "dense". A row is "dense" if the number of entries in the row - * exceeds Control [AMD_DENSE] times sqrt (n), except that rows with 16 or - * fewer entries are never considered "dense". To turn off the detection - * of dense rows, set Control [AMD_DENSE] to a negative number, or to a - * number larger than sqrt (n). The default value of Control [AMD_DENSE] - * is AMD_DEFAULT_DENSE, which is defined in amd.h as 10. - * - * Control [AMD_AGGRESSIVE] is used to determine whether or not aggressive - * absorption is to be performed. If nonzero, then aggressive absorption - * is performed (this is the default). - - * ---------------------------------------------------------------------------- - * INPUT/OUPUT ARGUMENTS: - * ---------------------------------------------------------------------------- - * - * Pe: An integer array of size n. On input, Pe [i] is the index in Iw of - * the start of row i. Pe [i] is ignored if row i has no off-diagonal - * entries. Thus Pe [i] must be in the range 0 to pfree-1 for non-empty - * rows. - * - * During execution, it is used for both supervariables and elements: - * - * Principal supervariable i: index into Iw of the description of - * supervariable i. A supervariable represents one or more rows of - * the matrix with identical nonzero pattern. In this case, - * Pe [i] >= 0. - * - * Non-principal supervariable i: if i has been absorbed into another - * supervariable j, then Pe [i] = FLIP (j), where FLIP (j) is defined - * as (-(j)-2). Row j has the same pattern as row i. Note that j - * might later be absorbed into another supervariable j2, in which - * case Pe [i] is still FLIP (j), and Pe [j] = FLIP (j2) which is - * < EMPTY, where EMPTY is defined as (-1) in amd_internal.h. - * - * Unabsorbed element e: the index into Iw of the description of element - * e, if e has not yet been absorbed by a subsequent element. Element - * e is created when the supervariable of the same name is selected as - * the pivot. In this case, Pe [i] >= 0. - * - * Absorbed element e: if element e is absorbed into element e2, then - * Pe [e] = FLIP (e2). This occurs when the pattern of e (which we - * refer to as Le) is found to be a subset of the pattern of e2 (that - * is, Le2). In this case, Pe [i] < EMPTY. If element e is "null" - * (it has no nonzeros outside its pivot block), then Pe [e] = EMPTY, - * and e is the root of an assembly subtree (or the whole tree if - * there is just one such root). - * - * Dense variable i: if i is "dense", then Pe [i] = EMPTY. - * - * On output, Pe holds the assembly tree/forest, which implicitly - * represents a pivot order with identical fill-in as the actual order - * (via a depth-first search of the tree), as follows. If Nv [i] > 0, - * then i represents a node in the assembly tree, and the parent of i is - * Pe [i], or EMPTY if i is a root. If Nv [i] = 0, then (i, Pe [i]) - * represents an edge in a subtree, the root of which is a node in the - * assembly tree. Note that i refers to a row/column in the original - * matrix, not the permuted matrix. - * - * Info: A double array of size AMD_INFO. If present, (that is, not NULL), - * then statistics about the ordering are returned in the Info array. - * See amd.h for a description. - - * ---------------------------------------------------------------------------- - * INPUT/MODIFIED (undefined on output): - * ---------------------------------------------------------------------------- - * - * Len: An integer array of size n. On input, Len [i] holds the number of - * entries in row i of the matrix, excluding the diagonal. The contents - * of Len are undefined on output. - * - * Iw: An integer array of size iwlen. On input, Iw [0..pfree-1] holds the - * description of each row i in the matrix. The matrix must be symmetric, - * and both upper and lower triangular parts must be present. The - * diagonal must not be present. Row i is held as follows: - * - * Len [i]: the length of the row i data structure in the Iw array. - * Iw [Pe [i] ... Pe [i] + Len [i] - 1]: - * the list of column indices for nonzeros in row i (simple - * supervariables), excluding the diagonal. All supervariables - * start with one row/column each (supervariable i is just row i). - * If Len [i] is zero on input, then Pe [i] is ignored on input. - * - * Note that the rows need not be in any particular order, and there - * may be empty space between the rows. - * - * During execution, the supervariable i experiences fill-in. This is - * represented by placing in i a list of the elements that cause fill-in - * in supervariable i: - * - * Len [i]: the length of supervariable i in the Iw array. - * Iw [Pe [i] ... Pe [i] + Elen [i] - 1]: - * the list of elements that contain i. This list is kept short - * by removing absorbed elements. - * Iw [Pe [i] + Elen [i] ... Pe [i] + Len [i] - 1]: - * the list of supervariables in i. This list is kept short by - * removing nonprincipal variables, and any entry j that is also - * contained in at least one of the elements (j in Le) in the list - * for i (e in row i). - * - * When supervariable i is selected as pivot, we create an element e of - * the same name (e=i): - * - * Len [e]: the length of element e in the Iw array. - * Iw [Pe [e] ... Pe [e] + Len [e] - 1]: - * the list of supervariables in element e. - * - * An element represents the fill-in that occurs when supervariable i is - * selected as pivot (which represents the selection of row i and all - * non-principal variables whose principal variable is i). We use the - * term Le to denote the set of all supervariables in element e. Absorbed - * supervariables and elements are pruned from these lists when - * computationally convenient. - * - * CAUTION: THE INPUT MATRIX IS OVERWRITTEN DURING COMPUTATION. - * The contents of Iw are undefined on output. - - * ---------------------------------------------------------------------------- - * OUTPUT (need not be set on input): - * ---------------------------------------------------------------------------- - * - * Nv: An integer array of size n. During execution, ABS (Nv [i]) is equal to - * the number of rows that are represented by the principal supervariable - * i. If i is a nonprincipal or dense variable, then Nv [i] = 0. - * Initially, Nv [i] = 1 for all i. Nv [i] < 0 signifies that i is a - * principal variable in the pattern Lme of the current pivot element me. - * After element me is constructed, Nv [i] is set back to a positive - * value. - * - * On output, Nv [i] holds the number of pivots represented by super - * row/column i of the original matrix, or Nv [i] = 0 for non-principal - * rows/columns. Note that i refers to a row/column in the original - * matrix, not the permuted matrix. - * - * Elen: An integer array of size n. See the description of Iw above. At the - * start of execution, Elen [i] is set to zero for all rows i. During - * execution, Elen [i] is the number of elements in the list for - * supervariable i. When e becomes an element, Elen [e] = FLIP (esize) is - * set, where esize is the size of the element (the number of pivots, plus - * the number of nonpivotal entries). Thus Elen [e] < EMPTY. - * Elen (i) = EMPTY set when variable i becomes nonprincipal. - * - * For variables, Elen (i) >= EMPTY holds until just before the - * postordering and permutation vectors are computed. For elements, - * Elen [e] < EMPTY holds. - * - * On output, Elen [i] is the degree of the row/column in the Cholesky - * factorization of the permuted matrix, corresponding to the original row - * i, if i is a super row/column. It is equal to EMPTY if i is - * non-principal. Note that i refers to a row/column in the original - * matrix, not the permuted matrix. - * - * Note that the contents of Elen on output differ from the Fortran - * version (Elen holds the inverse permutation in the Fortran version, - * which is instead returned in the Next array in this C version, - * described below). - * - * Last: In a degree list, Last [i] is the supervariable preceding i, or EMPTY - * if i is the head of the list. In a hash bucket, Last [i] is the hash - * key for i. - * - * Last [Head [hash]] is also used as the head of a hash bucket if - * Head [hash] contains a degree list (see the description of Head, - * below). - * - * On output, Last [0..n-1] holds the permutation. That is, if - * i = Last [k], then row i is the kth pivot row (where k ranges from 0 to - * n-1). Row Last [k] of A is the kth row in the permuted matrix, PAP'. - * - * Next: Next [i] is the supervariable following i in a link list, or EMPTY if - * i is the last in the list. Used for two kinds of lists: degree lists - * and hash buckets (a supervariable can be in only one kind of list at a - * time). - * - * On output Next [0..n-1] holds the inverse permutation. That is, if - * k = Next [i], then row i is the kth pivot row. Row i of A appears as - * the (Next[i])-th row in the permuted matrix, PAP'. - * - * Note that the contents of Next on output differ from the Fortran - * version (Next is undefined on output in the Fortran version). - - * ---------------------------------------------------------------------------- - * LOCAL WORKSPACE (not input or output - used only during execution): - * ---------------------------------------------------------------------------- - * - * Degree: An integer array of size n. If i is a supervariable, then - * Degree [i] holds the current approximation of the external degree of - * row i (an upper bound). The external degree is the number of nonzeros - * in row i, minus ABS (Nv [i]), the diagonal part. The bound is equal to - * the exact external degree if Elen [i] is less than or equal to two. - * - * We also use the term "external degree" for elements e to refer to - * |Le \ Lme|. If e is an element, then Degree [e] is |Le|, which is the - * degree of the off-diagonal part of the element e (not including the - * diagonal part). - * - * Head: An integer array of size n. Head is used for degree lists. - * Head [deg] is the first supervariable in a degree list. All - * supervariables i in a degree list Head [deg] have the same approximate - * degree, namely, deg = Degree [i]. If the list Head [deg] is empty then - * Head [deg] = EMPTY. - * - * During supervariable detection Head [hash] also serves as a pointer to - * a hash bucket. If Head [hash] >= 0, there is a degree list of degree - * hash. The hash bucket head pointer is Last [Head [hash]]. If - * Head [hash] = EMPTY, then the degree list and hash bucket are both - * empty. If Head [hash] < EMPTY, then the degree list is empty, and - * FLIP (Head [hash]) is the head of the hash bucket. After supervariable - * detection is complete, all hash buckets are empty, and the - * (Last [Head [hash]] = EMPTY) condition is restored for the non-empty - * degree lists. - * - * W: An integer array of size n. The flag array W determines the status of - * elements and variables, and the external degree of elements. - * - * for elements: - * if W [e] = 0, then the element e is absorbed. - * if W [e] >= wflg, then W [e] - wflg is the size of the set - * |Le \ Lme|, in terms of nonzeros (the sum of ABS (Nv [i]) for - * each principal variable i that is both in the pattern of - * element e and NOT in the pattern of the current pivot element, - * me). - * if wflg > W [e] > 0, then e is not absorbed and has not yet been - * seen in the scan of the element lists in the computation of - * |Le\Lme| in Scan 1 below. - * - * for variables: - * during supervariable detection, if W [j] != wflg then j is - * not in the pattern of variable i. - * - * The W array is initialized by setting W [i] = 1 for all i, and by - * setting wflg = 2. It is reinitialized if wflg becomes too large (to - * ensure that wflg+n does not cause integer overflow). - - * ---------------------------------------------------------------------------- - * LOCAL INTEGERS: - * ---------------------------------------------------------------------------- - */ - - Int deg, degme, dext, lemax, e, elenme, eln, i, ilast, inext, j, - jlast, jnext, k, knt1, knt2, knt3, lenj, ln, me, mindeg, nel, nleft, - nvi, nvj, nvpiv, slenme, wbig, we, wflg, wnvi, ok, ndense, ncmpa, - dense, aggressive ; - - unsigned Int hash ; /* unsigned, so that hash % n is well defined.*/ - -/* - * deg: the degree of a variable or element - * degme: size, |Lme|, of the current element, me (= Degree [me]) - * dext: external degree, |Le \ Lme|, of some element e - * lemax: largest |Le| seen so far (called dmax in Fortran version) - * e: an element - * elenme: the length, Elen [me], of element list of pivotal variable - * eln: the length, Elen [...], of an element list - * hash: the computed value of the hash function - * i: a supervariable - * ilast: the entry in a link list preceding i - * inext: the entry in a link list following i - * j: a supervariable - * jlast: the entry in a link list preceding j - * jnext: the entry in a link list, or path, following j - * k: the pivot order of an element or variable - * knt1: loop counter used during element construction - * knt2: loop counter used during element construction - * knt3: loop counter used during compression - * lenj: Len [j] - * ln: length of a supervariable list - * me: current supervariable being eliminated, and the current - * element created by eliminating that supervariable - * mindeg: current minimum degree - * nel: number of pivots selected so far - * nleft: n - nel, the number of nonpivotal rows/columns remaining - * nvi: the number of variables in a supervariable i (= Nv [i]) - * nvj: the number of variables in a supervariable j (= Nv [j]) - * nvpiv: number of pivots in current element - * slenme: number of variables in variable list of pivotal variable - * wbig: = (INT_MAX - n) for the int version, (SuiteSparse_long_max - n) - * for the SuiteSparse_long version. wflg is not allowed to - * be >= wbig. - * we: W [e] - * wflg: used for flagging the W array. See description of Iw. - * wnvi: wflg - Nv [i] - * x: either a supervariable or an element - * - * ok: true if supervariable j can be absorbed into i - * ndense: number of "dense" rows/columns - * dense: rows/columns with initial degree > dense are considered "dense" - * aggressive: true if aggressive absorption is being performed - * ncmpa: number of garbage collections - - * ---------------------------------------------------------------------------- - * LOCAL DOUBLES, used for statistical output only (except for alpha): - * ---------------------------------------------------------------------------- - */ - - double f, r, ndiv, s, nms_lu, nms_ldl, dmax, alpha, lnz, lnzme ; - -/* - * f: nvpiv - * r: degme + nvpiv - * ndiv: number of divisions for LU or LDL' factorizations - * s: number of multiply-subtract pairs for LU factorization, for the - * current element me - * nms_lu number of multiply-subtract pairs for LU factorization - * nms_ldl number of multiply-subtract pairs for LDL' factorization - * dmax: the largest number of entries in any column of L, including the - * diagonal - * alpha: "dense" degree ratio - * lnz: the number of nonzeros in L (excluding the diagonal) - * lnzme: the number of nonzeros in L (excl. the diagonal) for the - * current element me - - * ---------------------------------------------------------------------------- - * LOCAL "POINTERS" (indices into the Iw array) - * ---------------------------------------------------------------------------- -*/ - - Int p, p1, p2, p3, p4, pdst, pend, pj, pme, pme1, pme2, pn, psrc ; - -/* - * Any parameter (Pe [...] or pfree) or local variable starting with "p" (for - * Pointer) is an index into Iw, and all indices into Iw use variables starting - * with "p." The only exception to this rule is the iwlen input argument. - * - * p: pointer into lots of things - * p1: Pe [i] for some variable i (start of element list) - * p2: Pe [i] + Elen [i] - 1 for some variable i - * p3: index of first supervariable in clean list - * p4: - * pdst: destination pointer, for compression - * pend: end of memory to compress - * pj: pointer into an element or variable - * pme: pointer into the current element (pme1...pme2) - * pme1: the current element, me, is stored in Iw [pme1...pme2] - * pme2: the end of the current element - * pn: pointer into a "clean" variable, also used to compress - * psrc: source pointer, for compression -*/ - -/* ========================================================================= */ -/* INITIALIZATIONS */ -/* ========================================================================= */ - - /* Note that this restriction on iwlen is slightly more restrictive than - * what is actually required in AMD_2. AMD_2 can operate with no elbow - * room at all, but it will be slow. For better performance, at least - * size-n elbow room is enforced. */ - ASSERT (iwlen >= pfree + n) ; - ASSERT (n > 0) ; - - /* initialize output statistics */ - lnz = 0 ; - ndiv = 0 ; - nms_lu = 0 ; - nms_ldl = 0 ; - dmax = 1 ; - me = EMPTY ; - - mindeg = 0 ; - ncmpa = 0 ; - nel = 0 ; - lemax = 0 ; - - /* get control parameters */ - if (Control != (double *) NULL) - { - alpha = Control [AMD_DENSE] ; - aggressive = (Control [AMD_AGGRESSIVE] != 0) ; - } - else - { - alpha = AMD_DEFAULT_DENSE ; - aggressive = AMD_DEFAULT_AGGRESSIVE ; - } - /* Note: if alpha is NaN, this is undefined: */ - if (alpha < 0) - { - /* only remove completely dense rows/columns */ - dense = n-2 ; - } - else - { - dense = alpha * sqrt ((double) n) ; - } - dense = MAX (16, dense) ; - dense = MIN (n, dense) ; - AMD_DEBUG1 (("\n\nAMD (debug), alpha %g, aggr. "ID"\n", - alpha, aggressive)) ; - - for (i = 0 ; i < n ; i++) - { - Last [i] = EMPTY ; - Head [i] = EMPTY ; - Next [i] = EMPTY ; - /* if separate Hhead array is used for hash buckets: * - Hhead [i] = EMPTY ; - */ - Nv [i] = 1 ; - W [i] = 1 ; - Elen [i] = 0 ; - Degree [i] = Len [i] ; - } - -#ifndef NDEBUG - AMD_DEBUG1 (("\n======Nel "ID" initial\n", nel)) ; - AMD_dump (n, Pe, Iw, Len, iwlen, pfree, Nv, Next, Last, - Head, Elen, Degree, W, -1) ; -#endif - - /* initialize wflg */ - wbig = Int_MAX - n ; - wflg = clear_flag (0, wbig, W, n) ; - - /* --------------------------------------------------------------------- */ - /* initialize degree lists and eliminate dense and empty rows */ - /* --------------------------------------------------------------------- */ - - ndense = 0 ; - - for (i = 0 ; i < n ; i++) - { - deg = Degree [i] ; - ASSERT (deg >= 0 && deg < n) ; - if (deg == 0) - { - - /* ------------------------------------------------------------- - * we have a variable that can be eliminated at once because - * there is no off-diagonal non-zero in its row. Note that - * Nv [i] = 1 for an empty variable i. It is treated just - * the same as an eliminated element i. - * ------------------------------------------------------------- */ - - Elen [i] = FLIP (1) ; - nel++ ; - Pe [i] = EMPTY ; - W [i] = 0 ; - - } - else if (deg > dense) - { - - /* ------------------------------------------------------------- - * Dense variables are not treated as elements, but as unordered, - * non-principal variables that have no parent. They do not take - * part in the postorder, since Nv [i] = 0. Note that the Fortran - * version does not have this option. - * ------------------------------------------------------------- */ - - AMD_DEBUG1 (("Dense node "ID" degree "ID"\n", i, deg)) ; - ndense++ ; - Nv [i] = 0 ; /* do not postorder this node */ - Elen [i] = EMPTY ; - nel++ ; - Pe [i] = EMPTY ; - - } - else - { - - /* ------------------------------------------------------------- - * place i in the degree list corresponding to its degree - * ------------------------------------------------------------- */ - - inext = Head [deg] ; - ASSERT (inext >= EMPTY && inext < n) ; - if (inext != EMPTY) Last [inext] = i ; - Next [i] = inext ; - Head [deg] = i ; - - } - } - -/* ========================================================================= */ -/* WHILE (selecting pivots) DO */ -/* ========================================================================= */ - - while (nel < n) - { - -#ifndef NDEBUG - AMD_DEBUG1 (("\n======Nel "ID"\n", nel)) ; - if (AMD_debug >= 2) - { - AMD_dump (n, Pe, Iw, Len, iwlen, pfree, Nv, Next, - Last, Head, Elen, Degree, W, nel) ; - } -#endif - -/* ========================================================================= */ -/* GET PIVOT OF MINIMUM DEGREE */ -/* ========================================================================= */ - - /* ----------------------------------------------------------------- */ - /* find next supervariable for elimination */ - /* ----------------------------------------------------------------- */ - - ASSERT (mindeg >= 0 && mindeg < n) ; - for (deg = mindeg ; deg < n ; deg++) - { - me = Head [deg] ; - if (me != EMPTY) break ; - } - mindeg = deg ; - ASSERT (me >= 0 && me < n) ; - AMD_DEBUG1 (("=================me: "ID"\n", me)) ; - - /* ----------------------------------------------------------------- */ - /* remove chosen variable from link list */ - /* ----------------------------------------------------------------- */ - - inext = Next [me] ; - ASSERT (inext >= EMPTY && inext < n) ; - if (inext != EMPTY) Last [inext] = EMPTY ; - Head [deg] = inext ; - - /* ----------------------------------------------------------------- */ - /* me represents the elimination of pivots nel to nel+Nv[me]-1. */ - /* place me itself as the first in this set. */ - /* ----------------------------------------------------------------- */ - - elenme = Elen [me] ; - nvpiv = Nv [me] ; - ASSERT (nvpiv > 0) ; - nel += nvpiv ; - -/* ========================================================================= */ -/* CONSTRUCT NEW ELEMENT */ -/* ========================================================================= */ - - /* ----------------------------------------------------------------- - * At this point, me is the pivotal supervariable. It will be - * converted into the current element. Scan list of the pivotal - * supervariable, me, setting tree pointers and constructing new list - * of supervariables for the new element, me. p is a pointer to the - * current position in the old list. - * ----------------------------------------------------------------- */ - - /* flag the variable "me" as being in Lme by negating Nv [me] */ - Nv [me] = -nvpiv ; - degme = 0 ; - ASSERT (Pe [me] >= 0 && Pe [me] < iwlen) ; - - if (elenme == 0) - { - - /* ------------------------------------------------------------- */ - /* construct the new element in place */ - /* ------------------------------------------------------------- */ - - pme1 = Pe [me] ; - pme2 = pme1 - 1 ; - - for (p = pme1 ; p <= pme1 + Len [me] - 1 ; p++) - { - i = Iw [p] ; - ASSERT (i >= 0 && i < n && Nv [i] >= 0) ; - nvi = Nv [i] ; - if (nvi > 0) - { - - /* ----------------------------------------------------- */ - /* i is a principal variable not yet placed in Lme. */ - /* store i in new list */ - /* ----------------------------------------------------- */ - - /* flag i as being in Lme by negating Nv [i] */ - degme += nvi ; - Nv [i] = -nvi ; - Iw [++pme2] = i ; - - /* ----------------------------------------------------- */ - /* remove variable i from degree list. */ - /* ----------------------------------------------------- */ - - ilast = Last [i] ; - inext = Next [i] ; - ASSERT (ilast >= EMPTY && ilast < n) ; - ASSERT (inext >= EMPTY && inext < n) ; - if (inext != EMPTY) Last [inext] = ilast ; - if (ilast != EMPTY) - { - Next [ilast] = inext ; - } - else - { - /* i is at the head of the degree list */ - ASSERT (Degree [i] >= 0 && Degree [i] < n) ; - Head [Degree [i]] = inext ; - } - } - } - } - else - { - - /* ------------------------------------------------------------- */ - /* construct the new element in empty space, Iw [pfree ...] */ - /* ------------------------------------------------------------- */ - - p = Pe [me] ; - pme1 = pfree ; - slenme = Len [me] - elenme ; - - for (knt1 = 1 ; knt1 <= elenme + 1 ; knt1++) - { - - if (knt1 > elenme) - { - /* search the supervariables in me. */ - e = me ; - pj = p ; - ln = slenme ; - AMD_DEBUG2 (("Search sv: "ID" "ID" "ID"\n", me,pj,ln)) ; - } - else - { - /* search the elements in me. */ - e = Iw [p++] ; - ASSERT (e >= 0 && e < n) ; - pj = Pe [e] ; - ln = Len [e] ; - AMD_DEBUG2 (("Search element e "ID" in me "ID"\n", e,me)) ; - ASSERT (Elen [e] < EMPTY && W [e] > 0 && pj >= 0) ; - } - ASSERT (ln >= 0 && (ln == 0 || (pj >= 0 && pj < iwlen))) ; - - /* --------------------------------------------------------- - * search for different supervariables and add them to the - * new list, compressing when necessary. this loop is - * executed once for each element in the list and once for - * all the supervariables in the list. - * --------------------------------------------------------- */ - - for (knt2 = 1 ; knt2 <= ln ; knt2++) - { - i = Iw [pj++] ; - ASSERT (i >= 0 && i < n && (i == me || Elen [i] >= EMPTY)); - nvi = Nv [i] ; - AMD_DEBUG2 ((": "ID" "ID" "ID" "ID"\n", - i, Elen [i], Nv [i], wflg)) ; - - if (nvi > 0) - { - - /* ------------------------------------------------- */ - /* compress Iw, if necessary */ - /* ------------------------------------------------- */ - - if (pfree >= iwlen) - { - - AMD_DEBUG1 (("GARBAGE COLLECTION\n")) ; - - /* prepare for compressing Iw by adjusting pointers - * and lengths so that the lists being searched in - * the inner and outer loops contain only the - * remaining entries. */ - - Pe [me] = p ; - Len [me] -= knt1 ; - /* check if nothing left of supervariable me */ - if (Len [me] == 0) Pe [me] = EMPTY ; - Pe [e] = pj ; - Len [e] = ln - knt2 ; - /* nothing left of element e */ - if (Len [e] == 0) Pe [e] = EMPTY ; - - ncmpa++ ; /* one more garbage collection */ - - /* store first entry of each object in Pe */ - /* FLIP the first entry in each object */ - for (j = 0 ; j < n ; j++) - { - pn = Pe [j] ; - if (pn >= 0) - { - ASSERT (pn >= 0 && pn < iwlen) ; - Pe [j] = Iw [pn] ; - Iw [pn] = FLIP (j) ; - } - } - - /* psrc/pdst point to source/destination */ - psrc = 0 ; - pdst = 0 ; - pend = pme1 - 1 ; - - while (psrc <= pend) - { - /* search for next FLIP'd entry */ - j = FLIP (Iw [psrc++]) ; - if (j >= 0) - { - AMD_DEBUG2 (("Got object j: "ID"\n", j)) ; - Iw [pdst] = Pe [j] ; - Pe [j] = pdst++ ; - lenj = Len [j] ; - /* copy from source to destination */ - for (knt3 = 0 ; knt3 <= lenj - 2 ; knt3++) - { - Iw [pdst++] = Iw [psrc++] ; - } - } - } - - /* move the new partially-constructed element */ - p1 = pdst ; - for (psrc = pme1 ; psrc <= pfree-1 ; psrc++) - { - Iw [pdst++] = Iw [psrc] ; - } - pme1 = p1 ; - pfree = pdst ; - pj = Pe [e] ; - p = Pe [me] ; - - } - - /* ------------------------------------------------- */ - /* i is a principal variable not yet placed in Lme */ - /* store i in new list */ - /* ------------------------------------------------- */ - - /* flag i as being in Lme by negating Nv [i] */ - degme += nvi ; - Nv [i] = -nvi ; - Iw [pfree++] = i ; - AMD_DEBUG2 ((" s: "ID" nv "ID"\n", i, Nv [i])); - - /* ------------------------------------------------- */ - /* remove variable i from degree link list */ - /* ------------------------------------------------- */ - - ilast = Last [i] ; - inext = Next [i] ; - ASSERT (ilast >= EMPTY && ilast < n) ; - ASSERT (inext >= EMPTY && inext < n) ; - if (inext != EMPTY) Last [inext] = ilast ; - if (ilast != EMPTY) - { - Next [ilast] = inext ; - } - else - { - /* i is at the head of the degree list */ - ASSERT (Degree [i] >= 0 && Degree [i] < n) ; - Head [Degree [i]] = inext ; - } - } - } - - if (e != me) - { - /* set tree pointer and flag to indicate element e is - * absorbed into new element me (the parent of e is me) */ - AMD_DEBUG1 ((" Element "ID" => "ID"\n", e, me)) ; - Pe [e] = FLIP (me) ; - W [e] = 0 ; - } - } - - pme2 = pfree - 1 ; - } - - /* ----------------------------------------------------------------- */ - /* me has now been converted into an element in Iw [pme1..pme2] */ - /* ----------------------------------------------------------------- */ - - /* degme holds the external degree of new element */ - Degree [me] = degme ; - Pe [me] = pme1 ; - Len [me] = pme2 - pme1 + 1 ; - ASSERT (Pe [me] >= 0 && Pe [me] < iwlen) ; - - Elen [me] = FLIP (nvpiv + degme) ; - /* FLIP (Elen (me)) is now the degree of pivot (including - * diagonal part). */ - -#ifndef NDEBUG - AMD_DEBUG2 (("New element structure: length= "ID"\n", pme2-pme1+1)) ; - for (pme = pme1 ; pme <= pme2 ; pme++) AMD_DEBUG3 ((" "ID"", Iw[pme])); - AMD_DEBUG3 (("\n")) ; -#endif - - /* ----------------------------------------------------------------- */ - /* make sure that wflg is not too large. */ - /* ----------------------------------------------------------------- */ - - /* With the current value of wflg, wflg+n must not cause integer - * overflow */ - - wflg = clear_flag (wflg, wbig, W, n) ; - -/* ========================================================================= */ -/* COMPUTE (W [e] - wflg) = |Le\Lme| FOR ALL ELEMENTS */ -/* ========================================================================= */ - - /* ----------------------------------------------------------------- - * Scan 1: compute the external degrees of previous elements with - * respect to the current element. That is: - * (W [e] - wflg) = |Le \ Lme| - * for each element e that appears in any supervariable in Lme. The - * notation Le refers to the pattern (list of supervariables) of a - * previous element e, where e is not yet absorbed, stored in - * Iw [Pe [e] + 1 ... Pe [e] + Len [e]]. The notation Lme - * refers to the pattern of the current element (stored in - * Iw [pme1..pme2]). If aggressive absorption is enabled, and - * (W [e] - wflg) becomes zero, then the element e will be absorbed - * in Scan 2. - * ----------------------------------------------------------------- */ - - AMD_DEBUG2 (("me: ")) ; - for (pme = pme1 ; pme <= pme2 ; pme++) - { - i = Iw [pme] ; - ASSERT (i >= 0 && i < n) ; - eln = Elen [i] ; - AMD_DEBUG3 ((""ID" Elen "ID": \n", i, eln)) ; - if (eln > 0) - { - /* note that Nv [i] has been negated to denote i in Lme: */ - nvi = -Nv [i] ; - ASSERT (nvi > 0 && Pe [i] >= 0 && Pe [i] < iwlen) ; - wnvi = wflg - nvi ; - for (p = Pe [i] ; p <= Pe [i] + eln - 1 ; p++) - { - e = Iw [p] ; - ASSERT (e >= 0 && e < n) ; - we = W [e] ; - AMD_DEBUG4 ((" e "ID" we "ID" ", e, we)) ; - if (we >= wflg) - { - /* unabsorbed element e has been seen in this loop */ - AMD_DEBUG4 ((" unabsorbed, first time seen")) ; - we -= nvi ; - } - else if (we != 0) - { - /* e is an unabsorbed element */ - /* this is the first we have seen e in all of Scan 1 */ - AMD_DEBUG4 ((" unabsorbed")) ; - we = Degree [e] + wnvi ; - } - AMD_DEBUG4 (("\n")) ; - W [e] = we ; - } - } - } - AMD_DEBUG2 (("\n")) ; - -/* ========================================================================= */ -/* DEGREE UPDATE AND ELEMENT ABSORPTION */ -/* ========================================================================= */ - - /* ----------------------------------------------------------------- - * Scan 2: for each i in Lme, sum up the degree of Lme (which is - * degme), plus the sum of the external degrees of each Le for the - * elements e appearing within i, plus the supervariables in i. - * Place i in hash list. - * ----------------------------------------------------------------- */ - - for (pme = pme1 ; pme <= pme2 ; pme++) - { - i = Iw [pme] ; - ASSERT (i >= 0 && i < n && Nv [i] < 0 && Elen [i] >= 0) ; - AMD_DEBUG2 (("Updating: i "ID" "ID" "ID"\n", i, Elen[i], Len [i])); - p1 = Pe [i] ; - p2 = p1 + Elen [i] - 1 ; - pn = p1 ; - hash = 0 ; - deg = 0 ; - ASSERT (p1 >= 0 && p1 < iwlen && p2 >= -1 && p2 < iwlen) ; - - /* ------------------------------------------------------------- */ - /* scan the element list associated with supervariable i */ - /* ------------------------------------------------------------- */ - - /* UMFPACK/MA38-style approximate degree: */ - if (aggressive) - { - for (p = p1 ; p <= p2 ; p++) - { - e = Iw [p] ; - ASSERT (e >= 0 && e < n) ; - we = W [e] ; - if (we != 0) - { - /* e is an unabsorbed element */ - /* dext = | Le \ Lme | */ - dext = we - wflg ; - if (dext > 0) - { - deg += dext ; - Iw [pn++] = e ; - hash += e ; - AMD_DEBUG4 ((" e: "ID" hash = "ID"\n",e,hash)) ; - } - else - { - /* external degree of e is zero, absorb e into me*/ - AMD_DEBUG1 ((" Element "ID" =>"ID" (aggressive)\n", - e, me)) ; - ASSERT (dext == 0) ; - Pe [e] = FLIP (me) ; - W [e] = 0 ; - } - } - } - } - else - { - for (p = p1 ; p <= p2 ; p++) - { - e = Iw [p] ; - ASSERT (e >= 0 && e < n) ; - we = W [e] ; - if (we != 0) - { - /* e is an unabsorbed element */ - dext = we - wflg ; - ASSERT (dext >= 0) ; - deg += dext ; - Iw [pn++] = e ; - hash += e ; - AMD_DEBUG4 ((" e: "ID" hash = "ID"\n",e,hash)) ; - } - } - } - - /* count the number of elements in i (including me): */ - Elen [i] = pn - p1 + 1 ; - - /* ------------------------------------------------------------- */ - /* scan the supervariables in the list associated with i */ - /* ------------------------------------------------------------- */ - - /* The bulk of the AMD run time is typically spent in this loop, - * particularly if the matrix has many dense rows that are not - * removed prior to ordering. */ - p3 = pn ; - p4 = p1 + Len [i] ; - for (p = p2 + 1 ; p < p4 ; p++) - { - j = Iw [p] ; - ASSERT (j >= 0 && j < n) ; - nvj = Nv [j] ; - if (nvj > 0) - { - /* j is unabsorbed, and not in Lme. */ - /* add to degree and add to new list */ - deg += nvj ; - Iw [pn++] = j ; - hash += j ; - AMD_DEBUG4 ((" s: "ID" hash "ID" Nv[j]= "ID"\n", - j, hash, nvj)) ; - } - } - - /* ------------------------------------------------------------- */ - /* update the degree and check for mass elimination */ - /* ------------------------------------------------------------- */ - - /* with aggressive absorption, deg==0 is identical to the - * Elen [i] == 1 && p3 == pn test, below. */ - ASSERT (IMPLIES (aggressive, (deg==0) == (Elen[i]==1 && p3==pn))) ; - - if (Elen [i] == 1 && p3 == pn) - { - - /* --------------------------------------------------------- */ - /* mass elimination */ - /* --------------------------------------------------------- */ - - /* There is nothing left of this node except for an edge to - * the current pivot element. Elen [i] is 1, and there are - * no variables adjacent to node i. Absorb i into the - * current pivot element, me. Note that if there are two or - * more mass eliminations, fillin due to mass elimination is - * possible within the nvpiv-by-nvpiv pivot block. It is this - * step that causes AMD's analysis to be an upper bound. - * - * The reason is that the selected pivot has a lower - * approximate degree than the true degree of the two mass - * eliminated nodes. There is no edge between the two mass - * eliminated nodes. They are merged with the current pivot - * anyway. - * - * No fillin occurs in the Schur complement, in any case, - * and this effect does not decrease the quality of the - * ordering itself, just the quality of the nonzero and - * flop count analysis. It also means that the post-ordering - * is not an exact elimination tree post-ordering. */ - - AMD_DEBUG1 ((" MASS i "ID" => parent e "ID"\n", i, me)) ; - Pe [i] = FLIP (me) ; - nvi = -Nv [i] ; - degme -= nvi ; - nvpiv += nvi ; - nel += nvi ; - Nv [i] = 0 ; - Elen [i] = EMPTY ; - - } - else - { - - /* --------------------------------------------------------- */ - /* update the upper-bound degree of i */ - /* --------------------------------------------------------- */ - - /* the following degree does not yet include the size - * of the current element, which is added later: */ - - Degree [i] = MIN (Degree [i], deg) ; - - /* --------------------------------------------------------- */ - /* add me to the list for i */ - /* --------------------------------------------------------- */ - - /* move first supervariable to end of list */ - Iw [pn] = Iw [p3] ; - /* move first element to end of element part of list */ - Iw [p3] = Iw [p1] ; - /* add new element, me, to front of list. */ - Iw [p1] = me ; - /* store the new length of the list in Len [i] */ - Len [i] = pn - p1 + 1 ; - - /* --------------------------------------------------------- */ - /* place in hash bucket. Save hash key of i in Last [i]. */ - /* --------------------------------------------------------- */ - - /* NOTE: this can fail if hash is negative, because the ANSI C - * standard does not define a % b when a and/or b are negative. - * That's why hash is defined as an unsigned Int, to avoid this - * problem. */ - hash = hash % n ; - ASSERT (((Int) hash) >= 0 && ((Int) hash) < n) ; - - /* if the Hhead array is not used: */ - j = Head [hash] ; - if (j <= EMPTY) - { - /* degree list is empty, hash head is FLIP (j) */ - Next [i] = FLIP (j) ; - Head [hash] = FLIP (i) ; - } - else - { - /* degree list is not empty, use Last [Head [hash]] as - * hash head. */ - Next [i] = Last [j] ; - Last [j] = i ; - } - - /* if a separate Hhead array is used: * - Next [i] = Hhead [hash] ; - Hhead [hash] = i ; - */ - - Last [i] = hash ; - } - } - - Degree [me] = degme ; - - /* ----------------------------------------------------------------- */ - /* Clear the counter array, W [...], by incrementing wflg. */ - /* ----------------------------------------------------------------- */ - - /* make sure that wflg+n does not cause integer overflow */ - lemax = MAX (lemax, degme) ; - wflg += lemax ; - wflg = clear_flag (wflg, wbig, W, n) ; - /* at this point, W [0..n-1] < wflg holds */ - -/* ========================================================================= */ -/* SUPERVARIABLE DETECTION */ -/* ========================================================================= */ - - AMD_DEBUG1 (("Detecting supervariables:\n")) ; - for (pme = pme1 ; pme <= pme2 ; pme++) - { - i = Iw [pme] ; - ASSERT (i >= 0 && i < n) ; - AMD_DEBUG2 (("Consider i "ID" nv "ID"\n", i, Nv [i])) ; - if (Nv [i] < 0) - { - /* i is a principal variable in Lme */ - - /* --------------------------------------------------------- - * examine all hash buckets with 2 or more variables. We do - * this by examing all unique hash keys for supervariables in - * the pattern Lme of the current element, me - * --------------------------------------------------------- */ - - /* let i = head of hash bucket, and empty the hash bucket */ - ASSERT (Last [i] >= 0 && Last [i] < n) ; - hash = Last [i] ; - - /* if Hhead array is not used: */ - j = Head [hash] ; - if (j == EMPTY) - { - /* hash bucket and degree list are both empty */ - i = EMPTY ; - } - else if (j < EMPTY) - { - /* degree list is empty */ - i = FLIP (j) ; - Head [hash] = EMPTY ; - } - else - { - /* degree list is not empty, restore Last [j] of head j */ - i = Last [j] ; - Last [j] = EMPTY ; - } - - /* if separate Hhead array is used: * - i = Hhead [hash] ; - Hhead [hash] = EMPTY ; - */ - - ASSERT (i >= EMPTY && i < n) ; - AMD_DEBUG2 (("----i "ID" hash "ID"\n", i, hash)) ; - - while (i != EMPTY && Next [i] != EMPTY) - { - - /* ----------------------------------------------------- - * this bucket has one or more variables following i. - * scan all of them to see if i can absorb any entries - * that follow i in hash bucket. Scatter i into w. - * ----------------------------------------------------- */ - - ln = Len [i] ; - eln = Elen [i] ; - ASSERT (ln >= 0 && eln >= 0) ; - ASSERT (Pe [i] >= 0 && Pe [i] < iwlen) ; - /* do not flag the first element in the list (me) */ - for (p = Pe [i] + 1 ; p <= Pe [i] + ln - 1 ; p++) - { - ASSERT (Iw [p] >= 0 && Iw [p] < n) ; - W [Iw [p]] = wflg ; - } - - /* ----------------------------------------------------- */ - /* scan every other entry j following i in bucket */ - /* ----------------------------------------------------- */ - - jlast = i ; - j = Next [i] ; - ASSERT (j >= EMPTY && j < n) ; - - while (j != EMPTY) - { - /* ------------------------------------------------- */ - /* check if j and i have identical nonzero pattern */ - /* ------------------------------------------------- */ - - AMD_DEBUG3 (("compare i "ID" and j "ID"\n", i,j)) ; - - /* check if i and j have the same Len and Elen */ - ASSERT (Len [j] >= 0 && Elen [j] >= 0) ; - ASSERT (Pe [j] >= 0 && Pe [j] < iwlen) ; - ok = (Len [j] == ln) && (Elen [j] == eln) ; - /* skip the first element in the list (me) */ - for (p = Pe [j] + 1 ; ok && p <= Pe [j] + ln - 1 ; p++) - { - ASSERT (Iw [p] >= 0 && Iw [p] < n) ; - if (W [Iw [p]] != wflg) ok = 0 ; - } - if (ok) - { - /* --------------------------------------------- */ - /* found it! j can be absorbed into i */ - /* --------------------------------------------- */ - - AMD_DEBUG1 (("found it! j "ID" => i "ID"\n", j,i)); - Pe [j] = FLIP (i) ; - /* both Nv [i] and Nv [j] are negated since they */ - /* are in Lme, and the absolute values of each */ - /* are the number of variables in i and j: */ - Nv [i] += Nv [j] ; - Nv [j] = 0 ; - Elen [j] = EMPTY ; - /* delete j from hash bucket */ - ASSERT (j != Next [j]) ; - j = Next [j] ; - Next [jlast] = j ; - - } - else - { - /* j cannot be absorbed into i */ - jlast = j ; - ASSERT (j != Next [j]) ; - j = Next [j] ; - } - ASSERT (j >= EMPTY && j < n) ; - } - - /* ----------------------------------------------------- - * no more variables can be absorbed into i - * go to next i in bucket and clear flag array - * ----------------------------------------------------- */ - - wflg++ ; - i = Next [i] ; - ASSERT (i >= EMPTY && i < n) ; - - } - } - } - AMD_DEBUG2 (("detect done\n")) ; - -/* ========================================================================= */ -/* RESTORE DEGREE LISTS AND REMOVE NONPRINCIPAL SUPERVARIABLES FROM ELEMENT */ -/* ========================================================================= */ - - p = pme1 ; - nleft = n - nel ; - for (pme = pme1 ; pme <= pme2 ; pme++) - { - i = Iw [pme] ; - ASSERT (i >= 0 && i < n) ; - nvi = -Nv [i] ; - AMD_DEBUG3 (("Restore i "ID" "ID"\n", i, nvi)) ; - if (nvi > 0) - { - /* i is a principal variable in Lme */ - /* restore Nv [i] to signify that i is principal */ - Nv [i] = nvi ; - - /* --------------------------------------------------------- */ - /* compute the external degree (add size of current element) */ - /* --------------------------------------------------------- */ - - deg = Degree [i] + degme - nvi ; - deg = MIN (deg, nleft - nvi) ; - ASSERT (IMPLIES (aggressive, deg > 0) && deg >= 0 && deg < n) ; - - /* --------------------------------------------------------- */ - /* place the supervariable at the head of the degree list */ - /* --------------------------------------------------------- */ - - inext = Head [deg] ; - ASSERT (inext >= EMPTY && inext < n) ; - if (inext != EMPTY) Last [inext] = i ; - Next [i] = inext ; - Last [i] = EMPTY ; - Head [deg] = i ; - - /* --------------------------------------------------------- */ - /* save the new degree, and find the minimum degree */ - /* --------------------------------------------------------- */ - - mindeg = MIN (mindeg, deg) ; - Degree [i] = deg ; - - /* --------------------------------------------------------- */ - /* place the supervariable in the element pattern */ - /* --------------------------------------------------------- */ - - Iw [p++] = i ; - - } - } - AMD_DEBUG2 (("restore done\n")) ; - -/* ========================================================================= */ -/* FINALIZE THE NEW ELEMENT */ -/* ========================================================================= */ - - AMD_DEBUG2 (("ME = "ID" DONE\n", me)) ; - Nv [me] = nvpiv ; - /* save the length of the list for the new element me */ - Len [me] = p - pme1 ; - if (Len [me] == 0) - { - /* there is nothing left of the current pivot element */ - /* it is a root of the assembly tree */ - Pe [me] = EMPTY ; - W [me] = 0 ; - } - if (elenme != 0) - { - /* element was not constructed in place: deallocate part of */ - /* it since newly nonprincipal variables may have been removed */ - pfree = p ; - } - - /* The new element has nvpiv pivots and the size of the contribution - * block for a multifrontal method is degme-by-degme, not including - * the "dense" rows/columns. If the "dense" rows/columns are included, - * the frontal matrix is no larger than - * (degme+ndense)-by-(degme+ndense). - */ - - if (Info != (double *) NULL) - { - f = nvpiv ; - r = degme + ndense ; - dmax = MAX (dmax, f + r) ; - - /* number of nonzeros in L (excluding the diagonal) */ - lnzme = f*r + (f-1)*f/2 ; - lnz += lnzme ; - - /* number of divide operations for LDL' and for LU */ - ndiv += lnzme ; - - /* number of multiply-subtract pairs for LU */ - s = f*r*r + r*(f-1)*f + (f-1)*f*(2*f-1)/6 ; - nms_lu += s ; - - /* number of multiply-subtract pairs for LDL' */ - nms_ldl += (s + lnzme)/2 ; - } - -#ifndef NDEBUG - AMD_DEBUG2 (("finalize done nel "ID" n "ID"\n ::::\n", nel, n)) ; - for (pme = Pe [me] ; pme <= Pe [me] + Len [me] - 1 ; pme++) - { - AMD_DEBUG3 ((" "ID"", Iw [pme])) ; - } - AMD_DEBUG3 (("\n")) ; -#endif - - } - -/* ========================================================================= */ -/* DONE SELECTING PIVOTS */ -/* ========================================================================= */ - - if (Info != (double *) NULL) - { - - /* count the work to factorize the ndense-by-ndense submatrix */ - f = ndense ; - dmax = MAX (dmax, (double) ndense) ; - - /* number of nonzeros in L (excluding the diagonal) */ - lnzme = (f-1)*f/2 ; - lnz += lnzme ; - - /* number of divide operations for LDL' and for LU */ - ndiv += lnzme ; - - /* number of multiply-subtract pairs for LU */ - s = (f-1)*f*(2*f-1)/6 ; - nms_lu += s ; - - /* number of multiply-subtract pairs for LDL' */ - nms_ldl += (s + lnzme)/2 ; - - /* number of nz's in L (excl. diagonal) */ - Info [AMD_LNZ] = lnz ; - - /* number of divide ops for LU and LDL' */ - Info [AMD_NDIV] = ndiv ; - - /* number of multiply-subtract pairs for LDL' */ - Info [AMD_NMULTSUBS_LDL] = nms_ldl ; - - /* number of multiply-subtract pairs for LU */ - Info [AMD_NMULTSUBS_LU] = nms_lu ; - - /* number of "dense" rows/columns */ - Info [AMD_NDENSE] = ndense ; - - /* largest front is dmax-by-dmax */ - Info [AMD_DMAX] = dmax ; - - /* number of garbage collections in AMD */ - Info [AMD_NCMPA] = ncmpa ; - - /* successful ordering */ - Info [AMD_STATUS] = AMD_OK ; - } - -/* ========================================================================= */ -/* POST-ORDERING */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- - * Variables at this point: - * - * Pe: holds the elimination tree. The parent of j is FLIP (Pe [j]), - * or EMPTY if j is a root. The tree holds both elements and - * non-principal (unordered) variables absorbed into them. - * Dense variables are non-principal and unordered. - * - * Elen: holds the size of each element, including the diagonal part. - * FLIP (Elen [e]) > 0 if e is an element. For unordered - * variables i, Elen [i] is EMPTY. - * - * Nv: Nv [e] > 0 is the number of pivots represented by the element e. - * For unordered variables i, Nv [i] is zero. - * - * Contents no longer needed: - * W, Iw, Len, Degree, Head, Next, Last. - * - * The matrix itself has been destroyed. - * - * n: the size of the matrix. - * No other scalars needed (pfree, iwlen, etc.) - * ------------------------------------------------------------------------- */ - - /* restore Pe */ - for (i = 0 ; i < n ; i++) - { - Pe [i] = FLIP (Pe [i]) ; - } - - /* restore Elen, for output information, and for postordering */ - for (i = 0 ; i < n ; i++) - { - Elen [i] = FLIP (Elen [i]) ; - } - -/* Now the parent of j is Pe [j], or EMPTY if j is a root. Elen [e] > 0 - * is the size of element e. Elen [i] is EMPTY for unordered variable i. */ - -#ifndef NDEBUG - AMD_DEBUG2 (("\nTree:\n")) ; - for (i = 0 ; i < n ; i++) - { - AMD_DEBUG2 ((" "ID" parent: "ID" ", i, Pe [i])) ; - ASSERT (Pe [i] >= EMPTY && Pe [i] < n) ; - if (Nv [i] > 0) - { - /* this is an element */ - e = i ; - AMD_DEBUG2 ((" element, size is "ID"\n", Elen [i])) ; - ASSERT (Elen [e] > 0) ; - } - AMD_DEBUG2 (("\n")) ; - } - AMD_DEBUG2 (("\nelements:\n")) ; - for (e = 0 ; e < n ; e++) - { - if (Nv [e] > 0) - { - AMD_DEBUG3 (("Element e= "ID" size "ID" nv "ID" \n", e, - Elen [e], Nv [e])) ; - } - } - AMD_DEBUG2 (("\nvariables:\n")) ; - for (i = 0 ; i < n ; i++) - { - Int cnt ; - if (Nv [i] == 0) - { - AMD_DEBUG3 (("i unordered: "ID"\n", i)) ; - j = Pe [i] ; - cnt = 0 ; - AMD_DEBUG3 ((" j: "ID"\n", j)) ; - if (j == EMPTY) - { - AMD_DEBUG3 ((" i is a dense variable\n")) ; - } - else - { - ASSERT (j >= 0 && j < n) ; - while (Nv [j] == 0) - { - AMD_DEBUG3 ((" j : "ID"\n", j)) ; - j = Pe [j] ; - AMD_DEBUG3 ((" j:: "ID"\n", j)) ; - cnt++ ; - if (cnt > n) break ; - } - e = j ; - AMD_DEBUG3 ((" got to e: "ID"\n", e)) ; - } - } - } -#endif - -/* ========================================================================= */ -/* compress the paths of the variables */ -/* ========================================================================= */ - - for (i = 0 ; i < n ; i++) - { - if (Nv [i] == 0) - { - - /* ------------------------------------------------------------- - * i is an un-ordered row. Traverse the tree from i until - * reaching an element, e. The element, e, was the principal - * supervariable of i and all nodes in the path from i to when e - * was selected as pivot. - * ------------------------------------------------------------- */ - - AMD_DEBUG1 (("Path compression, i unordered: "ID"\n", i)) ; - j = Pe [i] ; - ASSERT (j >= EMPTY && j < n) ; - AMD_DEBUG3 ((" j: "ID"\n", j)) ; - if (j == EMPTY) - { - /* Skip a dense variable. It has no parent. */ - AMD_DEBUG3 ((" i is a dense variable\n")) ; - continue ; - } - - /* while (j is a variable) */ - while (Nv [j] == 0) - { - AMD_DEBUG3 ((" j : "ID"\n", j)) ; - j = Pe [j] ; - AMD_DEBUG3 ((" j:: "ID"\n", j)) ; - ASSERT (j >= 0 && j < n) ; - } - /* got to an element e */ - e = j ; - AMD_DEBUG3 (("got to e: "ID"\n", e)) ; - - /* ------------------------------------------------------------- - * traverse the path again from i to e, and compress the path - * (all nodes point to e). Path compression allows this code to - * compute in O(n) time. - * ------------------------------------------------------------- */ - - j = i ; - /* while (j is a variable) */ - while (Nv [j] == 0) - { - jnext = Pe [j] ; - AMD_DEBUG3 (("j "ID" jnext "ID"\n", j, jnext)) ; - Pe [j] = e ; - j = jnext ; - ASSERT (j >= 0 && j < n) ; - } - } - } - -/* ========================================================================= */ -/* postorder the assembly tree */ -/* ========================================================================= */ - - AMD_postorder (n, Pe, Nv, Elen, - W, /* output order */ - Head, Next, Last) ; /* workspace */ - -/* ========================================================================= */ -/* compute output permutation and inverse permutation */ -/* ========================================================================= */ - - /* W [e] = k means that element e is the kth element in the new - * order. e is in the range 0 to n-1, and k is in the range 0 to - * the number of elements. Use Head for inverse order. */ - - for (k = 0 ; k < n ; k++) - { - Head [k] = EMPTY ; - Next [k] = EMPTY ; - } - for (e = 0 ; e < n ; e++) - { - k = W [e] ; - ASSERT ((k == EMPTY) == (Nv [e] == 0)) ; - if (k != EMPTY) - { - ASSERT (k >= 0 && k < n) ; - Head [k] = e ; - } - } - - /* construct output inverse permutation in Next, - * and permutation in Last */ - nel = 0 ; - for (k = 0 ; k < n ; k++) - { - e = Head [k] ; - if (e == EMPTY) break ; - ASSERT (e >= 0 && e < n && Nv [e] > 0) ; - Next [e] = nel ; - nel += Nv [e] ; - } - ASSERT (nel == n - ndense) ; - - /* order non-principal variables (dense, & those merged into supervar's) */ - for (i = 0 ; i < n ; i++) - { - if (Nv [i] == 0) - { - e = Pe [i] ; - ASSERT (e >= EMPTY && e < n) ; - if (e != EMPTY) - { - /* This is an unordered variable that was merged - * into element e via supernode detection or mass - * elimination of i when e became the pivot element. - * Place i in order just before e. */ - ASSERT (Next [i] == EMPTY && Nv [e] > 0) ; - Next [i] = Next [e] ; - Next [e]++ ; - } - else - { - /* This is a dense unordered variable, with no parent. - * Place it last in the output order. */ - Next [i] = nel++ ; - } - } - } - ASSERT (nel == n) ; - - AMD_DEBUG2 (("\n\nPerm:\n")) ; - for (i = 0 ; i < n ; i++) - { - k = Next [i] ; - ASSERT (k >= 0 && k < n) ; - Last [k] = i ; - AMD_DEBUG2 ((" perm ["ID"] = "ID"\n", k, i)) ; - } -} diff --git a/src-x64/amd_2.o b/src-x64/amd_2.o deleted file mode 100644 index 0dd88a72fc07eb251354e36c16c876a32654effd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7477 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 A@c;k- diff --git a/src-x64/amd_aat.c b/src-x64/amd_aat.c deleted file mode 100644 index e5e1752..0000000 --- a/src-x64/amd_aat.c +++ /dev/null @@ -1,184 +0,0 @@ -/* ========================================================================= */ -/* === AMD_aat ============================================================= */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* AMD_aat: compute the symmetry of the pattern of A, and count the number of - * nonzeros each column of A+A' (excluding the diagonal). Assumes the input - * matrix has no errors, with sorted columns and no duplicates - * (AMD_valid (n, n, Ap, Ai) must be AMD_OK, but this condition is not - * checked). - */ - -#include "amd_internal.h" - -GLOBAL size_t AMD_aat /* returns nz in A+A' */ -( - Int n, - const Int Ap [ ], - const Int Ai [ ], - Int Len [ ], /* Len [j]: length of column j of A+A', excl diagonal*/ - Int Tp [ ], /* workspace of size n */ - double Info [ ] -) -{ - Int p1, p2, p, i, j, pj, pj2, k, nzdiag, nzboth, nz ; - double sym ; - size_t nzaat ; - -#ifndef NDEBUG - AMD_debug_init ("AMD AAT") ; - for (k = 0 ; k < n ; k++) Tp [k] = EMPTY ; - ASSERT (AMD_valid (n, n, Ap, Ai) == AMD_OK) ; -#endif - - if (Info != (double *) NULL) - { - /* clear the Info array, if it exists */ - for (i = 0 ; i < AMD_INFO ; i++) - { - Info [i] = EMPTY ; - } - Info [AMD_STATUS] = AMD_OK ; - } - - for (k = 0 ; k < n ; k++) - { - Len [k] = 0 ; - } - - nzdiag = 0 ; - nzboth = 0 ; - nz = Ap [n] ; - - for (k = 0 ; k < n ; k++) - { - p1 = Ap [k] ; - p2 = Ap [k+1] ; - AMD_DEBUG2 (("\nAAT Column: "ID" p1: "ID" p2: "ID"\n", k, p1, p2)) ; - - /* construct A+A' */ - for (p = p1 ; p < p2 ; ) - { - /* scan the upper triangular part of A */ - j = Ai [p] ; - if (j < k) - { - /* entry A (j,k) is in the strictly upper triangular part, - * add both A (j,k) and A (k,j) to the matrix A+A' */ - Len [j]++ ; - Len [k]++ ; - AMD_DEBUG3 ((" upper ("ID","ID") ("ID","ID")\n", j,k, k,j)); - p++ ; - } - else if (j == k) - { - /* skip the diagonal */ - p++ ; - nzdiag++ ; - break ; - } - else /* j > k */ - { - /* first entry below the diagonal */ - break ; - } - /* scan lower triangular part of A, in column j until reaching - * row k. Start where last scan left off. */ - ASSERT (Tp [j] != EMPTY) ; - ASSERT (Ap [j] <= Tp [j] && Tp [j] <= Ap [j+1]) ; - pj2 = Ap [j+1] ; - for (pj = Tp [j] ; pj < pj2 ; ) - { - i = Ai [pj] ; - if (i < k) - { - /* A (i,j) is only in the lower part, not in upper. - * add both A (i,j) and A (j,i) to the matrix A+A' */ - Len [i]++ ; - Len [j]++ ; - AMD_DEBUG3 ((" lower ("ID","ID") ("ID","ID")\n", - i,j, j,i)) ; - pj++ ; - } - else if (i == k) - { - /* entry A (k,j) in lower part and A (j,k) in upper */ - pj++ ; - nzboth++ ; - break ; - } - else /* i > k */ - { - /* consider this entry later, when k advances to i */ - break ; - } - } - Tp [j] = pj ; - } - /* Tp [k] points to the entry just below the diagonal in column k */ - Tp [k] = p ; - } - - /* clean up, for remaining mismatched entries */ - for (j = 0 ; j < n ; j++) - { - for (pj = Tp [j] ; pj < Ap [j+1] ; pj++) - { - i = Ai [pj] ; - /* A (i,j) is only in the lower part, not in upper. - * add both A (i,j) and A (j,i) to the matrix A+A' */ - Len [i]++ ; - Len [j]++ ; - AMD_DEBUG3 ((" lower cleanup ("ID","ID") ("ID","ID")\n", - i,j, j,i)) ; - } - } - - /* --------------------------------------------------------------------- */ - /* compute the symmetry of the nonzero pattern of A */ - /* --------------------------------------------------------------------- */ - - /* Given a matrix A, the symmetry of A is: - * B = tril (spones (A), -1) + triu (spones (A), 1) ; - * sym = nnz (B & B') / nnz (B) ; - * or 1 if nnz (B) is zero. - */ - - if (nz == nzdiag) - { - sym = 1 ; - } - else - { - sym = (2 * (double) nzboth) / ((double) (nz - nzdiag)) ; - } - - nzaat = 0 ; - for (k = 0 ; k < n ; k++) - { - nzaat += Len [k] ; - } - - AMD_DEBUG1 (("AMD nz in A+A', excluding diagonal (nzaat) = %g\n", - (double) nzaat)) ; - AMD_DEBUG1 ((" nzboth: "ID" nz: "ID" nzdiag: "ID" symmetry: %g\n", - nzboth, nz, nzdiag, sym)) ; - - if (Info != (double *) NULL) - { - Info [AMD_STATUS] = AMD_OK ; - Info [AMD_N] = n ; - Info [AMD_NZ] = nz ; - Info [AMD_SYMMETRY] = sym ; /* symmetry of pattern of A */ - Info [AMD_NZDIAG] = nzdiag ; /* nonzeros on diagonal of A */ - Info [AMD_NZ_A_PLUS_AT] = nzaat ; /* nonzeros in A+A' */ - } - - return (nzaat) ; -} diff --git a/src-x64/amd_aat.o b/src-x64/amd_aat.o deleted file mode 100644 index ac243f6ef4efb564f49b9ab8f3946a474f951750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1697 zcmZuxUuauZ7(b`E&U6NE=1^J?8^?XvW_#CSD7#ZIXT7B-n6il3BDl55(oCbVE9)&} zrP|3&rk88#hOZ(%$%MfaeDGngBy(*y5Nhy25dWb*-1)Bth67>o`_66ZO`8wyJ>U7h z-}nEVGj-likiz#7@{r&pq8izPA$a#U=p!US3Arn|d)Sf?iKo=5w2}7UIe7i4S84mF4xxPZf^otKt+fRK1w&`rRgr<7nD@YS}iA= z(Q@LV1Yx#Rv~3CV{WhSA_ls=}TcH&VfM*p>UGp#N!y(f%n(Q*KcsIGmp z(CcJDhV^i>D!D?r{2a)@{!MDuzz+dreeMSct6RGbXw(V-`*iKwg?He`tUGe?Fc^$l z{a3hogKBvtCBOS@v)R<`1k_ZCW&&?<>lS+|QIsI`((8Q~FP1^?7D>=My2l<6MFj>VTj@aUJj|ID4SA+^TV_ijnzOx6Pj@@4nT56l&N5$3Os{r`GAg z&Xp?0<5*1VWDQkB-dHjeGEsGYfmp3L|AU+_L3{y-2D?dcPhjwY)XtgixWBSvP5QBG z9s5E^KVH&JT7Sl6*RPF@j2sH>EgT%491ai6oSw}U24=G__lFM8?sM6E;u(^$@|Wt+DEb4wt|WGjfF%3v(*bB-uD%) zJ7PR2SDAQAPebJO|U RtJ(Znq6*i_{QSI^{SRSuhtdE5 diff --git a/src-x64/amd_control.c b/src-x64/amd_control.c deleted file mode 100644 index 0b64f77..0000000 --- a/src-x64/amd_control.c +++ /dev/null @@ -1,63 +0,0 @@ -/* ========================================================================= */ -/* === AMD_control ========================================================= */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* User-callable. Prints the control parameters for AMD. See amd.h - * for details. If the Control array is not present, the defaults are - * printed instead. - */ - -#include "amd_internal.h" - -GLOBAL void AMD_control -( - double Control [ ] -) -{ - double alpha ; - Int aggressive ; - - if (Control != (double *) NULL) - { - alpha = Control [AMD_DENSE] ; - aggressive = Control [AMD_AGGRESSIVE] != 0 ; - } - else - { - alpha = AMD_DEFAULT_DENSE ; - aggressive = AMD_DEFAULT_AGGRESSIVE ; - } - - PRINTF (("\nAMD version %d.%d.%d, %s: approximate minimum degree ordering\n" - " dense row parameter: %g\n", AMD_MAIN_VERSION, AMD_SUB_VERSION, - AMD_SUBSUB_VERSION, AMD_DATE, alpha)) ; - - if (alpha < 0) - { - PRINTF ((" no rows treated as dense\n")) ; - } - else - { - PRINTF (( - " (rows with more than max (%g * sqrt (n), 16) entries are\n" - " considered \"dense\", and placed last in output permutation)\n", - alpha)) ; - } - - if (aggressive) - { - PRINTF ((" aggressive absorption: yes\n")) ; - } - else - { - PRINTF ((" aggressive absorption: no\n")) ; - } - - PRINTF ((" size of AMD integer: %d\n\n", sizeof (Int))) ; -} diff --git a/src-x64/amd_control.o b/src-x64/amd_control.o deleted file mode 100644 index 75af24c0876b5fe6fe2fe15f19cf16d30d0223fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1935 zcmah~&2Jl35PzFBZ7?6}incfCC~_nloUPr4sPzGDXrwNnN|C5&B~aQ;_N}wU`@!4i z#)%>nsRk0IP_Yz2$TcrsqW0%^=7RY7m&(D>#MAD-`Qa|lu271X~WPGo#o7PBgg)<+-Ox1L-z>ayB2>YG)|-nnmVKgFPD z{55Fp*|%S(^q&d7Z&X^IVXjXa-|iU;f7`cpduPws-o=o8=fo!paZFZg^FI-K{vI9K zzVixdW`BLT3cJ+C!2_gthPi7uRQ4wNJfrrzXB(gIBl;_a!T8QUz1I*Sm(bZn!oh>b z$Ba{qTpyroQn}JI$Tm6_(P7lEj9u!6QKMRJ{d)D|C42CYl1?JVACf=*&N#J=i!7yp z{w1q8V}6K5zfHfrtipe*ZQr2EvkJ4^A5_;Ky)hUJ?&eaSzq9~1xk&sdglX4Qp9V}P zZE)gPM14PSB!|Ec{h$|s%R7Q|h=j|9A9l)s;_@)zAfh#h9pMCAa?ytAPMN*m3*k(& zfluoUBV-s6ECDGvlDgm|X>u9g9h901uK98mf=Fys!m1W=k!Y2p ztkN&BmsWLlv%m4Zb4lFl(MS&!*{z^b~sNoiDNXP}5soV#~R8H@AMwt$Vq3KeztOt>bvk zl&^|b%J)`oy^~v*z>eUf<9T?{ZqAJR309(VW1&hLU=xXUg=c#=kieu=^CAvb{& vG*pkwUfA_N<=u6b{vA~}Ha3Q)DYzF)VbV3lI1{AD3ODv2s1d5M92wnnoz!G= diff --git a/src-x64/amd_defaults.c b/src-x64/amd_defaults.c deleted file mode 100644 index 9d20023..0000000 --- a/src-x64/amd_defaults.c +++ /dev/null @@ -1,37 +0,0 @@ -/* ========================================================================= */ -/* === AMD_defaults ======================================================== */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* User-callable. Sets default control parameters for AMD. See amd.h - * for details. - */ - -#include "amd_internal.h" - -/* ========================================================================= */ -/* === AMD defaults ======================================================== */ -/* ========================================================================= */ - -GLOBAL void AMD_defaults -( - double Control [ ] -) -{ - Int i ; - - if (Control != (double *) NULL) - { - for (i = 0 ; i < AMD_CONTROL ; i++) - { - Control [i] = 0 ; - } - Control [AMD_DENSE] = AMD_DEFAULT_DENSE ; - Control [AMD_AGGRESSIVE] = AMD_DEFAULT_AGGRESSIVE ; - } -} diff --git a/src-x64/amd_defaults.o b/src-x64/amd_defaults.o deleted file mode 100644 index 83dd1671faea53c02e6285b9cac64b08fefa7fd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 928 zcmah{%}N4M6h61HlBl#EAnroKD6d9h>82qUPK&@GaB2RGH8rU?BdDt&3R(m$TJ!)t zLJuIcsCGSySnKMX`LPj|KDhUMbIy0qopbIf-}r&BIt8$7F&_w1ZJ8FgHyOq9Og&ny>T{Qlm%DJ~Se6bIYJvjg7W{@E!i~6u`9)pjl z^HTu`374g74C{jEe;Ub`m7|+UIyQie?0Jk%xqdfe%H3gDxqVY!ExB^l^()DbX0IOz zPLl`i0(HJ0SYo*L{hu%QF5Hyc)=_s0$u{flX42^t54Uy_`9wTYuNhh^VyLGZe6OkL zCNH-6fmY4rBDqAI*BiAnwPddGxJZgEClyD#h|34z0Yie{)DzlmM*lZw`9ww2Rb+(k zAAl29xG3k#YNgQBO+%FI2*8R%7;u@iBXNtb2vKhR8d44m&Y?v^onCO zo++W0ON^=-hIc|{FeEXW5z6=n;hBzEbW4opV-)L-i@GMU)QBK~9;<%Qtm@jis<**T N9qM#C;O(c^{|h=uY_b3V diff --git a/src-x64/amd_dump.c b/src-x64/amd_dump.c deleted file mode 100644 index 01e1fb5..0000000 --- a/src-x64/amd_dump.c +++ /dev/null @@ -1,179 +0,0 @@ -/* ========================================================================= */ -/* === AMD_dump ============================================================ */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* Debugging routines for AMD. Not used if NDEBUG is not defined at compile- - * time (the default). See comments in amd_internal.h on how to enable - * debugging. Not user-callable. - */ - -#include "amd_internal.h" - -#ifndef NDEBUG - -/* This global variable is present only when debugging */ -GLOBAL Int AMD_debug = -999 ; /* default is no debug printing */ - -/* ========================================================================= */ -/* === AMD_debug_init ====================================================== */ -/* ========================================================================= */ - -/* Sets the debug print level, by reading the file debug.amd (if it exists) */ - -GLOBAL void AMD_debug_init ( char *s ) -{ - FILE *f ; - f = fopen ("debug.amd", "r") ; - if (f == (FILE *) NULL) - { - AMD_debug = -999 ; - } - else - { - fscanf (f, ID, &AMD_debug) ; - fclose (f) ; - } - if (AMD_debug >= 0) - { - printf ("%s: AMD_debug_init, D= "ID"\n", s, AMD_debug) ; - } -} - -/* ========================================================================= */ -/* === AMD_dump ============================================================ */ -/* ========================================================================= */ - -/* Dump AMD's data structure, except for the hash buckets. This routine - * cannot be called when the hash buckets are non-empty. - */ - -GLOBAL void AMD_dump ( - Int n, /* A is n-by-n */ - Int Pe [ ], /* pe [0..n-1]: index in iw of start of row i */ - Int Iw [ ], /* workspace of size iwlen, iwlen [0..pfree-1] - * holds the matrix on input */ - Int Len [ ], /* len [0..n-1]: length for row i */ - Int iwlen, /* length of iw */ - Int pfree, /* iw [pfree ... iwlen-1] is empty on input */ - Int Nv [ ], /* nv [0..n-1] */ - Int Next [ ], /* next [0..n-1] */ - Int Last [ ], /* last [0..n-1] */ - Int Head [ ], /* head [0..n-1] */ - Int Elen [ ], /* size n */ - Int Degree [ ], /* size n */ - Int W [ ], /* size n */ - Int nel -) -{ - Int i, pe, elen, nv, len, e, p, k, j, deg, w, cnt, ilast ; - - if (AMD_debug < 0) return ; - ASSERT (pfree <= iwlen) ; - AMD_DEBUG3 (("\nAMD dump, pfree: "ID"\n", pfree)) ; - for (i = 0 ; i < n ; i++) - { - pe = Pe [i] ; - elen = Elen [i] ; - nv = Nv [i] ; - len = Len [i] ; - w = W [i] ; - - if (elen >= EMPTY) - { - if (nv == 0) - { - AMD_DEBUG3 (("\nI "ID": nonprincipal: ", i)) ; - ASSERT (elen == EMPTY) ; - if (pe == EMPTY) - { - AMD_DEBUG3 ((" dense node\n")) ; - ASSERT (w == 1) ; - } - else - { - ASSERT (pe < EMPTY) ; - AMD_DEBUG3 ((" i "ID" -> parent "ID"\n", i, FLIP (Pe[i]))); - } - } - else - { - AMD_DEBUG3 (("\nI "ID": active principal supervariable:\n",i)); - AMD_DEBUG3 ((" nv(i): "ID" Flag: %d\n", nv, (nv < 0))) ; - ASSERT (elen >= 0) ; - ASSERT (nv > 0 && pe >= 0) ; - p = pe ; - AMD_DEBUG3 ((" e/s: ")) ; - if (elen == 0) AMD_DEBUG3 ((" : ")) ; - ASSERT (pe + len <= pfree) ; - for (k = 0 ; k < len ; k++) - { - j = Iw [p] ; - AMD_DEBUG3 ((" "ID"", j)) ; - ASSERT (j >= 0 && j < n) ; - if (k == elen-1) AMD_DEBUG3 ((" : ")) ; - p++ ; - } - AMD_DEBUG3 (("\n")) ; - } - } - else - { - e = i ; - if (w == 0) - { - AMD_DEBUG3 (("\nE "ID": absorbed element: w "ID"\n", e, w)) ; - ASSERT (nv > 0 && pe < 0) ; - AMD_DEBUG3 ((" e "ID" -> parent "ID"\n", e, FLIP (Pe [e]))) ; - } - else - { - AMD_DEBUG3 (("\nE "ID": unabsorbed element: w "ID"\n", e, w)) ; - ASSERT (nv > 0 && pe >= 0) ; - p = pe ; - AMD_DEBUG3 ((" : ")) ; - ASSERT (pe + len <= pfree) ; - for (k = 0 ; k < len ; k++) - { - j = Iw [p] ; - AMD_DEBUG3 ((" "ID"", j)) ; - ASSERT (j >= 0 && j < n) ; - p++ ; - } - AMD_DEBUG3 (("\n")) ; - } - } - } - - /* this routine cannot be called when the hash buckets are non-empty */ - AMD_DEBUG3 (("\nDegree lists:\n")) ; - if (nel >= 0) - { - cnt = 0 ; - for (deg = 0 ; deg < n ; deg++) - { - if (Head [deg] == EMPTY) continue ; - ilast = EMPTY ; - AMD_DEBUG3 ((ID": \n", deg)) ; - for (i = Head [deg] ; i != EMPTY ; i = Next [i]) - { - AMD_DEBUG3 ((" "ID" : next "ID" last "ID" deg "ID"\n", - i, Next [i], Last [i], Degree [i])) ; - ASSERT (i >= 0 && i < n && ilast == Last [i] && - deg == Degree [i]) ; - cnt += Nv [i] ; - ilast = i ; - } - AMD_DEBUG3 (("\n")) ; - } - ASSERT (cnt == n - nel) ; - } - -} - -#endif diff --git a/src-x64/amd_dump.o b/src-x64/amd_dump.o deleted file mode 100644 index aae27c1a9886ed68d86f9e2e781176f669348921..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 450 zcmYdkV_^V+FF?!%X0bBpm84dbfZ4bS1%`kGy_Cd~MBGZiG7by@2lSGPiwP)WXaK6y zH$he90OW2#6=DFI=iu(_Y^9)4VPO_;W};h=Uz}N?Tb!Dqqu^AUnNy;WRH@*bndcs^ z8*XNzP*9Ygm6}|lsbHdKsb>r|OD`=mCl$*6_n(0woiQ;tB|fDzw?Ho$W*u@EFaiac xK?E8=_CFI)4yzg@zcb@d12UE$L;wLOHkcW$z-(kf3dqqb0tL8ARaF%-696;CGl>8I diff --git a/src-x64/amd_global.c b/src-x64/amd_global.c deleted file mode 100644 index 0f3def0..0000000 --- a/src-x64/amd_global.c +++ /dev/null @@ -1,85 +0,0 @@ -/* ========================================================================= */ -/* === amd_global ========================================================== */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -#include - -#ifdef MATLAB_MEX_FILE -#include "mex.h" -#include "matrix.h" -#endif - -#ifndef NULL -#define NULL 0 -#endif - -/* ========================================================================= */ -/* === Default AMD memory manager ========================================== */ -/* ========================================================================= */ - -/* The user can redefine these global pointers at run-time to change the memory - * manager used by AMD. AMD only uses malloc and free; realloc and calloc are - * include for completeness, in case another package wants to use the same - * memory manager as AMD. - * - * If compiling as a MATLAB mexFunction, the default memory manager is mxMalloc. - * You can also compile AMD as a standard ANSI-C library and link a mexFunction - * against it, and then redefine these pointers at run-time, in your - * mexFunction. - * - * If -DNMALLOC is defined at compile-time, no memory manager is specified at - * compile-time. You must then define these functions at run-time, before - * calling AMD, for AMD to work properly. - */ - -#ifndef NMALLOC -#ifdef MATLAB_MEX_FILE -/* MATLAB mexFunction: */ -void *(*amd_malloc) (size_t) = mxMalloc ; -void (*amd_free) (void *) = mxFree ; -void *(*amd_realloc) (void *, size_t) = mxRealloc ; -void *(*amd_calloc) (size_t, size_t) = mxCalloc ; -#else -/* standard ANSI-C: */ -void *(*amd_malloc) (size_t) = malloc ; -void (*amd_free) (void *) = free ; -void *(*amd_realloc) (void *, size_t) = realloc ; -void *(*amd_calloc) (size_t, size_t) = calloc ; -#endif -#else -/* no memory manager defined at compile-time; you MUST define one at run-time */ -void *(*amd_malloc) (size_t) = NULL ; -void (*amd_free) (void *) = NULL ; -void *(*amd_realloc) (void *, size_t) = NULL ; -void *(*amd_calloc) (size_t, size_t) = NULL ; -#endif - -/* ========================================================================= */ -/* === Default AMD printf routine ========================================== */ -/* ========================================================================= */ - -/* The user can redefine this global pointer at run-time to change the printf - * routine used by AMD. If NULL, no printing occurs. - * - * If -DNPRINT is defined at compile-time, stdio.h is not included. Printing - * can then be enabled at run-time by setting amd_printf to a non-NULL function. - */ - -/*#ifndef NPRINT -#ifdef MATLAB_MEX_FILE -int (*amd_printf) (const char *, ...) = mexPrintf ; -#else -#include -int (*amd_printf) (const char *, ...) = printf ; -#endif -#else -int (*amd_printf) (const char *, ...) = NULL ; -#endif */ -#include -int (*amd_printf) (const char *, ...) = NULL ; diff --git a/src-x64/amd_global.o b/src-x64/amd_global.o deleted file mode 100644 index 8e566a32332779611e929e43033714cfede8abbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 729 zcmaJ;O-sW-5S=tVc=Pihp7x-iU{=9UwDeHyAt#}?9&3_rYb0$-5+U~FslUh{;E(Y4 zsPlGL*eW`(k2h~;XC^O`b(;`9k7!@BHpyBwwdQ|=py9oo#C7bH21d8_{6U6{pR0XWR*cWl?2KP^pJ=ar>0zwMd@D zUABlu!Kf38Wm!C`v_2D|ypdN<*KOt=Z82h7Pvfp;hm3og$!V4=W{8hZqL~-ZC*xUO zBylcNqq|= 0) { PRINTF ((format, x)) ; }} - -GLOBAL void AMD_info -( - double Info [ ] -) -{ - double n, ndiv, nmultsubs_ldl, nmultsubs_lu, lnz, lnzd ; - - PRINTF (("\nAMD version %d.%d.%d, %s, results:\n", - AMD_MAIN_VERSION, AMD_SUB_VERSION, AMD_SUBSUB_VERSION, AMD_DATE)) ; - - if (!Info) - { - return ; - } - - n = Info [AMD_N] ; - ndiv = Info [AMD_NDIV] ; - nmultsubs_ldl = Info [AMD_NMULTSUBS_LDL] ; - nmultsubs_lu = Info [AMD_NMULTSUBS_LU] ; - lnz = Info [AMD_LNZ] ; - lnzd = (n >= 0 && lnz >= 0) ? (n + lnz) : (-1) ; - - /* AMD return status */ - PRINTF ((" status: ")) ; - if (Info [AMD_STATUS] == AMD_OK) - { - PRINTF (("OK\n")) ; - } - else if (Info [AMD_STATUS] == AMD_OUT_OF_MEMORY) - { - PRINTF (("out of memory\n")) ; - } - else if (Info [AMD_STATUS] == AMD_INVALID) - { - PRINTF (("invalid matrix\n")) ; - } - else if (Info [AMD_STATUS] == AMD_OK_BUT_JUMBLED) - { - PRINTF (("OK, but jumbled\n")) ; - } - else - { - PRINTF (("unknown\n")) ; - } - - /* statistics about the input matrix */ - PRI (" n, dimension of A: %.20g\n", n); - PRI (" nz, number of nonzeros in A: %.20g\n", - Info [AMD_NZ]) ; - PRI (" symmetry of A: %.4f\n", - Info [AMD_SYMMETRY]) ; - PRI (" number of nonzeros on diagonal: %.20g\n", - Info [AMD_NZDIAG]) ; - PRI (" nonzeros in pattern of A+A' (excl. diagonal): %.20g\n", - Info [AMD_NZ_A_PLUS_AT]) ; - PRI (" # dense rows/columns of A+A': %.20g\n", - Info [AMD_NDENSE]) ; - - /* statistics about AMD's behavior */ - PRI (" memory used, in bytes: %.20g\n", - Info [AMD_MEMORY]) ; - PRI (" # of memory compactions: %.20g\n", - Info [AMD_NCMPA]) ; - - /* statistics about the ordering quality */ - PRINTF (("\n" - " The following approximate statistics are for a subsequent\n" - " factorization of A(P,P) + A(P,P)'. They are slight upper\n" - " bounds if there are no dense rows/columns in A+A', and become\n" - " looser if dense rows/columns exist.\n\n")) ; - - PRI (" nonzeros in L (excluding diagonal): %.20g\n", - lnz) ; - PRI (" nonzeros in L (including diagonal): %.20g\n", - lnzd) ; - PRI (" # divide operations for LDL' or LU: %.20g\n", - ndiv) ; - PRI (" # multiply-subtract operations for LDL': %.20g\n", - nmultsubs_ldl) ; - PRI (" # multiply-subtract operations for LU: %.20g\n", - nmultsubs_lu) ; - PRI (" max nz. in any column of L (incl. diagonal): %.20g\n", - Info [AMD_DMAX]) ; - - /* total flop counts for various factorizations */ - - if (n >= 0 && ndiv >= 0 && nmultsubs_ldl >= 0 && nmultsubs_lu >= 0) - { - PRINTF (("\n" - " chol flop count for real A, sqrt counted as 1 flop: %.20g\n" - " LDL' flop count for real A: %.20g\n" - " LDL' flop count for complex A: %.20g\n" - " LU flop count for real A (with no pivoting): %.20g\n" - " LU flop count for complex A (with no pivoting): %.20g\n\n", - n + ndiv + 2*nmultsubs_ldl, - ndiv + 2*nmultsubs_ldl, - 9*ndiv + 8*nmultsubs_ldl, - ndiv + 2*nmultsubs_lu, - 9*ndiv + 8*nmultsubs_lu)) ; - } -} diff --git a/src-x64/amd_info.o b/src-x64/amd_info.o deleted file mode 100644 index d14f14800c600b7aaeeb590ddfa401f933b5e1c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4361 zcmb7IZ)_aJ6`%7tA-RT*gAx=0#Y252XK~q_6O$%ZTlVmwT#2El#vzUnjrZ<$?S;MF z&HhQwCW;I`BOr=olzsrIQom5dC&ULn00Px=+cZs3YxoeU^q(kFX{uI@T&YUaHrMxN zZ^v`V;g(Tu_O~;?_j_;NyxHu!`rJl>t&0+JJ4f9_3G{lvanz~n2sxP`$=`f)ncrc@KVa13h);kUY{E^Z4rRdRd^})mlSr zrIMVgxb3`6Fj)lN$6tXq!=|L)q+EY>w z9e(U!@tME84!3k5NayIl$+TLa1BG-6`qA_R^kZok`tPS_fdt^y^a6n53m1#0?*~AN zr`H$f7lV6?XTH%7xA}KaJO4ID{B9S{pW*QpUpSd&&E?|!uW4gHOd9lW|5z!|p2v&W zAJ||NsPa362TLoo=jm~TBNHk;`%|3x1%RK?XWs`yweeTlcncLCqM1)t9-`x)wnEqh zu6BV(@N#-Rh$IcFoTD#p11_Dv4SI-^HjW@TbL#_~s5Y9w4SM;^rzo1InV%b@^wb65 z%t~S-J*ej0&6z($Ce55TiuBYH5Eo_QHi73nBK$ryzC}-+$L^oJDp%;{LOO#hLjLA4JWdNVgQqsbPi=;u+6+In8GdRr@u|(U zPVF;4!K428caJ{tW7=E5r7P=l5b(_H;TGJ{2O!uHU^JI6fAa5Ua{=e~;(S*yhFAqm zU%UhiI=_rbfD<+U8Q%8JLXQa;=^2E@L6+vW{ioTy{AZ9c6x!RsX@aM^A01vU;`jpk zya+zO19RZB27@TUOO(#Nh5|NphOmc8UgUJ{F`UdohX(wF(7CVR*xx}!=Cdf8-@x$Y zH(Cz(8KrYSz_DWzAJ^0PTC>@NnD9Rgi0N1VlKjJPIT~Jq;e~}%{*eMZu6w@e*sQ;* z@PAp>?`N5(`=J&1!zuD`XtQ0pEc^y{5eCf^0{8Ts~s6mi0UIR>lgHOHGy5z{`d zS!R{hw7@g#DWGIo87NPNwX&sGQzW#XvYiul3c?^<&Car_S<`JE11RN((Z|}YU)hzL z1PNr>Gg)SXy6#~dwqwuep5rsqUPDQ?_or($J@BT{`v38bKKqp+16P2!gKtP?)zl^( zTeCVZM)og9>}o-vdo~Z{zWjEU(d!jU5n=p683>PP2=X8M6y@tNi!$zvMx!?Ld*3w1l-)&}@#XSTLo73v^>Uoid8`1Y442nq6gO9agGy1)~xAPGEc zKF{oEVRSo#438eVdGlreeXIr#2Gg~scfeKz9^}81RGY{bwZAb0*}kUL;mj*os+v8` zqKe0jZzZF{ae?z1JumoKC8cgk1SibR~Li?(UJv)oVhDoMVS*h;!{$%!sEQ9_$^&P%Gm1PfxrWL>w zialc5`w#Cpyl05P)8a|J5)7~*WuLM;GQX+E0Jp%en>-3Vew}m^L!b`@x+c)w@X8tS z_6y_+^ol@B0(~aXCU~ceYzGB;P@u9v4S`-0=$t@*5@<8LKSp{71Ue|tq(I&9nilc4 z2$U8mCr~KR^8(!knU8FD3k1m^@UBCWkgXVP0E8c5;1t?c_$7#9n3m4(3Ax@RWHO=E zsz*)RaFj}Gn8YJ^pCF8MLAE-zy{$p~rcNf%+bR(f()MMIGsy(jOfR6-CVy3$L2 zkmN6FTuVoe^fiqcNG8TH9c@jKzL0sY64|zSypg|-Z-M({0y7w^;7mid%!O_S)40_mBVnHVabZn%M`;HJ2qX$Qvt Mo{7wFvXdnK3qrvM2><{9 diff --git a/src-x64/amd_internal.h b/src-x64/amd_internal.h deleted file mode 100644 index 01a410a..0000000 --- a/src-x64/amd_internal.h +++ /dev/null @@ -1,351 +0,0 @@ -/* ========================================================================= */ -/* === amd_internal.h ====================================================== */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* This file is for internal use in AMD itself, and does not normally need to - * be included in user code (it is included in UMFPACK, however). All others - * should use amd.h instead. - * - * The following compile-time definitions affect how AMD is compiled. - * - * -DNPRINT - * - * Disable all printing. stdio.h will not be included. Printing can - * be re-enabled at run-time by setting the global pointer amd_printf - * to printf (or mexPrintf for a MATLAB mexFunction). - * - * -DNMALLOC - * - * No memory manager is defined at compile-time. You MUST define the - * function pointers amd_malloc, amd_free, amd_realloc, and - * amd_calloc at run-time for AMD to work properly. - */ - -/* ========================================================================= */ -/* === NDEBUG ============================================================== */ -/* ========================================================================= */ - -/* - * Turning on debugging takes some work (see below). If you do not edit this - * file, then debugging is always turned off, regardless of whether or not - * -DNDEBUG is specified in your compiler options. - * - * If AMD is being compiled as a mexFunction, then MATLAB_MEX_FILE is defined, - * and mxAssert is used instead of assert. If debugging is not enabled, no - * MATLAB include files or functions are used. Thus, the AMD library libamd.a - * can be safely used in either a stand-alone C program or in another - * mexFunction, without any change. - */ - -/* - AMD will be exceedingly slow when running in debug mode. The next three - lines ensure that debugging is turned off. -*/ - -#include /* required */ -#include /* for distribution functions etc. */ - -#ifndef NDEBUG -#define NDEBUG -#endif - -/* - To enable debugging, uncomment the following line: -#undef NDEBUG -*/ - -/* ------------------------------------------------------------------------- */ -/* ANSI include files */ -/* ------------------------------------------------------------------------- */ - -/* from stdlib.h: size_t, malloc, free, realloc, and calloc */ -#include - -#if !defined(NPRINT) || !defined(NDEBUG) -/* from stdio.h: printf. Not included if NPRINT is defined at compile time. - * fopen and fscanf are used when debugging. */ -#include -#endif - -/* from limits.h: INT_MAX and LONG_MAX */ -#include - -/* from math.h: sqrt */ -#include - -/* ------------------------------------------------------------------------- */ -/* MATLAB include files (only if being used in or via MATLAB) */ -/* ------------------------------------------------------------------------- */ - -#ifdef MATLAB_MEX_FILE -#include "matrix.h" -#include "mex.h" -#endif - -/* ------------------------------------------------------------------------- */ -/* basic definitions */ -/* ------------------------------------------------------------------------- */ - -#ifdef FLIP -#undef FLIP -#endif - -#ifdef MAX -#undef MAX -#endif - -#ifdef MIN -#undef MIN -#endif - -#ifdef EMPTY -#undef EMPTY -#endif - -#ifdef GLOBAL -#undef GLOBAL -#endif - -#ifdef PRIVATE -#undef PRIVATE -#endif - -/* FLIP is a "negation about -1", and is used to mark an integer i that is - * normally non-negative. FLIP (EMPTY) is EMPTY. FLIP of a number > EMPTY - * is negative, and FLIP of a number < EMTPY is positive. FLIP (FLIP (i)) = i - * for all integers i. UNFLIP (i) is >= EMPTY. */ -#define EMPTY (-1) -#define FLIP(i) (-(i)-2) -#define UNFLIP(i) ((i < EMPTY) ? FLIP (i) : (i)) - -/* for integer MAX/MIN, or for doubles when we don't care how NaN's behave: */ -#define MAX(a,b) (((a) > (b)) ? (a) : (b)) -#define MIN(a,b) (((a) < (b)) ? (a) : (b)) - -/* logical expression of p implies q: */ -#define IMPLIES(p,q) (!(p) || (q)) - -/* Note that the IBM RS 6000 xlc predefines TRUE and FALSE in . */ -/* The Compaq Alpha also predefines TRUE and FALSE. */ -#ifdef TRUE -#undef TRUE -#endif -#ifdef FALSE -#undef FALSE -#endif - -#define TRUE (1) -#define FALSE (0) -#define PRIVATE static -#define GLOBAL -#define EMPTY (-1) - -/* Note that Linux's gcc 2.96 defines NULL as ((void *) 0), but other */ -/* compilers (even gcc 2.95.2 on Solaris) define NULL as 0 or (0). We */ -/* need to use the ANSI standard value of 0. */ -#ifdef NULL -#undef NULL -#endif - -#define NULL 0 - -/* largest value of size_t */ -#ifndef SIZE_T_MAX -#ifdef SIZE_MAX -/* C99 only */ -#define SIZE_T_MAX SIZE_MAX -#else -#define SIZE_T_MAX ((size_t) (-1)) -#endif -#endif - -/* ------------------------------------------------------------------------- */ -/* integer type for AMD: int or SuiteSparse_long */ -/* ------------------------------------------------------------------------- */ - -#include "amd.h" - -#if defined (DLONG) || defined (ZLONG) - -#define Int SuiteSparse_long -#define ID SuiteSparse_long_id -#define Int_MAX SuiteSparse_long_max - -#define AMD_order amd_l_order -#define AMD_defaults amd_l_defaults -#define AMD_control amd_l_control -#define AMD_info amd_l_info -#define AMD_1 amd_l1 -#define AMD_2 amd_l2 -#define AMD_valid amd_l_valid -#define AMD_aat amd_l_aat -#define AMD_postorder amd_l_postorder -#define AMD_post_tree amd_l_post_tree -#define AMD_dump amd_l_dump -#define AMD_debug amd_l_debug -#define AMD_debug_init amd_l_debug_init -#define AMD_preprocess amd_l_preprocess - -#else - -#define Int int -#define ID "%d" -#define Int_MAX INT_MAX - -#define AMD_order amd_order -#define AMD_defaults amd_defaults -#define AMD_control amd_control -#define AMD_info amd_info -#define AMD_1 amd_1 -#define AMD_2 amd_2 -#define AMD_valid amd_valid -#define AMD_aat amd_aat -#define AMD_postorder amd_postorder -#define AMD_post_tree amd_post_tree -#define AMD_dump amd_dump -#define AMD_debug amd_debug -#define AMD_debug_init amd_debug_init -#define AMD_preprocess amd_preprocess - -#endif - -/* ========================================================================= */ -/* === PRINTF macro ======================================================== */ -/* ========================================================================= */ - -/* All output goes through the PRINTF macro. */ -#define PRINTF(params) { if (amd_printf != NULL) (void) amd_printf params ; } - -/* ------------------------------------------------------------------------- */ -/* AMD routine definitions (not user-callable) */ -/* ------------------------------------------------------------------------- */ - -GLOBAL size_t AMD_aat -( - Int n, - const Int Ap [ ], - const Int Ai [ ], - Int Len [ ], - Int Tp [ ], - double Info [ ] -) ; - -GLOBAL void AMD_1 -( - Int n, - const Int Ap [ ], - const Int Ai [ ], - Int P [ ], - Int Pinv [ ], - Int Len [ ], - Int slen, - Int S [ ], - double Control [ ], - double Info [ ] -) ; - -GLOBAL void AMD_postorder -( - Int nn, - Int Parent [ ], - Int Npiv [ ], - Int Fsize [ ], - Int Order [ ], - Int Child [ ], - Int Sibling [ ], - Int Stack [ ] -) ; - -GLOBAL Int AMD_post_tree -( - Int root, - Int k, - Int Child [ ], - const Int Sibling [ ], - Int Order [ ], - Int Stack [ ] -#ifndef NDEBUG - , Int nn -#endif -) ; - -GLOBAL void AMD_preprocess -( - Int n, - const Int Ap [ ], - const Int Ai [ ], - Int Rp [ ], - Int Ri [ ], - Int W [ ], - Int Flag [ ] -) ; - -/* ------------------------------------------------------------------------- */ -/* debugging definitions */ -/* ------------------------------------------------------------------------- */ - -#ifndef NDEBUG - -/* from assert.h: assert macro */ -#include - -#ifndef EXTERN -#define EXTERN extern -#endif - -EXTERN Int AMD_debug ; - -GLOBAL void AMD_debug_init ( char *s ) ; - -GLOBAL void AMD_dump -( - Int n, - Int Pe [ ], - Int Iw [ ], - Int Len [ ], - Int iwlen, - Int pfree, - Int Nv [ ], - Int Next [ ], - Int Last [ ], - Int Head [ ], - Int Elen [ ], - Int Degree [ ], - Int W [ ], - Int nel -) ; - -#ifdef ASSERT -#undef ASSERT -#endif - -/* Use mxAssert if AMD is compiled into a mexFunction */ -#ifdef MATLAB_MEX_FILE -#define ASSERT(expression) (mxAssert ((expression), "")) -#else -#define ASSERT(expression) (assert (expression)) -#endif - -#define AMD_DEBUG0(params) { PRINTF (params) ; } -#define AMD_DEBUG1(params) { if (AMD_debug >= 1) PRINTF (params) ; } -#define AMD_DEBUG2(params) { if (AMD_debug >= 2) PRINTF (params) ; } -#define AMD_DEBUG3(params) { if (AMD_debug >= 3) PRINTF (params) ; } -#define AMD_DEBUG4(params) { if (AMD_debug >= 4) PRINTF (params) ; } - -#else - -/* no debugging */ -#define ASSERT(expression) -#define AMD_DEBUG0(params) -#define AMD_DEBUG1(params) -#define AMD_DEBUG2(params) -#define AMD_DEBUG3(params) -#define AMD_DEBUG4(params) - -#endif diff --git a/src-x64/amd_order.c b/src-x64/amd_order.c deleted file mode 100644 index f00aff6..0000000 --- a/src-x64/amd_order.c +++ /dev/null @@ -1,206 +0,0 @@ -/* ========================================================================= */ -/* === AMD_order =========================================================== */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* User-callable AMD minimum degree ordering routine. See amd.h for - * documentation. - */ - -#include "amd_internal.h" -#include /* required */ -#include /* for distribution functions etc. */ - -/* ========================================================================= */ -/* === AMD_order =========================================================== */ -/* ========================================================================= */ - -GLOBAL Int AMD_order -( - Int n, - const Int Ap [ ], - const Int Ai [ ], - Int P [ ], - double Control [ ], - double Info [ ] -) -{ - Int *Len, *S, nz, i, *Pinv, info, status, *Rp, *Ri, *Cp, *Ci, ok ; - size_t nzaat, slen ; - double mem = 0 ; - - - - -#ifndef NDEBUG - AMD_debug_init ("amd") ; -#endif - - /* clear the Info array, if it exists */ - info = Info != (double *) NULL ; - if (info) - { - for (i = 0 ; i < AMD_INFO ; i++) - { - Info [i] = EMPTY ; - } - Info [AMD_N] = n ; - Info [AMD_STATUS] = AMD_OK ; - } - - /* make sure inputs exist and n is >= 0 */ - if (Ai == (Int *) NULL || Ap == (Int *) NULL || P == (Int *) NULL || n < 0) - { - if (info) Info [AMD_STATUS] = AMD_INVALID ; - return (AMD_INVALID) ; /* arguments are invalid */ - } - - - if (n == 0) - { - return (AMD_OK) ; /* n is 0 so there's nothing to do */ - } - - nz = Ap [n] ; - if (info) - { - Info [AMD_NZ] = nz ; - } - if (nz < 0) - { - if (info) Info [AMD_STATUS] = AMD_INVALID ; - return (AMD_INVALID) ; - } - - /* check if n or nz will cause size_t overflow */ - if (((size_t) n) >= SIZE_T_MAX / sizeof (Int) - || ((size_t) nz) >= SIZE_T_MAX / sizeof (Int)) - { - if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ; - return (AMD_OUT_OF_MEMORY) ; /* problem too large */ - } - - - - - /* check the input matrix: AMD_OK, AMD_INVALID, or AMD_OK_BUT_JUMBLED */ - status = AMD_valid (n, n, Ap, Ai) ; - if (status == AMD_INVALID) - { - if (info) Info [AMD_STATUS] = AMD_INVALID ; - return (AMD_INVALID) ; /* matrix is invalid */ - } - - /* allocate two size-n integer workspaces */ - Len = amd_malloc (n * sizeof (Int)) ; - Pinv = amd_malloc (n * sizeof (Int)) ; - mem += n ; - mem += n ; - if (!Len || !Pinv) - { - /* :: out of memory :: */ - amd_free (Len) ; - amd_free (Pinv) ; - if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ; - return (AMD_OUT_OF_MEMORY) ; - } - - if (status == AMD_OK_BUT_JUMBLED) - { - /* sort the input matrix and remove duplicate entries */ - AMD_DEBUG1 (("Matrix is jumbled\n")) ; - Rp = amd_malloc ((n+1) * sizeof (Int)) ; - Ri = amd_malloc (MAX (nz,1) * sizeof (Int)) ; - mem += (n+1) ; - mem += MAX (nz,1) ; - if (!Rp || !Ri) - { - /* :: out of memory :: */ - amd_free (Rp) ; - amd_free (Ri) ; - amd_free (Len) ; - amd_free (Pinv) ; - if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ; - return (AMD_OUT_OF_MEMORY) ; - } - /* use Len and Pinv as workspace to create R = A' */ - AMD_preprocess (n, Ap, Ai, Rp, Ri, Len, Pinv) ; - Cp = Rp ; - Ci = Ri ; - } - else - { - /* order the input matrix as-is. No need to compute R = A' first */ - Rp = NULL ; - Ri = NULL ; - Cp = (Int *) Ap ; - Ci = (Int *) Ai ; - } - - /* --------------------------------------------------------------------- */ - /* determine the symmetry and count off-diagonal nonzeros in A+A' */ - /* --------------------------------------------------------------------- */ - - nzaat = AMD_aat (n, Cp, Ci, Len, P, Info) ; - AMD_DEBUG1 (("nzaat: %g\n", (double) nzaat)) ; - ASSERT ((MAX (nz-n, 0) <= nzaat) && (nzaat <= 2 * (size_t) nz)) ; - - /* --------------------------------------------------------------------- */ - /* allocate workspace for matrix, elbow room, and 6 size-n vectors */ - /* --------------------------------------------------------------------- */ - - S = NULL ; - slen = nzaat ; /* space for matrix */ - ok = ((slen + nzaat/5) >= slen) ; /* check for size_t overflow */ - slen += nzaat/5 ; /* add elbow room */ - for (i = 0 ; ok && i < 7 ; i++) - { - ok = ((slen + n) > slen) ; /* check for size_t overflow */ - slen += n ; /* size-n elbow room, 6 size-n work */ - } - mem += slen ; - ok = ok && (slen < SIZE_T_MAX / sizeof (Int)) ; /* check for overflow */ - ok = ok && (slen < Int_MAX) ; /* S[i] for Int i must be OK */ - if (ok) - { - S = amd_malloc (slen * sizeof (Int)) ; - } - AMD_DEBUG1 (("slen %g\n", (double) slen)) ; - if (!S) - { - /* :: out of memory :: (or problem too large) */ - amd_free (Rp) ; - amd_free (Ri) ; - amd_free (Len) ; - amd_free (Pinv) ; - if (info) Info [AMD_STATUS] = AMD_OUT_OF_MEMORY ; - return (AMD_OUT_OF_MEMORY) ; - } - if (info) - { - /* memory usage, in bytes. */ - Info [AMD_MEMORY] = mem * sizeof (Int) ; - } - - /* --------------------------------------------------------------------- */ - /* order the matrix */ - /* --------------------------------------------------------------------- */ - AMD_1 (n, Cp, Ci, P, Pinv, Len, slen, S, Control, Info) ; - - /* --------------------------------------------------------------------- */ - /* free the workspace */ - /* --------------------------------------------------------------------- */ - - amd_free (Rp) ; - amd_free (Ri) ; - amd_free (Len) ; - amd_free (Pinv) ; - amd_free (S) ; - if (info) Info [AMD_STATUS] = status ; - return (status) ; /* successful ordering */ -} diff --git a/src-x64/amd_order.o b/src-x64/amd_order.o deleted file mode 100644 index e1daf3ee0eeebec9998f21926c149cd9adda32b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2801 zcmai0ZERCj7(RC`v*7R)=7u^yYP=+aNZDkNjS%g1Bb;g*n>biiU@Ki`hlMp=M+R90 z?5%iG7a_*L4}KV9{9#P=hd+oPu^S%)12T~qqb5%L2xAbpn#^fn*Y`c=w!OtBp5&hU zocFxv{dmrM?mgYFE+W`w?;zwsf$YScj0`3Pmfc5oLf%yfxmhX4cf-p?0$uLzP%>oE zD+fI!kah3q?=LrJl^p=R)lF7Oc`W=6mO8#4RNKwi@~b?g!Q+mX>Q%vH9P~~>uGnnw z2)#t9o(tqd|FIYFtZr<9nPT$*JYG(3O+!%$kQ1ICLGOy`7pNp2C)itCnlS2J2fgdJ z>1iF>7HzZEzPV$|v+UsYW1vP?e5@XTH~-4ZFZ=jumN~9Ez^DW5@-`(UoUluGJwI`_sQtJp@+x z^vKnR^ej!c!@!@uLG`BrG-lJYR9}u>!t)#TSvG9{9Ig1n8$M&aO$|`}F_=Ub8`DNk zqbtYIxRbuN7{p#a>E{zX$7inMqSV~H#z(21gCtmH0gBpqyBcH}pBgZnEK`FbG}|Rb zOIbRL!#LI7!4OhIY8PqCz!It-k#1+T)ISOvYg41RR-_7pAPykY*&Gc*w!vwt?*e@v zIO_89t3G~(&oI7Kt@rVm>cSubB0~1bh4Zp8KC-bf%l^88?gDJ&S_R|dOgYel-5t%M&ZEoX3YJ)EW6d`3E zOph^;HT$50M3bsZ=9pQF>>$HIqZVILqt?g&#%=}#h(sV50`BN&8y|;FwM{+jPiK?M zSo%_ODL*T!WniH{eU7HTy=53DAZLTt%aUaWPhkbWu)TAewpH7vZPz+aLUBHT)eolX zroM)189ZOUKGG9lZt6o;E=~-$OGX_xYJsw371&+wkaizA0Wlbpd!S>taaUwVvMA`m zA`n!Suw*HR%mZN9q^ep{RgF|ZH)B*IRn>wjU}%yEuY%jj%>qMJn`J({MM0}kc!pSN z#BMloSrokofeBN~8~#%G_R?oAvXP%F45yYd6jX`|FR*0jP`RSRF1OzlFkjJSyY)3d3yb-k;8uz6kQx~5g}zW(09RsE6Zqpl|hdSgk~j=e5_@9s?Ig{#Tk;$CAK`oEVK6qdqcClk=)VX>1xp|2IF5>A&yuK>DN$bKovTHuo**Y*Iq zPt4+HWSKy}7iRG%BQ4helCzHkl539ul539@X3rJS_kd&s5SWSH08}S@yaz~Hfg!;v zx1pMeaD11LK}YZp386#7qE(2yr#BW6V?yQ)LS9rtySh9365Wx6J8a7F6)>?vT%*iVzId`w+8%S+Z0!E(t=($vDhJHy=A5dkD3rUl$^b9 zN{}%r`P7sU0((Jlze1rruX#yhi4G16`Pa=}vdeiddf)4un2}WW++ylE~y)Q*# zdx=a{-M4RF9=a2eo_I3hE*Labtnyu /* required */ -#include /* for distribution functions etc. */ -GLOBAL void AMD_order_wrapper -( - Int *n, - const Int *Ap, - const Int *Ai, - Int *P, - double *Control, - double *Info -) { -amd_defaults (Control) ; -amd_order(*n,Ap,Ai,P,Control,Info); -return; -} diff --git a/src-x64/amd_order_wrapper.h b/src-x64/amd_order_wrapper.h deleted file mode 100644 index 8fc8d5e..0000000 --- a/src-x64/amd_order_wrapper.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef _AMD_ORDER_WRAPPER_H_ -#define _AMD_ORDER_WRAPPER_H_ -#include -#define Int int - -void AMD_order_wrapper - ( - Int *n, - const Int *Ap, - const Int *Ai, - Int *P, - double *Control, - double *Info - ); - -#endif diff --git a/src-x64/amd_order_wrapper.o b/src-x64/amd_order_wrapper.o deleted file mode 100644 index ca4934989549abab51f621cc03a41e309f040ebb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 964 zcmYdkV`l&XDJBL6Aux-DL9ZmWq6Ex_5D7p^hmnEd1rUP(P$`1~LqLLFN@7VOSOhoW zzz}diFR8c~w+e_%15lm52_aQbdn-^a765ANfw~Q5f&+trgI)ouIv$|p9H6>CP_@iJ zK1iLup(RWkn05e?D=^Fpa0m?#3-)M!W8u*~N2LL%#-n?UN(YGUJm=AQ-KWz4l zM@7M-^X3bnFoRDwkmJ)06!z%+)y?P82~!T$-h9L&Ixar;B}nZAAYkNRW#C9+F^ih(#)I^g``Ra-^@JsaNTe- z6NQ4J{H)aE5={jYJxe`fsD2$F4GJd~h6o@j2xb8ZAfJJO8B9W096&x7SWGW1Gba_u z0)c=385q*RAtDD6Kq8HxY(@qJ1}3yn14$vLCXh5UBgjvnG=u=iDG4OQjLjURR0N7S ztZI-_1}j(%$j_(%IaRO$rI;B(=>lXTDsX{vLHUE3(F#=(%JYYd0{sqV!{Q5+QkfXi zfMQ_(>y_r^WM-%4R5IulffA)kRaF&3Vs1)&eo;zlQG9t(VnIP_kzO)`qpu697`ld( O)U?FXoRVUMZUz8h5P&TJ diff --git a/src-x64/amd_post_tree.c b/src-x64/amd_post_tree.c deleted file mode 100644 index 7ab1aa5..0000000 --- a/src-x64/amd_post_tree.c +++ /dev/null @@ -1,120 +0,0 @@ -/* ========================================================================= */ -/* === AMD_post_tree ======================================================= */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* Post-ordering of a supernodal elimination tree. */ - -#include "amd_internal.h" - -GLOBAL Int AMD_post_tree -( - Int root, /* root of the tree */ - Int k, /* start numbering at k */ - Int Child [ ], /* input argument of size nn, undefined on - * output. Child [i] is the head of a link - * list of all nodes that are children of node - * i in the tree. */ - const Int Sibling [ ], /* input argument of size nn, not modified. - * If f is a node in the link list of the - * children of node i, then Sibling [f] is the - * next child of node i. - */ - Int Order [ ], /* output order, of size nn. Order [i] = k - * if node i is the kth node of the reordered - * tree. */ - Int Stack [ ] /* workspace of size nn */ -#ifndef NDEBUG - , Int nn /* nodes are in the range 0..nn-1. */ -#endif -) -{ - Int f, head, h, i ; - -#if 0 - /* --------------------------------------------------------------------- */ - /* recursive version (Stack [ ] is not used): */ - /* --------------------------------------------------------------------- */ - - /* this is simple, but can caouse stack overflow if nn is large */ - i = root ; - for (f = Child [i] ; f != EMPTY ; f = Sibling [f]) - { - k = AMD_post_tree (f, k, Child, Sibling, Order, Stack, nn) ; - } - Order [i] = k++ ; - return (k) ; -#endif - - /* --------------------------------------------------------------------- */ - /* non-recursive version, using an explicit stack */ - /* --------------------------------------------------------------------- */ - - /* push root on the stack */ - head = 0 ; - Stack [0] = root ; - - while (head >= 0) - { - /* get head of stack */ - ASSERT (head < nn) ; - i = Stack [head] ; - AMD_DEBUG1 (("head of stack "ID" \n", i)) ; - ASSERT (i >= 0 && i < nn) ; - - if (Child [i] != EMPTY) - { - /* the children of i are not yet ordered */ - /* push each child onto the stack in reverse order */ - /* so that small ones at the head of the list get popped first */ - /* and the biggest one at the end of the list gets popped last */ - for (f = Child [i] ; f != EMPTY ; f = Sibling [f]) - { - head++ ; - ASSERT (head < nn) ; - ASSERT (f >= 0 && f < nn) ; - } - h = head ; - ASSERT (head < nn) ; - for (f = Child [i] ; f != EMPTY ; f = Sibling [f]) - { - ASSERT (h > 0) ; - Stack [h--] = f ; - AMD_DEBUG1 (("push "ID" on stack\n", f)) ; - ASSERT (f >= 0 && f < nn) ; - } - ASSERT (Stack [h] == i) ; - - /* delete child list so that i gets ordered next time we see it */ - Child [i] = EMPTY ; - } - else - { - /* the children of i (if there were any) are already ordered */ - /* remove i from the stack and order it. Front i is kth front */ - head-- ; - AMD_DEBUG1 (("pop "ID" order "ID"\n", i, k)) ; - Order [i] = k++ ; - ASSERT (k <= nn) ; - } - -#ifndef NDEBUG - AMD_DEBUG1 (("\nStack:")) ; - for (h = head ; h >= 0 ; h--) - { - Int j = Stack [h] ; - AMD_DEBUG1 ((" "ID, j)) ; - ASSERT (j >= 0 && j < nn) ; - } - AMD_DEBUG1 (("\n\n")) ; - ASSERT (head < nn) ; -#endif - - } - return (k) ; -} diff --git a/src-x64/amd_post_tree.o b/src-x64/amd_post_tree.o deleted file mode 100644 index 253779068f9b194c87db745429afe084862a4882..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 905 zcmYdkV`l&XBPIq00Wgb&L9ZmWq6Ex_5EFou4kMBPkg32Bkf4{6Sdxe;jKOnY2sogZ zR9uW9fhN!ZRHtu(CWwU#wzmS+VjiHnJ!tN8U@&mdE5KBD0;o;|=vNS624avpeM3ty zA4WI;8CNjO3vdVz3-;(PQStETu2FGtHN0eayOYl&nP;AFuS|z$GIR5f|0PZy$tTkI zS|0P_Vhk#mNPv@6sh>nXtJOK$XGBYzU8!#m>7C>AMv6X?r-PzenL8HRL zEZ)pSw;;bbvqHBxHA6?isWdaEL?NkC!8bF{JzO{3%tWD}C_gJTxkOXJM9)&s7-9^V zWC4=Q3?LH1;sCO^z+!r7nK`LI76|NF!w_>g47^IASlw9v6+LExx=A14>vSO8@{|JC3RV diff --git a/src-x64/amd_postorder.c b/src-x64/amd_postorder.c deleted file mode 100644 index f262bf7..0000000 --- a/src-x64/amd_postorder.c +++ /dev/null @@ -1,206 +0,0 @@ -/* ========================================================================= */ -/* === AMD_postorder ======================================================= */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* Perform a postordering (via depth-first search) of an assembly tree. */ - -#include "amd_internal.h" - -GLOBAL void AMD_postorder -( - /* inputs, not modified on output: */ - Int nn, /* nodes are in the range 0..nn-1 */ - Int Parent [ ], /* Parent [j] is the parent of j, or EMPTY if root */ - Int Nv [ ], /* Nv [j] > 0 number of pivots represented by node j, - * or zero if j is not a node. */ - Int Fsize [ ], /* Fsize [j]: size of node j */ - - /* output, not defined on input: */ - Int Order [ ], /* output post-order */ - - /* workspaces of size nn: */ - Int Child [ ], - Int Sibling [ ], - Int Stack [ ] -) -{ - Int i, j, k, parent, frsize, f, fprev, maxfrsize, bigfprev, bigf, fnext ; - - for (j = 0 ; j < nn ; j++) - { - Child [j] = EMPTY ; - Sibling [j] = EMPTY ; - } - - /* --------------------------------------------------------------------- */ - /* place the children in link lists - bigger elements tend to be last */ - /* --------------------------------------------------------------------- */ - - for (j = nn-1 ; j >= 0 ; j--) - { - if (Nv [j] > 0) - { - /* this is an element */ - parent = Parent [j] ; - if (parent != EMPTY) - { - /* place the element in link list of the children its parent */ - /* bigger elements will tend to be at the end of the list */ - Sibling [j] = Child [parent] ; - Child [parent] = j ; - } - } - } - -#ifndef NDEBUG - { - Int nels, ff, nchild ; - AMD_DEBUG1 (("\n\n================================ AMD_postorder:\n")); - nels = 0 ; - for (j = 0 ; j < nn ; j++) - { - if (Nv [j] > 0) - { - AMD_DEBUG1 (( ""ID" : nels "ID" npiv "ID" size "ID - " parent "ID" maxfr "ID"\n", j, nels, - Nv [j], Fsize [j], Parent [j], Fsize [j])) ; - /* this is an element */ - /* dump the link list of children */ - nchild = 0 ; - AMD_DEBUG1 ((" Children: ")) ; - for (ff = Child [j] ; ff != EMPTY ; ff = Sibling [ff]) - { - AMD_DEBUG1 ((ID" ", ff)) ; - ASSERT (Parent [ff] == j) ; - nchild++ ; - ASSERT (nchild < nn) ; - } - AMD_DEBUG1 (("\n")) ; - parent = Parent [j] ; - if (parent != EMPTY) - { - ASSERT (Nv [parent] > 0) ; - } - nels++ ; - } - } - } - AMD_DEBUG1 (("\n\nGo through the children of each node, and put\n" - "the biggest child last in each list:\n")) ; -#endif - - /* --------------------------------------------------------------------- */ - /* place the largest child last in the list of children for each node */ - /* --------------------------------------------------------------------- */ - - for (i = 0 ; i < nn ; i++) - { - if (Nv [i] > 0 && Child [i] != EMPTY) - { - -#ifndef NDEBUG - Int nchild ; - AMD_DEBUG1 (("Before partial sort, element "ID"\n", i)) ; - nchild = 0 ; - for (f = Child [i] ; f != EMPTY ; f = Sibling [f]) - { - ASSERT (f >= 0 && f < nn) ; - AMD_DEBUG1 ((" f: "ID" size: "ID"\n", f, Fsize [f])) ; - nchild++ ; - ASSERT (nchild <= nn) ; - } -#endif - - /* find the biggest element in the child list */ - fprev = EMPTY ; - maxfrsize = EMPTY ; - bigfprev = EMPTY ; - bigf = EMPTY ; - for (f = Child [i] ; f != EMPTY ; f = Sibling [f]) - { - ASSERT (f >= 0 && f < nn) ; - frsize = Fsize [f] ; - if (frsize >= maxfrsize) - { - /* this is the biggest seen so far */ - maxfrsize = frsize ; - bigfprev = fprev ; - bigf = f ; - } - fprev = f ; - } - ASSERT (bigf != EMPTY) ; - - fnext = Sibling [bigf] ; - - AMD_DEBUG1 (("bigf "ID" maxfrsize "ID" bigfprev "ID" fnext "ID - " fprev " ID"\n", bigf, maxfrsize, bigfprev, fnext, fprev)) ; - - if (fnext != EMPTY) - { - /* if fnext is EMPTY then bigf is already at the end of list */ - - if (bigfprev == EMPTY) - { - /* delete bigf from the element of the list */ - Child [i] = fnext ; - } - else - { - /* delete bigf from the middle of the list */ - Sibling [bigfprev] = fnext ; - } - - /* put bigf at the end of the list */ - Sibling [bigf] = EMPTY ; - ASSERT (Child [i] != EMPTY) ; - ASSERT (fprev != bigf) ; - ASSERT (fprev != EMPTY) ; - Sibling [fprev] = bigf ; - } - -#ifndef NDEBUG - AMD_DEBUG1 (("After partial sort, element "ID"\n", i)) ; - for (f = Child [i] ; f != EMPTY ; f = Sibling [f]) - { - ASSERT (f >= 0 && f < nn) ; - AMD_DEBUG1 ((" "ID" "ID"\n", f, Fsize [f])) ; - ASSERT (Nv [f] > 0) ; - nchild-- ; - } - ASSERT (nchild == 0) ; -#endif - - } - } - - /* --------------------------------------------------------------------- */ - /* postorder the assembly tree */ - /* --------------------------------------------------------------------- */ - - for (i = 0 ; i < nn ; i++) - { - Order [i] = EMPTY ; - } - - k = 0 ; - - for (i = 0 ; i < nn ; i++) - { - if (Parent [i] == EMPTY && Nv [i] > 0) - { - AMD_DEBUG1 (("Root of assembly tree "ID"\n", i)) ; - k = AMD_post_tree (i, k, Child, Sibling, Order, Stack -#ifndef NDEBUG - , nn -#endif - ) ; - } - } -} diff --git a/src-x64/amd_postorder.o b/src-x64/amd_postorder.o deleted file mode 100644 index cc727382da558d1c94f3b2b05729fefecbc1829b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1263 zcmah}Ur1A76hC*He-mcqgNWpP*n@#y9S(ES!*1T`U2I~c4oaQ6&0Lv|?MhQbh3kZm z%dB349*m$Kd`Re_hoF#^mH1>O3F(7DFPa914?%+Ke0R6l4W$G7&cEL|=Q|(wx4?7` zP>C4wIGHHn!rL!Hy7xUdeq4AhXY!YTyHdbJR+T$L|m2a ze<*EkOh337%XSU=S_f1+xUe2qfDjYza7EjLDvGPJ+I7Va^a?f1p9JpV;Jti1-^RDL zdD}0G@@}15d2D%z08x2jnL{047L{j~r)ZgH!uUwm3r?j*AU30uoEGIR z6EA;bMpm8H@9|~xOb!k*mrdeOXi|#iobiw2(MF|p9?O5Fq<(&Z4)*vD1@coM`#acU z-Q!=sm@v(zOG@wa_JgrJCs}j*4+OF)GJ6796_jE+e)xmOzt)^6y603%)azh0l`>B~ z!rDesy1*|PXnTQFyX3cwVBa?1zJ1lKdB{5#`9xN%8`h*-d1-l$ zU3O0OaptlqdKVDoMaI54UdPL0vyd9z&>?UKDayJQBSQq)>B3tA&#ct6e z`{u-ow!bL9sk_?c>*PE5PQHuxEjE&ldD!;i74A@B3iF__x1jn&cYZjpB{!M<-t@(= zN1Fh=z-Oe=)X-4RmdEO9eYLjA@K7`qtBeNwE7%Lep#h2Q9brA8!6t8|x7NmnBSY7N ze(5Z0p6=Vri%1ErxzAQ<8N zTJDUd8DPPn-BAmvDwC@;ZDi;sdSE6`DNT&}bh=LlN9m`3BqoD*St^DyPcNCA%f^(E zp{)CdOc<%q%ILq3k*U`_y*l^T#ofV)p1LhJJU9@#5gZr+E diff --git a/src-x64/amd_preprocess.c b/src-x64/amd_preprocess.c deleted file mode 100644 index 1eb2d1f..0000000 --- a/src-x64/amd_preprocess.c +++ /dev/null @@ -1,118 +0,0 @@ -/* ========================================================================= */ -/* === AMD_preprocess ====================================================== */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* AMD, Copyright (c) Timothy A. Davis, */ -/* Patrick R. Amestoy, and Iain S. Duff. See ../LICENSE.note for License. */ -/* email: DrTimothyAldenDavis@gmail.com */ -/* ------------------------------------------------------------------------- */ - -/* Sorts, removes duplicate entries, and transposes from the nonzero pattern of - * a column-form matrix A, to obtain the matrix R. The input matrix can have - * duplicate entries and/or unsorted columns (AMD_valid (n,Ap,Ai) must not be - * AMD_INVALID). - * - * This input condition is NOT checked. This routine is not user-callable. - */ - -#include "amd_internal.h" - -/* ========================================================================= */ -/* === AMD_preprocess ====================================================== */ -/* ========================================================================= */ - -/* AMD_preprocess does not check its input for errors or allocate workspace. - * On input, the condition (AMD_valid (n,n,Ap,Ai) != AMD_INVALID) must hold. - */ - -GLOBAL void AMD_preprocess -( - Int n, /* input matrix: A is n-by-n */ - const Int Ap [ ], /* size n+1 */ - const Int Ai [ ], /* size nz = Ap [n] */ - - /* output matrix R: */ - Int Rp [ ], /* size n+1 */ - Int Ri [ ], /* size nz (or less, if duplicates present) */ - - Int W [ ], /* workspace of size n */ - Int Flag [ ] /* workspace of size n */ -) -{ - - /* --------------------------------------------------------------------- */ - /* local variables */ - /* --------------------------------------------------------------------- */ - - Int i, j, p, p2 ; - - ASSERT (AMD_valid (n, n, Ap, Ai) != AMD_INVALID) ; - - /* --------------------------------------------------------------------- */ - /* count the entries in each row of A (excluding duplicates) */ - /* --------------------------------------------------------------------- */ - - for (i = 0 ; i < n ; i++) - { - W [i] = 0 ; /* # of nonzeros in row i (excl duplicates) */ - Flag [i] = EMPTY ; /* Flag [i] = j if i appears in column j */ - } - for (j = 0 ; j < n ; j++) - { - p2 = Ap [j+1] ; - for (p = Ap [j] ; p < p2 ; p++) - { - i = Ai [p] ; - if (Flag [i] != j) - { - /* row index i has not yet appeared in column j */ - W [i]++ ; /* one more entry in row i */ - Flag [i] = j ; /* flag row index i as appearing in col j*/ - } - } - } - - /* --------------------------------------------------------------------- */ - /* compute the row pointers for R */ - /* --------------------------------------------------------------------- */ - - Rp [0] = 0 ; - for (i = 0 ; i < n ; i++) - { - Rp [i+1] = Rp [i] + W [i] ; - } - for (i = 0 ; i < n ; i++) - { - W [i] = Rp [i] ; - Flag [i] = EMPTY ; - } - - /* --------------------------------------------------------------------- */ - /* construct the row form matrix R */ - /* --------------------------------------------------------------------- */ - - /* R = row form of pattern of A */ - for (j = 0 ; j < n ; j++) - { - p2 = Ap [j+1] ; - for (p = Ap [j] ; p < p2 ; p++) - { - i = Ai [p] ; - if (Flag [i] != j) - { - /* row index i has not yet appeared in column j */ - Ri [W [i]++] = j ; /* put col j in row i */ - Flag [i] = j ; /* flag row index i as appearing in col j*/ - } - } - } - -#ifndef NDEBUG - ASSERT (AMD_valid (n, n, Rp, Ri) == AMD_OK) ; - for (j = 0 ; j < n ; j++) - { - ASSERT (W [j] == Rp [j+1]) ; - } -#endif -} diff --git a/src-x64/amd_preprocess.o b/src-x64/amd_preprocess.o deleted file mode 100644 index f9ba4f34d9be63bc9998027839b693fde496ca66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1138 zcmZuxPfXKL82{c{7!ndV%!>!&Jc2R7X}EJR;(J|{Htb8@_xIQDPy4>EJaGe|D-^(( zsnNiya!ob$9#as2A0In0kX>R|3Tnab?4!pa+hUh1l|CVdtATOBh{M&_FzeQwg*_Pg z(&dE5Arxm7CvF5o-eBBs3yVhvf(wQ@$HQ@Ky}OVv8|UZvS$<|VH+Lu1RJ}{-=Dc_9 z@#hp4%IMSU_yvVq`~j_zTv(i8N@*>`wd>tv_+)e(5=~*BPBdftf_}oC?nJa7C@mfP zPH!8YSE3=%C}VgVqU1`o4_zrEMsY#a&1*D;^q{D{r!(BQ>XE2@LIT&VzvU0iFA{F8 zvZLdVNKHsKJzA3T>?ZY@UD_)B3j=I%9P?-wn){9+0+9ap=$lQ?o}eEKTxaJNZcvnd z3cgOp7J}&qJ&7RX~R$P+%~9})97nj8cP~wBWlk8hDh(i=2dqFZfDPWo8|3INhXAoNx_?WY? Z)%8;Gfn3@IwoDezyS23i&Ua;x`~_a9+M56X diff --git a/vignettes/FRK_intro.pdf b/vignettes/FRK_intro.pdf index 8cd8f086262ade9705dbd44745e1d67242bc595b..532c2909d452f9a227342a45e6dc36d34ab1f05c 100644 GIT binary patch delta 47666 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

hPv;unnJ;VTZHn5XB!w^ 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�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 IOJlkJ19+Vie*gdg delta 48162 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%0AC!?6Y#TKy~atI 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 Pfad|RIdcpw48{Hr16Rcv