1*227d817aSBarry Smith /* $Id: plapack.h,v 1.13 1995/10/12 23:22:46 curfman 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) 23*227d817aSBarry 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 34*227d817aSBarry 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 45*227d817aSBarry 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 835392566eSBarry Smith #elif defined(PARCH_cray) 84c0534c1cSBarry Smith #define LAormqr_ SORMQR 85c0534c1cSBarry Smith #define LAtrtrs_ STRTRS 86a1e12872SBarry Smith #define LApotrf_ SPOTRF 87a1e12872SBarry Smith #define LApotrs_ SPOTRS 88a1e12872SBarry Smith #define LAgemv_ SGEMV 89a1e12872SBarry Smith #define LAgetrs_ SGETRS 90a1e12872SBarry Smith #define LAgemv_ SGEMV 91a1e12872SBarry Smith #define LAtrmv_ STRMV 92a1e12872SBarry Smith #define LAtrsl_ STRSL 93*227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS) 94c0534c1cSBarry Smith #define LAormqr_ DORMQR 95c0534c1cSBarry Smith #define LAtrtrs_ DTRTRS 96a1e12872SBarry Smith #define LApotrf_ DPOTRF 97a1e12872SBarry Smith #define LApotrs_ DPOTRS 98a1e12872SBarry Smith #define LAgemv_ DGEMV 99a1e12872SBarry Smith #define LAgetrs_ DGETRS 100a1e12872SBarry Smith #define LAtrmv_ DTRMV 101a1e12872SBarry Smith #define LAtrsl_ DTRSL 102*227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE) 103c0534c1cSBarry Smith #define LAormqr_ dormqr 104c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs 105a1e12872SBarry Smith #define LApotrf_ dpotrf 106a1e12872SBarry Smith #define LApotrs_ dpotrs 107a1e12872SBarry Smith #define LAgemv_ dgemv 108a1e12872SBarry Smith #define LAgetrs_ dgetrs 109a1e12872SBarry Smith #define LAtrmv_ dtrmv 110a1e12872SBarry Smith #define LAtrsl_ dtrsl 111a1e12872SBarry Smith #else 112c0534c1cSBarry Smith #define LAormqr_ dormqr_ 113c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs_ 114a1e12872SBarry Smith #define LApotrf_ dpotrf_ 115a1e12872SBarry Smith #define LApotrs_ dpotrs_ 116a1e12872SBarry Smith #define LAgemv_ dgemv_ 117a1e12872SBarry Smith #define LAgetrs_ dgetrs_ 118a1e12872SBarry Smith #define LAtrmv_ dtrmv_ 119a1e12872SBarry Smith #define LAtrsl_ dtrsl_ 120a1e12872SBarry Smith #endif 121a1e12872SBarry Smith 122a1e12872SBarry Smith #else 123a1e12872SBarry Smith 1245392566eSBarry Smith #if defined(PARCH_cray) || defined(PARCH_t3d) 125c0534c1cSBarry Smith #define LAgeqrf_ CGEQRF 126a1e12872SBarry Smith #define BLdot_ CDOTC 127a1e12872SBarry Smith #define BLnrm2_ SCNRM2 128a1e12872SBarry Smith #define BLscal_ CSCAL 129a1e12872SBarry Smith #define BLcopy_ CCOPY 130a1e12872SBarry Smith #define BLswap_ CSWAP 131a1e12872SBarry Smith #define BLaxpy_ CAXPY 132a1e12872SBarry Smith #define BLasum_ SCASUM 1335392566eSBarry Smith #define LAgetrf_ CGETRF 1340a5e7eceSLois Curfman McInnes #define LAgetf2_ CGETRF 135*227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS) 136c0534c1cSBarry Smith #define LAgeqrf_ ZGEQRF 137a1e12872SBarry Smith #define BLdot_ ZDOTC 138a1e12872SBarry Smith #define BLnrm2_ DZNRM2 139a1e12872SBarry Smith #define BLscal_ ZSCAL 140a1e12872SBarry Smith #define BLcopy_ ZCOPY 141a1e12872SBarry Smith #define BLswap_ ZSWAP 142a1e12872SBarry Smith #define BLaxpy_ ZAXPY 143a1e12872SBarry Smith #define BLasum_ DZASUM 144*227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE) 145c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf 1465392566eSBarry Smith #define LAgetrf_ zgetrf 14708d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2 148a1e12872SBarry Smith #define BLdot_ zdotc 149a1e12872SBarry Smith #define BLnrm2_ dznrm2 150a1e12872SBarry Smith #define BLscal_ zscal 151a1e12872SBarry Smith #define BLcopy_ zcopy 152a1e12872SBarry Smith #define BLswap_ zswap 153a1e12872SBarry Smith #define BLaxpy_ zaxpy 154a1e12872SBarry Smith #define BLasum_ dzasum 155a1e12872SBarry Smith #else 156c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf_ 1575392566eSBarry Smith #define LAgetrf_ zgetrf_ 15808d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2_ 159a1e12872SBarry Smith #define BLdot_ zdotc_ 160a1e12872SBarry Smith #define BLnrm2_ dznrm2_ 161a1e12872SBarry Smith #define BLscal_ zscal_ 162a1e12872SBarry Smith #define BLcopy_ zcopy_ 163a1e12872SBarry Smith #define BLswap_ zswap_ 164a1e12872SBarry Smith #define BLaxpy_ zaxpy_ 165a1e12872SBarry Smith #define BLasum_ dzasum_ 166a1e12872SBarry Smith #endif 167a1e12872SBarry Smith 1685392566eSBarry Smith #if defined(PARCH_t3d) 169c0534c1cSBarry Smith #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) CTRTRS(_cptofcd((a),1),_cptofcd((b),1),\ 170c0534c1cSBarry Smith _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j)) 1715392566eSBarry Smith #define LApotrf_(a,b,c,d,e) CPOTRF(_cptofcd((a),1),(b),(c),(d),(e)) 1725392566eSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) CPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\ 1735392566eSBarry Smith (f),(g),(h)) 1745392566eSBarry Smith #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) CGEMV(_cptofcd((a),1),(b),(c),(d),(e),\ 1755392566eSBarry Smith (f),(g),(h),(i),(j),(k)) 1765392566eSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) CGETRS(_cptofcd((a),1),(b),(c),(d),(e),\ 1775392566eSBarry Smith (f),(g),(h),(i)) 1785392566eSBarry Smith #define LAtrmv_ CTRMV 1795392566eSBarry Smith #define LAtrsl_ CTRSL 1805392566eSBarry Smith #elif defined(PARCH_cray) 181c0534c1cSBarry Smith #define LAormqr_ CORMQR 182c0534c1cSBarry Smith #define LAtrtrs_ CTRTRS 183a1e12872SBarry Smith #define LApotrf_ CPOTRF 184a1e12872SBarry Smith #define LApotrs_ CPOTRS 185a1e12872SBarry Smith #define LAgetrs_ CGETRS 186a1e12872SBarry Smith #define LAgemv_ CGEMV 187a1e12872SBarry Smith #define LAtrmv_ CTRMV 188a1e12872SBarry Smith #define LAtrsl_ CTRSL 189*227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS) 190c0534c1cSBarry Smith #define LAtrtrs_ ZTRTRS 191a1e12872SBarry Smith #define LApotrf_ ZPOTRF 192a1e12872SBarry Smith #define LApotrs_ ZPOTRS 193a1e12872SBarry Smith #define LAgemv_ ZGEMV 194a1e12872SBarry Smith #define LAgetrf_ ZGETRF 19508d0dac7SLois Curfman McInnes #define LAgetf2_ ZGETF2 196a1e12872SBarry Smith #define LAgetrs_ ZGETRS 197a1e12872SBarry Smith #define LAtrmv_ ZTRMV 198a1e12872SBarry Smith #define LAtrsl_ ZTRSL 199*227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE) 200c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs 201a1e12872SBarry Smith #define LApotrf_ zpotrf 202a1e12872SBarry Smith #define LApotrs_ zpotrs 203a1e12872SBarry Smith #define LAgemv_ zgemv 204a1e12872SBarry Smith #define LAgetrs_ zgetrs 205a1e12872SBarry Smith #define LAtrmv_ ztrmv 206a1e12872SBarry Smith #define LAtrsl_ ztrsl 207a1e12872SBarry Smith #else 208c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs_ 209a1e12872SBarry Smith #define LApotrf_ zpotrf_ 210a1e12872SBarry Smith #define LApotrs_ zpotrs_ 211a1e12872SBarry Smith #define LAgemv_ zgemv_ 212a1e12872SBarry Smith #define LAgetrs_ zgetrs_ 213a1e12872SBarry Smith #define LAtrmv_ ztrmv_ 214a1e12872SBarry Smith #define LAtrsl_ ztrsl_ 215a1e12872SBarry Smith #endif 216a1e12872SBarry Smith 217a1e12872SBarry Smith #endif 218a1e12872SBarry Smith 219a1e12872SBarry Smith #if defined(__cplusplus) 220a1e12872SBarry Smith extern "C" { 221a1e12872SBarry Smith #endif 222a1e12872SBarry Smith 223126c565eSBarry Smith /* note that BLdot cannot be used with COMPLEX because it cannot 224126c565eSBarry Smith handle returing a double complex!! 225126c565eSBarry Smith */ 226126c565eSBarry Smith extern double BLdot_(int*,Scalar*,int*,Scalar*,int*); 2271eb62cbbSBarry Smith extern double BLnrm2_(int*,Scalar*,int*),BLasum_(int*,Scalar*,int*); 2281eb62cbbSBarry Smith extern void BLscal_(int*,Scalar*,Scalar*,int*); 2291eb62cbbSBarry Smith extern void BLcopy_(int*,Scalar*,int*,Scalar*,int*); 2301eb62cbbSBarry Smith extern void BLswap_(int*,Scalar*,int*,Scalar*,int*); 2311eb62cbbSBarry Smith extern void BLaxpy_(int*,Scalar*,Scalar*,int*,Scalar*,int*); 2321eb62cbbSBarry Smith extern void LAgetrf_(int*,int*,Scalar*,int*,int*,int*); 233bae8960eSLois Curfman McInnes extern void LAgetf2_(int*,int*,Scalar*,int*,int*,int*); 234c0534c1cSBarry Smith extern void LAgeqrf_(int*,int*,Scalar*,int*,Scalar*,Scalar*,int*,int*); 2355392566eSBarry Smith 2365392566eSBarry Smith #if defined(PARCH_t3d) 2375392566eSBarry Smith extern void CPOTRF(_fcd,int*,Scalar*,int*,int*); 2385392566eSBarry Smith extern void CGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 2395392566eSBarry Smith Scalar*,Scalar*,int*); 2405392566eSBarry Smith extern void CPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*); 2415392566eSBarry Smith extern void CGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 2425392566eSBarry Smith #else 243c0534c1cSBarry Smith extern void LAormqr_(char*,char*,int*,int*,int*,Scalar*,int*,Scalar*,Scalar*, 244c0534c1cSBarry Smith int*,Scalar*,int*,int*); 245c0534c1cSBarry Smith extern void LAtrtrs_(char*,char*,char*,int*,int*,Scalar*,int*,Scalar*,int*, 246c0534c1cSBarry Smith int*); 2471eb62cbbSBarry Smith extern void LApotrf_(char*,int*,Scalar*,int*,int*); 2481eb62cbbSBarry Smith extern void LAgemv_(char*,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 249a1e12872SBarry Smith Scalar*,Scalar*,int*); 2501eb62cbbSBarry Smith extern void LApotrs_(char*,int*,int*,Scalar*,int*,Scalar*,int*,int*); 2511eb62cbbSBarry Smith extern void LAgetrs_(char*,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 2525392566eSBarry Smith #endif 253a1e12872SBarry Smith 254a1e12872SBarry Smith #if defined(__cplusplus) 25502834360SBarry Smith } 256a1e12872SBarry Smith #endif 257a1e12872SBarry Smith 258a1e12872SBarry Smith #endif 259