Actual source code: petscblaslapack.h

  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.

  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.

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

 16: #if defined(PETSC_BLASLAPACK_MKL64_ONLY)
 17: #define PETSC_MISSING_LAPACK_GESVD
 18: #define PETSC_MISSING_LAPACK_GEEV
 19: #define PETSC_MISSING_LAPACK_GETRF
 20: #define PETSC_MISSING_LAPACK_POTRF
 21: #define PETSC_MISSING_LAPACK_GETRS
 22: #define PETSC_MISSING_LAPACK_POTRS
 23: #elif defined(PETSC_BLASLAPACK_MKL_ONLY)
 24: #define PETSC_MISSING_LAPACK_GESVD
 25: #define PETSC_MISSING_LAPACK_GEEV
 26: #elif defined(PETSC_BLASLAPACK_CRAY_ONLY)
 27: #define PETSC_MISSING_LAPACK_GESVD
 28: #elif defined(PETSC_BLASLAPACK_ESSL_ONLY)
 29: #define PETSC_MISSING_LAPACK_GESVD
 30: #define PETSC_MISSING_LAPACK_GETRF
 31: #define PETSC_MISSING_LAPACK_GETRS
 32: #define PETSC_MISSING_LAPACK_POTRF
 33: #define PETSC_MISSING_LAPACK_POTRS
 34: #endif

 36: /*
 37:    This include file on the Cray T3D/T3E defines the interface between 
 38:   Fortran and C representations of character strings.
 39: */
 40: #if defined(PETSC_USES_CPTOFCD)
 41: #include <fortran.h>
 42: #endif

 44: #if !defined(PETSC_USE_COMPLEX)

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

 50: #if defined(PETSC_USES_FORTRAN_SINGLE) 
 51: /*
 52:    For these machines we must call the single precision Fortran version
 53: */
 54: #define DGEQRF   SGEQRF
 55: #define DGETRF   SGETRF
 56: #define DDOT     SDOT
 57: #define DNRM2    SNRM2
 58: #define DSCAL    SSCAL
 59: #define DCOPY    SCOPY
 60: #define DSWAP    SSWAP
 61: #define DAXPY    SAXPY
 62: #define DASUM    SASUM
 63: #define DSORMQR  SORMQR
 64: #define DTRTRS   STRTRS
 65: #define DPOTRF   SPOTRF
 66: #define DPOTRS   SPOTRS
 67: #define DGEMV    SGEMV
 68: #define DGETRS   SGETRS
 69: #define DGETRS   SGETRS
 70: #define DGEMM    SGEMM
 71: #define DGESVD   SGESVD
 72: #define DGEEV    SGEEV
 73: #define DTRMV    STRMV
 74: #define DTRSL    STRSL
 75: #endif

 77: #if defined(PETSC_USE_SINGLE)

 79: #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
 80: #define LAgeqrf_ sgeqrf_
 81: #define LAgetrf_ sgetrf_
 82: #define LAgetf2_ sgetf2_
 83: #define BLdot_   sdot_
 84: #define BLnrm2_  snrm2_
 85: #define BLscal_  sscal_
 86: #define BLcopy_  scopy_
 87: #define BLswap_  sswap_
 88: #define BLaxpy_  saxpy_
 89: #define BLasum_  sasum_
 90: #elif defined(PETSC_HAVE_FORTRAN_CAPS)
 91: #define LAgeqrf_ SGEQRF
 92: #define LAgetrf_ SGETRF
 93: #define LAgetf2_ SGETF2
 94: #define BLdot_   SDOT
 95: #define BLnrm2_  SNRM2
 96: #define BLscal_  SSCAL
 97: #define BLcopy_  SCOPY
 98: #define BLswap_  SSWAP
 99: #define BLaxpy_  SAXPY
100: #define BLasum_  SASUM
101: #else
102: #define LAgeqrf_ sgeqrf
103: #define LAgetrf_ sgetrf
104: #define LAgetf2_ sgetf2
105: #define BLdot_   sdot
106: #define BLnrm2_  snrm2
107: #define BLscal_  sscal
108: #define BLcopy_  scopy
109: #define BLswap_  sswap
110: #define BLaxpy_  saxpy
111: #define BLasum_  sasum
112: #endif

114: #else

