1*af6b99e9SBarry Smith /* $Id: plapack.h,v 1.17 1996/02/27 17:53:25 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) 224eeb42bcSBarry Smith 234eeb42bcSBarry Smith /* 244eeb42bcSBarry Smith These are real case with no character string arguments 254eeb42bcSBarry 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 724eeb42bcSBarry Smith /* 734eeb42bcSBarry Smith Real with character string arguments. 744eeb42bcSBarry 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)) 874eeb42bcSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) SGETRS(_cptofcd((a),1),(b),(c),(d),(e),\ 884eeb42bcSBarry Smith (f),(g),(h),(i)) 894eeb42bcSBarry Smith #define LAgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) SGEMM(_cptofcd((a),1), \ 904eeb42bcSBarry Smith _cptofcd((a),1),(c),(d),(e),\ 914eeb42bcSBarry Smith (f),(g),(h),(i),(j),(k),(l),(m)) 92*af6b99e9SBarry Smith #define LAgesvd_(a,b,c,d,e,f,g,h,i,j,k,l,m) SGESVD(_cptofcd((a),1), \ 93*af6b99e9SBarry Smith _cptofcd((a),1),(c),(d),(e),\ 94*af6b99e9SBarry Smith (f),(g),(h),(i),(j),(k),(l),(m)) 955392566eSBarry Smith #define LAtrmv_ STRMV 965392566eSBarry Smith #define LAtrsl_ STRSL 97227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS) 98c0534c1cSBarry Smith #define LAormqr_ DORMQR 99c0534c1cSBarry Smith #define LAtrtrs_ DTRTRS 100a1e12872SBarry Smith #define LApotrf_ DPOTRF 101a1e12872SBarry Smith #define LApotrs_ DPOTRS 102a1e12872SBarry Smith #define LAgemv_ DGEMV 103a1e12872SBarry Smith #define LAgetrs_ DGETRS 104a1e12872SBarry Smith #define LAtrmv_ DTRMV 105a1e12872SBarry Smith #define LAtrsl_ DTRSL 106*af6b99e9SBarry Smith #define LAgesvd_ DGESVD 1074eeb42bcSBarry Smith #define BLgemm_ DGEMM 108227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE) 109c0534c1cSBarry Smith #define LAormqr_ dormqr 110c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs 111a1e12872SBarry Smith #define LApotrf_ dpotrf 112a1e12872SBarry Smith #define LApotrs_ dpotrs 113a1e12872SBarry Smith #define LAgemv_ dgemv 114a1e12872SBarry Smith #define LAgetrs_ dgetrs 115a1e12872SBarry Smith #define LAtrmv_ dtrmv 116a1e12872SBarry Smith #define LAtrsl_ dtrsl 1174eeb42bcSBarry Smith #define BLgemm_ dgemm 118*af6b99e9SBarry Smith #define LAgesvd_ dgesvd 119a1e12872SBarry Smith #else 120c0534c1cSBarry Smith #define LAormqr_ dormqr_ 121c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs_ 122a1e12872SBarry Smith #define LApotrf_ dpotrf_ 123a1e12872SBarry Smith #define LApotrs_ dpotrs_ 124a1e12872SBarry Smith #define LAgemv_ dgemv_ 125a1e12872SBarry Smith #define LAgetrs_ dgetrs_ 126a1e12872SBarry Smith #define LAtrmv_ dtrmv_ 127a1e12872SBarry Smith #define LAtrsl_ dtrsl_ 1284eeb42bcSBarry Smith #define BLgemm_ dgemm_ 129*af6b99e9SBarry Smith #define LAgesvd_ dgesvd_ 130a1e12872SBarry Smith #endif 131a1e12872SBarry Smith 132a1e12872SBarry Smith #else 133a1e12872SBarry Smith 1344eeb42bcSBarry Smith /* 1354eeb42bcSBarry Smith Complex with no character string arguments 1364eeb42bcSBarry Smith */ 137112a2221SBarry Smith #if defined(PARCH_t3d) 138c0534c1cSBarry Smith #define LAgeqrf_ CGEQRF 139a1e12872SBarry Smith #define BLdot_ CDOTC 140a1e12872SBarry Smith #define BLnrm2_ SCNRM2 141a1e12872SBarry Smith #define BLscal_ CSCAL 142a1e12872SBarry Smith #define BLcopy_ CCOPY 143a1e12872SBarry Smith #define BLswap_ CSWAP 144a1e12872SBarry Smith #define BLaxpy_ CAXPY 145a1e12872SBarry Smith #define BLasum_ SCASUM 1465392566eSBarry Smith #define LAgetrf_ CGETRF 1470a5e7eceSLois Curfman McInnes #define LAgetf2_ CGETRF 148227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS) 149c0534c1cSBarry Smith #define LAgeqrf_ ZGEQRF 150a1e12872SBarry Smith #define BLdot_ ZDOTC 151a1e12872SBarry Smith #define BLnrm2_ DZNRM2 152a1e12872SBarry Smith #define BLscal_ ZSCAL 153a1e12872SBarry Smith #define BLcopy_ ZCOPY 154a1e12872SBarry Smith #define BLswap_ ZSWAP 155a1e12872SBarry Smith #define BLaxpy_ ZAXPY 156a1e12872SBarry Smith #define BLasum_ DZASUM 157227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE) 158c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf 1595392566eSBarry Smith #define LAgetrf_ zgetrf 16008d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2 161a1e12872SBarry Smith #define BLdot_ zdotc 162a1e12872SBarry Smith #define BLnrm2_ dznrm2 163a1e12872SBarry Smith #define BLscal_ zscal 164a1e12872SBarry Smith #define BLcopy_ zcopy 165a1e12872SBarry Smith #define BLswap_ zswap 166a1e12872SBarry Smith #define BLaxpy_ zaxpy 167a1e12872SBarry Smith #define BLasum_ dzasum 168a1e12872SBarry Smith #else 169c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf_ 1705392566eSBarry Smith #define LAgetrf_ zgetrf_ 17108d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2_ 172a1e12872SBarry Smith #define BLdot_ zdotc_ 173a1e12872SBarry Smith #define BLnrm2_ dznrm2_ 174a1e12872SBarry Smith #define BLscal_ zscal_ 175a1e12872SBarry Smith #define BLcopy_ zcopy_ 176a1e12872SBarry Smith #define BLswap_ zswap_ 177a1e12872SBarry Smith #define BLaxpy_ zaxpy_ 178a1e12872SBarry Smith #define BLasum_ dzasum_ 179a1e12872SBarry Smith #endif 180a1e12872SBarry Smith 1814eeb42bcSBarry Smith /* 1824eeb42bcSBarry Smith Complex with character string arguments. 1834eeb42bcSBarry Smith Who the F&%&^ was stupid enough to put character strings 1844eeb42bcSBarry Smith into low-level computational kernels? It was a mistake! 1854eeb42bcSBarry Smith */ 1865392566eSBarry Smith #if defined(PARCH_t3d) 187c0534c1cSBarry Smith #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) CTRTRS(_cptofcd((a),1),_cptofcd((b),1),\ 188c0534c1cSBarry Smith _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j)) 1895392566eSBarry Smith #define LApotrf_(a,b,c,d,e) CPOTRF(_cptofcd((a),1),(b),(c),(d),(e)) 1905392566eSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) CPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\ 1915392566eSBarry Smith (f),(g),(h)) 1925392566eSBarry Smith #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) CGEMV(_cptofcd((a),1),(b),(c),(d),(e),\ 1935392566eSBarry Smith (f),(g),(h),(i),(j),(k)) 1945392566eSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) CGETRS(_cptofcd((a),1),(b),(c),(d),(e),\ 1955392566eSBarry Smith (f),(g),(h),(i)) 1964eeb42bcSBarry Smith #define LAgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) SGEMM(_cptofcd((a),1), \ 1974eeb42bcSBarry Smith _cptofcd((a),1),(c),(d),(e),\ 1984eeb42bcSBarry Smith (f),(g),(h),(i),(j),(k),(l),(m)) 1995392566eSBarry Smith #define LAtrmv_ CTRMV 2005392566eSBarry Smith #define LAtrsl_ CTRSL 201227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS) 202c0534c1cSBarry Smith #define LAtrtrs_ ZTRTRS 203a1e12872SBarry Smith #define LApotrf_ ZPOTRF 204a1e12872SBarry Smith #define LApotrs_ ZPOTRS 205a1e12872SBarry Smith #define LAgemv_ ZGEMV 206a1e12872SBarry Smith #define LAgetrf_ ZGETRF 20708d0dac7SLois Curfman McInnes #define LAgetf2_ ZGETF2 208a1e12872SBarry Smith #define LAgetrs_ ZGETRS 209a1e12872SBarry Smith #define LAtrmv_ ZTRMV 210a1e12872SBarry Smith #define LAtrsl_ ZTRSL 2115a778de9SBarry Smith #define BLgemm_ ZGEMM 212227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE) 213c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs 214a1e12872SBarry Smith #define LApotrf_ zpotrf 215a1e12872SBarry Smith #define LApotrs_ zpotrs 216a1e12872SBarry Smith #define LAgemv_ zgemv 217a1e12872SBarry Smith #define LAgetrs_ zgetrs 218a1e12872SBarry Smith #define LAtrmv_ ztrmv 219a1e12872SBarry Smith #define LAtrsl_ ztrsl 2205a778de9SBarry Smith #define BLgemm_ zgemm 221a1e12872SBarry Smith #else 222c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs_ 223a1e12872SBarry Smith #define LApotrf_ zpotrf_ 224a1e12872SBarry Smith #define LApotrs_ zpotrs_ 225a1e12872SBarry Smith #define LAgemv_ zgemv_ 226a1e12872SBarry Smith #define LAgetrs_ zgetrs_ 227a1e12872SBarry Smith #define LAtrmv_ ztrmv_ 228a1e12872SBarry Smith #define LAtrsl_ ztrsl_ 2295a778de9SBarry Smith #define BLgemm_ zgemm_ 230a1e12872SBarry Smith #endif 231a1e12872SBarry Smith 232a1e12872SBarry Smith #endif 233a1e12872SBarry Smith 234a1e12872SBarry Smith #if defined(__cplusplus) 235a1e12872SBarry Smith extern "C" { 236a1e12872SBarry Smith #endif 237a1e12872SBarry Smith 238126c565eSBarry Smith /* note that BLdot cannot be used with COMPLEX because it cannot 239126c565eSBarry Smith handle returing a double complex!! 240126c565eSBarry Smith */ 241126c565eSBarry Smith extern double BLdot_(int*,Scalar*,int*,Scalar*,int*); 2421eb62cbbSBarry Smith extern double BLnrm2_(int*,Scalar*,int*),BLasum_(int*,Scalar*,int*); 2431eb62cbbSBarry Smith extern void BLscal_(int*,Scalar*,Scalar*,int*); 2441eb62cbbSBarry Smith extern void BLcopy_(int*,Scalar*,int*,Scalar*,int*); 2451eb62cbbSBarry Smith extern void BLswap_(int*,Scalar*,int*,Scalar*,int*); 2461eb62cbbSBarry Smith extern void BLaxpy_(int*,Scalar*,Scalar*,int*,Scalar*,int*); 2471eb62cbbSBarry Smith extern void LAgetrf_(int*,int*,Scalar*,int*,int*,int*); 248bae8960eSLois Curfman McInnes extern void LAgetf2_(int*,int*,Scalar*,int*,int*,int*); 249c0534c1cSBarry Smith extern void LAgeqrf_(int*,int*,Scalar*,int*,Scalar*,Scalar*,int*,int*); 2505392566eSBarry Smith 2515392566eSBarry Smith #if defined(PARCH_t3d) 252112a2221SBarry Smith 253112a2221SBarry Smith #if defined(PETSC_COMPLEX) 2545392566eSBarry Smith extern void CPOTRF(_fcd,int*,Scalar*,int*,int*); 2555392566eSBarry Smith extern void CGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 2565392566eSBarry Smith Scalar*,Scalar*,int*); 2575392566eSBarry Smith extern void CPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*); 2585392566eSBarry Smith extern void CGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 2594eeb42bcSBarry Smith extern void CGEMM(_fcd,_fcd,int*,int*,int*,Scalar*,Scalar*,int*, 2604eeb42bcSBarry Smith Scalar*,int*,Scalar*,Scalar*,int*); 2615392566eSBarry Smith #else 262112a2221SBarry Smith extern void SPOTRF(_fcd,int*,Scalar*,int*,int*); 263112a2221SBarry Smith extern void SGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 264112a2221SBarry Smith Scalar*,Scalar*,int*); 265112a2221SBarry Smith extern void SPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*); 266112a2221SBarry Smith extern void SGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 2674eeb42bcSBarry Smith extern void SGEMM(_fcd,_fcd,int*,int*,int*,Scalar*,Scalar*,int*, 2684eeb42bcSBarry Smith Scalar*,int*,Scalar*,Scalar*,int*); 269*af6b99e9SBarry Smith extern void SGESVD(_fcd,_fcd,int *,int*, Scalar *,int*,Scalar*,Scalar*, 270*af6b99e9SBarry Smith int*,Scalar*,int*,Scalar*,int*,int*); 271112a2221SBarry Smith #endif 272112a2221SBarry Smith 273112a2221SBarry Smith #else 274c0534c1cSBarry Smith extern void LAormqr_(char*,char*,int*,int*,int*,Scalar*,int*,Scalar*,Scalar*, 275c0534c1cSBarry Smith int*,Scalar*,int*,int*); 276c0534c1cSBarry Smith extern void LAtrtrs_(char*,char*,char*,int*,int*,Scalar*,int*,Scalar*,int*, 277c0534c1cSBarry Smith int*); 2781eb62cbbSBarry Smith extern void LApotrf_(char*,int*,Scalar*,int*,int*); 2791eb62cbbSBarry Smith extern void LAgemv_(char*,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 280a1e12872SBarry Smith Scalar*,Scalar*,int*); 2811eb62cbbSBarry Smith extern void LApotrs_(char*,int*,int*,Scalar*,int*,Scalar*,int*,int*); 2821eb62cbbSBarry Smith extern void LAgetrs_(char*,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 2834eeb42bcSBarry Smith extern void BLgemm_(char *,char*,int*,int*,int*,Scalar*,Scalar*,int*, 2844eeb42bcSBarry Smith Scalar*,int*,Scalar*,Scalar*,int*); 285*af6b99e9SBarry Smith extern void LAgesvd_(char *,char *,int *,int*, Scalar *,int*,Scalar*,Scalar*, 286*af6b99e9SBarry Smith int*,Scalar*,int*,Scalar*,int*,int*); 2875392566eSBarry Smith #endif 288a1e12872SBarry Smith 289a1e12872SBarry Smith #if defined(__cplusplus) 29002834360SBarry Smith } 291a1e12872SBarry Smith #endif 292a1e12872SBarry Smith 293a1e12872SBarry Smith #endif 2945a778de9SBarry Smith 2955a778de9SBarry Smith 2965a778de9SBarry Smith 297