1 /* 2 This file provides some name space protection from LAPACK and BLAS and 3 allows the appropriate single or double precision version to be used. 4 This file also deals with different Fortran 77 naming conventions on machines. 5 6 Another problem is character strings are represented differently on 7 on some machines in C and Fortran 77. This problem comes up on the 8 Cray T3D/T3E. 9 10 */ 11 #if !defined(_BLASLAPACK_H) 12 #define _BLASLAPACK_H 13 #include "petsc.h" 14 PETSC_EXTERN_CXX_BEGIN 15 16 #if defined(PETSC_BLASLAPACK_MKL64_ONLY) 17 # define PETSC_MISSING_LAPACK_GESVD 18 # define PETSC_MISSING_LAPACK_GEEV 19 # define PETSC_MISSING_LAPACK_SYGV 20 # define PETSC_MISSING_LAPACK_SYGVX 21 # define PETSC_MISSING_LAPACK_GETRF 22 # define PETSC_MISSING_LAPACK_POTRF 23 # define PETSC_MISSING_LAPACK_GETRS 24 # define PETSC_MISSING_LAPACK_POTRS 25 #elif defined(PETSC_BLASLAPACK_MKL_ONLY) 26 # define PETSC_MISSING_LAPACK_GESVD 27 # define PETSC_MISSING_LAPACK_GEEV 28 # define PETSC_MISSING_LAPACK_SYGV 29 # define PETSC_MISSING_LAPACK_SYGVX 30 #elif defined(PETSC_BLASLAPACK_CRAY_ONLY) 31 # define PETSC_MISSING_LAPACK_GESVD 32 #elif defined(PETSC_BLASLAPACK_ESSL_ONLY) 33 # define PETSC_MISSING_LAPACK_GESVD 34 # define PETSC_MISSING_LAPACK_GETRF 35 # define PETSC_MISSING_LAPACK_GETRS 36 # define PETSC_MISSING_LAPACK_POTRF 37 # define PETSC_MISSING_LAPACK_POTRS 38 #endif 39 40 /* 41 This include file on the Cray T3D/T3E defines the interface between 42 Fortran and C representations of character strings. 43 */ 44 #if defined(PETSC_USES_CPTOFCD) 45 # include <fortran.h> 46 #endif 47 48 #if !defined(PETSC_USE_COMPLEX) 49 50 /* 51 These are real case with no character string arguments 52 */ 53 54 # if defined(PETSC_USES_FORTRAN_SINGLE) 55 /* 56 For these machines we must call the single precision Fortran version 57 */ 58 # define DGEQRF SGEQRF 59 # define DGETRF SGETRF 60 # define DDOT SDOT 61 # define DNRM2 SNRM2 62 # define DSCAL SSCAL 63 # define DCOPY SCOPY 64 # define DSWAP SSWAP 65 # define DAXPY SAXPY 66 # define DASUM SASUM 67 # define DSORMQR SORMQR 68 # define DTRTRS STRTRS 69 # define DPOTRF SPOTRF 70 # define DPOTRS SPOTRS 71 # define DGEMV SGEMV 72 # define DGETRS SGETRS 73 # define DGETRS SGETRS 74 # define DGEMM SGEMM 75 # define DGESVD SGESVD 76 # define DGEEV SGEEV 77 # define DSYGV SSYGV 78 # define DSYGVX SSYGVX 79 # define DTRMV STRMV 80 # define DTRSL STRSL 81 # endif 82 83 # if defined(PETSC_USE_SINGLE) 84 85 # if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 86 # define LAPACKgeqrf_ sgeqrf_ 87 # define LAPACKgetrf_ sgetrf_ 88 # define LAPACKgetf2_ sgetf2_ 89 # define BLASdot_ sdot_ 90 # define BLASnrm2_ snrm2_ 91 # define BLASscal_ sscal_ 92 # define BLAScopy_ scopy_ 93 # define BLASswap_ sswap_ 94 # define BLASaxpy_ saxpy_ 95 # define BLASasum_ sasum_ 96 # elif defined(PETSC_HAVE_FORTRAN_CAPS) 97 # define LAPACKgeqrf_ SGEQRF 98 # define LAPACKgetrf_ SGETRF 99 # define LAPACKgetf2_ SGETF2 100 # define BLASdot_ SDOT 101 # define BLASnrm2_ SNRM2 102 # define BLASscal_ SSCAL 103 # define BLAScopy_ SCOPY 104 # define BLASswap_ SSWAP 105 # define BLASaxpy_ SAXPY 106 # define BLASasum_ SASUM 107 # else 108 # define LAPACKgeqrf_ sgeqrf 109 # define LAPACKgetrf_ sgetrf 110 # define LAPACKgetf2_ sgetf2 111 # define BLASdot_ sdot 112 # define BLASnrm2_ snrm2 113 # define BLASscal_ sscal 114 # define BLAScopy_ scopy 115 # define BLASswap_ sswap 116 # define BLASaxpy_ saxpy 117 # define BLASasum_ sasum 118 # endif 119 120 # else 121 122 # if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 123 # define LAPACKgeqrf_ dgeqrf_ 124 # define LAPACKgetrf_ dgetrf_ 125 # define LAPACKgetf2_ dgetf2_ 126 # define BLASdot_ ddot_ 127 # define BLASnrm2_ dnrm2_ 128 # define BLASscal_ dscal_ 129 # define BLAScopy_ dcopy_ 130 # define BLASswap_ dswap_ 131 # define BLASaxpy_ daxpy_ 132 # define BLASasum_ dasum_ 133 # elif defined(PETSC_HAVE_FORTRAN_CAPS) 134 # define LAPACKgeqrf_ DGEQRF 135 # define LAPACKgetrf_ DGETRF 136 # define LAPACKgetf2_ DGETF2 137 # define BLASdot_ DDOT 138 # define BLASnrm2_ DNRM2 139 # define BLASscal_ DSCAL 140 # define BLAScopy_ DCOPY 141 # define BLASswap_ DSWAP 142 # define BLASaxpy_ DAXPY 143 # define BLASasum_ DASUM 144 # else 145 # define LAPACKgeqrf_ dgeqrf 146 # define LAPACKgetrf_ dgetrf 147 # define LAPACKgetf2_ dgetf2 148 # define BLASdot_ ddot 149 # define BLASnrm2_ dnrm2 150 # define BLASscal_ dscal 151 # define BLAScopy_ dcopy 152 # define BLASswap_ dswap 153 # define BLASaxpy_ daxpy 154 # define BLASasum_ dasum 155 # endif 156 157 # endif 158 159 /* 160 Real with character string arguments. 161 */ 162 # if defined(PETSC_USES_CPTOFCD) 163 /* 164 Note that this assumes that machines which use cptofcd() use 165 the PETSC_HAVE_FORTRAN_CAPS option. This is true on the Cray T3D/T3E. 166 */ 167 # define LAPACKormqr_(a,b,c,d,e,f,g,h,i,j,k,l,m) DORMQR(_cptofcd((a),1),_cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m)) 168 # define LAPACKtrtrs_(a,b,c,d,e,f,g,h,i,j) DTRTRS(_cptofcd((a),1),_cptofcd((b),1),_cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j)) 169 # define LAPACKpotrf_(a,b,c,d,e) DPOTRF(_cptofcd((a),1),(b),(c),(d),(e)) 170 # define LAPACKpotrs_(a,b,c,d,e,f,g,h) DPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h)) 171 # define BLASgemv_(a,b,c,d,e,f,g,h,i,j,k) DGEMV(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i),(j),(k)) 172 # define LAPACKgetrs_(a,b,c,d,e,f,g,h,i) DGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i)) 173 # define BLASgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) DGEMM(_cptofcd((a),1), _cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m)) 174 # define LAPACKgesvd_(a,b,c,d,e,f,g,h,i,j,k,l,m,n) DGESVD(_cptofcd((a),1),_cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n)) 175 # define LAPACKgeev_(a,b,c,d,e,f,g,h,i,j,k,l,m,n) DGEEV(_cptofcd((a),1),_cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n)) 176 # define LAPACKsygv_(a,b,c,d,e,f,g,h,i,j,k,l) DSYGV((a),_cptofcd((b),1),_cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j),(k),(l)) 177 # define LAPACKsygvx_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w) DSYGVX((a),_cptofcd((b),1),_cptofcd((c),1),_cptofcd((d),1),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n),(o),(p),(q),(r),(s),(t),(u),(v),(w)) 178 # define BLAStrmv_ DTRMV 179 # define LAPACKtrsl_ DTRSL 180 # define LAPACKgetrf_ DGETRF 181 182 # elif defined(PETSC_USE_SINGLE) 183 184 # if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 185 # define LAPACKormqr_ sormqr_ 186 # define LAPACKtrtrs_ strtrs_ 187 # define LAPACKpotrf_ spotrf_ 188 # define LAPACKpotrs_ spotrs_ 189 # define BLASgemv_ sgemv_ 190 # define LAPACKgetrs_ sgetrs_ 191 # define BLAStrmv_ strmv_ 192 # define LAPACKtrsl_ strsl_ 193 # define BLASgemm_ sgemm_ 194 # define LAPACKgesvd_ sgesvd_ 195 # define LAPACKgeev_ sgeev_ 196 # define LAPACKsygv_ ssygv_ 197 # define LAPACKsygvx_ ssygvx_ 198 199 # elif defined(PETSC_HAVE_FORTRAN_CAPS) 200 # define LAPACKormqr_ SORMQR 201 # define LAPACKtrtrs_ STRTRS 202 # define LAPACKpotrf_ SPOTRF 203 # define LAPACKpotrs_ SPOTRS 204 # define BLASgemv_ SGEMV 205 # define LAPACKgetrs_ SGETRS 206 # define BLAStrmv_ STRMV 207 # define LAPACKtrsl_ STRSL 208 # define LAPACKgesvd_ SGESVD 209 # define LAPACKgeev_ SGEEV 210 # define LAPACKsygv_ SSYGV 211 # define LAPACKsygvx_ SSYGVX 212 # define BLASgemm_ SGEMM 213 # else 214 # define LAPACKormqr_ sormqr 215 # define LAPACKtrtrs_ strtrs 216 # define LAPACKpotrf_ spotrf 217 # define LAPACKpotrs_ spotrs 218 # define BLASgemv_ sgemv 219 # define LAPACKgetrs_ sgetrs 220 # define BLAStrmv_ strmv 221 # define LAPACKtrsl_ strsl 222 # define BLASgemm_ sgemm 223 # define LAPACKgesvd_ sgesvd 224 # define LAPACKgeev_ sgeev 225 # define LAPACKsygv_ ssygv_ 226 # define LAPACKsygvx_ ssygvx_ 227 # endif 228 229 # else /* PETSC_USE_SINGLE */ 230 231 # if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 232 # define LAPACKormqr_ dormqr_ 233 # define LAPACKtrtrs_ dtrtrs_ 234 # define LAPACKpotrf_ dpotrf_ 235 # define LAPACKpotrs_ dpotrs_ 236 # define BLASgemv_ dgemv_ 237 # define LAPACKgetrs_ dgetrs_ 238 # define BLAStrmv_ dtrmv_ 239 # define LAPACKtrsl_ dtrsl_ 240 # define BLASgemm_ dgemm_ 241 # define LAPACKgesvd_ dgesvd_ 242 # define LAPACKgeev_ dgeev_ 243 # define LAPACKsygv_ dsygv_ 244 # define LAPACKsygvx_ dsygvx_ 245 246 # elif defined(PETSC_HAVE_FORTRAN_CAPS) 247 # define LAPACKormqr_ DORMQR 248 # define LAPACKtrtrs_ DTRTRS 249 # define LAPACKpotrf_ DPOTRF 250 # define LAPACKpotrs_ DPOTRS 251 # define BLASgemv_ DGEMV 252 # define LAPACKgetrs_ DGETRS 253 # define BLAStrmv_ DTRMV 254 # define LAPACKtrsl_ DTRSL 255 # define LAPACKgesvd_ DGESVD 256 # define LAPACKgeev_ DGEEV 257 # define LAPACKsygv_ DSYGV 258 # define LAPACKsygvx_ DSYGVX 259 # define BLASgemm_ DGEMM 260 # else 261 # define LAPACKormqr_ dormqr 262 # define LAPACKtrtrs_ dtrtrs 263 # define LAPACKpotrf_ dpotrf 264 # define LAPACKpotrs_ dpotrs 265 # define BLASgemv_ dgemv 266 # define LAPACKgetrs_ dgetrs 267 # define BLAStrmv_ dtrmv 268 # define LAPACKtrsl_ dtrsl 269 # define BLASgemm_ dgemm 270 # define LAPACKgesvd_ dgesvd 271 # define LAPACKgeev_ dgeev 272 # define LAPACKsygv_ dsygv 273 # define LAPACKsygvx_ dsygvx 274 # endif 275 276 # endif /* PETSC_USES_CPTOFCD */ 277 278 #else 279 /* 280 Complex with no character string arguments 281 */ 282 # if defined(PETSC_USES_FORTRAN_SINGLE) 283 # define ZGEQRF CGEQRF 284 # define ZDOTC CDOTC 285 # define DZNRM2 SCNRM2 286 # define ZSCAL CSCAL 287 # define ZCOPY CCOPY 288 # define ZSWAP CSWAP 289 # define ZAXPY CAXPY 290 # define DZASUM SCASUM 291 # define ZGETRF CGETRF 292 # define ZTRTRS CTRTRS 293 # define ZPOTRF CPOTRF 294 # define ZPOTRS CPOTRS 295 # define ZGEMV CGEMV 296 # define ZGETRS CGETRS 297 # define ZGEMM SGEMM 298 # define ZTRMV CTRMV 299 # define ZTRSL CTRSL 300 # define ZGEEV CGEEV 301 # define ZSYGV CSYGV 302 # define ZSYGVX CSYGVX 303 # endif 304 305 # if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 306 # define LAPACKgeqrf_ zgeqrf_ 307 # define LAPACKgetrf_ zgetrf_ 308 # define LAPACKgetf2_ zgetf2_ 309 # define BLASdot_ zdotc_ 310 # define BLASnrm2_ dznrm2_ 311 # define BLASscal_ zscal_ 312 # define BLAScopy_ zcopy_ 313 # define BLASswap_ zswap_ 314 # define BLASaxpy_ zaxpy_ 315 # define BLASasum_ dzasum_ 316 # elif defined(PETSC_HAVE_FORTRAN_CAPS) 317 # define LAPACKgeqrf_ ZGEQRF 318 # define LAPACKgetrf_ ZGETRF 319 # define BLASdot_ ZDOTC 320 # define BLASnrm2_ DZNRM2 321 # define BLASscal_ ZSCAL 322 # define BLAScopy_ ZCOPY 323 # define BLASswap_ ZSWAP 324 # define BLASaxpy_ ZAXPY 325 # define BLASasum_ DZASUM 326 # else 327 # define LAPACKgeqrf_ zgeqrf 328 # define LAPACKgetrf_ zgetrf 329 # define LAPACKgetf2_ zgetf2 330 # define BLASdot_ zdotc 331 # define BLASnrm2_ dznrm2 332 # define BLASscal_ zscal 333 # define BLAScopy_ zcopy 334 # define BLASswap_ zswap 335 # define BLASaxpy_ zaxpy 336 # define BLASasum_ dzasum 337 # endif 338 339 # if defined(PETSC_USES_CPTOFCD) 340 # define LAPACKtrtrs_(a,b,c,d,e,f,g,h,i,j) ZTRTRS(_cptofcd((a),1),_cptofcd((b),1),_cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j)) 341 # define LAPACKpotrf_(a,b,c,d,e) ZPOTRF(_cptofcd((a),1),(b),(c),(d),(e)) 342 # define LAPACKpotrs_(a,b,c,d,e,f,g,h) ZPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h)) 343 # define BLASgemv_(a,b,c,d,e,f,g,h,i,j,k) ZGEMV(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i),(j),(k)) 344 # define LAPACKgetrs_(a,b,c,d,e,f,g,h,i) ZGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i)) 345 # define BLASgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) ZGEMM(_cptofcd((a),1),_cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m)) 346 # define LAPACKgesvd_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,p) ZGESVD(_cptofcd((a),1),_cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n),(p)) 347 # define LAPACKgeev_(a,b,c,d,e,f,g,h,i,j,k,l,m,n) ZGEEV(_cptofcd((a),1),_cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n)) 348 # define LAPACKsygv_(a,b,c,d,e,f,g,h,i,j,k,l) ZSYGV((a),_cptofcd((b),1),_cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j),(k),(l)) 349 # define LAPACKsygvx_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w) ZSYGVX((a),_cptofcd((b),1),_cptofcd((c),1),_cptofcd((d),1),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n),(o),(p),(q),(r),(s),(t),(u),(v),(w)) 350 351 # define BLAStrmv_ ZTRMV 352 # define LAPACKtrsl_ ZTRSL 353 # elif defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 354 # define LAPACKtrtrs_ ztrtrs_ 355 # define LAPACKpotrf_ zpotrf_ 356 # define LAPACKpotrs_ zpotrs_ 357 # define BLASgemv_ zgemv_ 358 # define LAPACKgetrs_ zgetrs_ 359 # define BLAStrmv_ ztrmv_ 360 # define LAPACKtrsl_ ztrsl_ 361 # define BLASgemm_ zgemm_ 362 # define LAPACKgesvd_ zgesvd_ 363 # define LAPACKgeev_ zgeev_ 364 # define LAPACKsygv_ zsygv_ 365 # define LAPACKsygvx_ zsygvx_ 366 367 # elif defined(PETSC_HAVE_FORTRAN_CAPS) 368 # define LAPACKtrtrs_ ZTRTRS 369 # define LAPACKpotrf_ ZPOTRF 370 # define LAPACKpotrs_ ZPOTRS 371 # define BLASgemv_ ZGEMV 372 # define LAPACKgetrf_ ZGETRF 373 # define LAPACKgetf2_ ZGETF2 374 # define LAPACKgetrs_ ZGETRS 375 # define BLAStrmv_ ZTRMV 376 # define LAPACKtrsl_ ZTRSL 377 # define BLASgemm_ ZGEMM 378 # define LAPACKgesvd_ ZGESVD 379 # define LAPACKgeev_ ZGEEV 380 # define LAPACKsygv_ ZSYGV 381 # define LAPACKsygvx_ ZSYGVX 382 383 # else 384 # define LAPACKtrtrs_ ztrtrs 385 # define LAPACKpotrf_ zpotrf 386 # define LAPACKpotrs_ zpotrs 387 # define BLASgemv_ zgemv 388 # define LAPACKgetrs_ zgetrs 389 # define BLAStrmv_ ztrmv 390 # define LAPACKtrsl_ ztrsl 391 # define BLASgemm_ zgemm 392 # define LAPACKgesvd_ zgesvd 393 # define LAPACKgeev_ zgeev 394 # define LAPACKsygv_ zsygv 395 # define LAPACKsygvx_ zsygvx 396 # endif 397 398 #endif 399 400 EXTERN_C_BEGIN 401 402 /* 403 BLASdot cannot be used with COMPLEX because it cannot 404 handle returing a double complex to C++. 405 */ 406 EXTERN PetscReal BLASdot_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*); 407 EXTERN PetscReal BLASnrm2_(PetscBLASInt*,PetscScalar*,PetscBLASInt*); 408 EXTERN PetscReal BLASasum_(PetscBLASInt*,PetscScalar*,PetscBLASInt*); 409 EXTERN void BLASscal_(PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 410 EXTERN void BLAScopy_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*); 411 EXTERN void BLASswap_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*); 412 EXTERN void BLASaxpy_(PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*); 413 EXTERN void LAPACKgetrf_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*); 414 EXTERN void LAPACKgetf2_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*); 415 EXTERN void LAPACKgeqrf_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 416 417 #if defined(PETSC_USES_CPTOFCD) 418 419 # if defined(PETSC_USE_COMPLEX) 420 EXTERN void ZORMQR(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 421 EXTERN void ZTRTRS(_fcd,_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 422 EXTERN void ZPOTRF(_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 423 EXTERN void ZGEMV(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 424 EXTERN void ZPOTRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 425 EXTERN void ZGETRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 426 EXTERN void ZGEMM(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 427 EXTERN void ZGESVD(_fcd,_fcd,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 428 EXTERN void ZGEEV(_fcd,_fcd,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 429 EXTERN void ZSYGV(PetscBLASInt*,_fcd,_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 430 EXTERN void ZSYGVX(PetscBLASInt*,_fcd,_fcd,_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscReal*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*); 431 432 # else 433 EXTERN void DORMQR(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 434 EXTERN void DTRTRS(_fcd,_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 435 EXTERN void DPOTRF(_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 436 EXTERN void DGEMV(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 437 EXTERN void DPOTRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 438 EXTERN void DGETRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 439 EXTERN void DGEMM(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 440 EXTERN void DGESVD(_fcd,_fcd,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 441 EXTERN void DGEEV(_fcd,_fcd,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 442 EXTERN void DSYGV(PetscBLASInt*,_fcd,_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 443 EXTERN void DSYGVX(PetscBLASInt*,_fcd,_fcd,_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscReal*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*); 444 # endif 445 446 #else 447 EXTERN void LAPACKormqr_(const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 448 EXTERN void LAPACKtrtrs_(const char*,const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 449 EXTERN void LAPACKpotrf_(const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 450 EXTERN void BLASgemv_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 451 EXTERN void LAPACKpotrs_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 452 EXTERN void LAPACKgetrs_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 453 EXTERN void BLASgemm_(const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 454 455 /* ESSL uses a different calling sequence for dgeev(), zgeev() than LAPACK; */ 456 # if defined(PETSC_HAVE_ESSL) && defined(PETSC_USE_COMPLEX) 457 EXTERN void LAPACKgeev_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 458 EXTERN void LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 459 # elif defined(PETSC_HAVE_ESSL) 460 EXTERN void LAPACKgeev_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 461 EXTERN void LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 462 # elif !defined(PETSC_USE_COMPLEX) 463 EXTERN void LAPACKgeev_(const char*,const char*,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscReal*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 464 EXTERN void LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 465 EXTERN void LAPACKsygv_(PetscBLASInt*,const char*,const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 466 EXTERN void LAPACKsygvx_(PetscBLASInt*,const char*,const char*,const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscReal*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*); 467 # else 468 EXTERN void LAPACKgeev_(const char*,const char*,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 469 EXTERN void LAPACKsygv_(PetscBLASInt*,const char*,const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 470 EXTERN void LAPACKsygvx_(PetscBLASInt*,const char*,const char*,const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscReal*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*); 471 EXTERN void LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 472 # endif 473 #endif 474 475 EXTERN_C_END 476 PETSC_EXTERN_CXX_END 477 #endif 478