Reference documentation for deal.II version 9.0.0
lapack_templates.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 2005 - 2018 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE at
12 // the top level of the deal.II distribution.
13 //
14 // ---------------------------------------------------------------------
15 
16 
17 #ifndef dealii_lapack_templates_h
18 #define dealii_lapack_templates_h
19 
20 #include <deal.II/base/config.h>
21 #include <deal.II/lac/lapack_support.h>
22 
23 #ifdef DEAL_II_HAVE_FP_EXCEPTIONS
24 #include <cfenv>
25 #endif
26 
27 extern "C"
28 {
29 // vector update of the form y += alpha*x with a scalar, x,y vectors
30  void daxpy_ (const ::types::blas_int *n, const double *alpha, const double *x,
31  const ::types::blas_int *incx, double *y, const ::types::blas_int *incy);
32  void saxpy_ (const ::types::blas_int *n, const float *alpha, const float *x,
33  const ::types::blas_int *incx, float *y, const ::types::blas_int *incy);
34 // General Matrix
35 // Matrix vector product
36  void dgemv_ (const char *trans, const ::types::blas_int *m, const ::types::blas_int *n,
37  const double *alpha, const double *A, const ::types::blas_int *lda,
38  const double *x, const ::types::blas_int *incx,
39  const double *b, double *y, const ::types::blas_int *incy);
40  void sgemv_ (const char *trans, const ::types::blas_int *m, const ::types::blas_int *n,
41  const float *alpha, const float *A, const ::types::blas_int *lda,
42  const float *x, const ::types::blas_int *incx,
43  const float *b, float *y, const ::types::blas_int *incy);
44  void dtrmv_ (const char *uplo, const char *trans, const char *diag,
45  const ::types::blas_int *N, const double *A, const ::types::blas_int *lda,
46  double *x, const ::types::blas_int *incx);
47  void strmv_ (const char *uplo, const char *trans, const char *diag,
48  const ::types::blas_int *N, const float *A, const ::types::blas_int *lda,
49  float *x, const ::types::blas_int *incx);
50 // Matrix matrix product
51  void dgemm_ (const char *transa, const char *transb,
52  const ::types::blas_int *m, const ::types::blas_int *n, const ::types::blas_int *k,
53  const double *alpha, const double *A, const ::types::blas_int *lda,
54  const double *B, const ::types::blas_int *ldb,
55  const double *beta, double *C, const ::types::blas_int *ldc);
56  void sgemm_ (const char *transa, const char *transb,
57  const ::types::blas_int *m, const ::types::blas_int *n, const ::types::blas_int *k,
58  const float *alpha, const float *A, const ::types::blas_int *lda,
59  const float *B, const ::types::blas_int *ldb,
60  const float *beta, float *C, const ::types::blas_int *ldc);
61 // Symmetric rank-k update
62  void dsyrk_ (const char *uplo, const char *trans,
63  const ::types::blas_int *n, const ::types::blas_int *k,
64  const double *alpha, const double *A, const ::types::blas_int *lda,
65  const double *beta, double *C, const ::types::blas_int *ldc);
66  void ssyrk_ (const char *uplo, const char *trans,
67  const ::types::blas_int *n, const ::types::blas_int *k,
68  const float *alpha, const float *A, const ::types::blas_int *lda,
69  const float *beta, float *C, const ::types::blas_int *ldc);
70 // Compute LU factorization
71  void dgetrf_ (const ::types::blas_int *m, const ::types::blas_int *n, double *A,
72  const ::types::blas_int *lda, ::types::blas_int *ipiv, ::types::blas_int *info);
73  void sgetrf_ (const ::types::blas_int *m, const ::types::blas_int *n, float *A,
74  const ::types::blas_int *lda, ::types::blas_int *ipiv, ::types::blas_int *info);
75 // Apply forward/backward substitution to LU factorization
76  void dgetrs_ (const char *trans, const ::types::blas_int *n, const ::types::blas_int *nrhs,
77  const double *A, const ::types::blas_int *lda, const ::types::blas_int *ipiv,
78  double *b, const ::types::blas_int *ldb, ::types::blas_int *info);
79  void sgetrs_ (const char *trans, const ::types::blas_int *n, const ::types::blas_int *nrhs,
80  const float *A, const ::types::blas_int *lda, const ::types::blas_int *ipiv,
81  float *b, const ::types::blas_int *ldb, ::types::blas_int *info);
82 // Invert matrix from LU factorization
83  void dgetri_ (const ::types::blas_int *n, double *A, const ::types::blas_int *lda,
84  ::types::blas_int *ipiv, double *inv_work, const ::types::blas_int *lwork, ::types::blas_int *info);
85  void sgetri_ (const ::types::blas_int *n, float *A, const ::types::blas_int *lda,
86  ::types::blas_int *ipiv, float *inv_work, const ::types::blas_int *lwork, ::types::blas_int *info);
87 // Compute Cholesky factorization of SPD
88  void dpotrf_ (const char *uplo, const ::types::blas_int *n, double *A,
89  const ::types::blas_int *lda, ::types::blas_int *info);
90  void spotrf_ (const char *uplo, const ::types::blas_int *n, float *A,
91  const ::types::blas_int *lda, ::types::blas_int *info);
92 // Apply forward/backward substitution to Cholesky factorization
93  void dpotrs_ (const char *uplo, const ::types::blas_int *n, const ::types::blas_int *nrhs,
94  const double *A, const ::types::blas_int *lda,
95  double *B, const ::types::blas_int *ldb,
96  ::types::blas_int *info);
97  void spotrs_ (const char *uplo, const ::types::blas_int *n, const ::types::blas_int *nrhs,
98  const float *A, const ::types::blas_int *lda,
99  float *B, const ::types::blas_int *ldb,
100  ::types::blas_int *info);
101 // Estimate the reciprocal of the condition number in 1-norm from Cholesky
102  void dpocon_ (const char *uplo, const ::types::blas_int *n, const double *A,
103  const ::types::blas_int *lda, const double *anorm, double *rcond,
104  double *work, ::types::blas_int *iwork, ::types::blas_int *info);
105  void spocon_ (const char *uplo, const ::types::blas_int *n, const float *A,
106  const ::types::blas_int *lda, const float *anorm, float *rcond,
107  float *work, ::types::blas_int *iwork, ::types::blas_int *info);
108 // Estimate the reciprocal of the condition number of triangular matrices
109 // http://www.netlib.org/lapack/explore-html/da/dba/group__double_o_t_h_e_rcomputational_gaff914510b1673e90752c095f5b9dcedf.html#gaff914510b1673e90752c095f5b9dcedf
110  void dtrcon_ (const char *norm, const char *uplo, const char *diag,
111  const ::types::blas_int *n, const double *A, const ::types::blas_int *lda,
112  double *rcond,
113  double *work, ::types::blas_int *iwork, ::types::blas_int *info);
114  void strcon_ (const char *norm, const char *uplo, const char *diag,
115  const ::types::blas_int *n, const float *A, const ::types::blas_int *lda,
116  float *rcond,
117  float *work, ::types::blas_int *iwork, ::types::blas_int *info);
118 // Computes the inverse from Cholesky
119  void dpotri_ (const char *uplo, const ::types::blas_int *n, double *A,
120  const ::types::blas_int *lda, ::types::blas_int *info);
121  void spotri_ (const char *uplo, const ::types::blas_int *n, float *A,
122  const ::types::blas_int *lda, ::types::blas_int *info);
123 // Norms
124  double dlansy_ (const char *norm, const char *uplo, const ::types::blas_int *n, const double *A,
125  const ::types::blas_int *lda, double *work);
126  float slansy_ (const char *norm, const char *uplo, const ::types::blas_int *n, const float *A,
127  const ::types::blas_int *lda, float *work);
128  double dlange_ (const char *norm, const ::types::blas_int *m, const ::types::blas_int *n, const double *A,
129  const ::types::blas_int *lda, double *work);
130  float slange_ (const char *norm, const ::types::blas_int *m, const ::types::blas_int *n, const float *A,
131  const ::types::blas_int *lda, float *work);
132 
133 // Compute QR factorization (Householder)
134  void dgeqrf_ (const ::types::blas_int *m, const ::types::blas_int *n, double *A,
135  const ::types::blas_int *lda, double *tau, double *work,
136  const ::types::blas_int *lwork, ::types::blas_int *info);
137  void sgeqrf_ (const ::types::blas_int *m, const ::types::blas_int *n, float *A,
138  const ::types::blas_int *lda, float *tau, float *work,
139  const ::types::blas_int *lwork, ::types::blas_int *info);
140 // Compute vector Q^T B, where Q is the result from dgeqrf_
141  void dormqr_ (const char *side, const char *trans, const ::types::blas_int *m,
142  const ::types::blas_int *n, const ::types::blas_int *k, const double *A, const ::types::blas_int *lda,
143  const double *tau, double *B, const ::types::blas_int *ldb,
144  double *work, const ::types::blas_int *lwork, ::types::blas_int *info);
145  void sormqr_ (const char *side, const char *trans, const ::types::blas_int *m,
146  const ::types::blas_int *n, const ::types::blas_int *k, const float *A, const ::types::blas_int *lda,
147  const float *tau, float *B, const ::types::blas_int *ldb,
148  float *work, const ::types::blas_int *lwork, ::types::blas_int *info);
149 // Compute matrix Q from the result of dgeqrf_
150  void dorgqr_ (const ::types::blas_int *m, const ::types::blas_int *n, const ::types::blas_int *k, const double *A,
151  const ::types::blas_int *lda, const double *tau, double *work, const ::types::blas_int *lwork,
152  ::types::blas_int *info);
153  void sorgqr_ (const ::types::blas_int *m, const ::types::blas_int *n, const ::types::blas_int *k, const float *A,
154  const ::types::blas_int *lda, const float *tau, float *work, const ::types::blas_int *lwork,
155  ::types::blas_int *info);
156 // Compute Rx = b
157  void dtrtrs_ (const char *uplo, const char *trans,
158  const char *diag, const ::types::blas_int *n, const ::types::blas_int *n_rhs,
159  const double *A, const ::types::blas_int *lda, double *B, const ::types::blas_int *ldb,
160  ::types::blas_int *info);
161  void strtrs_ (const char *uplo, const char *trans,
162  const char *diag, const ::types::blas_int *n, const ::types::blas_int *n_rhs,
163  const float *A, const ::types::blas_int *lda, float *B, const ::types::blas_int *ldb,
164  ::types::blas_int *info);
165 // Compute eigenvalues and vectors
166  void dgeev_ (const char *jobvl, const char *jobvr,
167  const ::types::blas_int *n, double *A, const ::types::blas_int *lda,
168  double *lambda_re, double *lambda_im,
169  double *vl, const ::types::blas_int *ldvl,
170  double *vr, const ::types::blas_int *ldva,
171  double *work, const ::types::blas_int *lwork,
172  ::types::blas_int *info);
173  void sgeev_ (const char *jobvl, const char *jobvr,
174  const ::types::blas_int *n, float *A, const ::types::blas_int *lda,
175  float *lambda_re, float *lambda_im,
176  float *vl, const ::types::blas_int *ldvl,
177  float *vr, const ::types::blas_int *ldva,
178  float *work, const ::types::blas_int *lwork,
179  ::types::blas_int *info);
180 // Compute eigenvalues and vectors (expert)
181  void dgeevx_ (const char *balanc, const char *jobvl, const char *jobvr,
182  const char *sense,
183  const ::types::blas_int *n, double *A, const ::types::blas_int *lda,
184  double *lambda_re, double *lambda_im,
185  double *vl, const ::types::blas_int *ldvl,
186  double *vr, const ::types::blas_int *ldvr,
187  ::types::blas_int *ilo, ::types::blas_int *ihi,
188  double *scale, double *abnrm,
189  double *rconde, double *rcondv,
190  double *work, const ::types::blas_int *lwork,
191  ::types::blas_int *iwork, ::types::blas_int *info);
192  void sgeevx_ (const char *balanc, const char *jobvl, const char *jobvr,
193  const char *sense,
194  const ::types::blas_int *n, float *A, const ::types::blas_int *lda,
195  float *lambda_re, float *lambda_im,
196  float *vl, const ::types::blas_int *ldvl,
197  float *vr, const ::types::blas_int *ldvr,
198  ::types::blas_int *ilo, ::types::blas_int *ihi,
199  float *scale, float *abnrm,
200  float *rconde, float *rcondv,
201  float *work, const ::types::blas_int *lwork,
202  ::types::blas_int *iwork, ::types::blas_int *info);
203 // Eigenvalues for a symmetric matrix
204  void dsyev_ (const char *jobz, const char *uplo, const ::types::blas_int *n,
205  double *A, const ::types::blas_int *lda, double *w,
206  double *work, const ::types::blas_int *lwork, ::types::blas_int *info);
207  void ssyev_ (const char *jobz, const char *uplo, const ::types::blas_int *n,
208  float *A, const ::types::blas_int *lda, float *w,
209  float *work, const ::types::blas_int *lwork, ::types::blas_int *info);
210 // Same functionality as dsyev_ but with more options: E.g.
211 // Compute only eigenvalues in a specific ::types::blas_interval,
212 // Compute only eigenvalues with a specific index,
213 // Set tolerance for eigenvalue computation
214  void dsyevx_ (const char *jobz, const char *range,
215  const char *uplo, const ::types::blas_int *n, double *A, const ::types::blas_int *lda,
216  const double *vl, const double *vu,
217  const ::types::blas_int *il, const ::types::blas_int *iu, const double *abstol,
218  ::types::blas_int *m, double *w, double *z,
219  const ::types::blas_int *ldz, double *work, const ::types::blas_int *lwork, ::types::blas_int *iwork,
220  ::types::blas_int *ifail, ::types::blas_int *info);
221  void ssyevx_ (const char *jobz, const char *range,
222  const char *uplo, const ::types::blas_int *n, float *A, const ::types::blas_int *lda,
223  const float *vl, const float *vu,
224  const ::types::blas_int *il, const ::types::blas_int *iu, const float *abstol,
225  ::types::blas_int *m, float *w, float *z,
226  const ::types::blas_int *ldz, float *work, const ::types::blas_int *lwork, ::types::blas_int *iwork,
227  ::types::blas_int *ifail, ::types::blas_int *info);
228  // Same functionality as dsyev_ but using MRRR algorithm and with more options:
229  // E.g. compute only eigenvalues in a specific ::types::blas_interval,
230  // Compute only eigenvalues with a specific index.
231  void dsyevr_(const char *jobz, const char *range,
232  const char *uplo, const ::types::blas_int *n, double *A, const ::types::blas_int *lda,
233  const double *vl, const double *vu,
234  const ::types::blas_int *il, const ::types::blas_int *iu, const double *abstol,
235  ::types::blas_int *m, double *w, double *z,
236  const ::types::blas_int *ldz, ::types::blas_int *isuppz,
237  double *work, ::types::blas_int *lwork, ::types::blas_int *iwork,
238  ::types::blas_int *liwork, ::types::blas_int *info);
239  void ssyevr_(const char *jobz, const char *range,
240  const char *uplo, const ::types::blas_int *n, float *A, const ::types::blas_int *lda,
241  const float *vl, const float *vu,
242  const ::types::blas_int *il, const ::types::blas_int *iu, const float *abstol,
243  ::types::blas_int *m, float *w, float *z,
244  const ::types::blas_int *ldz, ::types::blas_int *isuppz,
245  float *work, ::types::blas_int *lwork, ::types::blas_int *iwork,
246  ::types::blas_int *liwork, ::types::blas_int *info);
247 // Generalized eigenvalues and eigenvectors of
248 // 1: A*x = lambda*B*x; 2: A*B*x = lambda*x; 3: B*A*x = lambda*x
249 // A and B are symmetric and B is definite
250  void dsygv_ (const ::types::blas_int *itype, const char *jobz, const char *uplo,
251  const ::types::blas_int *n, double *A, const ::types::blas_int *lda, double *B,
252  const ::types::blas_int *ldb, double *w, double *work,
253  const ::types::blas_int *lwork, ::types::blas_int *info);
254  void ssygv_ (const ::types::blas_int *itype, const char *jobz, const char *uplo,
255  const ::types::blas_int *n, float *A, const ::types::blas_int *lda, float *B,
256  const ::types::blas_int *ldb, float *w, float *work,
257  const ::types::blas_int *lwork, ::types::blas_int *info);
258 // Same functionality as dsygv_ but with more options: E.g.
259 // Compute only eigenvalues in a specific ::types::blas_interval,
260 // Compute only eigenvalues with a specific index,
261 // Set tolerance for eigenvalue computation
262  void dsygvx_ (const ::types::blas_int *itype, const char *jobz, const char *range,
263  const char *uplo, const ::types::blas_int *n, double *A, const ::types::blas_int *lda,
264  double *B, const ::types::blas_int *ldb, const double *vl, const double *vu,
265  const ::types::blas_int *il, const ::types::blas_int *iu, const double *abstol,
266  ::types::blas_int *m, double *w, double *z,
267  const ::types::blas_int *ldz, double *work, const ::types::blas_int *lwork, ::types::blas_int *iwork,
268  ::types::blas_int *ifail, ::types::blas_int *info);
269  void ssygvx_ (const ::types::blas_int *itype, const char *jobz, const char *range,
270  const char *uplo, const ::types::blas_int *n, float *A, const ::types::blas_int *lda,
271  float *B, const ::types::blas_int *ldb, const float *vl, const float *vu,
272  const ::types::blas_int *il, const ::types::blas_int *iu, const float *abstol,
273  ::types::blas_int *m, float *w, float *z,
274  const ::types::blas_int *ldz, float *work, const ::types::blas_int *lwork, ::types::blas_int *iwork,
275  ::types::blas_int *ifail, ::types::blas_int *info);
276 // Compute singular value decomposition using divide and conquer
277  void dgesdd_ (const char *jobz,
278  const ::types::blas_int *m, const ::types::blas_int *n, double *A, const ::types::blas_int *lda,
279  double *s,
280  double *u, const ::types::blas_int *ldu,
281  double *vt, const ::types::blas_int *ldvt,
282  double *work, const ::types::blas_int *lwork,
283  ::types::blas_int *iwork,
284  ::types::blas_int *info);
285  void sgesdd_ (const char *jobz,
286  const ::types::blas_int *m, const ::types::blas_int *n, float *A, const ::types::blas_int *lda,
287  float *s,
288  float *u, const ::types::blas_int *ldu,
289  float *vt, const ::types::blas_int *ldvt,
290  float *work, const ::types::blas_int *lwork,
291  ::types::blas_int *iwork,
292  ::types::blas_int *info);
293 // Compute singular value decomposition
294  void dgesvd_ (::types::blas_int *jobu, ::types::blas_int *jobvt,
295  const ::types::blas_int *n, const ::types::blas_int *m, double *A, const ::types::blas_int *lda,
296  double *s,
297  double *u, const ::types::blas_int *ldu,
298  double *vt, const ::types::blas_int *ldvt,
299  double *work, const ::types::blas_int *lwork,
300  ::types::blas_int *info);
301  void sgesvd_ (::types::blas_int *jobu, ::types::blas_int *jobvt,
302  const ::types::blas_int *n, const ::types::blas_int *m, float *A, const ::types::blas_int *lda,
303  float *s,
304  float *u, const ::types::blas_int *ldu,
305  float *vt, const ::types::blas_int *ldvt,
306  float *work, const ::types::blas_int *lwork,
307  ::types::blas_int *info);
308 // Solve a least squares problem using SVD
309  void dgelsd_ (const ::types::blas_int *m, const ::types::blas_int *n, const ::types::blas_int *nrhs,
310  const double *A, const ::types::blas_int *lda,
311  double *B, const ::types::blas_int *ldb,
312  double *s, const double *rcond,
313  ::types::blas_int *rank,
314  double *work, const ::types::blas_int *lwork, ::types::blas_int *iwork,
315  ::types::blas_int *info);
316  void sgelsd_ (const ::types::blas_int *m, const ::types::blas_int *n, const ::types::blas_int *nrhs,
317  const float *A, const ::types::blas_int *lda,
318  float *B, const ::types::blas_int *ldb,
319  float *s, const float *rcond,
320  ::types::blas_int *rank,
321  float *work, const ::types::blas_int *lwork, ::types::blas_int *iwork,
322  ::types::blas_int *info);
323 // Symmetric tridiagonal matrix
324  void dstev_ (const char *jobz, const ::types::blas_int *n,
325  double *d, double *e, double *z,
326  const ::types::blas_int *ldz, double *work,
327  ::types::blas_int *info);
328  void sstev_ (const char *jobz, const ::types::blas_int *n,
329  float *d, float *e, float *z,
330  const ::types::blas_int *ldz, float *work,
331  ::types::blas_int *info);
332 // Rank-1 update for symmetric matrices
333  void dsyr_ (const char *uplo, const ::types::blas_int *n,
334  const double *alpha, const double *x,
335  const ::types::blas_int *incx,
336  double *A, const ::types::blas_int *lda);
337  void ssyr_ (const char *uplo, const ::types::blas_int *n,
338  const float *alpha, const float *x,
339  const ::types::blas_int *incx,
340  float *A, const ::types::blas_int *lda);
341 // Multiply rectangular mxn real matrix by real scalar CTO/CFROM
342  void dlascl_(const char *type,
343  const ::types::blas_int *kl,
344  const ::types::blas_int *ku,
345  const double *cfrom,
346  const double *cto,
347  const ::types::blas_int *m,
348  const ::types::blas_int *n,
349  double *A,
350  const ::types::blas_int *lda,
351  ::types::blas_int *info);
352  void slascl_(const char *type,
353  const ::types::blas_int *kl,
354  const ::types::blas_int *ku,
355  const float *cfrom,
356  const float *cto,
357  const ::types::blas_int *m,
358  const ::types::blas_int *n,
359  float *A,
360  const ::types::blas_int *lda,
361  ::types::blas_int *info);
362 // dlamch and slamch help determining machine precision
363  double dlamch_(const char *chmach);
364  float slamch_(const char *chmach);
365 }
366 
367 DEAL_II_NAMESPACE_OPEN
368 
369 
371 template <typename number>
372 inline void
373 syrk(const char *, const char *,
374  const types::blas_int *, const types::blas_int *,
375  const number *, const number *, const types::blas_int *,
376  const number *, number *, const types::blas_int *)
377 {
378  Assert (false, ExcNotImplemented());
379 }
380 
381 #ifdef DEAL_II_WITH_LAPACK
382 inline void
383 syrk(const char *uplo, const char *trans,
384  const types::blas_int *n, const types::blas_int *k,
385  const double *alpha, const double *A, const types::blas_int *lda,
386  const double *beta, double *C, const types::blas_int *ldc)
387 {
388  dsyrk_(uplo,trans,n,k,alpha,A,lda,beta,C,ldc);
389 }
390 
391 inline void
392 syrk(const char *uplo, const char *trans,
393  const types::blas_int *n, const types::blas_int *k,
394  const float *alpha, const float *A, const types::blas_int *lda,
395  const float *beta, float *C, const types::blas_int *ldc)
396 {
397  ssyrk_(uplo,trans,n,k,alpha,A,lda,beta,C,ldc);
398 }
399 #endif
400 
401 
402 
404 template <typename number>
405 inline void
406 syr(const char *, const types::blas_int *,
407  const number *, const number *,
408  const types::blas_int *,
409  number *, const types::blas_int *)
410 {
411  Assert (false, ExcNotImplemented());
412 }
413 
414 #ifdef DEAL_II_WITH_LAPACK
415 inline void
416 syr(const char *uplo, const types::blas_int *n,
417  const double *alpha, const double *x,
418  const types::blas_int *incx,
419  double *A, const types::blas_int *lda)
420 {
421  dsyr_(uplo,n,alpha,x,incx,A,lda);
422 }
423 inline void
424 syr(const char *uplo, const types::blas_int *n,
425  const float *alpha, const float *x,
426  const types::blas_int *incx,
427  float *A, const types::blas_int *lda)
428 {
429  ssyr_(uplo,n,alpha,x,incx,A,lda);
430 }
431 #endif
432 
433 
434 
436 template <typename number1, typename number2, typename number3>
437 inline void
438 axpy (const types::blas_int *, const number1 *, const number2 *, const types::blas_int *, number3 *, const types::blas_int *)
439 {
440  Assert (false, ExcNotImplemented());
441 }
442 
443 #ifdef DEAL_II_WITH_LAPACK
444 inline void
445 axpy (const types::blas_int *n, const double *alpha, const double *x, const types::blas_int *incx, double *y, const types::blas_int *incy)
446 {
447  daxpy_ (n,alpha,x,incx,y,incy);
448 }
449 #else
450 inline void
451 axpy (const types::blas_int *, const double *, const double *, const types::blas_int *, double *, const types::blas_int *)
452 {
453  Assert (false, LAPACKSupport::ExcMissing("daxpy"));
454 }
455 #endif
456 
457 
458 #ifdef DEAL_II_WITH_LAPACK
459 inline void
460 axpy (const types::blas_int *n, const float *alpha, const float *x, const types::blas_int *incx, float *y, const types::blas_int *incy)
461 {
462  saxpy_ (n,alpha,x,incx,y,incy);
463 }
464 #else
465 inline void
466 axpy (const types::blas_int *, const float *, const float *, const types::blas_int *, float *, const types::blas_int *)
467 {
468  Assert (false, LAPACKSupport::ExcMissing("saxpy"));
469 }
470 #endif
471 
472 
474 template <typename number1, typename number2, typename number3, typename number4, typename number5>
475 inline void
476 gemv (const char *, const types::blas_int *, const types::blas_int *, const number1 *, const number2 *, const types::blas_int *, const number3 *, const types::blas_int *, const number4 *, number5 *, const types::blas_int *)
477 {
478  Assert (false, ExcNotImplemented());
479 }
480 
481 #ifdef DEAL_II_WITH_LAPACK
482 inline void
483 gemv (const char *trans, const types::blas_int *m, const types::blas_int *n, const double *alpha, const double *A, const types::blas_int *lda, const double *x, const types::blas_int *incx, const double *b, double *y, const types::blas_int *incy)
484 {
485  dgemv_ (trans,m,n,alpha,A,lda,x,incx,b,y,incy);
486 }
487 #else
488 inline void
489 gemv (const char *, const types::blas_int *, const types::blas_int *, const double *, const double *, const types::blas_int *, const double *, const types::blas_int *, const double *, double *, const types::blas_int *)
490 {
491  Assert (false, LAPACKSupport::ExcMissing("dgemv"));
492 }
493 #endif
494 
495 
496 #ifdef DEAL_II_WITH_LAPACK
497 inline void
498 gemv (const char *trans, const types::blas_int *m, const types::blas_int *n, const float *alpha, const float *A, const types::blas_int *lda, const float *x, const types::blas_int *incx, const float *b, float *y, const types::blas_int *incy)
499 {
500  sgemv_ (trans,m,n,alpha,A,lda,x,incx,b,y,incy);
501 }
502 #else
503 inline void
504 gemv (const char *, const types::blas_int *, const types::blas_int *, const float *, const float *, const types::blas_int *, const float *, const types::blas_int *, const float *, float *, const types::blas_int *)
505 {
506  Assert (false, LAPACKSupport::ExcMissing("sgemv"));
507 }
508 #endif
509 
510 
511 
513 template <typename number>
514 inline void
515 trmv (const char * /*uplo*/, const char * /*trans*/, const char * /*diag*/,
516  const types::blas_int * /*N*/, const number * /*A*/, const types::blas_int * /*lda*/,
517  number * /*x*/, const types::blas_int * /*incx*/)
518 {
519  Assert (false, ExcNotImplemented());
520 }
521 
522 #ifdef DEAL_II_WITH_LAPACK
523 inline void
524 trmv (const char *uplo, const char *trans, const char *diag,
525  const types::blas_int *N, const double *A, const types::blas_int *lda,
526  double *x, const types::blas_int *incx)
527 {
528  dtrmv_ (uplo, trans, diag, N, A, lda, x, incx);
529 }
530 #else
531 inline void
532 trmv (const char * /*uplo*/, const char * /*trans*/, const char * /*diag*/,
533  const types::blas_int * /*N*/, const double * /*A*/,
534  const types::blas_int * /*lda*/,
535  double * /*x*/, const types::blas_int * /*incx*/)
536 {
537  Assert (false, LAPACKSupport::ExcMissing("dtrmv"));
538 }
539 #endif
540 
541 
542 #ifdef DEAL_II_WITH_LAPACK
543 inline void
544 trmv (const char *uplo, const char *trans, const char *diag,
545  const types::blas_int *N, const float *A, const types::blas_int *lda,
546  float *x, const types::blas_int *incx)
547 {
548  strmv_ (uplo, trans, diag, N, A, lda, x, incx);
549 }
550 #else
551 inline void
552 trmv (const char * /*uplo*/, const char * /*trans*/, const char * /*diag*/,
553  const types::blas_int * /*N*/, const float * /*A*/,
554  const types::blas_int * /*lda*/, float * /*x*/,
555  const types::blas_int * /*incx*/)
556 {
557  Assert (false, LAPACKSupport::ExcMissing("dtrmv"));
558 }
559 #endif
560 
561 
562 
564 template <typename number1, typename number2, typename number3, typename number4, typename number5>
565 inline void
566 gemm (const char *, const char *, const types::blas_int *, const types::blas_int *, const types::blas_int *, const number1 *, const number2 *, const types::blas_int *, const number3 *, const types::blas_int *, const number4 *, number5 *, const types::blas_int *)
567 {
568  Assert (false, ExcNotImplemented());
569 }
570 
571 #ifdef DEAL_II_WITH_LAPACK
572 inline void
573 gemm (const char *transa, const char *transb, const types::blas_int *m, const types::blas_int *n, const types::blas_int *k, const double *alpha, const double *A, const types::blas_int *lda, const double *B, const types::blas_int *ldb, const double *beta, double *C, const types::blas_int *ldc)
574 {
575  dgemm_ (transa,transb,m,n,k,alpha,A,lda,B,ldb,beta,C,ldc);
576 }
577 #else
578 inline void
579 gemm (const char *, const char *, const types::blas_int *, const types::blas_int *, const types::blas_int *, const double *, const double *, const types::blas_int *, const double *, const types::blas_int *, const double *, double *, const types::blas_int *)
580 {
581  Assert (false, LAPACKSupport::ExcMissing("dgemm"));
582 }
583 #endif
584 
585 
586 #ifdef DEAL_II_WITH_LAPACK
587 inline void
588 gemm (const char *transa, const char *transb, const types::blas_int *m, const types::blas_int *n, const types::blas_int *k, const float *alpha, const float *A, const types::blas_int *lda, const float *B, const types::blas_int *ldb, const float *beta, float *C, const types::blas_int *ldc)
589 {
590  sgemm_ (transa,transb,m,n,k,alpha,A,lda,B,ldb,beta,C,ldc);
591 }
592 #else
593 inline void
594 gemm (const char *, const char *, const types::blas_int *, const types::blas_int *, const types::blas_int *, const float *, const float *, const types::blas_int *, const float *, const types::blas_int *, const float *, float *, const types::blas_int *)
595 {
596  Assert (false, LAPACKSupport::ExcMissing("sgemm"));
597 }
598 #endif
599 
600 
601 
603 template <typename number1>
604 inline void
605 potrf (const char *, const types::blas_int *, number1 *, const types::blas_int *, types::blas_int *)
606 {
607  Assert (false, ExcNotImplemented());
608 }
609 
610 inline void
611 potrf (const char *uplo, const types::blas_int *n, double *A, const types::blas_int *lda, types::blas_int *info)
612 {
613 #ifdef DEAL_II_WITH_LAPACK
614  dpotrf_ (uplo,n,A,lda,info);
615 #else
616  (void) uplo;
617  (void) n;
618  (void) A;
619  (void) lda;
620  (void) info;
621 
622  Assert (false, LAPACKSupport::ExcMissing("dpotrf"));
623 #endif
624 }
625 
626 inline void
627 potrf (const char *uplo, const types::blas_int *n, float *A, const types::blas_int *lda, types::blas_int *info)
628 {
629 #ifdef DEAL_II_WITH_LAPACK
630  spotrf_ (uplo,n,A,lda,info);
631 #else
632  (void) uplo;
633  (void) n;
634  (void) A;
635  (void) lda;
636  (void) info;
637 
638  Assert (false, LAPACKSupport::ExcMissing("spotrf"));
639 #endif
640 }
641 
642 
643 
645 template <typename number>
646 inline void
647 trcon(const char * /*norm*/, const char * /*uplo*/, const char * /*diag*/,
648  const types::blas_int * /*n*/, const number * /*A*/, const types::blas_int * /*lda*/,
649  number * /*rcond*/,
650  number * /*work*/, types::blas_int * /*iwork*/, types::blas_int * /*info*/)
651 {
652  Assert (false, ExcNotImplemented());
653 }
654 
655 inline void
656 trcon (const char *norm, const char *uplo, const char *diag,
657  const types::blas_int *n, const double *A, const types::blas_int *lda,
658  double *rcond,
659  double *work, types::blas_int *iwork, types::blas_int *info)
660 {
661 #ifdef DEAL_II_WITH_LAPACK
662  dtrcon_ (norm, uplo, diag, n, A, lda, rcond, work, iwork, info);
663 #else
664  (void) norm;
665  (void) uplo;
666  (void) diag;
667  (void) n;
668  (void) A;
669  (void) lda;
670  (void) rcond;
671  (void) work;
672  (void) iwork;
673  (void) info;
674 
675  Assert (false, LAPACKSupport::ExcMissing("dtrcon"));
676 #endif
677 }
678 
679 inline void
680 trcon (const char *norm, const char *uplo, const char *diag,
681  const types::blas_int *n, const float *A, const types::blas_int *lda,
682  float *rcond,
683  float *work, types::blas_int *iwork, types::blas_int *info)
684 {
685 #ifdef DEAL_II_WITH_LAPACK
686  strcon_ (norm, uplo, diag, n, A, lda, rcond, work, iwork, info);
687 #else
688  (void) norm;
689  (void) uplo;
690  (void) diag;
691  (void) n;
692  (void) A;
693  (void) lda;
694  (void) rcond;
695  (void) work;
696  (void) iwork;
697  (void) info;
698 
699  Assert (false, LAPACKSupport::ExcMissing("dtrcon"));
700 #endif
701 }
702 
703 
704 
706 template <typename number1>
707 inline void
708 pocon (const char *, const types::blas_int *, const number1 *, const types::blas_int *, const number1 *, number1 *, number1 *, types::blas_int *, types::blas_int *)
709 {
710  Assert (false, ExcNotImplemented());
711 }
712 
713 inline void
714 pocon (const char *uplo, const types::blas_int *n, const double *A, const types::blas_int *lda, const double *anorm, double *rcond, double *work, types::blas_int *iwork, types::blas_int *info)
715 {
716 #ifdef DEAL_II_WITH_LAPACK
717  dpocon_ (uplo,n,A,lda,anorm,rcond,work,iwork,info);
718 #else
719  (void) uplo;
720  (void) n;
721  (void) A;
722  (void) lda;
723  (void) anorm;
724  (void) rcond;
725  (void) work;
726  (void) iwork;
727  (void) info;
728 
729  Assert (false, LAPACKSupport::ExcMissing("dpocon"));
730 #endif
731 }
732 
733 inline void
734 pocon (const char *uplo, const types::blas_int *n, const float *A, const types::blas_int *lda, const float *anorm, float *rcond, float *work, types::blas_int *iwork, types::blas_int *info)
735 {
736 #ifdef DEAL_II_WITH_LAPACK
737  spocon_ (uplo,n,A,lda,anorm,rcond,work,iwork,info);
738 #else
739  (void) uplo;
740  (void) n;
741  (void) A;
742  (void) lda;
743  (void) anorm;
744  (void) rcond;
745  (void) work;
746  (void) iwork;
747  (void) info;
748 
749  Assert (false, LAPACKSupport::ExcMissing("dpocon"));
750 #endif
751 }
752 
754 template <typename number1>
755 inline void
756 potri(const char *, const types::blas_int *, number1 *, const types::blas_int *, types::blas_int *)
757 {
758  Assert (false, ExcNotImplemented());
759 }
760 
761 inline void
762 potri(const char *uplo, const types::blas_int *n, double *A, const types::blas_int *lda, types::blas_int *info)
763 {
764 #ifdef DEAL_II_WITH_LAPACK
765  dpotri_(uplo,n,A,lda,info);
766 #else
767  (void) uplo;
768  (void) n;
769  (void) A;
770  (void) lda;
771  (void) info;
772 
773  Assert (false, LAPACKSupport::ExcMissing("dpotri"));
774 #endif
775 }
776 
777 inline void
778 potri(const char *uplo, const types::blas_int *n, float *A, const types::blas_int *lda, types::blas_int *info)
779 {
780 #ifdef DEAL_II_WITH_LAPACK
781  spotri_(uplo,n,A,lda,info);
782 #else
783  (void) uplo;
784  (void) n;
785  (void) A;
786  (void) lda;
787  (void) info;
788 
789  Assert (false, LAPACKSupport::ExcMissing("spotri"));
790 #endif
791 }
792 
793 
795 template <typename number>
796 inline
797 number lansy (const char *, const char *, const types::blas_int *, const number *, const types::blas_int *, number *)
798 {
799  Assert (false, ExcNotImplemented());
800  return number();
801 }
802 
803 inline
804 double lansy (const char *norm, const char *uplo, const types::blas_int *n, const double *A, const types::blas_int *lda, double *work)
805 {
806 #ifdef DEAL_II_WITH_LAPACK
807  return dlansy_(norm,uplo,n,A,lda,work);
808 #else
809  (void) norm;
810  (void) uplo;
811  (void) n;
812  (void) A;
813  (void) lda;
814  (void) work;
815 
816  Assert (false, LAPACKSupport::ExcMissing("lansy"));
817  return 0.;
818 #endif
819 }
820 
821 inline
822 float lansy (const char *norm, const char *uplo, const types::blas_int *n, const float *A, const types::blas_int *lda, float *work)
823 {
824 #ifdef DEAL_II_WITH_LAPACK
825  return slansy_(norm,uplo,n,A,lda,work);
826 #else
827  (void) norm;
828  (void) uplo;
829  (void) n;
830  (void) A;
831  (void) lda;
832  (void) work;
833 
834  Assert (false, LAPACKSupport::ExcMissing("lansy"));
835  return 0.;
836 #endif
837 }
838 
839 
840 
842 template <typename number>
843 inline
844 number lange (const char *, const types::blas_int *, const types::blas_int *, const number *, const types::blas_int *, number *)
845 {
846  Assert (false, ExcNotImplemented());
847  return number();
848 }
849 
850 inline
851 double lange (const char *norm, const types::blas_int *m, const types::blas_int *n, const double *A, const types::blas_int *lda, double *work)
852 {
853 #ifdef DEAL_II_WITH_LAPACK
854  return dlange_(norm,m,n,A,lda,work);
855 #else
856  (void) norm;
857  (void) m;
858  (void) n;
859  (void) A;
860  (void) lda;
861  (void) work;
862 
863  Assert (false, LAPACKSupport::ExcMissing("lange"));
864  return 0.;
865 #endif
866 }
867 
868 inline
869 float lange (const char *norm, const types::blas_int *m, const types::blas_int *n, const float *A, const types::blas_int *lda, float *work)
870 {
871 #ifdef DEAL_II_WITH_LAPACK
872  return slange_(norm,m,n,A,lda,work);
873 #else
874  (void) norm;
875  (void) m;
876  (void) n;
877  (void) A;
878  (void) lda;
879  (void) work;
880 
881  Assert (false, LAPACKSupport::ExcMissing("lange"));
882  return 0.;
883 #endif
884 }
885 
887 template <typename number1>
888 inline void
889 getrf (const types::blas_int *, const types::blas_int *, number1 *, const types::blas_int *, types::blas_int *, types::blas_int *)
890 {
891  Assert (false, ExcNotImplemented());
892 }
893 
894 #ifdef DEAL_II_WITH_LAPACK
895 inline void
896 getrf (const types::blas_int *m, const types::blas_int *n, double *A, const types::blas_int *lda, types::blas_int *ipiv, types::blas_int *info)
897 {
898  dgetrf_ (m,n,A,lda,ipiv,info);
899 }
900 #else
901 inline void
902 getrf (const types::blas_int *, const types::blas_int *, double *, const types::blas_int *, types::blas_int *, types::blas_int *)
903 {
904  Assert (false, LAPACKSupport::ExcMissing("dgetrf"));
905 }
906 #endif
907 
908 
909 #ifdef DEAL_II_WITH_LAPACK
910 inline void
911 getrf (const types::blas_int *m, const types::blas_int *n, float *A, const types::blas_int *lda, types::blas_int *ipiv, types::blas_int *info)
912 {
913  sgetrf_ (m,n,A,lda,ipiv,info);
914 }
915 #else
916 inline void
917 getrf (const types::blas_int *, const types::blas_int *, float *, const types::blas_int *, types::blas_int *, types::blas_int *)
918 {
919  Assert (false, LAPACKSupport::ExcMissing("sgetrf"));
920 }
921 #endif
922 
923 
925 template <typename number1, typename number2>
926 inline void
927 getrs (const char *, const types::blas_int *, const types::blas_int *, const number1 *, const types::blas_int *, const types::blas_int *, number2 *, const types::blas_int *, types::blas_int *)
928 {
929  Assert (false, ExcNotImplemented());
930 }
931 
932 #ifdef DEAL_II_WITH_LAPACK
933 inline void
934 getrs (const char *trans, const types::blas_int *n, const types::blas_int *nrhs, const double *A, const types::blas_int *lda, const types::blas_int *ipiv, double *b, const types::blas_int *ldb, types::blas_int *info)
935 {
936  dgetrs_ (trans,n,nrhs,A,lda,ipiv,b,ldb,info);
937 }
938 #else
939 inline void
940 getrs (const char *, const types::blas_int *, const types::blas_int *, const double *, const types::blas_int *, const types::blas_int *, double *, const types::blas_int *, types::blas_int *)
941 {
942  Assert (false, LAPACKSupport::ExcMissing("dgetrs"));
943 }
944 #endif
945 
946 
947 #ifdef DEAL_II_WITH_LAPACK
948 inline void
949 getrs (const char *trans, const types::blas_int *n, const types::blas_int *nrhs, const float *A, const types::blas_int *lda, const types::blas_int *ipiv, float *b, const types::blas_int *ldb, types::blas_int *info)
950 {
951  sgetrs_ (trans,n,nrhs,A,lda,ipiv,b,ldb,info);
952 }
953 #else
954 inline void
955 getrs (const char *, const types::blas_int *, const types::blas_int *, const float *, const types::blas_int *, const types::blas_int *, float *, const types::blas_int *, types::blas_int *)
956 {
957  Assert (false, LAPACKSupport::ExcMissing("sgetrs"));
958 }
959 #endif
960 
961 
962 
964 template <typename number>
965 inline void
966 potrs (const char *, const types::blas_int *, const types::blas_int *,
967  const number *, const types::blas_int *,
968  number *, const types::blas_int *,
969  types::blas_int *)
970 {
971  Assert (false, ExcNotImplemented());
972 }
973 
974 #ifdef DEAL_II_WITH_LAPACK
975 inline void
976 potrs (const char *uplo, const types::blas_int *n, const types::blas_int *nrhs,
977  const double *A, const types::blas_int *lda,
978  double *B, const types::blas_int *ldb,
979  types::blas_int *info)
980 {
981  dpotrs_(uplo,n,nrhs,A,lda,B,ldb,info);
982 }
983 inline void
984 potrs (const char *uplo, const types::blas_int *n, const types::blas_int *nrhs,
985  const float *A, const types::blas_int *lda,
986  float *B, const types::blas_int *ldb,
987  types::blas_int *info)
988 {
989  spotrs_(uplo,n,nrhs,A,lda,B,ldb,info);
990 }
991 #else
992 inline void
993 potrs (const char *, const types::blas_int *, const types::blas_int *,
994  const double *, const types::blas_int *,
995  double *, const types::blas_int *,
996  types::blas_int *)
997 {
998  Assert (false, LAPACKSupport::ExcMissing("dpotrs"));
999 }
1000 inline void
1001 potrs (const char *, const types::blas_int *, const types::blas_int *,
1002  const float *, const types::blas_int *,
1003  float *, const types::blas_int *,
1004  types::blas_int *)
1005 {
1006  Assert (false, LAPACKSupport::ExcMissing("spotrs"));
1007 }
1008 #endif
1009 
1010 
1011 
1012 
1014 template <typename number1, typename number2>
1015 inline void
1016 getri (const types::blas_int *, number1 *, const types::blas_int *, types::blas_int *, number2 *, const types::blas_int *, types::blas_int *)
1017 {
1018  Assert (false, ExcNotImplemented());
1019 }
1020 
1021 #ifdef DEAL_II_WITH_LAPACK
1022 inline void
1023 getri (const types::blas_int *n, double *A, const types::blas_int *lda, types::blas_int *ipiv, double *inv_work, const types::blas_int *lwork, types::blas_int *info)
1024 {
1025  dgetri_ (n,A,lda,ipiv,inv_work,lwork,info);
1026 }
1027 #else
1028 inline void
1029 getri (const types::blas_int *, double *, const types::blas_int *, types::blas_int *, double *, const types::blas_int *, types::blas_int *)
1030 {
1031  Assert (false, LAPACKSupport::ExcMissing("dgetri"));
1032 }
1033 #endif
1034 
1035 
1036 #ifdef DEAL_II_WITH_LAPACK
1037 inline void
1038 getri (const types::blas_int *n, float *A, const types::blas_int *lda, types::blas_int *ipiv, float *inv_work, const types::blas_int *lwork, types::blas_int *info)
1039 {
1040  sgetri_ (n,A,lda,ipiv,inv_work,lwork,info);
1041 }
1042 #else
1043 inline void
1044 getri (const types::blas_int *, float *, const types::blas_int *, types::blas_int *, float *, const types::blas_int *, types::blas_int *)
1045 {
1046  Assert (false, LAPACKSupport::ExcMissing("sgetri"));
1047 }
1048 #endif
1049 
1050 
1052 template <typename number1, typename number2, typename number3>
1053 inline void
1054 geqrf (const types::blas_int *, const types::blas_int *, number1 *, const types::blas_int *, number2 *, number3 *, const types::blas_int *, types::blas_int *)
1055 {
1056  Assert (false, ExcNotImplemented());
1057 }
1058 
1059 #ifdef DEAL_II_WITH_LAPACK
1060 inline void
1061 geqrf (const types::blas_int *m, const types::blas_int *n, double *A, const types::blas_int *lda, double *tau, double *work, const types::blas_int *lwork, types::blas_int *info)
1062 {
1063  dgeqrf_ (m,n,A,lda,tau,work,lwork,info);
1064 }
1065 #else
1066 inline void
1067 geqrf (const types::blas_int *, const types::blas_int *, double *, const types::blas_int *, double *, double *, const types::blas_int *, types::blas_int *)
1068 {
1069  Assert (false, LAPACKSupport::ExcMissing("dgeqrf"));
1070 }
1071 #endif
1072 
1073 
1074 #ifdef DEAL_II_WITH_LAPACK
1075 inline void
1076 geqrf (const types::blas_int *m, const types::blas_int *n, float *A, const types::blas_int *lda, float *tau, float *work, const types::blas_int *lwork, types::blas_int *info)
1077 {
1078  sgeqrf_ (m,n,A,lda,tau,work,lwork,info);
1079 }
1080 #else
1081 inline void
1082 geqrf (const types::blas_int *, const types::blas_int *, float *, const types::blas_int *, float *, float *, const types::blas_int *, types::blas_int *)
1083 {
1084  Assert (false, LAPACKSupport::ExcMissing("sgeqrf"));
1085 }
1086 #endif
1087 
1088 
1090 template <typename number1, typename number2, typename number3, typename number4>
1091 inline void
1092 ormqr (const char *, const char *, const types::blas_int *, const types::blas_int *, const types::blas_int *, const number1 *, const types::blas_int *, const number2 *, number3 *, const types::blas_int *, number4 *, const types::blas_int *, types::blas_int *)
1093 {
1094  Assert (false, ExcNotImplemented());
1095 }
1096 
1097 #ifdef DEAL_II_WITH_LAPACK
1098 inline void
1099 ormqr (const char *side, const char *trans, const types::blas_int *m, const types::blas_int *n, const types::blas_int *k, const double *A, const types::blas_int *lda, const double *tau, double *B, const types::blas_int *ldb, double *work, const types::blas_int *lwork, types::blas_int *info)
1100 {
1101  dormqr_ (side,trans,m,n,k,A,lda,tau,B,ldb,work,lwork,info);
1102 }
1103 #else
1104 inline void
1105 ormqr (const char *, const char *, const types::blas_int *, const types::blas_int *, const types::blas_int *, const double *, const types::blas_int *, const double *, double *, const types::blas_int *, double *, const types::blas_int *, types::blas_int *)
1106 {
1107  Assert (false, LAPACKSupport::ExcMissing("dormqr"));
1108 }
1109 #endif
1110 
1111 
1112 #ifdef DEAL_II_WITH_LAPACK
1113 inline void
1114 ormqr (const char *side, const char *trans, const types::blas_int *m, const types::blas_int *n, const types::blas_int *k, const float *A, const types::blas_int *lda, const float *tau, float *B, const types::blas_int *ldb, float *work, const types::blas_int *lwork, types::blas_int *info)
1115 {
1116  sormqr_ (side,trans,m,n,k,A,lda,tau,B,ldb,work,lwork,info);
1117 }
1118 #else
1119 inline void
1120 ormqr (const char *, const char *, const types::blas_int *, const types::blas_int *, const types::blas_int *, const float *, const types::blas_int *, const float *, float *, const types::blas_int *, float *, const types::blas_int *, types::blas_int *)
1121 {
1122  Assert (false, LAPACKSupport::ExcMissing("sormqr"));
1123 }
1124 #endif
1125 
1126 
1128 template <typename number1, typename number2, typename number3>
1129 inline void
1130 orgqr (const types::blas_int *, const types::blas_int *, const types::blas_int *, const number1 *, const types::blas_int *, const number2 *, number3 *, const types::blas_int *, types::blas_int *)
1131 {
1132  Assert (false, ExcNotImplemented());
1133 }
1134 
1135 #ifdef DEAL_II_WITH_LAPACK
1136 inline void
1137 orgqr (const types::blas_int *m, const types::blas_int *n, const types::blas_int *k, const double *A, const types::blas_int *lda, const double *tau, double *work, const types::blas_int *lwork, types::blas_int *info)
1138 {
1139  dorgqr_ (m,n,k,A,lda,tau,work,lwork,info);
1140 }
1141 #else
1142 inline void
1143 orgqr (const types::blas_int *, const types::blas_int *, const types::blas_int *, const double *, const types::blas_int *, const double *, double *, const types::blas_int *, types::blas_int *)
1144 {
1145  Assert (false, LAPACKSupport::ExcMissing("dorgqr"));
1146 }
1147 #endif
1148 
1149 
1150 #ifdef DEAL_II_WITH_LAPACK
1151 inline void
1152 orgqr (const types::blas_int *m, const types::blas_int *n, const types::blas_int *k, const float *A, const types::blas_int *lda, const float *tau, float *work, const types::blas_int *lwork, types::blas_int *info)
1153 {
1154  sorgqr_ (m,n,k,A,lda,tau,work,lwork,info);
1155 }
1156 #else
1157 inline void
1158 orgqr (const types::blas_int *, const types::blas_int *, const types::blas_int *, const float *, const types::blas_int *, const float *, float *, const types::blas_int *, types::blas_int *)
1159 {
1160  Assert (false, LAPACKSupport::ExcMissing("sorgqr"));
1161 }
1162 #endif
1163 
1164 
1166 template <typename number1, typename number2>
1167 inline void
1168 trtrs (const char *, const char *, const char *, const types::blas_int *, const types::blas_int *, const number1 *, const types::blas_int *, number2 *, const types::blas_int *, types::blas_int *)
1169 {
1170  Assert (false, ExcNotImplemented());
1171 }
1172 
1173 #ifdef DEAL_II_WITH_LAPACK
1174 inline void
1175 trtrs (const char *uplo, const char *trans, const char *diag, const types::blas_int *n, const types::blas_int *n_rhs, const double *A, const types::blas_int *lda, double *B, const types::blas_int *ldb, types::blas_int *info)
1176 {
1177  dtrtrs_ (uplo,trans,diag,n,n_rhs,A,lda,B,ldb,info);
1178 }
1179 #else
1180 inline void
1181 trtrs (const char *, const char *, const char *, const types::blas_int *, const types::blas_int *, const double *, const types::blas_int *, double *, const types::blas_int *, types::blas_int *)
1182 {
1183  Assert (false, LAPACKSupport::ExcMissing("dtrtrs"));
1184 }
1185 #endif
1186 
1187 
1188 #ifdef DEAL_II_WITH_LAPACK
1189 inline void
1190 trtrs (const char *uplo, const char *trans, const char *diag, const types::blas_int *n, const types::blas_int *n_rhs, const float *A, const types::blas_int *lda, float *B, const types::blas_int *ldb, types::blas_int *info)
1191 {
1192  strtrs_ (uplo,trans,diag,n,n_rhs,A,lda,B,ldb,info);
1193 }
1194 #else
1195 inline void
1196 trtrs (const char *, const char *, const char *, const types::blas_int *, const types::blas_int *, const float *, const types::blas_int *, float *, const types::blas_int *, types::blas_int *)
1197 {
1198  Assert (false, LAPACKSupport::ExcMissing("strtrs"));
1199 }
1200 #endif
1201 
1202 
1204 template <typename number1, typename number2, typename number3, typename number4, typename number5, typename number6>
1205 inline void
1206 geev (const char *, const char *, const types::blas_int *, number1 *, const types::blas_int *, number2 *, number3 *, number4 *, const types::blas_int *, number5 *, const types::blas_int *, number6 *, const types::blas_int *, types::blas_int *)
1207 {
1208  Assert (false, ExcNotImplemented());
1209 }
1210 
1211 #ifdef DEAL_II_WITH_LAPACK
1212 inline void
1213 geev (const char *jobvl, const char *jobvr, const types::blas_int *n, double *A, const types::blas_int *lda, double *lambda_re, double *lambda_im, double *vl, const types::blas_int *ldvl, double *vr, const types::blas_int *ldva, double *work, const types::blas_int *lwork, types::blas_int *info)
1214 {
1215  dgeev_ (jobvl,jobvr,n,A,lda,lambda_re,lambda_im,vl,ldvl,vr,ldva,work,lwork,info);
1216 }
1217 #else
1218 inline void
1219 geev (const char *, const char *, const types::blas_int *, double *, const types::blas_int *, double *, double *, double *, const types::blas_int *, double *, const types::blas_int *, double *, const types::blas_int *, types::blas_int *)
1220 {
1221  Assert (false, LAPACKSupport::ExcMissing("dgeev"));
1222 }
1223 #endif
1224 
1225 
1226 #ifdef DEAL_II_WITH_LAPACK
1227 inline void
1228 geev (const char *jobvl, const char *jobvr, const types::blas_int *n, float *A, const types::blas_int *lda, float *lambda_re, float *lambda_im, float *vl, const types::blas_int *ldvl, float *vr, const types::blas_int *ldva, float *work, const types::blas_int *lwork, types::blas_int *info)
1229 {
1230  sgeev_ (jobvl,jobvr,n,A,lda,lambda_re,lambda_im,vl,ldvl,vr,ldva,work,lwork,info);
1231 }
1232 #else
1233 inline void
1234 geev (const char *, const char *, const types::blas_int *, float *, const types::blas_int *, float *, float *, float *, const types::blas_int *, float *, const types::blas_int *, float *, const types::blas_int *, types::blas_int *)
1235 {
1236  Assert (false, LAPACKSupport::ExcMissing("sgeev"));
1237 }
1238 #endif
1239 
1240 
1242 template <typename number1, typename number2, typename number3, typename number4, typename number5, typename number6, typename number7, typename number8, typename number9, typename number10>
1243 inline void
1244 geevx (const char *, const char *, const char *, const char *, const types::blas_int *, number1 *, const types::blas_int *, number2 *, number3 *, number4 *, const types::blas_int *, number5 *, const types::blas_int *, types::blas_int *, types::blas_int *, number6 *, number7 *, number8 *, number9 *, number10 *, const types::blas_int *, types::blas_int *, types::blas_int *)
1245 {
1246  Assert (false, ExcNotImplemented());
1247 }
1248 
1249 #ifdef DEAL_II_WITH_LAPACK
1250 inline void
1251 geevx (const char *balanc, const char *jobvl, const char *jobvr, const char *sense, const types::blas_int *n, double *A, const types::blas_int *lda, double *lambda_re, double *lambda_im, double *vl, const types::blas_int *ldvl, double *vr, const types::blas_int *ldvr, types::blas_int *ilo, types::blas_int *ihi, double *scale, double *abnrm, double *rconde, double *rcondv, double *work, const types::blas_int *lwork, types::blas_int *iwork, types::blas_int *info)
1252 {
1253  dgeevx_ (balanc,jobvl,jobvr,sense,n,A,lda,lambda_re,lambda_im,vl,ldvl,vr,ldvr,ilo,ihi,scale,abnrm,rconde,rcondv,work,lwork,iwork,info);
1254 }
1255 #else
1256 inline void
1257 geevx (const char *, const char *, const char *, const char *, const types::blas_int *, double *, const types::blas_int *, double *, double *, double *, const types::blas_int *, double *, const types::blas_int *, types::blas_int *, types::blas_int *, double *, double *, double *, double *, double *, const types::blas_int *, types::blas_int *, types::blas_int *)
1258 {
1259  Assert (false, LAPACKSupport::ExcMissing("dgeevx"));
1260 }
1261 #endif
1262 
1263 
1264 #ifdef DEAL_II_WITH_LAPACK
1265 inline void
1266 geevx (const char *balanc, const char *jobvl, const char *jobvr, const char *sense, const types::blas_int *n, float *A, const types::blas_int *lda, float *lambda_re, float *lambda_im, float *vl, const types::blas_int *ldvl, float *vr, const types::blas_int *ldvr, types::blas_int *ilo, types::blas_int *ihi, float *scale, float *abnrm, float *rconde, float *rcondv, float *work, const types::blas_int *lwork, types::blas_int *iwork, types::blas_int *info)
1267 {
1268  sgeevx_ (balanc,jobvl,jobvr,sense,n,A,lda,lambda_re,lambda_im,vl,ldvl,vr,ldvr,ilo,ihi,scale,abnrm,rconde,rcondv,work,lwork,iwork,info);
1269 }
1270 #else
1271 inline void
1272 geevx (const char *, const char *, const char *, const char *, const types::blas_int *, float *, const types::blas_int *, float *, float *, float *, const types::blas_int *, float *, const types::blas_int *, types::blas_int *, types::blas_int *, float *, float *, float *, float *, float *, const types::blas_int *, types::blas_int *, types::blas_int *)
1273 {
1274  Assert (false, LAPACKSupport::ExcMissing("sgeevx"));
1275 }
1276 #endif
1277 
1278 
1280 template <typename number1, typename number2, typename number3>
1281 inline void
1282 syev (const char *, const char *, const types::blas_int *, number1 *, const types::blas_int *, number2 *, number3 *, const types::blas_int *, types::blas_int *)
1283 {
1284  Assert (false, ExcNotImplemented());
1285 }
1286 
1287 #ifdef DEAL_II_WITH_LAPACK
1288 inline void
1289 syev (const char *jobz, const char *uplo, const types::blas_int *n, double *A, const types::blas_int *lda, double *w, double *work, const types::blas_int *lwork, types::blas_int *info)
1290 {
1291  dsyev_ (jobz,uplo,n,A,lda,w,work,lwork,info);
1292 }
1293 #else
1294 inline void
1295 syev (const char *, const char *, const types::blas_int *, double *, const types::blas_int *, double *, double *, const types::blas_int *, types::blas_int *)
1296 {
1297  Assert (false, LAPACKSupport::ExcMissing("dsyev"));
1298 }
1299 #endif
1300 
1301 
1302 #ifdef DEAL_II_WITH_LAPACK
1303 inline void
1304 syev (const char *jobz, const char *uplo, const types::blas_int *n, float *A, const types::blas_int *lda, float *w, float *work, const types::blas_int *lwork, types::blas_int *info)
1305 {
1306  ssyev_ (jobz,uplo,n,A,lda,w,work,lwork,info);
1307 }
1308 #else
1309 inline void
1310 syev (const char *, const char *, const types::blas_int *, float *, const types::blas_int *, float *, float *, const types::blas_int *, types::blas_int *)
1311 {
1312  Assert (false, LAPACKSupport::ExcMissing("ssyev"));
1313 }
1314 #endif
1315 
1316 
1318 template <typename number1, typename number2, typename number3, typename number4, typename number5, typename number6, typename number7>
1319 inline void
1320 syevx (const char *, const char *, const char *, const types::blas_int *, number1 *, const types::blas_int *, const number2 *, const number3 *, const types::blas_int *, const types::blas_int *, const number4 *, types::blas_int *, number5 *, number6 *, const types::blas_int *, number7 *, const types::blas_int *, types::blas_int *, types::blas_int *, types::blas_int *)
1321 {
1322  Assert (false, ExcNotImplemented());
1323 }
1324 
1325 #ifdef DEAL_II_WITH_LAPACK
1326 inline void
1327 syevx (const char *jobz, const char *range, const char *uplo, const types::blas_int *n, double *A, const types::blas_int *lda, const double *vl, const double *vu, const types::blas_int *il, const types::blas_int *iu, const double *abstol, types::blas_int *m, double *w, double *z, const types::blas_int *ldz, double *work, const types::blas_int *lwork, types::blas_int *iwork, types::blas_int *ifail, types::blas_int *info)
1328 {
1329  dsyevx_ (jobz,range,uplo,n,A,lda,vl,vu,il,iu,abstol,m,w,z,ldz,work,lwork,iwork,ifail,info);
1330 }
1331 #else
1332 inline void
1333 syevx (const char *, const char *, const char *, const types::blas_int *, double *, const types::blas_int *, const double *, const double *, const types::blas_int *, const types::blas_int *, const double *, types::blas_int *, double *, double *, const types::blas_int *, double *, const types::blas_int *, types::blas_int *, types::blas_int *, types::blas_int *)
1334 {
1335  Assert (false, LAPACKSupport::ExcMissing("dsyevx"));
1336 }
1337 #endif
1338 
1339 
1340 #ifdef DEAL_II_WITH_LAPACK
1341 inline void
1342 syevx (const char *jobz, const char *range, const char *uplo, const types::blas_int *n, float *A, const types::blas_int *lda, const float *vl, const float *vu, const types::blas_int *il, const types::blas_int *iu, const float *abstol, types::blas_int *m, float *w, float *z, const types::blas_int *ldz, float *work, const types::blas_int *lwork, types::blas_int *iwork, types::blas_int *ifail, types::blas_int *info)
1343 {
1344  ssyevx_ (jobz,range,uplo,n,A,lda,vl,vu,il,iu,abstol,m,w,z,ldz,work,lwork,iwork,ifail,info);
1345 }
1346 #else
1347 inline void
1348 syevx (const char *, const char *, const char *, const types::blas_int *, float *, const types::blas_int *, const float *, const float *, const types::blas_int *, const types::blas_int *, const float *, types::blas_int *, float *, float *, const types::blas_int *, float *, const types::blas_int *, types::blas_int *, types::blas_int *, types::blas_int *)
1349 {
1350  Assert (false, LAPACKSupport::ExcMissing("ssyevx"));
1351 }
1352 #endif
1353 
1354 
1355 // Template wrapper for LAPACK functions dsyevr and ssyevr
1356 template <typename number>
1357 inline void
1358 syevr(const char * /*jobz*/,
1359  const char * /*range*/,
1360  const char * /*uplo*/,
1361  const types::blas_int * /*n*/,
1362  number * /*A*/,
1363  const types::blas_int * /*lda*/,
1364  const number * /*vl*/,
1365  const number * /*vu*/,
1366  const types::blas_int * /*il*/,
1367  const types::blas_int * /*iu*/,
1368  const number * /*abstol*/,
1369  types::blas_int * /*m*/,
1370  number * /*w*/,
1371  number * /*z*/,
1372  const types::blas_int * /*ldz*/,
1373  types::blas_int * /*isuppz*/,
1374  number * /*work*/,
1375  types::blas_int * /*lwork*/,
1376  types::blas_int * /*iwork*/,
1377  types::blas_int * /*liwork*/,
1378  types::blas_int * /*info*/)
1379 {
1380  Assert(false, ExcNotImplemented());
1381 }
1382 
1383 
1384 #ifdef DEAL_II_WITH_LAPACK
1385 inline void
1386 syevr(const char *jobz,
1387  const char *range,
1388  const char *uplo,
1389  const types::blas_int *n,
1390  double *A,
1391  const types::blas_int *lda,
1392  const double *vl,
1393  const double *vu,
1394  const types::blas_int *il,
1395  const types::blas_int *iu,
1396  const double *abstol,
1397  types::blas_int *m,
1398  double *w,
1399  double *z,
1400  const types::blas_int *ldz,
1401  types::blas_int *isuppz,
1402  double *work,
1403  types::blas_int *lwork,
1404  types::blas_int *iwork,
1405  types::blas_int *liwork,
1406  types::blas_int *info)
1407 {
1408  /*
1409  * Netlib and Atlas Lapack perform floating point tests (e.g. divide-by-zero) within the call to dsyevr
1410  * causing floating point exceptions to be thrown (at least in debug mode). Therefore, we wrap the calls
1411  * to dsyevr into the following code to suppress the exception.
1412  */
1413 #ifdef DEAL_II_HAVE_FP_EXCEPTIONS
1414  fenv_t fp_exceptions;
1415  feholdexcept(&fp_exceptions);
1416 #endif
1417 
1418  dsyevr_(jobz,range,uplo,n,A,lda,vl,vu,il,iu,abstol,m,w,z,ldz,isuppz,work,lwork,iwork,liwork,info);
1419 
1420 #ifdef DEAL_II_HAVE_FP_EXCEPTIONS
1421  fesetenv(&fp_exceptions);
1422 #endif
1423 }
1424 
1425 inline void
1426 syevr(const char *jobz,
1427  const char *range,
1428  const char *uplo,
1429  const types::blas_int *n,
1430  float *A,
1431  const types::blas_int *lda,
1432  const float *vl,
1433  const float *vu,
1434  const types::blas_int *il,
1435  const types::blas_int *iu,
1436  const float *abstol,
1437  types::blas_int *m,
1438  float *w,
1439  float *z,
1440  const types::blas_int *ldz,
1441  types::blas_int *isuppz,
1442  float *work,
1443  types::blas_int *lwork,
1444  types::blas_int *iwork,
1445  types::blas_int *liwork,
1446  types::blas_int *info)
1447 {
1448  /*
1449  * Netlib and Atlas Lapack perform floating point tests (e.g. divide-by-zero) within the call to ssyevr
1450  * causing floating point exceptions to be thrown (at least in debug mode). Therefore, we wrap the calls
1451  * to ssyevr into the following code to suppress the exception.
1452  */
1453 #ifdef DEAL_II_HAVE_FP_EXCEPTIONS
1454  fenv_t fp_exceptions;
1455  feholdexcept(&fp_exceptions);
1456 #endif
1457 
1458  ssyevr_(jobz,range,uplo,n,A,lda,vl,vu,il,iu,abstol,m,w,z,ldz,isuppz,work,lwork,iwork,liwork,info);
1459 
1460 #ifdef DEAL_II_HAVE_FP_EXCEPTIONS
1461  fesetenv(&fp_exceptions);
1462 #endif
1463 }
1464 #endif
1465 
1466 
1468 template <typename number1, typename number2, typename number3, typename number4>
1469 inline void
1470 sygv (const types::blas_int *, const char *, const char *, const types::blas_int *, number1 *, const types::blas_int *, number2 *, const types::blas_int *, number3 *, number4 *, const types::blas_int *, types::blas_int *)
1471 {
1472  Assert (false, ExcNotImplemented());
1473 }
1474 
1475 #ifdef DEAL_II_WITH_LAPACK
1476 inline void
1477 sygv (const types::blas_int *itype, const char *jobz, const char *uplo, const types::blas_int *n, double *A, const types::blas_int *lda, double *B, const types::blas_int *ldb, double *w, double *work, const types::blas_int *lwork, types::blas_int *info)
1478 {
1479  dsygv_ (itype,jobz,uplo,n,A,lda,B,ldb,w,work,lwork,info);
1480 }
1481 #else
1482 inline void
1483 sygv (const types::blas_int *, const char *, const char *, const types::blas_int *, double *, const types::blas_int *, double *, const types::blas_int *, double *, double *, const types::blas_int *, types::blas_int *)
1484 {
1485  Assert (false, LAPACKSupport::ExcMissing("dsygv"));
1486 }
1487 #endif
1488 
1489 
1490 #ifdef DEAL_II_WITH_LAPACK
1491 inline void
1492 sygv (const types::blas_int *itype, const char *jobz, const char *uplo, const types::blas_int *n, float *A, const types::blas_int *lda, float *B, const types::blas_int *ldb, float *w, float *work, const types::blas_int *lwork, types::blas_int *info)
1493 {
1494  ssygv_ (itype,jobz,uplo,n,A,lda,B,ldb,w,work,lwork,info);
1495 }
1496 #else
1497 inline void
1498 sygv (const types::blas_int *, const char *, const char *, const types::blas_int *, float *, const types::blas_int *, float *, const types::blas_int *, float *, float *, const types::blas_int *, types::blas_int *)
1499 {
1500  Assert (false, LAPACKSupport::ExcMissing("ssygv"));
1501 }
1502 #endif
1503 
1504 
1506 template <typename number1, typename number2, typename number3, typename number4, typename number5, typename number6, typename number7, typename number8>
1507 inline void
1508 sygvx (const types::blas_int *, const char *, const char *, const char *, const types::blas_int *, number1 *, const types::blas_int *, number2 *, const types::blas_int *, const number3 *, const number4 *, const types::blas_int *, const types::blas_int *, const number5 *, types::blas_int *, number6 *, number7 *, const types::blas_int *, number8 *, const types::blas_int *, types::blas_int *, types::blas_int *, types::blas_int *)
1509 {
1510  Assert (false, ExcNotImplemented());
1511 }
1512 
1513 #ifdef DEAL_II_WITH_LAPACK
1514 inline void
1515 sygvx (const types::blas_int *itype, const char *jobz, const char *range, const char *uplo, const types::blas_int *n, double *A, const types::blas_int *lda, double *B, const types::blas_int *ldb, const double *vl, const double *vu, const types::blas_int *il, const types::blas_int *iu, const double *abstol, types::blas_int *m, double *w, double *z, const types::blas_int *ldz, double *work, const types::blas_int *lwork, types::blas_int *iwork, types::blas_int *ifail, types::blas_int *info)
1516 {
1517  dsygvx_ (itype,jobz,range,uplo,n,A,lda,B,ldb,vl,vu,il,iu,abstol,m,w,z,ldz,work,lwork,iwork,ifail,info);
1518 }
1519 #else
1520 inline void
1521 sygvx (const types::blas_int *, const char *, const char *, const char *, const types::blas_int *, double *, const types::blas_int *, double *, const types::blas_int *, const double *, const double *, const types::blas_int *, const types::blas_int *, const double *, types::blas_int *, double *, double *, const types::blas_int *, double *, const types::blas_int *, types::blas_int *, types::blas_int *, types::blas_int *)
1522 {
1523  Assert (false, LAPACKSupport::ExcMissing("dsygvx"));
1524 }
1525 #endif
1526 
1527 
1528 #ifdef DEAL_II_WITH_LAPACK
1529 inline void
1530 sygvx (const types::blas_int *itype, const char *jobz, const char *range, const char *uplo, const types::blas_int *n, float *A, const types::blas_int *lda, float *B, const types::blas_int *ldb, const float *vl, const float *vu, const types::blas_int *il, const types::blas_int *iu, const float *abstol, types::blas_int *m, float *w, float *z, const types::blas_int *ldz, float *work, const types::blas_int *lwork, types::blas_int *iwork, types::blas_int *ifail, types::blas_int *info)
1531 {
1532  ssygvx_ (itype,jobz,range,uplo,n,A,lda,B,ldb,vl,vu,il,iu,abstol,m,w,z,ldz,work,lwork,iwork,ifail,info);
1533 }
1534 #else
1535 inline void
1536 sygvx (const types::blas_int *, const char *, const char *, const char *, const types::blas_int *, float *, const types::blas_int *, float *, const types::blas_int *, const float *, const float *, const types::blas_int *, const types::blas_int *, const float *, types::blas_int *, float *, float *, const types::blas_int *, float *, const types::blas_int *, types::blas_int *, types::blas_int *, types::blas_int *)
1537 {
1538  Assert (false, LAPACKSupport::ExcMissing("ssygvx"));
1539 }
1540 #endif
1541 
1542 
1544 template <typename number1, typename number2, typename number3, typename number4, typename number5>
1545 inline void
1546 gesdd (const char *, const types::blas_int *, const types::blas_int *, number1 *, const types::blas_int *, number2 *, number3 *, const types::blas_int *, number4 *, const types::blas_int *, number5 *, const types::blas_int *, types::blas_int *, types::blas_int *)
1547 {
1548  Assert (false, ExcNotImplemented());
1549 }
1550 
1551 #ifdef DEAL_II_WITH_LAPACK
1552 inline void
1553 gesdd (const char *jobz, const types::blas_int *m, const types::blas_int *n, double *A, const types::blas_int *lda, double *s, double *u, const types::blas_int *ldu, double *vt, const types::blas_int *ldvt, double *work, const types::blas_int *lwork, types::blas_int *iwork, types::blas_int *info)
1554 {
1555  dgesdd_ (jobz,m,n,A,lda,s,u,ldu,vt,ldvt,work,lwork,iwork,info);
1556 }
1557 #else
1558 inline void
1559 gesdd (const char *, const types::blas_int *, const types::blas_int *, double *, const types::blas_int *, double *, double *, const types::blas_int *, double *, const types::blas_int *, double *, const types::blas_int *, types::blas_int *, types::blas_int *)
1560 {
1561  Assert (false, LAPACKSupport::ExcMissing("dgesdd"));
1562 }
1563 #endif
1564 
1565 
1566 #ifdef DEAL_II_WITH_LAPACK
1567 inline void
1568 gesdd (const char *jobz, const types::blas_int *m, const types::blas_int *n, float *A, const types::blas_int *lda, float *s, float *u, const types::blas_int *ldu, float *vt, const types::blas_int *ldvt, float *work, const types::blas_int *lwork, types::blas_int *iwork, types::blas_int *info)
1569 {
1570  sgesdd_ (jobz,m,n,A,lda,s,u,ldu,vt,ldvt,work,lwork,iwork,info);
1571 }
1572 #else
1573 inline void
1574 gesdd (const char *, const types::blas_int *, const types::blas_int *, float *, const types::blas_int *, float *, float *, const types::blas_int *, float *, const types::blas_int *, float *, const types::blas_int *, types::blas_int *, types::blas_int *)
1575 {
1576  Assert (false, LAPACKSupport::ExcMissing("sgesdd"));
1577 }
1578 #endif
1579 
1580 
1582 template <typename number1, typename number2, typename number3, typename number4, typename number5>
1583 inline void
1584 gesvd (types::blas_int *, types::blas_int *, const types::blas_int *, const types::blas_int *, number1 *, const types::blas_int *, number2 *, number3 *, const types::blas_int *, number4 *, const types::blas_int *, number5 *, const types::blas_int *, types::blas_int *)
1585 {
1586  Assert (false, ExcNotImplemented());
1587 }
1588 
1589 #ifdef DEAL_II_WITH_LAPACK
1590 inline void
1591 gesvd (types::blas_int *jobu, types::blas_int *jobvt, const types::blas_int *n, const types::blas_int *m, double *A, const types::blas_int *lda, double *s, double *u, const types::blas_int *ldu, double *vt, const types::blas_int *ldvt, double *work, const types::blas_int *lwork, types::blas_int *info)
1592 {
1593  dgesvd_ (jobu,jobvt,n,m,A,lda,s,u,ldu,vt,ldvt,work,lwork,info);
1594 }
1595 #else
1596 inline void
1597 gesvd (types::blas_int *, types::blas_int *, const types::blas_int *, const types::blas_int *, double *, const types::blas_int *, double *, double *, const types::blas_int *, double *, const types::blas_int *, double *, const types::blas_int *, types::blas_int *)
1598 {
1599  Assert (false, LAPACKSupport::ExcMissing("dgesvd"));
1600 }
1601 #endif
1602 
1603 
1604 #ifdef DEAL_II_WITH_LAPACK
1605 inline void
1606 gesvd (types::blas_int *jobu, types::blas_int *jobvt, const types::blas_int *n, const types::blas_int *m, float *A, const types::blas_int *lda, float *s, float *u, const types::blas_int *ldu, float *vt, const types::blas_int *ldvt, float *work, const types::blas_int *lwork, types::blas_int *info)
1607 {
1608  sgesvd_ (jobu,jobvt,n,m,A,lda,s,u,ldu,vt,ldvt,work,lwork,info);
1609 }
1610 #else
1611 inline void
1612 gesvd (types::blas_int *, types::blas_int *, const types::blas_int *, const types::blas_int *, float *, const types::blas_int *, float *, float *, const types::blas_int *, float *, const types::blas_int *, float *, const types::blas_int *, types::blas_int *)
1613 {
1614  Assert (false, LAPACKSupport::ExcMissing("sgesvd"));
1615 }
1616 #endif
1617 
1618 
1620 template <typename number1, typename number2, typename number3, typename number4, typename number5>
1621 inline void
1622 gelsd (const types::blas_int *, const types::blas_int *, const types::blas_int *, const number1 *, const types::blas_int *, number2 *, const types::blas_int *, number3 *, const number4 *, types::blas_int *, number5 *, const types::blas_int *, types::blas_int *, types::blas_int *)
1623 {
1624  Assert (false, ExcNotImplemented());
1625 }
1626 
1627 #ifdef DEAL_II_WITH_LAPACK
1628 inline void
1629 gelsd (const types::blas_int *m, const types::blas_int *n, const types::blas_int *nrhs, const double *A, const types::blas_int *lda, double *B, const types::blas_int *ldb, double *s, const double *rcond, types::blas_int *rank, double *work, const types::blas_int *lwork, types::blas_int *iwork, types::blas_int *info)
1630 {
1631  dgelsd_ (m,n,nrhs,A,lda,B,ldb,s,rcond,rank,work,lwork,iwork,info);
1632 }
1633 #else
1634 inline void
1635 gelsd (const types::blas_int *, const types::blas_int *, const types::blas_int *, const double *, const types::blas_int *, double *, const types::blas_int *, double *, const double *, types::blas_int *, double *, const types::blas_int *, types::blas_int *, types::blas_int *)
1636 {
1637  Assert (false, LAPACKSupport::ExcMissing("dgelsd"));
1638 }
1639 #endif
1640 
1641 
1642 #ifdef DEAL_II_WITH_LAPACK
1643 inline void
1644 gelsd (const types::blas_int *m, const types::blas_int *n, const types::blas_int *nrhs, const float *A, const types::blas_int *lda, float *B, const types::blas_int *ldb, float *s, const float *rcond, types::blas_int *rank, float *work, const types::blas_int *lwork, types::blas_int *iwork, types::blas_int *info)
1645 {
1646  sgelsd_ (m,n,nrhs,A,lda,B,ldb,s,rcond,rank,work,lwork,iwork,info);
1647 }
1648 #else
1649 inline void
1650 gelsd (const types::blas_int *, const types::blas_int *, const types::blas_int *, const float *, const types::blas_int *, float *, const types::blas_int *, float *, const float *, types::blas_int *, float *, const types::blas_int *, types::blas_int *, types::blas_int *)
1651 {
1652  Assert (false, LAPACKSupport::ExcMissing("sgelsd"));
1653 }
1654 #endif
1655 
1656 
1658 template <typename number1, typename number2, typename number3, typename number4>
1659 inline void
1660 stev (const char *, const types::blas_int *, number1 *, number2 *, number3 *, const types::blas_int *, number4 *, types::blas_int *)
1661 {
1662  Assert (false, ExcNotImplemented());
1663 }
1664 
1665 #ifdef DEAL_II_WITH_LAPACK
1666 inline void
1667 stev (const char *jobz, const types::blas_int *n, double *d, double *e, double *z, const types::blas_int *ldz, double *work, types::blas_int *info)
1668 {
1669  dstev_ (jobz,n,d,e,z,ldz,work,info);
1670 }
1671 #else
1672 inline void
1673 stev (const char *, const types::blas_int *, double *, double *, double *, const types::blas_int *, double *, types::blas_int *)
1674 {
1675  Assert (false, LAPACKSupport::ExcMissing("dstev"));
1676 }
1677 #endif
1678 
1679 
1680 #ifdef DEAL_II_WITH_LAPACK
1681 inline void
1682 stev (const char *jobz, const types::blas_int *n, float *d, float *e, float *z, const types::blas_int *ldz, float *work, types::blas_int *info)
1683 {
1684  sstev_ (jobz,n,d,e,z,ldz,work,info);
1685 }
1686 #else
1687 inline void
1688 stev (const char *, const types::blas_int *, float *, float *, float *, const types::blas_int *, float *, types::blas_int *)
1689 {
1690  Assert (false, LAPACKSupport::ExcMissing("sstev"));
1691 }
1692 #endif
1693 
1694 
1696 template <typename number>
1697 inline void
1698 lascl(const char *,
1699  const types::blas_int *,
1700  const types::blas_int *,
1701  const number *,
1702  const number *,
1703  const types::blas_int *,
1704  const types::blas_int *,
1705  number *,
1706  const types::blas_int *,
1707  types::blas_int *)
1708 {
1709  Assert (false, ExcNotImplemented());
1710 }
1711 
1712 #ifdef DEAL_II_WITH_LAPACK
1713 inline void
1714 lascl(const char *type,
1715  const types::blas_int *kl,
1716  const types::blas_int *ku,
1717  const double *cfrom,
1718  const double *cto,
1719  const types::blas_int *m,
1720  const types::blas_int *n,
1721  double *A,
1722  const types::blas_int *lda,
1723  types::blas_int *info)
1724 {
1725  dlascl_(type,kl,ku,cfrom,cto,m,n,A,lda,info);
1726 }
1727 #else
1728 inline void
1729 lascl(const char *, const types::blas_int *, const types::blas_int *, const double *, const double *,
1730  const types::blas_int *, const types::blas_int *, double *, const types::blas_int *, types::blas_int *)
1731 {
1732  Assert (false, LAPACKSupport::ExcMissing("dlascl"));
1733 }
1734 #endif
1735 
1736 #ifdef DEAL_II_WITH_LAPACK
1737 inline void
1738 lascl(const char *type,
1739  const types::blas_int *kl,
1740  const types::blas_int *ku,
1741  const float *cfrom,
1742  const float *cto,
1743  const types::blas_int *m,
1744  const types::blas_int *n,
1745  float *A,
1746  const types::blas_int *lda,
1747  types::blas_int *info)
1748 {
1749  slascl_(type,kl,ku,cfrom,cto,m,n,A,lda,info);
1750 }
1751 #else
1752 inline void
1753 lascl(const char *, const types::blas_int *, const types::blas_int *, const float *, const float *,
1754  const types::blas_int *, const types::blas_int *, float *, const types::blas_int *, types::blas_int *)
1755 {
1756  Assert (false, LAPACKSupport::ExcMissing("slascl"));
1757 }
1758 #endif
1759 
1760 
1762 template <typename number>
1763 inline void
1764 lamch(const char * /*chmach*/, number & /*precision*/)
1765 {
1766  Assert(false, ExcNotImplemented());
1767 }
1768 
1769 #ifdef DEAL_II_WITH_LAPACK
1770 inline void
1771 lamch(const char *chmach, double &precision)
1772 {
1773  precision = dlamch_(chmach);
1774 }
1775 
1776 inline void
1777 lamch(const char *chmach, float &precision)
1778 {
1779  precision = slamch_(chmach);
1780 }
1781 #endif
1782 
1783 DEAL_II_NAMESPACE_CLOSE
1784 
1785 #endif
int blas_int
#define Assert(cond, exc)
Definition: exceptions.h:1142
static ::ExceptionBase & ExcMissing(char *arg1)
static ::ExceptionBase & ExcNotImplemented()