xref: /petsc/include/petscblaslapack.h (revision 227d817a37c50a73d88aa8c031007e5b1fb2e4ec)
1*227d817aSBarry Smith /* $Id: plapack.h,v 1.13 1995/10/12 23:22:46 curfman 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)
23*227d817aSBarry 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
34*227d817aSBarry 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
45*227d817aSBarry 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
835392566eSBarry Smith #elif defined(PARCH_cray)
84c0534c1cSBarry Smith #define LAormqr_ SORMQR
85c0534c1cSBarry Smith #define LAtrtrs_ STRTRS
86a1e12872SBarry Smith #define LApotrf_ SPOTRF
87a1e12872SBarry Smith #define LApotrs_ SPOTRS
88a1e12872SBarry Smith #define LAgemv_  SGEMV
89a1e12872SBarry Smith #define LAgetrs_ SGETRS
90a1e12872SBarry Smith #define LAgemv_  SGEMV
91a1e12872SBarry Smith #define LAtrmv_  STRMV
92a1e12872SBarry Smith #define LAtrsl_  STRSL
93*227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS)
94c0534c1cSBarry Smith #define LAormqr_ DORMQR
95c0534c1cSBarry Smith #define LAtrtrs_ DTRTRS
96a1e12872SBarry Smith #define LApotrf_ DPOTRF
97a1e12872SBarry Smith #define LApotrs_ DPOTRS
98a1e12872SBarry Smith #define LAgemv_  DGEMV
99a1e12872SBarry Smith #define LAgetrs_ DGETRS
100a1e12872SBarry Smith #define LAtrmv_  DTRMV
101a1e12872SBarry Smith #define LAtrsl_  DTRSL
102*227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE)
103c0534c1cSBarry Smith #define LAormqr_ dormqr
104c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs
105a1e12872SBarry Smith #define LApotrf_ dpotrf
106a1e12872SBarry Smith #define LApotrs_ dpotrs
107a1e12872SBarry Smith #define LAgemv_  dgemv
108a1e12872SBarry Smith #define LAgetrs_ dgetrs
109a1e12872SBarry Smith #define LAtrmv_  dtrmv
110a1e12872SBarry Smith #define LAtrsl_  dtrsl
111a1e12872SBarry Smith #else
112c0534c1cSBarry Smith #define LAormqr_ dormqr_
113c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs_
114a1e12872SBarry Smith #define LApotrf_ dpotrf_
115a1e12872SBarry Smith #define LApotrs_ dpotrs_
116a1e12872SBarry Smith #define LAgemv_  dgemv_
117a1e12872SBarry Smith #define LAgetrs_ dgetrs_
118a1e12872SBarry Smith #define LAtrmv_  dtrmv_
119a1e12872SBarry Smith #define LAtrsl_  dtrsl_
120a1e12872SBarry Smith #endif
121a1e12872SBarry Smith 
122a1e12872SBarry Smith #else
123a1e12872SBarry Smith 
1245392566eSBarry Smith #if defined(PARCH_cray) || defined(PARCH_t3d)
125c0534c1cSBarry Smith #define LAgeqrf_ CGEQRF
126a1e12872SBarry Smith #define BLdot_   CDOTC
127a1e12872SBarry Smith #define BLnrm2_  SCNRM2
128a1e12872SBarry Smith #define BLscal_  CSCAL
129a1e12872SBarry Smith #define BLcopy_  CCOPY
130a1e12872SBarry Smith #define BLswap_  CSWAP
131a1e12872SBarry Smith #define BLaxpy_  CAXPY
132a1e12872SBarry Smith #define BLasum_  SCASUM
1335392566eSBarry Smith #define LAgetrf_ CGETRF
1340a5e7eceSLois Curfman McInnes #define LAgetf2_ CGETRF
135*227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS)
136c0534c1cSBarry Smith #define LAgeqrf_ ZGEQRF
137a1e12872SBarry Smith #define BLdot_   ZDOTC
138a1e12872SBarry Smith #define BLnrm2_  DZNRM2
139a1e12872SBarry Smith #define BLscal_  ZSCAL
140a1e12872SBarry Smith #define BLcopy_  ZCOPY
141a1e12872SBarry Smith #define BLswap_  ZSWAP
142a1e12872SBarry Smith #define BLaxpy_  ZAXPY
143a1e12872SBarry Smith #define BLasum_  DZASUM
144*227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE)
145c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf
1465392566eSBarry Smith #define LAgetrf_ zgetrf
14708d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2
148a1e12872SBarry Smith #define BLdot_   zdotc
149a1e12872SBarry Smith #define BLnrm2_  dznrm2
150a1e12872SBarry Smith #define BLscal_  zscal
151a1e12872SBarry Smith #define BLcopy_  zcopy
152a1e12872SBarry Smith #define BLswap_  zswap
153a1e12872SBarry Smith #define BLaxpy_  zaxpy
154a1e12872SBarry Smith #define BLasum_  dzasum
155a1e12872SBarry Smith #else
156c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf_
1575392566eSBarry Smith #define LAgetrf_ zgetrf_
15808d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2_
159a1e12872SBarry Smith #define BLdot_   zdotc_
160a1e12872SBarry Smith #define BLnrm2_  dznrm2_
161a1e12872SBarry Smith #define BLscal_  zscal_
162a1e12872SBarry Smith #define BLcopy_  zcopy_
163a1e12872SBarry Smith #define BLswap_  zswap_
164a1e12872SBarry Smith #define BLaxpy_  zaxpy_
165a1e12872SBarry Smith #define BLasum_  dzasum_
166a1e12872SBarry Smith #endif
167a1e12872SBarry Smith 
1685392566eSBarry Smith #if defined(PARCH_t3d)
169c0534c1cSBarry Smith #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) CTRTRS(_cptofcd((a),1),_cptofcd((b),1),\
170c0534c1cSBarry Smith                               _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j))
1715392566eSBarry Smith #define LApotrf_(a,b,c,d,e)       CPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
1725392566eSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) CPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\
1735392566eSBarry Smith                                          (f),(g),(h))
1745392566eSBarry Smith #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) CGEMV(_cptofcd((a),1),(b),(c),(d),(e),\
1755392566eSBarry Smith                                         (f),(g),(h),(i),(j),(k))
1765392566eSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) CGETRS(_cptofcd((a),1),(b),(c),(d),(e),\
1775392566eSBarry Smith                                         (f),(g),(h),(i))
1785392566eSBarry Smith #define LAtrmv_  CTRMV
1795392566eSBarry Smith #define LAtrsl_  CTRSL
1805392566eSBarry Smith #elif defined(PARCH_cray)
181c0534c1cSBarry Smith #define LAormqr_ CORMQR
182c0534c1cSBarry Smith #define LAtrtrs_ CTRTRS
183a1e12872SBarry Smith #define LApotrf_ CPOTRF
184a1e12872SBarry Smith #define LApotrs_ CPOTRS
185a1e12872SBarry Smith #define LAgetrs_ CGETRS
186a1e12872SBarry Smith #define LAgemv_  CGEMV
187a1e12872SBarry Smith #define LAtrmv_  CTRMV
188a1e12872SBarry Smith #define LAtrsl_  CTRSL
189*227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS)
190c0534c1cSBarry Smith #define LAtrtrs_ ZTRTRS
191a1e12872SBarry Smith #define LApotrf_ ZPOTRF
192a1e12872SBarry Smith #define LApotrs_ ZPOTRS
193a1e12872SBarry Smith #define LAgemv_  ZGEMV
194a1e12872SBarry Smith #define LAgetrf_ ZGETRF
19508d0dac7SLois Curfman McInnes #define LAgetf2_ ZGETF2
196a1e12872SBarry Smith #define LAgetrs_ ZGETRS
197a1e12872SBarry Smith #define LAtrmv_  ZTRMV
198a1e12872SBarry Smith #define LAtrsl_  ZTRSL
199*227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE)
200c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs
201a1e12872SBarry Smith #define LApotrf_ zpotrf
202a1e12872SBarry Smith #define LApotrs_ zpotrs
203a1e12872SBarry Smith #define LAgemv_  zgemv
204a1e12872SBarry Smith #define LAgetrs_ zgetrs
205a1e12872SBarry Smith #define LAtrmv_  ztrmv
206a1e12872SBarry Smith #define LAtrsl_  ztrsl
207a1e12872SBarry Smith #else
208c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs_
209a1e12872SBarry Smith #define LApotrf_ zpotrf_
210a1e12872SBarry Smith #define LApotrs_ zpotrs_
211a1e12872SBarry Smith #define LAgemv_  zgemv_
212a1e12872SBarry Smith #define LAgetrs_ zgetrs_
213a1e12872SBarry Smith #define LAtrmv_  ztrmv_
214a1e12872SBarry Smith #define LAtrsl_  ztrsl_
215a1e12872SBarry Smith #endif
216a1e12872SBarry Smith 
217a1e12872SBarry Smith #endif
218a1e12872SBarry Smith 
219a1e12872SBarry Smith #if defined(__cplusplus)
220a1e12872SBarry Smith extern "C" {
221a1e12872SBarry Smith #endif
222a1e12872SBarry Smith 
223126c565eSBarry Smith /* note that BLdot cannot be used with COMPLEX because it cannot
224126c565eSBarry Smith    handle returing a double complex!!
225126c565eSBarry Smith */
226126c565eSBarry Smith extern double BLdot_(int*,Scalar*,int*,Scalar*,int*);
2271eb62cbbSBarry Smith extern double BLnrm2_(int*,Scalar*,int*),BLasum_(int*,Scalar*,int*);
2281eb62cbbSBarry Smith extern void   BLscal_(int*,Scalar*,Scalar*,int*);
2291eb62cbbSBarry Smith extern void   BLcopy_(int*,Scalar*,int*,Scalar*,int*);
2301eb62cbbSBarry Smith extern void   BLswap_(int*,Scalar*,int*,Scalar*,int*);
2311eb62cbbSBarry Smith extern void   BLaxpy_(int*,Scalar*,Scalar*,int*,Scalar*,int*);
2321eb62cbbSBarry Smith extern void   LAgetrf_(int*,int*,Scalar*,int*,int*,int*);
233bae8960eSLois Curfman McInnes extern void   LAgetf2_(int*,int*,Scalar*,int*,int*,int*);
234c0534c1cSBarry Smith extern void   LAgeqrf_(int*,int*,Scalar*,int*,Scalar*,Scalar*,int*,int*);
2355392566eSBarry Smith 
2365392566eSBarry Smith #if defined(PARCH_t3d)
2375392566eSBarry Smith extern void   CPOTRF(_fcd,int*,Scalar*,int*,int*);
2385392566eSBarry Smith extern void   CGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
2395392566eSBarry Smith                         Scalar*,Scalar*,int*);
2405392566eSBarry Smith extern void   CPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*);
2415392566eSBarry Smith extern void   CGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
2425392566eSBarry Smith #else
243c0534c1cSBarry Smith extern void   LAormqr_(char*,char*,int*,int*,int*,Scalar*,int*,Scalar*,Scalar*,
244c0534c1cSBarry Smith                        int*,Scalar*,int*,int*);
245c0534c1cSBarry Smith extern void   LAtrtrs_(char*,char*,char*,int*,int*,Scalar*,int*,Scalar*,int*,
246c0534c1cSBarry Smith                        int*);
2471eb62cbbSBarry Smith extern void   LApotrf_(char*,int*,Scalar*,int*,int*);
2481eb62cbbSBarry Smith extern void   LAgemv_(char*,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
249a1e12872SBarry Smith                        Scalar*,Scalar*,int*);
2501eb62cbbSBarry Smith extern void   LApotrs_(char*,int*,int*,Scalar*,int*,Scalar*,int*,int*);
2511eb62cbbSBarry Smith extern void   LAgetrs_(char*,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
2525392566eSBarry Smith #endif
253a1e12872SBarry Smith 
254a1e12872SBarry Smith #if defined(__cplusplus)
25502834360SBarry Smith }
256a1e12872SBarry Smith #endif
257a1e12872SBarry Smith 
258a1e12872SBarry Smith #endif
259