Actual source code: petscblaslapack.h

  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.

  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.

 11: */
 12: #if !defined(_BLASLAPACK_H)
 13: #define _BLASLAPACK_H
 14:  #include petsc.h
 15: PETSC_EXTERN_CXX_BEGIN

 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

 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

 45: #if !defined(PETSC_USE_COMPLEX)

 47: /*
 48:     These are real case with no character string arguments
 49: */

 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

 78: #if defined(PETSC_USE_SINGLE)

 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

115: #else

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

152: #endif

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

176: #elif defined(PETSC_USE_SINGLE)

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

216: #else /* PETSC_USE_SINGLE */

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

256: #endif /* PETSC_USES_CPTOFCD */

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

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

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

365: #endif

367: EXTERN_C_BEGIN

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*);

384: #if defined(PETSC_USES_CPTOFCD)

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

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*);

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

433: EXTERN_C_END
434: PETSC_EXTERN_CXX_END
435: #endif