umfpack_get_numeric.h

Go to the documentation of this file.
00001 /* ========================================================================== */
00002 /* === umfpack_get_numeric ================================================== */
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_numeric
00013 (
00014     int Lp [ ],
00015     int Lj [ ],
00016     double Lx [ ],
00017     int Up [ ],
00018     int Ui [ ],
00019     double Ux [ ],
00020     int P [ ],
00021     int Q [ ],
00022     double Dx [ ],
00023     int *do_recip,
00024     double Rs [ ],
00025     void *Numeric
00026 ) ;
00027 
00028 long umfpack_dl_get_numeric
00029 (
00030     long Lp [ ],
00031     long Lj [ ],
00032     double Lx [ ],
00033     long Up [ ],
00034     long Ui [ ],
00035     double Ux [ ],
00036     long P [ ],
00037     long Q [ ],
00038     double Dx [ ],
00039     long *do_recip,
00040     double Rs [ ],
00041     void *Numeric
00042 ) ;
00043 
00044 int umfpack_zi_get_numeric
00045 (
00046     int Lp [ ],
00047     int Lj [ ],
00048     double Lx [ ], double Lz [ ],
00049     int Up [ ],
00050     int Ui [ ],
00051     double Ux [ ], double Uz [ ],
00052     int P [ ],
00053     int Q [ ],
00054     double Dx [ ], double Dz [ ],
00055     int *do_recip,
00056     double Rs [ ],
00057     void *Numeric
00058 ) ;
00059 
00060 long umfpack_zl_get_numeric
00061 (
00062     long Lp [ ],
00063     long Lj [ ],
00064     double Lx [ ], double Lz [ ],
00065     long Up [ ],
00066     long Ui [ ],
00067     double Ux [ ], double Uz [ ],
00068     long P [ ],
00069     long Q [ ],
00070     double Dx [ ], double Dz [ ],
00071     long *do_recip,
00072     double Rs [ ],
00073     void *Numeric
00074 ) ;
00075 
00076 /*
00077 double int Syntax:
00078 
00079     #include "umfpack.h"
00080     void *Numeric ;
00081     int *Lp, *Lj, *Up, *Ui, *P, *Q, status, do_recip ;
00082     double *Lx, *Ux, *Dx, *Rs ;
00083     status = umfpack_di_get_numeric (Lp, Lj, Lx, Up, Ui, Ux, P, Q, Dx,
00084         &do_recip, Rs, Numeric) ;
00085 
00086 double long Syntax:
00087 
00088     #include "umfpack.h"
00089     void *Numeric ;
00090     long *Lp, *Lj, *Up, *Ui, *P, *Q, status, do_recip ;
00091     double *Lx, *Ux, *Dx, *Rs ;
00092     status = umfpack_dl_get_numeric (Lp, Lj, Lx, Up, Ui, Ux, P, Q, Dx,
00093         &do_recip, Rs, Numeric) ;
00094 
00095 complex int Syntax:
00096 
00097     #include "umfpack.h"
00098     void *Numeric ;
00099     int *Lp, *Lj, *Up, *Ui, *P, *Q, status, do_recip ;
00100     double *Lx, *Lz, *Ux, *Uz, *Dx, *Dz, *Rs ;
00101     status = umfpack_zi_get_numeric (Lp, Lj, Lx, Lz, Up, Ui, Ux, Uz, P, Q,
00102         Dx, Dz, &do_recip, Rs, Numeric) ;
00103 
00104 complex long Syntax:
00105 
00106     #include "umfpack.h"
00107     void *Numeric ;
00108     long *Lp, *Lj, *Up, *Ui, *P, *Q, status, do_recip ;
00109     double *Lx, *Lz, *Ux, *Uz, *Dx, *Dz, *Rs ;
00110     status = umfpack_zl_get_numeric (Lp, Lj, Lx, Lz, Up, Ui, Ux, Uz, P, Q,
00111         Dx, Dz, &do_recip, Rs, Numeric) ;
00112 
00113 Purpose:
00114 
00115     This routine copies the LU factors and permutation vectors from the Numeric
00116     object into user-accessible arrays.  This routine is not needed to solve a
00117     linear system.  Note that the output arrays Lp, Lj, Lx, Up, Ui, Ux, P, Q,
00118     Dx, and Rs are not allocated by umfpack_*_get_numeric; they must exist on
00119     input.  Similarly, Lz, Uz and Dz must exist on input for the complex
00120     versions.
00121 
00122     All output arguments are optional.  If any of them are NULL
00123     on input, then that part of the LU factorization is not copied.  You can
00124     use this routine to extract just the parts of the LU factorization that
00125     you want.  For example, to retrieve just the column permutation Q, use:
00126 
00127     #define noD (double *) NULL
00128     #define noI (int *) NULL
00129     status = umfpack_di_get_numeric (noI, noI, noD, noI, noI, noD, noI,
00130         Q, noD, noI, noD, Numeric) ;
00131 
00132 Returns:
00133 
00134     Returns UMFPACK_OK if successful.  Returns UMFPACK_ERROR_out_of_memory
00135     if insufficient memory is available for the 2*max(n_row,n_col) integer
00136     workspace that umfpack_*_get_numeric allocates to construct L and/or U.
00137     Returns UMFPACK_ERROR_invalid_Numeric_object if the Numeric object provided
00138     as input is invalid.
00139 
00140 Arguments:
00141 
00142     Int Lp [n_row+1] ;  Output argument.
00143     Int Lj [lnz] ;      Output argument.
00144     double Lx [lnz] ;   Output argument.
00145     double Lz [lnz] ;   Output argument for complex versions.
00146 
00147         The n_row-by-min(n_row,n_col) matrix L is returned in compressed-row
00148         form.  The column indices of row i and corresponding numerical values
00149         are in:
00150 
00151             Lj [Lp [i] ... Lp [i+1]-1]
00152             Lx [Lp [i] ... Lp [i+1]-1]  real part
00153             Lz [Lp [i] ... Lp [i+1]-1]  imaginary part (complex versions)
00154 
00155         respectively.  Each row is stored in sorted order, from low column
00156         indices to higher.  The last entry in each row is the diagonal, which
00157         is numerically equal to one.  The sizes of Lp, Lj, Lx, and Lz are
00158         returned by umfpack_*_get_lunz.    If Lp, Lj, or Ux (or Uz for the
00159         complex version) are not present, then the matrix L is not returned.
00160         This is not an error condition.  The L matrix can be printed if n_row,
00161         Lp, Lj, Lx (and Lz for the complex versions) are passed to
00162         umfpack_*_report_matrix (using the "row" form).
00163 
00164         Future complex version:  if Lx is present and Lz is NULL, then both real
00165         and imaginary parts will be returned in Lx[0..2*lnz-1], with Lx[2*k]
00166         and Lx[2*k+1] being the real and imaginary part of the kth entry.
00167 
00168     Int Up [n_col+1] ;  Output argument.
00169     Int Ui [unz] ;      Output argument.
00170     double Ux [unz] ;   Output argument.
00171     double Uz [unz] ;   Output argument for complex versions.
00172 
00173         The min(n_row,n_col)-by-n_col matrix U is returned in compressed-column
00174         form.  The row indices of column j and corresponding numerical values
00175         are in
00176 
00177             Ui [Up [j] ... Up [j+1]-1]
00178             Ux [Up [j] ... Up [j+1]-1]  real part
00179             Uz [Up [j] ... Up [j+1]-1]  imaginary part (complex versions)
00180 
00181         respectively.  Each column is stored in sorted order, from low row
00182         indices to higher.  The last entry in each column is the diagonal
00183         (assuming that it is nonzero).  The sizes of Up, Ui, Ux, and Uz are
00184         returned by umfpack_*_get_lunz.  If Up, Ui, or Ux (or Uz for the complex
00185         version) are not present, then the matrix U is not returned.  This is
00186         not an error condition.  The U matrix can be printed if n_col, Up, Ui,
00187         Ux (and Uz for the complex versions) are passed to
00188         umfpack_*_report_matrix (using the "column" form).
00189 
00190         Future complex version:  if Ux is present and Uz is NULL, then both real
00191         and imaginary parts will be returned in Ux[0..2*unz-1], with Ux[2*k]
00192         and Ux[2*k+1] being the real and imaginary part of the kth entry.
00193 
00194     Int P [n_row] ;             Output argument.
00195 
00196         The permutation vector P is defined as P [k] = i, where the original
00197         row i of A is the kth pivot row in PAQ.  If you do not want the P vector
00198         to be returned, simply pass (Int *) NULL for P.  This is not an error
00199         condition.  You can print P and Q with umfpack_*_report_perm.
00200 
00201     Int Q [n_col] ;             Output argument.
00202 
00203         The permutation vector Q is defined as Q [k] = j, where the original
00204         column j of A is the kth pivot column in PAQ.  If you not want the Q
00205         vector to be returned, simply pass (Int *) NULL for Q.  This is not
00206         an error condition.  Note that Q is not necessarily identical to
00207         Qtree, the column pre-ordering held in the Symbolic object.  Refer to
00208         the description of Qtree and Front_npivcol in umfpack_*_get_symbolic for
00209         details.
00210 
00211     double Dx [min(n_row,n_col)] ;      Output argument.
00212     double Dz [min(n_row,n_col)] ;      Output argument for complex versions.
00213 
00214         The diagonal of U is also returned in Dx and Dz.  You can extract the
00215         diagonal of U without getting all of U by passing a non-NULL Dx (and
00216         Dz for the complex version) and passing Up, Ui, and Ux as NULL.  Dx is
00217         the real part of the diagonal, and Dz is the imaginary part.
00218 
00219         Future complex version:  if Dx is present and Dz is NULL, then both real
00220         and imaginary parts will be returned in Dx[0..2*min(n_row,n_col)-1],
00221         with Dx[2*k] and Dx[2*k+1] being the real and imaginary part of the kth
00222         entry.
00223 
00224     Int *do_recip ;             Output argument.
00225 
00226         If do_recip is returned as zero (false), then the scale factors Rs [i]
00227         are to be used by multiplying row i by Rs [i].  Otherwise, the entries
00228         in row i are to be divided by Rs [i].
00229 
00230         If UMFPACK has been compiled with gcc, or for MATLAB as either a
00231         built-in routine or as a mexFunction, then the NRECIPROCAL flag is
00232         set, and do_recip will always be zero (false).
00233 
00234         NOTE: this argument is new to version 4.1.
00235 
00236     double Rs [n_row] ;         Output argument.
00237 
00238         The row scale factors are returned in Rs [0..n_row-1].  Row i of A is
00239         scaled by dividing or multiplying its values by Rs [i].  If default
00240         scaling is in use, Rs [i] is the sum of the absolute values of row i
00241         (or its reciprocal).  If max row scaling is in use, then Rs [i] is the
00242         maximum absolute value in row i (or its reciprocal).
00243         Otherwise, Rs [i] = 1.  If row i is all zero, Rs [i] = 1 as well.  For
00244         the complex version, an approximate absolute value is used
00245         (|x_real|+|x_imag|).
00246 
00247         NOTE: this argument is new to version 4.1.
00248 
00249     void *Numeric ;     Input argument, not modified.
00250 
00251         Numeric must point to a valid Numeric object, computed by
00252         umfpack_*_numeric.
00253 */

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