116: #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
117: #define LAgeqrf_ dgeqrf_
118: #define LAgetrf_ dgetrf_
119: #define LAgetf2_ dgetf2_
120: #define BLdot_   ddot_
121: #define BLnrm2_  dnrm2_
122: #define BLscal_  dscal_
123: #define BLcopy_  dcopy_
124: #define BLswap_  dswap_
125: #define BLaxpy_  daxpy_
126: #define BLasum_  dasum_
127: #elif defined(PETSC_HAVE_FORTRAN_CAPS)
128: #define LAgeqrf_ DGEQRF
129: #define LAgetrf_ DGETRF
130: #define LAgetf2_ DGETF2
131: #define BLdot_   DDOT
132: #define BLnrm2_  DNRM2
133: #define BLscal_  DSCAL
134: #define BLcopy_  DCOPY
135: #define BLswap_  DSWAP
136: #define BLaxpy_  DAXPY
137: #define BLasum_  DASUM
138: #else
139: #define LAgeqrf_ dgeqrf
140: #define LAgetrf_ dgetrf
141: #define LAgetf2_ dgetf2
142: #define BLdot_   ddot
143: #define BLnrm2_  dnrm2
144: #define BLscal_  dscal
145: #define BLcopy_  dcopy
146: #define BLswap_  dswap
147: #define BLaxpy_  daxpy
148: #define BLasum_  dasum
149: #endif

151: #endif

153: /*
154:    Real with character string arguments.
155: */
156: #if defined(PETSC_USES_CPTOFCD)
157: /*
158:    Note that this assumes that machines which use cptofcd() use 
159:   the PETSC_HAVE_FORTRAN_CAPS option. This is true on the Cray T3D/T3E.
160: */
161: #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))
162: #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))
163: #define LApotrf_(a,b,c,d,e)                   DPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
164: #define LApotrs_(a,b,c,d,e,f,g,h)             DPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h))
165: #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))
166: #define LAgetrs_(a,b,c,d,e,f,g,h,i)           DGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
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 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))
169: #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))
170: #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))
171: #define LAtrmv_  DTRMV
172: #define LAtrsl_  DTRSL
173: #define LAgetrf_ DGETRF

175: #elif defined(PETSC_USE_SINGLE)

177: #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
178: #define LAormqr_ sormqr_
179: #define LAtrtrs_ strtrs_
180: #define LApotrf_ spotrf_
181: #define LApotrs_ spotrs_
182: #define LAgemv_  sgemv_
183: #define LAgetrs_ sgetrs_
184: #define LAtrmv_  strmv_
185: #define LAtrsl_  strsl_
186: #define BLgemm_  sgemm_
187: #define LAgesvd_ sgesvd_
188: #define LAgeev_  sgeev_
189: #elif defined(PETSC_HAVE_FORTRAN_CAPS)
190: #define LAormqr_ SORMQR
191: #define LAtrtrs_ STRTRS
192: #define LApotrf_ SPOTRF
193: #define LApotrs_ SPOTRS
194: #define LAgemv_  SGEMV
195: #define LAgetrs_ SGETRS
196: #define LAtrmv_  STRMV
197: #define LAtrsl_  STRSL
198: #define LAgesvd_ SGESVD
199: #define LAgeev_  SGEEV
200: #define BLgemm_  SGEMM
201: #else
202: #define LAormqr_ sormqr
203: #define LAtrtrs_ strtrs
204: #define LApotrf_ spotrf
205: #define LApotrs_ spotrs
206: #define LAgemv_  sgemv
207: #define LAgetrs_ sgetrs
208: #define LAtrmv_  strmv
209: #define LAtrsl_  strsl
210: #define BLgemm_  sgemm
211: #define LAgesvd_ sgesvd
212: #define LAgeev_  sgeev
213: #endif

215: #else /* PETSC_USE_SINGLE */

