xref: /petsc/include/petscblaslapack.h (revision 71044d3c68371e2f837648832f6404cd7076a972)
1a1e12872SBarry Smith /*
2c0581c19SLois Curfman McInnes    This file provides some name space protection from LAPACK and BLAS and
3c0581c19SLois Curfman McInnes allows the appropriate single or double precision version to be used.
4c0581c19SLois Curfman McInnes This file also deals with different Fortran 77 naming conventions on machines.
55392566eSBarry Smith 
6217f3c9bSSatish Balay    Another problem is character strings are represented differently on
75392566eSBarry Smith on some machines in C and Fortran 77. This problem comes up on the
8633a50d3SSatish Balay Cray T3D/T3E.
95392566eSBarry Smith 
10a1e12872SBarry Smith */
11c3e41550SBarry Smith #if !defined(_BLASLAPACK_H)
12c3e41550SBarry Smith #define _BLASLAPACK_H
1319b02663SBarry Smith #include "petsc.h"
14e9fa29b7SSatish Balay PETSC_EXTERN_CXX_BEGIN
15bb638ab5SSatish Balay 
168e0e00b1SSatish Balay #if defined(PETSC_BLASLAPACK_MKL64_ONLY)
178e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GESVD
188e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GEEV
198e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GETRF
208e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_POTRF
218e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GETRS
228e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_POTRS
23e7906763SSatish Balay #elif defined(PETSC_BLASLAPACK_MKL_ONLY)
24bb638ab5SSatish Balay #define PETSC_MISSING_LAPACK_GESVD
25bb638ab5SSatish Balay #define PETSC_MISSING_LAPACK_GEEV
26ae7cfcebSSatish Balay #elif defined(PETSC_BLASLAPACK_CRAY_ONLY)
27bb638ab5SSatish Balay #define PETSC_MISSING_LAPACK_GESVD
28ae7cfcebSSatish Balay #elif defined(PETSC_BLASLAPACK_ESSL_ONLY)
29e3353558SSatish Balay #define PETSC_MISSING_LAPACK_GESVD
30ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_GETRF
31ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_GETRS
32ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_POTRF
33ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_POTRS
34bb638ab5SSatish Balay #endif
35bb638ab5SSatish Balay 
368f4c8dbaSBarry Smith /*
37633a50d3SSatish Balay    This include file on the Cray T3D/T3E defines the interface between
38217f3c9bSSatish Balay   Fortran and C representations of character strings.
398f4c8dbaSBarry Smith */
40f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
4193c39befSBarry Smith #include <fortran.h>
425392566eSBarry Smith #endif
435392566eSBarry Smith 
44aa482453SBarry Smith #if !defined(PETSC_USE_COMPLEX)
454eeb42bcSBarry Smith 
464eeb42bcSBarry Smith /*
474eeb42bcSBarry Smith     These are real case with no character string arguments
484eeb42bcSBarry Smith */
498f4c8dbaSBarry Smith 
50f1af5d2fSBarry Smith #if defined(PETSC_USES_FORTRAN_SINGLE)
518f4c8dbaSBarry Smith /*
528f4c8dbaSBarry Smith    For these machines we must call the single precision Fortran version
538f4c8dbaSBarry Smith */
548f4c8dbaSBarry Smith #define DGEQRF   SGEQRF
558f4c8dbaSBarry Smith #define DGETRF   SGETRF
568f4c8dbaSBarry Smith #define DDOT     SDOT
578f4c8dbaSBarry Smith #define DNRM2    SNRM2
588f4c8dbaSBarry Smith #define DSCAL    SSCAL
598f4c8dbaSBarry Smith #define DCOPY    SCOPY
608f4c8dbaSBarry Smith #define DSWAP    SSWAP
618f4c8dbaSBarry Smith #define DAXPY    SAXPY
628f4c8dbaSBarry Smith #define DASUM    SASUM
638f4c8dbaSBarry Smith #define DSORMQR  SORMQR
648f4c8dbaSBarry Smith #define DTRTRS   STRTRS
658f4c8dbaSBarry Smith #define DPOTRF   SPOTRF
668f4c8dbaSBarry Smith #define DPOTRS   SPOTRS
678f4c8dbaSBarry Smith #define DGEMV    SGEMV
688f4c8dbaSBarry Smith #define DGETRS   SGETRS
698f4c8dbaSBarry Smith #define DGETRS   SGETRS
708f4c8dbaSBarry Smith #define DGEMM    SGEMM
718f4c8dbaSBarry Smith #define DGESVD   SGESVD
72d4fbbf0eSBarry Smith #define DGEEV    SGEEV
738f4c8dbaSBarry Smith #define DTRMV    STRMV
748f4c8dbaSBarry Smith #define DTRSL    STRSL
758f4c8dbaSBarry Smith #endif
768f4c8dbaSBarry Smith 
7701ad1a64SSatish Balay #if defined(PETSC_USE_SINGLE)
7801ad1a64SSatish Balay 
7901ad1a64SSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
80*71044d3cSBarry Smith #define LAPACKgeqrf_ sgeqrf_
81*71044d3cSBarry Smith #define LAPACKgetrf_ sgetrf_
82*71044d3cSBarry Smith #define LAPACKgetf2_ sgetf2_
83*71044d3cSBarry Smith #define BLASdot_     sdot_
84*71044d3cSBarry Smith #define BLASnrm2_    snrm2_
85*71044d3cSBarry Smith #define BLASscal_    sscal_
86*71044d3cSBarry Smith #define BLAScopy_    scopy_
87*71044d3cSBarry Smith #define BLASswap_    sswap_
88*71044d3cSBarry Smith #define BLASaxpy_    saxpy_
89*71044d3cSBarry Smith #define BLASasum_    sasum_
9001ad1a64SSatish Balay #elif defined(PETSC_HAVE_FORTRAN_CAPS)
91*71044d3cSBarry Smith #define LAPACKgeqrf_ SGEQRF
92*71044d3cSBarry Smith #define LAPACKgetrf_ SGETRF
93*71044d3cSBarry Smith #define LAPACKgetf2_ SGETF2
94*71044d3cSBarry Smith #define BLASdot_     SDOT
95*71044d3cSBarry Smith #define BLASnrm2_    SNRM2
96*71044d3cSBarry Smith #define BLASscal_    SSCAL
97*71044d3cSBarry Smith #define BLAScopy_    SCOPY
98*71044d3cSBarry Smith #define BLASswap_    SSWAP
99*71044d3cSBarry Smith #define BLASaxpy_    SAXPY
100*71044d3cSBarry Smith #define BLASasum_    SASUM
10101ad1a64SSatish Balay #else
102*71044d3cSBarry Smith #define LAPACKgeqrf_ sgeqrf
103*71044d3cSBarry Smith #define LAPACKgetrf_ sgetrf
104*71044d3cSBarry Smith #define LAPACKgetf2_ sgetf2
105*71044d3cSBarry Smith #define BLASdot_     sdot
106*71044d3cSBarry Smith #define BLASnrm2_    snrm2
107*71044d3cSBarry Smith #define BLASscal_    sscal
108*71044d3cSBarry Smith #define BLAScopy_    scopy
109*71044d3cSBarry Smith #define BLASswap_    sswap
110*71044d3cSBarry Smith #define BLASaxpy_    saxpy
111*71044d3cSBarry Smith #define BLASasum_    sasum
11201ad1a64SSatish Balay #endif
11301ad1a64SSatish Balay 
11401ad1a64SSatish Balay #else
11501ad1a64SSatish Balay 
116ae7cfcebSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
117*71044d3cSBarry Smith #define LAPACKgeqrf_ dgeqrf_
118*71044d3cSBarry Smith #define LAPACKgetrf_ dgetrf_
119*71044d3cSBarry Smith #define LAPACKgetf2_ dgetf2_
120*71044d3cSBarry Smith #define BLASdot_     ddot_
121*71044d3cSBarry Smith #define BLASnrm2_    dnrm2_
122*71044d3cSBarry Smith #define BLASscal_    dscal_
123*71044d3cSBarry Smith #define BLAScopy_    dcopy_
124*71044d3cSBarry Smith #define BLASswap_    dswap_
125*71044d3cSBarry Smith #define BLASaxpy_    daxpy_
126*71044d3cSBarry Smith #define BLASasum_    dasum_
127aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
128*71044d3cSBarry Smith #define LAPACKgeqrf_ DGEQRF
129*71044d3cSBarry Smith #define LAPACKgetrf_ DGETRF
130*71044d3cSBarry Smith #define LAPACKgetf2_ DGETF2
131*71044d3cSBarry Smith #define BLASdot_     DDOT
132*71044d3cSBarry Smith #define BLASnrm2_    DNRM2
133*71044d3cSBarry Smith #define BLASscal_    DSCAL
134*71044d3cSBarry Smith #define BLAScopy_    DCOPY
135*71044d3cSBarry Smith #define BLASswap_    DSWAP
136*71044d3cSBarry Smith #define BLASaxpy_    DAXPY
137*71044d3cSBarry Smith #define BLASasum_    DASUM
13825fce39dSBarry Smith #else
139*71044d3cSBarry Smith #define LAPACKgeqrf_ dgeqrf
140*71044d3cSBarry Smith #define LAPACKgetrf_ dgetrf
141*71044d3cSBarry Smith #define LAPACKgetf2_ dgetf2
142*71044d3cSBarry Smith #define BLASdot_     ddot
143*71044d3cSBarry Smith #define BLASnrm2_    dnrm2
144*71044d3cSBarry Smith #define BLASscal_    dscal
145*71044d3cSBarry Smith #define BLAScopy_    dcopy
146*71044d3cSBarry Smith #define BLASswap_    dswap
147*71044d3cSBarry Smith #define BLASaxpy_    daxpy
148*71044d3cSBarry Smith #define BLASasum_    dasum
149a1e12872SBarry Smith #endif
150a1e12872SBarry Smith 
15101ad1a64SSatish Balay #endif
15201ad1a64SSatish Balay 
1534eeb42bcSBarry Smith /*
1544eeb42bcSBarry Smith    Real with character string arguments.
1554eeb42bcSBarry Smith */
156f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
1578f4c8dbaSBarry Smith /*
1588f4c8dbaSBarry Smith    Note that this assumes that machines which use cptofcd() use
159aa482453SBarry Smith   the PETSC_HAVE_FORTRAN_CAPS option. This is true on the Cray T3D/T3E.
1608f4c8dbaSBarry Smith */
161*71044d3cSBarry Smith #define LAPACKormqr_(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*71044d3cSBarry Smith #define LAPACKtrtrs_(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*71044d3cSBarry Smith #define LAPACKpotrf_(a,b,c,d,e)                   DPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
164*71044d3cSBarry Smith #define LAPACKpotrs_(a,b,c,d,e,f,g,h)             DPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h))
165*71044d3cSBarry Smith #define BLASgemv_(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*71044d3cSBarry Smith #define LAPACKgetrs_(a,b,c,d,e,f,g,h,i)           DGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
167*71044d3cSBarry Smith #define BLASgemm_(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))
168*71044d3cSBarry Smith #define LAPACKgesvd_(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))
169*71044d3cSBarry Smith #define LAPACKgeev_(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))
170*71044d3cSBarry Smith #define BLAStrmv_  DTRMV
171*71044d3cSBarry Smith #define LAPACKtrsl_  DTRSL
172*71044d3cSBarry Smith #define LAPACKgetrf_ DGETRF
173516d1546SSatish Balay 
174516d1546SSatish Balay #elif defined(PETSC_USE_SINGLE)
175516d1546SSatish Balay 
176516d1546SSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
177*71044d3cSBarry Smith #define LAPACKormqr_ sormqr_
178*71044d3cSBarry Smith #define LAPACKtrtrs_ strtrs_
179*71044d3cSBarry Smith #define LAPACKpotrf_ spotrf_
180*71044d3cSBarry Smith #define LAPACKpotrs_ spotrs_
181*71044d3cSBarry Smith #define BLASgemv_  sgemv_
182*71044d3cSBarry Smith #define LAPACKgetrs_ sgetrs_
183*71044d3cSBarry Smith #define BLAStrmv_  strmv_
184*71044d3cSBarry Smith #define LAPACKtrsl_  strsl_
185*71044d3cSBarry Smith #define BLASgemm_  sgemm_
186*71044d3cSBarry Smith #define LAPACKgesvd_ sgesvd_
187*71044d3cSBarry Smith #define LAPACKgeev_  sgeev_
188516d1546SSatish Balay #elif defined(PETSC_HAVE_FORTRAN_CAPS)
189*71044d3cSBarry Smith #define LAPACKormqr_ SORMQR
190*71044d3cSBarry Smith #define LAPACKtrtrs_ STRTRS
191*71044d3cSBarry Smith #define LAPACKpotrf_ SPOTRF
192*71044d3cSBarry Smith #define LAPACKpotrs_ SPOTRS
193*71044d3cSBarry Smith #define BLASgemv_  SGEMV
194*71044d3cSBarry Smith #define LAPACKgetrs_ SGETRS
195*71044d3cSBarry Smith #define BLAStrmv_  STRMV
196*71044d3cSBarry Smith #define LAPACKtrsl_  STRSL
197*71044d3cSBarry Smith #define LAPACKgesvd_ SGESVD
198*71044d3cSBarry Smith #define LAPACKgeev_  SGEEV
199*71044d3cSBarry Smith #define BLASgemm_  SGEMM
200516d1546SSatish Balay #else
201*71044d3cSBarry Smith #define LAPACKormqr_ sormqr
202*71044d3cSBarry Smith #define LAPACKtrtrs_ strtrs
203*71044d3cSBarry Smith #define LAPACKpotrf_ spotrf
204*71044d3cSBarry Smith #define LAPACKpotrs_ spotrs
205*71044d3cSBarry Smith #define BLASgemv_  sgemv
206*71044d3cSBarry Smith #define LAPACKgetrs_ sgetrs
207*71044d3cSBarry Smith #define BLAStrmv_  strmv
208*71044d3cSBarry Smith #define LAPACKtrsl_  strsl
209*71044d3cSBarry Smith #define BLASgemm_  sgemm
210*71044d3cSBarry Smith #define LAPACKgesvd_ sgesvd
211*71044d3cSBarry Smith #define LAPACKgeev_  sgeev
212516d1546SSatish Balay #endif
213516d1546SSatish Balay 
214516d1546SSatish Balay #else /* PETSC_USE_SINGLE */
215516d1546SSatish Balay 
216516d1546SSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
217*71044d3cSBarry Smith #define LAPACKormqr_ dormqr_
218*71044d3cSBarry Smith #define LAPACKtrtrs_ dtrtrs_
219*71044d3cSBarry Smith #define LAPACKpotrf_ dpotrf_
220*71044d3cSBarry Smith #define LAPACKpotrs_ dpotrs_
221*71044d3cSBarry Smith #define BLASgemv_  dgemv_
222*71044d3cSBarry Smith #define LAPACKgetrs_ dgetrs_
223*71044d3cSBarry Smith #define BLAStrmv_  dtrmv_
224*71044d3cSBarry Smith #define LAPACKtrsl_  dtrsl_
225*71044d3cSBarry Smith #define BLASgemm_  dgemm_
226*71044d3cSBarry Smith #define LAPACKgesvd_ dgesvd_
227*71044d3cSBarry Smith #define LAPACKgeev_  dgeev_
228aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
229*71044d3cSBarry Smith #define LAPACKormqr_ DORMQR
230*71044d3cSBarry Smith #define LAPACKtrtrs_ DTRTRS
231*71044d3cSBarry Smith #define LAPACKpotrf_ DPOTRF
232*71044d3cSBarry Smith #define LAPACKpotrs_ DPOTRS
233*71044d3cSBarry Smith #define BLASgemv_  DGEMV
234*71044d3cSBarry Smith #define LAPACKgetrs_ DGETRS
235*71044d3cSBarry Smith #define BLAStrmv_  DTRMV
236*71044d3cSBarry Smith #define LAPACKtrsl_  DTRSL
237*71044d3cSBarry Smith #define LAPACKgesvd_ DGESVD
238*71044d3cSBarry Smith #define LAPACKgeev_  DGEEV
239*71044d3cSBarry Smith #define BLASgemm_  DGEMM
24025fce39dSBarry Smith #else
241*71044d3cSBarry Smith #define LAPACKormqr_ dormqr
242*71044d3cSBarry Smith #define LAPACKtrtrs_ dtrtrs
243*71044d3cSBarry Smith #define LAPACKpotrf_ dpotrf
244*71044d3cSBarry Smith #define LAPACKpotrs_ dpotrs
245*71044d3cSBarry Smith #define BLASgemv_  dgemv
246*71044d3cSBarry Smith #define LAPACKgetrs_ dgetrs
247*71044d3cSBarry Smith #define BLAStrmv_  dtrmv
248*71044d3cSBarry Smith #define LAPACKtrsl_  dtrsl
249*71044d3cSBarry Smith #define BLASgemm_  dgemm
250*71044d3cSBarry Smith #define LAPACKgesvd_ dgesvd
251*71044d3cSBarry Smith #define LAPACKgeev_  dgeev
252a1e12872SBarry Smith #endif
253a1e12872SBarry Smith 
254516d1546SSatish Balay #endif /* PETSC_USES_CPTOFCD */
255516d1546SSatish Balay 
256a1e12872SBarry Smith #else
2574eeb42bcSBarry Smith /*
2584eeb42bcSBarry Smith    Complex with no character string arguments
2594eeb42bcSBarry Smith */
260f1af5d2fSBarry Smith #if defined(PETSC_USES_FORTRAN_SINGLE)
2618f4c8dbaSBarry Smith #define ZGEQRF  CGEQRF
2628f4c8dbaSBarry Smith #define ZDOTC   CDOTC
2638f4c8dbaSBarry Smith #define DZNRM2  SCNRM2
2648f4c8dbaSBarry Smith #define ZSCAL   CSCAL
2658f4c8dbaSBarry Smith #define ZCOPY   CCOPY
2668f4c8dbaSBarry Smith #define ZSWAP   CSWAP
2678f4c8dbaSBarry Smith #define ZAXPY   CAXPY
2688f4c8dbaSBarry Smith #define DZASUM  SCASUM
2698f4c8dbaSBarry Smith #define ZGETRF  CGETRF
2708f4c8dbaSBarry Smith #define ZTRTRS  CTRTRS
2718f4c8dbaSBarry Smith #define ZPOTRF  CPOTRF
2728f4c8dbaSBarry Smith #define ZPOTRS  CPOTRS
2738f4c8dbaSBarry Smith #define ZGEMV   CGEMV
2748f4c8dbaSBarry Smith #define ZGETRS  CGETRS
2758f4c8dbaSBarry Smith #define ZGEMM   SGEMM
2768f4c8dbaSBarry Smith #define ZTRMV   CTRMV
277160814fdSSatish Balay #define ZTRSL   CTRSL
278633a50d3SSatish Balay #define ZGEEV   CGEEV
2798f4c8dbaSBarry Smith #endif
2808f4c8dbaSBarry Smith 
281ae7cfcebSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
282*71044d3cSBarry Smith #define LAPACKgeqrf_ zgeqrf_
283*71044d3cSBarry Smith #define LAPACKgetrf_ zgetrf_
284*71044d3cSBarry Smith #define LAPACKgetf2_ zgetf2_
285*71044d3cSBarry Smith #define BLASdot_     zdotc_
286*71044d3cSBarry Smith #define BLASnrm2_    dznrm2_
287*71044d3cSBarry Smith #define BLASscal_    zscal_
288*71044d3cSBarry Smith #define BLAScopy_    zcopy_
289*71044d3cSBarry Smith #define BLASswap_    zswap_
290*71044d3cSBarry Smith #define BLASaxpy_    zaxpy_
291*71044d3cSBarry Smith #define BLASasum_    dzasum_
292aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
293*71044d3cSBarry Smith #define LAPACKgeqrf_ ZGEQRF
294*71044d3cSBarry Smith #define LAPACKgetrf_ ZGETRF
295*71044d3cSBarry Smith #define BLASdot_     ZDOTC
296*71044d3cSBarry Smith #define BLASnrm2_    DZNRM2
297*71044d3cSBarry Smith #define BLASscal_    ZSCAL
298*71044d3cSBarry Smith #define BLAScopy_    ZCOPY
299*71044d3cSBarry Smith #define BLASswap_    ZSWAP
300*71044d3cSBarry Smith #define BLASaxpy_    ZAXPY
301*71044d3cSBarry Smith #define BLASasum_    DZASUM
30225fce39dSBarry Smith #else
303*71044d3cSBarry Smith #define LAPACKgeqrf_ zgeqrf
304*71044d3cSBarry Smith #define LAPACKgetrf_ zgetrf
305*71044d3cSBarry Smith #define LAPACKgetf2_ zgetf2
306*71044d3cSBarry Smith #define BLASdot_     zdotc
307*71044d3cSBarry Smith #define BLASnrm2_    dznrm2
308*71044d3cSBarry Smith #define BLASscal_    zscal
309*71044d3cSBarry Smith #define BLAScopy_    zcopy
310*71044d3cSBarry Smith #define BLASswap_    zswap
311*71044d3cSBarry Smith #define BLASaxpy_    zaxpy
312*71044d3cSBarry Smith #define BLASasum_    dzasum
313a1e12872SBarry Smith #endif
314a1e12872SBarry Smith 
315f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
316*71044d3cSBarry Smith #define LAPACKtrtrs_(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))
317*71044d3cSBarry Smith #define LAPACKpotrf_(a,b,c,d,e)                     ZPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
318*71044d3cSBarry Smith #define LAPACKpotrs_(a,b,c,d,e,f,g,h)               ZPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h))
319*71044d3cSBarry Smith #define BLASgemv_(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))
320*71044d3cSBarry Smith #define LAPACKgetrs_(a,b,c,d,e,f,g,h,i)             ZGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
321*71044d3cSBarry Smith #define BLASgemm_(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))
322*71044d3cSBarry Smith #define LAPACKgesvd_(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))
323*71044d3cSBarry Smith #define LAPACKgeev_(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))
324*71044d3cSBarry Smith #define BLAStrmv_    ZTRMV
325*71044d3cSBarry Smith #define LAPACKtrsl_  ZTRSL
326ae7cfcebSSatish Balay #elif defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
327*71044d3cSBarry Smith #define LAPACKtrtrs_ ztrtrs_
328*71044d3cSBarry Smith #define LAPACKpotrf_ zpotrf_
329*71044d3cSBarry Smith #define LAPACKpotrs_ zpotrs_
330*71044d3cSBarry Smith #define BLASgemv_    zgemv_
331*71044d3cSBarry Smith #define LAPACKgetrs_ zgetrs_
332*71044d3cSBarry Smith #define BLAStrmv_    ztrmv_
333*71044d3cSBarry Smith #define LAPACKtrsl_  ztrsl_
334*71044d3cSBarry Smith #define BLASgemm_    zgemm_
335*71044d3cSBarry Smith #define LAPACKgesvd_ zgesvd_
336*71044d3cSBarry Smith #define LAPACKgeev_  zgeev_
337aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
338*71044d3cSBarry Smith #define LAPACKtrtrs_ ZTRTRS
339*71044d3cSBarry Smith #define LAPACKpotrf_ ZPOTRF
340*71044d3cSBarry Smith #define LAPACKpotrs_ ZPOTRS
341*71044d3cSBarry Smith #define BLASgemv_    ZGEMV
342*71044d3cSBarry Smith #define LAPACKgetrf_ ZGETRF
343*71044d3cSBarry Smith #define LAPACKgetf2_ ZGETF2
344*71044d3cSBarry Smith #define LAPACKgetrs_ ZGETRS
345*71044d3cSBarry Smith #define BLAStrmv_    ZTRMV
346*71044d3cSBarry Smith #define LAPACKtrsl_  ZTRSL
347*71044d3cSBarry Smith #define BLASgemm_    ZGEMM
348*71044d3cSBarry Smith #define LAPACKgesvd_ ZGESVD
349*71044d3cSBarry Smith #define LAPACKgeev_  ZGEEV
35025fce39dSBarry Smith #else
351*71044d3cSBarry Smith #define LAPACKtrtrs_ ztrtrs
352*71044d3cSBarry Smith #define LAPACKpotrf_ zpotrf
353*71044d3cSBarry Smith #define LAPACKpotrs_ zpotrs
354*71044d3cSBarry Smith #define BLASgemv_    zgemv
355*71044d3cSBarry Smith #define LAPACKgetrs_ zgetrs
356*71044d3cSBarry Smith #define BLAStrmv_    ztrmv
357*71044d3cSBarry Smith #define LAPACKtrsl_  ztrsl
358*71044d3cSBarry Smith #define BLASgemm_    zgemm
359*71044d3cSBarry Smith #define LAPACKgesvd_ zgesvd
360*71044d3cSBarry Smith #define LAPACKgeev_  zgeev
361a1e12872SBarry Smith #endif
362a1e12872SBarry Smith 
363a1e12872SBarry Smith #endif
364a1e12872SBarry Smith 
365fb2e594dSBarry Smith EXTERN_C_BEGIN
366a1e12872SBarry Smith 
3678f4c8dbaSBarry Smith /*
368*71044d3cSBarry Smith    BLASdot cannot be used with COMPLEX because it cannot
3698f4c8dbaSBarry Smith    handle returing a double complex to C++.
370126c565eSBarry Smith */
371*71044d3cSBarry Smith EXTERN PetscReal BLASdot_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
372*71044d3cSBarry Smith EXTERN PetscReal BLASnrm2_(PetscBLASInt*,PetscScalar*,PetscBLASInt*);
373*71044d3cSBarry Smith EXTERN PetscReal BLASasum_(PetscBLASInt*,PetscScalar*,PetscBLASInt*);
374*71044d3cSBarry Smith EXTERN void      BLASscal_(PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
375*71044d3cSBarry Smith EXTERN void      BLAScopy_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
376*71044d3cSBarry Smith EXTERN void      BLASswap_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
377*71044d3cSBarry Smith EXTERN void      BLASaxpy_(PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
378*71044d3cSBarry Smith EXTERN void      LAPACKgetrf_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
379*71044d3cSBarry Smith EXTERN void      LAPACKgetf2_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
380*71044d3cSBarry Smith EXTERN void      LAPACKgeqrf_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
3815392566eSBarry Smith 
382f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
383112a2221SBarry Smith 
384aa482453SBarry Smith #if defined(PETSC_USE_COMPLEX)
3854ce68768SBarry Smith EXTERN void   ZORMQR(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
3864ce68768SBarry Smith EXTERN void   ZTRTRS(_fcd,_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
3874ce68768SBarry Smith EXTERN void   ZPOTRF(_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
3884ce68768SBarry Smith EXTERN void   ZGEMV(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
3894ce68768SBarry Smith EXTERN void   ZPOTRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
3904ce68768SBarry Smith EXTERN void   ZGETRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
3914ce68768SBarry Smith EXTERN void   ZGEMM(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
3924ce68768SBarry Smith EXTERN void   ZGESVD(_fcd,_fcd,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
3934ce68768SBarry Smith EXTERN void   ZGEEV(_fcd,_fcd,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
3945392566eSBarry Smith #else
3954ce68768SBarry Smith EXTERN void   DORMQR(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
3964ce68768SBarry Smith EXTERN void   DTRTRS(_fcd,_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
3974ce68768SBarry Smith EXTERN void   DPOTRF(_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
3984ce68768SBarry Smith EXTERN void   DGEMV(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
3994ce68768SBarry Smith EXTERN void   DPOTRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
4004ce68768SBarry Smith EXTERN void   DGETRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
4014ce68768SBarry Smith EXTERN void   DGEMM(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
4024ce68768SBarry Smith EXTERN void   DGESVD(_fcd,_fcd,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
4034ce68768SBarry Smith EXTERN void   DGEEV(_fcd,_fcd,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
404112a2221SBarry Smith #endif
405112a2221SBarry Smith 
406112a2221SBarry Smith #else
407*71044d3cSBarry Smith EXTERN void   LAPACKormqr_(const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
408*71044d3cSBarry Smith EXTERN void   LAPACKtrtrs_(const char*,const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
409*71044d3cSBarry Smith EXTERN void   LAPACKpotrf_(const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
410*71044d3cSBarry Smith EXTERN void   BLASgemv_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
411*71044d3cSBarry Smith EXTERN void   LAPACKpotrs_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
412*71044d3cSBarry Smith EXTERN void   LAPACKgetrs_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
413*71044d3cSBarry Smith EXTERN void   BLASgemm_(const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
414e38aa075SLois Curfman McInnes 
415e38aa075SLois Curfman McInnes /* ESSL uses a different calling sequence for dgeev(), zgeev() than LAPACK; */
416aa482453SBarry Smith #if defined(PETSC_HAVE_ESSL) && defined(PETSC_USE_COMPLEX)
417*71044d3cSBarry Smith EXTERN void   LAPACKgeev_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
418*71044d3cSBarry Smith EXTERN void   LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
419aa482453SBarry Smith #elif defined(PETSC_HAVE_ESSL)
420*71044d3cSBarry Smith EXTERN void   LAPACKgeev_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
421*71044d3cSBarry Smith EXTERN void   LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
422aa482453SBarry Smith #elif !defined(PETSC_USE_COMPLEX)
423*71044d3cSBarry Smith EXTERN void   LAPACKgeev_(const char*,const char*,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscReal*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
424*71044d3cSBarry Smith EXTERN void   LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
425d4fbbf0eSBarry Smith #else
426*71044d3cSBarry Smith EXTERN void   LAPACKgeev_(const char*,const char*,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
427*71044d3cSBarry Smith EXTERN void   LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
428d4fbbf0eSBarry Smith #endif
4295392566eSBarry Smith #endif
430a1e12872SBarry Smith 
431fb2e594dSBarry Smith EXTERN_C_END
432e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END
433a1e12872SBarry Smith #endif
434