tahoma2d/thirdparty/superlu/SuperLU_4.1/SRC/mark_relax.c
2016-03-24 01:31:57 +09:00

47 lines
1.3 KiB
C

/*! @file mark_relax.c
* \brief Record the rows pivoted by the relaxed supernodes.
*
* <pre>
* -- SuperLU routine (version 4.0) --
* Lawrence Berkeley National Laboratory
* June 1, 2009
* <\pre>
*/
#include "slu_ddefs.h"
/*! \brief
*
* <pre>
* Purpose
* =======
* mark_relax() - record the rows used by the relaxed supernodes.
* </pre>
*/
int mark_relax(
int n, /* order of the matrix A */
int *relax_end, /* last column in a relaxed supernode.
* if j-th column starts a relaxed supernode,
* relax_end[j] represents the last column of
* this supernode. */
int *relax_fsupc, /* first column in a relaxed supernode.
* relax_fsupc[j] represents the first column of
* j-th supernode. */
int *xa_begin, /* Astore->colbeg */
int *xa_end, /* Astore->colend */
int *asub, /* row index of A */
int *marker /* marker[j] is the maximum column index if j-th
* row belongs to a relaxed supernode. */ )
{
register int jcol, kcol;
register int i, j, k;
for (i = 0; i < n && relax_fsupc[i] != EMPTY; i++)
{
jcol = relax_fsupc[i]; /* first column */
kcol = relax_end[jcol]; /* last column */
for (j = jcol; j <= kcol; j++)
for (k = xa_begin[j]; k < xa_end[j]; k++)
marker[asub[k]] = jcol;
}
return i;
}