umfpack_get_symbolic.h

Go to the documentation of this file.
00001 /* ========================================================================== */
00002 /* === umfpack_get_symbolic ================================================= */
00003 /* ========================================================================== */
00004 
00005 /* -------------------------------------------------------------------------- */
00006 /* UMFPACK Version 4.3 (Jan. 16, 2004), Copyright (c) 2004 by Timothy A.      */
00007 /* Davis.  All Rights Reserved.  See ../README for License.                   */
00008 /* email: davis@cise.ufl.edu    CISE Department, Univ. of Florida.            */
00009 /* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
00010 /* -------------------------------------------------------------------------- */
00011 
00012 int umfpack_di_get_symbolic
00013 (
00014     int *n_row,
00015     int *n_col,
00016     int *n1,
00017     int *nz,
00018     int *nfr,
00019     int *nchains,
00020     int P [ ],
00021     int Q [ ],
00022     int Front_npivcol [ ],
00023     int Front_parent [ ],
00024     int Front_1strow [ ],
00025     int Front_leftmostdesc [ ],
00026     int Chain_start [ ],
00027     int Chain_maxrows [ ],
00028     int Chain_maxcols [ ],
00029     void *Symbolic
00030 ) ;
00031 
00032 long umfpack_dl_get_symbolic
00033 (
00034     long *n_row,
00035     long *n_col,
00036     long *n1,
00037     long *nz,
00038     long *nfr,
00039     long *nchains,
00040     long P [ ],
00041     long Q [ ],
00042     long Front_npivcol [ ],
00043     long Front_parent [ ],
00044     long Front_1strow [ ],
00045     long Front_leftmostdesc [ ],
00046     long Chain_start [ ],
00047     long Chain_maxrows [ ],
00048     long Chain_maxcols [ ],
00049     void *Symbolic
00050 ) ;
00051 
00052 int umfpack_zi_get_symbolic
00053 (
00054     int *n_row,
00055     int *n_col,
00056     int *n1,
00057     int *nz,
00058     int *nfr,
00059     int *nchains,
00060     int P [ ],
00061     int Q [ ],
00062     int Front_npivcol [ ],
00063     int Front_parent [ ],
00064     int Front_1strow [ ],
00065     int Front_leftmostdesc [ ],
00066     int Chain_start [ ],
00067     int Chain_maxrows [ ],
00068     int Chain_maxcols [ ],
00069     void *Symbolic
00070 ) ;
00071 
00072 long umfpack_zl_get_symbolic
00073 (
00074     long *n_row,
00075     long *n_col,
00076     long *n1,
00077     long *nz,
00078     long *nfr,
00079     long *nchains,
00080     long P [ ],
00081     long Q [ ],
00082     long Front_npivcol [ ],
00083     long Front_parent [ ],
00084     long Front_1strow [ ],
00085     long Front_leftmostdesc [ ],
00086     long Chain_start [ ],
00087     long Chain_maxrows [ ],
00088     long Chain_maxcols [ ],
00089     void *Symbolic
00090 ) ;
00091 
00092 /*
00093 
00094 double int Syntax:
00095 
00096     #include "umfpack.h"
00097     int status, n_row, n_col, nz, nfr, nchains, *P, *Q,
00098         *Front_npivcol, *Front_parent, *Front_1strow, *Front_leftmostdesc,
00099         *Chain_start, *Chain_maxrows, *Chain_maxcols ;
00100     void *Symbolic ;
00101     status = umfpack_di_get_symbolic (&n_row, &n_col, &nz, &nfr, &nchains,
00102         P, Q, Front_npivcol, Front_parent, Front_1strow,
00103         Front_leftmostdesc, Chain_start, Chain_maxrows, Chain_maxcols,
00104         Symbolic) ;
00105 
00106 double long Syntax:
00107 
00108     #include "umfpack.h"
00109     long status, n_row, n_col, nz, nfr, nchains, *P, *Q,
00110         *Front_npivcol, *Front_parent, *Front_1strow, *Front_leftmostdesc,
00111         *Chain_start, *Chain_maxrows, *Chain_maxcols ;
00112     void *Symbolic ;
00113     status = umfpack_dl_get_symbolic (&n_row, &n_col, &nz, &nfr, &nchains,
00114         P, Q, Front_npivcol, Front_parent, Front_1strow,
00115         Front_leftmostdesc, Chain_start, Chain_maxrows, Chain_maxcols,
00116         Symbolic) ;
00117 
00118 complex int Syntax:
00119 
00120     #include "umfpack.h"
00121     int status, n_row, n_col, nz, nfr, nchains, *P, *Q,
00122         *Front_npivcol, *Front_parent, *Front_1strow, *Front_leftmostdesc,
00123         *Chain_start, *Chain_maxrows, *Chain_maxcols ;
00124     void *Symbolic ;
00125     status = umfpack_zi_get_symbolic (&n_row, &n_col, &nz, &nfr, &nchains,
00126         P, Q, Front_npivcol, Front_parent, Front_1strow,
00127         Front_leftmostdesc, Chain_start, Chain_maxrows, Chain_maxcols,
00128         Symbolic) ;
00129 
00130 complex long Syntax:
00131 
00132     #include "umfpack.h"
00133     long status, n_row, n_col, nz, nfr, nchains, *P, *Q,
00134         *Front_npivcol, *Front_parent, *Front_1strow, *Front_leftmostdesc,
00135         *Chain_start, *Chain_maxrows, *Chain_maxcols ;
00136     void *Symbolic ;
00137     status = umfpack_zl_get_symbolic (&n_row, &n_col, &nz, &nfr, &nchains,
00138         P, Q, Front_npivcol, Front_parent, Front_1strow,
00139         Front_leftmostdesc, Chain_start, Chain_maxrows, Chain_maxcols,
00140         Symbolic) ;
00141 
00142 Purpose:
00143 
00144     Copies the contents of the Symbolic object into simple integer arrays
00145     accessible to the user.  This routine is not needed to factorize and/or
00146     solve a sparse linear system using UMFPACK.  Note that the output arrays
00147     P, Q, Front_npivcol, Front_parent, Front_1strow, Front_leftmostdesc,
00148     Chain_start, Chain_maxrows, and Chain_maxcols are not allocated by
00149     umfpack_*_get_symbolic; they must exist on input.
00150 
00151     All output arguments are optional.  If any of them are NULL
00152     on input, then that part of the symbolic analysis is not copied.  You can
00153     use this routine to extract just the parts of the symbolic analysis that
00154     you want.  For example, to retrieve just the column permutation Q, use:
00155 
00156     #define noI (int *) NULL
00157     status = umfpack_di_get_symbolic (noI, noI, noI, noI, noI, noI, noI,
00158             Q, noI, noI, noI, noI, noI, noI, noI, Symbolic) ;
00159 
00160     The only required argument the last one, the pointer to the Symbolic object.
00161 
00162     The Symbolic object is small.  Its size for an n-by-n square matrix varies
00163     from 4*n to 13*n, depending on the matrix.  The object holds the initial
00164     column permutation, the supernodal column elimination tree, and information
00165     about each frontal matrix.  You can print it with umfpack_*_report_symbolic.
00166 
00167 Returns:
00168 
00169     Returns UMFPACK_OK if successful, UMFPACK_ERROR_invalid_Symbolic_object
00170     if Symbolic is an invalid object.
00171 
00172 Arguments:
00173 
00174     Int *n_row ;        Output argument.
00175     Int *n_col ;        Output argument.
00176 
00177         The dimensions of the matrix A analyzed by the call to
00178         umfpack_*_symbolic that generated the Symbolic object.
00179 
00180     Int *n1 ;           Output argument.
00181 
00182         The number of pivots with zero Markowitz cost (they have just one entry
00183         in the pivot row, or the pivot column, or both).  These appear first in
00184         the output permutations P and Q.
00185 
00186         NOTE: this argument is new to version 4.1.
00187 
00188     Int *nz ;           Output argument.
00189 
00190         The number of nonzeros in A.
00191 
00192     Int *nfr ;  Output argument.
00193 
00194         The number of frontal matrices that will be used by umfpack_*_numeric
00195         to factorize the matrix A.  It is in the range 0 to n_col.
00196 
00197     Int *nchains ;      Output argument.
00198 
00199         The frontal matrices are related to one another by the supernodal
00200         column elimination tree.  Each node in this tree is one frontal matrix.
00201         The tree is partitioned into a set of disjoint paths, and a frontal
00202         matrix chain is one path in this tree.  Each chain is factorized using
00203         a unifrontal technique, with a single working array that holds each
00204         frontal matrix in the chain, one at a time.  nchains is in the range
00205         0 to nfr.
00206 
00207     Int P [n_row] ;     Output argument.
00208 
00209         The initial row permutation.  If P [k] = i, then this means that
00210         row i is the kth row in the pre-ordered matrix.  In general, this P is
00211         not the same as the final row permutation computed by umfpack_*_numeric.
00212 
00213         For the unsymmetric strategy, P defines the row-merge order.  Let j be
00214         the column index of the leftmost nonzero entry in row i of A*Q.  Then
00215         P defines a sort of the rows according to this value.  A row can appear
00216         earlier in this ordering if it is aggressively absorbed before it can
00217         become a pivot row.  If P [k] = i, row i typically will not be the kth
00218         pivot row.
00219 
00220         For the symmetric strategy, P = Q.  For the 2-by-2 strategy, P is the
00221         row permutation that places large entries on the diagonal of P*A*Q.
00222         If no pivoting occurs during numerical factorization, P [k] = i also
00223         defines the final permutation of umfpack_*_numeric, for either the
00224         symmetric or 2-by-2 strategies.
00225 
00226     Int Q [n_col] ;     Output argument.
00227 
00228         The initial column permutation.  If Q [k] = j, then this means that
00229         column j is the kth pivot column in the pre-ordered matrix.  Q is
00230         not necessarily the same as the final column permutation Q, computed by
00231         umfpack_*_numeric.  The numeric factorization may reorder the pivot
00232         columns within each frontal matrix to reduce fill-in.  If the matrix is
00233         structurally singular, and if the symmetric or 2-by-2 strategies or
00234         used (or if Control [UMFPACK_FIXQ] > 0), then this Q will be the same
00235         as the final column permutation computed in umfpack_*_numeric.
00236 
00237     Int Front_npivcol [n_col+1] ;       Output argument.
00238 
00239         This array should be of size at least n_col+1, in order to guarantee
00240         that it will be large enough to hold the output.  Only the first nfr+1
00241         entries are used, however.
00242 
00243         The kth frontal matrix holds Front_npivcol [k] pivot columns.  Thus, the
00244         first frontal matrix, front 0, is used to factorize the first
00245         Front_npivcol [0] columns; these correspond to the original columns
00246         Q [0] through Q [Front_npivcol [0]-1].  The next frontal matrix
00247         is used to factorize the next Front_npivcol [1] columns, which are thus
00248         the original columns Q [Front_npivcol [0]] through
00249         Q [Front_npivcol [0] + Front_npivcol [1] - 1], and so on.  Columns
00250         with no entries at all are put in a placeholder "front",
00251         Front_npivcol [nfr].  The sum of Front_npivcol [0..nfr] is equal to
00252         n_col.
00253 
00254         Any modifications that umfpack_*_numeric makes to the initial column
00255         permutation are constrained to within each frontal matrix.  Thus, for
00256         the first frontal matrix, Q [0] through Q [Front_npivcol [0]-1] is some
00257         permutation of the columns Q [0] through
00258         Q [Front_npivcol [0]-1].  For second frontal matrix,
00259         Q [Front_npivcol [0]] through Q [Front_npivcol [0] + Front_npivcol[1]-1]
00260         is some permutation of the same portion of Q, and so on.  All pivot
00261         columns are numerically factorized within the frontal matrix originally
00262         determined by the symbolic factorization; there is no delayed pivoting
00263         across frontal matrices.
00264 
00265     Int Front_parent [n_col+1] ;        Output argument.
00266 
00267         This array should be of size at least n_col+1, in order to guarantee
00268         that it will be large enough to hold the output.  Only the first nfr+1
00269         entries are used, however.
00270 
00271         Front_parent [0..nfr] holds the supernodal column elimination tree
00272         (including the placeholder front nfr, which may be empty).  Each node in
00273         the tree corresponds to a single frontal matrix.  The parent of node f
00274         is Front_parent [f].
00275 
00276     Int Front_1strow [n_col+1] ;        Output argument.
00277 
00278         This array should be of size at least n_col+1, in order to guarantee
00279         that it will be large enough to hold the output.  Only the first nfr+1
00280         entries are used, however.
00281 
00282         Front_1strow [k] is the row index of the first row in A (P,Q)
00283         whose leftmost entry is in a pivot column for the kth front.  This is
00284         necessary only to properly factorize singular matrices.  It is new to
00285         Version 4.0.  Rows in the range Front_1strow [k] to
00286         Front_1strow [k+1]-1 first become pivot row candidates at the kth front.
00287         Any rows not eliminated in the kth front may be selected as pivot rows
00288         in the parent of k (Front_parent [k]) and so on up the tree.
00289 
00290     Int Front_leftmostdesc [n_col+1] ;  Output argument.
00291 
00292         This array should be of size at least n_col+1, in order to guarantee
00293         that it will be large enough to hold the output.  Only the first nfr+1
00294         entries are used, however.
00295 
00296         Front_leftmostdesc [k] is the leftmost descendant of front k, or k
00297         if the front has no children in the tree.  Since the rows and columns
00298         (P and Q) have been post-ordered via a depth-first-search of
00299         the tree, rows in the range Front_1strow [Front_leftmostdesc [k]] to
00300         Front_1strow [k+1]-1 form the entire set of candidate pivot rows for
00301         the kth front (some of these will typically have already been selected
00302         by fronts in the range Front_leftmostdesc [k] to front k-1, before
00303         the factorization reaches front k).
00304 
00305     Chain_start [n_col+1] ;     Output argument.
00306 
00307         This array should be of size at least n_col+1, in order to guarantee
00308         that it will be large enough to hold the output.  Only the first
00309         nchains+1 entries are used, however.
00310 
00311         The kth frontal matrix chain consists of frontal matrices Chain_start[k]
00312         through Chain_start [k+1]-1.  Thus, Chain_start [0] is always 0, and
00313         Chain_start [nchains] is the total number of frontal matrices, nfr.  For
00314         two adjacent fronts f and f+1 within a single chain, f+1 is always the
00315         parent of f (that is, Front_parent [f] = f+1).
00316 
00317     Int Chain_maxrows [n_col+1] ;       Output argument.
00318     Int Chain_maxcols [n_col+1] ;       Output argument.
00319 
00320         These arrays should be of size at least n_col+1, in order to guarantee
00321         that they will be large enough to hold the output.  Only the first
00322         nchains entries are used, however.
00323 
00324         The kth frontal matrix chain requires a single working array of
00325         dimension Chain_maxrows [k] by Chain_maxcols [k], for the unifrontal
00326         technique that factorizes the frontal matrix chain.  Since the symbolic
00327         factorization only provides an upper bound on the size of each frontal
00328         matrix, not all of the working array is necessarily used during the
00329         numerical factorization.
00330 
00331         Note that the upper bound on the number of rows and columns of each
00332         frontal matrix is computed by umfpack_*_symbolic, but all that is
00333         required by umfpack_*_numeric is the maximum of these two sets of
00334         values for each frontal matrix chain.  Thus, the size of each
00335         individual frontal matrix is not preserved in the Symbolic object.
00336 
00337     void *Symbolic ;                    Input argument, not modified.
00338 
00339         The Symbolic object, which holds the symbolic factorization computed by
00340         umfpack_*_symbolic.  The Symbolic object is not modified by
00341         umfpack_*_get_symbolic.
00342 */

Generated on Sun May 27 11:59:43 2007 for FEMFLUID by  doxygen 1.4.6