#include "slu_zdefs.h"
Functions | |
void | zpsolve (int n, doublecomplex x[], doublecomplex y[]) |
void | zmatvec_mult (doublecomplex alpha, doublecomplex x[], doublecomplex beta, doublecomplex y[]) |
int | main (int argc, char *argv[]) |
Variables | |
char * | GLOBAL_EQUED |
superlu_options_t * | GLOBAL_OPTIONS |
double * | GLOBAL_R |
double * | GLOBAL_C |
int * | GLOBAL_PERM_C |
int * | GLOBAL_PERM_R |
SuperMatrix * | GLOBAL_A |
SuperMatrix * | GLOBAL_A_ORIG |
SuperMatrix * | GLOBAL_L |
SuperMatrix * | GLOBAL_U |
SuperLUStat_t * | GLOBAL_STAT |
mem_usage_t * | GLOBAL_MEM_USAGE |
-- SuperLU routine (version 4.2) -- Lawrence Berkeley National Laboratory November, 2010 August, 2011
This example shows that ILU is computed from the equilibrated matrix, but the preconditioned GMRES is applied to the original system. The driver routine ZGSISX is called twice to perform factorization and apply preconditioner separately.
Note that ZGSISX performs the following factorization: Pr*Dr*A*Dc*Pc^T ~= LU with Pr being obtained from MC64 statically then partial pivoting dybamically. 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
int main | ( | int | argc, | |
char * | argv[] | |||
) |
void zmatvec_mult | ( | doublecomplex | alpha, | |
doublecomplex | x[], | |||
doublecomplex | beta, | |||
doublecomplex | y[] | |||
) |
void zpsolve | ( | int | n, | |
doublecomplex | x[], | |||
doublecomplex | y[] | |||
) |
double * GLOBAL_C |
char* GLOBAL_EQUED |
int* GLOBAL_PERM_C |
int * GLOBAL_PERM_R |
double* GLOBAL_R |