/* spoolesMT.h */
#include "../FrontMtx.h"
#include "../Lock.h"
/*--------------------------------------------------------------------*/
/*
-------------------------------------------------------------------
parallel factorization method for A.
all but two input parameters are the same as the serial method.
this is a wrapper method around FrontMtx_MT_factorInpMtx().
ownersIV -- pointer to IV object that holds map from fronts
to threads
lookahead -- lookahead parameter that allows computation at
higher levels of the front tree to proceed when
lower fronts are not yet finish. use lookahead = 0
to turn off this option. otherwise lookahead ancestors
of an active unfinished front can be active.
return value -- pointer to the first Chv object in a list
that contains postponed data
created -- 98may16, cca
-------------------------------------------------------------------
*/
Chv *
FrontMtx_MT_factorInpMtx (
FrontMtx *frontmtx,
InpMtx *inpmtx,
double tau,
double droptol,
ChvManager *chvmanager,
IV *ownersIV,
int lookahead,
int *perror,
double cpus[],
int stats[],
int msglvl,
FILE *msgFile
) ;
/*
-------------------------------------------------------------------
parallel factorization method for A + sigma*B.
all but two input parameters are the same
as the FrontMtx_factorPencil method.
ownersIV -- pointer to IV object that holds map from fronts
to threads
lookahead -- lookahead parameter that allows computation at
higher levels of the front tree to proceed when
lower fronts are not yet finish. use lookahead = 0
to turn off this option. otherwise lookahead ancestors
of an active unfinished front can be active.
return value -- pointer to the first Chv object in a list
that contains postponed data
created -- 98may16, cca
-------------------------------------------------------------------
*/
Chv *
FrontMtx_MT_factorPencil (
FrontMtx *frontmtx,
Pencil *pencil,
double tau,
double droptol,
ChvManager *chvmanager,
IV *ownersIV,
int lookahead,
int *perror,
double cpus[],
int stats[],
int msglvl,
FILE *msgFile
) ;
/*
----------------------------------------------------
multithreaded solve method for (L + I)D(I + U) X = B
or (U^T + I)D(I + U) X = B.
created -- 98mar19, cca
----------------------------------------------------
*/
void
FrontMtx_MT_solve (
FrontMtx *frontmtx,
DenseMtx *solmtx,
DenseMtx *rhsmtx,
SubMtxManager *mtxmanager,
SolveMap *solvemap,
double cpus[],
int msglvl,
FILE *msgFile
) ;
/*
------------------------------------------------------------
purpose -- compute a QR factorization using multiple threads
created -- 98may29, cca
------------------------------------------------------------
*/
void
FrontMtx_MT_QR_factor (
FrontMtx *frontmtx,
InpMtx *mtxA,
ChvManager *chvmanager,
IV *ownersIV,
double cpus[],
double *pfacops,
int msglvl,
FILE *msgFile
) ;
/*
--------------------------------------------------------
multithreaded version:
minimize ||b - Ax||_2 by
solving (U^T + I) * D * (I + U) X = A^T * B
where A = QR = QD(I + U)
by calling FrontMtx_solve()
note: if A is square, mtxX and mtxB must not be the same
cpus -- vector of cpu time breakdowns
cpus[0] -- set up solves
cpus[1] -- fetch rhs and store solution
cpus[2] -- forward solve
cpus[3] -- diagonal solve
cpus[4] -- backward solve
cpus[5] -- total solve time
cpus[6] -- time to compute A^T * B
cpus[7] -- total time
created -- 98may30, cca
--------------------------------------------------------
*/
void
FrontMtx_MT_QR_solve (
FrontMtx *frontmtx,
InpMtx *mtxA,
DenseMtx *mtxX,
DenseMtx *mtxB,
SubMtxManager *mtxmanager,
SolveMap *solvemap,
double cpus[],
int msglvl,
FILE *msgFile
) ;
/*--------------------------------------------------------------------*/
/*
----------------------------------------
purpose -- to compute Y := Y + alpha*A*X
created -- 98may02, cca
----------------------------------------
*/
void
InpMtx_MT_nonsym_mmm (
InpMtx *A,
DenseMtx *Y,
double alpha[],
DenseMtx *X,
int nthread,
int msglvl,
FILE *msgFile
) ;
/*
----------------------------------------
purpose -- to compute Y := Y + alpha*A*X
created -- 98jul09, cca
----------------------------------------
*/
void
InpMtx_MT_sym_mmm (
InpMtx *A,
DenseMtx *Y,
double alpha[],
DenseMtx *X,
int nthread,
int msglvl,
FILE *msgFile
) ;
/*
----------------------------------------
purpose -- to compute Y := Y + alpha*A*X
created -- 98jul09, cca
----------------------------------------
*/
void
InpMtx_MT_herm_mmm (
InpMtx *A,
DenseMtx *Y,
double alpha[],
DenseMtx *X,
int nthread,
int msglvl,
FILE *msgFile
) ;
/*
----------------------------------------
purpose -- to compute Y := Y + alpha*A*X
created -- 98jul09, cca
----------------------------------------
*/
void
InpMtx_MT_nonsym_mmm_T (
InpMtx *A,
DenseMtx *Y,
double alpha[],
DenseMtx *X,
int nthread,
int msglvl,
FILE *msgFile
) ;
/*
----------------------------------------
purpose -- to compute Y := Y + alpha*A*X
created -- 98jul09, cca
----------------------------------------
*/
void
InpMtx_MT_nonsym_mmm_H (
InpMtx *A,
DenseMtx *Y,
double alpha[],
DenseMtx *X,
int nthread,
int msglvl,
FILE *msgFile
) ;
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1