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