xref: /petsc/include/petscblaslapack.h (revision bae8960e39ed3fe73614334f16a0d788a9bd8023)
1*bae8960eSLois Curfman McInnes /* $Id: plapack.h,v 1.10 1995/10/11 20:23:49 curfman Exp curfman $ */
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)
225392566eSBarry Smith #if defined(PARCH_cray) || defined(PARCH_t3d)
23c0534c1cSBarry Smith #define LAgeqrf_ SGEQRF
245392566eSBarry Smith #define LAgetrf_ SGETRF
25c0581c19SLois Curfman McInnes #define LAgetf2_ SGETF2
26a1e12872SBarry Smith #define BLdot_   SDOT
27a1e12872SBarry Smith #define BLnrm2_  SNRM2
28a1e12872SBarry Smith #define BLscal_  SSCAL
29a1e12872SBarry Smith #define BLcopy_  SCOPY
30a1e12872SBarry Smith #define BLswap_  SSWAP
31a1e12872SBarry Smith #define BLaxpy_  SAXPY
32a1e12872SBarry Smith #define BLasum_  SASUM
33a1e12872SBarry Smith #elif defined(FORTRANCAPS)
34c0534c1cSBarry Smith #define LAgeqrf_ DGEQRF
355392566eSBarry Smith #define LAgetrf_ DGETRF
36c0581c19SLois Curfman McInnes #define LAgetf2_ DGETF2
37a1e12872SBarry Smith #define BLdot_   DDOT
38a1e12872SBarry Smith #define BLnrm2_  DNRM2
39a1e12872SBarry Smith #define BLscal_  DSCAL
40a1e12872SBarry Smith #define BLcopy_  DCOPY
41a1e12872SBarry Smith #define BLswap_  DSWAP
42a1e12872SBarry Smith #define BLaxpy_  DAXPY
43a1e12872SBarry Smith #define BLasum_  DASUM
44a1e12872SBarry Smith #elif !defined(FORTRANUNDERSCORE)
45c0534c1cSBarry Smith #define LAgeqrf_ dgeqrf
465392566eSBarry Smith #define LAgetrf_ dgetrf
47c0581c19SLois Curfman McInnes #define LAgetf2_ dgetf2
48a1e12872SBarry Smith #define BLdot_   ddot
49a1e12872SBarry Smith #define BLnrm2_  dnrm2
50a1e12872SBarry Smith #define BLscal_  dscal
51a1e12872SBarry Smith #define BLcopy_  dcopy
52a1e12872SBarry Smith #define BLswap_  dswap
53a1e12872SBarry Smith #define BLaxpy_  daxpy
54a1e12872SBarry Smith #define BLasum_  dasum
55a1e12872SBarry Smith #else
56c0534c1cSBarry Smith #define LAgeqrf_ dgeqrf_
575392566eSBarry Smith #define LAgetrf_ dgetrf_
58c0581c19SLois Curfman McInnes #define LAgetf2_ dgetf2_
59a1e12872SBarry Smith #define BLdot_   ddot_
60a1e12872SBarry Smith #define BLnrm2_  dnrm2_
61a1e12872SBarry Smith #define BLscal_  dscal_
62a1e12872SBarry Smith #define BLcopy_  dcopy_
63a1e12872SBarry Smith #define BLswap_  dswap_
64a1e12872SBarry Smith #define BLaxpy_  daxpy_
65a1e12872SBarry Smith #define BLasum_  dasum_
66a1e12872SBarry Smith #endif
67a1e12872SBarry Smith 
685392566eSBarry Smith #if defined(PARCH_t3d)
69bbb6d6a8SBarry Smith #define LAormqr_(a,b,c,d,e,f,g,h,i,j,k,l,m)  SORMQR(_cptofcd((a),1),\
70bbb6d6a8SBarry Smith              _cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m))
71bbb6d6a8SBarry Smith #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) STRTRS(_cptofcd((a),1),_cptofcd((b),1),\
72c0534c1cSBarry Smith                              _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j))
735392566eSBarry Smith #define LApotrf_(a,b,c,d,e) SPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
745392566eSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) SPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\
755392566eSBarry Smith                                          (f),(g),(h))
765392566eSBarry Smith #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) SGEMV(_cptofcd((a),1),(b),(c),(d),(e),\
775392566eSBarry Smith                                         (f),(g),(h),(i),(j),(k))
785392566eSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) SGETRS(_cptofcd((a),1),(b),(c),(d),(e),\
795392566eSBarry Smith                                         (f),(g),(h),(i))
805392566eSBarry Smith #define LAtrmv_  STRMV
815392566eSBarry Smith #define LAtrsl_  STRSL
825392566eSBarry Smith #elif defined(PARCH_cray)
83c0534c1cSBarry Smith #define LAormqr_ SORMQR
84c0534c1cSBarry Smith #define LAtrtrs_ STRTRS
85a1e12872SBarry Smith #define LApotrf_ SPOTRF
86a1e12872SBarry Smith #define LApotrs_ SPOTRS
87a1e12872SBarry Smith #define LAgemv_  SGEMV
88a1e12872SBarry Smith #define LAgetrs_ SGETRS
89a1e12872SBarry Smith #define LAgemv_  SGEMV
90a1e12872SBarry Smith #define LAtrmv_  STRMV
91a1e12872SBarry Smith #define LAtrsl_  STRSL
92a1e12872SBarry Smith #elif defined(FORTRANCAPS)
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 #elif !defined(FORTRANUNDERSCORE)
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 #else
111c0534c1cSBarry Smith #define LAormqr_ dormqr_
112c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs_
113a1e12872SBarry Smith #define LApotrf_ dpotrf_
114a1e12872SBarry Smith #define LApotrs_ dpotrs_
115a1e12872SBarry Smith #define LAgemv_  dgemv_
116a1e12872SBarry Smith #define LAgetrs_ dgetrs_
117a1e12872SBarry Smith #define LAtrmv_  dtrmv_
118a1e12872SBarry Smith #define LAtrsl_  dtrsl_
119a1e12872SBarry Smith #endif
120a1e12872SBarry Smith 
121a1e12872SBarry Smith #else
122a1e12872SBarry Smith 
1235392566eSBarry Smith #if defined(PARCH_cray) || defined(PARCH_t3d)
124c0534c1cSBarry Smith #define LAgeqrf_ CGEQRF
125a1e12872SBarry Smith #define BLdot_   CDOTC
126a1e12872SBarry Smith #define BLnrm2_  SCNRM2
127a1e12872SBarry Smith #define BLscal_  CSCAL
128a1e12872SBarry Smith #define BLcopy_  CCOPY
129a1e12872SBarry Smith #define BLswap_  CSWAP
130a1e12872SBarry Smith #define BLaxpy_  CAXPY
131a1e12872SBarry Smith #define BLasum_  SCASUM
1325392566eSBarry Smith #define LAgetrf_ CGETRF
133a1e12872SBarry Smith #elif defined(FORTRANCAPS)
134c0534c1cSBarry Smith #define LAgeqrf_ ZGEQRF
135a1e12872SBarry Smith #define BLdot_   ZDOTC
136a1e12872SBarry Smith #define BLnrm2_  DZNRM2
137a1e12872SBarry Smith #define BLscal_  ZSCAL
138a1e12872SBarry Smith #define BLcopy_  ZCOPY
139a1e12872SBarry Smith #define BLswap_  ZSWAP
140a1e12872SBarry Smith #define BLaxpy_  ZAXPY
141a1e12872SBarry Smith #define BLasum_  DZASUM
142a1e12872SBarry Smith #elif !defined(FORTRANUNDERSCORE)
143c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf
1445392566eSBarry Smith #define LAgetrf_ zgetrf
145a1e12872SBarry Smith #define BLdot_   zdotc
146a1e12872SBarry Smith #define BLnrm2_  dznrm2
147a1e12872SBarry Smith #define BLscal_  zscal
148a1e12872SBarry Smith #define BLcopy_  zcopy
149a1e12872SBarry Smith #define BLswap_  zswap
150a1e12872SBarry Smith #define BLaxpy_  zaxpy
151a1e12872SBarry Smith #define BLasum_  dzasum
152a1e12872SBarry Smith #else
153c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf_
1545392566eSBarry Smith #define LAgetrf_ zgetrf_
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 #endif
163a1e12872SBarry Smith 
1645392566eSBarry Smith #if defined(PARCH_t3d)
165c0534c1cSBarry Smith #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) CTRTRS(_cptofcd((a),1),_cptofcd((b),1),\
166c0534c1cSBarry Smith                               _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j))
1675392566eSBarry Smith #define LApotrf_(a,b,c,d,e)       CPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
1685392566eSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) CPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\
1695392566eSBarry Smith                                          (f),(g),(h))
1705392566eSBarry Smith #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) CGEMV(_cptofcd((a),1),(b),(c),(d),(e),\
1715392566eSBarry Smith                                         (f),(g),(h),(i),(j),(k))
1725392566eSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) CGETRS(_cptofcd((a),1),(b),(c),(d),(e),\
1735392566eSBarry Smith                                         (f),(g),(h),(i))
1745392566eSBarry Smith #define LAtrmv_  CTRMV
1755392566eSBarry Smith #define LAtrsl_  CTRSL
1765392566eSBarry Smith #elif defined(PARCH_cray)
177c0534c1cSBarry Smith #define LAormqr_ CORMQR
178c0534c1cSBarry Smith #define LAtrtrs_ CTRTRS
179a1e12872SBarry Smith #define LApotrf_ CPOTRF
180a1e12872SBarry Smith #define LApotrs_ CPOTRS
181a1e12872SBarry Smith #define LAgetrs_ CGETRS
182a1e12872SBarry Smith #define LAgemv_  CGEMV
183a1e12872SBarry Smith #define LAtrmv_  CTRMV
184a1e12872SBarry Smith #define LAtrsl_  CTRSL
185a1e12872SBarry Smith #elif defined(FORTRANCAPS)
186c0534c1cSBarry Smith #define LAtrtrs_ ZTRTRS
187a1e12872SBarry Smith #define LApotrf_ ZPOTRF
188a1e12872SBarry Smith #define LApotrs_ ZPOTRS
189a1e12872SBarry Smith #define LAgemv_  ZGEMV
190a1e12872SBarry Smith #define LAgetrf_ ZGETRF
191a1e12872SBarry Smith #define LAgetrs_ ZGETRS
192a1e12872SBarry Smith #define LAtrmv_  ZTRMV
193a1e12872SBarry Smith #define LAtrsl_  ZTRSL
194a1e12872SBarry Smith #elif !defined(FORTRANUNDERSCORE)
195c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs
196a1e12872SBarry Smith #define LApotrf_ zpotrf
197a1e12872SBarry Smith #define LApotrs_ zpotrs
198a1e12872SBarry Smith #define LAgemv_  zgemv
199a1e12872SBarry Smith #define LAgetrs_ zgetrs
200a1e12872SBarry Smith #define LAtrmv_  ztrmv
201a1e12872SBarry Smith #define LAtrsl_  ztrsl
202a1e12872SBarry Smith #else
203c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs_
204a1e12872SBarry Smith #define LApotrf_ zpotrf_
205a1e12872SBarry Smith #define LApotrs_ zpotrs_
206a1e12872SBarry Smith #define LAgemv_  zgemv_
207a1e12872SBarry Smith #define LAgetrs_ zgetrs_
208a1e12872SBarry Smith #define LAtrmv_  ztrmv_
209a1e12872SBarry Smith #define LAtrsl_  ztrsl_
210a1e12872SBarry Smith #endif
211a1e12872SBarry Smith 
212a1e12872SBarry Smith #endif
213a1e12872SBarry Smith 
214a1e12872SBarry Smith #if defined(__cplusplus)
215a1e12872SBarry Smith extern "C" {
216a1e12872SBarry Smith #endif
217a1e12872SBarry Smith 
218126c565eSBarry Smith /* note that BLdot cannot be used with COMPLEX because it cannot
219126c565eSBarry Smith    handle returing a double complex!!
220126c565eSBarry Smith */
221126c565eSBarry Smith extern double BLdot_(int*,Scalar*,int*,Scalar*,int*);
2221eb62cbbSBarry Smith extern double BLnrm2_(int*,Scalar*,int*),BLasum_(int*,Scalar*,int*);
2231eb62cbbSBarry Smith extern void   BLscal_(int*,Scalar*,Scalar*,int*);
2241eb62cbbSBarry Smith extern void   BLcopy_(int*,Scalar*,int*,Scalar*,int*);
2251eb62cbbSBarry Smith extern void   BLswap_(int*,Scalar*,int*,Scalar*,int*);
2261eb62cbbSBarry Smith extern void   BLaxpy_(int*,Scalar*,Scalar*,int*,Scalar*,int*);
2271eb62cbbSBarry Smith extern void   LAgetrf_(int*,int*,Scalar*,int*,int*,int*);
228*bae8960eSLois Curfman McInnes extern void   LAgetf2_(int*,int*,Scalar*,int*,int*,int*);
229c0534c1cSBarry Smith extern void   LAgeqrf_(int*,int*,Scalar*,int*,Scalar*,Scalar*,int*,int*);
2305392566eSBarry Smith 
2315392566eSBarry Smith #if defined(PARCH_t3d)
2325392566eSBarry Smith extern void   CPOTRF(_fcd,int*,Scalar*,int*,int*);
2335392566eSBarry Smith extern void   CGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
2345392566eSBarry Smith                         Scalar*,Scalar*,int*);
2355392566eSBarry Smith extern void   CPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*);
2365392566eSBarry Smith extern void   CGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
2375392566eSBarry Smith #else
238c0534c1cSBarry Smith extern void   LAormqr_(char*,char*,int*,int*,int*,Scalar*,int*,Scalar*,Scalar*,
239c0534c1cSBarry Smith                        int*,Scalar*,int*,int*);
240c0534c1cSBarry Smith extern void   LAtrtrs_(char*,char*,char*,int*,int*,Scalar*,int*,Scalar*,int*,
241c0534c1cSBarry Smith                        int*);
2421eb62cbbSBarry Smith extern void   LApotrf_(char*,int*,Scalar*,int*,int*);
2431eb62cbbSBarry Smith extern void   LAgemv_(char*,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
244a1e12872SBarry Smith                        Scalar*,Scalar*,int*);
2451eb62cbbSBarry Smith extern void   LApotrs_(char*,int*,int*,Scalar*,int*,Scalar*,int*,int*);
2461eb62cbbSBarry Smith extern void   LAgetrs_(char*,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
2475392566eSBarry Smith #endif
248a1e12872SBarry Smith 
249a1e12872SBarry Smith #if defined(__cplusplus)
25002834360SBarry Smith }
251a1e12872SBarry Smith #endif
252a1e12872SBarry Smith 
253a1e12872SBarry Smith #endif
254