kusano 7d535a
kusano 7d535a
<meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
kusano 7d535a
<title>SuperLU: SRC/colamd.c File Reference</title>
kusano 7d535a
<link href="doxygen.css" rel="stylesheet" type="text/css">
kusano 7d535a
<link href="tabs.css" rel="stylesheet" type="text/css">
kusano 7d535a
kusano 7d535a
kusano 7d535a
kusano 7d535a
  
kusano 7d535a
    
    kusano 7d535a
          
  • Main Page
  • kusano 7d535a
          
  • Data Structures
  • kusano 7d535a
          
  • Files
  • kusano 7d535a
        
    kusano 7d535a
      
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    SRC/colamd.c File Reference

    A sparse matrix column ordering algorithm. More...
    kusano 7d535a

    kusano 7d535a
    #include "colamd.h"
    kusano 7d535a
    #include <limits.h>
    kusano 7d535a
    #include <stdio.h>
    kusano 7d535a
    #include <assert.h>
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    Defines

    kusano 7d535a
    #define PUBLIC
    kusano 7d535a
    kusano 7d535a
    #define PRIVATE   static
    kusano 7d535a
    kusano 7d535a
    #define MAX(a, b)   (((a) > (b)) ? (a) : (b))
    kusano 7d535a
    kusano 7d535a
    #define MIN(a, b)   (((a) < (b)) ? (a) : (b))
    kusano 7d535a
    kusano 7d535a
    #define ONES_COMPLEMENT(r)   (-(r)-1)
    kusano 7d535a
    kusano 7d535a
    #define TRUE   (1)
    kusano 7d535a
    kusano 7d535a
    #define FALSE   (0)
    kusano 7d535a
    kusano 7d535a
    #define EMPTY   (-1)
    kusano 7d535a
    kusano 7d535a
    #define ALIVE   (0)
    kusano 7d535a
    kusano 7d535a
    #define DEAD   (-1)
    kusano 7d535a
    kusano 7d535a
    #define DEAD_PRINCIPAL   (-1)
    kusano 7d535a
    kusano 7d535a
    #define DEAD_NON_PRINCIPAL   (-2)
    kusano 7d535a
    kusano 7d535a
    #define ROW_IS_DEAD(r)   ROW_IS_MARKED_DEAD (Row[r].shared2.mark)
    kusano 7d535a
    kusano 7d535a
    #define ROW_IS_MARKED_DEAD(row_mark)   (row_mark < ALIVE)
    kusano 7d535a
    kusano 7d535a
    #define ROW_IS_ALIVE(r)   (Row [r].shared2.mark >= ALIVE)
    kusano 7d535a
    kusano 7d535a
    #define COL_IS_DEAD(c)   (Col [c].start < ALIVE)
    kusano 7d535a
    kusano 7d535a
    #define COL_IS_ALIVE(c)   (Col [c].start >= ALIVE)
    kusano 7d535a
    kusano 7d535a
    #define COL_IS_DEAD_PRINCIPAL(c)   (Col [c].start == DEAD_PRINCIPAL)
    kusano 7d535a
    kusano 7d535a
    #define KILL_ROW(r)   { Row [r].shared2.mark = DEAD ; }
    kusano 7d535a
    kusano 7d535a
    #define KILL_PRINCIPAL_COL(c)   { Col [c].start = DEAD_PRINCIPAL ; }
    kusano 7d535a
    kusano 7d535a
    #define KILL_NON_PRINCIPAL_COL(c)   { Col [c].start = DEAD_NON_PRINCIPAL ; }
    kusano 7d535a
    kusano 7d535a
    #define PRINTF   printf
    kusano 7d535a
    kusano 7d535a
    #define INDEX(i)   (i)
    kusano 7d535a
    kusano 7d535a
    #define DEBUG0(params)   ;
    kusano 7d535a
    kusano 7d535a
    #define DEBUG1(params)   ;
    kusano 7d535a
    kusano 7d535a
    #define DEBUG2(params)   ;
    kusano 7d535a
    kusano 7d535a
    #define DEBUG3(params)   ;
    kusano 7d535a
    kusano 7d535a
    #define DEBUG4(params)   ;
    kusano 7d535a
    kusano 7d535a
    #define ASSERT(expression)   ((void) 0)
    kusano 7d535a
    kusano 7d535a

    Functions

    kusano 7d535a
    PRIVATE int init_rows_cols (int n_row, int n_col, Colamd_Row Row[], Colamd_Col Col[], int A[], int p[], int stats[COLAMD_STATS])
    kusano 7d535a
    kusano 7d535a
    PRIVATE void init_scoring (int n_row, int n_col, Colamd_Row Row[], Colamd_Col Col[], int A[], int head[], double knobs[COLAMD_KNOBS], int *p_n_row2, int *p_n_col2, int *p_max_deg)
    kusano 7d535a
    kusano 7d535a
    PRIVATE int find_ordering (int n_row, int n_col, int Alen, Colamd_Row Row[], Colamd_Col Col[], int A[], int head[], int n_col2, int max_deg, int pfree)
    kusano 7d535a
    kusano 7d535a
    PRIVATE void order_children (int n_col, Colamd_Col Col[], int p[])
    kusano 7d535a
    kusano 7d535a
    PRIVATE void detect_super_cols (Colamd_Col Col[], int A[], int head[], int row_start, int row_length)
    kusano 7d535a
    kusano 7d535a
    PRIVATE int garbage_collection (int n_row, int n_col, Colamd_Row Row[], Colamd_Col Col[], int A[], int *pfree)
    kusano 7d535a
    kusano 7d535a
    PRIVATE int clear_mark (int n_row, Colamd_Row Row[])
    kusano 7d535a
    kusano 7d535a
    PRIVATE void print_report (char *method, int stats[COLAMD_STATS])
    kusano 7d535a
    kusano 7d535a
    PUBLIC int colamd_recommended (int nnz, int n_row, int n_col)
    kusano 7d535a
    kusano 7d535a
    PUBLIC void colamd_set_defaults (double knobs[COLAMD_KNOBS])
    kusano 7d535a
    kusano 7d535a
    PUBLIC int symamd (int n, int A[], int p[], int perm[], double knobs[COLAMD_KNOBS], int stats[COLAMD_STATS], void *(*allocate)(size_t, size_t), void(*release)(void *))
    kusano 7d535a
    kusano 7d535a
    PUBLIC int colamd (int n_row, int n_col, int Alen, int A[], int p[], double knobs[COLAMD_KNOBS], int stats[COLAMD_STATS])
    kusano 7d535a
    kusano 7d535a
    PUBLIC void colamd_report (int stats[COLAMD_STATS])
    kusano 7d535a
    kusano 7d535a
    PUBLIC void symamd_report (int stats[COLAMD_STATS])
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    Detailed Description

    kusano 7d535a
    kusano 7d535a
        ========================================================================== 
    kusano 7d535a
        === colamd/symamd - a sparse matrix column ordering algorithm ============ 
    kusano 7d535a
        ==========================================================================

    kusano 7d535a
        colamd:  an approximate minimum degree column ordering algorithm,
    kusano 7d535a
        	for LU factorization of symmetric or unsymmetric matrices,
    kusano 7d535a
    	QR factorization, least squares, interior point methods for
    kusano 7d535a
    	linear programming problems, and other related problems.

    kusano 7d535a
        symamd:  an approximate minimum degree ordering algorithm for Cholesky
    kusano 7d535a
        	factorization of symmetric matrices.

    kusano 7d535a
        Purpose:

    kusano 7d535a
    	Colamd computes a permutation Q such that the Cholesky factorization of
    kusano 7d535a
    	(AQ)'(AQ) has less fill-in and requires fewer floating point operations
    kusano 7d535a
    	than A'A.  This also provides a good ordering for sparse partial
    kusano 7d535a
    	pivoting methods, P(AQ) = LU, where Q is computed prior to numerical
    kusano 7d535a
    	factorization, and P is computed during numerical factorization via
    kusano 7d535a
    	conventional partial pivoting with row interchanges.  Colamd is the
    kusano 7d535a
    	column ordering method used in SuperLU, part of the ScaLAPACK library.
    kusano 7d535a
    	It is also available as built-in function in MATLAB Version 6,
    kusano 7d535a
    	available from MathWorks, Inc. (http://www.mathworks.com).  This
    kusano 7d535a
    	routine can be used in place of colmmd in MATLAB.

    kusano 7d535a
        	Symamd computes a permutation P of a symmetric matrix A such that the
    kusano 7d535a
    	Cholesky factorization of PAP' has less fill-in and requires fewer
    kusano 7d535a
    	floating point operations than A.  Symamd constructs a matrix M such
    kusano 7d535a
    	that M'M has the same nonzero pattern of A, and then orders the columns
    kusano 7d535a
    	of M using colmmd.  The column ordering of M is then returned as the
    kusano 7d535a
    	row and column ordering P of A.

    kusano 7d535a
        Authors:

    kusano 7d535a
    	The authors of the code itself are Stefan I. Larimore and Timothy A.
    kusano 7d535a
    	Davis (davis@cise.ufl.edu), University of Florida.  The algorithm was
    kusano 7d535a
    	developed in collaboration with John Gilbert, Xerox PARC, and Esmond
    kusano 7d535a
    	Ng, Oak Ridge National Laboratory.

    kusano 7d535a
        Date:

    kusano 7d535a
    	September 8, 2003.  Version 2.3.

    kusano 7d535a
        Acknowledgements:

    kusano 7d535a
    	This work was supported by the National Science Foundation, under
    kusano 7d535a
    	grants DMS-9504974 and DMS-9803599.

    kusano 7d535a
        Copyright and License:

    kusano 7d535a
    	Copyright (c) 1998-2003 by the University of Florida.
    kusano 7d535a
    	All Rights Reserved.

    kusano 7d535a
    	THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
    kusano 7d535a
    	EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.

    kusano 7d535a
    	Permission is hereby granted to use, copy, modify, and/or distribute
    kusano 7d535a
    	this program, provided that the Copyright, this License, and the
    kusano 7d535a
    	Availability of the original version is retained on all copies and made
    kusano 7d535a
    	accessible to the end-user of any code or package that includes COLAMD
    kusano 7d535a
    	or any modified version of COLAMD.

    kusano 7d535a
        Availability:

    kusano 7d535a
    	The colamd/symamd library is available at

    kusano 7d535a
    	    http://www.cise.ufl.edu/research/sparse/colamd/

    kusano 7d535a
    	This is the http://www.cise.ufl.edu/research/sparse/colamd/colamd.c
    kusano 7d535a
    	file.  It requires the colamd.h file.  It is required by the colamdmex.c
    kusano 7d535a
    	and symamdmex.c files, for the MATLAB interface to colamd and symamd.

    kusano 7d535a
        See the ChangeLog file for changes since Version 1.0.

    kusano 7d535a
        ========================================================================== 
    kusano 7d535a
        === Description of user-callable routines ================================ 
    kusano 7d535a
        ==========================================================================

    kusano 7d535a
        ----------------------------------------------------------------------------
    kusano 7d535a
        colamd_recommended:
    kusano 7d535a
        ----------------------------------------------------------------------------

    kusano 7d535a
    	C syntax:

    kusano 7d535a
    	    include "colamd.h"
    kusano 7d535a
    	    int colamd_recommended (int nnz, int n_row, int n_col) ;

    kusano 7d535a
    	    or as a C macro

    kusano 7d535a
    	    include "colamd.h"
    kusano 7d535a
    	    Alen = COLAMD_RECOMMENDED (int nnz, int n_row, int n_col) ;

    kusano 7d535a
    	Purpose:

    kusano 7d535a
    	    Returns recommended value of Alen for use by colamd.  Returns -1
    kusano 7d535a
    	    if any input argument is negative.  The use of this routine
    kusano 7d535a
    	    or macro is optional.  Note that the macro uses its arguments
    kusano 7d535a
    	    more than once, so be careful for side effects, if you pass
    kusano 7d535a
    	    expressions as arguments to COLAMD_RECOMMENDED.  Not needed for
    kusano 7d535a
    	    symamd, which dynamically allocates its own memory.

    kusano 7d535a
    	Arguments (all input arguments):

    kusano 7d535a
    	    int nnz ;		Number of nonzeros in the matrix A.  This must
    kusano 7d535a
    				be the same value as p [n_col] in the call to
    kusano 7d535a
    				colamd - otherwise you will get a wrong value
    kusano 7d535a
    				of the recommended memory to use.

    kusano 7d535a
    	    int n_row ;		Number of rows in the matrix A.

    kusano 7d535a
    	    int n_col ;		Number of columns in the matrix A.

    kusano 7d535a
        ----------------------------------------------------------------------------
    kusano 7d535a
        colamd_set_defaults:
    kusano 7d535a
        ----------------------------------------------------------------------------

    kusano 7d535a
    	C syntax:

    kusano 7d535a
    	    include "colamd.h"
    kusano 7d535a
    	    colamd_set_defaults (double knobs [COLAMD_KNOBS]) ;

    kusano 7d535a
    	Purpose:

    kusano 7d535a
    	    Sets the default parameters.  The use of this routine is optional.

    kusano 7d535a
    	Arguments:

    kusano 7d535a
    	    double knobs [COLAMD_KNOBS] ;	Output only.

    kusano 7d535a
    		Colamd: rows with more than (knobs [COLAMD_DENSE_ROW] * n_col)
    kusano 7d535a
    		entries are removed prior to ordering.  Columns with more than
    kusano 7d535a
    		(knobs [COLAMD_DENSE_COL] * n_row) entries are removed prior to
    kusano 7d535a
    		ordering, and placed last in the output column ordering.

    kusano 7d535a
    		Symamd: uses only knobs [COLAMD_DENSE_ROW], which is knobs [0].
    kusano 7d535a
    		Rows and columns with more than (knobs [COLAMD_DENSE_ROW] * n)
    kusano 7d535a
    		entries are removed prior to ordering, and placed last in the
    kusano 7d535a
    		output ordering.

    kusano 7d535a
    		COLAMD_DENSE_ROW and COLAMD_DENSE_COL are defined as 0 and 1,
    kusano 7d535a
    		respectively, in colamd.h.  Default values of these two knobs
    kusano 7d535a
    		are both 0.5.  Currently, only knobs [0] and knobs [1] are
    kusano 7d535a
    		used, but future versions may use more knobs.  If so, they will
    kusano 7d535a
    		be properly set to their defaults by the future version of
    kusano 7d535a
    		colamd_set_defaults, so that the code that calls colamd will
    kusano 7d535a
    		not need to change, assuming that you either use
    kusano 7d535a
    		colamd_set_defaults, or pass a (double *) NULL pointer as the
    kusano 7d535a
    		knobs array to colamd or symamd.

    kusano 7d535a
        ----------------------------------------------------------------------------
    kusano 7d535a
        colamd:
    kusano 7d535a
        ----------------------------------------------------------------------------

    kusano 7d535a
    	C syntax:

    kusano 7d535a
    	    include "colamd.h"
    kusano 7d535a
    	    int colamd (int n_row, int n_col, int Alen, int *A, int *p,
    kusano 7d535a
    	    	double knobs [COLAMD_KNOBS], int stats [COLAMD_STATS]) ;

    kusano 7d535a
    	Purpose:

    kusano 7d535a
    	    Computes a column ordering (Q) of A such that P(AQ)=LU or
    kusano 7d535a
    	    (AQ)'AQ=LL' have less fill-in and require fewer floating point
    kusano 7d535a
    	    operations than factorizing the unpermuted matrix A or A'A,
    kusano 7d535a
    	    respectively.

    kusano 7d535a
    	Returns:

    kusano 7d535a
    	    TRUE (1) if successful, FALSE (0) otherwise.

    kusano 7d535a
    	Arguments:

    kusano 7d535a
    	    int n_row ;		Input argument.

    kusano 7d535a
    		Number of rows in the matrix A.
    kusano 7d535a
    		Restriction:  n_row >= 0.
    kusano 7d535a
    		Colamd returns FALSE if n_row is negative.

    kusano 7d535a
    	    int n_col ;		Input argument.

    kusano 7d535a
    		Number of columns in the matrix A.
    kusano 7d535a
    		Restriction:  n_col >= 0.
    kusano 7d535a
    		Colamd returns FALSE if n_col is negative.

    kusano 7d535a
    	    int Alen ;		Input argument.

    kusano 7d535a
    		Restriction (see note):
    kusano 7d535a
    		Alen >= 2*nnz + 6*(n_col+1) + 4*(n_row+1) + n_col
    kusano 7d535a
    		Colamd returns FALSE if these conditions are not met.

    kusano 7d535a
    		Note:  this restriction makes an modest assumption regarding
    kusano 7d535a
    		the size of the two typedef's structures in colamd.h.
    kusano 7d535a
    		We do, however, guarantee that

    kusano 7d535a
    			Alen >= colamd_recommended (nnz, n_row, n_col)

    kusano 7d535a
    		or equivalently as a C preprocessor macro:

    kusano 7d535a
    			Alen >= COLAMD_RECOMMENDED (nnz, n_row, n_col)

    kusano 7d535a
    		will be sufficient.

    kusano 7d535a
    	    int A [Alen] ;	Input argument, undefined on output.

    kusano 7d535a
    		A is an integer array of size Alen.  Alen must be at least as
    kusano 7d535a
    		large as the bare minimum value given above, but this is very
    kusano 7d535a
    		low, and can result in excessive run time.  For best
    kusano 7d535a
    		performance, we recommend that Alen be greater than or equal to
    kusano 7d535a
    		colamd_recommended (nnz, n_row, n_col), which adds
    kusano 7d535a
    		nnz/5 to the bare minimum value given above.

    kusano 7d535a
    		On input, the row indices of the entries in column c of the
    kusano 7d535a
    		matrix are held in A [(p [c]) ... (p [c+1]-1)].  The row indices
    kusano 7d535a
    		in a given column c need not be in ascending order, and
    kusano 7d535a
    		duplicate row indices may be be present.  However, colamd will
    kusano 7d535a
    		work a little faster if both of these conditions are met
    kusano 7d535a
    		(Colamd puts the matrix into this format, if it finds that the
    kusano 7d535a
    		the conditions are not met).

    kusano 7d535a
    		The matrix is 0-based.  That is, rows are in the range 0 to
    kusano 7d535a
    		n_row-1, and columns are in the range 0 to n_col-1.  Colamd
    kusano 7d535a
    		returns FALSE if any row index is out of range.

    kusano 7d535a
    		The contents of A are modified during ordering, and are
    kusano 7d535a
    		undefined on output.

    kusano 7d535a
    	    int p [n_col+1] ;	Both input and output argument.

    kusano 7d535a
    		p is an integer array of size n_col+1.  On input, it holds the
    kusano 7d535a
    		"pointers" for the column form of the matrix A.  Column c of
    kusano 7d535a
    		the matrix A is held in A [(p [c]) ... (p [c+1]-1)].  The first
    kusano 7d535a
    		entry, p [0], must be zero, and p [c] <= p [c+1] must hold
    kusano 7d535a
    		for all c in the range 0 to n_col-1.  The value p [n_col] is
    kusano 7d535a
    		thus the total number of entries in the pattern of the matrix A.
    kusano 7d535a
    		Colamd returns FALSE if these conditions are not met.

    kusano 7d535a
    		On output, if colamd returns TRUE, the array p holds the column
    kusano 7d535a
    		permutation (Q, for P(AQ)=LU or (AQ)'(AQ)=LL'), where p [0] is
    kusano 7d535a
    		the first column index in the new ordering, and p [n_col-1] is
    kusano 7d535a
    		the last.  That is, p [k] = j means that column j of A is the
    kusano 7d535a
    		kth pivot column, in AQ, where k is in the range 0 to n_col-1
    kusano 7d535a
    		(p [0] = j means that column j of A is the first column in AQ).

    kusano 7d535a
    		If colamd returns FALSE, then no permutation is returned, and
    kusano 7d535a
    		p is undefined on output.

    kusano 7d535a
    	    double knobs [COLAMD_KNOBS] ;	Input argument.

    kusano 7d535a
    		See colamd_set_defaults for a description.

    kusano 7d535a
    	    int stats [COLAMD_STATS] ;		Output argument.

    kusano 7d535a
    		Statistics on the ordering, and error status.
    kusano 7d535a
    		See colamd.h for related definitions.
    kusano 7d535a
    		Colamd returns FALSE if stats is not present.

    kusano 7d535a
    		stats [0]:  number of dense or empty rows ignored.

    kusano 7d535a
    		stats [1]:  number of dense or empty columns ignored (and
    kusano 7d535a
    				ordered last in the output permutation p)
    kusano 7d535a
    				Note that a row can become "empty" if it
    kusano 7d535a
    				contains only "dense" and/or "empty" columns,
    kusano 7d535a
    				and similarly a column can become "empty" if it
    kusano 7d535a
    				only contains "dense" and/or "empty" rows.

    kusano 7d535a
    		stats [2]:  number of garbage collections performed.
    kusano 7d535a
    				This can be excessively high if Alen is close
    kusano 7d535a
    				to the minimum required value.

    kusano 7d535a
    		stats [3]:  status code.  < 0 is an error code.
    kusano 7d535a
    			    > 1 is a warning or notice.

    kusano 7d535a
    			0	OK.  Each column of the input matrix contained
    kusano 7d535a
    				row indices in increasing order, with no
    kusano 7d535a
    				duplicates.

    kusano 7d535a
    			1	OK, but columns of input matrix were jumbled
    kusano 7d535a
    				(unsorted columns or duplicate entries).  Colamd
    kusano 7d535a
    				had to do some extra work to sort the matrix
    kusano 7d535a
    				first and remove duplicate entries, but it
    kusano 7d535a
    				still was able to return a valid permutation
    kusano 7d535a
    				(return value of colamd was TRUE).

    kusano 7d535a
    					stats [4]: highest numbered column that
    kusano 7d535a
    						is unsorted or has duplicate
    kusano 7d535a
    						entries.
    kusano 7d535a
    					stats [5]: last seen duplicate or
    kusano 7d535a
    						unsorted row index.
    kusano 7d535a
    					stats [6]: number of duplicate or
    kusano 7d535a
    						unsorted row indices.

    kusano 7d535a
    			-1	A is a null pointer

    kusano 7d535a
    			-2	p is a null pointer

    kusano 7d535a
    			-3 	n_row is negative

    kusano 7d535a
    					stats [4]: n_row

    kusano 7d535a
    			-4	n_col is negative

    kusano 7d535a
    					stats [4]: n_col

    kusano 7d535a
    			-5	number of nonzeros in matrix is negative

    kusano 7d535a
    					stats [4]: number of nonzeros, p [n_col]

    kusano 7d535a
    			-6	p [0] is nonzero

    kusano 7d535a
    					stats [4]: p [0]

    kusano 7d535a
    			-7	A is too small

    kusano 7d535a
    					stats [4]: required size
    kusano 7d535a
    					stats [5]: actual size (Alen)

    kusano 7d535a
    			-8	a column has a negative number of entries

    kusano 7d535a
    					stats [4]: column with < 0 entries
    kusano 7d535a
    					stats [5]: number of entries in col

    kusano 7d535a
    			-9	a row index is out of bounds

    kusano 7d535a
    					stats [4]: column with bad row index
    kusano 7d535a
    					stats [5]: bad row index
    kusano 7d535a
    					stats [6]: n_row, # of rows of matrx

    kusano 7d535a
    			-10	(unused; see symamd.c)

    kusano 7d535a
    			-999	(unused; see symamd.c)

    kusano 7d535a
    		Future versions may return more statistics in the stats array.

    kusano 7d535a
    	Example:

    kusano 7d535a
    	    See http://www.cise.ufl.edu/research/sparse/colamd/example.c
    kusano 7d535a
    	    for a complete example.

    kusano 7d535a
    	    To order the columns of a 5-by-4 matrix with 11 nonzero entries in
    kusano 7d535a
    	    the following nonzero pattern

    kusano 7d535a
    	    	x 0 x 0
    kusano 7d535a
    		x 0 x x
    kusano 7d535a
    		0 x x 0
    kusano 7d535a
    		0 0 x x
    kusano 7d535a
    		x x 0 0

    kusano 7d535a
    	    with default knobs and no output statistics, do the following:

    kusano 7d535a
    		include "colamd.h"
    kusano 7d535a
    		define ALEN COLAMD_RECOMMENDED (11, 5, 4)
    kusano 7d535a
    		int A [ALEN] = {1, 2, 5, 3, 5, 1, 2, 3, 4, 2, 4} ;
    kusano 7d535a
    		int p [ ] = {0, 3, 5, 9, 11} ;
    kusano 7d535a
    		int stats [COLAMD_STATS] ;
    kusano 7d535a
    		colamd (5, 4, ALEN, A, p, (double *) NULL, stats) ;

    kusano 7d535a
    	    The permutation is returned in the array p, and A is destroyed.

    kusano 7d535a
        ----------------------------------------------------------------------------
    kusano 7d535a
        symamd:
    kusano 7d535a
        ----------------------------------------------------------------------------

    kusano 7d535a
    	C syntax:

    kusano 7d535a
    	    include "colamd.h"
    kusano 7d535a
    	    int symamd (int n, int *A, int *p, int *perm,
    kusano 7d535a
    	    	double knobs [COLAMD_KNOBS], int stats [COLAMD_STATS],
    kusano 7d535a
    		void (*allocate) (size_t, size_t), void (*release) (void *)) ;

    kusano 7d535a
    	Purpose:

    kusano 7d535a
        	    The symamd routine computes an ordering P of a symmetric sparse
    kusano 7d535a
    	    matrix A such that the Cholesky factorization PAP' = LL' remains
    kusano 7d535a
    	    sparse.  It is based on a column ordering of a matrix M constructed
    kusano 7d535a
    	    so that the nonzero pattern of M'M is the same as A.  The matrix A
    kusano 7d535a
    	    is assumed to be symmetric; only the strictly lower triangular part
    kusano 7d535a
    	    is accessed.  You must pass your selected memory allocator (usually
    kusano 7d535a
    	    calloc/free or mxCalloc/mxFree) to symamd, for it to allocate
    kusano 7d535a
    	    memory for the temporary matrix M.

    kusano 7d535a
    	Returns:

    kusano 7d535a
    	    TRUE (1) if successful, FALSE (0) otherwise.

    kusano 7d535a
    	Arguments:

    kusano 7d535a
    	    int n ;		Input argument.

    kusano 7d535a
    	    	Number of rows and columns in the symmetrix matrix A.
    kusano 7d535a
    		Restriction:  n >= 0.
    kusano 7d535a
    		Symamd returns FALSE if n is negative.

    kusano 7d535a
    	    int A [nnz] ;	Input argument.

    kusano 7d535a
    	    	A is an integer array of size nnz, where nnz = p [n].

    kusano 7d535a
    		The row indices of the entries in column c of the matrix are
    kusano 7d535a
    		held in A [(p [c]) ... (p [c+1]-1)].  The row indices in a
    kusano 7d535a
    		given column c need not be in ascending order, and duplicate
    kusano 7d535a
    		row indices may be present.  However, symamd will run faster
    kusano 7d535a
    		if the columns are in sorted order with no duplicate entries.

    kusano 7d535a
    		The matrix is 0-based.  That is, rows are in the range 0 to
    kusano 7d535a
    		n-1, and columns are in the range 0 to n-1.  Symamd
    kusano 7d535a
    		returns FALSE if any row index is out of range.

    kusano 7d535a
    		The contents of A are not modified.

    kusano 7d535a
    	    int p [n+1] ;   	Input argument.

    kusano 7d535a
    		p is an integer array of size n+1.  On input, it holds the
    kusano 7d535a
    		"pointers" for the column form of the matrix A.  Column c of
    kusano 7d535a
    		the matrix A is held in A [(p [c]) ... (p [c+1]-1)].  The first
    kusano 7d535a
    		entry, p [0], must be zero, and p [c] <= p [c+1] must hold
    kusano 7d535a
    		for all c in the range 0 to n-1.  The value p [n] is
    kusano 7d535a
    		thus the total number of entries in the pattern of the matrix A.
    kusano 7d535a
    		Symamd returns FALSE if these conditions are not met.

    kusano 7d535a
    		The contents of p are not modified.

    kusano 7d535a
    	    int perm [n+1] ;   	Output argument.

    kusano 7d535a
    		On output, if symamd returns TRUE, the array perm holds the
    kusano 7d535a
    		permutation P, where perm [0] is the first index in the new
    kusano 7d535a
    		ordering, and perm [n-1] is the last.  That is, perm [k] = j
    kusano 7d535a
    		means that row and column j of A is the kth column in PAP',
    kusano 7d535a
    		where k is in the range 0 to n-1 (perm [0] = j means
    kusano 7d535a
    		that row and column j of A are the first row and column in
    kusano 7d535a
    		PAP').  The array is used as a workspace during the ordering,
    kusano 7d535a
    		which is why it must be of length n+1, not just n.

    kusano 7d535a
    	    double knobs [COLAMD_KNOBS] ;	Input argument.

    kusano 7d535a
    		See colamd_set_defaults for a description.

    kusano 7d535a
    	    int stats [COLAMD_STATS] ;		Output argument.

    kusano 7d535a
    		Statistics on the ordering, and error status.
    kusano 7d535a
    		See colamd.h for related definitions.
    kusano 7d535a
    		Symamd returns FALSE if stats is not present.

    kusano 7d535a
    		stats [0]:  number of dense or empty row and columns ignored
    kusano 7d535a
    				(and ordered last in the output permutation 
    kusano 7d535a
    				perm).  Note that a row/column can become
    kusano 7d535a
    				"empty" if it contains only "dense" and/or
    kusano 7d535a
    				"empty" columns/rows.

    kusano 7d535a
    		stats [1]:  (same as stats [0])

    kusano 7d535a
    		stats [2]:  number of garbage collections performed.

    kusano 7d535a
    		stats [3]:  status code.  < 0 is an error code.
    kusano 7d535a
    			    > 1 is a warning or notice.

    kusano 7d535a
    			0	OK.  Each column of the input matrix contained
    kusano 7d535a
    				row indices in increasing order, with no
    kusano 7d535a
    				duplicates.

    kusano 7d535a
    			1	OK, but columns of input matrix were jumbled
    kusano 7d535a
    				(unsorted columns or duplicate entries).  Symamd
    kusano 7d535a
    				had to do some extra work to sort the matrix
    kusano 7d535a
    				first and remove duplicate entries, but it
    kusano 7d535a
    				still was able to return a valid permutation
    kusano 7d535a
    				(return value of symamd was TRUE).

    kusano 7d535a
    					stats [4]: highest numbered column that
    kusano 7d535a
    						is unsorted or has duplicate
    kusano 7d535a
    						entries.
    kusano 7d535a
    					stats [5]: last seen duplicate or
    kusano 7d535a
    						unsorted row index.
    kusano 7d535a
    					stats [6]: number of duplicate or
    kusano 7d535a
    						unsorted row indices.

    kusano 7d535a
    			-1	A is a null pointer

    kusano 7d535a
    			-2	p is a null pointer

    kusano 7d535a
    			-3	(unused, see colamd.c)

    kusano 7d535a
    			-4 	n is negative

    kusano 7d535a
    					stats [4]: n

    kusano 7d535a
    			-5	number of nonzeros in matrix is negative

    kusano 7d535a
    					stats [4]: # of nonzeros (p [n]).

    kusano 7d535a
    			-6	p [0] is nonzero

    kusano 7d535a
    					stats [4]: p [0]

    kusano 7d535a
    			-7	(unused)

    kusano 7d535a
    			-8	a column has a negative number of entries

    kusano 7d535a
    					stats [4]: column with < 0 entries
    kusano 7d535a
    					stats [5]: number of entries in col

    kusano 7d535a
    			-9	a row index is out of bounds

    kusano 7d535a
    					stats [4]: column with bad row index
    kusano 7d535a
    					stats [5]: bad row index
    kusano 7d535a
    					stats [6]: n_row, # of rows of matrx

    kusano 7d535a
    			-10	out of memory (unable to allocate temporary
    kusano 7d535a
    				workspace for M or count arrays using the
    kusano 7d535a
    				"allocate" routine passed into symamd).

    kusano 7d535a
    			-999	internal error.  colamd failed to order the
    kusano 7d535a
    				matrix M, when it should have succeeded.  This
    kusano 7d535a
    				indicates a bug.  If this (and *only* this)
    kusano 7d535a
    				error code occurs, please contact the authors.
    kusano 7d535a
    				Don't contact the authors if you get any other
    kusano 7d535a
    				error code.

    kusano 7d535a
    		Future versions may return more statistics in the stats array.

    kusano 7d535a
    	    void * (*allocate) (size_t, size_t)

    kusano 7d535a
    	    	A pointer to a function providing memory allocation.  The
    kusano 7d535a
    		allocated memory must be returned initialized to zero.  For a
    kusano 7d535a
    		C application, this argument should normally be a pointer to
    kusano 7d535a
    		calloc.  For a MATLAB mexFunction, the routine mxCalloc is
    kusano 7d535a
    		passed instead.

    kusano 7d535a
    	    void (*release) (size_t, size_t)

    kusano 7d535a
    	    	A pointer to a function that frees memory allocated by the
    kusano 7d535a
    		memory allocation routine above.  For a C application, this
    kusano 7d535a
    		argument should normally be a pointer to free.  For a MATLAB
    kusano 7d535a
    		mexFunction, the routine mxFree is passed instead.

    kusano 7d535a
        ----------------------------------------------------------------------------
    kusano 7d535a
        colamd_report:
    kusano 7d535a
        ----------------------------------------------------------------------------

    kusano 7d535a
    	C syntax:

    kusano 7d535a
    	    include "colamd.h"
    kusano 7d535a
    	    colamd_report (int stats [COLAMD_STATS]) ;

    kusano 7d535a
    	Purpose:

    kusano 7d535a
    	    Prints the error status and statistics recorded in the stats
    kusano 7d535a
    	    array on the standard error output (for a standard C routine)
    kusano 7d535a
    	    or on the MATLAB output (for a mexFunction).

    kusano 7d535a
    	Arguments:

    kusano 7d535a
    	    int stats [COLAMD_STATS] ;	Input only.  Statistics from colamd.

    kusano 7d535a
        ----------------------------------------------------------------------------
    kusano 7d535a
        symamd_report:
    kusano 7d535a
        ----------------------------------------------------------------------------

    kusano 7d535a
    	C syntax:

    kusano 7d535a
    	    include "colamd.h"
    kusano 7d535a
    	    symamd_report (int stats [COLAMD_STATS]) ;

    kusano 7d535a
    	Purpose:

    kusano 7d535a
    	    Prints the error status and statistics recorded in the stats
    kusano 7d535a
    	    array on the standard error output (for a standard C routine)
    kusano 7d535a
    	    or on the MATLAB output (for a mexFunction).

    kusano 7d535a
    	Arguments:

    kusano 7d535a
    	    int stats [COLAMD_STATS] ;	Input only.  Statistics from symamd.

    kusano 7d535a
     

    Define Documentation

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define ALIVE   (0)          
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define ASSERT          
    kusano 7d535a
              (
    kusano 7d535a
              expression 
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 ((void) 0)
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define COL_IS_ALIVE          
    kusano 7d535a
              (
    kusano 7d535a
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 (Col [c].start >= ALIVE)
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define COL_IS_DEAD          
    kusano 7d535a
              (
    kusano 7d535a
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 (Col [c].start < ALIVE)
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define COL_IS_DEAD_PRINCIPAL          
    kusano 7d535a
              (
    kusano 7d535a
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 (Col [c].start == DEAD_PRINCIPAL)
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define DEAD   (-1)          
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define DEAD_NON_PRINCIPAL   (-2)          
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define DEAD_PRINCIPAL   (-1)          
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define DEBUG0          
    kusano 7d535a
              (
    kusano 7d535a
              params 
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 ;
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define DEBUG1          
    kusano 7d535a
              (
    kusano 7d535a
              params 
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 ;
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define DEBUG2          
    kusano 7d535a
              (
    kusano 7d535a
              params 
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 ;
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define DEBUG3          
    kusano 7d535a
              (
    kusano 7d535a
              params 
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 ;
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define DEBUG4          
    kusano 7d535a
              (
    kusano 7d535a
              params 
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 ;
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define EMPTY   (-1)          
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define FALSE   (0)          
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define INDEX          
    kusano 7d535a
              (
    kusano 7d535a
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 (i)
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define KILL_NON_PRINCIPAL_COL          
    kusano 7d535a
              (
    kusano 7d535a
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 { Col [c].start = DEAD_NON_PRINCIPAL ; }
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define KILL_PRINCIPAL_COL          
    kusano 7d535a
              (
    kusano 7d535a
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 { Col [c].start = DEAD_PRINCIPAL ; }
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define KILL_ROW          
    kusano 7d535a
              (
    kusano 7d535a
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 { Row [r].shared2.mark = DEAD ; }
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define MAX          
    kusano 7d535a
              (
    kusano 7d535a
              a,         
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 (((a) > (b)) ? (a) : (b))
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define MIN          
    kusano 7d535a
              (
    kusano 7d535a
              a,         
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 (((a) < (b)) ? (a) : (b))
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define ONES_COMPLEMENT          
    kusano 7d535a
              (
    kusano 7d535a
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 (-(r)-1)
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define PRINTF   printf          
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define PRIVATE   static          
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define PUBLIC          
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define ROW_IS_ALIVE          
    kusano 7d535a
              (
    kusano 7d535a
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 (Row [r].shared2.mark >= ALIVE)
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define ROW_IS_DEAD          
    kusano 7d535a
              (
    kusano 7d535a
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 ROW_IS_MARKED_DEAD (Row[r].shared2.mark)
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define ROW_IS_MARKED_DEAD          
    kusano 7d535a
              (
    kusano 7d535a
              row_mark 
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 (row_mark < ALIVE)
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define TRUE   (1)          
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a

    Function Documentation

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              PRIVATE int clear_mark           
    kusano 7d535a
              (
    kusano 7d535a
              int 
    kusano 7d535a
               n_row, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              Colamd_Row 
    kusano 7d535a
               Row[] 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              PUBLIC int colamd           
    kusano 7d535a
              (
    kusano 7d535a
              int 
    kusano 7d535a
               n_row, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               n_col, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               Alen, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               A[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               p[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              double 
    kusano 7d535a
               knobs[COLAMD_KNOBS], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               stats[COLAMD_STATS] 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              PUBLIC int colamd_recommended           
    kusano 7d535a
              (
    kusano 7d535a
              int 
    kusano 7d535a
               nnz, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               n_row, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               n_col 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              PUBLIC void colamd_report           
    kusano 7d535a
              (
    kusano 7d535a
              int 
    kusano 7d535a
               stats[COLAMD_STATS]          
    kusano 7d535a
               ) 
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              PUBLIC void colamd_set_defaults           
    kusano 7d535a
              (
    kusano 7d535a
              double 
    kusano 7d535a
               knobs[COLAMD_KNOBS]          
    kusano 7d535a
               ) 
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              PRIVATE void detect_super_cols           
    kusano 7d535a
              (
    kusano 7d535a
              Colamd_Col 
    kusano 7d535a
               Col[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               A[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               head[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               row_start, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               row_length 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              PRIVATE int find_ordering           
    kusano 7d535a
              (
    kusano 7d535a
              int 
    kusano 7d535a
               n_row, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               n_col, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               Alen, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              Colamd_Row 
    kusano 7d535a
               Row[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              Colamd_Col 
    kusano 7d535a
               Col[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               A[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               head[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               n_col2, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               max_deg, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               pfree 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              PRIVATE int garbage_collection           
    kusano 7d535a
              (
    kusano 7d535a
              int 
    kusano 7d535a
               n_row, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               n_col, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              Colamd_Row 
    kusano 7d535a
               Row[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              Colamd_Col 
    kusano 7d535a
               Col[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               A[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               pfree 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              PRIVATE int init_rows_cols           
    kusano 7d535a
              (
    kusano 7d535a
              int 
    kusano 7d535a
               n_row, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               n_col, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              Colamd_Row 
    kusano 7d535a
               Row[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              Colamd_Col 
    kusano 7d535a
               Col[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               A[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               p[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               stats[COLAMD_STATS] 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              PRIVATE void init_scoring           
    kusano 7d535a
              (
    kusano 7d535a
              int 
    kusano 7d535a
               n_row, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               n_col, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              Colamd_Row 
    kusano 7d535a
               Row[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              Colamd_Col 
    kusano 7d535a
               Col[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               A[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               head[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              double 
    kusano 7d535a
               knobs[COLAMD_KNOBS], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               p_n_row2, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               p_n_col2, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               p_max_deg 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              PRIVATE void order_children           
    kusano 7d535a
              (
    kusano 7d535a
              int 
    kusano 7d535a
               n_col, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              Colamd_Col 
    kusano 7d535a
               Col[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               p[] 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              PRIVATE void print_report           
    kusano 7d535a
              (
    kusano 7d535a
              char * 
    kusano 7d535a
               method, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               stats[COLAMD_STATS] 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              PUBLIC int symamd           
    kusano 7d535a
              (
    kusano 7d535a
              int 
    kusano 7d535a
               n, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               A[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               p[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               perm[], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              double 
    kusano 7d535a
               knobs[COLAMD_KNOBS], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int 
    kusano 7d535a
               stats[COLAMD_STATS], 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              void *(*)(size_t, size_t) 
    kusano 7d535a
               allocate, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              void(*)(void *) 
    kusano 7d535a
               release 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              PUBLIC void symamd_report           
    kusano 7d535a
              (
    kusano 7d535a
              int 
    kusano 7d535a
               stats[COLAMD_STATS]          
    kusano 7d535a
               ) 
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a

    <address style="text-align: right;"><small>Generated on Mon Nov 22 10:23:47 2010 for SuperLU by </small></address>
    kusano 7d535a
    kusano 7d535a
    doxygen 1.5.5 
    kusano 7d535a
    kusano 7d535a