xref: /petsc/include/petscblaslapack.h (revision af6b99e9b189e8e8dab39012dffe0bbbf03b23b9)
1*af6b99e9SBarry Smith /* $Id: plapack.h,v 1.17 1996/02/27 17:53:25 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)
224eeb42bcSBarry Smith 
234eeb42bcSBarry Smith /*
244eeb42bcSBarry Smith     These are real case with no character string arguments
254eeb42bcSBarry 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 
724eeb42bcSBarry Smith /*
734eeb42bcSBarry Smith    Real with character string arguments.
744eeb42bcSBarry 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))
874eeb42bcSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) SGETRS(_cptofcd((a),1),(b),(c),(d),(e),\
884eeb42bcSBarry Smith                                         (f),(g),(h),(i))
894eeb42bcSBarry Smith #define LAgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) SGEMM(_cptofcd((a),1), \
904eeb42bcSBarry Smith                                             _cptofcd((a),1),(c),(d),(e),\
914eeb42bcSBarry Smith                                         (f),(g),(h),(i),(j),(k),(l),(m))
92*af6b99e9SBarry Smith #define LAgesvd_(a,b,c,d,e,f,g,h,i,j,k,l,m) SGESVD(_cptofcd((a),1), \
93*af6b99e9SBarry Smith                                             _cptofcd((a),1),(c),(d),(e),\
94*af6b99e9SBarry Smith                                         (f),(g),(h),(i),(j),(k),(l),(m))
955392566eSBarry Smith #define LAtrmv_  STRMV
965392566eSBarry Smith #define LAtrsl_  STRSL
97227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS)
98c0534c1cSBarry Smith #define LAormqr_ DORMQR
99c0534c1cSBarry Smith #define LAtrtrs_ DTRTRS
100a1e12872SBarry Smith #define LApotrf_ DPOTRF
101a1e12872SBarry Smith #define LApotrs_ DPOTRS
102a1e12872SBarry Smith #define LAgemv_  DGEMV
103a1e12872SBarry Smith #define LAgetrs_ DGETRS
104a1e12872SBarry Smith #define LAtrmv_  DTRMV
105a1e12872SBarry Smith #define LAtrsl_  DTRSL
106*af6b99e9SBarry Smith #define LAgesvd_ DGESVD
1074eeb42bcSBarry Smith #define BLgemm_  DGEMM
108227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE)
109c0534c1cSBarry Smith #define LAormqr_ dormqr
110c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs
111a1e12872SBarry Smith #define LApotrf_ dpotrf
112a1e12872SBarry Smith #define LApotrs_ dpotrs
113a1e12872SBarry Smith #define LAgemv_  dgemv
114a1e12872SBarry Smith #define LAgetrs_ dgetrs
115a1e12872SBarry Smith #define LAtrmv_  dtrmv
116a1e12872SBarry Smith #define LAtrsl_  dtrsl
1174eeb42bcSBarry Smith #define BLgemm_  dgemm
118*af6b99e9SBarry Smith #define LAgesvd_ dgesvd
119a1e12872SBarry Smith #else
120c0534c1cSBarry Smith #define LAormqr_ dormqr_
121c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs_
122a1e12872SBarry Smith #define LApotrf_ dpotrf_
123a1e12872SBarry Smith #define LApotrs_ dpotrs_
124a1e12872SBarry Smith #define LAgemv_  dgemv_
125a1e12872SBarry Smith #define LAgetrs_ dgetrs_
126a1e12872SBarry Smith #define LAtrmv_  dtrmv_
127a1e12872SBarry Smith #define LAtrsl_  dtrsl_
1284eeb42bcSBarry Smith #define BLgemm_  dgemm_
129*af6b99e9SBarry Smith #define LAgesvd_ dgesvd_
130a1e12872SBarry Smith #endif
131a1e12872SBarry Smith 
132a1e12872SBarry Smith #else
133a1e12872SBarry Smith 
1344eeb42bcSBarry Smith /*
1354eeb42bcSBarry Smith    Complex with no character string arguments
1364eeb42bcSBarry Smith */
137112a2221SBarry Smith #if defined(PARCH_t3d)
138c0534c1cSBarry Smith #define LAgeqrf_ CGEQRF
139a1e12872SBarry Smith #define BLdot_   CDOTC
140a1e12872SBarry Smith #define BLnrm2_  SCNRM2
141a1e12872SBarry Smith #define BLscal_  CSCAL
142a1e12872SBarry Smith #define BLcopy_  CCOPY
143a1e12872SBarry Smith #define BLswap_  CSWAP
144a1e12872SBarry Smith #define BLaxpy_  CAXPY
145a1e12872SBarry Smith #define BLasum_  SCASUM
1465392566eSBarry Smith #define LAgetrf_ CGETRF
1470a5e7eceSLois Curfman McInnes #define LAgetf2_ CGETRF
148227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS)
149c0534c1cSBarry Smith #define LAgeqrf_ ZGEQRF
150a1e12872SBarry Smith #define BLdot_   ZDOTC
151a1e12872SBarry Smith #define BLnrm2_  DZNRM2
152a1e12872SBarry Smith #define BLscal_  ZSCAL
153a1e12872SBarry Smith #define BLcopy_  ZCOPY
154a1e12872SBarry Smith #define BLswap_  ZSWAP
155a1e12872SBarry Smith #define BLaxpy_  ZAXPY
156a1e12872SBarry Smith #define BLasum_  DZASUM
157227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE)
158c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf
1595392566eSBarry Smith #define LAgetrf_ zgetrf
16008d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2
161a1e12872SBarry Smith #define BLdot_   zdotc
162a1e12872SBarry Smith #define BLnrm2_  dznrm2
163a1e12872SBarry Smith #define BLscal_  zscal
164a1e12872SBarry Smith #define BLcopy_  zcopy
165a1e12872SBarry Smith #define BLswap_  zswap
166a1e12872SBarry Smith #define BLaxpy_  zaxpy
167a1e12872SBarry Smith #define BLasum_  dzasum
168a1e12872SBarry Smith #else
169c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf_
1705392566eSBarry Smith #define LAgetrf_ zgetrf_
17108d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2_
172a1e12872SBarry Smith #define BLdot_   zdotc_
173a1e12872SBarry Smith #define BLnrm2_  dznrm2_
174a1e12872SBarry Smith #define BLscal_  zscal_
175a1e12872SBarry Smith #define BLcopy_  zcopy_
176a1e12872SBarry Smith #define BLswap_  zswap_
177a1e12872SBarry Smith #define BLaxpy_  zaxpy_
178a1e12872SBarry Smith #define BLasum_  dzasum_
179a1e12872SBarry Smith #endif
180a1e12872SBarry Smith 
1814eeb42bcSBarry Smith /*
1824eeb42bcSBarry Smith     Complex with character string arguments.
1834eeb42bcSBarry Smith   Who the F&%&^ was stupid enough to put character strings
1844eeb42bcSBarry Smith   into low-level computational kernels? It was a mistake!
1854eeb42bcSBarry Smith */
1865392566eSBarry Smith #if defined(PARCH_t3d)
187c0534c1cSBarry Smith #define LAtrtrs_(a,b,c,d,e,f,g,h,i,j) CTRTRS(_cptofcd((a),1),_cptofcd((b),1),\
188c0534c1cSBarry Smith                               _cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j))
1895392566eSBarry Smith #define LApotrf_(a,b,c,d,e)       CPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
1905392566eSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) CPOTRS(_cptofcd((a),1),(b),(c),(d),(e),\
1915392566eSBarry Smith                                          (f),(g),(h))
1925392566eSBarry Smith #define LAgemv_(a,b,c,d,e,f,g,h,i,j,k) CGEMV(_cptofcd((a),1),(b),(c),(d),(e),\
1935392566eSBarry Smith                                         (f),(g),(h),(i),(j),(k))
1945392566eSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) CGETRS(_cptofcd((a),1),(b),(c),(d),(e),\
1955392566eSBarry Smith                                         (f),(g),(h),(i))
1964eeb42bcSBarry Smith #define LAgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) SGEMM(_cptofcd((a),1), \
1974eeb42bcSBarry Smith                                             _cptofcd((a),1),(c),(d),(e),\
1984eeb42bcSBarry Smith                                         (f),(g),(h),(i),(j),(k),(l),(m))
1995392566eSBarry Smith #define LAtrmv_  CTRMV
2005392566eSBarry Smith #define LAtrsl_  CTRSL
201227d817aSBarry Smith #elif defined(HAVE_FORTRAN_CAPS)
202c0534c1cSBarry Smith #define LAtrtrs_ ZTRTRS
203a1e12872SBarry Smith #define LApotrf_ ZPOTRF
204a1e12872SBarry Smith #define LApotrs_ ZPOTRS
205a1e12872SBarry Smith #define LAgemv_  ZGEMV
206a1e12872SBarry Smith #define LAgetrf_ ZGETRF
20708d0dac7SLois Curfman McInnes #define LAgetf2_ ZGETF2
208a1e12872SBarry Smith #define LAgetrs_ ZGETRS
209a1e12872SBarry Smith #define LAtrmv_  ZTRMV
210a1e12872SBarry Smith #define LAtrsl_  ZTRSL
2115a778de9SBarry Smith #define BLgemm_  ZGEMM
212227d817aSBarry Smith #elif !defined(HAVE_FORTRAN_UNDERSCORE)
213c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs
214a1e12872SBarry Smith #define LApotrf_ zpotrf
215a1e12872SBarry Smith #define LApotrs_ zpotrs
216a1e12872SBarry Smith #define LAgemv_  zgemv
217a1e12872SBarry Smith #define LAgetrs_ zgetrs
218a1e12872SBarry Smith #define LAtrmv_  ztrmv
219a1e12872SBarry Smith #define LAtrsl_  ztrsl
2205a778de9SBarry Smith #define BLgemm_  zgemm
221a1e12872SBarry Smith #else
222c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs_
223a1e12872SBarry Smith #define LApotrf_ zpotrf_
224a1e12872SBarry Smith #define LApotrs_ zpotrs_
225a1e12872SBarry Smith #define LAgemv_  zgemv_
226a1e12872SBarry Smith #define LAgetrs_ zgetrs_
227a1e12872SBarry Smith #define LAtrmv_  ztrmv_
228a1e12872SBarry Smith #define LAtrsl_  ztrsl_
2295a778de9SBarry Smith #define BLgemm_  zgemm_
230a1e12872SBarry Smith #endif
231a1e12872SBarry Smith 
232a1e12872SBarry Smith #endif
233a1e12872SBarry Smith 
234a1e12872SBarry Smith #if defined(__cplusplus)
235a1e12872SBarry Smith extern "C" {
236a1e12872SBarry Smith #endif
237a1e12872SBarry Smith 
238126c565eSBarry Smith /* note that BLdot cannot be used with COMPLEX because it cannot
239126c565eSBarry Smith    handle returing a double complex!!
240126c565eSBarry Smith */
241126c565eSBarry Smith extern double BLdot_(int*,Scalar*,int*,Scalar*,int*);
2421eb62cbbSBarry Smith extern double BLnrm2_(int*,Scalar*,int*),BLasum_(int*,Scalar*,int*);
2431eb62cbbSBarry Smith extern void   BLscal_(int*,Scalar*,Scalar*,int*);
2441eb62cbbSBarry Smith extern void   BLcopy_(int*,Scalar*,int*,Scalar*,int*);
2451eb62cbbSBarry Smith extern void   BLswap_(int*,Scalar*,int*,Scalar*,int*);
2461eb62cbbSBarry Smith extern void   BLaxpy_(int*,Scalar*,Scalar*,int*,Scalar*,int*);
2471eb62cbbSBarry Smith extern void   LAgetrf_(int*,int*,Scalar*,int*,int*,int*);
248bae8960eSLois Curfman McInnes extern void   LAgetf2_(int*,int*,Scalar*,int*,int*,int*);
249c0534c1cSBarry Smith extern void   LAgeqrf_(int*,int*,Scalar*,int*,Scalar*,Scalar*,int*,int*);
2505392566eSBarry Smith 
2515392566eSBarry Smith #if defined(PARCH_t3d)
252112a2221SBarry Smith 
253112a2221SBarry Smith #if defined(PETSC_COMPLEX)
2545392566eSBarry Smith extern void   CPOTRF(_fcd,int*,Scalar*,int*,int*);
2555392566eSBarry Smith extern void   CGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
2565392566eSBarry Smith                         Scalar*,Scalar*,int*);
2575392566eSBarry Smith extern void   CPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*);
2585392566eSBarry Smith extern void   CGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
2594eeb42bcSBarry Smith extern void   CGEMM(_fcd,_fcd,int*,int*,int*,Scalar*,Scalar*,int*,
2604eeb42bcSBarry Smith                       Scalar*,int*,Scalar*,Scalar*,int*);
2615392566eSBarry Smith #else
262112a2221SBarry Smith extern void   SPOTRF(_fcd,int*,Scalar*,int*,int*);
263112a2221SBarry Smith extern void   SGEMV(_fcd,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
264112a2221SBarry Smith                         Scalar*,Scalar*,int*);
265112a2221SBarry Smith extern void   SPOTRS(_fcd,int*,int*,Scalar*,int*,Scalar*,int*,int*);
266112a2221SBarry Smith extern void   SGETRS(_fcd,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
2674eeb42bcSBarry Smith extern void   SGEMM(_fcd,_fcd,int*,int*,int*,Scalar*,Scalar*,int*,
2684eeb42bcSBarry Smith                       Scalar*,int*,Scalar*,Scalar*,int*);
269*af6b99e9SBarry Smith extern void   SGESVD(_fcd,_fcd,int *,int*, Scalar *,int*,Scalar*,Scalar*,
270*af6b99e9SBarry Smith                       int*,Scalar*,int*,Scalar*,int*,int*);
271112a2221SBarry Smith #endif
272112a2221SBarry Smith 
273112a2221SBarry Smith #else
274c0534c1cSBarry Smith extern void   LAormqr_(char*,char*,int*,int*,int*,Scalar*,int*,Scalar*,Scalar*,
275c0534c1cSBarry Smith                        int*,Scalar*,int*,int*);
276c0534c1cSBarry Smith extern void   LAtrtrs_(char*,char*,char*,int*,int*,Scalar*,int*,Scalar*,int*,
277c0534c1cSBarry Smith                        int*);
2781eb62cbbSBarry Smith extern void   LApotrf_(char*,int*,Scalar*,int*,int*);
2791eb62cbbSBarry Smith extern void   LAgemv_(char*,int*,int*,Scalar*,Scalar*,int*,Scalar *,int*,
280a1e12872SBarry Smith                        Scalar*,Scalar*,int*);
2811eb62cbbSBarry Smith extern void   LApotrs_(char*,int*,int*,Scalar*,int*,Scalar*,int*,int*);
2821eb62cbbSBarry Smith extern void   LAgetrs_(char*,int*,int*,Scalar*,int*,int*,Scalar*,int*,int*);
2834eeb42bcSBarry Smith extern void   BLgemm_(char *,char*,int*,int*,int*,Scalar*,Scalar*,int*,
2844eeb42bcSBarry Smith                       Scalar*,int*,Scalar*,Scalar*,int*);
285*af6b99e9SBarry Smith extern void   LAgesvd_(char *,char *,int *,int*, Scalar *,int*,Scalar*,Scalar*,
286*af6b99e9SBarry Smith                       int*,Scalar*,int*,Scalar*,int*,int*);
2875392566eSBarry Smith #endif
288a1e12872SBarry Smith 
289a1e12872SBarry Smith #if defined(__cplusplus)
29002834360SBarry Smith }
291a1e12872SBarry Smith #endif
292a1e12872SBarry Smith 
293a1e12872SBarry Smith #endif
2945a778de9SBarry Smith 
2955a778de9SBarry Smith 
2965a778de9SBarry Smith 
297