1*112a2221SBarry Smith /* $Id: plapack.h,v 1.14 1996/01/26 04:35:51 bsmith Exp bsmith $ */ 2a1e12872SBarry Smith /* 3c0581c19SLois Curfman McInnes This file provides some name space protection from LAPACK and BLAS and 4c0581c19SLois Curfman McInnes allows the appropriate single or double precision version to be used. 5c0581c19SLois Curfman McInnes This file also deals with different Fortran 77 naming conventions on machines. 65392566eSBarry Smith 75392566eSBarry Smith Another problem is charactor strings are represented differently on 85392566eSBarry Smith on some machines in C and Fortran 77. This problem comes up on the 95392566eSBarry Smith Cray T3D. Yet another reason to hate ... 105392566eSBarry Smith 11a1e12872SBarry Smith */ 12a1e12872SBarry Smith #if !defined(_PLAPACK_H) 13a1e12872SBarry Smith #define _PLAPACK_H 14a1e12872SBarry Smith 1519b02663SBarry Smith #include "petsc.h" 16a1e12872SBarry Smith 175392566eSBarry Smith #if defined(PARCH_t3d) 185392566eSBarry Smith #include "fortran.h" 195392566eSBarry Smith #endif 205392566eSBarry Smith 210a5e7eceSLois Curfman McInnes /* t3d doesn't have lower level SGETF2 in library, so use SGETRF instead */ 22a1e12872SBarry Smith #if !defined(PETSC_COMPLEX) 23227d817aSBarry Smith #if defined(PARCH_t3d) 24c0534c1cSBarry Smith #define LAgeqrf_ SGEQRF 255392566eSBarry Smith #define LAgetrf_ SGETRF 260a5e7eceSLois Curfman McInnes #define LAgetf2_ SGETRF 27a1e12872SBarry Smith #define BLdot_ SDOT 28a1e12872SBarry Smith #define BLnrm2_ SNRM2 29a1e12872SBarry Smith #define BLscal_ SSCAL 30a1e12872SBarry Smith #define BLcopy_ SCOPY 31a1e12872SBarry Smith #define BLswap_ SSWAP 32a1e12872SBarry Smith #define BLaxpy_ SAXPY 33a1e12872SBarry Smith #define BLasum_ SASUM 34227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS) 35c0534c1cSBarry Smith #define LAgeqrf_ DGEQRF 365392566eSBarry Smith #define LAgetrf_ DGETRF 37c0581c19SLois Curfman McInnes #define LAgetf2_ DGETF2 38a1e12872SBarry Smith #define BLdot_ DDOT 39a1e12872SBarry Smith #define BLnrm2_ DNRM2 40a1e12872SBarry Smith #define BLscal_ DSCAL 41a1e12872SBarry Smith #define BLcopy_ DCOPY 42a1e12872SBarry Smith #define BLswap_ DSWAP 43a1e12872SBarry Smith #define BLaxpy_ DAXPY 44a1e12872SBarry Smith #define BLasum_ DASUM 45227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE) 46c0534c1cSBarry Smith #define LAgeqrf_ dgeqrf 475392566eSBarry Smith #define LAgetrf_ dgetrf 48c0581c19SLois Curfman McInnes #define LAgetf2_ dgetf2 49a1e12872SBarry Smith #define BLdot_ ddot 50a1e12872SBarry Smith #define BLnrm2_ dnrm2 51a1e12872SBarry Smith #define BLscal_ dscal 52a1e12872SBarry Smith #define BLcopy_ dcopy 53a1e12872SBarry Smith #define BLswap_ dswap 54a1e12872SBarry Smith #define BLaxpy_ daxpy 55a1e12872SBarry Smith #define BLasum_ dasum 56a1e12872SBarry Smith #else 57c0534c1cSBarry Smith #define LAgeqrf_ dgeqrf_ 585392566eSBarry Smith #define LAgetrf_ dgetrf_ 59c0581c19SLois Curfman McInnes #define LAgetf2_ dgetf2_ 60a1e12872SBarry Smith #define BLdot_ ddot_ 61a1e12872SBarry Smith #define BLnrm2_ dnrm2_ 62a1e12872SBarry Smith #define BLscal_ dscal_ 63a1e12872SBarry Smith #define BLcopy_ dcopy_ 64a1e12872SBarry Smith #define BLswap_ dswap_ 65a1e12872SBarry Smith #define BLaxpy_ daxpy_ 66a1e12872SBarry Smith #define BLasum_ dasum_ 67a1e12872SBarry Smith #endif 68a1e12872SBarry Smith 695392566eSBarry Smith #if defined(PARCH_t3d) 70bbb6d6a8SBarry Smith #define LAormqr_(a,b,c,d,e,f,g,h,i,j,k,l,m) SORMQR(_cptofcd((a),1),\ 71bbb6d6a8SBarry Smith _cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m)) 72bbb6d6a8SBarry Smith #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) STRTRS(_cptofcd((a),1),_cptofcd((b),1),\ 73c0534c1cSBarry Smith _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j)) 745392566eSBarry Smith #define LApotrf_(a,b,c,d,e) SPOTRF(_cptofcd((a),1),(b),(c),(d),(e)) 755392566eSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) SPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\ 765392566eSBarry Smith (f),(g),(h)) 775392566eSBarry Smith #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) SGEMV(_cptofcd((a),1),(b),(c),(d),(e),\ 785392566eSBarry Smith (f),(g),(h),(i),(j),(k)) 795392566eSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) SGETRS(_cptofcd((a),1),(b),(c),(d),(e),\ 805392566eSBarry Smith (f),(g),(h),(i)) 815392566eSBarry Smith #define LAtrmv_ STRMV 825392566eSBarry Smith #define LAtrsl_ STRSL 83227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS) 84c0534c1cSBarry Smith #define LAormqr_ DORMQR 85c0534c1cSBarry Smith #define LAtrtrs_ DTRTRS 86a1e12872SBarry Smith #define LApotrf_ DPOTRF 87a1e12872SBarry Smith #define LApotrs_ DPOTRS 88a1e12872SBarry Smith #define LAgemv_ DGEMV 89a1e12872SBarry Smith #define LAgetrs_ DGETRS 90a1e12872SBarry Smith #define LAtrmv_ DTRMV 91a1e12872SBarry Smith #define LAtrsl_ DTRSL 92227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE) 93c0534c1cSBarry Smith #define LAormqr_ dormqr 94c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs 95a1e12872SBarry Smith #define LApotrf_ dpotrf 96a1e12872SBarry Smith #define LApotrs_ dpotrs 97a1e12872SBarry Smith #define LAgemv_ dgemv 98a1e12872SBarry Smith #define LAgetrs_ dgetrs 99a1e12872SBarry Smith #define LAtrmv_ dtrmv 100a1e12872SBarry Smith #define LAtrsl_ dtrsl 101a1e12872SBarry Smith #else 102c0534c1cSBarry Smith #define LAormqr_ dormqr_ 103c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs_ 104a1e12872SBarry Smith #define LApotrf_ dpotrf_ 105a1e12872SBarry Smith #define LApotrs_ dpotrs_ 106a1e12872SBarry Smith #define LAgemv_ dgemv_ 107a1e12872SBarry Smith #define LAgetrs_ dgetrs_ 108a1e12872SBarry Smith #define LAtrmv_ dtrmv_ 109a1e12872SBarry Smith #define LAtrsl_ dtrsl_ 110a1e12872SBarry Smith #endif 111a1e12872SBarry Smith 112a1e12872SBarry Smith #else 113a1e12872SBarry Smith 114*112a2221SBarry Smith #if defined(PARCH_t3d) 115c0534c1cSBarry Smith #define LAgeqrf_ CGEQRF 116a1e12872SBarry Smith #define BLdot_ CDOTC 117a1e12872SBarry Smith #define BLnrm2_ SCNRM2 118a1e12872SBarry Smith #define BLscal_ CSCAL 119a1e12872SBarry Smith #define BLcopy_ CCOPY 120a1e12872SBarry Smith #define BLswap_ CSWAP 121a1e12872SBarry Smith #define BLaxpy_ CAXPY 122a1e12872SBarry Smith #define BLasum_ SCASUM 1235392566eSBarry Smith #define LAgetrf_ CGETRF 1240a5e7eceSLois Curfman McInnes #define LAgetf2_ CGETRF 125227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS) 126c0534c1cSBarry Smith #define LAgeqrf_ ZGEQRF 127a1e12872SBarry Smith #define BLdot_ ZDOTC 128a1e12872SBarry Smith #define BLnrm2_ DZNRM2 129a1e12872SBarry Smith #define BLscal_ ZSCAL 130a1e12872SBarry Smith #define BLcopy_ ZCOPY 131a1e12872SBarry Smith #define BLswap_ ZSWAP 132a1e12872SBarry Smith #define BLaxpy_ ZAXPY 133a1e12872SBarry Smith #define BLasum_ DZASUM 134227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE) 135c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf 1365392566eSBarry Smith #define LAgetrf_ zgetrf 13708d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2 138a1e12872SBarry Smith #define BLdot_ zdotc 139a1e12872SBarry Smith #define BLnrm2_ dznrm2 140a1e12872SBarry Smith #define BLscal_ zscal 141a1e12872SBarry Smith #define BLcopy_ zcopy 142a1e12872SBarry Smith #define BLswap_ zswap 143a1e12872SBarry Smith #define BLaxpy_ zaxpy 144a1e12872SBarry Smith #define BLasum_ dzasum 145a1e12872SBarry Smith #else 146c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf_ 1475392566eSBarry Smith #define LAgetrf_ zgetrf_ 14808d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2_ 149a1e12872SBarry Smith #define BLdot_ zdotc_ 150a1e12872SBarry Smith #define BLnrm2_ dznrm2_ 151a1e12872SBarry Smith #define BLscal_ zscal_ 152a1e12872SBarry Smith #define BLcopy_ zcopy_ 153a1e12872SBarry Smith #define BLswap_ zswap_ 154a1e12872SBarry Smith #define BLaxpy_ zaxpy_ 155a1e12872SBarry Smith #define BLasum_ dzasum_ 156a1e12872SBarry Smith #endif 157a1e12872SBarry Smith 1585392566eSBarry Smith #if defined(PARCH_t3d) 159c0534c1cSBarry Smith #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) CTRTRS(_cptofcd((a),1),_cptofcd((b),1),\ 160c0534c1cSBarry Smith _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j)) 1615392566eSBarry Smith #define LApotrf_(a,b,c,d,e) CPOTRF(_cptofcd((a),1),(b),(c),(d),(e)) 1625392566eSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) CPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\ 1635392566eSBarry Smith (f),(g),(h)) 1645392566eSBarry Smith #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) CGEMV(_cptofcd((a),1),(b),(c),(d),(e),\ 1655392566eSBarry Smith (f),(g),(h),(i),(j),(k)) 1665392566eSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) CGETRS(_cptofcd((a),1),(b),(c),(d),(e),\ 1675392566eSBarry Smith (f),(g),(h),(i)) 1685392566eSBarry Smith #define LAtrmv_ CTRMV 1695392566eSBarry Smith #define LAtrsl_ CTRSL 170227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS) 171c0534c1cSBarry Smith #define LAtrtrs_ ZTRTRS 172a1e12872SBarry Smith #define LApotrf_ ZPOTRF 173a1e12872SBarry Smith #define LApotrs_ ZPOTRS 174a1e12872SBarry Smith #define LAgemv_ ZGEMV 175a1e12872SBarry Smith #define LAgetrf_ ZGETRF 17608d0dac7SLois Curfman McInnes #define LAgetf2_ ZGETF2 177a1e12872SBarry Smith #define LAgetrs_ ZGETRS 178a1e12872SBarry Smith #define LAtrmv_ ZTRMV 179a1e12872SBarry Smith #define LAtrsl_ ZTRSL 180227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE) 181c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs 182a1e12872SBarry Smith #define LApotrf_ zpotrf 183a1e12872SBarry Smith #define LApotrs_ zpotrs 184a1e12872SBarry Smith #define LAgemv_ zgemv 185a1e12872SBarry Smith #define LAgetrs_ zgetrs 186a1e12872SBarry Smith #define LAtrmv_ ztrmv 187a1e12872SBarry Smith #define LAtrsl_ ztrsl 188a1e12872SBarry Smith #else 189c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs_ 190a1e12872SBarry Smith #define LApotrf_ zpotrf_ 191a1e12872SBarry Smith #define LApotrs_ zpotrs_ 192a1e12872SBarry Smith #define LAgemv_ zgemv_ 193a1e12872SBarry Smith #define LAgetrs_ zgetrs_ 194a1e12872SBarry Smith #define LAtrmv_ ztrmv_ 195a1e12872SBarry Smith #define LAtrsl_ ztrsl_ 196a1e12872SBarry Smith #endif 197a1e12872SBarry Smith 198a1e12872SBarry Smith #endif 199a1e12872SBarry Smith 200a1e12872SBarry Smith #if defined(__cplusplus) 201a1e12872SBarry Smith extern "C" { 202a1e12872SBarry Smith #endif 203a1e12872SBarry Smith 204126c565eSBarry Smith /* note that BLdot cannot be used with COMPLEX because it cannot 205126c565eSBarry Smith handle returing a double complex!! 206126c565eSBarry Smith */ 207126c565eSBarry Smith extern double BLdot_(int*,Scalar*,int*,Scalar*,int*); 2081eb62cbbSBarry Smith extern double BLnrm2_(int*,Scalar*,int*),BLasum_(int*,Scalar*,int*); 2091eb62cbbSBarry Smith extern void BLscal_(int*,Scalar*,Scalar*,int*); 2101eb62cbbSBarry Smith extern void BLcopy_(int*,Scalar*,int*,Scalar*,int*); 2111eb62cbbSBarry Smith extern void BLswap_(int*,Scalar*,int*,Scalar*,int*); 2121eb62cbbSBarry Smith extern void BLaxpy_(int*,Scalar*,Scalar*,int*,Scalar*,int*); 2131eb62cbbSBarry Smith extern void LAgetrf_(int*,int*,Scalar*,int*,int*,int*); 214bae8960eSLois Curfman McInnes extern void LAgetf2_(int*,int*,Scalar*,int*,int*,int*); 215c0534c1cSBarry Smith extern void LAgeqrf_(int*,int*,Scalar*,int*,Scalar*,Scalar*,int*,int*); 2165392566eSBarry Smith 2175392566eSBarry Smith #if defined(PARCH_t3d) 218*112a2221SBarry Smith 219*112a2221SBarry Smith #if defined(PETSC_COMPLEX) 2205392566eSBarry Smith extern void CPOTRF(_fcd,int*,Scalar*,int*,int*); 2215392566eSBarry Smith extern void CGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 2225392566eSBarry Smith Scalar*,Scalar*,int*); 2235392566eSBarry Smith extern void CPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*); 2245392566eSBarry Smith extern void CGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 2255392566eSBarry Smith #else 226*112a2221SBarry Smith extern void SPOTRF(_fcd,int*,Scalar*,int*,int*); 227*112a2221SBarry Smith extern void SGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 228*112a2221SBarry Smith Scalar*,Scalar*,int*); 229*112a2221SBarry Smith extern void SPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*); 230*112a2221SBarry Smith extern void SGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 231*112a2221SBarry Smith #endif 232*112a2221SBarry Smith 233*112a2221SBarry Smith #else 234c0534c1cSBarry Smith extern void LAormqr_(char*,char*,int*,int*,int*,Scalar*,int*,Scalar*,Scalar*, 235c0534c1cSBarry Smith int*,Scalar*,int*,int*); 236c0534c1cSBarry Smith extern void LAtrtrs_(char*,char*,char*,int*,int*,Scalar*,int*,Scalar*,int*, 237c0534c1cSBarry Smith int*); 2381eb62cbbSBarry Smith extern void LApotrf_(char*,int*,Scalar*,int*,int*); 2391eb62cbbSBarry Smith extern void LAgemv_(char*,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 240a1e12872SBarry Smith Scalar*,Scalar*,int*); 2411eb62cbbSBarry Smith extern void LApotrs_(char*,int*,int*,Scalar*,int*,Scalar*,int*,int*); 2421eb62cbbSBarry Smith extern void LAgetrs_(char*,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 2435392566eSBarry Smith #endif 244a1e12872SBarry Smith 245a1e12872SBarry Smith #if defined(__cplusplus) 24602834360SBarry Smith } 247a1e12872SBarry Smith #endif 248a1e12872SBarry Smith 249a1e12872SBarry Smith #endif 250