/usr/include/suitesparse/umfpack_get_numeric.h is in libsuitesparse-dev 1:4.5.4-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 | /* ========================================================================== */
/* === umfpack_get_numeric ================================================== */
/* ========================================================================== */
/* -------------------------------------------------------------------------- */
/* Copyright (c) 2005-2012 by Timothy A. Davis, http://www.suitesparse.com. */
/* All Rights Reserved. See ../Doc/License.txt for License. */
/* -------------------------------------------------------------------------- */
int umfpack_di_get_numeric
(
int Lp [ ],
int Lj [ ],
double Lx [ ],
int Up [ ],
int Ui [ ],
double Ux [ ],
int P [ ],
int Q [ ],
double Dx [ ],
int *do_recip,
double Rs [ ],
void *Numeric
) ;
SuiteSparse_long umfpack_dl_get_numeric
(
SuiteSparse_long Lp [ ],
SuiteSparse_long Lj [ ],
double Lx [ ],
SuiteSparse_long Up [ ],
SuiteSparse_long Ui [ ],
double Ux [ ],
SuiteSparse_long P [ ],
SuiteSparse_long Q [ ],
double Dx [ ],
SuiteSparse_long *do_recip,
double Rs [ ],
void *Numeric
) ;
int umfpack_zi_get_numeric
(
int Lp [ ],
int Lj [ ],
double Lx [ ], double Lz [ ],
int Up [ ],
int Ui [ ],
double Ux [ ], double Uz [ ],
int P [ ],
int Q [ ],
double Dx [ ], double Dz [ ],
int *do_recip,
double Rs [ ],
void *Numeric
) ;
SuiteSparse_long umfpack_zl_get_numeric
(
SuiteSparse_long Lp [ ],
SuiteSparse_long Lj [ ],
double Lx [ ], double Lz [ ],
SuiteSparse_long Up [ ],
SuiteSparse_long Ui [ ],
double Ux [ ], double Uz [ ],
SuiteSparse_long P [ ],
SuiteSparse_long Q [ ],
double Dx [ ], double Dz [ ],
SuiteSparse_long *do_recip,
double Rs [ ],
void *Numeric
) ;
/*
double int Syntax:
#include "umfpack.h"
void *Numeric ;
int *Lp, *Lj, *Up, *Ui, *P, *Q, status, do_recip ;
double *Lx, *Ux, *Dx, *Rs ;
status = umfpack_di_get_numeric (Lp, Lj, Lx, Up, Ui, Ux, P, Q, Dx,
&do_recip, Rs, Numeric) ;
double SuiteSparse_long Syntax:
#include "umfpack.h"
void *Numeric ;
SuiteSparse_long *Lp, *Lj, *Up, *Ui, *P, *Q, status, do_recip ;
double *Lx, *Ux, *Dx, *Rs ;
status = umfpack_dl_get_numeric (Lp, Lj, Lx, Up, Ui, Ux, P, Q, Dx,
&do_recip, Rs, Numeric) ;
complex int Syntax:
#include "umfpack.h"
void *Numeric ;
int *Lp, *Lj, *Up, *Ui, *P, *Q, status, do_recip ;
double *Lx, *Lz, *Ux, *Uz, *Dx, *Dz, *Rs ;
status = umfpack_zi_get_numeric (Lp, Lj, Lx, Lz, Up, Ui, Ux, Uz, P, Q,
Dx, Dz, &do_recip, Rs, Numeric) ;
complex SuiteSparse_long Syntax:
#include "umfpack.h"
void *Numeric ;
SuiteSparse_long *Lp, *Lj, *Up, *Ui, *P, *Q, status, do_recip ;
double *Lx, *Lz, *Ux, *Uz, *Dx, *Dz, *Rs ;
status = umfpack_zl_get_numeric (Lp, Lj, Lx, Lz, Up, Ui, Ux, Uz, P, Q,
Dx, Dz, &do_recip, Rs, Numeric) ;
packed complex int/SuiteSparse_long Syntax:
Same as above, except Lz, Uz, and Dz are all NULL.
Purpose:
This routine copies the LU factors and permutation vectors from the Numeric
object into user-accessible arrays. This routine is not needed to solve a
linear system. Note that the output arrays Lp, Lj, Lx, Up, Ui, Ux, P, Q,
Dx, and Rs are not allocated by umfpack_*_get_numeric; they must exist on
input.
All output arguments are optional. If any of them are NULL
on input, then that part of the LU factorization is not copied. You can
use this routine to extract just the parts of the LU factorization that
you want. For example, to retrieve just the column permutation Q, use:
#define noD (double *) NULL
#define noI (int *) NULL
status = umfpack_di_get_numeric (noI, noI, noD, noI, noI, noD, noI,
Q, noD, noI, noD, Numeric) ;
Returns:
Returns UMFPACK_OK if successful. Returns UMFPACK_ERROR_out_of_memory
if insufficient memory is available for the 2*max(n_row,n_col) integer
workspace that umfpack_*_get_numeric allocates to construct L and/or U.
Returns UMFPACK_ERROR_invalid_Numeric_object if the Numeric object provided
as input is invalid.
Arguments:
Int Lp [n_row+1] ; Output argument.
Int Lj [lnz] ; Output argument.
double Lx [lnz] ; Output argument. Size 2*lnz for packed complex case.
double Lz [lnz] ; Output argument for complex versions.
The n_row-by-min(n_row,n_col) matrix L is returned in compressed-row
form. The column indices of row i and corresponding numerical values
are in:
Lj [Lp [i] ... Lp [i+1]-1]
Lx [Lp [i] ... Lp [i+1]-1] real part
Lz [Lp [i] ... Lp [i+1]-1] imaginary part (complex versions)
respectively. Each row is stored in sorted order, from low column
indices to higher. The last entry in each row is the diagonal, which
is numerically equal to one. The sizes of Lp, Lj, Lx, and Lz are
returned by umfpack_*_get_lunz. If Lp, Lj, or Lx are not present,
then the matrix L is not returned. This is not an error condition.
The L matrix can be printed if n_row, Lp, Lj, Lx (and Lz for the split
complex case) are passed to umfpack_*_report_matrix (using the
"row" form).
If Lx is present and Lz is NULL, then both real
and imaginary parts are returned in Lx[0..2*lnz-1], with Lx[2*k]
and Lx[2*k+1] being the real and imaginary part of the kth entry.
Int Up [n_col+1] ; Output argument.
Int Ui [unz] ; Output argument.
double Ux [unz] ; Output argument. Size 2*unz for packed complex case.
double Uz [unz] ; Output argument for complex versions.
The min(n_row,n_col)-by-n_col matrix U is returned in compressed-column
form. The row indices of column j and corresponding numerical values
are in
Ui [Up [j] ... Up [j+1]-1]
Ux [Up [j] ... Up [j+1]-1] real part
Uz [Up [j] ... Up [j+1]-1] imaginary part (complex versions)
respectively. Each column is stored in sorted order, from low row
indices to higher. The last entry in each column is the diagonal
(assuming that it is nonzero). The sizes of Up, Ui, Ux, and Uz are
returned by umfpack_*_get_lunz. If Up, Ui, or Ux are not present,
then the matrix U is not returned. This is not an error condition.
The U matrix can be printed if n_col, Up, Ui, Ux (and Uz for the
split complex case) are passed to umfpack_*_report_matrix (using the
"column" form).
If Ux is present and Uz is NULL, then both real
and imaginary parts are returned in Ux[0..2*unz-1], with Ux[2*k]
and Ux[2*k+1] being the real and imaginary part of the kth entry.
Int P [n_row] ; Output argument.
The permutation vector P is defined as P [k] = i, where the original
row i of A is the kth pivot row in PAQ. If you do not want the P vector
to be returned, simply pass (Int *) NULL for P. This is not an error
condition. You can print P and Q with umfpack_*_report_perm.
Int Q [n_col] ; Output argument.
The permutation vector Q is defined as Q [k] = j, where the original
column j of A is the kth pivot column in PAQ. If you not want the Q
vector to be returned, simply pass (Int *) NULL for Q. This is not
an error condition. Note that Q is not necessarily identical to
Qtree, the column pre-ordering held in the Symbolic object. Refer to
the description of Qtree and Front_npivcol in umfpack_*_get_symbolic for
details.
double Dx [min(n_row,n_col)] ; Output argument. Size 2*n for
the packed complex case.
double Dz [min(n_row,n_col)] ; Output argument for complex versions.
The diagonal of U is also returned in Dx and Dz. You can extract the
diagonal of U without getting all of U by passing a non-NULL Dx (and
Dz for the complex version) and passing Up, Ui, and Ux as NULL. Dx is
the real part of the diagonal, and Dz is the imaginary part.
If Dx is present and Dz is NULL, then both real
and imaginary parts are returned in Dx[0..2*min(n_row,n_col)-1],
with Dx[2*k] and Dx[2*k+1] being the real and imaginary part of the kth
entry.
Int *do_recip ; Output argument.
This argument defines how the scale factors Rs are to be interpretted.
If do_recip is TRUE (one), then the scale factors Rs [i] are to be used
by multiplying row i by Rs [i]. Otherwise, the entries in row i are to
be divided by Rs [i].
If UMFPACK has been compiled with gcc, or for MATLAB as either a
built-in routine or as a mexFunction, then the NRECIPROCAL flag is
set, and do_recip will always be FALSE (zero).
double Rs [n_row] ; Output argument.
The row scale factors are returned in Rs [0..n_row-1]. Row i of A is
scaled by dividing or multiplying its values by Rs [i]. If default
scaling is in use, Rs [i] is the sum of the absolute values of row i
(or its reciprocal). If max row scaling is in use, then Rs [i] is the
maximum absolute value in row i (or its reciprocal).
Otherwise, Rs [i] = 1. If row i is all zero, Rs [i] = 1 as well. For
the complex version, an approximate absolute value is used
(|x_real|+|x_imag|).
void *Numeric ; Input argument, not modified.
Numeric must point to a valid Numeric object, computed by
umfpack_*_numeric.
*/
|