xref: /petsc/include/petscblaslapack.h (revision 112a22216b1d7258921fbc9a9d5a3fa190f1c7e8)
1*112a2221SBarry Smith /* $Id: plapack.h,v 1.14 1996/01/26 04:35:51 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 
210a5e7eceSLois Curfman McInnes /* t3d doesn't have lower level SGETF2 in library, so use SGETRF instead */
22a1e12872SBarry Smith #if !defined(PETSC_COMPLEX)
23227d817aSBarry Smith #if defined(PARCH_t3d)
24c0534c1cSBarry Smith #define LAgeqrf_ SGEQRF
255392566eSBarry Smith #define LAgetrf_ SGETRF
260a5e7eceSLois Curfman McInnes #define LAgetf2_ SGETRF
27a1e12872SBarry Smith #define BLdot_   SDOT
28a1e12872SBarry Smith #define BLnrm2_  SNRM2
29a1e12872SBarry Smith #define BLscal_  SSCAL
30a1e12872SBarry Smith #define BLcopy_  SCOPY
31a1e12872SBarry Smith #define BLswap_  SSWAP
32a1e12872SBarry Smith #define BLaxpy_  SAXPY
33a1e12872SBarry Smith #define BLasum_  SASUM
34227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS)
35c0534c1cSBarry Smith #define LAgeqrf_ DGEQRF
365392566eSBarry Smith #define LAgetrf_ DGETRF
37c0581c19SLois Curfman McInnes #define LAgetf2_ DGETF2
38a1e12872SBarry Smith #define BLdot_   DDOT
39a1e12872SBarry Smith #define BLnrm2_  DNRM2
40a1e12872SBarry Smith #define BLscal_  DSCAL
41a1e12872SBarry Smith #define BLcopy_  DCOPY
42a1e12872SBarry Smith #define BLswap_  DSWAP
43a1e12872SBarry Smith #define BLaxpy_  DAXPY
44a1e12872SBarry Smith #define BLasum_  DASUM
45227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE)
46c0534c1cSBarry Smith #define LAgeqrf_ dgeqrf
475392566eSBarry Smith #define LAgetrf_ dgetrf
48c0581c19SLois Curfman McInnes #define LAgetf2_ dgetf2
49a1e12872SBarry Smith #define BLdot_   ddot
50a1e12872SBarry Smith #define BLnrm2_  dnrm2
51a1e12872SBarry Smith #define BLscal_  dscal
52a1e12872SBarry Smith #define BLcopy_  dcopy
53a1e12872SBarry Smith #define BLswap_  dswap
54a1e12872SBarry Smith #define BLaxpy_  daxpy
55a1e12872SBarry Smith #define BLasum_  dasum
56a1e12872SBarry Smith #else
57c0534c1cSBarry Smith #define LAgeqrf_ dgeqrf_
585392566eSBarry Smith #define LAgetrf_ dgetrf_
59c0581c19SLois Curfman McInnes #define LAgetf2_ dgetf2_
60a1e12872SBarry Smith #define BLdot_   ddot_
61a1e12872SBarry Smith #define BLnrm2_  dnrm2_
62a1e12872SBarry Smith #define BLscal_  dscal_
63a1e12872SBarry Smith #define BLcopy_  dcopy_
64a1e12872SBarry Smith #define BLswap_  dswap_
65a1e12872SBarry Smith #define BLaxpy_  daxpy_
66a1e12872SBarry Smith #define BLasum_  dasum_
67a1e12872SBarry Smith #endif
68a1e12872SBarry Smith 
695392566eSBarry Smith #if defined(PARCH_t3d)
70bbb6d6a8SBarry Smith #define LAormqr_(a,b,c,d,e,f,g,h,i,j,k,l,m)  SORMQR(_cptofcd((a),1),\
71bbb6d6a8SBarry Smith              _cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m))
72bbb6d6a8SBarry Smith #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) STRTRS(_cptofcd((a),1),_cptofcd((b),1),\
73c0534c1cSBarry Smith                              _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j))
745392566eSBarry Smith #define LApotrf_(a,b,c,d,e) SPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
755392566eSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) SPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\
765392566eSBarry Smith                                          (f),(g),(h))
775392566eSBarry Smith #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) SGEMV(_cptofcd((a),1),(b),(c),(d),(e),\
785392566eSBarry Smith                                         (f),(g),(h),(i),(j),(k))
795392566eSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) SGETRS(_cptofcd((a),1),(b),(c),(d),(e),\
805392566eSBarry Smith                                         (f),(g),(h),(i))
815392566eSBarry Smith #define LAtrmv_  STRMV
825392566eSBarry Smith #define LAtrsl_  STRSL
83227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS)
84c0534c1cSBarry Smith #define LAormqr_ DORMQR
85c0534c1cSBarry Smith #define LAtrtrs_ DTRTRS
86a1e12872SBarry Smith #define LApotrf_ DPOTRF
87a1e12872SBarry Smith #define LApotrs_ DPOTRS
88a1e12872SBarry Smith #define LAgemv_  DGEMV
89a1e12872SBarry Smith #define LAgetrs_ DGETRS
90a1e12872SBarry Smith #define LAtrmv_  DTRMV
91a1e12872SBarry Smith #define LAtrsl_  DTRSL
92227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE)
93c0534c1cSBarry Smith #define LAormqr_ dormqr
94c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs
95a1e12872SBarry Smith #define LApotrf_ dpotrf
96a1e12872SBarry Smith #define LApotrs_ dpotrs
97a1e12872SBarry Smith #define LAgemv_  dgemv
98a1e12872SBarry Smith #define LAgetrs_ dgetrs
99a1e12872SBarry Smith #define LAtrmv_  dtrmv
100a1e12872SBarry Smith #define LAtrsl_  dtrsl
101a1e12872SBarry Smith #else
102c0534c1cSBarry Smith #define LAormqr_ dormqr_
103c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs_
104a1e12872SBarry Smith #define LApotrf_ dpotrf_
105a1e12872SBarry Smith #define LApotrs_ dpotrs_
106a1e12872SBarry Smith #define LAgemv_  dgemv_
107a1e12872SBarry Smith #define LAgetrs_ dgetrs_
108a1e12872SBarry Smith #define LAtrmv_  dtrmv_
109a1e12872SBarry Smith #define LAtrsl_  dtrsl_
110a1e12872SBarry Smith #endif
111a1e12872SBarry Smith 
112a1e12872SBarry Smith #else
113a1e12872SBarry Smith 
114*112a2221SBarry Smith #if defined(PARCH_t3d)
115c0534c1cSBarry Smith #define LAgeqrf_ CGEQRF
116a1e12872SBarry Smith #define BLdot_   CDOTC
117a1e12872SBarry Smith #define BLnrm2_  SCNRM2
118a1e12872SBarry Smith #define BLscal_  CSCAL
119a1e12872SBarry Smith #define BLcopy_  CCOPY
120a1e12872SBarry Smith #define BLswap_  CSWAP
121a1e12872SBarry Smith #define BLaxpy_  CAXPY
122a1e12872SBarry Smith #define BLasum_  SCASUM
1235392566eSBarry Smith #define LAgetrf_ CGETRF
1240a5e7eceSLois Curfman McInnes #define LAgetf2_ CGETRF
125227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS)
126c0534c1cSBarry Smith #define LAgeqrf_ ZGEQRF
127a1e12872SBarry Smith #define BLdot_   ZDOTC
128a1e12872SBarry Smith #define BLnrm2_  DZNRM2
129a1e12872SBarry Smith #define BLscal_  ZSCAL
130a1e12872SBarry Smith #define BLcopy_  ZCOPY
131a1e12872SBarry Smith #define BLswap_  ZSWAP
132a1e12872SBarry Smith #define BLaxpy_  ZAXPY
133a1e12872SBarry Smith #define BLasum_  DZASUM
134227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE)
135c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf
1365392566eSBarry Smith #define LAgetrf_ zgetrf
13708d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2
138a1e12872SBarry Smith #define BLdot_   zdotc
139a1e12872SBarry Smith #define BLnrm2_  dznrm2
140a1e12872SBarry Smith #define BLscal_  zscal
141a1e12872SBarry Smith #define BLcopy_  zcopy
142a1e12872SBarry Smith #define BLswap_  zswap
143a1e12872SBarry Smith #define BLaxpy_  zaxpy
144a1e12872SBarry Smith #define BLasum_  dzasum
145a1e12872SBarry Smith #else
146c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf_
1475392566eSBarry Smith #define LAgetrf_ zgetrf_
14808d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2_
149a1e12872SBarry Smith #define BLdot_   zdotc_
150a1e12872SBarry Smith #define BLnrm2_  dznrm2_
151a1e12872SBarry Smith #define BLscal_  zscal_
152a1e12872SBarry Smith #define BLcopy_  zcopy_
153a1e12872SBarry Smith #define BLswap_  zswap_
154a1e12872SBarry Smith #define BLaxpy_  zaxpy_
155a1e12872SBarry Smith #define BLasum_  dzasum_
156a1e12872SBarry Smith #endif
157a1e12872SBarry Smith 
1585392566eSBarry Smith #if defined(PARCH_t3d)
159c0534c1cSBarry Smith #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) CTRTRS(_cptofcd((a),1),_cptofcd((b),1),\
160c0534c1cSBarry Smith                               _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j))
1615392566eSBarry Smith #define LApotrf_(a,b,c,d,e)       CPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
1625392566eSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) CPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\
1635392566eSBarry Smith                                          (f),(g),(h))
1645392566eSBarry Smith #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) CGEMV(_cptofcd((a),1),(b),(c),(d),(e),\
1655392566eSBarry Smith                                         (f),(g),(h),(i),(j),(k))
1665392566eSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) CGETRS(_cptofcd((a),1),(b),(c),(d),(e),\
1675392566eSBarry Smith                                         (f),(g),(h),(i))
1685392566eSBarry Smith #define LAtrmv_  CTRMV
1695392566eSBarry Smith #define LAtrsl_  CTRSL
170227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS)
171c0534c1cSBarry Smith #define LAtrtrs_ ZTRTRS
172a1e12872SBarry Smith #define LApotrf_ ZPOTRF
173a1e12872SBarry Smith #define LApotrs_ ZPOTRS
174a1e12872SBarry Smith #define LAgemv_  ZGEMV
175a1e12872SBarry Smith #define LAgetrf_ ZGETRF
17608d0dac7SLois Curfman McInnes #define LAgetf2_ ZGETF2
177a1e12872SBarry Smith #define LAgetrs_ ZGETRS
178a1e12872SBarry Smith #define LAtrmv_  ZTRMV
179a1e12872SBarry Smith #define LAtrsl_  ZTRSL
180227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE)
181c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs
182a1e12872SBarry Smith #define LApotrf_ zpotrf
183a1e12872SBarry Smith #define LApotrs_ zpotrs
184a1e12872SBarry Smith #define LAgemv_  zgemv
185a1e12872SBarry Smith #define LAgetrs_ zgetrs
186a1e12872SBarry Smith #define LAtrmv_  ztrmv
187a1e12872SBarry Smith #define LAtrsl_  ztrsl
188a1e12872SBarry Smith #else
189c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs_
190a1e12872SBarry Smith #define LApotrf_ zpotrf_
191a1e12872SBarry Smith #define LApotrs_ zpotrs_
192a1e12872SBarry Smith #define LAgemv_  zgemv_
193a1e12872SBarry Smith #define LAgetrs_ zgetrs_
194a1e12872SBarry Smith #define LAtrmv_  ztrmv_
195a1e12872SBarry Smith #define LAtrsl_  ztrsl_
196a1e12872SBarry Smith #endif
197a1e12872SBarry Smith 
198a1e12872SBarry Smith #endif
199a1e12872SBarry Smith 
200a1e12872SBarry Smith #if defined(__cplusplus)
201a1e12872SBarry Smith extern "C" {
202a1e12872SBarry Smith #endif
203a1e12872SBarry Smith 
204126c565eSBarry Smith /* note that BLdot cannot be used with COMPLEX because it cannot
205126c565eSBarry Smith    handle returing a double complex!!
206126c565eSBarry Smith */
207126c565eSBarry Smith extern double BLdot_(int*,Scalar*,int*,Scalar*,int*);
2081eb62cbbSBarry Smith extern double BLnrm2_(int*,Scalar*,int*),BLasum_(int*,Scalar*,int*);
2091eb62cbbSBarry Smith extern void   BLscal_(int*,Scalar*,Scalar*,int*);
2101eb62cbbSBarry Smith extern void   BLcopy_(int*,Scalar*,int*,Scalar*,int*);
2111eb62cbbSBarry Smith extern void   BLswap_(int*,Scalar*,int*,Scalar*,int*);
2121eb62cbbSBarry Smith extern void   BLaxpy_(int*,Scalar*,Scalar*,int*,Scalar*,int*);
2131eb62cbbSBarry Smith extern void   LAgetrf_(int*,int*,Scalar*,int*,int*,int*);
214bae8960eSLois Curfman McInnes extern void   LAgetf2_(int*,int*,Scalar*,int*,int*,int*);
215c0534c1cSBarry Smith extern void   LAgeqrf_(int*,int*,Scalar*,int*,Scalar*,Scalar*,int*,int*);
2165392566eSBarry Smith 
2175392566eSBarry Smith #if defined(PARCH_t3d)
218*112a2221SBarry Smith 
219*112a2221SBarry Smith #if defined(PETSC_COMPLEX)
2205392566eSBarry Smith extern void   CPOTRF(_fcd,int*,Scalar*,int*,int*);
2215392566eSBarry Smith extern void   CGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
2225392566eSBarry Smith                         Scalar*,Scalar*,int*);
2235392566eSBarry Smith extern void   CPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*);
2245392566eSBarry Smith extern void   CGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
2255392566eSBarry Smith #else
226*112a2221SBarry Smith extern void   SPOTRF(_fcd,int*,Scalar*,int*,int*);
227*112a2221SBarry Smith extern void   SGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
228*112a2221SBarry Smith                         Scalar*,Scalar*,int*);
229*112a2221SBarry Smith extern void   SPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*);
230*112a2221SBarry Smith extern void   SGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
231*112a2221SBarry Smith #endif
232*112a2221SBarry Smith 
233*112a2221SBarry Smith #else
234c0534c1cSBarry Smith extern void   LAormqr_(char*,char*,int*,int*,int*,Scalar*,int*,Scalar*,Scalar*,
235c0534c1cSBarry Smith                        int*,Scalar*,int*,int*);
236c0534c1cSBarry Smith extern void   LAtrtrs_(char*,char*,char*,int*,int*,Scalar*,int*,Scalar*,int*,
237c0534c1cSBarry Smith                        int*);
2381eb62cbbSBarry Smith extern void   LApotrf_(char*,int*,Scalar*,int*,int*);
2391eb62cbbSBarry Smith extern void   LAgemv_(char*,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
240a1e12872SBarry Smith                        Scalar*,Scalar*,int*);
2411eb62cbbSBarry Smith extern void   LApotrs_(char*,int*,int*,Scalar*,int*,Scalar*,int*,int*);
2421eb62cbbSBarry Smith extern void   LAgetrs_(char*,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
2435392566eSBarry Smith #endif
244a1e12872SBarry Smith 
245a1e12872SBarry Smith #if defined(__cplusplus)
24602834360SBarry Smith }
247a1e12872SBarry Smith #endif
248a1e12872SBarry Smith 
249a1e12872SBarry Smith #endif
250