diff options
Diffstat (limited to 'usr/include/ccolamd.h')
-rwxr-xr-x | usr/include/ccolamd.h | 363 |
1 files changed, 363 insertions, 0 deletions
diff --git a/usr/include/ccolamd.h b/usr/include/ccolamd.h new file mode 100755 index 000000000..5cea1bcfe --- /dev/null +++ b/usr/include/ccolamd.h @@ -0,0 +1,363 @@ +/* ========================================================================== */ +/* === CCOLAMD/ccolamd.h ==================================================== */ +/* ========================================================================== */ + +/* ---------------------------------------------------------------------------- + * CCOLAMD Copyright (C), Univ. of Florida. Authors: Timothy A. Davis, + * Sivasankaran Rajamanickam, and Stefan Larimore + * See License.txt for the Version 2.1 of the GNU Lesser General Public License + * -------------------------------------------------------------------------- */ + +/* + * You must include this file (ccolamd.h) in any routine that uses ccolamd, + * csymamd, or the related macros and definitions. + */ + +#ifndef CCOLAMD_H +#define CCOLAMD_H + +/* make it easy for C++ programs to include CCOLAMD */ +#ifdef __cplusplus +extern "C" { +#endif + +/* for size_t definition: */ +#include <stdlib.h> + +/* ========================================================================== */ +/* === CCOLAMD version ====================================================== */ +/* ========================================================================== */ + +/* All versions of CCOLAMD will include the following definitions. + * As an example, to test if the version you are using is 1.3 or later: + * + * if (CCOLAMD_VERSION >= CCOLAMD_VERSION_CODE (1,3)) ... + * + * This also works during compile-time: + * + * #if CCOLAMD_VERSION >= CCOLAMD_VERSION_CODE (1,3) + * printf ("This is version 1.3 or later\n") ; + * #else + * printf ("This is an early version\n") ; + * #endif + */ + +#define CCOLAMD_DATE "Jun 1, 2012" +#define CCOLAMD_VERSION_CODE(main,sub) ((main) * 1000 + (sub)) +#define CCOLAMD_MAIN_VERSION 2 +#define CCOLAMD_SUB_VERSION 8 +#define CCOLAMD_SUBSUB_VERSION 0 +#define CCOLAMD_VERSION \ + CCOLAMD_VERSION_CODE(CCOLAMD_MAIN_VERSION,CCOLAMD_SUB_VERSION) + +/* ========================================================================== */ +/* === Knob and statistics definitions ====================================== */ +/* ========================================================================== */ + +/* size of the knobs [ ] array. Only knobs [0..3] are currently used. */ +#define CCOLAMD_KNOBS 20 + +/* number of output statistics. Only stats [0..10] are currently used. */ +#define CCOLAMD_STATS 20 + +/* knobs [0] and stats [0]: dense row knob and output statistic. */ +#define CCOLAMD_DENSE_ROW 0 + +/* knobs [1] and stats [1]: dense column knob and output statistic. */ +#define CCOLAMD_DENSE_COL 1 + +/* knobs [2]: aggressive absorption option */ +#define CCOLAMD_AGGRESSIVE 2 + +/* knobs [3]: LU or Cholesky factorization option */ +#define CCOLAMD_LU 3 + +/* stats [2]: memory defragmentation count output statistic */ +#define CCOLAMD_DEFRAG_COUNT 2 + +/* stats [3]: ccolamd status: zero OK, > 0 warning or notice, < 0 error */ +#define CCOLAMD_STATUS 3 + +/* stats [4..6]: error info, or info on jumbled columns */ +#define CCOLAMD_INFO1 4 +#define CCOLAMD_INFO2 5 +#define CCOLAMD_INFO3 6 + +/* stats [7]: number of originally empty rows */ +#define CCOLAMD_EMPTY_ROW 7 +/* stats [8]: number of originally empty cols */ +#define CCOLAMD_EMPTY_COL 8 +/* stats [9]: number of rows with entries only in dense cols */ +#define CCOLAMD_NEWLY_EMPTY_ROW 9 +/* stats [10]: number of cols with entries only in dense rows */ +#define CCOLAMD_NEWLY_EMPTY_COL 10 + +/* error codes returned in stats [3]: */ +#define CCOLAMD_OK (0) +#define CCOLAMD_OK_BUT_JUMBLED (1) +#define CCOLAMD_ERROR_A_not_present (-1) +#define CCOLAMD_ERROR_p_not_present (-2) +#define CCOLAMD_ERROR_nrow_negative (-3) +#define CCOLAMD_ERROR_ncol_negative (-4) +#define CCOLAMD_ERROR_nnz_negative (-5) +#define CCOLAMD_ERROR_p0_nonzero (-6) +#define CCOLAMD_ERROR_A_too_small (-7) +#define CCOLAMD_ERROR_col_length_negative (-8) +#define CCOLAMD_ERROR_row_index_out_of_bounds (-9) +#define CCOLAMD_ERROR_out_of_memory (-10) +#define CCOLAMD_ERROR_invalid_cmember (-11) +#define CCOLAMD_ERROR_internal_error (-999) + +/* ========================================================================== */ +/* === Prototypes of user-callable routines ================================= */ +/* ========================================================================== */ + +#include "SuiteSparse_config.h" + +size_t ccolamd_recommended /* returns recommended value of Alen, */ + /* or 0 if input arguments are erroneous */ +( + int nnz, /* nonzeros in A */ + int n_row, /* number of rows in A */ + int n_col /* number of columns in A */ +) ; + +size_t ccolamd_l_recommended /* returns recommended value of Alen, */ + /* or 0 if input arguments are erroneous */ +( + SuiteSparse_long nnz, /* nonzeros in A */ + SuiteSparse_long n_row, /* number of rows in A */ + SuiteSparse_long n_col /* number of columns in A */ +) ; + +void ccolamd_set_defaults /* sets default parameters */ +( /* knobs argument is modified on output */ + double knobs [CCOLAMD_KNOBS] /* parameter settings for ccolamd */ +) ; + +void ccolamd_l_set_defaults /* sets default parameters */ +( /* knobs argument is modified on output */ + double knobs [CCOLAMD_KNOBS] /* parameter settings for ccolamd */ +) ; + +int ccolamd /* returns (1) if successful, (0) otherwise*/ +( /* A and p arguments are modified on output */ + int n_row, /* number of rows in A */ + int n_col, /* number of columns in A */ + int Alen, /* size of the array A */ + int A [ ], /* row indices of A, of size Alen */ + int p [ ], /* column pointers of A, of size n_col+1 */ + double knobs [CCOLAMD_KNOBS],/* parameter settings for ccolamd */ + int stats [CCOLAMD_STATS], /* ccolamd output statistics and error codes */ + int cmember [ ] /* Constraint set of A, of size n_col */ +) ; + +SuiteSparse_long ccolamd_l /* as ccolamd w/ SuiteSparse_long integers */ +( + SuiteSparse_long n_row, + SuiteSparse_long n_col, + SuiteSparse_long Alen, + SuiteSparse_long A [ ], + SuiteSparse_long p [ ], + double knobs [CCOLAMD_KNOBS], + SuiteSparse_long stats [CCOLAMD_STATS], + SuiteSparse_long cmember [ ] +) ; + +int csymamd /* return (1) if OK, (0) otherwise */ +( + int n, /* number of rows and columns of A */ + int A [ ], /* row indices of A */ + int p [ ], /* column pointers of A */ + int perm [ ], /* output permutation, size n_col+1 */ + double knobs [CCOLAMD_KNOBS],/* parameters (uses defaults if NULL) */ + int stats [CCOLAMD_STATS], /* output statistics and error codes */ + void * (*allocate) (size_t, size_t), /* pointer to calloc (ANSI C) or */ + /* mxCalloc (for MATLAB mexFunction) */ + void (*release) (void *), /* pointer to free (ANSI C) or */ + /* mxFree (for MATLAB mexFunction) */ + int cmember [ ], /* Constraint set of A */ + int stype /* 0: use both parts, >0: upper, <0: lower */ +) ; + +SuiteSparse_long csymamd_l /* as csymamd, w/ SuiteSparse_long integers */ +( + SuiteSparse_long n, + SuiteSparse_long A [ ], + SuiteSparse_long p [ ], + SuiteSparse_long perm [ ], + double knobs [CCOLAMD_KNOBS], + SuiteSparse_long stats [CCOLAMD_STATS], + void * (*allocate) (size_t, size_t), + void (*release) (void *), + SuiteSparse_long cmember [ ], + SuiteSparse_long stype +) ; + +void ccolamd_report +( + int stats [CCOLAMD_STATS] +) ; + +void ccolamd_l_report +( + SuiteSparse_long stats [CCOLAMD_STATS] +) ; + +void csymamd_report +( + int stats [CCOLAMD_STATS] +) ; + +void csymamd_l_report +( + SuiteSparse_long stats [CCOLAMD_STATS] +) ; + + +/* ========================================================================== */ +/* === Prototypes of "expert" routines ====================================== */ +/* ========================================================================== */ + +/* These routines are meant to be used internally, or in a future version of + * UMFPACK. They appear here so that UMFPACK can use them, but they should not + * be called directly by the user. + */ + +int ccolamd2 +( /* A and p arguments are modified on output */ + int n_row, /* number of rows in A */ + int n_col, /* number of columns in A */ + int Alen, /* size of the array A */ + int A [ ], /* row indices of A, of size Alen */ + int p [ ], /* column pointers of A, of size n_col+1 */ + double knobs [CCOLAMD_KNOBS],/* parameter settings for ccolamd */ + int stats [CCOLAMD_STATS], /* ccolamd output statistics and error codes */ + /* each Front_ array is of size n_col+1: */ + int Front_npivcol [ ], /* # pivot cols in each front */ + int Front_nrows [ ], /* # of rows in each front (incl. pivot rows) */ + int Front_ncols [ ], /* # of cols in each front (incl. pivot cols) */ + int Front_parent [ ], /* parent of each front */ + int Front_cols [ ], /* link list of pivot columns for each front */ + int *p_nfr, /* total number of frontal matrices */ + int InFront [ ], /* InFront [row] = f if row in front f */ + int cmember [ ] /* Constraint set of A */ +) ; + +SuiteSparse_long ccolamd2_l /* as ccolamd2, w/ SuiteSparse_long integers */ +( + SuiteSparse_long n_row, + SuiteSparse_long n_col, + SuiteSparse_long Alen, + SuiteSparse_long A [ ], + SuiteSparse_long p [ ], + double knobs [CCOLAMD_KNOBS], + SuiteSparse_long stats [CCOLAMD_STATS], + SuiteSparse_long Front_npivcol [ ], + SuiteSparse_long Front_nrows [ ], + SuiteSparse_long Front_ncols [ ], + SuiteSparse_long Front_parent [ ], + SuiteSparse_long Front_cols [ ], + SuiteSparse_long *p_nfr, + SuiteSparse_long InFront [ ], + SuiteSparse_long cmember [ ] +) ; + +void ccolamd_apply_order +( + int Front [ ], + const int Order [ ], + int Temp [ ], + int nn, + int nfr +) ; + +void ccolamd_l_apply_order +( + SuiteSparse_long Front [ ], + const SuiteSparse_long Order [ ], + SuiteSparse_long Temp [ ], + SuiteSparse_long nn, + SuiteSparse_long nfr +) ; + + +void ccolamd_fsize +( + int nn, + int MaxFsize [ ], + int Fnrows [ ], + int Fncols [ ], + int Parent [ ], + int Npiv [ ] +) ; + +void ccolamd_l_fsize +( + SuiteSparse_long nn, + SuiteSparse_long MaxFsize [ ], + SuiteSparse_long Fnrows [ ], + SuiteSparse_long Fncols [ ], + SuiteSparse_long Parent [ ], + SuiteSparse_long Npiv [ ] +) ; + +void ccolamd_postorder +( + int nn, + int Parent [ ], + int Npiv [ ], + int Fsize [ ], + int Order [ ], + int Child [ ], + int Sibling [ ], + int Stack [ ], + int Front_cols [ ], + int cmember [ ] +) ; + +void ccolamd_l_postorder +( + SuiteSparse_long nn, + SuiteSparse_long Parent [ ], + SuiteSparse_long Npiv [ ], + SuiteSparse_long Fsize [ ], + SuiteSparse_long Order [ ], + SuiteSparse_long Child [ ], + SuiteSparse_long Sibling [ ], + SuiteSparse_long Stack [ ], + SuiteSparse_long Front_cols [ ], + SuiteSparse_long cmember [ ] +) ; + +int ccolamd_post_tree +( + int root, + int k, + int Child [ ], + const int Sibling [ ], + int Order [ ], + int Stack [ ] +) ; + +SuiteSparse_long ccolamd_l_post_tree +( + SuiteSparse_long root, + SuiteSparse_long k, + SuiteSparse_long Child [ ], + const SuiteSparse_long Sibling [ ], + SuiteSparse_long Order [ ], + SuiteSparse_long Stack [ ] +) ; + +#ifndef EXTERN +#define EXTERN extern +#endif + +EXTERN int (*ccolamd_printf) (const char *, ...) ; + +#ifdef __cplusplus +} +#endif + +#endif |