1 /* $Id: plapack.h,v 1.26 1997/04/03 22:15:28 balay Exp balay $ */ 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/T3E. 10 11 */ 12 #if !defined(_PLAPACK_H) 13 #define _PLAPACK_H 14 15 #include "petsc.h" 16 17 /* 18 This include file on the Cray T3D/T3E defines the interface between 19 Fortran and C representations of charactor strings. 20 */ 21 #if defined(USES_CPTOFCD) 22 #include "fortran.h" 23 #endif 24 25 #if !defined(PETSC_COMPLEX) 26 27 /* 28 These are real case with no character string arguments 29 */ 30 31 #if defined(USES_FORTRAN_SINGLE) 32 /* 33 For these machines we must call the single precision Fortran version 34 */ 35 #define DGEQRF SGEQRF 36 #define DGETRF SGETRF 37 #define DDOT SDOT 38 #define DNRM2 SNRM2 39 #define DSCAL SSCAL 40 #define DCOPY SCOPY 41 #define DSWAP SSWAP 42 #define DAXPY SAXPY 43 #define DASUM SASUM 44 #define DSORMQR SORMQR 45 #define DTRTRS STRTRS 46 #define DPOTRF SPOTRF 47 #define DPOTRS SPOTRS 48 #define DGEMV SGEMV 49 #define DGETRS SGETRS 50 #define DGETRS SGETRS 51 #define DGEMM SGEMM 52 #define DGESVD SGESVD 53 #define DGEEV SGEEV 54 #define DTRMV STRMV 55 #define DTRSL STRSL 56 #endif 57 58 #if defined(HAVE_FORTRAN_CAPS) 59 #define LAgeqrf_ DGEQRF 60 #define LAgetrf_ DGETRF 61 #define LAgetf2_ DGETF2 62 #define BLdot_ DDOT 63 #define BLnrm2_ DNRM2 64 #define BLscal_ DSCAL 65 #define BLcopy_ DCOPY 66 #define BLswap_ DSWAP 67 #define BLaxpy_ DAXPY 68 #define BLasum_ DASUM 69 #elif !defined(HAVE_FORTRAN_UNDERSCORE) 70 #define LAgeqrf_ dgeqrf 71 #define LAgetrf_ dgetrf 72 #define LAgetf2_ dgetf2 73 #define BLdot_ ddot 74 #define BLnrm2_ dnrm2 75 #define BLscal_ dscal 76 #define BLcopy_ dcopy 77 #define BLswap_ dswap 78 #define BLaxpy_ daxpy 79 #define BLasum_ dasum 80 #else 81 #define LAgeqrf_ dgeqrf_ 82 #define LAgetrf_ dgetrf_ 83 #define LAgetf2_ dgetf2_ 84 #define BLdot_ ddot_ 85 #define BLnrm2_ dnrm2_ 86 #define BLscal_ dscal_ 87 #define BLcopy_ dcopy_ 88 #define BLswap_ dswap_ 89 #define BLaxpy_ daxpy_ 90 #define BLasum_ dasum_ 91 #endif 92 93 /* 94 Real with character string arguments. 95 */ 96 #if defined(USES_CPTOFCD) 97 /* 98 Note that this assumes that machines which use cptofcd() use 99 the HAVE_FORTRAN_CAPS option. This is true on the Cray T3D/T3E. 100 */ 101 #define LAormqr_(a,b,c,d,e,f,g,h,i,j,k,l,m) DORMQR(_cptofcd((a),1),\ 102 _cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m)) 103 #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) DTRTRS(_cptofcd((a),1),_cptofcd((b),1),\ 104 _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j)) 105 #define LApotrf_(a,b,c,d,e) DPOTRF(_cptofcd((a),1),(b),(c),(d),(e)) 106 #define LApotrs_(a,b,c,d,e,f,g,h) DPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\ 107 (f),(g),(h)) 108 #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) DGEMV(_cptofcd((a),1),(b),(c),(d),(e),\ 109 (f),(g),(h),(i),(j),(k)) 110 #define LAgetrs_(a,b,c,d,e,f,g,h,i) DGETRS(_cptofcd((a),1),(b),(c),(d),(e),\ 111 (f),(g),(h),(i)) 112 #define LAgetrs_(a,b,c,d,e,f,g,h,i) DGETRS(_cptofcd((a),1),(b),(c),(d),(e),\ 113 (f),(g),(h),(i)) 114 #define BLgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) DGEMM(_cptofcd((a),1), \ 115 _cptofcd((a),1),(c),(d),(e),\ 116 (f),(g),(h),(i),(j),(k),(l),(m)) 117 #define LAgesvd_(a,b,c,d,e,f,g,h,i,j,k,l,m,n) DGESVD(_cptofcd((a),1), \ 118 _cptofcd((a),1),(c),(d),(e),\ 119 (f),(g),(h),(i),(j),(k),(l),(m),(n)) 120 #define LAgeev_(a,b,c,d,e,f,g,h,i,j,k,l,m,n) DGEEV(_cptofcd((a),1), \ 121 _cptofcd((a),1),(c),(d),(e),\ 122 (f),(g),(h),(i),(j),(k),(l),(m),(n)) 123 #define LAtrmv_ DTRMV 124 #define LAtrsl_ DTRSL 125 #define LAgetrf_ DGETRF 126 #elif defined(HAVE_FORTRAN_CAPS) 127 #define LAormqr_ DORMQR 128 #define LAtrtrs_ DTRTRS 129 #define LApotrf_ DPOTRF 130 #define LApotrs_ DPOTRS 131 #define LAgemv_ DGEMV 132 #define LAgetrs_ DGETRS 133 #define LAtrmv_ DTRMV 134 #define LAtrsl_ DTRSL 135 #define LAgesvd_ DGESVD 136 #define LAgeev_ DGEEV 137 #define BLgemm_ DGEMM 138 #elif !defined(HAVE_FORTRAN_UNDERSCORE) 139 #define LAormqr_ dormqr 140 #define LAtrtrs_ dtrtrs 141 #define LApotrf_ dpotrf 142 #define LApotrs_ dpotrs 143 #define LAgemv_ dgemv 144 #define LAgetrs_ dgetrs 145 #define LAtrmv_ dtrmv 146 #define LAtrsl_ dtrsl 147 #define BLgemm_ dgemm 148 #define LAgesvd_ dgesvd 149 #define LAgeev_ dgeev 150 #else 151 #define LAormqr_ dormqr_ 152 #define LAtrtrs_ dtrtrs_ 153 #define LApotrf_ dpotrf_ 154 #define LApotrs_ dpotrs_ 155 #define LAgemv_ dgemv_ 156 #define LAgetrs_ dgetrs_ 157 #define LAtrmv_ dtrmv_ 158 #define LAtrsl_ dtrsl_ 159 #define BLgemm_ dgemm_ 160 #define LAgesvd_ dgesvd_ 161 #define LAgeev_ dgeev_ 162 #endif 163 164 #else 165 /* 166 Complex with no character string arguments 167 */ 168 #if defined(USES_FORTRAN_SINGLE) 169 #define ZGEQRF CGEQRF 170 #define ZDOTC CDOTC 171 #define DZNRM2 SCNRM2 172 #define ZSCAL CSCAL 173 #define ZCOPY CCOPY 174 #define ZSWAP CSWAP 175 #define ZAXPY CAXPY 176 #define DZASUM SCASUM 177 #define ZGETRF CGETRF 178 #define ZTRTRS CTRTRS 179 #define ZPOTRF CPOTRF 180 #define ZPOTRS CPOTRS 181 #define ZGEMV CGEMV 182 #define ZGETRS CGETRS 183 #define ZGEMM SGEMM 184 #define ZTRMV CTRMV 185 #define ZGEEV CGEEV 186 #endif 187 188 #if defined(HAVE_FORTRAN_CAPS) 189 #define LAgeqrf_ ZGEQRF 190 #define BLdot_ ZDOTC 191 #define BLnrm2_ DZNRM2 192 #define BLscal_ ZSCAL 193 #define BLcopy_ ZCOPY 194 #define BLswap_ ZSWAP 195 #define BLaxpy_ ZAXPY 196 #define BLasum_ DZASUM 197 #define LAgetrf_ ZGETRF 198 #elif !defined(HAVE_FORTRAN_UNDERSCORE) 199 #define LAgeqrf_ zgeqrf 200 #define LAgetrf_ zgetrf 201 #define LAgetf2_ zgetf2 202 #define BLdot_ zdotc 203 #define BLnrm2_ dznrm2 204 #define BLscal_ zscal 205 #define BLcopy_ zcopy 206 #define BLswap_ zswap 207 #define BLaxpy_ zaxpy 208 #define BLasum_ dzasum 209 #else 210 #define LAgeqrf_ zgeqrf_ 211 #define LAgetrf_ zgetrf_ 212 #define LAgetf2_ zgetf2_ 213 #define BLdot_ zdotc_ 214 #define BLnrm2_ dznrm2_ 215 #define BLscal_ zscal_ 216 #define BLcopy_ zcopy_ 217 #define BLswap_ zswap_ 218 #define BLaxpy_ zaxpy_ 219 #define BLasum_ dzasum_ 220 #endif 221 222 #if defined(USES_CPTOFCD) 223 #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) ZTRTRS(_cptofcd((a),1),_cptofcd((b),1),\ 224 _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j)) 225 #define LApotrf_(a,b,c,d,e) ZPOTRF(_cptofcd((a),1),(b),(c),(d),(e)) 226 #define LApotrs_(a,b,c,d,e,f,g,h) ZPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\ 227 (f),(g),(h)) 228 #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) ZGEMV(_cptofcd((a),1),(b),(c),(d),(e),\ 229 (f),(g),(h),(i),(j),(k)) 230 #define LAgetrs_(a,b,c,d,e,f,g,h,i) ZGETRS(_cptofcd((a),1),(b),(c),(d),(e),\ 231 (f),(g),(h),(i)) 232 #define BLgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) ZGEMM(_cptofcd((a),1), \ 233 _cptofcd((a),1),(c),(d),(e),\ 234 (f),(g),(h),(i),(j),(k),(l),(m)) 235 #define LAgesvd_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,p) ZGESVD(_cptofcd((a),1), \ 236 _cptofcd((a),1),(c),(d),(e),\ 237 (f),(g),(h),(i),(j),(k),(l),(m),(n),(p)) 238 #define LAgeev_(a,b,c,d,e,f,g,h,i,j,k,l,m,n) ZGEEV(_cptofcd((a),1), \ 239 _cptofcd((a),1),(c),(d),(e),\ 240 (f),(g),(h),(i),(j),(k),(l),(m),(n)) 241 #define LAtrmv_ ZTRMV 242 #define LAtrsl_ ZTRSL 243 #elif defined(HAVE_FORTRAN_CAPS) 244 #define LAtrtrs_ ZTRTRS 245 #define LApotrf_ ZPOTRF 246 #define LApotrs_ ZPOTRS 247 #define LAgemv_ ZGEMV 248 #define LAgetrf_ ZGETRF 249 #define LAgetf2_ ZGETF2 250 #define LAgetrs_ ZGETRS 251 #define LAtrmv_ ZTRMV 252 #define LAtrsl_ ZTRSL 253 #define BLgemm_ ZGEMM 254 #define LAgesvd_ ZGESVD 255 #define LAgeev_ ZGEEV 256 #elif !defined(HAVE_FORTRAN_UNDERSCORE) 257 #define LAtrtrs_ ztrtrs 258 #define LApotrf_ zpotrf 259 #define LApotrs_ zpotrs 260 #define LAgemv_ zgemv 261 #define LAgetrs_ zgetrs 262 #define LAtrmv_ ztrmv 263 #define LAtrsl_ ztrsl 264 #define BLgemm_ zgemm 265 #define LAgesvd_ zgesvd 266 #define LAgeev_ zgeev 267 #else 268 #define LAtrtrs_ ztrtrs_ 269 #define LApotrf_ zpotrf_ 270 #define LApotrs_ zpotrs_ 271 #define LAgemv_ zgemv_ 272 #define LAgetrs_ zgetrs_ 273 #define LAtrmv_ ztrmv_ 274 #define LAtrsl_ ztrsl_ 275 #define BLgemm_ zgemm_ 276 #define LAgesvd_ zgesvd_ 277 #define LAgeev_ zgeev_ 278 #endif 279 280 #endif 281 282 #if defined(__cplusplus) 283 extern "C" { 284 #endif 285 286 /* 287 BLdot cannot be used with COMPLEX because it cannot 288 handle returing a double complex to C++. 289 */ 290 extern double BLdot_(int*,Scalar*,int*,Scalar*,int*); 291 extern double BLnrm2_(int*,Scalar*,int*),BLasum_(int*,Scalar*,int*); 292 extern void BLscal_(int*,Scalar*,Scalar*,int*); 293 extern void BLcopy_(int*,Scalar*,int*,Scalar*,int*); 294 extern void BLswap_(int*,Scalar*,int*,Scalar*,int*); 295 extern void BLaxpy_(int*,Scalar*,Scalar*,int*,Scalar*,int*); 296 extern void LAgetrf_(int*,int*,Scalar*,int*,int*,int*); 297 extern void LAgetf2_(int*,int*,Scalar*,int*,int*,int*); 298 extern void LAgeqrf_(int*,int*,Scalar*,int*,Scalar*,Scalar*,int*,int*); 299 300 #if defined(USES_CPTOFCD) 301 302 #if defined(PETSC_COMPLEX) 303 extern void ZPOTRF(_fcd,int*,Scalar*,int*,int*); 304 extern void ZGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 305 Scalar*,Scalar*,int*); 306 extern void ZPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*); 307 extern void ZGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 308 extern void ZGEMM(_fcd,_fcd,int*,int*,int*,Scalar*,Scalar*,int*, 309 Scalar*,int*,Scalar*,Scalar*,int*); 310 extern void ZGESVD(_fcd,_fcd,int *,int*, Scalar *,int*,double*,Scalar*, 311 int*,Scalar*,int*,Scalar*,int*,double*,int*); 312 extern void ZGEEV(_fcd,_fcd,int *, Scalar *,int*,Scalar*,Scalar*, 313 int*,Scalar*,int*,Scalar*,int*,double*,int*); 314 #else 315 extern void DPOTRF(_fcd,int*,Scalar*,int*,int*); 316 extern void DGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 317 Scalar*,Scalar*,int*); 318 extern void DPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*); 319 extern void DGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 320 extern void DGEMM(_fcd,_fcd,int*,int*,int*,Scalar*,Scalar*,int*, 321 Scalar*,int*,Scalar*,Scalar*,int*); 322 extern void DGESVD(_fcd,_fcd,int *,int*, Scalar *,int*,Scalar*,Scalar*, 323 int*,Scalar*,int*,Scalar*,int*,int*); 324 extern void DGEEV(_fcd,_fcd,int *,Scalar *,int*,Scalar*,Scalar*,Scalar*, 325 int*,Scalar*,int*,Scalar*,int*,int*); 326 #endif 327 328 #else 329 extern void LAormqr_(char*,char*,int*,int*,int*,Scalar*,int*,Scalar*,Scalar*, 330 int*,Scalar*,int*,int*); 331 extern void LAtrtrs_(char*,char*,char*,int*,int*,Scalar*,int*,Scalar*,int*, 332 int*); 333 extern void LApotrf_(char*,int*,Scalar*,int*,int*); 334 extern void LAgemv_(char*,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*, 335 Scalar*,Scalar*,int*); 336 extern void LApotrs_(char*,int*,int*,Scalar*,int*,Scalar*,int*,int*); 337 extern void LAgetrs_(char*,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*); 338 extern void BLgemm_(char *,char*,int*,int*,int*,Scalar*,Scalar*,int*, 339 Scalar*,int*,Scalar*,Scalar*,int*); 340 #if !defined(PETSC_COMPLEX) 341 extern void LAgeev_(char *,char *,int *, Scalar *,int*,double*,double*,Scalar*, 342 int*,Scalar*,int*,Scalar*,int*,int*); 343 extern void LAgesvd_(char *,char *,int *,int*, Scalar *,int*,double*,Scalar*, 344 int*,Scalar*,int*,Scalar*,int*,int*); 345 #else 346 extern void LAgeev_(char *,char *,int *, Scalar *,int*,Scalar*,Scalar*, 347 int*,Scalar*,int*,Scalar*,int*,double*,int*); 348 extern void LAgesvd_(char *,char *,int *,int*, Scalar *,int*,double*,Scalar*, 349 int*,Scalar*,int*,Scalar*,int*,double*,int*); 350 #endif 351 #endif 352 353 #if defined(__cplusplus) 354 } 355 #endif 356 357 #endif 358 359 360 361