xref: /petsc/include/petscblaslapack.h (revision 4eeb42bc6e4cc6494252ded34f42f219207a425b)
1*4eeb42bcSBarry Smith /* $Id: plapack.h,v 1.15 1996/02/08 18:28:54 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)
22*4eeb42bcSBarry Smith 
23*4eeb42bcSBarry Smith /*
24*4eeb42bcSBarry Smith     These are real case with no character string arguments
25*4eeb42bcSBarry 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 
72*4eeb42bcSBarry Smith /*
73*4eeb42bcSBarry Smith    Real with character string arguments.
74*4eeb42bcSBarry 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))
87*4eeb42bcSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) SGETRS(_cptofcd((a),1),(b),(c),(d),(e),\
88*4eeb42bcSBarry Smith                                         (f),(g),(h),(i))
89*4eeb42bcSBarry Smith #define LAgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) SGEMM(_cptofcd((a),1), \
90*4eeb42bcSBarry Smith                                             _cptofcd((a),1),(c),(d),(e),\
91*4eeb42bcSBarry 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
103*4eeb42bcSBarry 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
113*4eeb42bcSBarry 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_
123*4eeb42bcSBarry Smith #define BLgemm_  dgemm_
124a1e12872SBarry Smith #endif
125a1e12872SBarry Smith 
126a1e12872SBarry Smith #else
127a1e12872SBarry Smith 
128*4eeb42bcSBarry Smith /*
129*4eeb42bcSBarry Smith    Complex with no character string arguments
130*4eeb42bcSBarry 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 
175*4eeb42bcSBarry Smith /*
176*4eeb42bcSBarry Smith     Complex with character string arguments.
177*4eeb42bcSBarry Smith   Who the F&%&^ was stupid enough to put character strings
178*4eeb42bcSBarry Smith   into low-level computational kernels? It was a mistake!
179*4eeb42bcSBarry 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))
190*4eeb42bcSBarry Smith #define LAgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) SGEMM(_cptofcd((a),1), \
191*4eeb42bcSBarry Smith                                             _cptofcd((a),1),(c),(d),(e),\
192*4eeb42bcSBarry 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
205227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE)
206c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs
207a1e12872SBarry Smith #define LApotrf_ zpotrf
208a1e12872SBarry Smith #define LApotrs_ zpotrs
209a1e12872SBarry Smith #define LAgemv_  zgemv
210a1e12872SBarry Smith #define LAgetrs_ zgetrs
211a1e12872SBarry Smith #define LAtrmv_  ztrmv
212a1e12872SBarry Smith #define LAtrsl_  ztrsl
213a1e12872SBarry Smith #else
214c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs_
215a1e12872SBarry Smith #define LApotrf_ zpotrf_
216a1e12872SBarry Smith #define LApotrs_ zpotrs_
217a1e12872SBarry Smith #define LAgemv_  zgemv_
218a1e12872SBarry Smith #define LAgetrs_ zgetrs_
219a1e12872SBarry Smith #define LAtrmv_  ztrmv_
220a1e12872SBarry Smith #define LAtrsl_  ztrsl_
221a1e12872SBarry Smith #endif
222a1e12872SBarry Smith 
223a1e12872SBarry Smith #endif
224a1e12872SBarry Smith 
225a1e12872SBarry Smith #if defined(__cplusplus)
226a1e12872SBarry Smith extern "C" {
227a1e12872SBarry Smith #endif
228a1e12872SBarry Smith 
229126c565eSBarry Smith /* note that BLdot cannot be used with COMPLEX because it cannot
230126c565eSBarry Smith    handle returing a double complex!!
231126c565eSBarry Smith */
232126c565eSBarry Smith extern double BLdot_(int*,Scalar*,int*,Scalar*,int*);
2331eb62cbbSBarry Smith extern double BLnrm2_(int*,Scalar*,int*),BLasum_(int*,Scalar*,int*);
2341eb62cbbSBarry Smith extern void   BLscal_(int*,Scalar*,Scalar*,int*);
2351eb62cbbSBarry Smith extern void   BLcopy_(int*,Scalar*,int*,Scalar*,int*);
2361eb62cbbSBarry Smith extern void   BLswap_(int*,Scalar*,int*,Scalar*,int*);
2371eb62cbbSBarry Smith extern void   BLaxpy_(int*,Scalar*,Scalar*,int*,Scalar*,int*);
2381eb62cbbSBarry Smith extern void   LAgetrf_(int*,int*,Scalar*,int*,int*,int*);
239bae8960eSLois Curfman McInnes extern void   LAgetf2_(int*,int*,Scalar*,int*,int*,int*);
240c0534c1cSBarry Smith extern void   LAgeqrf_(int*,int*,Scalar*,int*,Scalar*,Scalar*,int*,int*);
2415392566eSBarry Smith 
2425392566eSBarry Smith #if defined(PARCH_t3d)
243112a2221SBarry Smith 
244112a2221SBarry Smith #if defined(PETSC_COMPLEX)
2455392566eSBarry Smith extern void   CPOTRF(_fcd,int*,Scalar*,int*,int*);
2465392566eSBarry Smith extern void   CGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
2475392566eSBarry Smith                         Scalar*,Scalar*,int*);
2485392566eSBarry Smith extern void   CPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*);
2495392566eSBarry Smith extern void   CGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
250*4eeb42bcSBarry Smith extern void   CGEMM(_fcd,_fcd,int*,int*,int*,Scalar*,Scalar*,int*,
251*4eeb42bcSBarry Smith                       Scalar*,int*,Scalar*,Scalar*,int*);
2525392566eSBarry Smith #else
253112a2221SBarry Smith extern void   SPOTRF(_fcd,int*,Scalar*,int*,int*);
254112a2221SBarry Smith extern void   SGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
255112a2221SBarry Smith                         Scalar*,Scalar*,int*);
256112a2221SBarry Smith extern void   SPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*);
257112a2221SBarry Smith extern void   SGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
258*4eeb42bcSBarry Smith extern void   SGEMM(_fcd,_fcd,int*,int*,int*,Scalar*,Scalar*,int*,
259*4eeb42bcSBarry Smith                       Scalar*,int*,Scalar*,Scalar*,int*);
260112a2221SBarry Smith #endif
261112a2221SBarry Smith 
262112a2221SBarry Smith #else
263c0534c1cSBarry Smith extern void   LAormqr_(char*,char*,int*,int*,int*,Scalar*,int*,Scalar*,Scalar*,
264c0534c1cSBarry Smith                        int*,Scalar*,int*,int*);
265c0534c1cSBarry Smith extern void   LAtrtrs_(char*,char*,char*,int*,int*,Scalar*,int*,Scalar*,int*,
266c0534c1cSBarry Smith                        int*);
2671eb62cbbSBarry Smith extern void   LApotrf_(char*,int*,Scalar*,int*,int*);
2681eb62cbbSBarry Smith extern void   LAgemv_(char*,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
269a1e12872SBarry Smith                        Scalar*,Scalar*,int*);
2701eb62cbbSBarry Smith extern void   LApotrs_(char*,int*,int*,Scalar*,int*,Scalar*,int*,int*);
2711eb62cbbSBarry Smith extern void   LAgetrs_(char*,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
272*4eeb42bcSBarry Smith extern void   BLgemm_(char *,char*,int*,int*,int*,Scalar*,Scalar*,int*,
273*4eeb42bcSBarry Smith                       Scalar*,int*,Scalar*,Scalar*,int*);
2745392566eSBarry Smith #endif
275a1e12872SBarry Smith 
276a1e12872SBarry Smith #if defined(__cplusplus)
27702834360SBarry Smith }
278a1e12872SBarry Smith #endif
279a1e12872SBarry Smith 
280a1e12872SBarry Smith #endif
281