217: #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
218: #define LAormqr_ dormqr_
219: #define LAtrtrs_ dtrtrs_
220: #define LApotrf_ dpotrf_
221: #define LApotrs_ dpotrs_
222: #define LAgemv_  dgemv_
223: #define LAgetrs_ dgetrs_
224: #define LAtrmv_  dtrmv_
225: #define LAtrsl_  dtrsl_
226: #define BLgemm_  dgemm_
227: #define LAgesvd_ dgesvd_
228: #define LAgeev_  dgeev_
229: #elif defined(PETSC_HAVE_FORTRAN_CAPS)
230: #define LAormqr_ DORMQR
231: #define LAtrtrs_ DTRTRS
232: #define LApotrf_ DPOTRF
233: #define LApotrs_ DPOTRS
234: #define LAgemv_  DGEMV
235: #define LAgetrs_ DGETRS
236: #define LAtrmv_  DTRMV
237: #define LAtrsl_  DTRSL
238: #define LAgesvd_ DGESVD
239: #define LAgeev_  DGEEV
240: #define BLgemm_  DGEMM
241: #else
242: #define LAormqr_ dormqr
243: #define LAtrtrs_ dtrtrs
244: #define LApotrf_ dpotrf
245: #define LApotrs_ dpotrs
246: #define LAgemv_  dgemv
247: #define LAgetrs_ dgetrs
248: #define LAtrmv_  dtrmv
249: #define LAtrsl_  dtrsl
250: #define BLgemm_  dgemm
251: #define LAgesvd_ dgesvd
252: #define LAgeev_  dgeev
253: #endif

255: #endif /* PETSC_USES_CPTOFCD */

257: #else
258: /*
259:    Complex with no character string arguments
260: */
261: #if defined(PETSC_USES_FORTRAN_SINGLE)
262: #define ZGEQRF  CGEQRF
263: #define ZDOTC   CDOTC
264: #define DZNRM2  SCNRM2
265: #define ZSCAL   CSCAL
266: #define ZCOPY   CCOPY
267: #define ZSWAP   CSWAP
268: #define ZAXPY   CAXPY
269: #define DZASUM  SCASUM
270: #define ZGETRF  CGETRF
271: #define ZTRTRS  CTRTRS
272: #define ZPOTRF  CPOTRF
273: #define ZPOTRS  CPOTRS
274: #define ZGEMV   CGEMV
275: #define ZGETRS  CGETRS
276: #define ZGEMM   SGEMM
277: #define ZTRMV   CTRMV
278: #define ZTRSL   CTRSL
279: #define ZGEEV   CGEEV
280: #endif

282: #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
283: #define LAgeqrf_ zgeqrf_
284: #define LAgetrf_ zgetrf_
285: #define LAgetf2_ zgetf2_
286: #define BLdot_   zdotc_
287: #define BLnrm2_  dznrm2_
288: #define BLscal_  zscal_
289: #define BLcopy_  zcopy_
290: #define BLswap_  zswap_
291: #define BLaxpy_  zaxpy_
292: #define BLasum_  dzasum_
293: #elif defined(PETSC_HAVE_FORTRAN_CAPS)
294: #define LAgeqrf_ ZGEQRF
295: #define BLdot_   ZDOTC
296: #define BLnrm2_  DZNRM2
297: #define BLscal_  ZSCAL
298: #define BLcopy_  ZCOPY
299: #define BLswap_  ZSWAP
300: #define BLaxpy_  ZAXPY
301: #define BLasum_  DZASUM
302: #define LAgetrf_ ZGETRF
303: #else
304: #define LAgeqrf_ zgeqrf
305: #define LAgetrf_ zgetrf
306: #define LAgetf2_ zgetf2
307: #define BLdot_   zdotc
308: #define BLnrm2_  dznrm2
309: #define BLscal_  zscal
310: #define BLcopy_  zcopy
311: #define BLswap_  zswap
312: #define BLaxpy_  zaxpy
313: #define BLasum_  dzasum
314: #endif

