xref: /petsc/include/petscblaslapack.h (revision 08d0dac7084d68ea8f2bfd064b56199716057f22)
1*08d0dac7SLois Curfman McInnes /* $Id: plapack.h,v 1.11 1995/10/12 02:31:54 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
133*08d0dac7SLois Curfman McInnes #define LAgetf2_ CGETF2
134a1e12872SBarry Smith #elif defined(FORTRANCAPS)
135c0534c1cSBarry Smith #define LAgeqrf_ ZGEQRF
136a1e12872SBarry Smith #define BLdot_   ZDOTC
137a1e12872SBarry Smith #define BLnrm2_  DZNRM2
138a1e12872SBarry Smith #define BLscal_  ZSCAL
139a1e12872SBarry Smith #define BLcopy_  ZCOPY
140a1e12872SBarry Smith #define BLswap_  ZSWAP
141a1e12872SBarry Smith #define BLaxpy_  ZAXPY
142a1e12872SBarry Smith #define BLasum_  DZASUM
143a1e12872SBarry Smith #elif !defined(FORTRANUNDERSCORE)
144c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf
1455392566eSBarry Smith #define LAgetrf_ zgetrf
146*08d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2
147a1e12872SBarry Smith #define BLdot_   zdotc
148a1e12872SBarry Smith #define BLnrm2_  dznrm2
149a1e12872SBarry Smith #define BLscal_  zscal
150a1e12872SBarry Smith #define BLcopy_  zcopy
151a1e12872SBarry Smith #define BLswap_  zswap
152a1e12872SBarry Smith #define BLaxpy_  zaxpy
153a1e12872SBarry Smith #define BLasum_  dzasum
154a1e12872SBarry Smith #else
155c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf_
1565392566eSBarry Smith #define LAgetrf_ zgetrf_
157*08d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2_
158a1e12872SBarry Smith #define BLdot_   zdotc_
159a1e12872SBarry Smith #define BLnrm2_  dznrm2_
160a1e12872SBarry Smith #define BLscal_  zscal_
161a1e12872SBarry Smith #define BLcopy_  zcopy_
162a1e12872SBarry Smith #define BLswap_  zswap_
163a1e12872SBarry Smith #define BLaxpy_  zaxpy_
164a1e12872SBarry Smith #define BLasum_  dzasum_
165a1e12872SBarry Smith #endif
166a1e12872SBarry Smith 
1675392566eSBarry Smith #if defined(PARCH_t3d)
168c0534c1cSBarry Smith #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) CTRTRS(_cptofcd((a),1),_cptofcd((b),1),\
169c0534c1cSBarry Smith                               _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j))
1705392566eSBarry Smith #define LApotrf_(a,b,c,d,e)       CPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
1715392566eSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) CPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\
1725392566eSBarry Smith                                          (f),(g),(h))
1735392566eSBarry Smith #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) CGEMV(_cptofcd((a),1),(b),(c),(d),(e),\
1745392566eSBarry Smith                                         (f),(g),(h),(i),(j),(k))
1755392566eSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) CGETRS(_cptofcd((a),1),(b),(c),(d),(e),\
1765392566eSBarry Smith                                         (f),(g),(h),(i))
1775392566eSBarry Smith #define LAtrmv_  CTRMV
1785392566eSBarry Smith #define LAtrsl_  CTRSL
1795392566eSBarry Smith #elif defined(PARCH_cray)
180c0534c1cSBarry Smith #define LAormqr_ CORMQR
181c0534c1cSBarry Smith #define LAtrtrs_ CTRTRS
182a1e12872SBarry Smith #define LApotrf_ CPOTRF
183a1e12872SBarry Smith #define LApotrs_ CPOTRS
184a1e12872SBarry Smith #define LAgetrs_ CGETRS
185a1e12872SBarry Smith #define LAgemv_  CGEMV
186a1e12872SBarry Smith #define LAtrmv_  CTRMV
187a1e12872SBarry Smith #define LAtrsl_  CTRSL
188a1e12872SBarry Smith #elif defined(FORTRANCAPS)
189c0534c1cSBarry Smith #define LAtrtrs_ ZTRTRS
190a1e12872SBarry Smith #define LApotrf_ ZPOTRF
191a1e12872SBarry Smith #define LApotrs_ ZPOTRS
192a1e12872SBarry Smith #define LAgemv_  ZGEMV
193a1e12872SBarry Smith #define LAgetrf_ ZGETRF
194*08d0dac7SLois Curfman McInnes #define LAgetf2_ ZGETF2
195a1e12872SBarry Smith #define LAgetrs_ ZGETRS
196a1e12872SBarry Smith #define LAtrmv_  ZTRMV
197a1e12872SBarry Smith #define LAtrsl_  ZTRSL
198a1e12872SBarry Smith #elif !defined(FORTRANUNDERSCORE)
199c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs
200a1e12872SBarry Smith #define LApotrf_ zpotrf
201a1e12872SBarry Smith #define LApotrs_ zpotrs
202a1e12872SBarry Smith #define LAgemv_  zgemv
203a1e12872SBarry Smith #define LAgetrs_ zgetrs
204a1e12872SBarry Smith #define LAtrmv_  ztrmv
205a1e12872SBarry Smith #define LAtrsl_  ztrsl
206a1e12872SBarry Smith #else
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_
214a1e12872SBarry Smith #endif
215a1e12872SBarry Smith 
216a1e12872SBarry Smith #endif
217a1e12872SBarry Smith 
218a1e12872SBarry Smith #if defined(__cplusplus)
219a1e12872SBarry Smith extern "C" {
220a1e12872SBarry Smith #endif
221a1e12872SBarry Smith 
222126c565eSBarry Smith /* note that BLdot cannot be used with COMPLEX because it cannot
223126c565eSBarry Smith    handle returing a double complex!!
224126c565eSBarry Smith */
225126c565eSBarry Smith extern double BLdot_(int*,Scalar*,int*,Scalar*,int*);
2261eb62cbbSBarry Smith extern double BLnrm2_(int*,Scalar*,int*),BLasum_(int*,Scalar*,int*);
2271eb62cbbSBarry Smith extern void   BLscal_(int*,Scalar*,Scalar*,int*);
2281eb62cbbSBarry Smith extern void   BLcopy_(int*,Scalar*,int*,Scalar*,int*);
2291eb62cbbSBarry Smith extern void   BLswap_(int*,Scalar*,int*,Scalar*,int*);
2301eb62cbbSBarry Smith extern void   BLaxpy_(int*,Scalar*,Scalar*,int*,Scalar*,int*);
2311eb62cbbSBarry Smith extern void   LAgetrf_(int*,int*,Scalar*,int*,int*,int*);
232bae8960eSLois Curfman McInnes extern void   LAgetf2_(int*,int*,Scalar*,int*,int*,int*);
233c0534c1cSBarry Smith extern void   LAgeqrf_(int*,int*,Scalar*,int*,Scalar*,Scalar*,int*,int*);
2345392566eSBarry Smith 
2355392566eSBarry Smith #if defined(PARCH_t3d)
2365392566eSBarry Smith extern void   CPOTRF(_fcd,int*,Scalar*,int*,int*);
2375392566eSBarry Smith extern void   CGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
2385392566eSBarry Smith                         Scalar*,Scalar*,int*);
2395392566eSBarry Smith extern void   CPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*);
2405392566eSBarry Smith extern void   CGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
2415392566eSBarry Smith #else
242c0534c1cSBarry Smith extern void   LAormqr_(char*,char*,int*,int*,int*,Scalar*,int*,Scalar*,Scalar*,
243c0534c1cSBarry Smith                        int*,Scalar*,int*,int*);
244c0534c1cSBarry Smith extern void   LAtrtrs_(char*,char*,char*,int*,int*,Scalar*,int*,Scalar*,int*,
245c0534c1cSBarry Smith                        int*);
2461eb62cbbSBarry Smith extern void   LApotrf_(char*,int*,Scalar*,int*,int*);
2471eb62cbbSBarry Smith extern void   LAgemv_(char*,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
248a1e12872SBarry Smith                        Scalar*,Scalar*,int*);
2491eb62cbbSBarry Smith extern void   LApotrs_(char*,int*,int*,Scalar*,int*,Scalar*,int*,int*);
2501eb62cbbSBarry Smith extern void   LAgetrs_(char*,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
2515392566eSBarry Smith #endif
252a1e12872SBarry Smith 
253a1e12872SBarry Smith #if defined(__cplusplus)
25402834360SBarry Smith }
255a1e12872SBarry Smith #endif
256a1e12872SBarry Smith 
257a1e12872SBarry Smith #endif
258