Nektar++
Blas.hpp
Go to the documentation of this file.
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 // File: Blas.hpp
4 //
5 // For more information, please see: http://www.nektar.info
6 //
7 // The MIT License
8 //
9 // Copyright (c) 2006 Division of Applied Mathematics, Brown University (USA),
10 // Department of Aeronautics, Imperial College London (UK), and Scientific
11 // Computing and Imaging Institute, University of Utah (USA).
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining a
14 // copy of this software and associated documentation files (the "Software"),
15 // to deal in the Software without restriction, including without limitation
16 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
17 // and/or sell copies of the Software, and to permit persons to whom the
18 // Software is furnished to do so, subject to the following conditions:
19 //
20 // The above copyright notice and this permission notice shall be included
21 // in all copies or substantial portions of the Software.
22 //
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29 // DEALINGS IN THE SOFTWARE.
30 //
31 // Description: wrapper of functions around standard BLAS routines
32 //
33 ///////////////////////////////////////////////////////////////////////////////
34 
35 #ifndef NEKTAR_LIB_UTILITIES_LINEAR_ALGEBRA_BLAS_HPP
36 #define NEKTAR_LIB_UTILITIES_LINEAR_ALGEBRA_BLAS_HPP
37 
38 #include <boost/core/ignore_unused.hpp>
39 
42 
43 // Translations for using Fortran version of blas
44 namespace Blas
45 {
46 extern "C"
47 {
48  // -- BLAS Level 1:
49  void F77NAME(dcopy)(const int &n, const double *x, const int &incx,
50  double *y, const int &incy);
51  void F77NAME(scopy)(const int &n, const float *x, const int &incx, float *y,
52  const int &incy);
53  void F77NAME(daxpy)(const int &n, const double &alpha, const double *x,
54  const int &incx, const double *y, const int &incy);
55  void F77NAME(saxpy)(const int &n, const float &alpha, const float *x,
56  const int &incx, const float *y, const int &incy);
57  void F77NAME(dswap)(const int &n, double *x, const int &incx, double *y,
58  const int &incy);
59  void F77NAME(sswap)(const int &n, float *x, const int &incx, float *y,
60  const int &incy);
61  void F77NAME(dscal)(const int &n, const double &alpha, double *x,
62  const int &incx);
63  void F77NAME(sscal)(const int &n, const float &alpha, float *x,
64  const int &incx);
65  void F77NAME(drot)(const int &n, double *x, const int &incx, double *y,
66  const int &incy, const double &c, const double &s);
67  void F77NAME(srot)(const int &n, float *x, const int &incx, float *y,
68  const int &incy, const float &c, const float &s);
69  double F77NAME(ddot)(const int &n, const double *x, const int &incx,
70  const double *y, const int &incy);
71  float F77NAME(sdot)(const int &n, const float *x, const int &incx,
72  const float *y, const int &incy);
73  double F77NAME(dnrm2)(const int &n, const double *x, const int &incx);
74  float F77NAME(snrm2)(const int &n, const float *x, const int &incx);
75  double F77NAME(dasum)(const int &n, const double *x, const int &incx);
76  float F77NAME(sasum)(const int &n, const float *x, const int &incx);
77  int F77NAME(idamax)(const int &n, const double *x, const int &incx);
78  int F77NAME(isamax)(const int &n, const float *x, const int &incx);
79 
80  // -- BLAS level 2
81  void F77NAME(dgemv)(const char &trans, const int &m, const int &n,
82  const double &alpha, const double *a, const int &lda,
83  const double *x, const int &incx, const double &beta,
84  double *y, const int &incy);
85  // -- BLAS level 2
86  void F77NAME(sgemv)(const char &trans, const int &m, const int &n,
87  const float &alpha, const float *a, const int &lda,
88  const float *x, const int &incx, const float &beta,
89  float *y, const int &incy);
90 
91  void F77NAME(dgbmv)(const char &trans, const int &m, const int &n,
92  const int &kl, const int &ku, const double &alpha,
93  const double *a, const int &lda, const double *x,
94  const int &incx, const double &beta, double *y,
95  const int &incy);
96  void F77NAME(sgbmv)(const char &trans, const int &m, const int &n,
97  const int &kl, const int &ku, const float &alpha,
98  const float *a, const int &lda, const float *x,
99  const int &incx, const float &beta, float *y,
100  const int &incy);
101 
102  void F77NAME(dtpmv)(const char &uplo, const char &trans, const char &diag,
103  const int &n, const double *ap, double *x,
104  const int &incx);
105  void F77NAME(stpmv)(const char &uplo, const char &trans, const char &diag,
106  const int &n, const float *ap, float *x,
107  const int &incx);
108 
109  void F77NAME(dspmv)(const char &uplo, const int &n, const double &alpha,
110  const double *a, const double *x, const int &incx,
111  const double &beta, double *y, const int &incy);
112  void F77NAME(sspmv)(const char &uplo, const int &n, const float &alpha,
113  const float *a, const float *x, const int &incx,
114  const float &beta, float *y, const int &incy);
115 
116  void F77NAME(dsbmv)(const char &uplo, const int &m, const int &k,
117  const double &alpha, const double *a, const int &lda,
118  const double *x, const int &incx, const double &beta,
119  double *y, const int &incy);
120  void F77NAME(ssbmv)(const char &uplo, const int &m, const int &k,
121  const float &alpha, const float *a, const int &lda,
122  const float *x, const int &incx, const float &beta,
123  float *y, const int &incy);
124 
125  void F77NAME(dger)(const int &m, const int &n, const double &alpha,
126  const double *x, const int &incx, const double *y,
127  const int &incy, double *a, const int &lda);
128  void F77NAME(sger)(const int &m, const int &n, const float &alpha,
129  const float *x, const int &incx, const float *y,
130  const int &incy, float *a, const int &lda);
131 
132  // -- BLAS level 3:
133  void F77NAME(dgemm)(const char &trans, const char &transb, const int &m1,
134  const int &n, const int &k, const double &alpha,
135  const double *a, const int &lda, const double *b,
136  const int &ldb, const double &beta, double *c,
137  const int &ldc);
138  // -- BLAS level 3:
139  void F77NAME(sgemm)(const char &trans, const char &transb, const int &m1,
140  const int &n, const int &k, const float &alpha,
141  const float *a, const int &lda, const float *b,
142  const int &ldb, const float &beta, float *c,
143  const int &ldc);
144 }
145 
146 /// \brief BLAS level 1: Copy \a x to \a y
147 static inline void Dcopy(const int &n, const double *x, const int &incx,
148  double *y, const int &incy)
149 {
150  F77NAME(dcopy)(n, x, incx, y, incy);
151 }
152 
153 /// \brief BLAS level 1: y = alpha \a x plus \a y
154 static inline void Daxpy(const int &n, const double &alpha, const double *x,
155  const int &incx, const double *y, const int &incy)
156 {
157  F77NAME(daxpy)(n, alpha, x, incx, y, incy);
158 }
159 
160 /// \brief BLAS level 1: Swap \a x with \a y
161 static inline void Dswap(const int &n, double *x, const int &incx, double *y,
162  const int &incy)
163 {
164  F77NAME(dswap)(n, x, incx, y, incy);
165 }
166 
167 /// \brief BLAS level 1: x = alpha \a x
168 static inline void Dscal(const int &n, const double &alpha, double *x,
169  const int &incx)
170 {
171  F77NAME(dscal)(n, alpha, x, incx);
172 }
173 
174 /// \brief BLAS level 1: Plane rotation by c = cos(theta), s = sin(theta)
175 static inline void Drot(const int &n, double *x, const int &incx, double *y,
176  const int &incy, const double &c, const double &s)
177 {
178  F77NAME(drot)(n, x, incx, y, incy, c, s);
179 }
180 
181 /// \brief BLAS level 1: output = \f$ x^T y \f$
182 static inline double Ddot(const int &n, const double *x, const int &incx,
183  const double *y, const int &incy)
184 {
185  return F77NAME(ddot)(n, x, incx, y, incy);
186 }
187 
188 // \brief BLAS level 1: output = \f$ ||x||_2 \f$
189 
190 static inline double Dnrm2(const int &n, const double *x, const int &incx)
191 {
192  return F77NAME(dnrm2)(n, x, incx);
193 }
194 
195 /// \brief BLAS level 1: output = \f$ ||x||_1 \f$
196 static inline double Dasum(const int &n, const double *x, const int &incx)
197 {
198  return F77NAME(dasum)(n, x, incx);
199 }
200 
201 /// \brief BLAS level 1: output = 1st value where \f$ |x[i]| = max |x|_1 \f$
202 /// Note it is modified to return a value between (0,n-1) as per
203 /// the standard C convention
204 static inline int Idamax(const int &n, const double *x, const int &incx)
205 {
206  return F77NAME(idamax)(n, x, incx) - 1;
207 }
208 
209 /// \brief BLAS level 2: Matrix vector multiply A = alpha*x*y**T + A
210 /// where A[m x n]
211 static inline void Ger(const int &m, const int &n, const double &alpha,
212  const double *x, const int &incx, const double *y,
213  const int &incy, double *a, const int &lda)
214 {
215  F77NAME(dger)(m, n, alpha, x, incx, y, incy, a, lda);
216 }
217 
218 /// \brief BLAS level 2: Matrix vector multiply A = alpha*x*y**T + A
219 /// where A[m x n]
220 static inline void Ger(const int &m, const int &n, const float &alpha,
221  const float *x, const int &incx, const float *y,
222  const int &incy, float *a, const int &lda)
223 {
224  F77NAME(sger)(m, n, alpha, x, incx, y, incy, a, lda);
225 }
226 
227 /// \brief BLAS level 2: Matrix vector multiply y = A \e x where A[m x n]
228 static inline void Gemv(const char &trans, const int &m, const int &n,
229  const double &alpha, const double *a, const int &lda,
230  const double *x, const int &incx, const double &beta,
231  double *y, const int &incy)
232 {
233  F77NAME(dgemv)(trans, m, n, alpha, a, lda, x, incx, beta, y, incy);
234 }
235 
236 /// \brief BLAS level 2: Matrix vector multiply y = A \e x where A[m x n]
237 static inline void Gemv(const char &trans, const int &m, const int &n,
238  const float &alpha, const float *a, const int &lda,
239  const float *x, const int &incx, const float &beta,
240  float *y, const int &incy)
241 {
242  F77NAME(sgemv)(trans, m, n, alpha, a, lda, x, incx, beta, y, incy);
243 }
244 
245 /// \brief BLAS level 2: Matrix vector multiply y = A \e x where A[m x n]
246 static inline void Dgemv(const char &trans, const int &m, const int &n,
247  const double &alpha, const double *a, const int &lda,
248  const double *x, const int &incx, const double &beta,
249  double *y, const int &incy)
250 {
251  F77NAME(dgemv)(trans, m, n, alpha, a, lda, x, incx, beta, y, incy);
252 }
253 
254 static inline void Gbmv(const char &trans, const int &m, const int &n,
255  const int &kl, const int &ku, const double &alpha,
256  const double *a, const int &lda, const double *x,
257  const int &incx, const double &beta, double *y,
258  const int &incy)
259 {
260  F77NAME(dgbmv)(trans, m, n, kl, ku, alpha, a, lda, x, incx, beta, y, incy);
261 }
262 
263 static inline void Gbmv(const char &trans, const int &m, const int &n,
264  const int &kl, const int &ku, const float &alpha,
265  const float *a, const int &lda, const float *x,
266  const int &incx, const float &beta, float *y,
267  const int &incy)
268 {
269  F77NAME(sgbmv)(trans, m, n, kl, ku, alpha, a, lda, x, incx, beta, y, incy);
270 }
271 
272 static inline void Dgbmv(const char &trans, const int &m, const int &n,
273  const int &kl, const int &ku, const double &alpha,
274  const double *a, const int &lda, const double *x,
275  const int &incx, const double &beta, double *y,
276  const int &incy)
277 {
278  F77NAME(dgbmv)(trans, m, n, kl, ku, alpha, a, lda, x, incx, beta, y, incy);
279 }
280 
281 static inline void Tpmv(const char &uplo, const char &trans, const char &diag,
282  const int &n, const double *ap, double *x,
283  const int &incx)
284 {
285  F77NAME(dtpmv)(uplo, trans, diag, n, ap, x, incx);
286 }
287 
288 static inline void Tpmv(const char &uplo, const char &trans, const char &diag,
289  const int &n, const float *ap, float *x,
290  const int &incx)
291 {
292  F77NAME(stpmv)(uplo, trans, diag, n, ap, x, incx);
293 }
294 
295 static inline void Dtpmv(const char &uplo, const char &trans, const char &diag,
296  const int &n, const double *ap, double *x,
297  const int &incx)
298 {
299  F77NAME(dtpmv)(uplo, trans, diag, n, ap, x, incx);
300 }
301 
302 /// \brief BLAS level 2: Matrix vector multiply y = A \e x where A
303 /// is symmetric packed
304 static inline void Spmv(const char &uplo, const int &n, const double &alpha,
305  const double *a, const double *x, const int &incx,
306  const double &beta, double *y, const int &incy)
307 {
308  F77NAME(dspmv)(uplo, n, alpha, a, x, incx, beta, y, incy);
309 }
310 /// \brief BLAS level 2: Matrix vector multiply y = A \e x where A
311 /// is symmetric packed
312 static inline void Spmv(const char &uplo, const int &n, const float &alpha,
313  const float *a, const float *x, const int &incx,
314  const float &beta, float *y, const int &incy)
315 {
316  F77NAME(sspmv)(uplo, n, alpha, a, x, incx, beta, y, incy);
317 }
318 
319 /// \brief BLAS level 2: Matrix vector multiply y = A \e x where A
320 /// is symmetric packed
321 static inline void Dspmv(const char &uplo, const int &n, const double &alpha,
322  const double *a, const double *x, const int &incx,
323  const double &beta, double *y, const int &incy)
324 {
325  F77NAME(dspmv)(uplo, n, alpha, a, x, incx, beta, y, incy);
326 }
327 
328 static inline void Dsbmv(const char &uplo, const int &m, const int &k,
329  const double &alpha, const double *a, const int &lda,
330  const double *x, const int &incx, const double &beta,
331  double *y, const int &incy)
332 {
333  F77NAME(dsbmv)(uplo, m, k, alpha, a, lda, x, incx, beta, y, incy);
334 }
335 
336 /// \brief BLAS level 3: Matrix-matrix multiply C = A x B where op(A)[m x k],
337 /// op(B)[k x n], C[m x n]
338 /// DGEMM performs one of the matrix-matrix operations:
339 /// C := alpha*op( A )*op( B ) + beta*C,
340 static inline void Gemm(const char &transa, const char &transb, const int &m,
341  const int &n, const int &k, const double &alpha,
342  const double *a, const int &lda, const double *b,
343  const int &ldb, const double &beta, double *c,
344  const int &ldc)
345 {
346  F77NAME(dgemm)
347  (transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
348 }
349 
350 /// \brief BLAS level 3: Matrix-matrix multiply C = A x B where op(A)[m x k],
351 /// op(B)[k x n], C[m x n]
352 /// DGEMM performs one of the matrix-matrix operations:
353 /// C := alpha*op( A )*op( B ) + beta*C,
354 static inline void Gemm(const char &transa, const char &transb, const int &m,
355  const int &n, const int &k, const float &alpha,
356  const float *a, const int &lda, const float *b,
357  const int &ldb, const float &beta, float *c,
358  const int &ldc)
359 {
360  F77NAME(sgemm)
361  (transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
362 }
363 
364 /// \brief BLAS level 3: Matrix-matrix multiply C = A x B
365 /// where op(A)[m x k], op(B)[k x n], C[m x n]
366 /// DGEMM performs one of the matrix-matrix operations:
367 /// C := alpha*op( A )*op( B ) + beta*C,
368 static inline void Dgemm(const char &transa, const char &transb, const int &m,
369  const int &n, const int &k, const double &alpha,
370  const double *a, const int &lda, const double *b,
371  const int &ldb, const double &beta, double *c,
372  const int &ldc)
373 {
374  F77NAME(dgemm)
375  (transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
376 }
377 
378 // \brief Wrapper to mutliply two (row major) matrices together C =
379 // a*A*B + b*C
380 static inline void Cdgemm(const int M, const int N, const int K, const double a,
381  const double *A, const int ldA, const double *B,
382  const int ldB, const double b, double *C,
383  const int ldC)
384 {
385  boost::ignore_unused(ldA, ldB, ldC);
386  Dgemm('N', 'N', N, M, K, a, B, N, A, K, b, C, N);
387 }
388 } // namespace Blas
389 #endif // NEKTAR_LIB_UTILITIES_LINEAR_ALGEBRA_BLAS_HPP
#define F77NAME(x)
Fortran routines need an underscore.
Definition: TransF77.hpp:46
Definition: Blas.hpp:45
int F77NAME() idamax(const int &n, const double *x, const int &incx)
void F77NAME() sscal(const int &n, const float &alpha, float *x, const int &incx)
static void Dgemv(const char &trans, const int &m, const int &n, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
BLAS level 2: Matrix vector multiply y = A x where A[m x n].
Definition: Blas.hpp:246
static void Dgbmv(const char &trans, const int &m, const int &n, const int &kl, const int &ku, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
Definition: Blas.hpp:272
static void Dswap(const int &n, double *x, const int &incx, double *y, const int &incy)
BLAS level 1: Swap x with y.
Definition: Blas.hpp:161
void F77NAME() saxpy(const int &n, const float &alpha, const float *x, const int &incx, const float *y, const int &incy)
static void Drot(const int &n, double *x, const int &incx, double *y, const int &incy, const double &c, const double &s)
BLAS level 1: Plane rotation by c = cos(theta), s = sin(theta)
Definition: Blas.hpp:175
void F77NAME() daxpy(const int &n, const double &alpha, const double *x, const int &incx, const double *y, const int &incy)
static void Dscal(const int &n, const double &alpha, double *x, const int &incx)
BLAS level 1: x = alpha x.
Definition: Blas.hpp:168
void F77NAME() dswap(const int &n, double *x, const int &incx, double *y, const int &incy)
void F77NAME() drot(const int &n, double *x, const int &incx, double *y, const int &incy, const double &c, const double &s)
static void Gemm(const char &transa, const char &transb, const int &m, const int &n, const int &k, const double &alpha, const double *a, const int &lda, const double *b, const int &ldb, const double &beta, double *c, const int &ldc)
BLAS level 3: Matrix-matrix multiply C = A x B where op(A)[m x k], op(B)[k x n], C[m x n] DGEMM perfo...
Definition: Blas.hpp:340
double F77NAME() dasum(const int &n, const double *x, const int &incx)
void F77NAME() dtpmv(const char &uplo, const char &trans, const char &diag, const int &n, const double *ap, double *x, const int &incx)
void F77NAME() stpmv(const char &uplo, const char &trans, const char &diag, const int &n, const float *ap, float *x, const int &incx)
static void Gemv(const char &trans, const int &m, const int &n, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
BLAS level 2: Matrix vector multiply y = A x where A[m x n].
Definition: Blas.hpp:228
static double Dasum(const int &n, const double *x, const int &incx)
BLAS level 1: output = .
Definition: Blas.hpp:196
void F77NAME() dspmv(const char &uplo, const int &n, const double &alpha, const double *a, const double *x, const int &incx, const double &beta, double *y, const int &incy)
void F77NAME() dscal(const int &n, const double &alpha, double *x, const int &incx)
double F77NAME() ddot(const int &n, const double *x, const int &incx, const double *y, const int &incy)
static void Gbmv(const char &trans, const int &m, const int &n, const int &kl, const int &ku, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
Definition: Blas.hpp:254
float F77NAME() sasum(const int &n, const float *x, const int &incx)
static void Dsbmv(const char &uplo, const int &m, const int &k, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
Definition: Blas.hpp:328
static int Idamax(const int &n, const double *x, const int &incx)
BLAS level 1: output = 1st value where Note it is modified to return a value between (0,...
Definition: Blas.hpp:204
void F77NAME() ssbmv(const char &uplo, const int &m, const int &k, const float &alpha, const float *a, const int &lda, const float *x, const int &incx, const float &beta, float *y, const int &incy)
static void Dcopy(const int &n, const double *x, const int &incx, double *y, const int &incy)
BLAS level 1: Copy x to y.
Definition: Blas.hpp:147
void F77NAME() dsbmv(const char &uplo, const int &m, const int &k, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
void F77NAME() sspmv(const char &uplo, const int &n, const float &alpha, const float *a, const float *x, const int &incx, const float &beta, float *y, const int &incy)
float F77NAME() snrm2(const int &n, const float *x, const int &incx)
void F77NAME() sgbmv(const char &trans, const int &m, const int &n, const int &kl, const int &ku, const float &alpha, const float *a, const int &lda, const float *x, const int &incx, const float &beta, float *y, const int &incy)
static double Dnrm2(const int &n, const double *x, const int &incx)
Definition: Blas.hpp:190
void F77NAME() dcopy(const int &n, const double *x, const int &incx, double *y, const int &incy)
void F77NAME() sger(const int &m, const int &n, const float &alpha, const float *x, const int &incx, const float *y, const int &incy, float *a, const int &lda)
void F77NAME() sgemv(const char &trans, const int &m, const int &n, const float &alpha, const float *a, const int &lda, const float *x, const int &incx, const float &beta, float *y, const int &incy)
void F77NAME() dgbmv(const char &trans, const int &m, const int &n, const int &kl, const int &ku, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
void F77NAME() srot(const int &n, float *x, const int &incx, float *y, const int &incy, const float &c, const float &s)
void F77NAME() dgemm(const char &trans, const char &transb, const int &m1, const int &n, const int &k, const double &alpha, const double *a, const int &lda, const double *b, const int &ldb, const double &beta, double *c, const int &ldc)
void F77NAME() dgemv(const char &trans, const int &m, const int &n, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
int F77NAME() isamax(const int &n, const float *x, const int &incx)
static double Ddot(const int &n, const double *x, const int &incx, const double *y, const int &incy)
BLAS level 1: output = .
Definition: Blas.hpp:182
static void Cdgemm(const int M, const int N, const int K, const double a, const double *A, const int ldA, const double *B, const int ldB, const double b, double *C, const int ldC)
Definition: Blas.hpp:380
static void Dgemm(const char &transa, const char &transb, const int &m, const int &n, const int &k, const double &alpha, const double *a, const int &lda, const double *b, const int &ldb, const double &beta, double *c, const int &ldc)
BLAS level 3: Matrix-matrix multiply C = A x B where op(A)[m x k], op(B)[k x n], C[m x n] DGEMM perfo...
Definition: Blas.hpp:368
void F77NAME() sgemm(const char &trans, const char &transb, const int &m1, const int &n, const int &k, const float &alpha, const float *a, const int &lda, const float *b, const int &ldb, const float &beta, float *c, const int &ldc)
double F77NAME() dnrm2(const int &n, const double *x, const int &incx)
static void Tpmv(const char &uplo, const char &trans, const char &diag, const int &n, const double *ap, double *x, const int &incx)
Definition: Blas.hpp:281
float F77NAME() sdot(const int &n, const float *x, const int &incx, const float *y, const int &incy)
void F77NAME() sswap(const int &n, float *x, const int &incx, float *y, const int &incy)
static void Dspmv(const char &uplo, const int &n, const double &alpha, const double *a, const double *x, const int &incx, const double &beta, double *y, const int &incy)
BLAS level 2: Matrix vector multiply y = A x where A is symmetric packed.
Definition: Blas.hpp:321
void F77NAME() dger(const int &m, const int &n, const double &alpha, const double *x, const int &incx, const double *y, const int &incy, double *a, const int &lda)
void F77NAME() scopy(const int &n, const float *x, const int &incx, float *y, const int &incy)
static void Daxpy(const int &n, const double &alpha, const double *x, const int &incx, const double *y, const int &incy)
BLAS level 1: y = alpha x plus y.
Definition: Blas.hpp:154
static void Ger(const int &m, const int &n, const double &alpha, const double *x, const int &incx, const double *y, const int &incy, double *a, const int &lda)
BLAS level 2: Matrix vector multiply A = alpha*x*y**T + A where A[m x n].
Definition: Blas.hpp:211
static void Spmv(const char &uplo, const int &n, const double &alpha, const double *a, const double *x, const int &incx, const double &beta, double *y, const int &incy)
BLAS level 2: Matrix vector multiply y = A x where A is symmetric packed.
Definition: Blas.hpp:304
static void Dtpmv(const char &uplo, const char &trans, const char &diag, const int &n, const double *ap, double *x, const int &incx)
Definition: Blas.hpp:295
@ beta
Gauss Radau pinned at x=-1,.
Definition: PointsType.h:61