197 lines
6.5 KiB
C
197 lines
6.5 KiB
C
/*--------------------------------------------------------------------------
|
|
* Author: Andy Cleary
|
|
* Centre for Applied Scientific Computing
|
|
* Lawrence Livermore Labs
|
|
* Revision History:
|
|
* 5-22-97: AJC. Original Version.
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
|
|
#define INCFACTFact
|
|
|
|
/*****************************************************************************
|
|
* C to Fortran interfacing macros
|
|
*****************************************************************************/
|
|
|
|
/*****************************************************************************
|
|
* C routine would use this macro to call "incfactt_driver.f" :
|
|
*
|
|
* CALL_INCFACTT_DRIVER(n, nnz,
|
|
* ia, ja, a,
|
|
* ipar, rpar,
|
|
* lenpmx,
|
|
#ifdef ILUFact
|
|
* plu, jlu, ju, perm, qperm, rscale, cscale,
|
|
#elif defined ICFact
|
|
* plu, jlu, perm, qperm, scale,
|
|
#endif
|
|
* iwork, liw, rwork, lrw,
|
|
* ier_incfactt, ier_input);
|
|
*
|
|
*****************************************************************************/
|
|
#ifdef _CRAYMPP
|
|
#define INCFACTT_DRIVER INCFACTT_DRIVER
|
|
#else
|
|
#define INCFACTT_DRIVER incfactt_driver__
|
|
#endif
|
|
|
|
#ifdef ILUFact
|
|
#define CALL_INCFACTT_DRIVER(n, nnz,\
|
|
ia, ja, a, \
|
|
ipar, rpar,\
|
|
lenpmx,\
|
|
plu, jlu, ju, perm, qperm, rscale, cscale, \
|
|
iwork, liw, rwork, lrw,\
|
|
ier_incfactt, ier_input) \
|
|
INCFACTT_DRIVER(&n, &nnz,\
|
|
ia, ja, a, \
|
|
ipar, rpar,\
|
|
&lenpmx,\
|
|
plu, jlu, ju, perm, qperm, rscale, cscale, \
|
|
iwork, &liw, rwork, &lrw,\
|
|
&ier_incfactt, &ier_input)
|
|
#elif defined ICFact
|
|
#define CALL_INCFACTT_DRIVER(n, nnz,\
|
|
ia, ja, a, \
|
|
ipar, rpar,\
|
|
lenpmx,\
|
|
plu, jlu, perm, qperm, scale, \
|
|
iwork, liw, rwork, lrw,\
|
|
ier_incfactt, ier_input) \
|
|
INCFACTT_DRIVER(&n, &nnz,\
|
|
ia, ja, a, \
|
|
ipar, rpar,\
|
|
&lenpmx,\
|
|
plu, jlu, perm, qperm, scale, \
|
|
iwork, &liw, rwork, &lrw,\
|
|
&ier_incfactt, &ier_input)
|
|
#endif
|
|
|
|
void INCFACTT_DRIVER(int *n, int *nnz,
|
|
int *ia, int *ja, double *a,
|
|
int *ipar, double *rpar,
|
|
int *lenpmx,
|
|
double *plu, int *jlu,
|
|
#ifdef ILUFact
|
|
int *ju,
|
|
#endif
|
|
int *perm, int *qperm,
|
|
#ifdef ILUFact
|
|
double *rscale, double *cscale,
|
|
#endif
|
|
#ifdef ICFact
|
|
double *scale,
|
|
#endif
|
|
int *iwork, int *liw, double *rwork, int *lrw,
|
|
int *ier_incfactt, int *ier_input);
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
* C routine would use this macro to call "ksp_driver.f" :
|
|
*
|
|
* CALL_KSP_DRIVER(n, nnz,
|
|
* ia, ja, a, rhs, sol,
|
|
* ipar, rpar,
|
|
* lenpmx,
|
|
#ifdef ILUFact
|
|
* plu, jlu, ju, perm, qperm, rscale, cscale,
|
|
#elif defined ICFact
|
|
* plu, jlu, perm, qperm, scale,
|
|
#endif
|
|
* rwork, lrw,
|
|
* ier_ksp, ier_input);
|
|
*
|
|
*****************************************************************************/
|
|
#ifdef _CRAYMPP
|
|
#define KSP_DRIVER KSP_DRIVER
|
|
#else
|
|
#define KSP_DRIVER ksp_driver__
|
|
#endif
|
|
|
|
#ifdef ILUFact
|
|
#define CALL_KSP_DRIVER(n, nnz,\
|
|
ia, ja, a, rhs, sol,\
|
|
ipar, rpar,\
|
|
lenpmx,\
|
|
plu, jlu, ju, perm, qperm, rscale, cscale, \
|
|
rwork, lrw,\
|
|
ier_ksp, ier_input) \
|
|
KSP_DRIVER(&n, &nnz,\
|
|
ia, ja, a, rhs, sol,\
|
|
ipar, rpar,\
|
|
&lenpmx,\
|
|
plu, jlu, ju, perm, qperm, rscale, cscale, \
|
|
rwork, &lrw,\
|
|
&ier_ksp, &ier_input)
|
|
#elif defined ICFact
|
|
#define CALL_KSP_DRIVER(n, nnz,\
|
|
ia, ja, a, rhs, sol,\
|
|
ipar, rpar,\
|
|
lenpmx,\
|
|
plu, jlu, perm, qperm, scale, \
|
|
rwork, lrw,\
|
|
ier_ksp, ier_input) \
|
|
KSP_DRIVER(&n, &nnz,\
|
|
ia, ja, a, rhs, sol,\
|
|
ipar, rpar,\
|
|
&lenpmx,\
|
|
plu, jlu, perm, qperm, scale, \
|
|
rwork, &lrw,\
|
|
&ier_ksp, &ier_input)
|
|
#endif
|
|
|
|
void KSP_DRIVER(int *n, int *nnz,
|
|
int *ia, int *ja, double *a, double *rhs, double *sol,
|
|
int *ipar, double *rpar,
|
|
int *lenpmx,
|
|
double *plu, int *jlu,
|
|
#ifdef ILUFact
|
|
int *ju,
|
|
#endif
|
|
int *perm, int *qperm,
|
|
#ifdef ILUFact
|
|
double *rscale, double *cscale,
|
|
#endif
|
|
#ifdef ICFact
|
|
double *scale,
|
|
#endif
|
|
double *rwork, int *lrw,
|
|
int *ier_ksp, int *ier_input);
|
|
|
|
|
|
/*****************************************************************************
|
|
* C routine would use this macro to call "dvperm" :
|
|
*
|
|
* CALL_DVPERM(n, x, perm);
|
|
*
|
|
*****************************************************************************/
|
|
#ifdef _CRAYMPP
|
|
#define DVPERM DVPERM
|
|
#else
|
|
#define DVPERM dvperm_
|
|
#endif
|
|
|
|
#define CALL_DVPERM(n, x, perm) \
|
|
DVPERM(&n, x, perm)
|
|
|
|
void DVPERM(int *n, double *x, int *perm);
|
|
|
|
/*****************************************************************************
|
|
* C routine would use this macro to call "csrssr" :
|
|
*
|
|
* CALL_CSRSSR(n, a, ja, ia, nzmax, ao, jao, iao, ierr);
|
|
*
|
|
*****************************************************************************/
|
|
#ifdef _CRAYMPP
|
|
#define CSRSSR CSRSSR
|
|
#else
|
|
#define CSRSSR csrssr_
|
|
#endif
|
|
|
|
#define CALL_CSRSSR(n, a, ja, ia, nzmax, ao, jao, iao, ierr ) \
|
|
CSRSSR(&n, a, ja, ia, &nzmax, ao, jao, iao, &ierr )
|
|
|
|
void CSRSSR(int *n, double *a, int *ja, int *ia, int *nzmax,
|
|
double *ao, int *jao, int *iao, int *ierr );
|