SuperLU 6.0.1
|
Example #1 showing how to use ILU to precondition GMRES. More...
#include "slu_ddefs.h"
Functions | |
void | dpsolve (int n, double x[], double y[]) |
Performs dgsisx with original matrix A. More... | |
void | dmatvec_mult (double alpha, double x[], double beta, double y[]) |
Performs matrix-vector multipliation sp_dgemv with original matrix A. More... | |
int | main (int argc, char *argv[]) |
Variables | |
superlu_options_t * | GLOBAL_OPTIONS |
double * | GLOBAL_R |
double * | GLOBAL_C |
int * | GLOBAL_PERM_C |
int * | GLOBAL_PERM_R |
SuperMatrix * | GLOBAL_A |
SuperMatrix * | GLOBAL_L |
SuperMatrix * | GLOBAL_U |
SuperLUStat_t * | GLOBAL_STAT |
mem_usage_t * | GLOBAL_MEM_USAGE |
This example shows that ILU is computed from the equilibrated matrix, and the preconditioned GMRES is applied to the equilibrated system. The driver routine DGSISX is called twice to perform factorization and apply preconditioner separately.
Note that DGSISX 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 can solve the transformed system, A1*y = Dr*B, using FGMRES. B is first overwritten as Dr*B. Then GMRES step requires requires 2 procedures: 1) Apply preconditioner M^{-1} = Pc^T*U^{-1}*L^{-1}*Pr 2) Matrix-vector multiplication: w = A1*v
void dmatvec_mult | ( | double | alpha, |
double | x[], | ||
double | beta, | ||
double | y[] | ||
) |
The operations is y := alpha*A*x + beta*y. See documentation of sp_dgemv for further details.
[in] | alpha | Scalar factor for A*x |
[in] | x | Vector to multiply with A |
[in] | beta | Scalar factor for y |
[in,out] | y | Vector to add to to matrix-vector multiplication and storage for result. |
void dpsolve | ( | int | n, |
double | x[], | ||
double | y[] | ||
) |
See documentation of dgsisx for more details.
[in] | n | Dimension of matrices |
[out] | x | Solution |
[in,out] | y | Right-hand side |
int main | ( | int | argc, |
char * | argv[] | ||
) |
SuperMatrix* GLOBAL_A |
double * GLOBAL_C |
SuperMatrix * GLOBAL_L |
mem_usage_t* GLOBAL_MEM_USAGE |
superlu_options_t* GLOBAL_OPTIONS |
int* GLOBAL_PERM_C |
int * GLOBAL_PERM_R |
double* GLOBAL_R |
SuperLUStat_t* GLOBAL_STAT |
SuperMatrix * GLOBAL_U |