xref: /petsc/include/petscblaslapack.h (revision 5a778de9a80f0cfb834644259271a8eeeee36697)
1*5a778de9SBarry Smith /* $Id: plapack.h,v 1.16 1996/02/19 03:52:15 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 
75392566eSBarry Smith    Another problem is charactor strings are represented differently on
85392566eSBarry Smith on some machines in C and Fortran 77. This problem comes up on the
95392566eSBarry Smith Cray T3D.  Yet another reason to hate ...
105392566eSBarry Smith 
11a1e12872SBarry Smith */
12a1e12872SBarry Smith #if !defined(_PLAPACK_H)
13a1e12872SBarry Smith #define _PLAPACK_H
14a1e12872SBarry Smith 
1519b02663SBarry Smith #include "petsc.h"
16a1e12872SBarry Smith 
175392566eSBarry Smith #if defined(PARCH_t3d)
185392566eSBarry Smith #include "fortran.h"
195392566eSBarry Smith #endif
205392566eSBarry Smith 
21a1e12872SBarry Smith #if !defined(PETSC_COMPLEX)
224eeb42bcSBarry Smith 
234eeb42bcSBarry Smith /*
244eeb42bcSBarry Smith     These are real case with no character string arguments
254eeb42bcSBarry Smith */
26227d817aSBarry Smith #if defined(PARCH_t3d)
27c0534c1cSBarry Smith #define LAgeqrf_ SGEQRF
285392566eSBarry Smith #define LAgetrf_ SGETRF
290a5e7eceSLois Curfman McInnes #define LAgetf2_ SGETRF
30a1e12872SBarry Smith #define BLdot_   SDOT
31a1e12872SBarry Smith #define BLnrm2_  SNRM2
32a1e12872SBarry Smith #define BLscal_  SSCAL
33a1e12872SBarry Smith #define BLcopy_  SCOPY
34a1e12872SBarry Smith #define BLswap_  SSWAP
35a1e12872SBarry Smith #define BLaxpy_  SAXPY
36a1e12872SBarry Smith #define BLasum_  SASUM
37227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS)
38c0534c1cSBarry Smith #define LAgeqrf_ DGEQRF
395392566eSBarry Smith #define LAgetrf_ DGETRF
40c0581c19SLois Curfman McInnes #define LAgetf2_ DGETF2
41a1e12872SBarry Smith #define BLdot_   DDOT
42a1e12872SBarry Smith #define BLnrm2_  DNRM2
43a1e12872SBarry Smith #define BLscal_  DSCAL
44a1e12872SBarry Smith #define BLcopy_  DCOPY
45a1e12872SBarry Smith #define BLswap_  DSWAP
46a1e12872SBarry Smith #define BLaxpy_  DAXPY
47a1e12872SBarry Smith #define BLasum_  DASUM
48227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE)
49c0534c1cSBarry Smith #define LAgeqrf_ dgeqrf
505392566eSBarry Smith #define LAgetrf_ dgetrf
51c0581c19SLois Curfman McInnes #define LAgetf2_ dgetf2
52a1e12872SBarry Smith #define BLdot_   ddot
53a1e12872SBarry Smith #define BLnrm2_  dnrm2
54a1e12872SBarry Smith #define BLscal_  dscal
55a1e12872SBarry Smith #define BLcopy_  dcopy
56a1e12872SBarry Smith #define BLswap_  dswap
57a1e12872SBarry Smith #define BLaxpy_  daxpy
58a1e12872SBarry Smith #define BLasum_  dasum
59a1e12872SBarry Smith #else
60c0534c1cSBarry Smith #define LAgeqrf_ dgeqrf_
615392566eSBarry Smith #define LAgetrf_ dgetrf_
62c0581c19SLois Curfman McInnes #define LAgetf2_ dgetf2_
63a1e12872SBarry Smith #define BLdot_   ddot_
64a1e12872SBarry Smith #define BLnrm2_  dnrm2_
65a1e12872SBarry Smith #define BLscal_  dscal_
66a1e12872SBarry Smith #define BLcopy_  dcopy_
67a1e12872SBarry Smith #define BLswap_  dswap_
68a1e12872SBarry Smith #define BLaxpy_  daxpy_
69a1e12872SBarry Smith #define BLasum_  dasum_
70a1e12872SBarry Smith #endif
71a1e12872SBarry Smith 
724eeb42bcSBarry Smith /*
734eeb42bcSBarry Smith    Real with character string arguments.
744eeb42bcSBarry Smith */
755392566eSBarry Smith #if defined(PARCH_t3d)
76bbb6d6a8SBarry Smith #define LAormqr_(a,b,c,d,e,f,g,h,i,j,k,l,m)  SORMQR(_cptofcd((a),1),\
77bbb6d6a8SBarry Smith              _cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m))
78bbb6d6a8SBarry Smith #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) STRTRS(_cptofcd((a),1),_cptofcd((b),1),\
79c0534c1cSBarry Smith                              _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j))
805392566eSBarry Smith #define LApotrf_(a,b,c,d,e) SPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
815392566eSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) SPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\
825392566eSBarry Smith                                          (f),(g),(h))
835392566eSBarry Smith #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) SGEMV(_cptofcd((a),1),(b),(c),(d),(e),\
845392566eSBarry Smith                                         (f),(g),(h),(i),(j),(k))
855392566eSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) SGETRS(_cptofcd((a),1),(b),(c),(d),(e),\
865392566eSBarry Smith                                         (f),(g),(h),(i))
874eeb42bcSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) SGETRS(_cptofcd((a),1),(b),(c),(d),(e),\
884eeb42bcSBarry Smith                                         (f),(g),(h),(i))
894eeb42bcSBarry Smith #define LAgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) SGEMM(_cptofcd((a),1), \
904eeb42bcSBarry Smith                                             _cptofcd((a),1),(c),(d),(e),\
914eeb42bcSBarry Smith                                         (f),(g),(h),(i),(j),(k),(l),(m))
925392566eSBarry Smith #define LAtrmv_  STRMV
935392566eSBarry Smith #define LAtrsl_  STRSL
94227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS)
95c0534c1cSBarry Smith #define LAormqr_ DORMQR
96c0534c1cSBarry Smith #define LAtrtrs_ DTRTRS
97a1e12872SBarry Smith #define LApotrf_ DPOTRF
98a1e12872SBarry Smith #define LApotrs_ DPOTRS
99a1e12872SBarry Smith #define LAgemv_  DGEMV
100a1e12872SBarry Smith #define LAgetrs_ DGETRS
101a1e12872SBarry Smith #define LAtrmv_  DTRMV
102a1e12872SBarry Smith #define LAtrsl_  DTRSL
1034eeb42bcSBarry Smith #define BLgemm_  DGEMM
104227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE)
105c0534c1cSBarry Smith #define LAormqr_ dormqr
106c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs
107a1e12872SBarry Smith #define LApotrf_ dpotrf
108a1e12872SBarry Smith #define LApotrs_ dpotrs
109a1e12872SBarry Smith #define LAgemv_  dgemv
110a1e12872SBarry Smith #define LAgetrs_ dgetrs
111a1e12872SBarry Smith #define LAtrmv_  dtrmv
112a1e12872SBarry Smith #define LAtrsl_  dtrsl
1134eeb42bcSBarry Smith #define BLgemm_  dgemm
114a1e12872SBarry Smith #else
115c0534c1cSBarry Smith #define LAormqr_ dormqr_
116c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs_
117a1e12872SBarry Smith #define LApotrf_ dpotrf_
118a1e12872SBarry Smith #define LApotrs_ dpotrs_
119a1e12872SBarry Smith #define LAgemv_  dgemv_
120a1e12872SBarry Smith #define LAgetrs_ dgetrs_
121a1e12872SBarry Smith #define LAtrmv_  dtrmv_
122a1e12872SBarry Smith #define LAtrsl_  dtrsl_
1234eeb42bcSBarry Smith #define BLgemm_  dgemm_
124a1e12872SBarry Smith #endif
125a1e12872SBarry Smith 
126a1e12872SBarry Smith #else
127a1e12872SBarry Smith 
1284eeb42bcSBarry Smith /*
1294eeb42bcSBarry Smith    Complex with no character string arguments
1304eeb42bcSBarry Smith */
131112a2221SBarry Smith #if defined(PARCH_t3d)
132c0534c1cSBarry Smith #define LAgeqrf_ CGEQRF
133a1e12872SBarry Smith #define BLdot_   CDOTC
134a1e12872SBarry Smith #define BLnrm2_  SCNRM2
135a1e12872SBarry Smith #define BLscal_  CSCAL
136a1e12872SBarry Smith #define BLcopy_  CCOPY
137a1e12872SBarry Smith #define BLswap_  CSWAP
138a1e12872SBarry Smith #define BLaxpy_  CAXPY
139a1e12872SBarry Smith #define BLasum_  SCASUM
1405392566eSBarry Smith #define LAgetrf_ CGETRF
1410a5e7eceSLois Curfman McInnes #define LAgetf2_ CGETRF
142227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS)
143c0534c1cSBarry Smith #define LAgeqrf_ ZGEQRF
144a1e12872SBarry Smith #define BLdot_   ZDOTC
145a1e12872SBarry Smith #define BLnrm2_  DZNRM2
146a1e12872SBarry Smith #define BLscal_  ZSCAL
147a1e12872SBarry Smith #define BLcopy_  ZCOPY
148a1e12872SBarry Smith #define BLswap_  ZSWAP
149a1e12872SBarry Smith #define BLaxpy_  ZAXPY
150a1e12872SBarry Smith #define BLasum_  DZASUM
151227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE)
152c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf
1535392566eSBarry Smith #define LAgetrf_ zgetrf
15408d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2
155a1e12872SBarry Smith #define BLdot_   zdotc
156a1e12872SBarry Smith #define BLnrm2_  dznrm2
157a1e12872SBarry Smith #define BLscal_  zscal
158a1e12872SBarry Smith #define BLcopy_  zcopy
159a1e12872SBarry Smith #define BLswap_  zswap
160a1e12872SBarry Smith #define BLaxpy_  zaxpy
161a1e12872SBarry Smith #define BLasum_  dzasum
162a1e12872SBarry Smith #else
163c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf_
1645392566eSBarry Smith #define LAgetrf_ zgetrf_
16508d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2_
166a1e12872SBarry Smith #define BLdot_   zdotc_
167a1e12872SBarry Smith #define BLnrm2_  dznrm2_
168a1e12872SBarry Smith #define BLscal_  zscal_
169a1e12872SBarry Smith #define BLcopy_  zcopy_
170a1e12872SBarry Smith #define BLswap_  zswap_
171a1e12872SBarry Smith #define BLaxpy_  zaxpy_
172a1e12872SBarry Smith #define BLasum_  dzasum_
173a1e12872SBarry Smith #endif
174a1e12872SBarry Smith 
1754eeb42bcSBarry Smith /*
1764eeb42bcSBarry Smith     Complex with character string arguments.
1774eeb42bcSBarry Smith   Who the F&%&^ was stupid enough to put character strings
1784eeb42bcSBarry Smith   into low-level computational kernels? It was a mistake!
1794eeb42bcSBarry Smith */
1805392566eSBarry Smith #if defined(PARCH_t3d)
181c0534c1cSBarry Smith #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) CTRTRS(_cptofcd((a),1),_cptofcd((b),1),\
182c0534c1cSBarry Smith                               _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j))
1835392566eSBarry Smith #define LApotrf_(a,b,c,d,e)       CPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
1845392566eSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) CPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\
1855392566eSBarry Smith                                          (f),(g),(h))
1865392566eSBarry Smith #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) CGEMV(_cptofcd((a),1),(b),(c),(d),(e),\
1875392566eSBarry Smith                                         (f),(g),(h),(i),(j),(k))
1885392566eSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) CGETRS(_cptofcd((a),1),(b),(c),(d),(e),\
1895392566eSBarry Smith                                         (f),(g),(h),(i))
1904eeb42bcSBarry Smith #define LAgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) SGEMM(_cptofcd((a),1), \
1914eeb42bcSBarry Smith                                             _cptofcd((a),1),(c),(d),(e),\
1924eeb42bcSBarry Smith                                         (f),(g),(h),(i),(j),(k),(l),(m))
1935392566eSBarry Smith #define LAtrmv_  CTRMV
1945392566eSBarry Smith #define LAtrsl_  CTRSL
195227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS)
196c0534c1cSBarry Smith #define LAtrtrs_ ZTRTRS
197a1e12872SBarry Smith #define LApotrf_ ZPOTRF
198a1e12872SBarry Smith #define LApotrs_ ZPOTRS
199a1e12872SBarry Smith #define LAgemv_  ZGEMV
200a1e12872SBarry Smith #define LAgetrf_ ZGETRF
20108d0dac7SLois Curfman McInnes #define LAgetf2_ ZGETF2
202a1e12872SBarry Smith #define LAgetrs_ ZGETRS
203a1e12872SBarry Smith #define LAtrmv_  ZTRMV
204a1e12872SBarry Smith #define LAtrsl_  ZTRSL
205*5a778de9SBarry Smith #define BLgemm_  ZGEMM
206227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE)
207c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs
208a1e12872SBarry Smith #define LApotrf_ zpotrf
209a1e12872SBarry Smith #define LApotrs_ zpotrs
210a1e12872SBarry Smith #define LAgemv_  zgemv
211a1e12872SBarry Smith #define LAgetrs_ zgetrs
212a1e12872SBarry Smith #define LAtrmv_  ztrmv
213a1e12872SBarry Smith #define LAtrsl_  ztrsl
214*5a778de9SBarry Smith #define BLgemm_  zgemm
215a1e12872SBarry Smith #else
216c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs_
217a1e12872SBarry Smith #define LApotrf_ zpotrf_
218a1e12872SBarry Smith #define LApotrs_ zpotrs_
219a1e12872SBarry Smith #define LAgemv_  zgemv_
220a1e12872SBarry Smith #define LAgetrs_ zgetrs_
221a1e12872SBarry Smith #define LAtrmv_  ztrmv_
222a1e12872SBarry Smith #define LAtrsl_  ztrsl_
223*5a778de9SBarry Smith #define BLgemm_  zgemm_
224a1e12872SBarry Smith #endif
225a1e12872SBarry Smith 
226a1e12872SBarry Smith #endif
227a1e12872SBarry Smith 
228a1e12872SBarry Smith #if defined(__cplusplus)
229a1e12872SBarry Smith extern "C" {
230a1e12872SBarry Smith #endif
231a1e12872SBarry Smith 
232126c565eSBarry Smith /* note that BLdot cannot be used with COMPLEX because it cannot
233126c565eSBarry Smith    handle returing a double complex!!
234126c565eSBarry Smith */
235126c565eSBarry Smith extern double BLdot_(int*,Scalar*,int*,Scalar*,int*);
2361eb62cbbSBarry Smith extern double BLnrm2_(int*,Scalar*,int*),BLasum_(int*,Scalar*,int*);
2371eb62cbbSBarry Smith extern void   BLscal_(int*,Scalar*,Scalar*,int*);
2381eb62cbbSBarry Smith extern void   BLcopy_(int*,Scalar*,int*,Scalar*,int*);
2391eb62cbbSBarry Smith extern void   BLswap_(int*,Scalar*,int*,Scalar*,int*);
2401eb62cbbSBarry Smith extern void   BLaxpy_(int*,Scalar*,Scalar*,int*,Scalar*,int*);
2411eb62cbbSBarry Smith extern void   LAgetrf_(int*,int*,Scalar*,int*,int*,int*);
242bae8960eSLois Curfman McInnes extern void   LAgetf2_(int*,int*,Scalar*,int*,int*,int*);
243c0534c1cSBarry Smith extern void   LAgeqrf_(int*,int*,Scalar*,int*,Scalar*,Scalar*,int*,int*);
2445392566eSBarry Smith 
2455392566eSBarry Smith #if defined(PARCH_t3d)
246112a2221SBarry Smith 
247112a2221SBarry Smith #if defined(PETSC_COMPLEX)
2485392566eSBarry Smith extern void   CPOTRF(_fcd,int*,Scalar*,int*,int*);
2495392566eSBarry Smith extern void   CGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
2505392566eSBarry Smith                         Scalar*,Scalar*,int*);
2515392566eSBarry Smith extern void   CPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*);
2525392566eSBarry Smith extern void   CGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
2534eeb42bcSBarry Smith extern void   CGEMM(_fcd,_fcd,int*,int*,int*,Scalar*,Scalar*,int*,
2544eeb42bcSBarry Smith                       Scalar*,int*,Scalar*,Scalar*,int*);
2555392566eSBarry Smith #else
256112a2221SBarry Smith extern void   SPOTRF(_fcd,int*,Scalar*,int*,int*);
257112a2221SBarry Smith extern void   SGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
258112a2221SBarry Smith                         Scalar*,Scalar*,int*);
259112a2221SBarry Smith extern void   SPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*);
260112a2221SBarry Smith extern void   SGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
2614eeb42bcSBarry Smith extern void   SGEMM(_fcd,_fcd,int*,int*,int*,Scalar*,Scalar*,int*,
2624eeb42bcSBarry Smith                       Scalar*,int*,Scalar*,Scalar*,int*);
263112a2221SBarry Smith #endif
264112a2221SBarry Smith 
265112a2221SBarry Smith #else
266c0534c1cSBarry Smith extern void   LAormqr_(char*,char*,int*,int*,int*,Scalar*,int*,Scalar*,Scalar*,
267c0534c1cSBarry Smith                        int*,Scalar*,int*,int*);
268c0534c1cSBarry Smith extern void   LAtrtrs_(char*,char*,char*,int*,int*,Scalar*,int*,Scalar*,int*,
269c0534c1cSBarry Smith                        int*);
2701eb62cbbSBarry Smith extern void   LApotrf_(char*,int*,Scalar*,int*,int*);
2711eb62cbbSBarry Smith extern void   LAgemv_(char*,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
272a1e12872SBarry Smith                        Scalar*,Scalar*,int*);
2731eb62cbbSBarry Smith extern void   LApotrs_(char*,int*,int*,Scalar*,int*,Scalar*,int*,int*);
2741eb62cbbSBarry Smith extern void   LAgetrs_(char*,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
2754eeb42bcSBarry Smith extern void   BLgemm_(char *,char*,int*,int*,int*,Scalar*,Scalar*,int*,
2764eeb42bcSBarry Smith                       Scalar*,int*,Scalar*,Scalar*,int*);
2775392566eSBarry Smith #endif
278a1e12872SBarry Smith 
279a1e12872SBarry Smith #if defined(__cplusplus)
28002834360SBarry Smith }
281a1e12872SBarry Smith #endif
282a1e12872SBarry Smith 
283a1e12872SBarry Smith #endif
284*5a778de9SBarry Smith 
285*5a778de9SBarry Smith 
286*5a778de9SBarry Smith 
287