<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>SuperLU: SRC/zgsitrf.c File Reference</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.5.5 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> </ul> </div> </div> <div class="contents"> <h1>SRC/zgsitrf.c File Reference</h1>Computes an ILU factorization of a general sparse matrix. <a href="#_details">More...</a> <p> <code>#include "<a class="el" href="slu__zdefs_8h-source.html">slu_zdefs.h</a>"</code><br> <table border="0" cellpadding="0" cellspacing="0"> <tr><td></td></tr> <tr><td colspan="2"><br><h2>Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgsitrf_8c.html#8b8106aaa938c48c4276bece6a82d04c">zgsitrf</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#c900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int panel_size, int *etree, void *work, int lwork, int *perm_c, int *perm_r, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *U, <a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat, int *info)</td></tr> </table> <hr><a name="_details"></a><h2>Detailed Description</h2> <pre> -- SuperLU routine (version 4.1) -- Lawrence Berkeley National Laboratory. June 30, 2009</pre><p> <pre> </pre> <hr><h2>Function Documentation</h2> <a class="anchor" name="8b8106aaa938c48c4276bece6a82d04c"></a><!-- doxytag: member="zgsitrf.c::zgsitrf" ref="8b8106aaa938c48c4276bece6a82d04c" args="(superlu_options_t *options, SuperMatrix *A, int relax, int panel_size, int *etree, void *work, int lwork, int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U, SuperLUStat_t *stat, int *info)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void zgsitrf </td> <td>(</td> <td class="paramtype"><a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> * </td> <td class="paramname"> <em>options</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td> <td class="paramname"> <em>A</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>relax</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>panel_size</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int * </td> <td class="paramname"> <em>etree</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"> <em>work</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>lwork</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int * </td> <td class="paramname"> <em>perm_c</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int * </td> <td class="paramname"> <em>perm_r</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td> <td class="paramname"> <em>L</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * </td> <td class="paramname"> <em>U</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> * </td> <td class="paramname"> <em>stat</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int * </td> <td class="paramname"> <em>info</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <pre> Purpose =======</pre><p> <pre> ZGSITRF computes an ILU factorization of a general sparse m-by-n matrix A using partial pivoting with row interchanges. The factorization has the form Pr * A = L * U where Pr is a row permutation matrix, L is lower triangular with unit diagonal elements (lower trapezoidal if A->nrow > A->ncol), and U is upper triangular (upper trapezoidal if A->nrow < A->ncol).</pre><p> <pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types.">supermatrix.h</a> for the definition of 'SuperMatrix' structure.</pre><p> <pre> Arguments =========</pre><p> <pre> options (input) superlu_options_t* The structure defines the input parameters to control how the ILU decomposition will be performed.</pre><p> <pre> A (input) SuperMatrix* Original matrix A, permuted by columns, of dimension (A->nrow, A->ncol). The type of A can be: Stype = SLU_NCP; Dtype = SLU_Z; Mtype = SLU_GE.</pre><p> <pre> relax (input) int To control degree of relaxing supernodes. If the number of nodes (columns) in a subtree of the elimination tree is less than relax, this subtree is considered as one supernode, regardless of the row structures of those columns.</pre><p> <pre> panel_size (input) int A panel consists of at most panel_size consecutive columns.</pre><p> <pre> etree (input) int*, dimension (A->ncol) Elimination tree of A'*A. Note: etree is a vector of parent pointers for a forest whose vertices are the integers 0 to A->ncol-1; etree[root]==A->ncol. On input, the columns of A should be permuted so that the etree is in a certain postorder.</pre><p> <pre> work (input/output) void*, size (lwork) (in bytes) User-supplied work space and space for the output data structures. Not referenced if lwork = 0;</pre><p> <pre> lwork (input) int Specifies the size of work array in bytes. = 0: allocate space internally by system malloc; > 0: use user-supplied work array of length lwork in bytes, returns error if space runs out. = -1: the routine guesses the amount of space needed without performing the factorization, and returns it in *info; no other side effects.</pre><p> <pre> perm_c (input) int*, dimension (A->ncol) Column permutation vector, which defines the permutation matrix Pc; perm_c[i] = j means column i of A is in position j in A*Pc. When searching for diagonal, perm_c[*] is applied to the row subscripts of A, so that diagonal threshold pivoting can find the diagonal of A, rather than that of A*Pc.</pre><p> <pre> perm_r (input/output) int*, dimension (A->nrow) Row permutation vector which defines the permutation matrix Pr, perm_r[i] = j means row i of A is in position j in Pr*A. If options->Fact = SamePattern_SameRowPerm, the pivoting routine will try to use the input perm_r, unless a certain threshold criterion is violated. In that case, perm_r is overwritten by a new permutation determined by partial pivoting or diagonal threshold pivoting. Otherwise, perm_r is output argument;</pre><p> <pre> L (output) SuperMatrix* The factor L from the factorization Pr*A=L*U; use compressed row subscripts storage for supernodes, i.e., L has type: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><p> <pre> U (output) SuperMatrix* The factor U from the factorization Pr*A*Pc=L*U. Use column-wise storage scheme, i.e., U has types: Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><p> <pre> stat (output) SuperLUStat_t* Record the statistics on runtime and floating-point operation count. See <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a> for the definition of 'SuperLUStat_t'.</pre><p> <pre> info (output) int* = 0: successful exit < 0: if info = -i, the i-th argument had an illegal value > 0: if info = i, and i is <= A->ncol: number of zero pivots. They are replaced by small entries according to options->ILU_FillTol. > A->ncol: number of bytes allocated when memory allocation failure occurred, plus A->ncol. If lwork = -1, it is the estimated amount of space needed, plus A->ncol.</pre><p> <pre> ======================================================================</pre><p> <pre> Local Working Arrays: ====================== m = number of rows in the matrix n = number of columns in the matrix</pre><p> <pre> marker[0:3*m-1]: marker[i] = j means that node i has been reached when working on column j. Storage: relative to original row subscripts NOTE: There are 4 of them: marker/marker1 are used for panel dfs, see (ilu_)<a class="el" href="dpanel__dfs_8c.html" title="Peforms a symbolic factorization on a panel of symbols.">dpanel_dfs.c</a>; marker2 is used for inner-factorization, see (ilu)_dcolumn_dfs.c; marker_relax(has its own space) is used for relaxed supernodes.</pre><p> <pre> parent[0:m-1]: parent vector used during dfs Storage: relative to new row subscripts</pre><p> <pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs) unexplored neighbor of i in lsub[*]</pre><p> <pre> segrep[0:nseg-1]: contains the list of supernodal representatives in topological order of the dfs. A supernode representative is the last column of a supernode. The maximum size of segrep[] is n.</pre><p> <pre> repfnz[0:W*m-1]: for a nonzero segment U[*,j] that ends at a supernodal representative r, repfnz[r] is the location of the first nonzero in this segment. It is also used during the dfs: repfnz[r]>0 indicates the supernode r has been explored. NOTE: There are W of them, each used for one column of a panel.</pre><p> <pre> panel_lsub[0:W*m-1]: temporary for the nonzeros row indices below the panel diagonal. These are filled in during <a class="el" href="dpanel__dfs_8c.html#2a809488b87d2c1a9b2a574b726e8517">dpanel_dfs()</a>, and are used later in the inner LU factorization within the panel. panel_lsub[]/dense[] pair forms the SPA data structure. NOTE: There are W of them.</pre><p> <pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values; NOTE: there are W of them.</pre><p> <pre> tempv[0:*]: real temporary used for dense numeric kernels; The size of this array is defined by <a class="el" href="slu__util_8h.html#06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__util_8h.html" title="Utility header file.">slu_util.h</a>. It is also used by the dropping routine <a class="el" href="ilu__ddrop__row_8c.html#380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>. </pre> </div> </div><p> </div> <hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 25 13:43:50 2011 for SuperLU by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address> </body> </html>