1*4eeb42bcSBarry Smith /* $Id: plapack.h,v 1.15 1996/02/08 18:28:54 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 21a1e12872SBarry Smith #if !defined(PETSC_COMPLEX) 22*4eeb42bcSBarry Smith 23*4eeb42bcSBarry Smith /* 24*4eeb42bcSBarry Smith These are real case with no character string arguments 25*4eeb42bcSBarry Smith */ 26227d817aSBarry Smith #if defined(PARCH_t3d) 27c0534c1cSBarry Smith #define LAgeqrf_ SGEQRF 285392566eSBarry Smith #define LAgetrf_ SGETRF 290a5e7eceSLois Curfman McInnes #define LAgetf2_ SGETRF 30a1e12872SBarry Smith #define BLdot_ SDOT 31a1e12872SBarry Smith #define BLnrm2_ SNRM2 32a1e12872SBarry Smith #define BLscal_ SSCAL 33a1e12872SBarry Smith #define BLcopy_ SCOPY 34a1e12872SBarry Smith #define BLswap_ SSWAP 35a1e12872SBarry Smith #define BLaxpy_ SAXPY 36a1e12872SBarry Smith #define BLasum_ SASUM 37227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS) 38c0534c1cSBarry Smith #define LAgeqrf_ DGEQRF 395392566eSBarry Smith #define LAgetrf_ DGETRF 40c0581c19SLois Curfman McInnes #define LAgetf2_ DGETF2 41a1e12872SBarry Smith #define BLdot_ DDOT 42a1e12872SBarry Smith #define BLnrm2_ DNRM2 43a1e12872SBarry Smith #define BLscal_ DSCAL 44a1e12872SBarry Smith #define BLcopy_ DCOPY 45a1e12872SBarry Smith #define BLswap_ DSWAP 46a1e12872SBarry Smith #define BLaxpy_ DAXPY 47a1e12872SBarry Smith #define BLasum_ DASUM 48227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE) 49c0534c1cSBarry Smith #define LAgeqrf_ dgeqrf 505392566eSBarry Smith #define LAgetrf_ dgetrf 51c0581c19SLois Curfman McInnes #define LAgetf2_ dgetf2 52a1e12872SBarry Smith #define BLdot_ ddot 53a1e12872SBarry Smith #define BLnrm2_ dnrm2 54a1e12872SBarry Smith #define BLscal_ dscal 55a1e12872SBarry Smith #define BLcopy_ dcopy 56a1e12872SBarry Smith #define BLswap_ dswap 57a1e12872SBarry Smith #define BLaxpy_ daxpy 58a1e12872SBarry Smith #define BLasum_ dasum 59a1e12872SBarry Smith #else 60c0534c1cSBarry Smith #define LAgeqrf_ dgeqrf_ 615392566eSBarry Smith #define LAgetrf_ dgetrf_ 62c0581c19SLois Curfman McInnes #define LAgetf2_ dgetf2_ 63a1e12872SBarry Smith #define BLdot_ ddot_ 64a1e12872SBarry Smith #define BLnrm2_ dnrm2_ 65a1e12872SBarry Smith #define BLscal_ dscal_ 66a1e12872SBarry Smith #define BLcopy_ dcopy_ 67a1e12872SBarry Smith #define BLswap_ dswap_ 68a1e12872SBarry Smith #define BLaxpy_ daxpy_ 69a1e12872SBarry Smith #define BLasum_ dasum_ 70a1e12872SBarry Smith #endif 71a1e12872SBarry Smith 72*4eeb42bcSBarry Smith /* 73*4eeb42bcSBarry Smith Real with character string arguments. 74*4eeb42bcSBarry Smith */ 755392566eSBarry Smith #if defined(PARCH_t3d) 76bbb6d6a8SBarry Smith #define LAormqr_(a,b,c,d,e,f,g,h,i,j,k,l,m) SORMQR(_cptofcd((a),1),\ 77bbb6d6a8SBarry Smith _cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m)) 78bbb6d6a8SBarry Smith #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) STRTRS(_cptofcd((a),1),_cptofcd((b),1),\ 79c0534c1cSBarry Smith _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j)) 805392566eSBarry Smith #define LApotrf_(a,b,c,d,e) SPOTRF(_cptofcd((a),1),(b),(c),(d),(e)) 815392566eSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) SPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\ 825392566eSBarry Smith (f),(g),(h)) 835392566eSBarry Smith #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) SGEMV(_cptofcd((a),1),(b),(c),(d),(e),\ 845392566eSBarry Smith (f),(g),(h),(i),(j),(k)) 855392566eSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) SGETRS(_cptofcd((a),1),(b),(c),(d),(e),\ 865392566eSBarry Smith (f),(g),(h),(i)) 87*4eeb42bcSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) SGETRS(_cptofcd((a),1),(b),(c),(d),(e),\ 88*4eeb42bcSBarry Smith (f),(g),(h),(i)) 89*4eeb42bcSBarry Smith #define LAgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) SGEMM(_cptofcd((a),1), \ 90*4eeb42bcSBarry Smith _cptofcd((a),1),(c),(d),(e),\ 91*4eeb42bcSBarry Smith (f),(g),(h),(i),(j),(k),(l),(m)) 925392566eSBarry Smith #define LAtrmv_ STRMV 935392566eSBarry Smith #define LAtrsl_ STRSL 94227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS) 95c0534c1cSBarry Smith #define LAormqr_ DORMQR 96c0534c1cSBarry Smith #define LAtrtrs_ DTRTRS 97a1e12872SBarry Smith #define LApotrf_ DPOTRF 98a1e12872SBarry Smith #define LApotrs_ DPOTRS 99a1e12872SBarry Smith #define LAgemv_ DGEMV 100a1e12872SBarry Smith #define LAgetrs_ DGETRS 101a1e12872SBarry Smith #define LAtrmv_ DTRMV 102a1e12872SBarry Smith #define LAtrsl_ DTRSL 103*4eeb42bcSBarry Smith #define BLgemm_ DGEMM 104227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE) 105c0534c1cSBarry Smith #define LAormqr_ dormqr 106c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs 107a1e12872SBarry Smith #define LApotrf_ dpotrf 108a1e12872SBarry Smith #define LApotrs_ dpotrs 109a1e12872SBarry Smith #define LAgemv_ dgemv 110a1e12872SBarry Smith #define LAgetrs_ dgetrs 111a1e12872SBarry Smith #define LAtrmv_ dtrmv 112a1e12872SBarry Smith #define LAtrsl_ dtrsl 113*4eeb42bcSBarry Smith #define BLgemm_ dgemm 114a1e12872SBarry Smith #else 115c0534c1cSBarry Smith #define LAormqr_ dormqr_ 116c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs_ 117a1e12872SBarry Smith #define LApotrf_ dpotrf_ 118a1e12872SBarry Smith #define LApotrs_ dpotrs_ 119a1e12872SBarry Smith #define LAgemv_ dgemv_ 120a1e12872SBarry Smith #define LAgetrs_ dgetrs_ 121a1e12872SBarry Smith #define LAtrmv_ dtrmv_ 122a1e12872SBarry Smith #define LAtrsl_ dtrsl_ 123*4eeb42bcSBarry Smith #define BLgemm_ dgemm_ 124a1e12872SBarry Smith #endif 125a1e12872SBarry Smith 126a1e12872SBarry Smith #else 127a1e12872SBarry Smith 128*4eeb42bcSBarry Smith /* 129*4eeb42bcSBarry Smith Complex with no character string arguments 130*4eeb42bcSBarry Smith */ 131112a2221SBarry Smith #if defined(PARCH_t3d) 132c0534c1cSBarry Smith #define LAgeqrf_ CGEQRF 133a1e12872SBarry Smith #define BLdot_ CDOTC 134a1e12872SBarry Smith #define BLnrm2_ SCNRM2 135a1e12872SBarry Smith #define BLscal_ CSCAL 136a1e12872SBarry Smith #define BLcopy_ CCOPY 137a1e12872SBarry Smith #define BLswap_ CSWAP 138a1e12872SBarry Smith #define BLaxpy_ CAXPY 139a1e12872SBarry Smith #define BLasum_ SCASUM 1405392566eSBarry Smith #define LAgetrf_ CGETRF 1410a5e7eceSLois Curfman McInnes #define LAgetf2_ CGETRF 142227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS) 143c0534c1cSBarry Smith #define LAgeqrf_ ZGEQRF 144a1e12872SBarry Smith #define BLdot_ ZDOTC 145a1e12872SBarry Smith #define BLnrm2_ DZNRM2 146a1e12872SBarry Smith #define BLscal_ ZSCAL 147a1e12872SBarry Smith #define BLcopy_ ZCOPY 148a1e12872SBarry Smith #define BLswap_ ZSWAP 149a1e12872SBarry Smith #define BLaxpy_ ZAXPY 150a1e12872SBarry Smith #define BLasum_ DZASUM 151227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE) 152c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf 1535392566eSBarry Smith #define LAgetrf_ zgetrf 15408d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2 155a1e12872SBarry Smith #define BLdot_ zdotc 156a1e12872SBarry Smith #define BLnrm2_ dznrm2 157a1e12872SBarry Smith #define BLscal_ zscal 158a1e12872SBarry Smith #define BLcopy_ zcopy 159a1e12872SBarry Smith #define BLswap_ zswap 160a1e12872SBarry Smith #define BLaxpy_ zaxpy 161a1e12872SBarry Smith #define BLasum_ dzasum 162a1e12872SBarry Smith #else 163c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf_ 1645392566eSBarry Smith #define LAgetrf_ zgetrf_ 16508d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2_ 166a1e12872SBarry Smith #define BLdot_ zdotc_ 167a1e12872SBarry Smith #define BLnrm2_ dznrm2_ 168a1e12872SBarry Smith #define BLscal_ zscal_ 169a1e12872SBarry Smith #define BLcopy_ zcopy_ 170a1e12872SBarry Smith #define BLswap_ zswap_ 171a1e12872SBarry Smith #define BLaxpy_ zaxpy_ 172a1e12872SBarry Smith #define BLasum_ dzasum_ 173a1e12872SBarry Smith #endif 174a1e12872SBarry Smith 175*4eeb42bcSBarry Smith /* 176*4eeb42bcSBarry Smith Complex with character string arguments. 177*4eeb42bcSBarry Smith Who the F&%&^ was stupid enough to put character strings 178*4eeb42bcSBarry Smith into low-level computational kernels? It was a mistake! 179*4eeb42bcSBarry Smith */ 1805392566eSBarry Smith #if defined(PARCH_t3d) 181c0534c1cSBarry Smith #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) CTRTRS(_cptofcd((a),1),_cptofcd((b),1),\ 182c0534c1cSBarry Smith _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j)) 1835392566eSBarry Smith #define LApotrf_(a,b,c,d,e) CPOTRF(_cptofcd((a),1),(b),(c),(d),(e)) 1845392566eSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) CPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\ 1855392566eSBarry Smith (f),(g),(h)) 1865392566eSBarry Smith #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) CGEMV(_cptofcd((a),1),(b),(c),(d),(e),\ 1875392566eSBarry Smith (f),(g),(h),(i),(j),(k)) 1885392566eSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) CGETRS(_cptofcd((a),1),(b),(c),(d),(e),\ 1895392566eSBarry Smith (f),(g),(h),(i)) 190*4eeb42bcSBarry Smith #define LAgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) SGEMM(_cptofcd((a),1), \ 191*4eeb42bcSBarry Smith _cptofcd((a),1),(c),(d),(e),\ 192*4eeb42bcSBarry Smith (f),(g),(h),(i),(j),(k),(l),(m)) 1935392566eSBarry Smith #define LAtrmv_ CTRMV 1945392566eSBarry Smith #define LAtrsl_ CTRSL 195227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS) 196c0534c1cSBarry Smith #define LAtrtrs_ ZTRTRS 197a1e12872SBarry Smith #define LApotrf_ ZPOTRF 198a1e12872SBarry Smith #define LApotrs_ ZPOTRS 199a1e12872SBarry Smith #define LAgemv_ ZGEMV 200a1e12872SBarry Smith #define LAgetrf_ ZGETRF 20108d0dac7SLois Curfman McInnes #define LAgetf2_ ZGETF2 202a1e12872SBarry Smith #define LAgetrs_ ZGETRS 203a1e12872SBarry Smith #define LAtrmv_ ZTRMV 204a1e12872SBarry Smith #define LAtrsl_ ZTRSL 205227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE) 206c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs 207a1e12872SBarry Smith #define LApotrf_ zpotrf 208a1e12872SBarry Smith #define LApotrs_ zpotrs 209a1e12872SBarry Smith #define LAgemv_ zgemv 210a1e12872SBarry Smith #define LAgetrs_ zgetrs 211a1e12872SBarry Smith #define LAtrmv_ ztrmv 212a1e12872SBarry Smith #define LAtrsl_ ztrsl 213a1e12872SBarry Smith #else 214c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs_ 215a1e12872SBarry Smith #define LApotrf_ zpotrf_ 216a1e12872SBarry Smith #define LApotrs_ zpotrs_ 217a1e12872SBarry Smith #define LAgemv_ zgemv_ 218a1e12872SBarry Smith #define LAgetrs_ zgetrs_ 219a1e12872SBarry Smith #define LAtrmv_ ztrmv_ 220a1e12872SBarry Smith #define LAtrsl_ ztrsl_ 221a1e12872SBarry Smith #endif 222a1e12872SBarry Smith 223a1e12872SBarry Smith #endif 224a1e12872SBarry Smith 225a1e12872SBarry Smith #if defined(__cplusplus) 226a1e12872SBarry Smith extern "C" { 227a1e12872SBarry Smith #endif 228a1e12872SBarry Smith 229126c565eSBarry Smith /* note that BLdot cannot be used with COMPLEX because it cannot 230126c565eSBarry Smith handle returing a double complex!! 231126c565eSBarry Smith */ 232126c565eSBarry Smith extern double BLdot_(int*,Scalar*,int*,Scalar*,int*); 2331eb62cbbSBarry Smith extern double BLnrm2_(int*,Scalar*,int*),BLasum_(int*,Scalar*,int*); 2341eb62cbbSBarry Smith extern void BLscal_(int*,Scalar*,Scalar*,int*); 2351eb62cbbSBarry Smith extern void BLcopy_(int*,Scalar*,int*,Scalar*,int*); 2361eb62cbbSBarry Smith extern void BLswap_(int*,Scalar*,int*,Scalar*,int*); 2371eb62cbbSBarry Smith extern void BLaxpy_(int*,Scalar*,Scalar*,int*,Scalar*,int*); 2381eb62cbbSBarry Smith extern void LAgetrf_(int*,int*,Scalar*,int*,int*,int*); 239bae8960eSLois Curfman McInnes extern void LAgetf2_(int*,int*,Scalar*,int*,int*,int*); 240c0534c1cSBarry Smith extern void LAgeqrf_(int*,int*,Scalar*,int*,Scalar*,Scalar*,int*,int*); 2415392566eSBarry Smith 2425392566eSBarry Smith #if defined(PARCH_t3d) 243112a2221SBarry Smith 244112a2221SBarry Smith #if defined(PETSC_COMPLEX) 2455392566eSBarry Smith extern void CPOTRF(_fcd,int*,Scalar*,int*,int*); 2465392566eSBarry Smith extern void CGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 2475392566eSBarry Smith Scalar*,Scalar*,int*); 2485392566eSBarry Smith extern void CPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*); 2495392566eSBarry Smith extern void CGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 250*4eeb42bcSBarry Smith extern void CGEMM(_fcd,_fcd,int*,int*,int*,Scalar*,Scalar*,int*, 251*4eeb42bcSBarry Smith Scalar*,int*,Scalar*,Scalar*,int*); 2525392566eSBarry Smith #else 253112a2221SBarry Smith extern void SPOTRF(_fcd,int*,Scalar*,int*,int*); 254112a2221SBarry Smith extern void SGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 255112a2221SBarry Smith Scalar*,Scalar*,int*); 256112a2221SBarry Smith extern void SPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*); 257112a2221SBarry Smith extern void SGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 258*4eeb42bcSBarry Smith extern void SGEMM(_fcd,_fcd,int*,int*,int*,Scalar*,Scalar*,int*, 259*4eeb42bcSBarry Smith Scalar*,int*,Scalar*,Scalar*,int*); 260112a2221SBarry Smith #endif 261112a2221SBarry Smith 262112a2221SBarry Smith #else 263c0534c1cSBarry Smith extern void LAormqr_(char*,char*,int*,int*,int*,Scalar*,int*,Scalar*,Scalar*, 264c0534c1cSBarry Smith int*,Scalar*,int*,int*); 265c0534c1cSBarry Smith extern void LAtrtrs_(char*,char*,char*,int*,int*,Scalar*,int*,Scalar*,int*, 266c0534c1cSBarry Smith int*); 2671eb62cbbSBarry Smith extern void LApotrf_(char*,int*,Scalar*,int*,int*); 2681eb62cbbSBarry Smith extern void LAgemv_(char*,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 269a1e12872SBarry Smith Scalar*,Scalar*,int*); 2701eb62cbbSBarry Smith extern void LApotrs_(char*,int*,int*,Scalar*,int*,Scalar*,int*,int*); 2711eb62cbbSBarry Smith extern void LAgetrs_(char*,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 272*4eeb42bcSBarry Smith extern void BLgemm_(char *,char*,int*,int*,int*,Scalar*,Scalar*,int*, 273*4eeb42bcSBarry Smith Scalar*,int*,Scalar*,Scalar*,int*); 2745392566eSBarry Smith #endif 275a1e12872SBarry Smith 276a1e12872SBarry Smith #if defined(__cplusplus) 27702834360SBarry Smith } 278a1e12872SBarry Smith #endif 279a1e12872SBarry Smith 280a1e12872SBarry Smith #endif 281