316: #if defined(PETSC_USES_CPTOFCD)
317: #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))
318: #define LApotrf_(a,b,c,d,e)                     ZPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
319: #define LApotrs_(a,b,c,d,e,f,g,h)               ZPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h))
320: #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))
321: #define LAgetrs_(a,b,c,d,e,f,g,h,i)             ZGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
322: #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))
323: #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))
324: #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))
325: #define LAtrmv_  ZTRMV
326: #define LAtrsl_  ZTRSL
327: #elif defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
328: #define LAtrtrs_ ztrtrs_
329: #define LApotrf_ zpotrf_
330: #define LApotrs_ zpotrs_
331: #define LAgemv_  zgemv_
332: #define LAgetrs_ zgetrs_
333: #define LAtrmv_  ztrmv_
334: #define LAtrsl_  ztrsl_
335: #define BLgemm_  zgemm_
336: #define LAgesvd_ zgesvd_
337: #define LAgeev_  zgeev_
338: #elif defined(PETSC_HAVE_FORTRAN_CAPS)
339: #define LAtrtrs_ ZTRTRS
340: #define LApotrf_ ZPOTRF
341: #define LApotrs_ ZPOTRS
342: #define LAgemv_  ZGEMV
343: #define LAgetrf_ ZGETRF
344: #define LAgetf2_ ZGETF2
345: #define LAgetrs_ ZGETRS
346: #define LAtrmv_  ZTRMV
347: #define LAtrsl_  ZTRSL
348: #define BLgemm_  ZGEMM
349: #define LAgesvd_ ZGESVD
350: #define LAgeev_  ZGEEV
351: #else
352: #define LAtrtrs_ ztrtrs
353: #define LApotrf_ zpotrf
354: #define LApotrs_ zpotrs
355: #define LAgemv_  zgemv
356: #define LAgetrs_ zgetrs
357: #define LAtrmv_  ztrmv
358: #define LAtrsl_  ztrsl
359: #define BLgemm_  zgemm
360: #define LAgesvd_ zgesvd
361: #define LAgeev_  zgeev
362: #endif

364: #endif


368: /* 
369:    BLdot cannot be used with COMPLEX because it cannot 
370:    handle returing a double complex to C++.
371: */
372: EXTERN PetscReal BLdot_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
373: EXTERN PetscReal BLnrm2_(PetscBLASInt*,PetscScalar*,PetscBLASInt*);
374: EXTERN PetscReal BLasum_(PetscBLASInt*,PetscScalar*,PetscBLASInt*);
375: EXTERN void      BLscal_(PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
376: EXTERN void      BLcopy_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
377: EXTERN void      BLswap_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
378: EXTERN void      BLaxpy_(PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
379: EXTERN void      LAgetrf_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
380: EXTERN void      LAgetf2_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
381: EXTERN void      LAgeqrf_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);

383: #if defined(PETSC_USES_CPTOFCD)

385: #if defined(PETSC_USE_COMPLEX)
386: EXTERN void   ZORMQR(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
387: EXTERN void   ZTRTRS(_fcd,_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
388: EXTERN void   ZPOTRF(_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
389: EXTERN void   ZGEMV(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
390: EXTERN void   ZPOTRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
391: EXTERN void   ZGETRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
392: EXTERN void   ZGEMM(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
393: EXTERN void   ZGESVD(_fcd,_fcd,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
394: EXTERN void   ZGEEV(_fcd,_fcd,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
395: #else
396: EXTERN void   DORMQR(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
397: EXTERN void   DTRTRS(_fcd,_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
398: EXTERN void   DPOTRF(_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
399: EXTERN void   DGEMV(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
400: EXTERN void   DPOTRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
401: EXTERN void   DGETRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
402: EXTERN void   DGEMM(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
403: EXTERN void   DGESVD(_fcd,_fcd,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
404: EXTERN void   DGEEV(_fcd,_fcd,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
405: #endif

407: #else
408: EXTERN void   LAormqr_(const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
409: EXTERN void   LAtrtrs_(const char*,const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
410: EXTERN void   LApotrf_(const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
411: EXTERN void   LAgemv_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
412: EXTERN void   LApotrs_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
413: EXTERN void   LAgetrs_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
414: EXTERN void   BLgemm_(const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);

416: /* ESSL uses a different calling sequence for dgeev(), zgeev() than LAPACK; */
417: #if defined(PETSC_HAVE_ESSL) && defined(PETSC_USE_COMPLEX)
418: EXTERN void   LAgeev_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
419: EXTERN void   LAgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
420: #elif defined(PETSC_HAVE_ESSL)
421: EXTERN void   LAgeev_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
422: EXTERN void   LAgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
423: #elif !defined(PETSC_USE_COMPLEX)
424: EXTERN void   LAgeev_(const char*,const char*,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscReal*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
425: EXTERN void   LAgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
426: #else
427: EXTERN void   LAgeev_(const char*,const char*,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
428: EXTERN void   LAgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
429: #endif
430: #endif

434: #endif