1 /* $Id: plapack.h,v 1.15 1996/02/08 18:28:54 bsmith Exp bsmith $ */ 2 /* 3 This file provides some name space protection from LAPACK and BLAS and 4 allows the appropriate single or double precision version to be used. 5 This file also deals with different Fortran 77 naming conventions on machines. 6 7 Another problem is charactor strings are represented differently on 8 on some machines in C and Fortran 77. This problem comes up on the 9 Cray T3D. Yet another reason to hate ... 10 11 */ 12 #if !defined(_PLAPACK_H) 13 #define _PLAPACK_H 14 15 #include "petsc.h" 16 17 #if defined(PARCH_t3d) 18 #include "fortran.h" 19 #endif 20 21 #if !defined(PETSC_COMPLEX) 22 23 /* 24 These are real case with no character string arguments 25 */ 26 #if defined(PARCH_t3d) 27 #define LAgeqrf_ SGEQRF 28 #define LAgetrf_ SGETRF 29 #define LAgetf2_ SGETRF 30 #define BLdot_ SDOT 31 #define BLnrm2_ SNRM2 32 #define BLscal_ SSCAL 33 #define BLcopy_ SCOPY 34 #define BLswap_ SSWAP 35 #define BLaxpy_ SAXPY 36 #define BLasum_ SASUM 37 #elif defined(HAVE_FORTRAN_CAPS) 38 #define LAgeqrf_ DGEQRF 39 #define LAgetrf_ DGETRF 40 #define LAgetf2_ DGETF2 41 #define BLdot_ DDOT 42 #define BLnrm2_ DNRM2 43 #define BLscal_ DSCAL 44 #define BLcopy_ DCOPY 45 #define BLswap_ DSWAP 46 #define BLaxpy_ DAXPY 47 #define BLasum_ DASUM 48 #elif !defined(HAVE_FORTRAN_UNDERSCORE) 49 #define LAgeqrf_ dgeqrf 50 #define LAgetrf_ dgetrf 51 #define LAgetf2_ dgetf2 52 #define BLdot_ ddot 53 #define BLnrm2_ dnrm2 54 #define BLscal_ dscal 55 #define BLcopy_ dcopy 56 #define BLswap_ dswap 57 #define BLaxpy_ daxpy 58 #define BLasum_ dasum 59 #else 60 #define LAgeqrf_ dgeqrf_ 61 #define LAgetrf_ dgetrf_ 62 #define LAgetf2_ dgetf2_ 63 #define BLdot_ ddot_ 64 #define BLnrm2_ dnrm2_ 65 #define BLscal_ dscal_ 66 #define BLcopy_ dcopy_ 67 #define BLswap_ dswap_ 68 #define BLaxpy_ daxpy_ 69 #define BLasum_ dasum_ 70 #endif 71 72 /* 73 Real with character string arguments. 74 */ 75 #if defined(PARCH_t3d) 76 #define LAormqr_(a,b,c,d,e,f,g,h,i,j,k,l,m) SORMQR(_cptofcd((a),1),\ 77 _cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m)) 78 #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) STRTRS(_cptofcd((a),1),_cptofcd((b),1),\ 79 _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j)) 80 #define LApotrf_(a,b,c,d,e) SPOTRF(_cptofcd((a),1),(b),(c),(d),(e)) 81 #define LApotrs_(a,b,c,d,e,f,g,h) SPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\ 82 (f),(g),(h)) 83 #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) SGEMV(_cptofcd((a),1),(b),(c),(d),(e),\ 84 (f),(g),(h),(i),(j),(k)) 85 #define LAgetrs_(a,b,c,d,e,f,g,h,i) SGETRS(_cptofcd((a),1),(b),(c),(d),(e),\ 86 (f),(g),(h),(i)) 87 #define LAgetrs_(a,b,c,d,e,f,g,h,i) SGETRS(_cptofcd((a),1),(b),(c),(d),(e),\ 88 (f),(g),(h),(i)) 89 #define LAgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) SGEMM(_cptofcd((a),1), \ 90 _cptofcd((a),1),(c),(d),(e),\ 91 (f),(g),(h),(i),(j),(k),(l),(m)) 92 #define LAtrmv_ STRMV 93 #define LAtrsl_ STRSL 94 #elif defined(HAVE_FORTRAN_CAPS) 95 #define LAormqr_ DORMQR 96 #define LAtrtrs_ DTRTRS 97 #define LApotrf_ DPOTRF 98 #define LApotrs_ DPOTRS 99 #define LAgemv_ DGEMV 100 #define LAgetrs_ DGETRS 101 #define LAtrmv_ DTRMV 102 #define LAtrsl_ DTRSL 103 #define BLgemm_ DGEMM 104 #elif !defined(HAVE_FORTRAN_UNDERSCORE) 105 #define LAormqr_ dormqr 106 #define LAtrtrs_ dtrtrs 107 #define LApotrf_ dpotrf 108 #define LApotrs_ dpotrs 109 #define LAgemv_ dgemv 110 #define LAgetrs_ dgetrs 111 #define LAtrmv_ dtrmv 112 #define LAtrsl_ dtrsl 113 #define BLgemm_ dgemm 114 #else 115 #define LAormqr_ dormqr_ 116 #define LAtrtrs_ dtrtrs_ 117 #define LApotrf_ dpotrf_ 118 #define LApotrs_ dpotrs_ 119 #define LAgemv_ dgemv_ 120 #define LAgetrs_ dgetrs_ 121 #define LAtrmv_ dtrmv_ 122 #define LAtrsl_ dtrsl_ 123 #define BLgemm_ dgemm_ 124 #endif 125 126 #else 127 128 /* 129 Complex with no character string arguments 130 */ 131 #if defined(PARCH_t3d) 132 #define LAgeqrf_ CGEQRF 133 #define BLdot_ CDOTC 134 #define BLnrm2_ SCNRM2 135 #define BLscal_ CSCAL 136 #define BLcopy_ CCOPY 137 #define BLswap_ CSWAP 138 #define BLaxpy_ CAXPY 139 #define BLasum_ SCASUM 140 #define LAgetrf_ CGETRF 141 #define LAgetf2_ CGETRF 142 #elif defined(HAVE_FORTRAN_CAPS) 143 #define LAgeqrf_ ZGEQRF 144 #define BLdot_ ZDOTC 145 #define BLnrm2_ DZNRM2 146 #define BLscal_ ZSCAL 147 #define BLcopy_ ZCOPY 148 #define BLswap_ ZSWAP 149 #define BLaxpy_ ZAXPY 150 #define BLasum_ DZASUM 151 #elif !defined(HAVE_FORTRAN_UNDERSCORE) 152 #define LAgeqrf_ zgeqrf 153 #define LAgetrf_ zgetrf 154 #define LAgetf2_ zgetf2 155 #define BLdot_ zdotc 156 #define BLnrm2_ dznrm2 157 #define BLscal_ zscal 158 #define BLcopy_ zcopy 159 #define BLswap_ zswap 160 #define BLaxpy_ zaxpy 161 #define BLasum_ dzasum 162 #else 163 #define LAgeqrf_ zgeqrf_ 164 #define LAgetrf_ zgetrf_ 165 #define LAgetf2_ zgetf2_ 166 #define BLdot_ zdotc_ 167 #define BLnrm2_ dznrm2_ 168 #define BLscal_ zscal_ 169 #define BLcopy_ zcopy_ 170 #define BLswap_ zswap_ 171 #define BLaxpy_ zaxpy_ 172 #define BLasum_ dzasum_ 173 #endif 174 175 /* 176 Complex with character string arguments. 177 Who the F&%&^ was stupid enough to put character strings 178 into low-level computational kernels? It was a mistake! 179 */ 180 #if defined(PARCH_t3d) 181 #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) CTRTRS(_cptofcd((a),1),_cptofcd((b),1),\ 182 _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j)) 183 #define LApotrf_(a,b,c,d,e) CPOTRF(_cptofcd((a),1),(b),(c),(d),(e)) 184 #define LApotrs_(a,b,c,d,e,f,g,h) CPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\ 185 (f),(g),(h)) 186 #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) CGEMV(_cptofcd((a),1),(b),(c),(d),(e),\ 187 (f),(g),(h),(i),(j),(k)) 188 #define LAgetrs_(a,b,c,d,e,f,g,h,i) CGETRS(_cptofcd((a),1),(b),(c),(d),(e),\ 189 (f),(g),(h),(i)) 190 #define LAgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) SGEMM(_cptofcd((a),1), \ 191 _cptofcd((a),1),(c),(d),(e),\ 192 (f),(g),(h),(i),(j),(k),(l),(m)) 193 #define LAtrmv_ CTRMV 194 #define LAtrsl_ CTRSL 195 #elif defined(HAVE_FORTRAN_CAPS) 196 #define LAtrtrs_ ZTRTRS 197 #define LApotrf_ ZPOTRF 198 #define LApotrs_ ZPOTRS 199 #define LAgemv_ ZGEMV 200 #define LAgetrf_ ZGETRF 201 #define LAgetf2_ ZGETF2 202 #define LAgetrs_ ZGETRS 203 #define LAtrmv_ ZTRMV 204 #define LAtrsl_ ZTRSL 205 #elif !defined(HAVE_FORTRAN_UNDERSCORE) 206 #define LAtrtrs_ ztrtrs 207 #define LApotrf_ zpotrf 208 #define LApotrs_ zpotrs 209 #define LAgemv_ zgemv 210 #define LAgetrs_ zgetrs 211 #define LAtrmv_ ztrmv 212 #define LAtrsl_ ztrsl 213 #else 214 #define LAtrtrs_ ztrtrs_ 215 #define LApotrf_ zpotrf_ 216 #define LApotrs_ zpotrs_ 217 #define LAgemv_ zgemv_ 218 #define LAgetrs_ zgetrs_ 219 #define LAtrmv_ ztrmv_ 220 #define LAtrsl_ ztrsl_ 221 #endif 222 223 #endif 224 225 #if defined(__cplusplus) 226 extern "C" { 227 #endif 228 229 /* note that BLdot cannot be used with COMPLEX because it cannot 230 handle returing a double complex!! 231 */ 232 extern double BLdot_(int*,Scalar*,int*,Scalar*,int*); 233 extern double BLnrm2_(int*,Scalar*,int*),BLasum_(int*,Scalar*,int*); 234 extern void BLscal_(int*,Scalar*,Scalar*,int*); 235 extern void BLcopy_(int*,Scalar*,int*,Scalar*,int*); 236 extern void BLswap_(int*,Scalar*,int*,Scalar*,int*); 237 extern void BLaxpy_(int*,Scalar*,Scalar*,int*,Scalar*,int*); 238 extern void LAgetrf_(int*,int*,Scalar*,int*,int*,int*); 239 extern void LAgetf2_(int*,int*,Scalar*,int*,int*,int*); 240 extern void LAgeqrf_(int*,int*,Scalar*,int*,Scalar*,Scalar*,int*,int*); 241 242 #if defined(PARCH_t3d) 243 244 #if defined(PETSC_COMPLEX) 245 extern void CPOTRF(_fcd,int*,Scalar*,int*,int*); 246 extern void CGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 247 Scalar*,Scalar*,int*); 248 extern void CPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*); 249 extern void CGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 250 extern void CGEMM(_fcd,_fcd,int*,int*,int*,Scalar*,Scalar*,int*, 251 Scalar*,int*,Scalar*,Scalar*,int*); 252 #else 253 extern void SPOTRF(_fcd,int*,Scalar*,int*,int*); 254 extern void SGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 255 Scalar*,Scalar*,int*); 256 extern void SPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*); 257 extern void SGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 258 extern void SGEMM(_fcd,_fcd,int*,int*,int*,Scalar*,Scalar*,int*, 259 Scalar*,int*,Scalar*,Scalar*,int*); 260 #endif 261 262 #else 263 extern void LAormqr_(char*,char*,int*,int*,int*,Scalar*,int*,Scalar*,Scalar*, 264 int*,Scalar*,int*,int*); 265 extern void LAtrtrs_(char*,char*,char*,int*,int*,Scalar*,int*,Scalar*,int*, 266 int*); 267 extern void LApotrf_(char*,int*,Scalar*,int*,int*); 268 extern void LAgemv_(char*,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 269 Scalar*,Scalar*,int*); 270 extern void LApotrs_(char*,int*,int*,Scalar*,int*,Scalar*,int*,int*); 271 extern void LAgetrs_(char*,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 272 extern void BLgemm_(char *,char*,int*,int*,int*,Scalar*,Scalar*,int*, 273 Scalar*,int*,Scalar*,Scalar*,int*); 274 #endif 275 276 #if defined(__cplusplus) 277 } 278 #endif 279 280 #endif 281