/* $Id: snes.h,v 1.17 1995/06/02 21:05:19 bsmith Exp $ */
/*
   This is to provide some name space protection from Lapack and Blas 
allow the appropriate single or double precision version to be used.
Also deals with different Fortran 77 naming conventions on machines.
*/
#if !defined(_PLAPACK_H)
#define _PLAPACK_H

#include "ptscimpl.h"

#if !defined(PETSC_COMPLEX)
#if defined(PARCH_cray)
#define BLdot_   SDOT
#define BLnrm2_  SNRM2
#define BLscal_  SSCAL
#define BLcopy_  SCOPY
#define BLswap_  SSWAP
#define BLaxpy_  SAXPY
#define BLasum_  SASUM
#elif defined(FORTRANCAPS)
#define BLdot_   DDOT
#define BLnrm2_  DNRM2
#define BLscal_  DSCAL
#define BLcopy_  DCOPY
#define BLswap_  DSWAP
#define BLaxpy_  DAXPY
#define BLasum_  DASUM
#elif !defined(FORTRANUNDERSCORE)
#define BLdot_   ddot
#define BLnrm2_  dnrm2
#define BLscal_  dscal
#define BLcopy_  dcopy
#define BLswap_  dswap
#define BLaxpy_  daxpy
#define BLasum_  dasum
#else
#define BLdot_   ddot_
#define BLnrm2_  dnrm2_
#define BLscal_  dscal_
#define BLcopy_  dcopy_
#define BLswap_  dswap_
#define BLaxpy_  daxpy_
#define BLasum_  dasum_
#endif

#if defined(PARCH_cray)
#define LApotrf_ SPOTRF
#define LApotrs_ SPOTRS
#define LAgemv_  SGEMV
#define LAgetrf_ SGETRF
#define LAgetrs_ SGETRS
#define LAgemv_  SGEMV
#define LAtrmv_  STRMV
#define LAtrsl_  STRSL
#define LAger_   SGER
#elif defined(FORTRANCAPS)
#define LApotrf_ DPOTRF
#define LApotrs_ DPOTRS
#define LAgemv_  DGEMV
#define LAgetrf_ DGETRF
#define LAgetrs_ DGETRS
#define LAger_   DGER
#define LAtrmv_  DTRMV
#define LAtrsl_  DTRSL
#elif !defined(FORTRANUNDERSCORE)
#define LApotrf_ dpotrf
#define LApotrs_ dpotrs
#define LAgemv_  dgemv
#define LAgetrf_ dgetrf
#define LAgetrs_ dgetrs
#define LAger_   dger
#define LAtrmv_  dtrmv
#define LAtrsl_  dtrsl
#else
#define LApotrf_ dpotrf_
#define LApotrs_ dpotrs_
#define LAgemv_  dgemv_
#define LAgetrf_ dgetrf_
#define LAgetrs_ dgetrs_
#define LAger_   dger_
#define LAtrmv_  dtrmv_
#define LAtrsl_  dtrsl_
#endif

#else

#if defined(PARCH_cray)
#define BLdot_   CDOTC
#define BLnrm2_  SCNRM2
#define BLscal_  CSCAL
#define BLcopy_  CCOPY
#define BLswap_  CSWAP
#define BLaxpy_  CAXPY
#define BLasum_  SCASUM
#elif defined(FORTRANCAPS)
#define BLdot_   ZDOTC
#define BLnrm2_  DZNRM2
#define BLscal_  ZSCAL
#define BLcopy_  ZCOPY
#define BLswap_  ZSWAP
#define BLaxpy_  ZAXPY
#define BLasum_  DZASUM
#elif !defined(FORTRANUNDERSCORE)
#define BLdot_   zdotc
#define BLnrm2_  dznrm2
#define BLscal_  zscal
#define BLcopy_  zcopy
#define BLswap_  zswap
#define BLaxpy_  zaxpy
#define BLasum_  dzasum
#else
#define BLdot_   zdotc_
#define BLnrm2_  dznrm2_
#define BLscal_  zscal_
#define BLcopy_  zcopy_
#define BLswap_  zswap_
#define BLaxpy_  zaxpy_
#define BLasum_  dzasum_
#endif

#if defined(PARCH_cray)
#define LApotrf_ CPOTRF
#define LApotrs_ CPOTRS
#define LAgemv_  CGEMV
#define LAgetrf_ CGETRF
#define LAgetrs_ CGETRS
#define LAgemv_  CGEMV
#define LAtrmv_  CTRMV
#define LAtrsl_  CTRSL
#define LAger_   CGER
#elif defined(FORTRANCAPS)
#define LApotrf_ ZPOTRF
#define LApotrs_ ZPOTRS
#define LAgemv_  ZGEMV
#define LAgetrf_ ZGETRF
#define LAgetrs_ ZGETRS
#define LAger_   ZGER
#define LAtrmv_  ZTRMV
#define LAtrsl_  ZTRSL
#elif !defined(FORTRANUNDERSCORE)
#define LApotrf_ zpotrf
#define LApotrs_ zpotrs
#define LAgemv_  zgemv
#define LAgetrf_ zgetrf
#define LAgetrs_ zgetrs
#define LAger_   zger
#define LAtrmv_  ztrmv
#define LAtrsl_  ztrsl
#else
#define LApotrf_ zpotrf_
#define LApotrs_ zpotrs_
#define LAgemv_  zgemv_
#define LAgetrf_ zgetrf_
#define LAgetrs_ zgetrs_
#define LAger_   zger_
#define LAtrmv_  ztrmv_
#define LAtrsl_  ztrsl_
#endif

#endif

#if defined(__cplusplus)
extern "C" {
#endif

extern Scalar BLdot_(int*,Scalar*,int*,Scalar*,int*);
extern double BLnrm2_(int*,Scalar*,int*),BLasum_(int*,Scalar*,int*);
extern void   BLscal_(int*,Scalar*,Scalar*,int*);
extern void   BLcopy_(int*,Scalar*,int*,Scalar*,int*);
extern void   BLswap_(int*,Scalar*,int*,Scalar*,int*);
extern void   BLaxpy_(int*,Scalar*,Scalar*,int*,Scalar*,int*);

extern void   LAgetrf_(int*,int*,Scalar*,int*,int*,int*);
extern void   LApotrf_(char*,int*,Scalar*,int*,int*);
extern void   LAgemv_(char*,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
               Scalar*,Scalar*,int*);
extern void   LApotrs_(char*,int*,int*,Scalar*,int*,Scalar*,int*,int*);
extern void   LAgetrs_(char*,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);

#if defined(__cplusplus)
};
#endif

#endif
