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