#include "../A2.h"
#include "../FrontMtx.h"
#include "../Drand.h"
#include "../SymbFac.h"
#include "../timings.h"
#include "../misc.h"
#include "../DenseMtx.h"
#include "../InpMtx.h"
#include "../Utilities.h"
#define CONVER_TOL 1.0e-6
#define BiCGStabR 0
#define BiCGStabL 1
#define MLBiCGStabR 2
#define MLBiCGStabL 3
#define TFQMRR 4
#define TFQMRL 5
#define PCGR 6
#define PCGL 7
#define BGMRESR 8
#define BGMRESL 9
int
bicgstabr (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxX,
DenseMtx *mtxB,
int itermax,
double convergetol,
int msglvl,
FILE *msgFile
);
int
bicgstabl (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxX,
DenseMtx *mtxB,
int itermax,
double convergetol,
int msglvl,
FILE *msgFile
);
int
tfqmrr (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxX,
DenseMtx *mtxB,
int itermax,
double convergetol,
int msglvl,
FILE *msgFile
);
int
tfqmrl (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxX,
DenseMtx *mtxB,
int itermax,
double convergetol,
int msglvl,
FILE *msgFile
);
int
pcgr (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxX,
DenseMtx *mtxB,
int itermax,
double convergetol,
int msglvl,
FILE *msgFile
);
int
pcgl (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxX,
DenseMtx *mtxB,
int itermax,
double convergetol,
int msglvl,
FILE *msgFile
);
int
mlbicgstabr (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxQ,
DenseMtx *mtxX,
DenseMtx *mtxB,
int itermax,
double convergetol,
int msglvl,
FILE *msgFile
);
int
mlbicgstabl (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxX,
DenseMtx *mtxQ,
DenseMtx *mtxB,
int itermax,
double convergetol,
int msglvl,
FILE *msgFile
);
int
bgmresr (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxX,
DenseMtx *mtxB,
int maxnouter,
int maxninner,
int *pnouter,
int *pninner,
double convergetol,
int msglvl,
FILE *msgFile
);
int
bgmresl (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxX,
DenseMtx *mtxB,
int maxnouter,
int maxninner,
int *pnouter,
int *pninner,
double convergetol,
int msglvl,
FILE *msgFile
);
int
zbicgstabr (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxX,
DenseMtx *mtxB,
int itermax,
double convergetol,
int msglvl,
FILE *msgFile
);
int
zbicgstabl (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxX,
DenseMtx *mtxB,
int itermax,
double convergetol,
int msglvl,
FILE *msgFile
);
int
ztfqmrr (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxX,
DenseMtx *mtxB,
int itermax,
double convergetol,
int msglvl,
FILE *msgFile
);
int
ztfqmrl (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxX,
DenseMtx *mtxB,
int itermax,
double convergetol,
int msglvl,
FILE *msgFile
);
int
zpcgr (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxX,
DenseMtx *mtxB,
int itermax,
double convergetol,
int msglvl,
FILE *msgFile
);
int
zpcgl (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxX,
DenseMtx *mtxB,
int itermax,
double convergetol,
int msglvl,
FILE *msgFile
);
int
zmlbicgstabr (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxQ,
DenseMtx *mtxX,
DenseMtx *mtxB,
int itermax,
double convergetol,
int msglvl,
FILE *msgFile
);
int
zmlbicgstabl (
int n_matrixSize,
int type,
int symmetryflag,
InpMtx *mtxA,
FrontMtx *Precond,
DenseMtx *mtxX,
DenseMtx *mtxQ,
DenseMtx *mtxB,
int itermax,
double convergetol,
int msglvl,
FILE *msgFile
);
/*************************** NEW UTILITY ROUTINES ********************/
double
DenseMtx_frobNorm (
DenseMtx *mtx
);
double
DenseMtx_twoNormOfColumn (
DenseMtx *mtx,
int jcol
);
/*
------------------------------------------------------
copy column icol of a Dense matrix A to column jcol of a
Dense matrix B. Ai->Bj.
------------------------------------------------------
*/
void
DenseMtx_colCopy (
DenseMtx *mtxB, int jcol,
DenseMtx *mtxA, int icol
);
/*
------------------------------------------------------
compute dot product of column icol of a Dense matrix A
and column jcol of a Dense matrix B
prod=Ai^H * Bj.
------------------------------------------------------
*/
void
DenseMtx_colDotProduct (
DenseMtx *mtxA, int icol,
DenseMtx *mtxB, int jcol,
double *prod
);
/*
------------------------------------------------------
compute a general axpy with column icol of a Dense matrix A
and column jcol of a Dense matrix B. Ai=alpha*Ai+beta*Bj.
------------------------------------------------------
*/
void
DenseMtx_colGenAxpy (
double *alpha, DenseMtx *mtxA, int icol,
double *beta, DenseMtx *mtxB, int jcol
);
/*
-----------------------------------------------
copy col icolA from mtxA into col icolB in mtxB
-----------------------------------------------
*/
void
DenseMtx_copyCoulmn (
DenseMtx *mtxB,
int icolB,
DenseMtx *mtxA,
int icolA
);
/*
-----------------------------------------------
FrontMtx_solve with column icol of rhsmtx as right-hand-side.
-----------------------------------------------
*/
void
FrontMtx_solveOneColumn (
FrontMtx *frontmtx,
DenseMtx *solmtx,
int jcol,
DenseMtx *rhsmtx,
int icol,
SubMtxManager *mtxmanager,
double cpus[],
int msglvl,
FILE *msgFile
);
/*
-------------------------------------------
performs the matrix-matrix operations
C = beta*C + alpha*(A)*(B)
A, B and C must be column major.
*/
int
DenseMtx_mmm(
char *A_opt,
char *B_opt,
double *beta,
DenseMtx *mtxC,
double *alpha,
DenseMtx *mtxA,
DenseMtx *mtxB
);
/*
----------------------------------------------
return the absolute value of a complex number
----------------------------------------------
*/
double
zabs(double *x);
/*
-------------------------------------------
compute the sum of two complex numbers
-------------------------------------------
*/
void
zadd
(double *x, double *y, double *u
);
/*
-------------------------------------------
divide two complex numbers
-------------------------------------------
*/
void
zdiv
(double *x, double *y, double *u
);
/*
-------------------------------------------
multiply two complex numbers
-------------------------------------------
*/
void
zmul(double *x, double *y, double *u
);
/*
---------------------------------------------
compute the difference of two complex numbers
---------------------------------------------
*/
void
zsub
(double *x, double *y, double *u
);
syntax highlighted by Code2HTML, v. 0.9.1