hypre/seq_ls/ift_facsol_f.h
1997-12-02 23:39:31 +00:00

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 );