SuperLU 6.0.1
Functions | Variables
sitersol1.c File Reference

Example #2 showing how to use ILU to precondition GMRES. More...

#include "slu_sdefs.h"
Include dependency graph for sitersol1.c:

Functions

void spsolve (int n, float x[], float y[])
 Performs sgsisx with original matrix A. More...
 
void smatvec_mult (float alpha, float x[], float beta, float y[])
 Performs matrix-vector multipliation sp_sgemv with original matrix A. More...
 
int main (int argc, char *argv[])
 

Variables

char * GLOBAL_EQUED
 
superlu_options_tGLOBAL_OPTIONS
 
float * GLOBAL_R
 
float * GLOBAL_C
 
int * GLOBAL_PERM_C
 
int * GLOBAL_PERM_R
 
SuperMatrixGLOBAL_A
 
SuperMatrixGLOBAL_A_ORIG
 
SuperMatrixGLOBAL_L
 
SuperMatrixGLOBAL_U
 
SuperLUStat_tGLOBAL_STAT
 
mem_usage_tGLOBAL_MEM_USAGE
 

Detailed Description

This example shows that ILU is computed from the equilibrated matrix, but the preconditioned GMRES is applied to the original system. The driver routine SGSISX is called twice to perform factorization and apply preconditioner separately.

Note that SGSISX performs the following factorization: Pr*Dr*A*Dc*Pc^T ~= LU with Pr being obtained from MC64 statically then partial pivoting dynamically. On return, A is overwritten as A1 = Dr*A*Dc.

We need to save a copy of the original matrix A, then solve the original system, A*x = B, using FGMRES. Each GMRES step requires requires 2 procedures: 1) Apply preconditioner M^{-1} = Dc*Pc^T*U^{-1}*L^{-1}*Pr*Dr 2) Matrix-vector multiplication: w = A*v

Function Documentation

◆ main()

int main ( int  argc,
char *  argv[] 
)
Here is the call graph for this function:

◆ smatvec_mult()

void smatvec_mult ( float  alpha,
float  x[],
float  beta,
float  y[] 
)

The operations is y := alpha*A*x + beta*y. See documentation of sp_sgemv for further details.

Parameters
[in]alphaScalar factor for A*x
[in]xVector to multiply with A
[in]betaScalar factor for y
[in,out]yVector to add to to matrix-vector multiplication and storage for result.
Here is the call graph for this function:

◆ spsolve()

void spsolve ( int  n,
float  x[],
float  y[] 
)

See documentation of sgsisx for more details.

Parameters
[in]nDimension of matrices
[out]xSolution
[in,out]yRight-hand side
Here is the call graph for this function:

Variable Documentation

◆ GLOBAL_A

SuperMatrix* GLOBAL_A

◆ GLOBAL_A_ORIG

SuperMatrix * GLOBAL_A_ORIG

◆ GLOBAL_C

float * GLOBAL_C

◆ GLOBAL_EQUED

char* GLOBAL_EQUED

◆ GLOBAL_L

SuperMatrix * GLOBAL_L

◆ GLOBAL_MEM_USAGE

mem_usage_t* GLOBAL_MEM_USAGE

◆ GLOBAL_OPTIONS

superlu_options_t* GLOBAL_OPTIONS

◆ GLOBAL_PERM_C

int* GLOBAL_PERM_C

◆ GLOBAL_PERM_R

int * GLOBAL_PERM_R

◆ GLOBAL_R

float* GLOBAL_R

◆ GLOBAL_STAT

SuperLUStat_t* GLOBAL_STAT

◆ GLOBAL_U

SuperMatrix * GLOBAL_U