xref: /petsc/include/petscblaslapack.h (revision 01ad1a64e434f57ee686f96146a4cac01094a74b)
1*01ad1a64SSatish Balay /* $Id: petscblaslapack.h,v 1.49 2001/08/07 14:56:33 bsmith Exp bsmith $ */
2a1e12872SBarry Smith /*
3c0581c19SLois Curfman McInnes    This file provides some name space protection from LAPACK and BLAS and
4c0581c19SLois Curfman McInnes allows the appropriate single or double precision version to be used.
5c0581c19SLois Curfman McInnes This file also deals with different Fortran 77 naming conventions on machines.
65392566eSBarry Smith 
7217f3c9bSSatish Balay    Another problem is character strings are represented differently on
85392566eSBarry Smith on some machines in C and Fortran 77. This problem comes up on the
9633a50d3SSatish Balay Cray T3D/T3E.
105392566eSBarry Smith 
11a1e12872SBarry Smith */
12c3e41550SBarry Smith #if !defined(_BLASLAPACK_H)
13c3e41550SBarry Smith #define _BLASLAPACK_H
14a1e12872SBarry Smith 
1519b02663SBarry Smith #include "petsc.h"
16a1e12872SBarry Smith 
17bb638ab5SSatish Balay 
188e0e00b1SSatish Balay #if defined(PETSC_BLASLAPACK_MKL64_ONLY)
198e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GESVD
208e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GEEV
218e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GETRF
228e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_POTRF
238e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GETRS
248e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_POTRS
25e7906763SSatish Balay #elif defined(PETSC_BLASLAPACK_MKL_ONLY)
26bb638ab5SSatish Balay #define PETSC_MISSING_LAPACK_GESVD
27bb638ab5SSatish Balay #define PETSC_MISSING_LAPACK_GEEV
28ae7cfcebSSatish Balay #elif defined(PETSC_BLASLAPACK_CRAY_ONLY)
29bb638ab5SSatish Balay #define PETSC_MISSING_LAPACK_GESVD
30ae7cfcebSSatish Balay #elif defined(PETSC_BLASLAPACK_ESSL_ONLY)
31ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_GESVD
32ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_GETRF
33ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_GETRS
34ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_POTRF
35ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_POTRS
36bb638ab5SSatish Balay #endif
37bb638ab5SSatish Balay 
388f4c8dbaSBarry Smith /*
39633a50d3SSatish Balay    This include file on the Cray T3D/T3E defines the interface between
40217f3c9bSSatish Balay   Fortran and C representations of character strings.
418f4c8dbaSBarry Smith */
42f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
4393c39befSBarry Smith #include <fortran.h>
445392566eSBarry Smith #endif
455392566eSBarry Smith 
46aa482453SBarry Smith #if !defined(PETSC_USE_COMPLEX)
474eeb42bcSBarry Smith 
484eeb42bcSBarry Smith /*
494eeb42bcSBarry Smith     These are real case with no character string arguments
504eeb42bcSBarry Smith */
518f4c8dbaSBarry Smith 
52f1af5d2fSBarry Smith #if defined(PETSC_USES_FORTRAN_SINGLE)
538f4c8dbaSBarry Smith /*
548f4c8dbaSBarry Smith    For these machines we must call the single precision Fortran version
558f4c8dbaSBarry Smith */
568f4c8dbaSBarry Smith #define DGEQRF   SGEQRF
578f4c8dbaSBarry Smith #define DGETRF   SGETRF
588f4c8dbaSBarry Smith #define DDOT     SDOT
598f4c8dbaSBarry Smith #define DNRM2    SNRM2
608f4c8dbaSBarry Smith #define DSCAL    SSCAL
618f4c8dbaSBarry Smith #define DCOPY    SCOPY
628f4c8dbaSBarry Smith #define DSWAP    SSWAP
638f4c8dbaSBarry Smith #define DAXPY    SAXPY
648f4c8dbaSBarry Smith #define DASUM    SASUM
658f4c8dbaSBarry Smith #define DSORMQR  SORMQR
668f4c8dbaSBarry Smith #define DTRTRS   STRTRS
678f4c8dbaSBarry Smith #define DPOTRF   SPOTRF
688f4c8dbaSBarry Smith #define DPOTRS   SPOTRS
698f4c8dbaSBarry Smith #define DGEMV    SGEMV
708f4c8dbaSBarry Smith #define DGETRS   SGETRS
718f4c8dbaSBarry Smith #define DGETRS   SGETRS
728f4c8dbaSBarry Smith #define DGEMM    SGEMM
738f4c8dbaSBarry Smith #define DGESVD   SGESVD
74d4fbbf0eSBarry Smith #define DGEEV    SGEEV
758f4c8dbaSBarry Smith #define DTRMV    STRMV
768f4c8dbaSBarry Smith #define DTRSL    STRSL
778f4c8dbaSBarry Smith #endif
788f4c8dbaSBarry Smith 
79*01ad1a64SSatish Balay #if defined(PETSC_USE_SINGLE)
80*01ad1a64SSatish Balay 
81*01ad1a64SSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
82*01ad1a64SSatish Balay #define LAgeqrf_ sgeqrf_
83*01ad1a64SSatish Balay #define LAgetrf_ sgetrf_
84*01ad1a64SSatish Balay #define LAgetf2_ sgetf2_
85*01ad1a64SSatish Balay #define BLdot_   sdot_
86*01ad1a64SSatish Balay #define BLnrm2_  snrm2_
87*01ad1a64SSatish Balay #define BLscal_  sscal_
88*01ad1a64SSatish Balay #define BLcopy_  scopy_
89*01ad1a64SSatish Balay #define BLswap_  sswap_
90*01ad1a64SSatish Balay #define BLaxpy_  saxpy_
91*01ad1a64SSatish Balay #define BLasum_  sasum_
92*01ad1a64SSatish Balay #elif defined(PETSC_HAVE_FORTRAN_CAPS)
93*01ad1a64SSatish Balay #define LAgeqrf_ SGEQRF
94*01ad1a64SSatish Balay #define LAgetrf_ SGETRF
95*01ad1a64SSatish Balay #define LAgetf2_ SGETF2
96*01ad1a64SSatish Balay #define BLdot_   SDOT
97*01ad1a64SSatish Balay #define BLnrm2_  SNRM2
98*01ad1a64SSatish Balay #define BLscal_  SSCAL
99*01ad1a64SSatish Balay #define BLcopy_  SCOPY
100*01ad1a64SSatish Balay #define BLswap_  SSWAP
101*01ad1a64SSatish Balay #define BLaxpy_  SAXPY
102*01ad1a64SSatish Balay #define BLasum_  SASUM
103*01ad1a64SSatish Balay #else
104*01ad1a64SSatish Balay #define LAgeqrf_ sgeqrf
105*01ad1a64SSatish Balay #define LAgetrf_ sgetrf
106*01ad1a64SSatish Balay #define LAgetf2_ sgetf2
107*01ad1a64SSatish Balay #define BLdot_   sdot
108*01ad1a64SSatish Balay #define BLnrm2_  snrm2
109*01ad1a64SSatish Balay #define BLscal_  sscal
110*01ad1a64SSatish Balay #define BLcopy_  scopy
111*01ad1a64SSatish Balay #define BLswap_  sswap
112*01ad1a64SSatish Balay #define BLaxpy_  saxpy
113*01ad1a64SSatish Balay #define BLasum_  sasum
114*01ad1a64SSatish Balay #endif
115*01ad1a64SSatish Balay 
116*01ad1a64SSatish Balay #else
117*01ad1a64SSatish Balay 
118ae7cfcebSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
119c0534c1cSBarry Smith #define LAgeqrf_ dgeqrf_
1205392566eSBarry Smith #define LAgetrf_ dgetrf_
121c0581c19SLois Curfman McInnes #define LAgetf2_ dgetf2_
122a1e12872SBarry Smith #define BLdot_   ddot_
123a1e12872SBarry Smith #define BLnrm2_  dnrm2_
124a1e12872SBarry Smith #define BLscal_  dscal_
125a1e12872SBarry Smith #define BLcopy_  dcopy_
126a1e12872SBarry Smith #define BLswap_  dswap_
127a1e12872SBarry Smith #define BLaxpy_  daxpy_
128a1e12872SBarry Smith #define BLasum_  dasum_
129aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
13025fce39dSBarry Smith #define LAgeqrf_ DGEQRF
13125fce39dSBarry Smith #define LAgetrf_ DGETRF
13225fce39dSBarry Smith #define LAgetf2_ DGETF2
13325fce39dSBarry Smith #define BLdot_   DDOT
13425fce39dSBarry Smith #define BLnrm2_  DNRM2
13525fce39dSBarry Smith #define BLscal_  DSCAL
13625fce39dSBarry Smith #define BLcopy_  DCOPY
13725fce39dSBarry Smith #define BLswap_  DSWAP
13825fce39dSBarry Smith #define BLaxpy_  DAXPY
13925fce39dSBarry Smith #define BLasum_  DASUM
14025fce39dSBarry Smith #else
14125fce39dSBarry Smith #define LAgeqrf_ dgeqrf
14225fce39dSBarry Smith #define LAgetrf_ dgetrf
14325fce39dSBarry Smith #define LAgetf2_ dgetf2
14425fce39dSBarry Smith #define BLdot_   ddot
14525fce39dSBarry Smith #define BLnrm2_  dnrm2
14625fce39dSBarry Smith #define BLscal_  dscal
14725fce39dSBarry Smith #define BLcopy_  dcopy
14825fce39dSBarry Smith #define BLswap_  dswap
14925fce39dSBarry Smith #define BLaxpy_  daxpy
15025fce39dSBarry Smith #define BLasum_  dasum
151a1e12872SBarry Smith #endif
152a1e12872SBarry Smith 
153*01ad1a64SSatish Balay #endif
154*01ad1a64SSatish Balay 
1554eeb42bcSBarry Smith /*
1564eeb42bcSBarry Smith    Real with character string arguments.
1574eeb42bcSBarry Smith */
158f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
1598f4c8dbaSBarry Smith /*
1608f4c8dbaSBarry Smith    Note that this assumes that machines which use cptofcd() use
161aa482453SBarry Smith   the PETSC_HAVE_FORTRAN_CAPS option. This is true on the Cray T3D/T3E.
1628f4c8dbaSBarry Smith */
163f7d3a2fdSBarry Smith #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))
164f7d3a2fdSBarry Smith #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))
1658f4c8dbaSBarry Smith #define LApotrf_(a,b,c,d,e)                   DPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
166f7d3a2fdSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h)             DPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h))
167f7d3a2fdSBarry Smith #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))
168f7d3a2fdSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i)           DGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
169f7d3a2fdSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i)           DGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
170f7d3a2fdSBarry Smith #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))
171f7d3a2fdSBarry Smith #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))
172f7d3a2fdSBarry Smith #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))
1738f4c8dbaSBarry Smith #define LAtrmv_  DTRMV
1748f4c8dbaSBarry Smith #define LAtrsl_  DTRSL
175633a50d3SSatish Balay #define LAgetrf_ DGETRF
176ae7cfcebSSatish Balay #elif defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
17725fce39dSBarry Smith #define LAormqr_ dormqr_
17825fce39dSBarry Smith #define LAtrtrs_ dtrtrs_
17925fce39dSBarry Smith #define LApotrf_ dpotrf_
18025fce39dSBarry Smith #define LApotrs_ dpotrs_
18125fce39dSBarry Smith #define LAgemv_  dgemv_
18225fce39dSBarry Smith #define LAgetrs_ dgetrs_
18325fce39dSBarry Smith #define LAtrmv_  dtrmv_
18425fce39dSBarry Smith #define LAtrsl_  dtrsl_
18525fce39dSBarry Smith #define BLgemm_  dgemm_
18625fce39dSBarry Smith #define LAgesvd_ dgesvd_
18725fce39dSBarry Smith #define LAgeev_  dgeev_
188aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
189c0534c1cSBarry Smith #define LAormqr_ DORMQR
190c0534c1cSBarry Smith #define LAtrtrs_ DTRTRS
191a1e12872SBarry Smith #define LApotrf_ DPOTRF
192a1e12872SBarry Smith #define LApotrs_ DPOTRS
193a1e12872SBarry Smith #define LAgemv_  DGEMV
194a1e12872SBarry Smith #define LAgetrs_ DGETRS
195a1e12872SBarry Smith #define LAtrmv_  DTRMV
196a1e12872SBarry Smith #define LAtrsl_  DTRSL
197af6b99e9SBarry Smith #define LAgesvd_ DGESVD
198d4fbbf0eSBarry Smith #define LAgeev_  DGEEV
1994eeb42bcSBarry Smith #define BLgemm_  DGEMM
20025fce39dSBarry Smith #else
201c0534c1cSBarry Smith #define LAormqr_ dormqr
202c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs
203a1e12872SBarry Smith #define LApotrf_ dpotrf
204a1e12872SBarry Smith #define LApotrs_ dpotrs
205a1e12872SBarry Smith #define LAgemv_  dgemv
206a1e12872SBarry Smith #define LAgetrs_ dgetrs
207a1e12872SBarry Smith #define LAtrmv_  dtrmv
208a1e12872SBarry Smith #define LAtrsl_  dtrsl
2094eeb42bcSBarry Smith #define BLgemm_  dgemm
210af6b99e9SBarry Smith #define LAgesvd_ dgesvd
211d4fbbf0eSBarry Smith #define LAgeev_  dgeev
212a1e12872SBarry Smith #endif
213a1e12872SBarry Smith 
214a1e12872SBarry Smith #else
2154eeb42bcSBarry Smith /*
2164eeb42bcSBarry Smith    Complex with no character string arguments
2174eeb42bcSBarry Smith */
218f1af5d2fSBarry Smith #if defined(PETSC_USES_FORTRAN_SINGLE)
2198f4c8dbaSBarry Smith #define ZGEQRF  CGEQRF
2208f4c8dbaSBarry Smith #define ZDOTC   CDOTC
2218f4c8dbaSBarry Smith #define DZNRM2  SCNRM2
2228f4c8dbaSBarry Smith #define ZSCAL   CSCAL
2238f4c8dbaSBarry Smith #define ZCOPY   CCOPY
2248f4c8dbaSBarry Smith #define ZSWAP   CSWAP
2258f4c8dbaSBarry Smith #define ZAXPY   CAXPY
2268f4c8dbaSBarry Smith #define DZASUM  SCASUM
2278f4c8dbaSBarry Smith #define ZGETRF  CGETRF
2288f4c8dbaSBarry Smith #define ZTRTRS  CTRTRS
2298f4c8dbaSBarry Smith #define ZPOTRF  CPOTRF
2308f4c8dbaSBarry Smith #define ZPOTRS  CPOTRS
2318f4c8dbaSBarry Smith #define ZGEMV   CGEMV
2328f4c8dbaSBarry Smith #define ZGETRS  CGETRS
2338f4c8dbaSBarry Smith #define ZGEMM   SGEMM
2348f4c8dbaSBarry Smith #define ZTRMV   CTRMV
235160814fdSSatish Balay #define ZTRSL   CTRSL
236633a50d3SSatish Balay #define ZGEEV   CGEEV
2378f4c8dbaSBarry Smith #endif
2388f4c8dbaSBarry Smith 
239ae7cfcebSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
240c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf_
2415392566eSBarry Smith #define LAgetrf_ zgetrf_
24208d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2_
243a1e12872SBarry Smith #define BLdot_   zdotc_
244a1e12872SBarry Smith #define BLnrm2_  dznrm2_
245a1e12872SBarry Smith #define BLscal_  zscal_
246a1e12872SBarry Smith #define BLcopy_  zcopy_
247a1e12872SBarry Smith #define BLswap_  zswap_
248a1e12872SBarry Smith #define BLaxpy_  zaxpy_
249a1e12872SBarry Smith #define BLasum_  dzasum_
250aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
25125fce39dSBarry Smith #define LAgeqrf_ ZGEQRF
25225fce39dSBarry Smith #define BLdot_   ZDOTC
25325fce39dSBarry Smith #define BLnrm2_  DZNRM2
25425fce39dSBarry Smith #define BLscal_  ZSCAL
25525fce39dSBarry Smith #define BLcopy_  ZCOPY
25625fce39dSBarry Smith #define BLswap_  ZSWAP
25725fce39dSBarry Smith #define BLaxpy_  ZAXPY
25825fce39dSBarry Smith #define BLasum_  DZASUM
25925fce39dSBarry Smith #define LAgetrf_ ZGETRF
26025fce39dSBarry Smith #else
26125fce39dSBarry Smith #define LAgeqrf_ zgeqrf
26225fce39dSBarry Smith #define LAgetrf_ zgetrf
26325fce39dSBarry Smith #define LAgetf2_ zgetf2
26425fce39dSBarry Smith #define BLdot_   zdotc
26525fce39dSBarry Smith #define BLnrm2_  dznrm2
26625fce39dSBarry Smith #define BLscal_  zscal
26725fce39dSBarry Smith #define BLcopy_  zcopy
26825fce39dSBarry Smith #define BLswap_  zswap
26925fce39dSBarry Smith #define BLaxpy_  zaxpy
27025fce39dSBarry Smith #define BLasum_  dzasum
271a1e12872SBarry Smith #endif
272a1e12872SBarry Smith 
273f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
274f7d3a2fdSBarry Smith #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))
2758f4c8dbaSBarry Smith #define LApotrf_(a,b,c,d,e)                     ZPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
276f7d3a2fdSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h)               ZPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h))
277f7d3a2fdSBarry Smith #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))
278f7d3a2fdSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i)             ZGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
279f7d3a2fdSBarry Smith #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))
280f7d3a2fdSBarry Smith #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))
281f7d3a2fdSBarry Smith #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))
2828f4c8dbaSBarry Smith #define LAtrmv_  ZTRMV
2838f4c8dbaSBarry Smith #define LAtrsl_  ZTRSL
284ae7cfcebSSatish Balay #elif defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
28525fce39dSBarry Smith #define LAtrtrs_ ztrtrs_
28625fce39dSBarry Smith #define LApotrf_ zpotrf_
28725fce39dSBarry Smith #define LApotrs_ zpotrs_
28825fce39dSBarry Smith #define LAgemv_  zgemv_
28925fce39dSBarry Smith #define LAgetrs_ zgetrs_
29025fce39dSBarry Smith #define LAtrmv_  ztrmv_
29125fce39dSBarry Smith #define LAtrsl_  ztrsl_
29225fce39dSBarry Smith #define BLgemm_  zgemm_
29325fce39dSBarry Smith #define LAgesvd_ zgesvd_
29425fce39dSBarry Smith #define LAgeev_  zgeev_
295aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
296c0534c1cSBarry Smith #define LAtrtrs_ ZTRTRS
297a1e12872SBarry Smith #define LApotrf_ ZPOTRF
298a1e12872SBarry Smith #define LApotrs_ ZPOTRS
299a1e12872SBarry Smith #define LAgemv_  ZGEMV
300a1e12872SBarry Smith #define LAgetrf_ ZGETRF
30108d0dac7SLois Curfman McInnes #define LAgetf2_ ZGETF2
302a1e12872SBarry Smith #define LAgetrs_ ZGETRS
303a1e12872SBarry Smith #define LAtrmv_  ZTRMV
304a1e12872SBarry Smith #define LAtrsl_  ZTRSL
3055a778de9SBarry Smith #define BLgemm_  ZGEMM
306d4fbbf0eSBarry Smith #define LAgesvd_ ZGESVD
307d4fbbf0eSBarry Smith #define LAgeev_  ZGEEV
30825fce39dSBarry Smith #else
309c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs
310a1e12872SBarry Smith #define LApotrf_ zpotrf
311a1e12872SBarry Smith #define LApotrs_ zpotrs
312a1e12872SBarry Smith #define LAgemv_  zgemv
313a1e12872SBarry Smith #define LAgetrs_ zgetrs
314a1e12872SBarry Smith #define LAtrmv_  ztrmv
315a1e12872SBarry Smith #define LAtrsl_  ztrsl
3165a778de9SBarry Smith #define BLgemm_  zgemm
317d4fbbf0eSBarry Smith #define LAgesvd_ zgesvd
318d4fbbf0eSBarry Smith #define LAgeev_  zgeev
319a1e12872SBarry Smith #endif
320a1e12872SBarry Smith 
321a1e12872SBarry Smith #endif
322a1e12872SBarry Smith 
323fb2e594dSBarry Smith EXTERN_C_BEGIN
324a1e12872SBarry Smith 
3258f4c8dbaSBarry Smith /*
3268f4c8dbaSBarry Smith    BLdot cannot be used with COMPLEX because it cannot
3278f4c8dbaSBarry Smith    handle returing a double complex to C++.
328126c565eSBarry Smith */
32913f16e43SBarry Smith EXTERN PetscReal BLdot_(int*,PetscScalar*,int*,PetscScalar*,int*);
33013f16e43SBarry Smith EXTERN PetscReal BLnrm2_(int*,PetscScalar*,int*);
33113f16e43SBarry Smith EXTERN PetscReal BLasum_(int*,PetscScalar*,int*);
33287828ca2SBarry Smith EXTERN void      BLscal_(int*,PetscScalar*,PetscScalar*,int*);
33387828ca2SBarry Smith EXTERN void      BLcopy_(int*,PetscScalar*,int*,PetscScalar*,int*);
33487828ca2SBarry Smith EXTERN void      BLswap_(int*,PetscScalar*,int*,PetscScalar*,int*);
33587828ca2SBarry Smith EXTERN void      BLaxpy_(int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*);
33687828ca2SBarry Smith EXTERN void      LAgetrf_(int*,int*,PetscScalar*,int*,int*,int*);
33787828ca2SBarry Smith EXTERN void      LAgetf2_(int*,int*,PetscScalar*,int*,int*,int*);
33887828ca2SBarry Smith EXTERN void      LAgeqrf_(int*,int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*,int*);
3395392566eSBarry Smith 
340f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
341112a2221SBarry Smith 
342aa482453SBarry Smith #if defined(PETSC_USE_COMPLEX)
34387828ca2SBarry Smith EXTERN void   ZPOTRF(_fcd,int*,PetscScalar*,int*,int*);
344f7d3a2fdSBarry Smith EXTERN void   ZGEMV(_fcd,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*);
34587828ca2SBarry Smith EXTERN void   ZPOTRS(_fcd,int*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
34687828ca2SBarry Smith EXTERN void   ZGETRS(_fcd,int*,int*,PetscScalar*,int*,int*,PetscScalar*,int*,int*);
347f7d3a2fdSBarry Smith EXTERN void   ZGEMM(_fcd,_fcd,int*,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*);
34813f16e43SBarry Smith EXTERN void   ZGESVD(_fcd,_fcd,int *,int*,PetscScalar *,int*,PetscReal*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,PetscReal*,int*);
34913f16e43SBarry Smith EXTERN void   ZGEEV(_fcd,_fcd,int *,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,PetscReal*,int*);
3505392566eSBarry Smith #else
35187828ca2SBarry Smith EXTERN void   DPOTRF(_fcd,int*,PetscScalar*,int*,int*);
352f7d3a2fdSBarry Smith EXTERN void   DGEMV(_fcd,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*);
35387828ca2SBarry Smith EXTERN void   DPOTRS(_fcd,int*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
35487828ca2SBarry Smith EXTERN void   DGETRS(_fcd,int*,int*,PetscScalar*,int*,int*,PetscScalar*,int*,int*);
355f7d3a2fdSBarry Smith EXTERN void   DGEMM(_fcd,_fcd,int*,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*);
356f7d3a2fdSBarry Smith EXTERN void   DGESVD(_fcd,_fcd,int *,int*,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
357f7d3a2fdSBarry Smith EXTERN void   DGEEV(_fcd,_fcd,int *,PetscScalar *,int*,PetscScalar*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
358112a2221SBarry Smith #endif
359112a2221SBarry Smith 
360112a2221SBarry Smith #else
361f7d3a2fdSBarry Smith EXTERN void   LAormqr_(char*,char*,int*,int*,int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,int*);
362f7d3a2fdSBarry Smith EXTERN void   LAtrtrs_(char*,char*,char*,int*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
36387828ca2SBarry Smith EXTERN void   LApotrf_(char*,int*,PetscScalar*,int*,int*);
364f7d3a2fdSBarry Smith EXTERN void   LAgemv_(char*,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*);
36587828ca2SBarry Smith EXTERN void   LApotrs_(char*,int*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
36687828ca2SBarry Smith EXTERN void   LAgetrs_(char*,int*,int*,PetscScalar*,int*,int*,PetscScalar*,int*,int*);
367f7d3a2fdSBarry Smith EXTERN void   BLgemm_(char *,char*,int*,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*);
368e38aa075SLois Curfman McInnes 
369e38aa075SLois Curfman McInnes /* ESSL uses a different calling sequence for dgeev(), zgeev() than LAPACK; */
370aa482453SBarry Smith #if defined(PETSC_HAVE_ESSL) && defined(PETSC_USE_COMPLEX)
37113f16e43SBarry Smith EXTERN void   LAgeev_(int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*,int*,int*,PetscReal*,int*);
37213f16e43SBarry Smith EXTERN void   LAgesvd_(char *,char *,int *,int*,PetscScalar *,int*,PetscReal*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,PetscReal*,int*);
373aa482453SBarry Smith #elif defined(PETSC_HAVE_ESSL)
37413f16e43SBarry Smith EXTERN void   LAgeev_(int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*,int*,int*,PetscReal*,int*);
37513f16e43SBarry Smith EXTERN void   LAgesvd_(char *,char *,int *,int*,PetscScalar *,int*,PetscReal*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
376aa482453SBarry Smith #elif !defined(PETSC_USE_COMPLEX)
37713f16e43SBarry Smith EXTERN void   LAgeev_(char *,char *,int *,PetscScalar *,int*,PetscReal*,PetscReal*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
37813f16e43SBarry Smith EXTERN void   LAgesvd_(char *,char *,int *,int*,PetscScalar *,int*,PetscReal*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
379d4fbbf0eSBarry Smith #else
38013f16e43SBarry Smith EXTERN void   LAgeev_(char *,char *,int *,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,PetscReal*,int*);
38113f16e43SBarry Smith EXTERN void   LAgesvd_(char *,char *,int *,int*,PetscScalar *,int*,PetscReal*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,PetscReal*,int*);
382d4fbbf0eSBarry Smith #endif
3835392566eSBarry Smith #endif
384a1e12872SBarry Smith 
385fb2e594dSBarry Smith EXTERN_C_END
386a1e12872SBarry Smith 
387a1e12872SBarry Smith #endif
3885a778de9SBarry Smith 
389