Teuchos - Trilinos Tools Package  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Teuchos_LAPACK.cpp
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Teuchos: Common Tools Package
5 // Copyright (2004) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38 //
39 // ***********************************************************************
40 // @HEADER
41 
42 #include <vector>
43 #include "Teuchos_ConfigDefs.hpp"
44 #include "Teuchos_ScalarTraits.hpp"
45 #include "Teuchos_LAPACK.hpp"
47 #ifdef HAVE_TEUCHOSCORE_QUADMATH
48 # include "Teuchos_Details_Lapack128.hpp" // impl for __float128
49 #endif // HAVE_TEUCHOSCORE_QUADMATH
50 #ifdef HAVE_TEUCHOS_LONG_DOUBLE
51 # include "Teuchos_Details_LapackLongDouble.hpp" // impl for long double
52 #endif // HAVE_TEUCHOS_LONG_DOUBLE
54 
55 /* for INTEL_CXML, the second arg may need to be changed to 'one'. If so
56 the appropriate declaration of one will need to be added back into
57 functions that include the macro:
58 */
59 
60 #ifdef CHAR_MACRO
61 #undef CHAR_MACRO
62 #endif
63 #if defined (INTEL_CXML)
64 #define CHAR_MACRO(char_var) &char_var, one
65 #else
66 #define CHAR_MACRO(char_var) &char_var
67 #endif
68 
69 #ifdef CHARPTR_MACRO
70 #undef CHARPR_MACRO
71 #endif
72 #if defined (INTEL_CXML)
73 #define CHARPTR_MACRO(charptr_var) charptr_var, one
74 #else
75 #define CHARPTR_MACRO(charptr_var) charptr_var
76 #endif
77 
78 namespace {
79 
80 #if defined (INTEL_CXML)
81  unsigned int one=1;
82 #endif
83 
84 // Use a wrapper function to handle calling ILAENV(). This removes
85 // duplicaiton and avoid name lookup problems with member functions called
86 // ILAENV() trying to call nonmember functions called ILAENV() (which does not
87 // work on Intel compiler on Windows, see Trilinos bug 5762).
88 inline
89 int ilaenv_wrapper(
90  const int* ispec, const char* name, const unsigned int& name_length,
91  const char* opts, const unsigned int& opts_length,
92  const int* N1, const int* N2, const int* N3, const int* N4 )
93 {
94 #if defined (INTEL_CXML)
95  return ILAENV_F77(ispec, name, name_length, opts, opts_length, N1, N2, N3, N4 );
96 #else
97  return ILAENV_F77(ispec, name, opts, N1, N2, N3, N4, name_length, opts_length );
98 #endif
99 }
100 
101 } // namespace
102 
103 
104 
105 extern "C" {
106 
107 
108 typedef int (*gees_nullfptr_t)(double*,double*);
109 
110 
111 } // extern "C"
112 
113 
114 namespace Teuchos
115 {
116  // BEGIN INT, FLOAT SPECIALIZATION IMPLEMENTATION //
117 
118  void LAPACK<int, float>::PTTRF(const int& n, float* d, float* e, int* info) const
119  { SPTTRF_F77(&n,d,e,info); }
120 
121 
122  void LAPACK<int, float>::PTTRS(const int& n, const int& nrhs, const float* d, const float* e, float* B, const int& ldb, int* info) const
123  { SPTTRS_F77(&n,&nrhs,d,e,B,&ldb,info); }
124 
125 
126  void LAPACK<int, float>::POTRF(const char& UPLO, const int& n, float* A, const int& lda, int* info) const
127  { SPOTRF_F77(CHAR_MACRO(UPLO), &n, A, &lda, info); }
128 
129 
130  void LAPACK<int, float>::POTRS(const char& UPLO, const int& n, const int& nrhs, const float* A, const int& lda, float* B, const int& ldb, int* info) const
131  { SPOTRS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info); }
132 
133 
134  void LAPACK<int, float>::POTRI(const char& UPLO, const int& n, float* A, const int& lda, int* info) const
135  { SPOTRI_F77(CHAR_MACRO(UPLO), &n, A, &lda, info); }
136 
137 
138  void LAPACK<int, float>::POCON(const char& UPLO, const int& n, const float* A, const int& lda, const float& anorm, float* rcond, float* WORK, int* IWORK, int* info) const
139  { SPOCON_F77(CHAR_MACRO(UPLO), &n, A, &lda, &anorm, rcond, WORK, IWORK, info); }
140 
141 
142  void LAPACK<int, float>::POSV(const char& UPLO, const int& n, const int& nrhs, float* A, const int& lda, float* B, const int& ldb, int* info) const
143  { SPOSV_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info); }
144 
145 
146  void LAPACK<int, float>::POEQU(const int& n, const float* A, const int& lda, float* S, float* scond, float* amax, int* info) const
147  { SPOEQU_F77(&n, A, &lda, S, scond, amax, info); }
148 
149  void LAPACK<int, float>::PORFS(const char& UPLO, const int& n, const int& nrhs, const float* A, const int& lda, const float* AF, const int& ldaf, const float* B, const int& ldb, float* X, const int& ldx, float* FERR, float* BERR, float* WORK, int* IWORK, int* info) const
150  { SPORFS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, B, &ldb, X, &ldx, FERR, BERR, WORK, IWORK, info); }
151 
152  void LAPACK<int, float>::POSVX(const char& FACT, const char& UPLO, const int& n, const int& nrhs, float* A, const int& lda, float* AF, const int& ldaf, char* EQUED, float* S, float* B, const int& ldb, float* X, const int& ldx, float* rcond, float* FERR, float* BERR, float* WORK, int* IWORK, int* info) const
153  { SPOSVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, CHARPTR_MACRO(EQUED), S, B, &ldb, X, &ldx, rcond, FERR, BERR, WORK, IWORK, info); }
154 
155 
156  void LAPACK<int,float>::GELS(const char& TRANS, const int& m, const int& n, const int& nrhs, float* A, const int& lda, float* B, const int& ldb, float* WORK, const int& lwork, int* info) const
157  { SGELS_F77(CHAR_MACRO(TRANS), &m, &n, &nrhs, A, &lda, B, &ldb, WORK, &lwork, info); }
158 
159  void LAPACK<int,float>::GELSS (const int& m, const int& n, const int& nrhs, float* A, const int& lda, float* B, const int& ldb, float* S, const float& rcond, int* rank, float* WORK, const int& lwork, float* rwork, int* info) const
160  {
161  (void) rwork;
162  SGELSS_F77(&m, &n, &nrhs, A, &lda, B, &ldb, S, &rcond, rank, WORK, &lwork, info);
163  }
164 
165  void LAPACK<int,float>::GELSS(const int& m, const int& n, const int& nrhs, float* A, const int& lda, float* B, const int& ldb, float* S, const float& rcond, int* rank, float* WORK, const int& lwork, int* info) const
166  { SGELSS_F77(&m, &n, &nrhs, A, &lda, B, &ldb, S, &rcond, rank, WORK, &lwork, info); }
167 
168 
169  void LAPACK<int,float>::GGLSE(const int& m, const int& n, const int& p, float* A, const int& lda, float* B, const int& ldb, float* C, float* D, float* X, float* WORK, const int& lwork, int* info) const
170  { SGGLSE_F77(&m, &n, &p, A, &lda, B, &ldb, C, D, X, WORK, &lwork, info); }
171 
172 
173  void LAPACK<int,float>::GEQRF( const int& m, const int& n, float* A, const int& lda, float* TAU, float* WORK, const int& lwork, int* info) const
174  { SGEQRF_F77(&m, &n, A, &lda, TAU, WORK, &lwork, info); }
175 
176  void LAPACK<int,float>::GEQR2 (const int& m, const int& n, float* A, const int& lda, float* TAU, float* WORK, int* const info) const
177  {
178  SGEQR2_F77(&m, &n, A, &lda, TAU, WORK, info);
179  }
180 
181  void LAPACK<int,float>::GETRF(const int& m, const int& n, float* A, const int& lda, int* IPIV, int* info) const
182  { SGETRF_F77(&m, &n, A, &lda, IPIV, info); }
183 
184 
185  void LAPACK<int,float>::GETRS(const char& TRANS, const int& n, const int& nrhs, const float* A, const int& lda, const int* IPIV, float* B, const int& ldb, int* info) const
186  { SGETRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, IPIV, B, &ldb, info); }
187 
188 
189  void LAPACK<int,float>::LASCL(const char& TYPE, const int& kl, const int& ku, const float& cfrom, const float& cto, const int& m, const int& n, float* A, const int& lda, int* info) const
190  { SLASCL_F77(CHAR_MACRO(TYPE), &kl, &ku, &cfrom, &cto, &m, &n, A, &lda, info); }
191 
192  void LAPACK<int,float>::GEQP3 (const int& m, const int& n, float* A, const int& lda, int* jpvt, float* TAU, float* WORK, const int& lwork, float* RWORK, int* info) const
193  {
194  (void) RWORK;
195  SGEQP3_F77(&m, &n, A, &lda, jpvt, TAU, WORK, &lwork, info);
196  }
197 
198  void LAPACK<int, float>::LASWP (const int& N, float* A, const int& LDA, const int& K1, const int& K2, const int* IPIV, const int& INCX) const
199  {
200  SLASWP_F77(&N, A, &LDA, &K1, &K2, IPIV, &INCX);
201  }
202 
203  void LAPACK<int,float>::GBTRF(const int& m, const int& n, const int& kl, const int& ku, float* A, const int& lda, int* IPIV, int* info) const
204  { SGBTRF_F77(&m, &n, &kl, &ku, A, &lda, IPIV, info); }
205 
206 
207  void LAPACK<int,float>::GBTRS(const char& TRANS, const int& n, const int& kl, const int& ku, const int& nrhs, const float* A, const int& lda, const int* IPIV, float* B, const int& ldb, int* info) const
208  { SGBTRS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, A, &lda, IPIV, B, &ldb, info); }
209 
210 
211  void LAPACK<int,float>::GTTRF(const int& n, float* dl, float* d, float* du, float* du2, int* IPIV, int* info) const
212  { SGTTRF_F77(&n, dl, d, du, du2, IPIV, info); }
213 
214 
215  void LAPACK<int,float>::GTTRS(const char& TRANS, const int& n, const int& nrhs, const float* dl, const float* d, const float* du, const float* du2, const int* IPIV, float* B, const int& ldb, int* info) const
216  { SGTTRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, dl, d, du, du2, IPIV, B, &ldb, info); }
217 
218 
219  void LAPACK<int,float>::GETRI(const int& n, float* A, const int& lda, const int* IPIV, float* WORK, const int& lwork, int* info) const
220  { SGETRI_F77(&n, A, &lda, IPIV, WORK, &lwork, info); }
221 
222  void LAPACK<int, float>::LATRS (const char& UPLO, const char& TRANS, const char& DIAG, const char& NORMIN, const int& N, const float* A, const int& LDA, float* X, float* SCALE, float* CNORM, int* INFO) const
223  {
224  SLATRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), CHAR_MACRO(NORMIN), &N, A, &LDA, X, SCALE, CNORM, INFO);
225  }
226 
227  void LAPACK<int,float>::GECON(const char& NORM, const int& n, const float* A, const int& lda, const float& anorm, float* rcond, float* WORK, int* IWORK, int* info) const
228  { SGECON_F77(CHAR_MACRO(NORM), &n, A, &lda, &anorm, rcond, WORK, IWORK, info); }
229 
230 
231  void LAPACK<int,float>::GBCON(const char& NORM, const int& n, const int& kl, const int& ku, const float* A, const int& lda, const int* IPIV, const float& anorm, float* rcond, float* WORK, int* IWORK, int* info) const
232  { SGBCON_F77(CHAR_MACRO(NORM), &n, &kl, &ku, A, &lda, IPIV, &anorm, rcond, WORK, IWORK, info); }
233 
234 
235  float LAPACK<int,float>::LANGB(const char& NORM, const int& n, const int& kl, const int& ku, const float* A, const int& lda, float* WORK) const
236  { return( SLANGB_F77(CHAR_MACRO(NORM), &n, &kl, &ku, A, &lda, WORK) ); }
237 
238 
239  void LAPACK<int,float>::GESV(const int& n, const int& nrhs, float* A, const int& lda, int* IPIV, float* B, const int& ldb, int* info) const
240  { SGESV_F77(&n, &nrhs, A, &lda, IPIV, B, &ldb, info); }
241 
242 
243  void LAPACK<int,float>::GEEQU(const int& m, const int& n, const float* A, const int& lda, float* R, float* C, float* rowcond, float* colcond, float* amax, int* info) const
244  { SGEEQU_F77(&m, &n, A, &lda, R, C, rowcond, colcond, amax, info); }
245 
246 
247  void LAPACK<int,float>::GERFS(const char& TRANS, const int& n, const int& nrhs, const float* A, const int& lda, const float* AF, const int& ldaf, const int* IPIV, const float* B, const int& ldb, float* X, const int& ldx, float* FERR, float* BERR, float* WORK, int* IWORK, int* info) const
248  { SGERFS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, IWORK, info); }
249 
250 
251  void LAPACK<int,float>::GBEQU(const int& m, const int& n, const int& kl, const int& ku, const float* A, const int& lda, float* R, float* C, float* rowcond, float* colcond, float* amax, int* info) const
252  { SGBEQU_F77(&m, &n, &kl, &ku, A, &lda, R, C, rowcond, colcond, amax, info); }
253 
254 
255  void LAPACK<int,float>::GBRFS(const char& TRANS, const int& n, const int& kl, const int& ku, const int& nrhs, const float* A, const int& lda, const float* AF, const int& ldaf, const int* IPIV, const float* B, const int& ldb, float* X, const int& ldx, float* FERR, float* BERR, float* WORK, int* IWORK, int* info) const
256  { SGBRFS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, IWORK, info); }
257 
258  void LAPACK<int,float>::GESVX(const char& FACT, const char& TRANS, const int& n, const int& nrhs, float* A, const int& lda, float* AF, const int& ldaf, int* IPIV, char* EQUED, float* R, float* C, float* B, const int& ldb, float* X, const int& ldx, float* rcond, float* FERR, float* BERR, float* WORK, int* IWORK, int* info) const
259  { SGESVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, CHARPTR_MACRO(EQUED), R, C, B, &ldb, X, &ldx, rcond, FERR, BERR, WORK, IWORK, info); }
260 
261 
262  void LAPACK<int,float>::SYTRD(const char& UPLO, const int& n, float* A, const int& lda, float* D, float* E, float* TAU, float* WORK, const int& lwork, int* info) const
263  { SSYTRD_F77(CHAR_MACRO(UPLO), &n, A, &lda, D, E, TAU, WORK, &lwork, info); }
264 
265 
266  void LAPACK<int,float>::GEHRD(const int& n, const int& ilo, const int& ihi, float* A, const int& lda, float* TAU, float* WORK, const int& lwork, int* info) const
267  { SGEHRD_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info); }
268 
269 
270  void LAPACK<int,float>::TRTRS(const char& UPLO, const char& TRANS, const char& DIAG, const int& n, const int& nrhs, const float* A, const int& lda, float* B, const int& ldb, int* info) const
271  { STRTRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), &n, &nrhs, A, &lda, B, &ldb, info); }
272 
273 
274  void LAPACK<int,float>::TRTRI(const char& UPLO, const char& DIAG, const int& n, float* A, const int& lda, int* info) const
275  { STRTRI_F77(CHAR_MACRO(UPLO), CHAR_MACRO(DIAG), &n, A, &lda, info); }
276 
277 
278  void LAPACK<int,float>::SPEV(const char& JOBZ, const char& UPLO, const int& n, float* AP, float* W, float* Z, const int& ldz, float* WORK, int* info) const
279  { SSPEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, AP, W, Z, &ldz, WORK, info); }
280 
281 
282  void LAPACK<int,float>::SYEV(const char& JOBZ, const char& UPLO, const int& n, float* A, const int& lda, float* W, float* WORK, const int& lwork, int* info) const
283  { SSYEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, info); }
284 
285 
286  void LAPACK<int,float>::SYGV(const int& itype, const char& JOBZ, const char& UPLO, const int& n, float* A, const int& lda, float* B, const int& ldb, float* W, float* WORK, const int& lwork, int* info) const
287  { SSYGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, info); }
288 
289 
290  void LAPACK<int,float>::HEEV(const char& JOBZ, const char& UPLO, const int& n, float* A, const int& lda, float* W, float* WORK, const int& lwork, float* /* RWORK */, int* info) const
291  { SSYEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, info); }
292 
293 
294  void LAPACK<int,float>::HEGV(const int& itype, const char& JOBZ, const char& UPLO, const int& n, float* A, const int& lda, float* B, const int& ldb, float* W, float* WORK, const int& lwork, float* /* RWORK */, int* info) const
295  { SSYGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, info); }
296 
297 
298  void LAPACK<int,float>::STEQR(const char& COMPZ, const int& n, float* D, float* E, float* Z, const int& ldz, float* WORK, int* info) const
299  { SSTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info); }
300 
301 
302  void LAPACK<int,float>::PTEQR(const char& COMPZ, const int& n, float* D, float* E, float* Z, const int& ldz, float* WORK, int* info) const
303  { SPTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info); }
304 
305 
306  void LAPACK<int, float>::HSEQR(const char& JOB, const char& COMPZ, const int& n, const int& ilo, const int& ihi, float* H, const int& ldh, float* WR, float* WI, float* Z, const int& ldz, float* WORK, const int& lwork, int* info) const
307  { SHSEQR_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPZ), &n, &ilo, &ihi, H, &ldh, WR, WI, Z, &ldz, WORK, &lwork, info); }
308 
309 
310  void LAPACK<int, float>::GEES(const char& JOBVS, const char& SORT, int (*ptr2func)(float*, float*), const int& n, float* A, const int& lda, int* sdim, float* WR, float* WI, float* VS, const int& ldvs, float* WORK, const int& lwork, int* BWORK, int* info) const
311  { SGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(SORT), ptr2func, &n, A, &lda, sdim, WR, WI, VS, &ldvs, WORK, &lwork, BWORK, info); }
312 
313 
314  void LAPACK<int, float>::GEES(const char& JOBVS, const int& n, float* A, const int& lda, int* sdim, float* WR, float* WI, float* VS, const int& ldvs, float* WORK, const int& lwork, float* /* RWORK */, int* BWORK, int* info) const
315  {
316  int (*nullfptr)(float*,float*) = NULL;
317  const char sort = 'N';
318  SGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(sort), nullfptr, &n, A, &lda, sdim, WR, WI, VS, &ldvs, WORK, &lwork, BWORK, info);
319  }
320 
321 
322  void LAPACK<int, float>::GEEV(const char& JOBVL, const char& JOBVR, const int& n, float* A, const int& lda, float* WR, float* WI, float* VL, const int& ldvl, float* VR, const int& ldvr, float* WORK, const int& lwork, int* info) const
323  { SGEEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, WR, WI, VL, &ldvl, VR, &ldvr, WORK, &lwork, info); }
324 
325  void LAPACK<int, float>::GEEV(const char& JOBVL, const char& JOBVR, const int& n, float* A, const int& lda, float* WR, float* WI, float* VL, const int& ldvl, float* VR, const int& ldvr, float* WORK, const int& lwork, float* /* RWORK */, int* info) const
326  {
327  GEEV (JOBVL, JOBVR, n, A, lda, WR, WI, VL, ldvl, VR, ldvr, WORK, lwork, info);
328  }
329 
330 
331  void LAPACK<int, float>::GESVD(const char& JOBU, const char& JOBVT, const int& m, const int& n, float* A, const int& lda, float* S, float* U, const int& ldu, float* V, const int& ldv, float* WORK, const int& lwork, float* /* RWORK */, int* info) const
332  { SGESVD_F77(CHAR_MACRO(JOBU), CHAR_MACRO(JOBVT), &m, &n, A, &lda, S, U, &ldu, V, &ldv, WORK, &lwork, info); }
333 
334 
335  void LAPACK<int,float>::GEEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, float* A, const int& lda, float* WR, float* WI, float* VL, const int& ldvl, float* VR, const int& ldvr, int* ilo, int* ihi, float* SCALE, float* abnrm, float* RCONDE, float* RCONDV, float* WORK, const int& lwork, int* IWORK, int* info) const
336  { SGEEVX_F77(CHAR_MACRO(BALANC), CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), CHAR_MACRO(SENSE), &n, A, &lda, WR, WI, VL, &ldvl, VR, &ldvr, ilo, ihi, SCALE, abnrm, RCONDE, RCONDV, WORK, &lwork, IWORK, info); }
337 
338 
339  void LAPACK<int,float>::GGEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, float* A, const int& lda, float* B, const int& ldb, float* ALPHAR, float* ALPHAI, float* BETA, float* VL, const int& ldvl, float* VR, const int& ldvr, int* ilo, int* ihi, float* lscale, float* rscale, float* abnrm, float* bbnrm, float* RCONDE, float* RCONDV, float* WORK, const int& lwork, int* IWORK, int* BWORK, int* info) const
340  { SGGEVX_F77(CHAR_MACRO(BALANC), CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), CHAR_MACRO(SENSE), &n, A, &lda, B, &ldb, ALPHAR, ALPHAI, BETA, VL, &ldvl, VR, &ldvr, ilo, ihi, lscale, rscale, abnrm, bbnrm, RCONDE, RCONDV, WORK, &lwork, IWORK, BWORK, info); }
341 
342  void LAPACK<int,float>::GGEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, float* A, const int& lda, float* B, const int& ldb, float* ALPHAR, float* ALPHAI, float* BETA, float* VL, const int& ldvl, float* VR, const int& ldvr, int* ilo, int* ihi, float* lscale, float* rscale, float* abnrm, float* bbnrm, float* RCONDE, float* RCONDV, float* WORK, const int& lwork, float* /* RWORK */, int* IWORK, int* BWORK, int* info) const
343  {
344  GGEVX(BALANC, JOBVL, JOBVR, SENSE, n, A, lda, B, ldb, ALPHAR, ALPHAI, BETA, VL, ldvl, VR, ldvr, ilo, ihi, lscale, rscale, abnrm, bbnrm, RCONDE, RCONDV, WORK, lwork, IWORK, BWORK, info);
345  }
346 
347  void LAPACK<int, float>::GGEV(const char& JOBVL, const char& JOBVR, const int& n, float* A, const int& lda, float* B, const int& ldb, float* ALPHAR, float* ALPHAI, float* BETA, float* VL, const int& ldvl, float* VR, const int& ldvr, float* WORK, const int& lwork, int* info) const
348  { SGGEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, B, &ldb, ALPHAR, ALPHAI, BETA, VL, &ldvl, VR, &ldvr, WORK, &lwork, info); }
349 
350 
351  void LAPACK<int, float>::TRSEN(const char& JOB, const char& COMPQ, const int* SELECT, const int& n, float* T, const int& ldt, float* Q, const int& ldq, float* WR, float* WI, int* M, float* S, float* SEP, float* WORK, const int& lwork, int* IWORK, const int& liwork, int* info ) const
352  { STRSEN_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPQ), SELECT, &n, T, &ldt, Q, &ldq, WR, WI, M, S, SEP, WORK, &lwork, IWORK, &liwork, info); }
353 
354 
355  void LAPACK<int, float>::TGSEN(const int& ijob, const int& wantq, const int& wantz, const int* SELECT, const int& n, float* A, const int& lda, float* B, const int& ldb, float* ALPHAR, float* ALPHAI, float* BETA, float* Q, const int& ldq, float* Z, const int& ldz, int* M, float* PL, float* PR, float* DIF, float* WORK, const int& lwork, int* IWORK, const int& liwork, int* info ) const
356  { STGSEN_F77(&ijob, &wantq, &wantz, SELECT, &n, A, &lda, B, &ldb, ALPHAR, ALPHAI, BETA, Q, &ldq, Z, &ldz, M, PL, PR, DIF, WORK, &lwork, IWORK, &liwork, info); }
357 
358 
359  void LAPACK<int, float>::GGES(const char& JOBVL, const char& JOBVR, const char& SORT, int (*ptr2func)(float* , float* , float* ), const int& n, float* A, const int& lda, float* B, const int& ldb, int* sdim, float* ALPHAR, float* ALPHAI, float* BETA, float* VL, const int& ldvl, float* VR, const int& ldvr, float* WORK, const int& lwork, int* BWORK, int* info ) const
360  { SGGES_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), CHAR_MACRO(SORT), ptr2func, &n, A, &lda, B, &ldb, sdim, ALPHAR, ALPHAI, BETA, VL, &ldvl, VR, &ldvr, WORK, &lwork, BWORK, info); }
361 
362 
363  void LAPACK<int, float>::ORMQR(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, const float* A, const int& lda, const float* TAU, float* C, const int& ldc, float* WORK, const int& lwork, int* info) const
364  { SORMQR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &k, A, &lda, TAU, C, &ldc, WORK, &lwork, info); }
365 
366 
367  void LAPACK<int, float>::ORM2R(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, const float* A, const int& lda, const float* TAU, float* C, const int& ldc, float* WORK, int* const info) const
368  { SORM2R_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &k, A, &lda, TAU, C, &ldc, WORK, info); }
369 
370 
371  void LAPACK<int, float>::UNMQR(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, const float* A, const int& lda, const float* TAU, float* C, const int& ldc, float* WORK, const int& lwork, int* info) const
372  {
373  // LAPACK only defines UNMQR for Z and C (complex*8 resp. complex*16), but logically, UNMQR means the same thing as ORMQR for real arithmetic.
374  ORMQR (SIDE, TRANS, m, n, k, A, lda, TAU, C, ldc, WORK, lwork, info);
375  }
376 
377  void LAPACK<int, float>::UNM2R (const char& SIDE, const char& TRANS, const int& M, const int& N, const int& K, const float* A, const int& LDA, const float* TAU, float* C, const int& LDC, float* WORK, int* const INFO) const
378  {
379  // LAPACK only defines UNM2R for Z and C (complex*8
380  // resp. complex*16), but logically, UNM2R means the same thing as
381  // ORM2R for real arithmetic.
382  ORM2R (SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, INFO);
383  }
384 
385 
386  void LAPACK<int, float>::ORGQR(const int& m, const int& n, const int& k, float* A, const int& lda, const float* TAU, float* WORK, const int& lwork, int* info) const
387  { SORGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info); }
388 
389 
390  void LAPACK<int, float>::UNGQR(const int& m, const int& n, const int& k, float* A, const int& lda, const float* TAU, float* WORK, const int& lwork, int* info) const
391  { SORGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info); }
392 
393 
394  void LAPACK<int, float>::ORGHR(const int& n, const int& ilo, const int& ihi, float* A, const int& lda, const float* TAU, float* WORK, const int& lwork, int* info) const
395  { SORGHR_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info); }
396 
397 
398  void LAPACK<int, float>::ORMHR(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& ilo, const int& ihi, const float* A, const int& lda, const float* TAU, float* C, const int& ldc, float* WORK, const int& lwork, int* info) const
399  { SORMHR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &ilo, &ihi, A, &lda, TAU, C, &ldc, WORK, &lwork, info); }
400 
401 
402  void LAPACK<int, float>::TREVC(const char& SIDE, const char& HOWMNY, int* select, const int& n, const float* T, const int& ldt, float* VL, const int& ldvl, float* VR, const int& ldvr, const int& mm, int* m, float* WORK, int* info) const
403  { STREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), select, &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, info); }
404 
405 
406  void LAPACK<int, float>::TREVC(const char& SIDE, const int& n, const float* T, const int& ldt, float* VL, const int& ldvl, float* VR, const int& ldvr, const int& mm, int* m, float* WORK, float* /* RWORK */, int* info) const
407  {
408  std::vector<int> select(1);
409  const char whch = 'A';
410  STREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(whch), &select[0], &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, info);
411  }
412 
413  void LAPACK<int, float>::TREXC(const char& COMPQ, const int& n, float* T, const int& ldt, float* Q, const int& ldq, int* ifst, int* ilst, float* WORK, int* info) const
414  { STREXC_F77(CHAR_MACRO(COMPQ), &n, T, &ldt, Q, &ldq, ifst, ilst, WORK, info); }
415 
416 
417  void LAPACK<int, float>::TGEVC(const char& SIDE, const char& HOWMNY, const int* SELECT, const int& n, const float* S, const int& lds, const float* P, const int& ldp, float* VL, const int& ldvl, float* VR, const int& ldvr, const int& mm, int* M, float* WORK, int* info) const
418  { STGEVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), SELECT, &n, S, &lds, P, &ldp, VL, &ldvl, VR, &ldvr, &mm, M, WORK, info); }
419 
420 
421  void LAPACK<int, float>::LARTG( const float& f, const float& g, float* c, float* s, float* r ) const
422  { SLARTG_F77(&f, &g, c, s, r); }
423 
424 
425  void LAPACK<int, float>::LARFG( const int& n, float* alpha, float* x, const int& incx, float* tau ) const
426  { SLARFG_F77(&n, alpha, x, &incx, tau); }
427 
428  void LAPACK<int, float>::GEBAL(const char& JOBZ, const int& n, float* A, const int& lda, int* ilo, int* ihi, float* scale, int* info) const
429  { SGEBAL_F77(CHAR_MACRO(JOBZ),&n, A, &lda, ilo, ihi, scale, info); }
430 
431 
432  void LAPACK<int, float>::GEBAK(const char& JOBZ, const char& SIDE, const int& n, const int& ilo, const int& ihi, const float* scale, const int& m, float* V, const int& ldv, int* info) const
433  { SGEBAK_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(SIDE), &n, &ilo, &ihi, scale, &m, V, &ldv, info); }
434 
435 #ifdef HAVE_TEUCHOS_LAPACKLARND
436  float LAPACK<int, float>::LARND( const int& idist, int* seed ) const
437  { return(SLARND_F77(&idist, seed)); }
438 #endif
439 
440  void LAPACK<int, float>::LARNV( const int& idist, int* seed, const int& n, float* v ) const
441  { SLARNV_F77(&idist, seed, &n, v); }
442 
443 
444  float LAPACK<int, float>::LAMCH(const char& CMACH) const
445  { return(SLAMCH_F77(CHAR_MACRO(CMACH))); }
446 
447 
448  int LAPACK<int, float>::ILAENV( const int& ispec, const std::string& NAME, const std::string& OPTS, const int& N1, const int& N2, const int& N3, const int& N4 ) const
449  {
450  unsigned int opts_length = OPTS.length();
451  // if user queries a Hermitian routine, change it to a symmetric routine
452  std::string temp_NAME = "s" + NAME;
453  if (temp_NAME.substr(1,2) == "he") {
454  temp_NAME.replace(1,2,"sy");
455  }
456  unsigned int name_length = temp_NAME.length();
457  return ilaenv_wrapper(&ispec, &temp_NAME[0], name_length, &OPTS[0], opts_length, &N1, &N2, &N3, &N4);
458  }
459 
460 
461  float LAPACK<int, float>::LAPY2(const float& x, const float& y) const
462  {
463 #if defined(HAVE_TEUCHOS_BLASFLOAT)
464  return SLAPY2_F77(&x, &y);
465 #else
466  typedef ScalarTraits<float> ST;
467  const float xabs = ST::magnitude(x);
468  const float yabs = ST::magnitude(y);
469  const float w = TEUCHOS_MAX(xabs, yabs);
470  const float z = TEUCHOS_MIN(xabs, yabs);
471  if ( z == 0.0 ) {
472  return w;
473  }
474  const float z_over_w = z/w;
475  return w*ST::squareroot( 1.0+(z_over_w*z_over_w));
476 #endif
477  }
478 
479  // END INT, FLOAT SPECIALIZATION IMPLEMENTATION //
480 
481  // BEGIN INT, DOUBLE SPECIALIZATION IMPLEMENTATION //
482 
483  void LAPACK<int, double>::PTTRF(const int& n, double* d, double* e, int* info) const
484  { DPTTRF_F77(&n,d,e,info); }
485 
486 
487  void LAPACK<int, double>::PTTRS(const int& n, const int& nrhs, const double* d, const double* e, double* B, const int& ldb, int* info) const
488  { DPTTRS_F77(&n,&nrhs,d,e,B,&ldb,info); }
489 
490 
491  void LAPACK<int, double>::POTRF(const char& UPLO, const int& n, double* A, const int& lda, int* info) const
492  { DPOTRF_F77(CHAR_MACRO(UPLO), &n, A, &lda, info); }
493 
494 
495  void LAPACK<int, double>::POTRS(const char& UPLO, const int& n, const int& nrhs, const double* A, const int& lda, double* B, const int& ldb, int* info) const
496  { DPOTRS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info); }
497 
498 
499  void LAPACK<int, double>::POTRI(const char& UPLO, const int& n, double* A, const int& lda, int* info) const
500  { DPOTRI_F77(CHAR_MACRO(UPLO), &n, A, &lda, info); }
501 
502 
503  void LAPACK<int, double>::POCON(const char& UPLO, const int& n, const double* A, const int& lda, const double& anorm, double* rcond, double* WORK, int* IWORK, int* info) const
504  { DPOCON_F77(CHAR_MACRO(UPLO), &n, A, &lda, &anorm, rcond, WORK, IWORK, info); }
505 
506 
507  void LAPACK<int, double>::POSV(const char& UPLO, const int& n, const int& nrhs, double* A, const int& lda, double* B, const int& ldb, int* info) const
508  { DPOSV_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info); }
509 
510 
511  void LAPACK<int, double>::POEQU(const int& n, const double* A, const int& lda, double* S, double* scond, double* amax, int* info) const
512  { DPOEQU_F77(&n, A, &lda, S, scond, amax, info); }
513 
514 
515  void LAPACK<int, double>::PORFS(const char& UPLO, const int& n, const int& nrhs, const double* A, const int& lda, const double* AF, const int& ldaf, const double* B, const int& ldb, double* X, const int& ldx, double* FERR, double* BERR, double* WORK, int* IWORK, int* info) const
516  { DPORFS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, B, &ldb, X, &ldx, FERR, BERR, WORK, IWORK, info); }
517 
518  void LAPACK<int, double>::POSVX(const char& FACT, const char& UPLO, const int& n, const int& nrhs, double* A, const int& lda, double* AF, const int& ldaf, char* EQUED, double* S, double* B, const int& ldb, double* X, const int& ldx, double* rcond, double* FERR, double* BERR, double* WORK, int* IWORK, int* info) const
519  { DPOSVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, CHARPTR_MACRO(EQUED), S, B, &ldb, X, &ldx, rcond, FERR, BERR, WORK, IWORK, info); }
520 
521 
522  void LAPACK<int,double>::GELS(const char& TRANS, const int& m, const int& n, const int& nrhs, double* A, const int& lda, double* B, const int& ldb, double* WORK, const int& lwork, int* info) const
523  { DGELS_F77(CHAR_MACRO(TRANS), &m, &n, &nrhs, A, &lda, B, &ldb, WORK, &lwork, info); }
524 
525 
526  void LAPACK<int,double>::GELSS(const int& m, const int& n, const int& nrhs, double* A, const int& lda, double* B, const int& ldb, double* S, const double& rcond, int* rank, double* WORK, const int& lwork, double* rwork, int* info) const
527  {
528  (void) rwork;
529  DGELSS_F77(&m, &n, &nrhs, A, &lda, B, &ldb, S, &rcond, rank, WORK, &lwork, info);
530  }
531 
532 
533  void LAPACK<int,double>::GELSS(const int& m, const int& n, const int& nrhs, double* A, const int& lda, double* B, const int& ldb, double* S, const double& rcond, int* rank, double* WORK, const int& lwork, int* info) const
534  { DGELSS_F77(&m, &n, &nrhs, A, &lda, B, &ldb, S, &rcond, rank, WORK, &lwork, info); }
535 
536 
537  void LAPACK<int,double>::GGLSE(const int& m, const int& n, const int& p, double* A, const int& lda, double* B, const int& ldb, double* C, double* D, double* X, double* WORK, const int& lwork, int* info) const
538  { DGGLSE_F77(&m, &n, &p, A, &lda, B, &ldb, C, D, X, WORK, &lwork, info); }
539 
540 
541  void LAPACK<int,double>::GEQRF( const int& m, const int& n, double* A, const int& lda, double* TAU, double* WORK, const int& lwork, int* info) const
542  { DGEQRF_F77(&m, &n, A, &lda, TAU, WORK, &lwork, info); }
543 
544  void LAPACK<int,double>::GEQR2 (const int& m, const int& n, double* A, const int& lda, double* TAU, double* WORK, int* const info) const
545  {
546  DGEQR2_F77(&m, &n, A, &lda, TAU, WORK, info);
547  }
548 
549  void LAPACK<int,double>::GETRF(const int& m, const int& n, double* A, const int& lda, int* IPIV, int* info) const
550  { DGETRF_F77(&m, &n, A, &lda, IPIV, info); }
551 
552 
553  void LAPACK<int,double>::GETRS(const char& TRANS, const int& n, const int& nrhs, const double* A, const int& lda, const int* IPIV, double* B, const int& ldb, int* info) const
554  { DGETRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, IPIV, B, &ldb, info); }
555 
556 
557  void LAPACK<int,double>::LASCL(const char& TYPE, const int& kl, const int& ku, const double& cfrom, const double& cto, const int& m, const int& n, double* A, const int& lda, int* info) const
558  { DLASCL_F77(CHAR_MACRO(TYPE), &kl, &ku, &cfrom, &cto, &m, &n, A, &lda, info); }
559 
560  void LAPACK<int,double>::GEQP3(const int& m, const int& n, double* A, const int& lda, int* jpvt, double* TAU, double* WORK, const int& lwork, double* RWORK, int* info ) const
561  {
562  (void) RWORK;
563  DGEQP3_F77(&m, &n, A, &lda, jpvt, TAU, WORK, &lwork, info);
564  }
565 
566  void LAPACK<int, double>::LASWP (const int& N, double* A, const int& LDA, const int& K1, const int& K2, const int* IPIV, const int& INCX) const
567  { DLASWP_F77(&N, A, &LDA, &K1, &K2, IPIV, &INCX); }
568 
569  void LAPACK<int,double>::GBTRF(const int& m, const int& n, const int& kl, const int& ku, double* A, const int& lda, int* IPIV, int* info) const
570  { DGBTRF_F77(&m, &n, &kl, &ku, A, &lda, IPIV, info); }
571 
572 
573  void LAPACK<int,double>::GBTRS(const char& TRANS, const int& n, const int& kl, const int& ku, const int& nrhs, const double* A, const int& lda, const int* IPIV, double* B, const int& ldb, int* info) const
574  { DGBTRS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, A, &lda, IPIV, B, &ldb, info); }
575 
576 
577  void LAPACK<int,double>::GTTRF(const int& n, double* dl, double* d, double* du, double* du2, int* IPIV, int* info) const
578  { DGTTRF_F77(&n, dl, d, du, du2, IPIV, info); }
579 
580 
581  void LAPACK<int,double>::GTTRS(const char& TRANS, const int& n, const int& nrhs, const double* dl, const double* d, const double* du, const double* du2, const int* IPIV, double* B, const int& ldb, int* info) const
582  { DGTTRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, dl, d, du, du2, IPIV, B, &ldb, info); }
583 
584 
585  void LAPACK<int,double>::GETRI(const int& n, double* A, const int& lda, const int* IPIV, double* WORK, const int& lwork, int* info) const
586  { DGETRI_F77(&n, A, &lda, IPIV, WORK, &lwork, info); }
587 
588  void LAPACK<int, double>::LATRS (const char& UPLO, const char& TRANS, const char& DIAG, const char& NORMIN, const int& N, const double* A, const int& LDA, double* X, double* SCALE, double* CNORM, int* INFO) const
589  {
590  DLATRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), CHAR_MACRO(NORMIN), &N, A, &LDA, X, SCALE, CNORM, INFO);
591  }
592 
593  void LAPACK<int,double>::GECON(const char& NORM, const int& n, const double* A, const int& lda, const double& anorm, double* rcond, double* WORK, int* IWORK, int* info) const
594  { DGECON_F77(CHAR_MACRO(NORM), &n, A, &lda, &anorm, rcond, WORK, IWORK, info); }
595 
596 
597  void LAPACK<int,double>::GBCON(const char& NORM, const int& n, const int& kl, const int& ku, const double* A, const int& lda, const int* IPIV, const double& anorm, double* rcond, double* WORK, int* IWORK, int* info) const
598  { DGBCON_F77(CHAR_MACRO(NORM), &n, &kl, &ku, A, &lda, IPIV, &anorm, rcond, WORK, IWORK, info); }
599 
600 
601  double LAPACK<int,double>::LANGB(const char& NORM, const int& n, const int& kl, const int& ku, const double* A, const int& lda, double* WORK) const
602  { return( DLANGB_F77(CHAR_MACRO(NORM), &n, &kl, &ku, A, &lda, WORK) ); }
603 
604 
605  void LAPACK<int,double>::GESV(const int& n, const int& nrhs, double* A, const int& lda, int* IPIV, double* B, const int& ldb, int* info) const
606  { DGESV_F77(&n, &nrhs, A, &lda, IPIV, B, &ldb, info); }
607 
608 
609  void LAPACK<int,double>::GEEQU(const int& m, const int& n, const double* A, const int& lda, double* R, double* C, double* rowcond, double* colcond, double* amax, int* info) const
610  { DGEEQU_F77(&m, &n, A, &lda, R, C, rowcond, colcond, amax, info); }
611 
612 
613  void LAPACK<int,double>::GERFS(const char& TRANS, const int& n, const int& nrhs, const double* A, const int& lda, const double* AF, const int& ldaf, const int* IPIV, const double* B, const int& ldb, double* X, const int& ldx, double* FERR, double* BERR, double* WORK, int* IWORK, int* info) const
614  { DGERFS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, IWORK, info); }
615 
616 
617  void LAPACK<int,double>::GBEQU(const int& m, const int& n, const int& kl, const int& ku, const double* A, const int& lda, double* R, double* C, double* rowcond, double* colcond, double* amax, int* info) const
618  { DGBEQU_F77(&m, &n, &kl, &ku, A, &lda, R, C, rowcond, colcond, amax, info); }
619 
620 
621  void LAPACK<int,double>::GBRFS(const char& TRANS, const int& n, const int& kl, const int& ku, const int& nrhs, const double* A, const int& lda, const double* AF, const int& ldaf, const int* IPIV, const double* B, const int& ldb, double* X, const int& ldx, double* FERR, double* BERR, double* WORK, int* IWORK, int* info) const
622  { DGBRFS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, IWORK, info); }
623 
624  void LAPACK<int,double>::GESVX(const char& FACT, const char& TRANS, const int& n, const int& nrhs, double* A, const int& lda, double* AF, const int& ldaf, int* IPIV, char* EQUED, double* R, double* C, double* B, const int& ldb, double* X, const int& ldx, double* rcond, double* FERR, double* BERR, double* WORK, int* IWORK, int* info) const
625  { DGESVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, CHARPTR_MACRO(EQUED), R, C, B, &ldb, X, &ldx, rcond, FERR, BERR, WORK, IWORK, info); }
626 
627 
628  void LAPACK<int,double>::SYTRD(const char& UPLO, const int& n, double* A, const int& lda, double* D, double* E, double* TAU, double* WORK, const int& lwork, int* info) const
629  { DSYTRD_F77(CHAR_MACRO(UPLO), &n, A, &lda, D, E, TAU, WORK, &lwork, info); }
630 
631 
632  void LAPACK<int, double>::GEHRD(const int& n, const int& ilo, const int& ihi, double* A, const int& lda, double* TAU, double* WORK, const int& lwork, int* info) const
633  { DGEHRD_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info); }
634 
635 
636  void LAPACK<int,double>::TRTRS(const char& UPLO, const char& TRANS, const char& DIAG, const int& n, const int& nrhs, const double* A, const int& lda, double* B, const int& ldb, int* info) const
637  { DTRTRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), &n, &nrhs, A, &lda, B, &ldb, info); }
638 
639 
640  void LAPACK<int,double>::TRTRI(const char& UPLO, const char& DIAG, const int& n, double* A, const int& lda, int* info) const
641  { DTRTRI_F77(CHAR_MACRO(UPLO), CHAR_MACRO(DIAG), &n, A, &lda, info); }
642 
643 
644  void LAPACK<int,double>::SPEV(const char& JOBZ, const char& UPLO, const int& n, double* AP, double* W, double* Z, const int& ldz, double* WORK, int* info) const
645  { DSPEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, AP, W, Z, &ldz, WORK, info); }
646 
647 
648  void LAPACK<int,double>::SYEV(const char& JOBZ, const char& UPLO, const int& n, double* A, const int& lda, double* W, double* WORK, const int& lwork, int* info) const
649  {
650  DSYEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, info);
651  }
652 
653 
654  void LAPACK<int,double>::SYGV(const int& itype, const char& JOBZ, const char& UPLO, const int& n, double* A, const int& lda, double* B, const int& ldb, double* W, double* WORK, const int& lwork, int* info) const
655  {
656  DSYGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, info);
657  }
658 
659 
660  void LAPACK<int,double>::HEEV(const char& JOBZ, const char& UPLO, const int& n, double* A, const int& lda, double* W, double* WORK, const int& lwork, double* /* RWORK */, int* info) const
661  {
662  DSYEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, info);
663  }
664 
665 
666  void LAPACK<int,double>::HEGV(const int& itype, const char& JOBZ, const char& UPLO, const int& n, double* A, const int& lda, double* B, const int& ldb, double* W, double* WORK, const int& lwork, double* /* RWORK */, int* info) const
667  {
668  DSYGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, info);
669  }
670 
671 
672  void LAPACK<int,double>::STEQR(const char& COMPZ, const int& n, double* D, double* E, double* Z, const int& ldz, double* WORK, int* info) const
673  { DSTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info); }
674 
675 
676  void LAPACK<int,double>::PTEQR(const char& COMPZ, const int& n, double* D, double* E, double* Z, const int& ldz, double* WORK, int* info) const
677  { DPTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info); }
678 
679 
680  void LAPACK<int, double>::HSEQR(const char& JOB, const char& COMPZ, const int& n, const int& ilo, const int& ihi, double* H, const int& ldh, double* WR, double* WI, double* Z, const int& ldz, double* WORK, const int& lwork, int* info) const
681  {
682  DHSEQR_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPZ), &n, &ilo, &ihi, H, &ldh, WR, WI, Z, &ldz, WORK, &lwork, info);
683  }
684 
685 
686  void LAPACK<int, double>::GEES(const char& JOBVS, const char& SORT, int (*ptr2func)(double*, double*), const int& n, double* A, const int& lda, int* sdim, double* WR, double* WI, double* VS, const int& ldvs, double* WORK, const int& lwork, int* BWORK, int* info) const
687  {
688  DGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(SORT), ptr2func, &n, A, &lda, sdim, WR, WI, VS, &ldvs, WORK, &lwork, BWORK, info);
689  }
690 
691 
692  void LAPACK<int, double>::GEES(const char& JOBVS, const int& n, double* A, const int& lda, int* sdim, double* WR, double* WI, double* VS, const int& ldvs, double* WORK, const int& lwork, double* /* RWORK */, int* BWORK, int* info) const
693  {
694  //int (*nullfptr)(double*,double*) = NULL;
695  gees_nullfptr_t nullfptr = 0;
696  const char sort = 'N';
697  DGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(sort), nullfptr, &n, A, &lda, sdim, WR, WI, VS, &ldvs, WORK, &lwork, BWORK, info);
698  }
699 
700 
701  void LAPACK<int, double>::GEEV(const char& JOBVL, const char& JOBVR, const int& n, double* A, const int& lda, double* WR, double* WI, double* VL, const int& ldvl, double* VR, const int& ldvr, double* WORK, const int& lwork, int* info) const
702  {
703  DGEEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, WR, WI, VL, &ldvl, VR, &ldvr, WORK, &lwork, info);
704  }
705 
706  void LAPACK<int, double>::GEEV(const char& JOBVL, const char& JOBVR, const int& n, double* A, const int& lda, double* WR, double* WI, double* VL, const int& ldvl, double* VR, const int& ldvr, double* WORK, const int& lwork, double* /* RWORK */, int* info) const
707  {
708  GEEV (JOBVL, JOBVR, n, A, lda, WR, WI, VL, ldvl, VR, ldvr, WORK, lwork, info);
709  }
710 
711 
712  void LAPACK<int, double>::GESVD(const char& JOBU, const char& JOBVT, const int& m, const int& n, double* A, const int& lda, double* S, double* U, const int& ldu, double* V, const int& ldv, double* WORK, const int& lwork, double* /* RWORK */, int* info) const {
713  DGESVD_F77(CHAR_MACRO(JOBU), CHAR_MACRO(JOBVT), &m, &n, A, &lda, S, U, &ldu, V, &ldv, WORK, &lwork, info);
714  }
715 
716 
717  void LAPACK<int,double>::GEEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, double* A, const int& lda, double* WR, double* WI, double* VL, const int& ldvl, double* VR, const int& ldvr, int* ilo, int* ihi, double* SCALE, double* abnrm, double* RCONDE, double* RCONDV, double* WORK, const int& lwork, int* IWORK, int* info) const
718  {
719  DGEEVX_F77(CHAR_MACRO(BALANC), CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), CHAR_MACRO(SENSE), &n, A, &lda, WR, WI, VL, &ldvl, VR, &ldvr, ilo, ihi, SCALE, abnrm, RCONDE, RCONDV, WORK, &lwork, IWORK, info);
720  }
721 
722 
723  void LAPACK<int, double>::GGEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, double* A, const int& lda, double* B, const int& ldb, double* ALPHAR, double* ALPHAI, double* BETA, double* VL, const int& ldvl, double* VR, const int& ldvr, int* ilo, int* ihi, double* lscale, double* rscale, double* abnrm, double* bbnrm, double* RCONDE, double* RCONDV, double* WORK, const int& lwork, int* IWORK, int* BWORK, int* info) const
724  {
725  DGGEVX_F77(CHAR_MACRO(BALANC), CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), CHAR_MACRO(SENSE), &n, A, &lda, B, &ldb, ALPHAR, ALPHAI, BETA, VL, &ldvl, VR, &ldvr, ilo, ihi, lscale, rscale, abnrm, bbnrm, RCONDE, RCONDV, WORK, &lwork, IWORK, BWORK, info);
726  }
727 
728  void LAPACK<int, double>::GGEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, double* A, const int& lda, double* B, const int& ldb, double* ALPHAR, double* ALPHAI, double* BETA, double* VL, const int& ldvl, double* VR, const int& ldvr, int* ilo, int* ihi, double* lscale, double* rscale, double* abnrm, double* bbnrm, double* RCONDE, double* RCONDV, double* WORK, const int& lwork, double* /* RWORK */, int* IWORK, int* BWORK, int* info) const
729  {
730  GGEVX(BALANC, JOBVL, JOBVR, SENSE, n, A, lda, B, ldb, ALPHAR, ALPHAI, BETA, VL, ldvl, VR, ldvr, ilo, ihi, lscale, rscale, abnrm, bbnrm, RCONDE, RCONDV, WORK, lwork, IWORK, BWORK, info);
731  }
732 
733  void LAPACK<int, double>::GGEV(const char& JOBVL, const char& JOBVR, const int& n, double* A, const int& lda, double* B, const int& ldb, double* ALPHAR, double* ALPHAI, double* BETA, double* VL, const int& ldvl, double* VR, const int& ldvr, double* WORK, const int& lwork, int* info) const
734  {
735  DGGEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, B, &ldb, ALPHAR, ALPHAI, BETA, VL, &ldvl, VR, &ldvr, WORK, &lwork, info);
736  }
737 
738  void LAPACK<int, double>::TRSEN(const char& JOB, const char& COMPQ, const int* SELECT, const int& n, double* T, const int& ldt, double* Q, const int& ldq, double* WR, double* WI, int* M, double* S, double* SEP, double* WORK, const int& lwork, int* IWORK, const int& liwork, int* info ) const
739  { DTRSEN_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPQ), SELECT, &n, T, &ldt, Q, &ldq, WR, WI, M, S, SEP, WORK, &lwork, IWORK, &liwork, info); }
740 
741 
742  void LAPACK<int, double>::TGSEN(const int& ijob, const int& wantq, const int& wantz, const int* SELECT, const int& n, double* A, const int& lda, double* B, const int& ldb, double* ALPHAR, double* ALPHAI, double* BETA, double* Q, const int& ldq, double* Z, const int& ldz, int* M, double* PL, double* PR, double* DIF, double* WORK, const int& lwork, int* IWORK, const int& liwork, int* info ) const
743  { DTGSEN_F77(&ijob, &wantq, &wantz, SELECT, &n, A, &lda, B, &ldb, ALPHAR, ALPHAI, BETA, Q, &ldq, Z, &ldz, M, PL, PR, DIF, WORK, &lwork, IWORK, &liwork, info); }
744 
745 
746  void LAPACK<int, double>::GGES(const char& JOBVL, const char& JOBVR, const char& SORT, int (*ptr2func)(double* , double* , double* ), const int& n, double* A, const int& lda, double* B, const int& ldb, int* sdim, double* ALPHAR, double* ALPHAI, double* BETA, double* VL, const int& ldvl, double* VR, const int& ldvr, double* WORK, const int& lwork, int* BWORK, int* info ) const
747  { DGGES_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), CHAR_MACRO(SORT), ptr2func, &n, A, &lda, B, &ldb, sdim, ALPHAR, ALPHAI, BETA, VL, &ldvl, VR, &ldvr, WORK, &lwork, BWORK, info); }
748 
749 
750  void LAPACK<int, double>::ORMQR(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, const double* A, const int& lda, const double* TAU, double* C, const int& ldc, double* WORK, const int& lwork, int* info) const
751  {
752  DORMQR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &k, A, &lda, TAU, C, &ldc, WORK, &lwork, info);
753  }
754 
755  void LAPACK<int, double>::ORM2R(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, const double* A, const int& lda, const double* TAU, double* C, const int& ldc, double* WORK, int* const info) const
756  {
757  DORM2R_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &k, A, &lda, TAU, C, &ldc, WORK, info);
758  }
759 
760  void LAPACK<int, double>::UNMQR(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, const double* A, const int& lda, const double* TAU, double* C, const int& ldc, double* WORK, const int& lwork, int* info) const
761  {
762  // LAPACK only defines UNMQR for Z and C (complex*8 resp. complex*16), but logically, UNMQR means the same thing as ORMQR for real arithmetic.
763  ORMQR (SIDE, TRANS, m, n, k, A, lda, TAU, C, ldc, WORK, lwork, info);
764  }
765 
766  void LAPACK<int, double>::UNM2R (const char& SIDE, const char& TRANS, const int& M, const int& N, const int& K, const double* A, const int& LDA, const double* TAU, double* C, const int& LDC, double* WORK, int* const INFO) const
767  {
768  // LAPACK only defines UNM2R for Z and C (complex*8
769  // resp. complex*16), but logically, UNM2R means the same thing as
770  // ORM2R for real arithmetic.
771  ORM2R (SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, INFO);
772  }
773 
774  void LAPACK<int, double>::ORGQR(const int& m, const int& n, const int& k, double* A, const int& lda, const double* TAU, double* WORK, const int& lwork, int* info) const
775  {
776  DORGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info);
777  }
778 
779 
780  void LAPACK<int, double>::UNGQR(const int& m, const int& n, const int& k, double* A, const int& lda, const double* TAU, double* WORK, const int& lwork, int* info) const
781  {
782  DORGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info);
783  }
784 
785 
786  void LAPACK<int, double>::ORGHR(const int& n, const int& ilo, const int& ihi, double* A, const int& lda, const double* TAU, double* WORK, const int& lwork, int* info) const
787  {
788  DORGHR_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info);
789  }
790 
791 
792  void LAPACK<int, double>::ORMHR(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& ilo, const int& ihi, const double* A, const int& lda, const double* TAU, double* C, const int& ldc, double* WORK, const int& lwork, int* info) const
793  {
794  DORMHR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &ilo, &ihi, A, &lda, TAU, C, &ldc, WORK, &lwork, info);
795  }
796 
797 
798  void LAPACK<int, double>::TREVC(const char& SIDE, const char& HOWMNY, int* select, const int& n, const double* T, const int& ldt, double* VL, const int& ldvl, double* VR, const int& ldvr, const int& mm, int* m, double* WORK, int* info) const
799  {
800  DTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), select, &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, info);
801  }
802 
803 
804  void LAPACK<int, double>::TREVC(const char& SIDE, const int& n, const double* T, const int& ldt, double* VL, const int& ldvl, double* VR, const int& ldvr, const int& mm, int* m, double* WORK, double* /* RWORK */, int* info) const
805  {
806  std::vector<int> select(1);
807  const char whch = 'A';
808  DTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(whch), &select[0], &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, info);
809  }
810 
811  void LAPACK<int, double>::TREXC(const char& COMPQ, const int& n, double* T, const int& ldt, double* Q, const int& ldq, int* ifst, int* ilst, double* WORK, int* info) const
812  {
813  DTREXC_F77(CHAR_MACRO(COMPQ), &n, T, &ldt, Q, &ldq, ifst, ilst, WORK, info);
814  }
815 
816 
817  void LAPACK<int, double>::TGEVC(const char& SIDE, const char& HOWMNY, const int* SELECT, const int& n, const double* S, const int& lds, const double* P, const int& ldp, double* VL, const int& ldvl, double* VR, const int& ldvr, const int& mm, int* M, double* WORK, int* info) const
818  { DTGEVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), SELECT, &n, S, &lds, P, &ldp, VL, &ldvl, VR, &ldvr, &mm, M, WORK, info); }
819 
820 
821  void LAPACK<int, double>::LARTG( const double& f, const double& g, double* c, double* s, double* r ) const
822  {
823  DLARTG_F77(&f, &g, c, s, r);
824  }
825 
826 
827  void LAPACK<int, double>::LARFG( const int& n, double* alpha, double* x, const int& incx, double* tau ) const
828  {
829  DLARFG_F77(&n, alpha, x, &incx, tau);
830  }
831 
832  void LAPACK<int, double>::GEBAL(const char& JOBZ, const int& n, double* A, const int& lda, int* ilo, int* ihi, double* scale, int* info) const
833  {
834  DGEBAL_F77(CHAR_MACRO(JOBZ),&n, A, &lda, ilo, ihi, scale, info);
835  }
836 
837 
838  void LAPACK<int, double>::GEBAK(const char& JOBZ, const char& SIDE, const int& n, const int& ilo, const int& ihi, const double* scale, const int& m, double* V, const int& ldv, int* info) const
839  {
840  DGEBAK_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(SIDE), &n, &ilo, &ihi, scale, &m, V, &ldv, info);
841  }
842 
843 
844 #ifdef HAVE_TEUCHOS_LAPACKLARND
845  double LAPACK<int, double>::LARND( const int& idist, int* seed ) const
846  {
847  return(DLARND_F77(&idist, seed));
848  }
849 #endif
850 
851  void LAPACK<int, double>::LARNV( const int& idist, int* seed, const int& n, double* v ) const
852  {
853  DLARNV_F77(&idist, seed, &n, v);
854  }
855 
856 
857  double LAPACK<int, double>::LAMCH(const char& CMACH) const
858  {
859  return(DLAMCH_F77(CHAR_MACRO(CMACH)));
860  }
861 
862 
863  int LAPACK<int, double>::ILAENV( const int& ispec, const std::string& NAME, const std::string& OPTS, const int& N1, const int& N2, const int& N3, const int& N4 ) const
864  {
865  unsigned int opts_length = OPTS.length();
866  // if user queries a Hermitian routine, change it to a symmetric routine
867  std::string temp_NAME = "d" + NAME;
868  if (temp_NAME.substr(1,2) == "he") {
869  temp_NAME.replace(1,2,"sy");
870  }
871  unsigned int name_length = temp_NAME.length();
872  return ilaenv_wrapper(&ispec, &temp_NAME[0], name_length, &OPTS[0], opts_length, &N1, &N2, &N3, &N4);
873  }
874 
875 
876  double LAPACK<int, double>::LAPY2(const double& x, const double& y) const
877  {
878  return DLAPY2_F77(&x, &y);
879  }
880 
881  // END INT, DOUBLE SPECIALIZATION IMPLEMENTATION //
882 
883 #ifdef HAVE_TEUCHOS_COMPLEX
884 
885  // BEGIN INT, COMPLEX<FLOAT> SPECIALIZATION IMPLEMENTATION //
886 
887 
888  void LAPACK<int, std::complex<float> >::PTTRF(const int& n, float* d, std::complex<float>* e, int* info) const
889  {
890  CPTTRF_F77(&n,d,e,info);
891  }
892 
893 
894  void LAPACK<int, std::complex<float> >::PTTRS(const char& UPLO, const int& n, const int& nrhs, const float* d, const std::complex<float>* e, std::complex<float>* B, const int& ldb, int* info) const
895  {
896  CPTTRS_F77(CHAR_MACRO(UPLO),&n,&nrhs,d,e,B,&ldb,info);
897  }
898 
899 
900  void LAPACK<int, std::complex<float> >::POTRF(const char& UPLO, const int& n, std::complex<float>* A, const int& lda, int* info) const
901  {
902  CPOTRF_F77(CHAR_MACRO(UPLO), &n, A, &lda, info);
903  }
904 
905 
906  void LAPACK<int, std::complex<float> >::POTRS(const char& UPLO, const int& n, const int& nrhs, const std::complex<float>* A, const int& lda, std::complex<float>* B, const int& ldb, int* info) const
907  {
908  CPOTRS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info);
909  }
910 
911 
912  void LAPACK<int, std::complex<float> >::POTRI(const char& UPLO, const int& n, std::complex<float>* A, const int& lda, int* info) const
913  {
914  CPOTRI_F77(CHAR_MACRO(UPLO), &n, A, &lda, info);
915  }
916 
917 
918  void LAPACK<int, std::complex<float> >::POCON(const char& UPLO, const int& n, const std::complex<float>* A, const int& lda, const float& anorm, float* rcond, std::complex<float>* WORK, float* RWORK, int* info) const
919  {
920  CPOCON_F77(CHAR_MACRO(UPLO), &n, A, &lda, &anorm, rcond, WORK, RWORK, info);
921  }
922 
923 
924  void LAPACK<int, std::complex<float> >::POSV(const char& UPLO, const int& n, const int& nrhs, std::complex<float>* A, const int& lda, std::complex<float>* B, const int& ldb, int* info) const
925  {
926  CPOSV_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info);
927  }
928 
929 
930  void LAPACK<int, std::complex<float> >::POEQU(const int& n, const std::complex<float>* A, const int& lda, float* S, float* scond, float* amax, int* info) const
931  {
932  CPOEQU_F77(&n, A, &lda, S, scond, amax, info);
933  }
934 
935 
936  void LAPACK<int, std::complex<float> >::PORFS(const char& UPLO, const int& n, const int& nrhs, const std::complex<float>* A, const int& lda, const std::complex<float>* AF, const int& ldaf, const std::complex<float>* B, const int& ldb, std::complex<float>* X, const int& ldx, float* FERR, float* BERR, std::complex<float>* WORK, float* RWORK, int* info) const
937  {
938  CPORFS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, B, &ldb, X, &ldx, FERR, BERR, WORK, RWORK, info);
939  }
940 
941  void LAPACK<int, std::complex<float> >::POSVX(const char& FACT, const char& UPLO, const int& n, const int& nrhs, std::complex<float>* A, const int& lda, std::complex<float>* AF, const int& ldaf, char* EQUED, float* S, std::complex<float>* B, const int& ldb, std::complex<float>* X, const int& ldx, float* rcond, float* FERR, float* BERR, std::complex<float>* WORK, float* RWORK, int* info) const
942  {
943  CPOSVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, CHARPTR_MACRO(EQUED), S, B, &ldb, X, &ldx, rcond, FERR, BERR, WORK, RWORK, info);
944  }
945 
946 
947  void LAPACK<int,std::complex<float> >::GELS(const char& TRANS, const int& m, const int& n, const int& nrhs, std::complex<float>* A, const int& lda, std::complex<float>* B, const int& ldb, std::complex<float>* WORK, const int& lwork, int* info) const
948  {
949  CGELS_F77(CHAR_MACRO(TRANS), &m, &n, &nrhs, A, &lda, B, &ldb, WORK, &lwork, info);
950  }
951 
952  void LAPACK<int, std::complex<float> >::GELSS(const int& m, const int& n, const int& nrhs, std::complex<float>* A, const int& lda, std::complex<float>* B, const int& ldb, float* S, const float& rcond, int* rank, std::complex<float>* WORK, const int& lwork, float* rwork, int* info) const
953  {
954  CGELSS_F77(&m, &n, &nrhs, A, &lda, B, &ldb, S, &rcond, rank, WORK, &lwork, rwork, info);
955  }
956 
957  void LAPACK<int,std::complex<float> >::GEQRF( const int& m, const int& n, std::complex<float>* A, const int& lda, std::complex<float>* TAU, std::complex<float>* WORK, const int& lwork, int* info) const
958  {
959  CGEQRF_F77(&m, &n, A, &lda, TAU, WORK, &lwork, info);
960  }
961 
962  void LAPACK<int,std::complex<float> >::GEQR2 (const int& m, const int& n, std::complex<float>* A, const int& lda, std::complex<float>* TAU, std::complex<float>* WORK, int* const info) const
963  {
964  CGEQR2_F77(&m, &n, A, &lda, TAU, WORK, info);
965  }
966 
967  void LAPACK<int,std::complex<float> >::UNGQR(const int& m, const int& n, const int& k, std::complex<float>* A, const int& lda, const std::complex<float>* TAU, std::complex<float>* WORK, const int& lwork, int* info) const
968  {
969  CUNGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info);
970  }
971 
972  void LAPACK<int,std::complex<float> >::UNMQR(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, const std::complex<float>* A, const int& lda, const std::complex<float>* TAU, std::complex<float>* C, const int& ldc, std::complex<float>* WORK, const int& lwork, int* info) const
973  {
974  CUNMQR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &k, A, &lda, TAU, C, &ldc, WORK, &lwork, info);
975  }
976 
977  void LAPACK<int,std::complex<float> >::UNM2R (const char& SIDE, const char& TRANS, const int& M, const int& N, const int& K, const std::complex<float>* A, const int& LDA, const std::complex<float>* TAU, std::complex<float>* C, const int& LDC, std::complex<float>* WORK, int* const INFO) const
978  {
979  CUNM2R_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &M, &N, &K, A, &LDA, TAU, C, &LDC, WORK, INFO);
980  }
981 
982  void LAPACK<int,std::complex<float> >::GETRF(const int& m, const int& n, std::complex<float>* A, const int& lda, int* IPIV, int* info) const
983  {
984  CGETRF_F77(&m, &n, A, &lda, IPIV, info);
985  }
986 
987  void LAPACK<int,std::complex<float> >::GETRS(const char& TRANS, const int& n, const int& nrhs, const std::complex<float>* A, const int& lda, const int* IPIV, std::complex<float>* B , const int& ldb, int* info) const
988  {
989  CGETRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, IPIV, B, &ldb, info);
990  }
991 
992  void LAPACK<int,std::complex<float> >::LASCL(const char& TYPE, const int& kl, const int& ku, const float& cfrom, const float& cto, const int& m, const int& n, std::complex<float>* A, const int& lda, int* info) const
993  { CLASCL_F77(CHAR_MACRO(TYPE), &kl, &ku, &cfrom, &cto, &m, &n, A, &lda, info); }
994 
995  void LAPACK<int,std::complex<float> >::GEQP3(const int& m, const int& n, std::complex<float>* A, const int& lda, int* jpvt, std::complex<float>* TAU, std::complex<float>* WORK, const int& lwork, float* RWORK, int* info ) const
996  {
997  CGEQP3_F77(&m, &n, A, &lda, jpvt, TAU, WORK, &lwork, RWORK, info);
998  }
999 
1000  void LAPACK<int, std::complex<float> >::
1001  LASWP (const int& N,
1002  std::complex<float>* A,
1003  const int& LDA,
1004  const int& K1,
1005  const int& K2,
1006  const int* IPIV,
1007  const int& INCX) const
1008  {
1009  CLASWP_F77(&N, A, &LDA, &K1, &K2, IPIV, &INCX);
1010  }
1011 
1012  void LAPACK<int,std::complex<float> >::GBTRF(const int& m, const int& n, const int& kl, const int& ku, std::complex<float>* A, const int& lda, int* IPIV, int* info) const
1013  {
1014  CGBTRF_F77(&m, &kl, &ku, &n, A, &lda, IPIV, info);
1015  }
1016 
1017 
1018  void LAPACK<int,std::complex<float> >::GBTRS(const char& TRANS, const int& n, const int& kl, const int& ku, const int& nrhs, const std::complex<float>* A, const int& lda, const int* IPIV, std::complex<float>* B , const int& ldb, int* info) const
1019  {
1020  CGBTRS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, A, &lda, IPIV, B, &ldb, info);
1021  }
1022 
1023 
1024  void LAPACK<int,std::complex<float> >::GTTRF(const int& n, std::complex<float>* dl, std::complex<float>* d, std::complex<float>* du, std::complex<float>* du2, int* IPIV, int* info) const
1025  {
1026  CGTTRF_F77(&n, dl, d, du, du2, IPIV, info);
1027  }
1028 
1029 
1030  void LAPACK<int,std::complex<float> >::GTTRS(const char& TRANS, const int& n, const int& nrhs, const std::complex<float>* dl, const std::complex<float>* d, const std::complex<float>* du, const std::complex<float>* du2, const int* IPIV, std::complex<float>* B, const int& ldb, int* info) const
1031  {
1032  CGTTRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, dl, d, du, du2, IPIV, B, &ldb, info);
1033  }
1034 
1035 
1036  void LAPACK<int,std::complex<float> >::GETRI(const int& n, std::complex<float>* A, const int& lda, const int* IPIV, std::complex<float>* WORK, const int& lwork, int* info) const
1037  {
1038  CGETRI_F77(&n, A, &lda, IPIV, WORK, &lwork, info);
1039  }
1040 
1041 
1042  void LAPACK<int, std::complex<float> >::LATRS (const char& UPLO, const char& TRANS, const char& DIAG, const char& NORMIN, const int& N, const std::complex<float>* A, const int& LDA, std::complex<float>* X, float* SCALE, float* CNORM, int* INFO) const
1043  {
1044  CLATRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), CHAR_MACRO(NORMIN), &N, A, &LDA, X, SCALE, CNORM, INFO);
1045  }
1046 
1047 
1048  void LAPACK<int,std::complex<float> >::GECON(const char& NORM, const int& n, const std::complex<float>* A, const int& lda, const float& anorm, float* rcond, std::complex<float>* WORK, float* RWORK, int* info) const
1049  {
1050  CGECON_F77(CHAR_MACRO(NORM), &n, A, &lda, &anorm, rcond, WORK, RWORK, info);
1051  }
1052 
1053 
1054  void LAPACK<int,std::complex<float> >::GBCON(const char& NORM, const int& n, const int& kl, const int& ku, const std::complex<float>* A, const int& lda, const int* IPIV, const float& anorm, float* rcond, std::complex<float>* WORK, float* RWORK, int* info) const
1055  {
1056  CGBCON_F77(CHAR_MACRO(NORM), &n, &kl, &ku, A, &lda, IPIV, &anorm, rcond, WORK, RWORK, info);
1057  }
1058 
1059 
1060  float LAPACK<int,std::complex<float> >::LANGB(const char& NORM, const int& n, const int& kl, const int& ku, const std::complex<float>* A, const int& lda, float* WORK) const
1061  {
1062  return( CLANGB_F77(CHAR_MACRO(NORM), &n, &kl, &ku, A, &lda, WORK) );
1063  }
1064 
1065 
1066  void LAPACK<int,std::complex<float> >::GESV(const int& n, const int& nrhs, std::complex<float>* A, const int& lda, int* IPIV, std::complex<float>* B, const int& ldb, int* info) const
1067  {
1068  CGESV_F77(&n, &nrhs, A, &lda, IPIV, B, &ldb, info);
1069  }
1070 
1071 
1072  void LAPACK<int,std::complex<float> >::GEEQU(const int& m, const int& n, const std::complex<float>* A, const int& lda, float* R, float* C, float* rowcond, float* colcond, float* amax, int* info) const
1073  {
1074  CGEEQU_F77(&m, &n, A, &lda, R, C, rowcond, colcond, amax, info);
1075  }
1076 
1077 
1078  void LAPACK<int,std::complex<float> >::GERFS(const char& TRANS, const int& n, const int& nrhs, const std::complex<float>* A, const int& lda, const std::complex<float>* AF, const int& ldaf, const int* IPIV, const std::complex<float>* B, const int& ldb, std::complex<float>* X, const int& ldx, float* FERR, float* BERR, std::complex<float>* WORK, float* RWORK, int* info) const
1079  {
1080  CGERFS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, RWORK, info);
1081  }
1082 
1083 
1084  void LAPACK<int,std::complex<float> >::GBEQU(const int& m, const int& n, const int& kl, const int& ku, const std::complex<float>* A, const int& lda, float* R, float* C, float* rowcond, float* colcond, float* amax, int* info) const
1085  {
1086  CGBEQU_F77(&m, &n, &kl, &ku, A, &lda, R, C, rowcond, colcond, amax, info);
1087  }
1088 
1089 
1090  void LAPACK<int,std::complex<float> >::GBRFS(const char& TRANS, const int& n, const int& kl, const int& ku, const int& nrhs, const std::complex<float>* A, const int& lda, const std::complex<float>* AF, const int& ldaf, const int* IPIV, const std::complex<float>* B, const int& ldb, std::complex<float>* X, const int& ldx, float* FERR, float* BERR, std::complex<float>* WORK, float* RWORK, int* info) const
1091  {
1092  CGBRFS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, RWORK, info);
1093  }
1094 
1095  void LAPACK<int,std::complex<float> >::GESVX(const char& FACT, const char& TRANS, const int& n, const int& nrhs, std::complex<float>* A, const int& lda, std::complex<float>* AF, const int& ldaf, int* IPIV, char* EQUED, float* R, float* C, std::complex<float>* B, const int& ldb, std::complex<float>* X, const int& ldx, float* rcond, float* FERR, float* BERR, std::complex<float>* WORK, float* RWORK, int* info) const
1096  {
1097  CGESVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, CHARPTR_MACRO(EQUED), R, C, B, &ldb, X, &ldx, rcond, FERR, BERR, WORK, RWORK, info);
1098  }
1099 
1100 
1101  void LAPACK<int,std::complex<float> >::GEHRD(const int& n, const int& ilo, const int& ihi, std::complex<float>* A, const int& lda, std::complex<float>* TAU, std::complex<float>* WORK, const int& lwork, int* info) const
1102  {
1103  CGEHRD_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info);
1104  }
1105 
1106 
1107  void LAPACK<int,std::complex<float> >::TRTRS(const char& UPLO, const char& TRANS, const char& DIAG, const int& n, const int& nrhs, const std::complex<float>* A, const int& lda, std::complex<float>* B, const int& ldb, int* info) const
1108  {
1109  CTRTRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), &n, &nrhs, A, &lda, B, &ldb, info);
1110  }
1111 
1112 
1113  void LAPACK<int,std::complex<float> >::TRTRI(const char& UPLO, const char& DIAG, const int& n, std::complex<float>* A, const int& lda, int* info) const
1114  {
1115  CTRTRI_F77(CHAR_MACRO(UPLO), CHAR_MACRO(DIAG), &n, A, &lda, info);
1116  }
1117 
1118 
1119  void LAPACK<int,std::complex<float> >::STEQR(const char& COMPZ, const int& n, float* D, float* E, std::complex<float>* Z, const int& ldz, float* WORK, int* info) const
1120  {
1121  CSTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info);
1122  }
1123 
1124 
1125  void LAPACK<int,std::complex<float> >::PTEQR(const char& COMPZ, const int& n, float* D, float* E, std::complex<float>* Z, const int& ldz, float* WORK, int* info) const
1126  {
1127  CPTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info);
1128  }
1129 
1130 
1131  void LAPACK<int,std::complex<float> >::HEEV(const char& JOBZ, const char& UPLO, const int& n, std::complex<float> * A, const int& lda, float* W, std::complex<float> * WORK, const int& lwork, float* RWORK, int* info) const
1132  {
1133  CHEEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, RWORK, info);
1134  }
1135 
1136 
1137  void LAPACK<int,std::complex<float> >::HEGV(const int& itype, const char& JOBZ, const char& UPLO, const int& n, std::complex<float> * A, const int& lda, std::complex<float> * B, const int& ldb, float* W, std::complex<float> * WORK, const int& lwork, float* RWORK, int* info) const
1138  {
1139  CHEGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, RWORK, info);
1140  }
1141 
1142 
1143  void LAPACK<int, std::complex<float> >::HSEQR(const char& JOB, const char& COMPZ, const int& n, const int& ilo, const int& ihi, std::complex<float>* H, const int& ldh, std::complex<float>* W, std::complex<float>* Z, const int& ldz, std::complex<float>* WORK, const int& lwork, int* info) const
1144  {
1145  CHSEQR_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPZ), &n, &ilo, &ihi, H, &ldh, W, Z, &ldz, WORK, &lwork, info);
1146  }
1147 
1148 
1149  void LAPACK<int, std::complex<float> >::GEES(const char& JOBVS, const char& SORT, int (*ptr2func)(std::complex<float>*), const int& n, std::complex<float>* A, const int& lda, int* sdim, std::complex<float>* W, std::complex<float>* VS, const int& ldvs, std::complex<float>* WORK, const int& lwork, float* RWORK, int* BWORK, int* info) const
1150  {
1151  CGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(SORT), ptr2func, &n, A, &lda, sdim, W, VS, &ldvs, WORK, &lwork, RWORK, BWORK, info);
1152  }
1153 
1154 
1155  void LAPACK<int, std::complex<float> >::GEES(const char& JOBVS, const int& n, std::complex<float>* A, const int& lda, int* sdim, float* WR, float* WI, std::complex<float>* VS, const int& ldvs, std::complex<float>* WORK, const int& lwork, float* RWORK, int* BWORK, int* info) const
1156  {
1157  int (*nullfptr)(std::complex<float>*) = NULL;
1158  std::vector< std::complex<float> > W(n);
1159  const char sort = 'N';
1160  CGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(sort), nullfptr, &n, A, &lda, sdim, &W[0], VS, &ldvs, WORK, &lwork, RWORK, BWORK, info);
1161  for (int i=0; i<n; i++) {
1162  WR[i] = W[i].real();
1163  WI[i] = W[i].imag();
1164  }
1165  }
1166 
1167 
1168  void LAPACK<int, std::complex<float> >::GEEV(const char& JOBVL, const char& JOBVR, const int& n, std::complex<float>* A, const int& lda, std::complex<float>* W, std::complex<float>* VL, const int& ldvl, std::complex<float>* VR, const int& ldvr, std::complex<float>* WORK, const int& lwork, float* RWORK, int* info) const
1169  {
1170  CGEEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, W, VL, &ldvl, VR, &ldvr, WORK, &lwork, RWORK, info);
1171  }
1172 
1173  void LAPACK<int, std::complex<float> >::GEEV(const char& JOBVL, const char& JOBVR, const int& n, std::complex<float>* A, const int& lda, float* WR, float* WI, std::complex<float>* VL, const int& ldvl, std::complex<float>* VR, const int& ldvr, std::complex<float>* WORK, const int& lwork, float* RWORK, int* info) const
1174  {
1175  std::vector<std::complex<float> > w (n);
1176  std::complex<float>* w_rawPtr = (n == 0) ? NULL : &w[0];
1177  GEEV (JOBVL, JOBVR, n, A, lda, w_rawPtr, VL, ldvl, VR, ldvr, WORK, lwork, RWORK, info);
1178  if (*info == 0) {
1179  // The eigenvalues are only valid on output if INFO is zero.
1180  // Otherwise, we shouldn't even write to WR or WI.
1181  for (int k = 0; k < n; ++k) {
1182  WR[k] = w[k].real ();
1183  WI[k] = w[k].imag ();
1184  }
1185  }
1186  }
1187 
1188  void LAPACK<int, std::complex<float> >::GESVD(const char& JOBU, const char& JOBVT, const int& m, const int& n, std::complex<float> * A, const int& lda, float* S, std::complex<float> * U, const int& ldu, std::complex<float> * V, const int& ldv, std::complex<float> * WORK, const int& lwork, float* RWORK, int* info) const {
1189  CGESVD_F77(CHAR_MACRO(JOBU), CHAR_MACRO(JOBVT), &m, &n, A, &lda, S, U, &ldu, V, &ldv, WORK, &lwork, RWORK, info);
1190  }
1191 
1192 
1193  void LAPACK<int, std::complex<float> >::GEEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, std::complex<float>* A, const int& lda, std::complex<float>* W, std::complex<float>* VL, const int& ldvl, std::complex<float>* VR, const int& ldvr, int* ilo, int* ihi, float* SCALE, float* abnrm, float* RCONDE, float* RCONDV, std::complex<float>* WORK, const int& lwork, float* RWORK, int* info) const
1194  {
1195  CGEEVX_F77(CHAR_MACRO(BALANC), CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), CHAR_MACRO(SENSE), &n, A, &lda, W, VL, &ldvl, VR, &ldvr, ilo, ihi, SCALE, abnrm, RCONDE, RCONDV, WORK, &lwork, RWORK, info);
1196  }
1197 
1198 
1199  void LAPACK<int, std::complex<float> >::GGEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, std::complex<float>* A, const int& lda, std::complex<float>* B, const int& ldb, std::complex<float>* ALPHA, std::complex<float>* BETA, std::complex<float>* VL, const int& ldvl, std::complex<float>* VR, const int& ldvr, int* ilo, int* ihi, float* lscale, float* rscale, float* abnrm, float* bbnrm, float* RCONDE, float* RCONDV, std::complex<float>* WORK, const int& lwork, float* RWORK, int* IWORK, int* BWORK, int* info) const
1200  {
1201  CGGEVX_F77(CHAR_MACRO(BALANC), CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), CHAR_MACRO(SENSE), &n, A, &lda, B, &ldb, ALPHA, BETA, VL, &ldvl, VR, &ldvr, ilo, ihi, lscale, rscale, abnrm, bbnrm, RCONDE, RCONDV, WORK, &lwork, RWORK, IWORK, BWORK, info);
1202  }
1203 
1204  void LAPACK<int, std::complex<float> >::GGEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, std::complex<float>* A, const int& lda, std::complex<float>* B, const int& ldb, float* ALPHAR, float* ALPHAI, std::complex<float>* BETA, std::complex<float>* VL, const int& ldvl, std::complex<float>* VR, const int& ldvr, int* ilo, int* ihi, float* lscale, float* rscale, float* abnrm, float* bbnrm, float* RCONDE, float* RCONDV, std::complex<float>* WORK, const int& lwork, float* RWORK, int* IWORK, int* BWORK, int* info) const
1205  {
1206  std::vector<std::complex<float> > w (n);
1207  std::complex<float>* w_rawPtr = (n == 0) ? NULL : &w[0];
1208  GGEVX(BALANC, JOBVL, JOBVR, SENSE, n, A, lda, B, ldb, w_rawPtr, BETA, VL, ldvl, VR, ldvr, ilo, ihi, lscale, rscale, abnrm, bbnrm, RCONDE, RCONDV, WORK, lwork, RWORK, IWORK, BWORK, info);
1209  if (*info == 0) {
1210  // The eigenvalues are only valid on output if INFO is zero.
1211  // Otherwise, we shouldn't even write to WR or WI.
1212  for (int k = 0; k < n; ++k) {
1213  ALPHAR[k] = w[k].real ();
1214  ALPHAI[k] = w[k].imag ();
1215  }
1216  }
1217  }
1218 
1219  void LAPACK<int, std::complex<float> >::GGEV(const char& JOBVL, const char& JOBVR, const int& n, std::complex<float> *A, const int& lda, std::complex<float> *B, const int& ldb, std::complex<float>* ALPHA, std::complex<float>* BETA, std::complex<float>* VL, const int& ldvl, std::complex<float>* VR, const int& ldvr, std::complex<float> *WORK, const int& lwork, float* RWORK, int* info) const
1220  {
1221  CGGEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, B, &ldb, ALPHA, BETA, VL, &ldvl, VR, &ldvr, WORK, &lwork, RWORK, info);
1222  }
1223 
1224  void LAPACK<int, std::complex<float> >::GGES(const char& JOBVL, const char& JOBVR, const char& SORT, int (*ptr2func)(std::complex<float>*, std::complex<float>*), const int& n, std::complex<float>* A, const int& lda, std::complex<float>* B, const int& ldb, int* sdim, std::complex<float>* ALPHA, std::complex<float>* BETA, std::complex<float>* VL, const int& ldvl, std::complex<float>* VR, const int& ldvr, std::complex<float>* WORK, const int& lwork, float* rwork, int* bwork, int* info ) const
1225  {
1226  CGGES_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), CHAR_MACRO(SORT), ptr2func, &n, A, &lda, B, &ldb, sdim, ALPHA, BETA, VL, &ldvl, VR, &ldvr, WORK, &lwork, rwork, bwork, info);
1227  }
1228  void LAPACK<int, std::complex<float> >::TGSEN(const int& ijob, const int& wantq, const int& wantz, const int* SELECT, const int& n, std::complex<float>* A, const int& lda, std::complex<float>* B, const int& ldb, std::complex<float>* ALPHA, std::complex<float>* BETA, std::complex<float>* Q, const int& ldq, std::complex<float>* Z, const int& ldz, int* M, float* PL, float* PR, float* DIF, std::complex<float>* WORK, const int& lwork, int* IWORK, const int& liwork, int* info ) const
1229  {
1230  CTGSEN_F77(&ijob, &wantq, &wantz, SELECT, &n, A, &lda, B, &ldb, ALPHA, BETA, Q, &ldq, Z, &ldz, M, PL, PR, DIF, WORK, &lwork, IWORK, &liwork, info);
1231  }
1232 
1233  void LAPACK<int, std::complex<float> >::TREVC(const char& SIDE, const char& HOWMNY, int* select, const int& n, const std::complex<float>* T, const int& ldt, std::complex<float>* VL, const int& ldvl, std::complex<float>* VR, const int& ldvr, const int& mm, int* m, std::complex<float>* WORK, float* RWORK, int* info) const
1234  {
1235  CTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), select, &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, RWORK, info);
1236  }
1237 
1238 
1239  void LAPACK<int, std::complex<float> >::TREVC(const char& SIDE, const int& n, const std::complex<float>* T, const int& ldt, std::complex<float>* VL, const int& ldvl, std::complex<float>* VR, const int& ldvr, const int& mm, int* m, std::complex<float>* WORK, float* RWORK, int* info) const
1240  {
1241  std::vector<int> select(1);
1242  const char& whch = 'A';
1243  CTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(whch), &select[0], &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, RWORK, info);
1244  }
1245 
1246  void LAPACK<int, std::complex<float> >::TREXC(const char& COMPQ, const int& n, std::complex<float>* T, const int& ldt, std::complex<float>* Q, const int& ldq, int* ifst, int* ilst, std::complex<float>* WORK, int* info) const
1247  {
1248  CTREXC_F77(CHAR_MACRO(COMPQ), &n, T, &ldt, Q, &ldq, ifst, ilst, info);
1249  }
1250 
1251 
1252  void LAPACK<int, std::complex<float> >::LARTG( const std::complex<float> f, const std::complex<float> g, float* c, std::complex<float>* s, std::complex<float>* r ) const
1253  {
1254  CLARTG_F77(&f, &g, c, s, r);
1255  }
1256 
1257 
1258  void LAPACK<int, std::complex<float> >::LARFG( const int& n, std::complex<float>* alpha, std::complex<float>* x, const int& incx, std::complex<float>* tau ) const
1259  {
1260  CLARFG_F77(&n, alpha, x, &incx, tau);
1261  }
1262 
1263  void LAPACK<int, std::complex<float> >::GEBAL(const char& JOBZ, const int& n, std::complex<float>* A, const int& lda, int* ilo, int* ihi, float* scale, int* info) const
1264  {
1265  CGEBAL_F77(CHAR_MACRO(JOBZ),&n, A, &lda, ilo, ihi, scale, info);
1266  }
1267 
1268 
1269  void LAPACK<int, std::complex<float> >::GEBAK(const char& JOBZ, const char& SIDE, const int& n, const int& ilo, const int& ihi, const float* scale, const int& m, std::complex<float>* V, const int& ldv, int* info) const
1270  {
1271  CGEBAK_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(SIDE), &n, &ilo, &ihi, scale, &m, V, &ldv, info);
1272  }
1273 
1274 
1275 #ifdef HAVE_TEUCHOS_LAPACKLARND
1276  std::complex<float> LAPACK<int, std::complex<float> >::LARND( const int& idist, int* seed ) const
1277  {
1278  float _Complex z = CLARND_F77(&idist, seed);
1279  return TEUCHOS_LAPACK_CONVERT_COMPLEX_FORTRAN_TO_CXX(float, z);
1280  }
1281 #endif
1282 
1283  void LAPACK<int, std::complex<float> >::LARNV( const int& idist, int* seed, const int& n, std::complex<float>* v ) const
1284  {
1285  CLARNV_F77(&idist, seed, &n, v);
1286  }
1287 
1288 
1289  int LAPACK<int, std::complex<float> >::ILAENV( const int& ispec, const std::string& NAME, const std::string& OPTS, const int& N1, const int& N2, const int& N3, const int& N4 ) const
1290  {
1291  unsigned int opts_length = OPTS.length();
1292  std::string temp_NAME = "c" + NAME;
1293  unsigned int name_length = temp_NAME.length();
1294  return ilaenv_wrapper(&ispec, &temp_NAME[0], name_length, &OPTS[0], opts_length, &N1, &N2, &N3, &N4);
1295  }
1296 
1297  // END INT, COMPLEX<FLOAT> SPECIALIZATION IMPLEMENTATION //
1298 
1299  // BEGIN INT, COMPLEX<DOUBLE> SPECIALIZATION IMPLEMENTATION //
1300 
1301 
1302  void LAPACK<int, std::complex<double> >::PTTRF(const int& n, double* d, std::complex<double>* e, int* info) const
1303  {
1304  ZPTTRF_F77(&n,d,e,info);
1305  }
1306 
1307 
1308  void LAPACK<int, std::complex<double> >::PTTRS(const char& UPLO, const int& n, const int& nrhs, const double* d, const std::complex<double>* e, std::complex<double>* B, const int& ldb, int* info) const
1309  {
1310  ZPTTRS_F77(CHAR_MACRO(UPLO),&n,&nrhs,d,e,B,&ldb,info);
1311  }
1312 
1313 
1314  void LAPACK<int, std::complex<double> >::POTRF(const char& UPLO, const int& n, std::complex<double>* A, const int& lda, int* info) const
1315  {
1316  ZPOTRF_F77(CHAR_MACRO(UPLO), &n, A, &lda, info);
1317  }
1318 
1319 
1320  void LAPACK<int, std::complex<double> >::POTRS(const char& UPLO, const int& n, const int& nrhs, const std::complex<double>* A, const int& lda, std::complex<double>* B, const int& ldb, int* info) const
1321  {
1322  ZPOTRS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info);
1323  }
1324 
1325 
1326  void LAPACK<int, std::complex<double> >::POTRI(const char& UPLO, const int& n, std::complex<double>* A, const int& lda, int* info) const
1327  {
1328  ZPOTRI_F77(CHAR_MACRO(UPLO), &n, A, &lda, info);
1329  }
1330 
1331 
1332  void LAPACK<int, std::complex<double> >::POCON(const char& UPLO, const int& n, const std::complex<double>* A, const int& lda, const double& anorm, double* rcond, std::complex<double>* WORK, double* RWORK, int* info) const
1333  {
1334  ZPOCON_F77(CHAR_MACRO(UPLO), &n, A, &lda, &anorm, rcond, WORK, RWORK, info);
1335  }
1336 
1337 
1338  void LAPACK<int, std::complex<double> >::POSV(const char& UPLO, const int& n, const int& nrhs, std::complex<double>* A, const int& lda, std::complex<double>* B, const int& ldb, int* info) const
1339  {
1340  ZPOSV_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info);
1341  }
1342 
1343 
1344  void LAPACK<int, std::complex<double> >::POEQU(const int& n, const std::complex<double>* A, const int& lda, double* S, double* scond, double* amax, int* info) const
1345  {
1346  ZPOEQU_F77(&n, A, &lda, S, scond, amax, info);
1347  }
1348 
1349 
1350  void LAPACK<int, std::complex<double> >::PORFS(const char& UPLO, const int& n, const int& nrhs, const std::complex<double>* A, const int& lda, const std::complex<double>* AF, const int& ldaf, const std::complex<double>* B, const int& ldb, std::complex<double>* X, const int& ldx, double* FERR, double* BERR, std::complex<double>* WORK, double* RWORK, int* info) const
1351  {
1352  ZPORFS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, B, &ldb, X, &ldx, FERR, BERR, WORK, RWORK, info);
1353  }
1354 
1355  void LAPACK<int, std::complex<double> >::POSVX(const char& FACT, const char& UPLO, const int& n, const int& nrhs, std::complex<double>* A, const int& lda, std::complex<double>* AF, const int& ldaf, char* EQUED, double* S, std::complex<double>* B, const int& ldb, std::complex<double>* X, const int& ldx, double* rcond, double* FERR, double* BERR, std::complex<double>* WORK, double* RWORK, int* info) const
1356  {
1357  ZPOSVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, CHARPTR_MACRO(EQUED), S, B, &ldb, X, &ldx, rcond, FERR, BERR, WORK, RWORK, info);
1358  }
1359 
1360 
1361  void LAPACK<int,std::complex<double> >::GELS(const char& TRANS, const int& m, const int& n, const int& nrhs, std::complex<double>* A, const int& lda, std::complex<double>* B, const int& ldb, std::complex<double>* WORK, const int& lwork, int* info) const
1362  {
1363  ZGELS_F77(CHAR_MACRO(TRANS), &m, &n, &nrhs, A, &lda, B, &ldb, WORK, &lwork, info);
1364  }
1365 
1366 
1367  void LAPACK<int, std::complex<double> >::GELSS(const int& m, const int& n, const int& nrhs, std::complex<double>* A, const int& lda, std::complex<double>* B, const int& ldb, double* S, const double& rcond, int* rank, std::complex<double>* WORK, const int& lwork, double* rwork, int* info) const
1368  {
1369  ZGELSS_F77(&m, &n, &nrhs, A, &lda, B, &ldb, S, &rcond, rank, WORK, &lwork, rwork, info);
1370  }
1371 
1372 
1373  void LAPACK<int,std::complex<double> >::GEQRF( const int& m, const int& n, std::complex<double>* A, const int& lda, std::complex<double>* TAU, std::complex<double>* WORK, const int& lwork, int* info) const
1374  {
1375  ZGEQRF_F77(&m, &n, A, &lda, TAU, WORK, &lwork, info);
1376  }
1377 
1378  void LAPACK<int,std::complex<double> >::GEQR2 (const int& m, const int& n, std::complex<double>* A, const int& lda, std::complex<double>* TAU, std::complex<double>* WORK, int* const info) const
1379  {
1380  ZGEQR2_F77(&m, &n, A, &lda, TAU, WORK, info);
1381  }
1382 
1383  void LAPACK<int,std::complex<double> >::UNGQR(const int& m, const int& n, const int& k, std::complex<double>* A, const int& lda, const std::complex<double>* TAU, std::complex<double>* WORK, const int& lwork, int* info) const
1384  {
1385  ZUNGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info);
1386  }
1387 
1388 
1389  void LAPACK<int,std::complex<double> >::UNMQR(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, const std::complex<double>* A, const int& lda, const std::complex<double>* TAU, std::complex<double>* C, const int& ldc, std::complex<double>* WORK, const int& lwork, int* info) const
1390  {
1391  ZUNMQR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &k, A, &lda, TAU, C, &ldc, WORK, &lwork, info);
1392  }
1393 
1394  void LAPACK<int,std::complex<double> >::UNM2R (const char& SIDE, const char& TRANS, const int& M, const int& N, const int& K, const std::complex<double>* A, const int& LDA, const std::complex<double>* TAU, std::complex<double>* C, const int& LDC, std::complex<double>* WORK, int* const INFO) const
1395  {
1396  ZUNM2R_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &M, &N, &K, A, &LDA, TAU, C, &LDC, WORK, INFO);
1397  }
1398 
1399  void LAPACK<int,std::complex<double> >::GETRF(const int& m, const int& n, std::complex<double>* A, const int& lda, int* IPIV, int* info) const
1400  {
1401  ZGETRF_F77(&m, &n, A, &lda, IPIV, info);
1402  }
1403 
1404 
1405  void LAPACK<int,std::complex<double> >::GETRS(const char& TRANS, const int& n, const int& nrhs, const std::complex<double>* A, const int& lda, const int* IPIV, std::complex<double>* B, const int& ldb, int* info) const
1406  {
1407  ZGETRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, IPIV, B, &ldb, info);
1408  }
1409 
1410 
1411  void LAPACK<int,std::complex<double> >::LASCL(const char& TYPE, const int& kl, const int& ku, const double& cfrom, const double& cto, const int& m, const int& n, std::complex<double>* A, const int& lda, int* info) const
1412  { ZLASCL_F77(CHAR_MACRO(TYPE), &kl, &ku, &cfrom, &cto, &m, &n, A, &lda, info); }
1413 
1414  void LAPACK<int,std::complex<double> >::GEQP3(const int& m, const int& n, std::complex<double>* A, const int& lda, int* jpvt, std::complex<double>* TAU, std::complex<double>* WORK, const int& lwork, double* RWORK, int* info ) const
1415  {
1416  ZGEQP3_F77(&m, &n, A, &lda, jpvt, TAU, WORK, &lwork, RWORK, info);
1417  }
1418 
1419  void LAPACK<int, std::complex<double> >::LASWP (const int& N, std::complex<double>* A, const int& LDA, const int& K1, const int& K2, const int* IPIV, const int& INCX) const
1420  {
1421  ZLASWP_F77(&N, A, &LDA, &K1, &K2, IPIV, &INCX);
1422  }
1423 
1424  void LAPACK<int,std::complex<double> >::GBTRF(const int& m, const int& n, const int& kl, const int& ku, std::complex<double>* A, const int& lda, int* IPIV, int* info) const
1425  {
1426  ZGBTRF_F77(&m, &n, &kl, &ku, A, &lda, IPIV, info);
1427  }
1428 
1429 
1430  void LAPACK<int,std::complex<double> >::GBTRS(const char& TRANS, const int& n, const int& kl, const int& ku, const int& nrhs, const std::complex<double>* A, const int& lda, const int* IPIV, std::complex<double>* B, const int& ldb, int* info) const
1431  {
1432  ZGBTRS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, A, &lda, IPIV, B, &ldb, info);
1433  }
1434 
1435 
1436  void LAPACK<int,std::complex<double> >::GTTRF(const int& n, std::complex<double>* dl, std::complex<double>* d, std::complex<double>* du, std::complex<double>* du2, int* IPIV, int* info) const
1437  {
1438  ZGTTRF_F77(&n, dl, d, du, du2, IPIV, info);
1439  }
1440 
1441 
1442  void LAPACK<int,std::complex<double> >::GTTRS(const char& TRANS, const int& n, const int& nrhs, const std::complex<double>* dl, const std::complex<double>* d, const std::complex<double>* du, const std::complex<double>* du2, const int* IPIV, std::complex<double>* B, const int& ldb, int* info) const
1443  {
1444  ZGTTRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, dl, d, du, du2, IPIV, B, &ldb, info);
1445  }
1446 
1447 
1448  void LAPACK<int,std::complex<double> >::GETRI(const int& n, std::complex<double>* A, const int& lda, const int* IPIV, std::complex<double>* WORK, const int& lwork, int* info) const
1449  {
1450  ZGETRI_F77(&n, A, &lda, IPIV, WORK, &lwork, info);
1451  }
1452 
1453  void LAPACK<int, std::complex<double> >::LATRS (const char& UPLO, const char& TRANS, const char& DIAG, const char& NORMIN, const int& N, const std::complex<double>* A, const int& LDA, std::complex<double>* X, double* SCALE, double* CNORM, int* INFO) const
1454  {
1455  ZLATRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), CHAR_MACRO(NORMIN), &N, A, &LDA, X, SCALE, CNORM, INFO);
1456  }
1457 
1458  void LAPACK<int,std::complex<double> >::GECON(const char& NORM, const int& n, const std::complex<double>* A, const int& lda, const double& anorm, double* rcond, std::complex<double>* WORK, double* RWORK, int* info) const
1459  {
1460  ZGECON_F77(CHAR_MACRO(NORM), &n, A, &lda, &anorm, rcond, WORK, RWORK, info);
1461  }
1462 
1463 
1464  void LAPACK<int,std::complex<double> >::GBCON(const char& NORM, const int& n, const int& kl, const int& ku, const std::complex<double>* A, const int& lda, const int* IPIV, const double& anorm, double* rcond, std::complex<double>* WORK, double* RWORK, int* info) const
1465  {
1466  ZGBCON_F77(CHAR_MACRO(NORM), &n, &kl, &ku, A, &lda, IPIV, &anorm, rcond, WORK, RWORK, info);
1467  }
1468 
1469 
1470  double LAPACK<int,std::complex<double> >::LANGB(const char& NORM, const int& n, const int& kl, const int& ku, const std::complex<double>* A, const int& lda, double* WORK) const
1471  {
1472  return( ZLANGB_F77(CHAR_MACRO(NORM), &n, &kl, &ku, A, &lda, WORK) );
1473  }
1474 
1475 
1476  void LAPACK<int,std::complex<double> >::GESV(const int& n, const int& nrhs, std::complex<double>* A, const int& lda, int* IPIV, std::complex<double>* B, const int& ldb, int* info) const
1477  {
1478  ZGESV_F77(&n, &nrhs, A, &lda, IPIV, B, &ldb, info);
1479  }
1480 
1481 
1482  void LAPACK<int,std::complex<double> >::GEEQU(const int& m, const int& n, const std::complex<double>* A, const int& lda, double* R, double* C, double* rowcond, double* colcond, double* amax, int* info) const
1483  {
1484  ZGEEQU_F77(&m, &n, A, &lda, R, C, rowcond, colcond, amax, info);
1485  }
1486 
1487 
1488  void LAPACK<int,std::complex<double> >::GERFS(const char& TRANS, const int& n, const int& nrhs, const std::complex<double>* A, const int& lda, const std::complex<double>* AF, const int& ldaf, const int* IPIV, const std::complex<double>* B, const int& ldb, std::complex<double>* X, const int& ldx, double* FERR, double* BERR, std::complex<double>* WORK, double* RWORK, int* info) const
1489  {
1490  ZGERFS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, RWORK, info);
1491  }
1492 
1493 
1494  void LAPACK<int,std::complex<double> >::GBEQU(const int& m, const int& n, const int& kl, const int& ku, const std::complex<double>* A, const int& lda, double* R, double* C, double* rowcond, double* colcond, double* amax, int* info) const
1495  {
1496  ZGBEQU_F77(&m, &n, &kl, &ku, A, &lda, R, C, rowcond, colcond, amax, info);
1497  }
1498 
1499 
1500  void LAPACK<int,std::complex<double> >::GBRFS(const char& TRANS, const int& n, const int& kl, const int& ku, const int& nrhs, const std::complex<double>* A, const int& lda, const std::complex<double>* AF, const int& ldaf, const int* IPIV, const std::complex<double>* B, const int& ldb, std::complex<double>* X, const int& ldx, double* FERR, double* BERR, std::complex<double>* WORK, double* RWORK, int* info) const
1501  {
1502  ZGBRFS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, RWORK, info);
1503  }
1504 
1505  void LAPACK<int,std::complex<double> >::GESVX(const char& FACT, const char& TRANS, const int& n, const int& nrhs, std::complex<double>* A, const int& lda, std::complex<double>* AF, const int& ldaf, int* IPIV, char* EQUED, double* R, double* C, std::complex<double>* B, const int& ldb, std::complex<double>* X, const int& ldx, double* rcond, double* FERR, double* BERR, std::complex<double>* WORK, double* RWORK, int* info) const
1506  {
1507  ZGESVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, CHARPTR_MACRO(EQUED), R, C, B, &ldb, X, &ldx, rcond, FERR, BERR, WORK, RWORK, info);
1508  }
1509 
1510 
1511  void LAPACK<int,std::complex<double> >::GEHRD(const int& n, const int& ilo, const int& ihi, std::complex<double>* A, const int& lda, std::complex<double>* TAU, std::complex<double>* WORK, const int& lwork, int* info) const
1512  {
1513  ZGEHRD_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info);
1514  }
1515 
1516 
1517  void LAPACK<int,std::complex<double> >::TRTRS(const char& UPLO, const char& TRANS, const char& DIAG, const int& n, const int& nrhs, const std::complex<double>* A, const int& lda, std::complex<double>* B, const int& ldb, int* info) const
1518  {
1519  ZTRTRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), &n, &nrhs, A, &lda, B, &ldb, info);
1520  }
1521 
1522 
1523  void LAPACK<int,std::complex<double> >::TRTRI(const char& UPLO, const char& DIAG, const int& n, std::complex<double>* A, const int& lda, int* info) const
1524  {
1525  ZTRTRI_F77(CHAR_MACRO(UPLO), CHAR_MACRO(DIAG), &n, A, &lda, info);
1526  }
1527 
1528 
1529  void LAPACK<int,std::complex<double> >::STEQR(const char& COMPZ, const int& n, double* D, double* E, std::complex<double>* Z, const int& ldz, double* WORK, int* info) const
1530  {
1531  ZSTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info);
1532  }
1533 
1534 
1535  void LAPACK<int,std::complex<double> >::PTEQR(const char& COMPZ, const int& n, double* D, double* E, std::complex<double>* Z, const int& ldz, double* WORK, int* info) const
1536  {
1537  ZPTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info);
1538  }
1539 
1540 
1541  void LAPACK<int,std::complex<double> >::HEEV(const char& JOBZ, const char& UPLO, const int& n, std::complex<double> * A, const int& lda, double* W, std::complex<double> * WORK, const int& lwork, double* RWORK, int* info) const
1542  {
1543  ZHEEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, RWORK, info);
1544  }
1545 
1546 
1547  void LAPACK<int,std::complex<double> >::HEGV(const int& itype, const char& JOBZ, const char& UPLO, const int& n, std::complex<double> * A, const int& lda, std::complex<double> * B, const int& ldb, double* W, std::complex<double> * WORK, const int& lwork, double* RWORK, int* info) const
1548  {
1549  ZHEGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, RWORK, info);
1550  }
1551 
1552 
1553  void LAPACK<int, std::complex<double> >::HSEQR(const char& JOB, const char& COMPZ, const int& n, const int& ilo, const int& ihi, std::complex<double>* H, const int& ldh, std::complex<double>* W, std::complex<double>* Z, const int& ldz, std::complex<double>* WORK, const int& lwork, int* info) const
1554  {
1555  ZHSEQR_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPZ), &n, &ilo, &ihi, H, &ldh, W, Z, &ldz, WORK, &lwork, info);
1556  }
1557 
1558 
1559  void LAPACK<int, std::complex<double> >::GEES(const char& JOBVS, const char& SORT, int (*ptr2func)(std::complex<double>*), const int& n, std::complex<double>* A, const int& lda, int* sdim, std::complex<double>* W, std::complex<double>* VS, const int& ldvs, std::complex<double>* WORK, const int& lwork, double* RWORK, int* BWORK, int* info) const
1560  {
1561  ZGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(SORT), ptr2func, &n, A, &lda, sdim, W, VS, &ldvs, WORK, &lwork, RWORK, BWORK, info);
1562  }
1563 
1564 
1565  void LAPACK<int, std::complex<double> >::GEES(const char& JOBVS, const int& n, std::complex<double>* A, const int& lda, int* sdim, double* WR, double* WI, std::complex<double>* VS, const int& ldvs, std::complex<double>* WORK, const int& lwork, double* RWORK, int* BWORK, int* info) const
1566  {
1567  int (*nullfptr)(std::complex<double>*) = NULL;
1568  std::vector< std::complex<double> > W(n);
1569  const char sort = 'N';
1570  ZGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(sort), nullfptr, &n, A, &lda, sdim, &W[0], VS, &ldvs, WORK, &lwork, RWORK, BWORK, info);
1571  for (int i=0; i<n; i++) {
1572  WR[i] = W[i].real();
1573  WI[i] = W[i].imag();
1574  }
1575  }
1576 
1577 
1578  void LAPACK<int, std::complex<double> >::GEEV(const char& JOBVL, const char& JOBVR, const int& n, std::complex<double>* A, const int& lda, std::complex<double>* W, std::complex<double>* VL, const int& ldvl, std::complex<double>* VR, const int& ldvr, std::complex<double>* WORK, const int& lwork, double* RWORK, int* info) const
1579  {
1580  ZGEEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, W, VL, &ldvl, VR, &ldvr, WORK, &lwork, RWORK, info);
1581  }
1582 
1583 
1584  void LAPACK<int, std::complex<double> >::GEEV(const char& JOBVL, const char& JOBVR, const int& n, std::complex<double>* A, const int& lda, double* WR, double* WI, std::complex<double>* VL, const int& ldvl, std::complex<double>* VR, const int& ldvr, std::complex<double>* WORK, const int& lwork, double* RWORK, int* info) const
1585  {
1586  std::vector<std::complex<double> > w (n);
1587  std::complex<double>* w_rawPtr = (n == 0) ? NULL : &w[0];
1588  GEEV (JOBVL, JOBVR, n, A, lda, w_rawPtr, VL, ldvl, VR, ldvr, WORK, lwork, RWORK, info);
1589  if (*info == 0) {
1590  // The eigenvalues are only valid on output if INFO is zero.
1591  // Otherwise, we shouldn't even write to WR or WI.
1592  for (int k = 0; k < n; ++k) {
1593  WR[k] = w[k].real ();
1594  WI[k] = w[k].imag ();
1595  }
1596  }
1597  }
1598 
1599 
1600  void LAPACK<int, std::complex<double> >::GESVD(const char& JOBU, const char& JOBVT, const int& m, const int& n, std::complex<double> * A, const int& lda, double* S, std::complex<double> * U, const int& ldu, std::complex<double> * V, const int& ldv, std::complex<double> * WORK, const int& lwork, double* RWORK, int* info) const {
1601  ZGESVD_F77(CHAR_MACRO(JOBU), CHAR_MACRO(JOBVT), &m, &n, A, &lda, S, U, &ldu, V, &ldv, WORK, &lwork, RWORK, info);
1602  }
1603 
1604  void LAPACK<int, std::complex<double> >::GEEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, std::complex<double>* A, const int& lda, std::complex<double>* W, std::complex<double>* VL, const int& ldvl, std::complex<double>* VR, const int& ldvr, int* ilo, int* ihi, double* SCALE, double* abnrm, double* RCONDE, double* RCONDV, std::complex<double>* WORK, const int& lwork, double* RWORK, int* info) const
1605  {
1606  ZGEEVX_F77(CHAR_MACRO(BALANC), CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), CHAR_MACRO(SENSE), &n, A, &lda, W, VL, &ldvl, VR, &ldvr, ilo, ihi, SCALE, abnrm, RCONDE, RCONDV, WORK, &lwork, RWORK, info);
1607  }
1608 
1609  void LAPACK<int, std::complex<double> >::GGEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, std::complex<double>* A, const int& lda, std::complex<double>* B, const int& ldb, std::complex<double>* ALPHA, std::complex<double>* BETA, std::complex<double>* VL, const int& ldvl, std::complex<double>* VR, const int& ldvr, int* ilo, int* ihi, double* lscale, double* rscale, double* abnrm, double* bbnrm, double* RCONDE, double* RCONDV, std::complex<double>* WORK, const int& lwork, double* RWORK, int* IWORK, int* BWORK, int* info) const
1610  {
1611  ZGGEVX_F77(CHAR_MACRO(BALANC), CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), CHAR_MACRO(SENSE), &n, A, &lda, B, &ldb, ALPHA, BETA, VL, &ldvl, VR, &ldvr, ilo, ihi, lscale, rscale, abnrm, bbnrm, RCONDE, RCONDV, WORK, &lwork, RWORK, IWORK, BWORK, info);
1612  }
1613 
1614  void LAPACK<int, std::complex<double> >::GGEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, std::complex<double>* A, const int& lda, std::complex<double>* B, const int& ldb, double* ALPHAR, double* ALPHAI, std::complex<double>* BETA, std::complex<double>* VL, const int& ldvl, std::complex<double>* VR, const int& ldvr, int* ilo, int* ihi, double* lscale, double* rscale, double* abnrm, double* bbnrm, double* RCONDE, double* RCONDV, std::complex<double>* WORK, const int& lwork, double* RWORK, int* IWORK, int* BWORK, int* info) const
1615  {
1616  std::vector<std::complex<double> > w (n);
1617  std::complex<double>* w_rawPtr = (n == 0) ? NULL : &w[0];
1618  GGEVX(BALANC, JOBVL, JOBVR, SENSE, n, A, lda, B, ldb, w_rawPtr, BETA, VL, ldvl, VR, ldvr, ilo, ihi, lscale, rscale, abnrm, bbnrm, RCONDE, RCONDV, WORK, lwork, RWORK, IWORK, BWORK, info);
1619  if (*info == 0) {
1620  // The eigenvalues are only valid on output if INFO is zero.
1621  // Otherwise, we shouldn't even write to WR or WI.
1622  for (int k = 0; k < n; ++k) {
1623  ALPHAR[k] = w[k].real ();
1624  ALPHAI[k] = w[k].imag ();
1625  }
1626  }
1627  }
1628 
1629  void LAPACK<int, std::complex<double> >::GGEV(const char& JOBVL, const char& JOBVR, const int& n, std::complex<double> *A, const int& lda, std::complex<double> *B, const int& ldb, std::complex<double>* ALPHA, std::complex<double>* BETA, std::complex<double>* VL, const int& ldvl, std::complex<double>* VR, const int& ldvr, std::complex<double> *WORK, const int& lwork, double* RWORK, int* info) const
1630  {
1631  ZGGEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, B, &ldb, ALPHA, BETA, VL, &ldvl, VR, &ldvr, WORK, &lwork, RWORK, info);
1632  }
1633 
1634  void LAPACK<int, std::complex<double> >::GGES(const char& JOBVL, const char& JOBVR, const char& SORT, int (*ptr2func)(std::complex<double>*, std::complex<double>*), const int& n, std::complex<double>* A, const int& lda, std::complex<double>* B, const int& ldb, int* sdim, std::complex<double>* ALPHA, std::complex<double>* BETA, std::complex<double>* VL, const int& ldvl, std::complex<double>* VR, const int& ldvr, std::complex<double>* WORK, const int& lwork, double* rwork, int* bwork, int* info ) const
1635  {
1636  ZGGES_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), CHAR_MACRO(SORT), ptr2func, &n, A, &lda, B, &ldb, sdim, ALPHA, BETA, VL, &ldvl, VR, &ldvr, WORK, &lwork, rwork, bwork, info);
1637  }
1638  void LAPACK<int, std::complex<double> >::TGSEN(const int& ijob, const int& wantq, const int& wantz, const int* SELECT, const int& n, std::complex<double>* A, const int& lda, std::complex<double>* B, const int& ldb, std::complex<double>* ALPHA, std::complex<double>* BETA, std::complex<double>* Q, const int& ldq, std::complex<double>* Z, const int& ldz, int* M, double* PL, double* PR, double* DIF, std::complex<double>* WORK, const int& lwork, int* IWORK, const int& liwork, int* info ) const
1639  {
1640  ZTGSEN_F77(&ijob, &wantq, &wantz, SELECT, &n, A, &lda, B, &ldb, ALPHA, BETA, Q, &ldq, Z, &ldz, M, PL, PR, DIF, WORK, &lwork, IWORK, &liwork, info);
1641  }
1642 
1643  void LAPACK<int, std::complex<double> >::TREVC(const char& SIDE, const char& HOWMNY, int* select, const int& n, const std::complex<double>* T, const int& ldt, std::complex<double>* VL, const int& ldvl, std::complex<double>* VR, const int& ldvr, const int& mm, int* m, std::complex<double>* WORK, double* RWORK, int* info) const
1644  {
1645  ZTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), select, &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, RWORK, info);
1646  }
1647 
1648 
1649  void LAPACK<int, std::complex<double> >::TREVC(const char& SIDE, const int& n, const std::complex<double>* T, const int& ldt, std::complex<double>* VL, const int& ldvl, std::complex<double>* VR, const int& ldvr, const int& mm, int* m, std::complex<double>* WORK, double* RWORK, int* info) const
1650  {
1651  std::vector<int> select(1);
1652  const char& whch = 'A';
1653  ZTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(whch), &select[0], &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, RWORK, info);
1654  }
1655 
1656  void LAPACK<int, std::complex<double> >::TREXC(const char& COMPQ, const int& n, std::complex<double>* T, const int& ldt, std::complex<double>* Q, const int& ldq, int* ifst, int* ilst, std::complex<double>* WORK, int* info) const
1657  {
1658  ZTREXC_F77(CHAR_MACRO(COMPQ), &n, T, &ldt, Q, &ldq, ifst, ilst, info);
1659  }
1660 
1661  void LAPACK<int, std::complex<double> >::LARTG( const std::complex<double> f, const std::complex<double> g, double* c, std::complex<double>* s, std::complex<double>* r ) const
1662  {
1663  ZLARTG_F77(&f, &g, c, s, r);
1664  }
1665 
1666 
1667  void LAPACK<int, std::complex<double> >::LARFG( const int& n, std::complex<double>* alpha, std::complex<double>* x, const int& incx, std::complex<double>* tau ) const
1668  {
1669  ZLARFG_F77(&n, alpha, x, &incx, tau);
1670  }
1671 
1672  void LAPACK<int, std::complex<double> >::GEBAL(const char& JOBZ, const int& n, std::complex<double>* A, const int& lda, int* ilo, int* ihi, double* scale, int* info) const
1673  {
1674  ZGEBAL_F77(CHAR_MACRO(JOBZ),&n, A, &lda, ilo, ihi, scale, info);
1675  }
1676 
1677 
1678  void LAPACK<int, std::complex<double> >::GEBAK(const char& JOBZ, const char& SIDE, const int& n, const int& ilo, const int& ihi, const double* scale, const int& m, std::complex<double>* V, const int& ldv, int* info) const
1679  {
1680  ZGEBAK_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(SIDE), &n, &ilo, &ihi, scale, &m, V, &ldv, info);
1681  }
1682 
1683 
1684 #ifdef HAVE_TEUCHOS_LAPACKLARND
1685  std::complex<double> LAPACK<int, std::complex<double> >::LARND( const int& idist, int* seed ) const
1686  {
1687  double _Complex z = ZLARND_F77(&idist, seed);
1688  return TEUCHOS_LAPACK_CONVERT_COMPLEX_FORTRAN_TO_CXX(double, z);
1689  }
1690 #endif
1691 
1692  void LAPACK<int, std::complex<double> >::LARNV( const int& idist, int* seed, const int& n, std::complex<double>* v ) const
1693  {
1694  ZLARNV_F77(&idist, seed, &n, v);
1695  }
1696 
1697 
1698  int LAPACK<int, std::complex<double> >::ILAENV( const int& ispec, const std::string& NAME, const std::string& OPTS, const int& N1, const int& N2, const int& N3, const int& N4 ) const
1699  {
1700  unsigned int opts_length = OPTS.length();
1701  std::string temp_NAME = "z" + NAME;
1702  unsigned int name_length = temp_NAME.length();
1703  return ilaenv_wrapper(&ispec, &temp_NAME[0], name_length, &OPTS[0], opts_length, &N1, &N2, &N3, &N4);
1704  }
1705 
1706  // END INT, COMPLEX<DOUBLE> SPECIALIZATION IMPLEMENTATION //
1707 
1708  // BEGIN INT, KOKKOS::COMPLEX<DOUBLE> SPECIALIZATION IMPLEMENTATION //
1709 
1710  void LAPACK<int, Kokkos::complex<double> >::PTTRF(const int& n, double* d, Kokkos::complex<double>* e, int* info) const
1711  {
1712  ZPTTRF_F77(&n, d, reinterpret_cast<std::complex<double>*>(e), info);
1713  }
1714 
1715 
1716  void LAPACK<int, Kokkos::complex<double> >::PTTRS(const char& UPLO, const int& n, const int& nrhs, const double* d, const Kokkos::complex<double>* e, Kokkos::complex<double>* B, const int& ldb, int* info) const
1717  {
1718  ZPTTRS_F77(CHAR_MACRO(UPLO), &n, &nrhs, d, reinterpret_cast<const std::complex<double>*>(e), reinterpret_cast<std::complex<double>*>(B), &ldb, info);
1719  }
1720 
1721 
1722  void LAPACK<int, Kokkos::complex<double> >::POTRF(const char& UPLO, const int& n, Kokkos::complex<double>* A, const int& lda, int* info) const
1723  {
1724  ZPOTRF_F77(CHAR_MACRO(UPLO), &n, reinterpret_cast<std::complex<double>*>(A), &lda, info);
1725  }
1726 
1727 
1728  void LAPACK<int, Kokkos::complex<double> >::POTRS(const char& UPLO, const int& n, const int& nrhs, const Kokkos::complex<double>* A, const int& lda, Kokkos::complex<double>* B, const int& ldb, int* info) const
1729  {
1730  ZPOTRS_F77(CHAR_MACRO(UPLO), &n, &nrhs, reinterpret_cast<const std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(B), &ldb, info);
1731  }
1732 
1733 
1734  void LAPACK<int, Kokkos::complex<double> >::POTRI(const char& UPLO, const int& n, Kokkos::complex<double>* A, const int& lda, int* info) const
1735  {
1736  ZPOTRI_F77(CHAR_MACRO(UPLO), &n, reinterpret_cast<std::complex<double>*>(A), &lda, info);
1737  }
1738 
1739 
1740  void LAPACK<int, Kokkos::complex<double> >::POCON(const char& UPLO, const int& n, const Kokkos::complex<double>* A, const int& lda, const double& anorm, double* rcond, Kokkos::complex<double>* WORK, double* RWORK, int* info) const
1741  {
1742  ZPOCON_F77(CHAR_MACRO(UPLO), &n, reinterpret_cast<const std::complex<double>*>(A), &lda, &anorm, rcond, reinterpret_cast<std::complex<double>*>(WORK), RWORK, info);
1743  }
1744 
1745 
1746  void LAPACK<int, Kokkos::complex<double> >::POSV(const char& UPLO, const int& n, const int& nrhs, Kokkos::complex<double>* A, const int& lda, Kokkos::complex<double>* B, const int& ldb, int* info) const
1747  {
1748  ZPOSV_F77(CHAR_MACRO(UPLO), &n, &nrhs, reinterpret_cast<std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(B), &ldb, info);
1749  }
1750 
1751 
1752  void LAPACK<int, Kokkos::complex<double> >::POEQU(const int& n, const Kokkos::complex<double>* A, const int& lda, double* S, double* scond, double* amax, int* info) const
1753  {
1754  ZPOEQU_F77(&n, reinterpret_cast<const std::complex<double>*>(A), &lda, S, scond, amax, info);
1755  }
1756 
1757 
1758  void LAPACK<int, Kokkos::complex<double> >::PORFS(const char& UPLO, const int& n, const int& nrhs, const Kokkos::complex<double>* A, const int& lda, const Kokkos::complex<double>* AF, const int& ldaf, const Kokkos::complex<double>* B, const int& ldb, Kokkos::complex<double>* X, const int& ldx, double* FERR, double* BERR, Kokkos::complex<double>* WORK, double* RWORK, int* info) const
1759  {
1760  ZPORFS_F77(CHAR_MACRO(UPLO), &n, &nrhs, reinterpret_cast<const std::complex<double>*>(A), &lda, reinterpret_cast<const std::complex<double>*>(AF), &ldaf, reinterpret_cast<const std::complex<double>*>(B), &ldb, reinterpret_cast<std::complex<double>*>(X), &ldx, FERR, BERR, reinterpret_cast<std::complex<double>*>(WORK), RWORK, info);
1761  }
1762 
1763  void LAPACK<int, Kokkos::complex<double> >::POSVX(const char& FACT, const char& UPLO, const int& n, const int& nrhs, Kokkos::complex<double>* A, const int& lda, Kokkos::complex<double>* AF, const int& ldaf, char* EQUED, double* S, Kokkos::complex<double>* B, const int& ldb, Kokkos::complex<double>* X, const int& ldx, double* rcond, double* FERR, double* BERR, Kokkos::complex<double>* WORK, double* RWORK, int* info) const
1764  {
1765  ZPOSVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(UPLO), &n, &nrhs, reinterpret_cast<std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(AF), &ldaf, CHARPTR_MACRO(EQUED), S, reinterpret_cast<std::complex<double>*>(B), &ldb, reinterpret_cast<std::complex<double>*>(X), &ldx, rcond, FERR, BERR, reinterpret_cast<std::complex<double>*>(WORK), RWORK, info);
1766  }
1767 
1768 
1769  void LAPACK<int,Kokkos::complex<double> >::GELS(const char& TRANS, const int& m, const int& n, const int& nrhs, Kokkos::complex<double>* A, const int& lda, Kokkos::complex<double>* B, const int& ldb, Kokkos::complex<double>* WORK, const int& lwork, int* info) const
1770  {
1771  ZGELS_F77(CHAR_MACRO(TRANS), &m, &n, &nrhs, reinterpret_cast<std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(B), &ldb, reinterpret_cast<std::complex<double>*>(WORK), &lwork, info);
1772  }
1773 
1774 
1775  void LAPACK<int, Kokkos::complex<double> >::GELSS(const int& m, const int& n, const int& nrhs, Kokkos::complex<double>* A, const int& lda, Kokkos::complex<double>* B, const int& ldb, double* S, const double& rcond, int* rank, Kokkos::complex<double>* WORK, const int& lwork, double* rwork, int* info) const
1776  {
1777  ZGELSS_F77(&m, &n, &nrhs, reinterpret_cast<std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(B), &ldb, S, &rcond, rank, reinterpret_cast<std::complex<double>*>(WORK), &lwork, rwork, info);
1778  }
1779 
1780 
1781  void LAPACK<int,Kokkos::complex<double> >::GEQRF( const int& m, const int& n, Kokkos::complex<double>* A, const int& lda, Kokkos::complex<double>* TAU, Kokkos::complex<double>* WORK, const int& lwork, int* info) const
1782  {
1783  ZGEQRF_F77(&m, &n, reinterpret_cast<std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(TAU), reinterpret_cast<std::complex<double>*>(WORK), &lwork, info);
1784  }
1785 
1786  void LAPACK<int,Kokkos::complex<double> >::GEQR2 (const int& m, const int& n, Kokkos::complex<double>* A, const int& lda, Kokkos::complex<double>* TAU, Kokkos::complex<double>* WORK, int* const info) const
1787  {
1788  ZGEQR2_F77(&m, &n, reinterpret_cast<std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(TAU), reinterpret_cast<std::complex<double>*>(WORK), info);
1789  }
1790 
1791  void LAPACK<int,Kokkos::complex<double> >::UNGQR(const int& m, const int& n, const int& k, Kokkos::complex<double>* A, const int& lda, const Kokkos::complex<double>* TAU, Kokkos::complex<double>* WORK, const int& lwork, int* info) const
1792  {
1793  ZUNGQR_F77( &m, &n, &k, reinterpret_cast<std::complex<double>*>(A), &lda, reinterpret_cast<const std::complex<double>*>(TAU), reinterpret_cast<std::complex<double>*>(WORK), &lwork, info);
1794  }
1795 
1796 
1797  void LAPACK<int,Kokkos::complex<double> >::UNMQR(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, const Kokkos::complex<double>* A, const int& lda, const Kokkos::complex<double>* TAU, Kokkos::complex<double>* C, const int& ldc, Kokkos::complex<double>* WORK, const int& lwork, int* info) const
1798  {
1799  ZUNMQR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &k, reinterpret_cast<const std::complex<double>*>(A), &lda, reinterpret_cast<const std::complex<double>*>(TAU), reinterpret_cast<std::complex<double>*>(C), &ldc, reinterpret_cast<std::complex<double>*>(WORK), &lwork, info);
1800  }
1801 
1802  void LAPACK<int,Kokkos::complex<double> >::UNM2R (const char& SIDE, const char& TRANS, const int& M, const int& N, const int& K, const Kokkos::complex<double>* A, const int& LDA, const Kokkos::complex<double>* TAU, Kokkos::complex<double>* C, const int& LDC, Kokkos::complex<double>* WORK, int* const INFO) const
1803  {
1804  ZUNM2R_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &M, &N, &K, reinterpret_cast<const std::complex<double>*>(A), &LDA, reinterpret_cast<const std::complex<double>*>(TAU), reinterpret_cast<std::complex<double>*>(C), &LDC, reinterpret_cast<std::complex<double>*>(WORK), INFO);
1805  }
1806 
1807  void LAPACK<int,Kokkos::complex<double> >::GETRF(const int& m, const int& n, Kokkos::complex<double>* A, const int& lda, int* IPIV, int* info) const
1808  {
1809  ZGETRF_F77(&m, &n, reinterpret_cast<std::complex<double>*>(A), &lda, IPIV, info);
1810  }
1811 
1812 
1813  void LAPACK<int,Kokkos::complex<double> >::GETRS(const char& TRANS, const int& n, const int& nrhs, const Kokkos::complex<double>* A, const int& lda, const int* IPIV, Kokkos::complex<double>* B, const int& ldb, int* info) const
1814  {
1815  ZGETRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, reinterpret_cast<const std::complex<double>*>(A), &lda, IPIV, reinterpret_cast<std::complex<double>*>(B), &ldb, info);
1816  }
1817 
1818 
1819  void LAPACK<int,Kokkos::complex<double> >::LASCL(const char& TYPE, const int& kl, const int& ku, const double& cfrom, const double& cto, const int& m, const int& n, Kokkos::complex<double>* A, const int& lda, int* info) const
1820  { ZLASCL_F77(CHAR_MACRO(TYPE), &kl, &ku, &cfrom, &cto, &m, &n, reinterpret_cast<std::complex<double>*>(A), &lda, info); }
1821 
1822  void LAPACK<int,Kokkos::complex<double> >::GEQP3(const int& m, const int& n, Kokkos::complex<double>* A, const int& lda, int* jpvt, Kokkos::complex<double>* TAU, Kokkos::complex<double>* WORK, const int& lwork, double* RWORK, int* info ) const
1823  {
1824  ZGEQP3_F77(&m, &n, reinterpret_cast<std::complex<double>*>(A), &lda, jpvt, reinterpret_cast<std::complex<double>*>(TAU), reinterpret_cast<std::complex<double>*>(WORK), &lwork, RWORK, info);
1825  }
1826 
1827  void LAPACK<int, Kokkos::complex<double> >::LASWP (const int& N, Kokkos::complex<double>* A, const int& LDA, const int& K1, const int& K2, const int* IPIV, const int& INCX) const
1828  {
1829  ZLASWP_F77(&N, reinterpret_cast<std::complex<double>*>(A), &LDA, &K1, &K2, IPIV, &INCX);
1830  }
1831 
1832  void LAPACK<int,Kokkos::complex<double> >::GBTRF(const int& m, const int& n, const int& kl, const int& ku, Kokkos::complex<double>* A, const int& lda, int* IPIV, int* info) const
1833  {
1834  ZGBTRF_F77(&m, &n, &kl, &ku, reinterpret_cast<std::complex<double>*>(A), &lda, IPIV, info);
1835  }
1836 
1837 
1838  void LAPACK<int,Kokkos::complex<double> >::GBTRS(const char& TRANS, const int& n, const int& kl, const int& ku, const int& nrhs, const Kokkos::complex<double>* A, const int& lda, const int* IPIV, Kokkos::complex<double>* B, const int& ldb, int* info) const
1839  {
1840  ZGBTRS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, reinterpret_cast<const std::complex<double>*>(A), &lda, IPIV, reinterpret_cast<std::complex<double>*>(B), &ldb, info);
1841  }
1842 
1843 
1844  void LAPACK<int,Kokkos::complex<double> >::GTTRF(const int& n, Kokkos::complex<double>* dl, Kokkos::complex<double>* d, Kokkos::complex<double>* du, Kokkos::complex<double>* du2, int* IPIV, int* info) const
1845  {
1846  ZGTTRF_F77(&n, reinterpret_cast<std::complex<double>*>(dl), reinterpret_cast<std::complex<double>*>(d), reinterpret_cast<std::complex<double>*>(du), reinterpret_cast<std::complex<double>*>(du2), IPIV, info);
1847  }
1848 
1849 
1850  void LAPACK<int,Kokkos::complex<double> >::GTTRS(const char& TRANS, const int& n, const int& nrhs, const Kokkos::complex<double>* dl, const Kokkos::complex<double>* d, const Kokkos::complex<double>* du, const Kokkos::complex<double>* du2, const int* IPIV, Kokkos::complex<double>* B, const int& ldb, int* info) const
1851  {
1852  ZGTTRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, reinterpret_cast<const std::complex<double>*>(dl), reinterpret_cast<const std::complex<double>*>(d), reinterpret_cast<const std::complex<double>*>(du), reinterpret_cast<const std::complex<double>*>(du2), IPIV, reinterpret_cast<std::complex<double>*>(B), &ldb, info);
1853  }
1854 
1855 
1856  void LAPACK<int,Kokkos::complex<double> >::GETRI(const int& n, Kokkos::complex<double>* A, const int& lda, const int* IPIV, Kokkos::complex<double>* WORK, const int& lwork, int* info) const
1857  {
1858  ZGETRI_F77(&n, reinterpret_cast<std::complex<double>*>(A), &lda, IPIV, reinterpret_cast<std::complex<double>*>(WORK), &lwork, info);
1859  }
1860 
1861  void LAPACK<int, Kokkos::complex<double> >::LATRS (const char& UPLO, const char& TRANS, const char& DIAG, const char& NORMIN, const int& N, const Kokkos::complex<double>* A, const int& LDA, Kokkos::complex<double>* X, double* SCALE, double* CNORM, int* INFO) const
1862  {
1863  ZLATRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), CHAR_MACRO(NORMIN), &N, reinterpret_cast<const std::complex<double>*>(A), &LDA, reinterpret_cast<std::complex<double>*>(X), SCALE, CNORM, INFO);
1864  }
1865 
1866  void LAPACK<int,Kokkos::complex<double> >::GECON(const char& NORM, const int& n, const Kokkos::complex<double>* A, const int& lda, const double& anorm, double* rcond, Kokkos::complex<double>* WORK, double* RWORK, int* info) const
1867  {
1868  ZGECON_F77(CHAR_MACRO(NORM), &n, reinterpret_cast<const std::complex<double>*>(A), &lda, &anorm, rcond, reinterpret_cast<std::complex<double>*>(WORK), RWORK, info);
1869  }
1870 
1871 
1872  void LAPACK<int,Kokkos::complex<double> >::GBCON(const char& NORM, const int& n, const int& kl, const int& ku, const Kokkos::complex<double>* A, const int& lda, const int* IPIV, const double& anorm, double* rcond, Kokkos::complex<double>* WORK, double* RWORK, int* info) const
1873  {
1874  ZGBCON_F77(CHAR_MACRO(NORM), &n, &kl, &ku, reinterpret_cast<const std::complex<double>*>(A), &lda, IPIV, &anorm, rcond, reinterpret_cast<std::complex<double>*>(WORK), RWORK, info);
1875  }
1876 
1877 
1878  double LAPACK<int,Kokkos::complex<double> >::LANGB(const char& NORM, const int& n, const int& kl, const int& ku, const Kokkos::complex<double>* A, const int& lda, double* WORK) const
1879  {
1880  return( ZLANGB_F77(CHAR_MACRO(NORM), &n, &kl, &ku, reinterpret_cast<const std::complex<double>*>(A), &lda, WORK) );
1881  }
1882 
1883 
1884  void LAPACK<int,Kokkos::complex<double> >::GESV(const int& n, const int& nrhs, Kokkos::complex<double>* A, const int& lda, int* IPIV, Kokkos::complex<double>* B, const int& ldb, int* info) const
1885  {
1886  ZGESV_F77(&n, &nrhs, reinterpret_cast<std::complex<double>*>(A), &lda, IPIV, reinterpret_cast<std::complex<double>*>(B), &ldb, info);
1887  }
1888 
1889 
1890  void LAPACK<int,Kokkos::complex<double> >::GEEQU(const int& m, const int& n, const Kokkos::complex<double>* A, const int& lda, double* R, double* C, double* rowcond, double* colcond, double* amax, int* info) const
1891  {
1892  ZGEEQU_F77(&m, &n, reinterpret_cast<const std::complex<double>*>(A), &lda, R, C, rowcond, colcond, amax, info);
1893  }
1894 
1895 
1896  void LAPACK<int,Kokkos::complex<double> >::GERFS(const char& TRANS, const int& n, const int& nrhs, const Kokkos::complex<double>* A, const int& lda, const Kokkos::complex<double>* AF, const int& ldaf, const int* IPIV, const Kokkos::complex<double>* B, const int& ldb, Kokkos::complex<double>* X, const int& ldx, double* FERR, double* BERR, Kokkos::complex<double>* WORK, double* RWORK, int* info) const
1897  {
1898  ZGERFS_F77(CHAR_MACRO(TRANS), &n, &nrhs, reinterpret_cast<const std::complex<double>*>(A), &lda, reinterpret_cast<const std::complex<double>*>(AF), &ldaf, IPIV, reinterpret_cast<const std::complex<double>*>(B), &ldb, reinterpret_cast<std::complex<double>*>(X), &ldx, FERR, BERR, reinterpret_cast<std::complex<double>*>(WORK), RWORK, info);
1899  }
1900 
1901 
1902  void LAPACK<int,Kokkos::complex<double> >::GBEQU(const int& m, const int& n, const int& kl, const int& ku, const Kokkos::complex<double>* A, const int& lda, double* R, double* C, double* rowcond, double* colcond, double* amax, int* info) const
1903  {
1904  ZGBEQU_F77(&m, &n, &kl, &ku, reinterpret_cast<const std::complex<double>*>(A), &lda, R, C, rowcond, colcond, amax, info);
1905  }
1906 
1907 
1908  void LAPACK<int,Kokkos::complex<double> >::GBRFS(const char& TRANS, const int& n, const int& kl, const int& ku, const int& nrhs, const Kokkos::complex<double>* A, const int& lda, const Kokkos::complex<double>* AF, const int& ldaf, const int* IPIV, const Kokkos::complex<double>* B, const int& ldb, Kokkos::complex<double>* X, const int& ldx, double* FERR, double* BERR, Kokkos::complex<double>* WORK, double* RWORK, int* info) const
1909  {
1910  ZGBRFS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, reinterpret_cast<const std::complex<double>*>(A), &lda, reinterpret_cast<const std::complex<double>*>(AF), &ldaf, IPIV, reinterpret_cast<const std::complex<double>*>(B), &ldb, reinterpret_cast<std::complex<double>*>(X), &ldx, FERR, BERR, reinterpret_cast<std::complex<double>*>(WORK), RWORK, info);
1911  }
1912 
1913  void LAPACK<int,Kokkos::complex<double> >::GESVX(const char& FACT, const char& TRANS, const int& n, const int& nrhs, Kokkos::complex<double>* A, const int& lda, Kokkos::complex<double>* AF, const int& ldaf, int* IPIV, char* EQUED, double* R, double* C, Kokkos::complex<double>* B, const int& ldb, Kokkos::complex<double>* X, const int& ldx, double* rcond, double* FERR, double* BERR, Kokkos::complex<double>* WORK, double* RWORK, int* info) const
1914  {
1915  ZGESVX_F77(CHAR_MACRO(FACT), CHAR_MACRO(TRANS), &n, &nrhs, reinterpret_cast<std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(AF), &ldaf, IPIV, CHARPTR_MACRO(EQUED), R, C, reinterpret_cast<std::complex<double>*>(B), &ldb, reinterpret_cast<std::complex<double>*>(X), &ldx, rcond, FERR, BERR, reinterpret_cast<std::complex<double>*>(WORK), RWORK, info);
1916  }
1917 
1918 
1919  void LAPACK<int,Kokkos::complex<double> >::GEHRD(const int& n, const int& ilo, const int& ihi, Kokkos::complex<double>* A, const int& lda, Kokkos::complex<double>* TAU, Kokkos::complex<double>* WORK, const int& lwork, int* info) const
1920  {
1921  ZGEHRD_F77(&n, &ilo, &ihi, reinterpret_cast<std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(TAU), reinterpret_cast<std::complex<double>*>(WORK), &lwork, info);
1922  }
1923 
1924 
1925  void LAPACK<int,Kokkos::complex<double> >::TRTRS(const char& UPLO, const char& TRANS, const char& DIAG, const int& n, const int& nrhs, const Kokkos::complex<double>* A, const int& lda, Kokkos::complex<double>* B, const int& ldb, int* info) const
1926  {
1927  ZTRTRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), &n, &nrhs, reinterpret_cast<const std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(B), &ldb, info);
1928  }
1929 
1930 
1931  void LAPACK<int,Kokkos::complex<double> >::TRTRI(const char& UPLO, const char& DIAG, const int& n, Kokkos::complex<double>* A, const int& lda, int* info) const
1932  {
1933  ZTRTRI_F77(CHAR_MACRO(UPLO), CHAR_MACRO(DIAG), &n, reinterpret_cast<std::complex<double>*>(A), &lda, info);
1934  }
1935 
1936 
1937  void LAPACK<int,Kokkos::complex<double> >::STEQR(const char& COMPZ, const int& n, double* D, double* E, Kokkos::complex<double>* Z, const int& ldz, double* WORK, int* info) const
1938  {
1939  ZSTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, reinterpret_cast<std::complex<double>*>(Z), &ldz, WORK, info);
1940  }
1941 
1942 
1943  void LAPACK<int,Kokkos::complex<double> >::PTEQR(const char& COMPZ, const int& n, double* D, double* E, Kokkos::complex<double>* Z, const int& ldz, double* WORK, int* info) const
1944  {
1945  ZPTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, reinterpret_cast<std::complex<double>*>(Z), &ldz, WORK, info);
1946  }
1947 
1948 
1949  void LAPACK<int,Kokkos::complex<double> >::HEEV(const char& JOBZ, const char& UPLO, const int& n, Kokkos::complex<double> * A, const int& lda, double* W, Kokkos::complex<double> * WORK, const int& lwork, double* RWORK, int* info) const
1950  {
1951  ZHEEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, reinterpret_cast<std::complex<double>*>(A), &lda, W, reinterpret_cast<std::complex<double>*>(WORK), &lwork, RWORK, info);
1952  }
1953 
1954 
1955  void LAPACK<int,Kokkos::complex<double> >::HEGV(const int& itype, const char& JOBZ, const char& UPLO, const int& n, Kokkos::complex<double> * A, const int& lda, Kokkos::complex<double> * B, const int& ldb, double* W, Kokkos::complex<double> * WORK, const int& lwork, double* RWORK, int* info) const
1956  {
1957  ZHEGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, reinterpret_cast<std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(B), &ldb, W, reinterpret_cast<std::complex<double>*>(WORK), &lwork, RWORK, info);
1958  }
1959 
1960 
1961  void LAPACK<int, Kokkos::complex<double> >::HSEQR(const char& JOB, const char& COMPZ, const int& n, const int& ilo, const int& ihi, Kokkos::complex<double>* H, const int& ldh, Kokkos::complex<double>* W, Kokkos::complex<double>* Z, const int& ldz, Kokkos::complex<double>* WORK, const int& lwork, int* info) const
1962  {
1963  ZHSEQR_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPZ), &n, &ilo, &ihi, reinterpret_cast<std::complex<double>*>(H), &ldh, reinterpret_cast<std::complex<double>*>(W), reinterpret_cast<std::complex<double>*>(Z), &ldz, reinterpret_cast<std::complex<double>*>(WORK), &lwork, info);
1964  }
1965 
1966 
1967  void LAPACK<int, Kokkos::complex<double> >::GEES(const char& JOBVS, const char& SORT, int (*ptr2func)(std::complex<double>*), const int& n, Kokkos::complex<double>* A, const int& lda, int* sdim, Kokkos::complex<double>* W, Kokkos::complex<double>* VS, const int& ldvs, Kokkos::complex<double>* WORK, const int& lwork, double* RWORK, int* BWORK, int* info) const
1968  {
1969  ZGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(SORT), ptr2func, &n, reinterpret_cast<std::complex<double>*>(A), &lda, sdim, reinterpret_cast<std::complex<double>*>(W), reinterpret_cast<std::complex<double>*>(VS), &ldvs, reinterpret_cast<std::complex<double>*>(WORK), &lwork, RWORK, BWORK, info);
1970  }
1971 
1972 
1973  void LAPACK<int, Kokkos::complex<double> >::GEES(const char& JOBVS, const int& n, Kokkos::complex<double>* A, const int& lda, int* sdim, double* WR, double* WI, Kokkos::complex<double>* VS, const int& ldvs, Kokkos::complex<double>* WORK, const int& lwork, double* RWORK, int* BWORK, int* info) const
1974  {
1975  int (*nullfptr)(std::complex<double>*) = NULL;
1976  std::vector< std::complex<double> > W(n);
1977  const char sort = 'N';
1978  ZGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(sort), nullfptr, &n, reinterpret_cast<std::complex<double>*>(A), &lda, sdim, &W[0], reinterpret_cast<std::complex<double>*>(VS), &ldvs, reinterpret_cast<std::complex<double>*>(WORK), &lwork, RWORK, BWORK, info);
1979  for (int i=0; i<n; i++) {
1980  WR[i] = W[i].real();
1981  WI[i] = W[i].imag();
1982  }
1983  }
1984 
1985 
1986  void LAPACK<int, Kokkos::complex<double> >::GEEV(const char& JOBVL, const char& JOBVR, const int& n, Kokkos::complex<double>* A, const int& lda, Kokkos::complex<double>* W, Kokkos::complex<double>* VL, const int& ldvl, Kokkos::complex<double>* VR, const int& ldvr, Kokkos::complex<double>* WORK, const int& lwork, double* RWORK, int* info) const
1987  {
1988  ZGEEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, reinterpret_cast<std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(W), reinterpret_cast<std::complex<double>*>(VL), &ldvl, reinterpret_cast<std::complex<double>*>(VR), &ldvr, reinterpret_cast<std::complex<double>*>(WORK), &lwork, RWORK, info);
1989  }
1990 
1991 
1992  void LAPACK<int, Kokkos::complex<double> >::GEEV(const char& JOBVL, const char& JOBVR, const int& n, Kokkos::complex<double>* A, const int& lda, double* WR, double* WI, Kokkos::complex<double>* VL, const int& ldvl, Kokkos::complex<double>* VR, const int& ldvr, Kokkos::complex<double>* WORK, const int& lwork, double* RWORK, int* info) const
1993  {
1994  std::vector<Kokkos::complex<double> > w (n);
1995  Kokkos::complex<double>* w_rawPtr = (n == 0) ? NULL : &w[0];
1996  GEEV (JOBVL, JOBVR, n, A, lda, w_rawPtr, VL, ldvl, VR, ldvr, WORK, lwork, RWORK, info);
1997  if (*info == 0) {
1998  // The eigenvalues are only valid on output if INFO is zero.
1999  // Otherwise, we shouldn't even write to WR or WI.
2000  for (int k = 0; k < n; ++k) {
2001  WR[k] = w[k].real ();
2002  WI[k] = w[k].imag ();
2003  }
2004  }
2005  }
2006 
2007 
2008  void LAPACK<int, Kokkos::complex<double> >::GESVD(const char& JOBU, const char& JOBVT, const int& m, const int& n, Kokkos::complex<double> * A, const int& lda, double* S, Kokkos::complex<double> * U, const int& ldu, Kokkos::complex<double> * V, const int& ldv, Kokkos::complex<double> * WORK, const int& lwork, double* RWORK, int* info) const {
2009  ZGESVD_F77(CHAR_MACRO(JOBU), CHAR_MACRO(JOBVT), &m, &n, reinterpret_cast<std::complex<double>*>(A), &lda, S, reinterpret_cast<std::complex<double>*>(U), &ldu, reinterpret_cast<std::complex<double>*>(V), &ldv, reinterpret_cast<std::complex<double>*>(WORK), &lwork, RWORK, info);
2010  }
2011 
2012  void LAPACK<int, Kokkos::complex<double> >::GEEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, Kokkos::complex<double>* A, const int& lda, Kokkos::complex<double>* W, Kokkos::complex<double>* VL, const int& ldvl, Kokkos::complex<double>* VR, const int& ldvr, int* ilo, int* ihi, double* SCALE, double* abnrm, double* RCONDE, double* RCONDV, Kokkos::complex<double>* WORK, const int& lwork, double* RWORK, int* info) const
2013  {
2014  ZGEEVX_F77(CHAR_MACRO(BALANC), CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), CHAR_MACRO(SENSE), &n, reinterpret_cast<std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(W), reinterpret_cast<std::complex<double>*>(VL), &ldvl, reinterpret_cast<std::complex<double>*>(VR), &ldvr, ilo, ihi, SCALE, abnrm, RCONDE, RCONDV, reinterpret_cast<std::complex<double>*>(WORK), &lwork, RWORK, info);
2015  }
2016 
2017  void LAPACK<int, Kokkos::complex<double> >::GGEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, Kokkos::complex<double>* A, const int& lda, Kokkos::complex<double>* B, const int& ldb, Kokkos::complex<double>* ALPHA, Kokkos::complex<double>* BETA, Kokkos::complex<double>* VL, const int& ldvl, Kokkos::complex<double>* VR, const int& ldvr, int* ilo, int* ihi, double* lscale, double* rscale, double* abnrm, double* bbnrm, double* RCONDE, double* RCONDV, Kokkos::complex<double>* WORK, const int& lwork, double* RWORK, int* IWORK, int* BWORK, int* info) const
2018  {
2019  ZGGEVX_F77(CHAR_MACRO(BALANC), CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), CHAR_MACRO(SENSE), &n, reinterpret_cast<std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(B), &ldb, reinterpret_cast<std::complex<double>*>(ALPHA), reinterpret_cast<std::complex<double>*>(BETA), reinterpret_cast<std::complex<double>*>(VL), &ldvl, reinterpret_cast<std::complex<double>*>(VR), &ldvr, ilo, ihi, lscale, rscale, abnrm, bbnrm, RCONDE, RCONDV, reinterpret_cast<std::complex<double>*>(WORK), &lwork, RWORK, IWORK, BWORK, info);
2020  }
2021 
2022  void LAPACK<int, Kokkos::complex<double> >::GGEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, Kokkos::complex<double>* A, const int& lda, Kokkos::complex<double>* B, const int& ldb, double* ALPHAR, double* ALPHAI, Kokkos::complex<double>* BETA, Kokkos::complex<double>* VL, const int& ldvl, Kokkos::complex<double>* VR, const int& ldvr, int* ilo, int* ihi, double* lscale, double* rscale, double* abnrm, double* bbnrm, double* RCONDE, double* RCONDV, Kokkos::complex<double>* WORK, const int& lwork, double* RWORK, int* IWORK, int* BWORK, int* info) const
2023  {
2024  std::vector<Kokkos::complex<double> > w (n);
2025  Kokkos::complex<double>* w_rawPtr = (n == 0) ? NULL : &w[0];
2026  GGEVX(BALANC, JOBVL, JOBVR, SENSE, n, A, lda, B, ldb, w_rawPtr, BETA, VL, ldvl, VR, ldvr, ilo, ihi, lscale, rscale, abnrm, bbnrm, RCONDE, RCONDV, WORK, lwork, RWORK, IWORK, BWORK, info);
2027  if (*info == 0) {
2028  // The eigenvalues are only valid on output if INFO is zero.
2029  // Otherwise, we shouldn't even write to WR or WI.
2030  for (int k = 0; k < n; ++k) {
2031  ALPHAR[k] = w[k].real ();
2032  ALPHAI[k] = w[k].imag ();
2033  }
2034  }
2035  }
2036 
2037  void LAPACK<int, Kokkos::complex<double> >::GGEV(const char& JOBVL, const char& JOBVR, const int& n, Kokkos::complex<double> *A, const int& lda, Kokkos::complex<double> *B, const int& ldb, Kokkos::complex<double>* ALPHA, Kokkos::complex<double>* BETA, Kokkos::complex<double>* VL, const int& ldvl, Kokkos::complex<double>* VR, const int& ldvr, Kokkos::complex<double> *WORK, const int& lwork, double* RWORK, int* info) const
2038  {
2039  ZGGEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, reinterpret_cast<std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(B), &ldb, reinterpret_cast<std::complex<double>*>(ALPHA), reinterpret_cast<std::complex<double>*>(BETA), reinterpret_cast<std::complex<double>*>(VL), &ldvl, reinterpret_cast<std::complex<double>*>(VR), &ldvr, reinterpret_cast<std::complex<double>*>(WORK), &lwork, RWORK, info);
2040  }
2041 
2042  void LAPACK<int, Kokkos::complex<double> >::GGES(const char& JOBVL, const char& JOBVR, const char& SORT, int (*ptr2func)(std::complex<double>*, std::complex<double>*), const int& n, Kokkos::complex<double>* A, const int& lda, Kokkos::complex<double>* B, const int& ldb, int* sdim, Kokkos::complex<double>* ALPHA, Kokkos::complex<double>* BETA, Kokkos::complex<double>* VL, const int& ldvl, Kokkos::complex<double>* VR, const int& ldvr, Kokkos::complex<double>* WORK, const int& lwork, double* rwork, int* bwork, int* info ) const
2043  {
2044  ZGGES_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), CHAR_MACRO(SORT), ptr2func, &n, reinterpret_cast<std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(B), &ldb, sdim, reinterpret_cast<std::complex<double>*>(ALPHA), reinterpret_cast<std::complex<double>*>(BETA), reinterpret_cast<std::complex<double>*>(VL), &ldvl, reinterpret_cast<std::complex<double>*>(VR), &ldvr, reinterpret_cast<std::complex<double>*>(WORK), &lwork, rwork, bwork, info);
2045  }
2046  void LAPACK<int, Kokkos::complex<double> >::TGSEN(const int& ijob, const int& wantq, const int& wantz, const int* SELECT, const int& n, Kokkos::complex<double>* A, const int& lda, Kokkos::complex<double>* B, const int& ldb, Kokkos::complex<double>* ALPHA, Kokkos::complex<double>* BETA, Kokkos::complex<double>* Q, const int& ldq, Kokkos::complex<double>* Z, const int& ldz, int* M, double* PL, double* PR, double* DIF, Kokkos::complex<double>* WORK, const int& lwork, int* IWORK, const int& liwork, int* info ) const
2047  {
2048  ZTGSEN_F77(&ijob, &wantq, &wantz, SELECT, &n, reinterpret_cast<std::complex<double>*>(A), &lda, reinterpret_cast<std::complex<double>*>(B), &ldb, reinterpret_cast<std::complex<double>*>(ALPHA), reinterpret_cast<std::complex<double>*>(BETA), reinterpret_cast<std::complex<double>*>(Q), &ldq, reinterpret_cast<std::complex<double>*>(Z), &ldz, M, PL, PR, DIF, reinterpret_cast<std::complex<double>*>(WORK), &lwork, IWORK, &liwork, info);
2049  }
2050 
2051  void LAPACK<int, Kokkos::complex<double> >::TREVC(const char& SIDE, const char& HOWMNY, int* select, const int& n, const Kokkos::complex<double>* T, const int& ldt, Kokkos::complex<double>* VL, const int& ldvl, Kokkos::complex<double>* VR, const int& ldvr, const int& mm, int* m, Kokkos::complex<double>* WORK, double* RWORK, int* info) const
2052  {
2053  ZTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), select, &n, reinterpret_cast<const std::complex<double>*>(T), &ldt, reinterpret_cast<std::complex<double>*>(VL), &ldvl, reinterpret_cast<std::complex<double>*>(VR), &ldvr, &mm, m, reinterpret_cast<std::complex<double>*>(WORK), RWORK, info);
2054  }
2055 
2056 
2057  void LAPACK<int, Kokkos::complex<double> >::TREVC(const char& SIDE, const int& n, const Kokkos::complex<double>* T, const int& ldt, Kokkos::complex<double>* VL, const int& ldvl, Kokkos::complex<double>* VR, const int& ldvr, const int& mm, int* m, Kokkos::complex<double>* WORK, double* RWORK, int* info) const
2058  {
2059  std::vector<int> select(1);
2060  const char& whch = 'A';
2061  ZTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(whch), &select[0], &n, reinterpret_cast<const std::complex<double>*>(T), &ldt, reinterpret_cast<std::complex<double>*>(VL), &ldvl, reinterpret_cast<std::complex<double>*>(VR), &ldvr, &mm, m, reinterpret_cast<std::complex<double>*>(WORK), RWORK, info);
2062  }
2063 
2064  void LAPACK<int, Kokkos::complex<double> >::TREXC(const char& COMPQ, const int& n, Kokkos::complex<double>* T, const int& ldt, Kokkos::complex<double>* Q, const int& ldq, int* ifst, int* ilst, Kokkos::complex<double>* WORK, int* info) const
2065  {
2066  ZTREXC_F77(CHAR_MACRO(COMPQ), &n, reinterpret_cast<std::complex<double>*>(T), &ldt, reinterpret_cast<std::complex<double>*>(Q), &ldq, ifst, ilst, info);
2067  }
2068 
2069  void LAPACK<int, Kokkos::complex<double> >::LARTG( const Kokkos::complex<double> f, const Kokkos::complex<double> g, double* c, Kokkos::complex<double>* s, Kokkos::complex<double>* r ) const
2070  {
2071  ZLARTG_F77(reinterpret_cast<const std::complex<double>*>(&f), reinterpret_cast<const std::complex<double>*>(&g), c, reinterpret_cast<std::complex<double>*>(s), reinterpret_cast<std::complex<double>*>(r));
2072  }
2073 
2074 
2075  void LAPACK<int, Kokkos::complex<double> >::LARFG( const int& n, Kokkos::complex<double>* alpha, Kokkos::complex<double>* x, const int& incx, Kokkos::complex<double>* tau ) const
2076  {
2077  ZLARFG_F77(&n, reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(x), &incx, reinterpret_cast<std::complex<double>*>(tau));
2078  }
2079 
2080  void LAPACK<int, Kokkos::complex<double> >::GEBAL(const char& JOBZ, const int& n, Kokkos::complex<double>* A, const int& lda, int* ilo, int* ihi, double* scale, int* info) const
2081  {
2082  ZGEBAL_F77(CHAR_MACRO(JOBZ),&n, reinterpret_cast<std::complex<double>*>(A), &lda, ilo, ihi, scale, info);
2083  }
2084 
2085 
2086  void LAPACK<int, Kokkos::complex<double> >::GEBAK(const char& JOBZ, const char& SIDE, const int& n, const int& ilo, const int& ihi, const double* scale, const int& m, Kokkos::complex<double>* V, const int& ldv, int* info) const
2087  {
2088  ZGEBAK_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(SIDE), &n, &ilo, &ihi, scale, &m, reinterpret_cast<std::complex<double>*>(V), &ldv, info);
2089  }
2090 
2091 
2092 #ifdef HAVE_TEUCHOS_LAPACKLARND
2093  Kokkos::complex<double> LAPACK<int, Kokkos::complex<double> >::LARND( const int& idist, int* seed ) const
2094  {
2095  double _Complex z = ZLARND_F77(&idist, seed);
2096  return reinterpret_cast<Kokkos::complex<double>&>(z);
2097  }
2098 #endif
2099 
2100  void LAPACK<int, Kokkos::complex<double> >::LARNV( const int& idist, int* seed, const int& n, Kokkos::complex<double>* v ) const
2101  {
2102  ZLARNV_F77(&idist, seed, &n, reinterpret_cast<std::complex<double>*>(v));
2103  }
2104 
2105 
2106  int LAPACK<int, Kokkos::complex<double> >::ILAENV( const int& ispec, const std::string& NAME, const std::string& OPTS, const int& N1, const int& N2, const int& N3, const int& N4 ) const
2107  {
2108  unsigned int opts_length = OPTS.length();
2109  std::string temp_NAME = "z" + NAME;
2110  unsigned int name_length = temp_NAME.length();
2111  return ilaenv_wrapper(&ispec, &temp_NAME[0], name_length, &OPTS[0], opts_length, &N1, &N2, &N3, &N4);
2112  }
2113 
2114  // END INT, KOKKOS::COMPLEX<DOUBLE> SPECIALIZATION IMPLEMENTATION //
2115 
2116 #endif // HAVE_TEUCHOS_COMPLEX
2117 
2118 
2119 #ifdef HAVE_TEUCHOSCORE_QUADMATH
2120 
2121  // BEGIN int, __float128 SPECIALIZATION IMPLEMENTATION //
2122 
2124  GEQRF(const int& m, const int& n, __float128* A, const int& lda, __float128* TAU, __float128* WORK, const int& lwork, int* info) const
2125  {
2126  Teuchos::Details::Lapack128 lapack;
2127  lapack.GEQRF (m, n, A, lda, TAU, WORK, lwork, info);
2128  }
2129 
2131  GEQR2(const int& m, const int& n, __float128* A, const int& lda, __float128* TAU, __float128* WORK, int* const info) const
2132  {
2133  Teuchos::Details::Lapack128 lapack;
2134  lapack.GEQR2 (m, n, A, lda, TAU, WORK, info);
2135  }
2136 
2138  GETRF(const int& m, const int& n, __float128* A, const int& lda, int* IPIV, int* info) const
2139  {
2140  Teuchos::Details::Lapack128 lapack;
2141  lapack.GETRF (m, n, A, lda, IPIV, info);
2142  }
2143 
2145  GETRS(const char& TRANS, const int& n, const int& nrhs, const __float128* A, const int& lda, const int* IPIV, __float128* B, const int& ldb, int* info) const
2146  {
2147  Teuchos::Details::Lapack128 lapack;
2148  lapack.GETRS (TRANS, n, nrhs, A, lda, IPIV, B, ldb, info);
2149  }
2150 
2152  GETRI (const int& n, __float128* A, const int& lda, const int* IPIV, __float128* WORK, const int& lwork, int* info) const
2153  {
2154  Teuchos::Details::Lapack128 lapack;
2155  lapack.GETRI (n, A, lda, const_cast<int*> (IPIV), WORK, lwork, info);
2156  }
2157 
2159  LASWP (const int& N, __float128* A, const int& LDA, const int& K1, const int& K2, const int* IPIV, const int& INCX) const
2160  {
2161  Teuchos::Details::Lapack128 lapack;
2162  lapack.LASWP (N, A, LDA, K1, K2, IPIV, INCX);
2163  }
2164 
2166  ORM2R(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, const __float128* A, const int& lda, const __float128* TAU, __float128* C, const int& ldc, __float128* WORK, int* const info) const
2167  {
2168  Teuchos::Details::Lapack128 lapack;
2169  lapack.ORM2R (SIDE, TRANS, m, n, k, A, lda, TAU, C, ldc, WORK, info);
2170  }
2171 
2173  ORGQR(const int& m, const int& n, const int& k, __float128* A, const int& lda, const __float128* TAU, __float128* WORK, const int& lwork, int* info) const
2174  {
2175  Teuchos::Details::Lapack128 lapack;
2176  lapack.ORGQR (m, n, k, A, lda, TAU, WORK, lwork, info);
2177  }
2178 
2180  UNGQR(const int& m, const int& n, const int& k, __float128* A, const int& lda, const __float128* TAU, __float128* WORK, const int& lwork, int* info) const
2181  {
2182  Teuchos::Details::Lapack128 lapack;
2183  lapack.UNGQR (m, n, k, A, lda, TAU, WORK, lwork, info);
2184  }
2185 
2187  LARFG( const int& n, __float128* alpha, __float128* x, const int& incx, __float128* tau ) const
2188  {
2189  Teuchos::Details::Lapack128 lapack;
2190  lapack.LARFG (n, alpha, x, incx, tau);
2191  }
2192 
2193  __float128 LAPACK<int, __float128>::
2194  LAPY2 (const __float128 x, const __float128 y) const
2195  {
2196  Teuchos::Details::Lapack128 lapack;
2197  return lapack.LAPY2 (x, y);
2198  }
2199 
2201  GBTRF (const int& m, const int& n, const int& kl, const int& ku,
2202  __float128* A, const int& lda, int* IPIV, int* info) const
2203  {
2204  Teuchos::Details::Lapack128 lapack;
2205  return lapack.GBTRF (m, n, kl, ku, A, lda, IPIV, info);
2206  }
2207 
2209  GBTRS (const char& TRANS, const int& n, const int& kl, const int& ku,
2210  const int& nrhs, const __float128* A, const int& lda, const int* IPIV,
2211  __float128* B, const int& ldb, int* info) const
2212  {
2213  Teuchos::Details::Lapack128 lapack;
2214  return lapack.GBTRS (TRANS, n, kl, ku, nrhs, A, lda, IPIV, B, ldb, info);
2215  }
2216 
2218  LASCL (const char& TYPE, const int& kl, const int& ku, const __float128 cfrom,
2219  const __float128 cto, const int& m, const int& n, __float128* A,
2220  const int& lda, int* info) const
2221  {
2222  Teuchos::Details::Lapack128 lapack;
2223  return lapack.LASCL (TYPE, kl, ku, cfrom, cto, m, n, A, lda, info);
2224  }
2225 
2226  // END int, __float128 SPECIALIZATION IMPLEMENTATION //
2227 
2228 #endif // HAVE_TEUCHOSCORE_QUADMATH
2229 
2230 #ifdef HAVE_TEUCHOS_LONG_DOUBLE
2231 
2232  // BEGIN int, long double SPECIALIZATION IMPLEMENTATION //
2233 
2235  GESV(const int& n, const int& nrhs, long double* A, const int& lda, int* IPIV, long double* B, const int& ldb, int* info) const
2236  {
2237  TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "ERROR in Teuchos::LAPACK: GESV not implemented for long double scalar type!");
2238  }
2240  GTTRS(const char& TRANS, const int& n, const int& nrhs, const long double* dl, const long double* d, const long double* du, const long double* du2, const int* IPIV, long double* B, const int& ldb, int* info) const
2241  {
2242  TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "ERROR in Teuchos::LAPACK: GTTRS not implemented for long double scalar type!");
2243  }
2245  GTTRF(const int& n, long double* dl, long double* d, long double* du, long double* du2, int* IPIV, int* info) const
2246  {
2247  TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "ERROR in Teuchos::LAPACK: GTTRF not implemented for long double scalar type!");
2248  }
2250  SYGV(const int& itype, const char& JOBZ, const char& UPLO, const int& n, long double* A, const int& lda, long double* B, const int& ldb, long double* W, long double* WORK, const int& lwork, int* info) const
2251  {
2252  TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "ERROR in Teuchos::LAPACK: GESV not implemented for long double scalar type!");
2253  }
2255  GEEV(const char& JOBVL, const char& JOBVR, const int& n, long double* A, const int& lda, long double* WR, long double* WI, long double* VL, const int& ldvl, long double* VR, const int& ldvr, long double* WORK, const int& lwork, int* info) const
2256  {
2257  TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "ERROR in Teuchos::LAPACK: GEEV not implemented for long double scalar type!");
2258  }
2260  GEEV(const char& JOBVL, const char& JOBVR, const int& n, long double* A, const int& lda, long double* WR, long double* WI, long double* VL, const int& ldvl, long double* VR, const int& ldvr, long double* WORK, const int& lwork, long double* /* RWORK */, int* info) const
2261  {
2262  TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "ERROR in Teuchos::LAPACK: GEEV not implemented for long double scalar type!");
2263  }
2265  GGEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, long double* A, const int& lda, long double* B, const int& ldb, long double* ALPHAR, long double* ALPHAI, long double* BETA, long double* VL, const int& ldvl, long double* VR, const int& ldvr, int* ilo, int* ihi, long double* lscale, long double* rscale, long double* abnrm, long double* bbnrm, long double* RCONDE, long double* RCONDV, long double* WORK, const int& lwork, int* IWORK, int* BWORK, int* info) const
2266  {
2267  TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "ERROR in Teuchos::LAPACK: GGEVX not implemented for long double scalar type!");
2268  }
2270  GGEVX(const char& BALANC, const char& JOBVL, const char& JOBVR, const char& SENSE, const int& n, long double* A, const int& lda, long double* B, const int& ldb, long double* ALPHAR, long double* ALPHAI, long double* BETA, long double* VL, const int& ldvl, long double* VR, const int& ldvr, int* ilo, int* ihi, long double* lscale, long double* rscale, long double* abnrm, long double* bbnrm, long double* RCONDE, long double* RCONDV, long double* WORK, const int& lwork, long double* /* RWORK */, int* IWORK, int* BWORK, int* info) const
2271  {
2272  TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "ERROR in Teuchos::LAPACK: GGEVX not implemented for long double scalar type!");
2273  }
2275  PORFS(const char& UPLO, const int& n, const int& nrhs, const long double* A, const int& lda, const long double* AF, const int& ldaf, const long double* B, const int& ldb, long double* X, const int& ldx, long double* FERR, long double* BERR, long double* WORK, int* IWORK, int* info) const
2276  {
2277  TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "ERROR in Teuchos::LAPACK: PORFS not implemented for long double scalar type!");
2278  }
2280  PTEQR(const char& COMPZ, const int& n, long double* D, long double* E, long double* Z, const int& ldz, long double* WORK, int* info) const
2281  {
2282  TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "ERROR in Teuchos::LAPACK: PTEQR not implemented for long double scalar type!");
2283  }
2285  POTRF(const char& UPLO, const int& n, long double* A, const int& lda, int* info) const
2286  {
2287  TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "ERROR in Teuchos::LAPACK: POTRF not implemented for long double scalar type!");
2288  }
2290  POTRS(const char& UPLO, const int& n, const int& nrhs, const long double* A, const int& lda, long double* B, const int& ldb, int* info) const
2291  {
2292  TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "ERROR in Teuchos::LAPACK: POTRS not implemented for long double scalar type!");
2293  }
2295  POEQU(const int& n, const long double* A, const int& lda, long double* S, long double* scond, long double* amax, int* info) const
2296  {
2297  TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "ERROR in Teuchos::LAPACK: POEQU not implemented for long double scalar type!");
2298  }
2300  GEQRF(const int& m, const int& n, long double* A, const int& lda, long double* TAU, long double* WORK, const int& lwork, int* info) const
2301  {
2302  Teuchos::Details::LapackLongDouble lapack;
2303  lapack.GEQRF (m, n, A, lda, TAU, WORK, lwork, info);
2304  }
2305 
2307  GEQR2(const int& m, const int& n, long double* A, const int& lda, long double* TAU, long double* WORK, int* const info) const
2308  {
2309  Teuchos::Details::LapackLongDouble lapack;
2310  lapack.GEQR2 (m, n, A, lda, TAU, WORK, info);
2311  }
2312 
2314  GETRF(const int& m, const int& n, long double* A, const int& lda, int* IPIV, int* info) const
2315  {
2316  Teuchos::Details::LapackLongDouble lapack;
2317  lapack.GETRF (m, n, A, lda, IPIV, info);
2318  }
2319 
2321  GETRS(const char& TRANS, const int& n, const int& nrhs, const long double* A, const int& lda, const int* IPIV, long double* B, const int& ldb, int* info) const
2322  {
2323  Teuchos::Details::LapackLongDouble lapack;
2324  lapack.GETRS (TRANS, n, nrhs, A, lda, IPIV, B, ldb, info);
2325  }
2326 
2328  GETRI (const int& n, long double* A, const int& lda, const int* IPIV, long double* WORK, const int& lwork, int* info) const
2329  {
2330  Teuchos::Details::LapackLongDouble lapack;
2331  lapack.GETRI (n, A, lda, const_cast<int*> (IPIV), WORK, lwork, info);
2332  }
2333 
2335  LASWP (const int& N, long double* A, const int& LDA, const int& K1, const int& K2, const int* IPIV, const int& INCX) const
2336  {
2337  Teuchos::Details::LapackLongDouble lapack;
2338  lapack.LASWP (N, A, LDA, K1, K2, IPIV, INCX);
2339  }
2340 
2342  ORM2R(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, const long double* A, const int& lda, const long double* TAU, long double* C, const int& ldc, long double* WORK, int* const info) const
2343  {
2344  Teuchos::Details::LapackLongDouble lapack;
2345  lapack.ORM2R (SIDE, TRANS, m, n, k, A, lda, TAU, C, ldc, WORK, info);
2346  }
2347 
2349  ORGQR(const int& m, const int& n, const int& k, long double* A, const int& lda, const long double* TAU, long double* WORK, const int& lwork, int* info) const
2350  {
2351  Teuchos::Details::LapackLongDouble lapack;
2352  lapack.ORGQR (m, n, k, A, lda, TAU, WORK, lwork, info);
2353  }
2354 
2356  UNGQR(const int& m, const int& n, const int& k, long double* A, const int& lda, const long double* TAU, long double* WORK, const int& lwork, int* info) const
2357  {
2358  Teuchos::Details::LapackLongDouble lapack;
2359  lapack.UNGQR (m, n, k, A, lda, TAU, WORK, lwork, info);
2360  }
2361 
2363  LARFG( const int& n, long double* alpha, long double* x, const int& incx, long double* tau ) const
2364  {
2365  Teuchos::Details::LapackLongDouble lapack;
2366  lapack.LARFG (n, alpha, x, incx, tau);
2367  }
2368 
2369  long double LAPACK<int, long double>::
2370  LAPY2 (const long double x, const long double y) const
2371  {
2372  Teuchos::Details::LapackLongDouble lapack;
2373  return lapack.LAPY2 (x, y);
2374  }
2375 
2377  GBTRF (const int& m, const int& n, const int& kl, const int& ku,
2378  long double* A, const int& lda, int* IPIV, int* info) const
2379  {
2380  Teuchos::Details::LapackLongDouble lapack;
2381  return lapack.GBTRF (m, n, kl, ku, A, lda, IPIV, info);
2382  }
2383 
2385  GBTRS (const char& TRANS, const int& n, const int& kl, const int& ku,
2386  const int& nrhs, const long double* A, const int& lda, const int* IPIV,
2387  long double* B, const int& ldb, int* info) const
2388  {
2389  Teuchos::Details::LapackLongDouble lapack;
2390  return lapack.GBTRS (TRANS, n, kl, ku, nrhs, A, lda, IPIV, B, ldb, info);
2391  }
2392 
2394  LASCL (const char& TYPE, const int& kl, const int& ku, const long double cfrom,
2395  const long double cto, const int& m, const int& n, long double* A,
2396  const int& lda, int* info) const
2397  {
2398  Teuchos::Details::LapackLongDouble lapack;
2399  return lapack.LASCL (TYPE, kl, ku, cfrom, cto, m, n, A, lda, info);
2400  }
2401 
2402  // END int, long double SPECIALIZATION IMPLEMENTATION //
2403 
2404 #endif // HAVE_TEUCHOS_LONG_DOUBLE
2405 
2406 
2407 } // namespace Teuchos
void TGEVC(const char &SIDE, const char &HOWMNY, const OrdinalType *SELECT, const OrdinalType &n, const ScalarType *S, const OrdinalType &lds, const ScalarType *P, const OrdinalType &ldp, ScalarType *VL, const OrdinalType &ldvl, ScalarType *VR, const OrdinalType &ldvr, const OrdinalType &mm, OrdinalType *M, ScalarType *WORK, OrdinalType *info) const
void ORM2R(const char &SIDE, const char &TRANS, const OrdinalType &m, const OrdinalType &n, const OrdinalType &k, const ScalarType *A, const OrdinalType &lda, const ScalarType *TAU, ScalarType *C, const OrdinalType &ldc, ScalarType *WORK, OrdinalType *const info) const
BLAS 2 version of ORMQR; known workspace size.
void ORGQR(const OrdinalType &m, const OrdinalType &n, const OrdinalType &k, ScalarType *A, const OrdinalType &lda, const ScalarType *TAU, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *info) const
Compute explicit Q factor from QR factorization (GEQRF) (real case).
void GEEQU(const OrdinalType &m, const OrdinalType &n, const ScalarType *A, const OrdinalType &lda, ScalarType *R, ScalarType *C, ScalarType *rowcond, ScalarType *colcond, ScalarType *amax, OrdinalType *info) const
Computes row and column scalings intended to equilibrate an m by n matrix A and reduce its condition ...
void LARTG(const ScalarType &f, const ScalarType &g, MagnitudeType *c, ScalarType *s, ScalarType *r) const
Gnerates a plane rotation that zeros out the second component of the input vector.
void GGEVX(const char &BALANC, const char &JOBVL, const char &JOBVR, const char &SENSE, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, ScalarType *B, const OrdinalType &ldb, MagnitudeType *ALPHAR, MagnitudeType *ALPHAI, ScalarType *BETA, ScalarType *VL, const OrdinalType &ldvl, ScalarType *VR, const OrdinalType &ldvr, OrdinalType *ilo, OrdinalType *ihi, MagnitudeType *lscale, MagnitudeType *rscale, MagnitudeType *abnrm, MagnitudeType *bbnrm, MagnitudeType *RCONDE, MagnitudeType *RCONDV, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *IWORK, OrdinalType *BWORK, OrdinalType *info) const
void SYTRD(const char &UPLO, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, ScalarType *D, ScalarType *E, ScalarType *TAU, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *info) const
Reduces a real symmetric matrix A to tridiagonal form by orthogonal similarity transformations.
OrdinalType ILAENV(const OrdinalType &ispec, const std::string &NAME, const std::string &OPTS, const OrdinalType &N1=-1, const OrdinalType &N2=-1, const OrdinalType &N3=-1, const OrdinalType &N4=-1) const
Chooses problem-dependent parameters for the local environment.
void GBCON(const char &NORM, const OrdinalType &n, const OrdinalType &kl, const OrdinalType &ku, const ScalarType *A, const OrdinalType &lda, const OrdinalType *IPIV, const ScalarType &anorm, ScalarType *rcond, ScalarType *WORK, OrdinalType *IWORK, OrdinalType *info) const
Estimates the reciprocal of the condition number of a general banded real matrix A, in either the 1-norm or the infinity-norm, using the LU factorization computed by GETRF.
void GGLSE(const OrdinalType &m, const OrdinalType &n, const OrdinalType &p, ScalarType *A, const OrdinalType &lda, ScalarType *B, const OrdinalType &ldb, ScalarType *C, ScalarType *D, ScalarType *X, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *info) const
Solves the linear equality-constrained least squares (LSE) problem where A is an m by n matrix...
void LARFG(const OrdinalType &n, ScalarType *alpha, ScalarType *x, const OrdinalType &incx, ScalarType *tau) const
Generates an elementary reflector of order n that zeros out the last n-1 components of the input vect...
Declaration and definition of Teuchos::Details::Lapack128, a partial implementation of Teuchos::LAPAC...
void GEBAK(const char &JOBZ, const char &SIDE, const OrdinalType &n, const OrdinalType &ilo, const OrdinalType &ihi, const MagnitudeType *scale, const OrdinalType &m, ScalarType *V, const OrdinalType &ldv, OrdinalType *info) const
Forms the left or right eigenvectors of a general matrix that has been balanced by GEBAL by backward ...
void POTRI(const char &UPLO, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, OrdinalType *info) const
Computes the inverse of a real symmetric positive definite matrix A using the Cholesky factorization ...
void GTTRS(const char &TRANS, const OrdinalType &n, const OrdinalType &nrhs, const ScalarType *dl, const ScalarType *d, const ScalarType *du, const ScalarType *du2, const OrdinalType *IPIV, ScalarType *B, const OrdinalType &ldb, OrdinalType *info) const
Solves a system of linear equations A*X=B or A&#39;*X=B or A^H*X=B with a tridiagonal matrix A using the ...
void SPEV(const char &JOBZ, const char &UPLO, const OrdinalType &n, ScalarType *AP, ScalarType *W, ScalarType *Z, const OrdinalType &ldz, ScalarType *WORK, OrdinalType *info) const
Computes the eigenvalues and, optionally, eigenvectors of a symmetric n by n matrix A in packed stora...
void GTTRF(const OrdinalType &n, ScalarType *dl, ScalarType *d, ScalarType *du, ScalarType *du2, OrdinalType *IPIV, OrdinalType *info) const
Computes an LU factorization of a n by n tridiagonal matrix A using partial pivoting with row interch...
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
void TRTRS(const char &UPLO, const char &TRANS, const char &DIAG, const OrdinalType &n, const OrdinalType &nrhs, const ScalarType *A, const OrdinalType &lda, ScalarType *B, const OrdinalType &ldb, OrdinalType *info) const
Solves a triangular linear system of the form A*X=B or A**T*X=B, where A is a triangular matrix...
void POTRS(const char &UPLO, const OrdinalType &n, const OrdinalType &nrhs, const ScalarType *A, const OrdinalType &lda, ScalarType *B, const OrdinalType &ldb, OrdinalType *info) const
Solves a system of linear equations A*X=B, where A is a symmetric positive definite matrix factored b...
void POSV(const char &UPLO, const OrdinalType &n, const OrdinalType &nrhs, ScalarType *A, const OrdinalType &lda, ScalarType *B, const OrdinalType &ldb, OrdinalType *info) const
Computes the solution to a real system of linear equations A*X=B, where A is a symmetric positive def...
Teuchos header file which uses auto-configuration information to include necessary C++ headers...
void PTTRF(const OrdinalType &n, MagnitudeType *d, ScalarType *e, OrdinalType *info) const
Computes the L*D*L&#39; factorization of a Hermitian/symmetric positive definite tridiagonal matrix A...
void GBTRF(const OrdinalType &m, const OrdinalType &n, const OrdinalType &kl, const OrdinalType &ku, ScalarType *A, const OrdinalType &lda, OrdinalType *IPIV, OrdinalType *info) const
Computes an LU factorization of a general banded m by n matrix A using partial pivoting with row inte...
void UNM2R(const char &SIDE, const char &TRANS, const OrdinalType &M, const OrdinalType &N, const OrdinalType &K, const ScalarType *A, const OrdinalType &LDA, const ScalarType *TAU, ScalarType *C, const OrdinalType &LDC, ScalarType *WORK, OrdinalType *const INFO) const
BLAS 2 version of UNMQR; known workspace size.
void PTEQR(const char &COMPZ, const OrdinalType &n, MagnitudeType *D, MagnitudeType *E, ScalarType *Z, const OrdinalType &ldz, MagnitudeType *WORK, OrdinalType *info) const
Computes the eigenvalues and, optionally, eigenvectors of a symmetric positive-definite tridiagonal n...
void TREVC(const char &SIDE, const char &HOWMNY, OrdinalType *select, const OrdinalType &n, const ScalarType *T, const OrdinalType &ldt, ScalarType *VL, const OrdinalType &ldvl, ScalarType *VR, const OrdinalType &ldvr, const OrdinalType &mm, OrdinalType *m, ScalarType *WORK, OrdinalType *info) const
void STEQR(const char &COMPZ, const OrdinalType &n, MagnitudeType *D, MagnitudeType *E, ScalarType *Z, const OrdinalType &ldz, MagnitudeType *WORK, OrdinalType *info) const
Computes the eigenvalues and, optionally, eigenvectors of a symmetric tridiagonal n by n matrix A usi...
The Templated LAPACK wrappers.
This structure defines some basic traits for a scalar field type.
void GETRF(const OrdinalType &m, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, OrdinalType *IPIV, OrdinalType *info) const
Computes an LU factorization of a general m by n matrix A using partial pivoting with row interchange...
Templated interface class to LAPACK routines.
ScalarTraits< ScalarType >::magnitudeType LANGB(const char &NORM, const OrdinalType &n, const OrdinalType &kl, const OrdinalType &ku, const ScalarType *A, const OrdinalType &lda, MagnitudeType *WORK) const
Returns the value of the one norm, or the Frobenius norm, or the infinity norm, or the element of lar...
void GGES(const char &JOBVL, const char &JOBVR, const char &SORT, OrdinalType &(*ptr2func)(ScalarType *, ScalarType *, ScalarType *), const OrdinalType &n, ScalarType *A, const OrdinalType &lda, ScalarType *B, const OrdinalType &ldb, OrdinalType *sdim, MagnitudeType *ALPHAR, MagnitudeType *ALPHAI, MagnitudeType *BETA, ScalarType *VL, const OrdinalType &ldvl, ScalarType *VR, const OrdinalType &ldvr, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *BWORK, OrdinalType *info) const
void ORMHR(const char &SIDE, const char &TRANS, const OrdinalType &m, const OrdinalType &n, const OrdinalType &ilo, const OrdinalType &ihi, const ScalarType *A, const OrdinalType &lda, const ScalarType *TAU, ScalarType *C, const OrdinalType &ldc, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *info) const
Overwrites the general real m by n matrix C with the product of C and Q, which is a product of ihi-il...
void GEES(const char &JOBVS, const char &SORT, OrdinalType &(*ptr2func)(ScalarType *, ScalarType *), const OrdinalType &n, ScalarType *A, const OrdinalType &lda, OrdinalType *sdim, ScalarType *WR, ScalarType *WI, ScalarType *VS, const OrdinalType &ldvs, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *BWORK, OrdinalType *info) const
void GEBAL(const char &JOBZ, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, OrdinalType *ilo, OrdinalType *ihi, MagnitudeType *scale, OrdinalType *info) const
Balances a general matrix A, through similarity transformations to make the rows and columns as close...
void PORFS(const char &UPLO, const OrdinalType &n, const OrdinalType &nrhs, const ScalarType *A, const OrdinalType &lda, const ScalarType *AF, const OrdinalType &ldaf, const ScalarType *B, const OrdinalType &ldb, ScalarType *X, const OrdinalType &ldx, ScalarType *FERR, ScalarType *BERR, ScalarType *WORK, OrdinalType *IWORK, OrdinalType *info) const
Improves the computed solution to a system of linear equations when the coefficient matrix is symmetr...
void LATRS(const char &UPLO, const char &TRANS, const char &DIAG, const char &NORMIN, const OrdinalType &N, const ScalarType *A, const OrdinalType &LDA, ScalarType *X, MagnitudeType *SCALE, MagnitudeType *CNORM, OrdinalType *INFO) const
Robustly solve a possibly singular triangular linear system.
ScalarType LARND(const OrdinalType &idist, OrdinalType *seed) const
Returns a random number from a uniform or normal distribution.
void POTRF(const char &UPLO, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, OrdinalType *info) const
Computes Cholesky factorization of a real symmetric positive definite matrix A.
void SYEV(const char &JOBZ, const char &UPLO, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, ScalarType *W, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *info) const
Computes all the eigenvalues and, optionally, eigenvectors of a symmetric n by n matrix A...
void TREXC(const char &COMPQ, const OrdinalType &n, ScalarType *T, const OrdinalType &ldt, ScalarType *Q, const OrdinalType &ldq, OrdinalType *ifst, OrdinalType *ilst, ScalarType *WORK, OrdinalType *info) const
void GGEV(const char &JOBVL, const char &JOBVR, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, ScalarType *B, const OrdinalType &ldb, MagnitudeType *ALPHAR, MagnitudeType *ALPHAI, ScalarType *BETA, ScalarType *VL, const OrdinalType &ldvl, ScalarType *VR, const OrdinalType &ldvr, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *info) const
void SYGV(const OrdinalType &itype, const char &JOBZ, const char &UPLO, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, ScalarType *B, const OrdinalType &ldb, ScalarType *W, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *info) const
Computes all the eigenvalues and, optionally, eigenvectors of a symmetric n by n matrix pencil {A...
void LASCL(const char &TYPE, const OrdinalType &kl, const OrdinalType &ku, const MagnitudeType cfrom, const MagnitudeType cto, const OrdinalType &m, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, OrdinalType *info) const
Multiplies the m by n matrix A by the real scalar cto/cfrom.
void POSVX(const char &FACT, const char &UPLO, const OrdinalType &n, const OrdinalType &nrhs, ScalarType *A, const OrdinalType &lda, ScalarType *AF, const OrdinalType &ldaf, char *EQUED, ScalarType *S, ScalarType *B, const OrdinalType &ldb, ScalarType *X, const OrdinalType &ldx, ScalarType *rcond, ScalarType *FERR, ScalarType *BERR, ScalarType *WORK, OrdinalType *IWORK, OrdinalType *info) const
Uses the Cholesky factorization to compute the solution to a real system of linear equations A*X=B...
ScalarType LAPY2(const ScalarType &x, const ScalarType &y) const
Computes x^2 + y^2 safely, to avoid overflow.
void TRSEN(const char &JOB, const char &COMPQ, const OrdinalType *SELECT, const OrdinalType &n, ScalarType *T, const OrdinalType &ldt, ScalarType *Q, const OrdinalType &ldq, MagnitudeType *WR, MagnitudeType *WI, OrdinalType *M, ScalarType *S, MagnitudeType *SEP, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *IWORK, const OrdinalType &liwork, OrdinalType *info) const
void GEHRD(const OrdinalType &n, const OrdinalType &ilo, const OrdinalType &ihi, ScalarType *A, const OrdinalType &lda, ScalarType *TAU, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *info) const
Reduces a real general matrix A to upper Hessenberg form by orthogonal similarity transformations...
void UNGQR(const OrdinalType &m, const OrdinalType &n, const OrdinalType &k, ScalarType *A, const OrdinalType &lda, const ScalarType *TAU, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *info) const
Compute explicit QR factor from QR factorization (GEQRF) (complex case).
Declaration and definition of Teuchos::Details::LapackLongDouble, a partial implementation of Teuchos...
void GBTRS(const char &TRANS, const OrdinalType &n, const OrdinalType &kl, const OrdinalType &ku, const OrdinalType &nrhs, const ScalarType *A, const OrdinalType &lda, const OrdinalType *IPIV, ScalarType *B, const OrdinalType &ldb, OrdinalType *info) const
Solves a system of linear equations A*X=B or A&#39;*X=B with a general banded n by n matrix A using the L...
void GEQRF(const OrdinalType &m, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, ScalarType *TAU, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *info) const
Computes a QR factorization of a general m by n matrix A.
void GESVD(const char &JOBU, const char &JOBVT, const OrdinalType &m, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, MagnitudeType *S, ScalarType *U, const OrdinalType &ldu, ScalarType *V, const OrdinalType &ldv, ScalarType *WORK, const OrdinalType &lwork, MagnitudeType *RWORK, OrdinalType *info) const
Computes the singular values (and optionally, vectors) of a real matrix A.
void GESV(const OrdinalType &n, const OrdinalType &nrhs, ScalarType *A, const OrdinalType &lda, OrdinalType *IPIV, ScalarType *B, const OrdinalType &ldb, OrdinalType *info) const
Computes the solution to a real system of linear equations A*X=B, where A is factored through GETRF a...
void GEEV(const char &JOBVL, const char &JOBVR, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, MagnitudeType *WR, MagnitudeType *WI, ScalarType *VL, const OrdinalType &ldvl, ScalarType *VR, const OrdinalType &ldvr, ScalarType *WORK, const OrdinalType &lwork, MagnitudeType *RWORK, OrdinalType *info) const
Computes for an n by n real nonsymmetric matrix A, the eigenvalues and, optionally, the left and/or right eigenvectors.
void GETRS(const char &TRANS, const OrdinalType &n, const OrdinalType &nrhs, const ScalarType *A, const OrdinalType &lda, const OrdinalType *IPIV, ScalarType *B, const OrdinalType &ldb, OrdinalType *info) const
Solves a system of linear equations A*X=B or A&#39;*X=B with a general n by n matrix A using the LU facto...
void GEEVX(const char &BALANC, const char &JOBVL, const char &JOBVR, const char &SENSE, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, ScalarType *WR, ScalarType *WI, ScalarType *VL, const OrdinalType &ldvl, ScalarType *VR, const OrdinalType &ldvr, OrdinalType *ilo, OrdinalType *ihi, MagnitudeType *SCALE, MagnitudeType *abnrm, MagnitudeType *RCONDE, MagnitudeType *RCONDV, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *IWORK, OrdinalType *info) const
void GESVX(const char &FACT, const char &TRANS, const OrdinalType &n, const OrdinalType &nrhs, ScalarType *A, const OrdinalType &lda, ScalarType *AF, const OrdinalType &ldaf, OrdinalType *IPIV, char *EQUED, ScalarType *R, ScalarType *C, ScalarType *B, const OrdinalType &ldb, ScalarType *X, const OrdinalType &ldx, ScalarType *rcond, ScalarType *FERR, ScalarType *BERR, ScalarType *WORK, OrdinalType *IWORK, OrdinalType *info) const
Uses the LU factorization to compute the solution to a real system of linear equations A*X=B...
Standard test and throw macros.
Defines basic traits for the scalar field type.
void GETRI(const OrdinalType &n, ScalarType *A, const OrdinalType &lda, const OrdinalType *IPIV, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *info) const
Computes the inverse of a matrix A using the LU factorization computed by GETRF.
void GELS(const char &TRANS, const OrdinalType &m, const OrdinalType &n, const OrdinalType &nrhs, ScalarType *A, const OrdinalType &lda, ScalarType *B, const OrdinalType &ldb, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *info) const
Solves an over/underdetermined real m by n linear system A using QR or LQ factorization of A...
void GEQR2(const OrdinalType &m, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, ScalarType *TAU, ScalarType *WORK, OrdinalType *const info) const
BLAS 2 version of GEQRF, with known workspace size.
void ORMQR(const char &SIDE, const char &TRANS, const OrdinalType &m, const OrdinalType &n, const OrdinalType &k, const ScalarType *A, const OrdinalType &lda, const ScalarType *TAU, ScalarType *C, const OrdinalType &ldc, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *info) const
void GELSS(const OrdinalType &m, const OrdinalType &n, const OrdinalType &nrhs, ScalarType *A, const OrdinalType &lda, ScalarType *B, const OrdinalType &ldb, MagnitudeType *S, const MagnitudeType rcond, OrdinalType *rank, ScalarType *WORK, const OrdinalType &lwork, MagnitudeType *RWORK, OrdinalType *info) const
Use the SVD to solve a possibly rank-deficient linear least-squares problem.
void HEEV(const char &JOBZ, const char &UPLO, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, MagnitudeType *W, ScalarType *WORK, const OrdinalType &lwork, MagnitudeType *RWORK, OrdinalType *info) const
Computes all the eigenvalues and, optionally, eigenvectors of a Hermitian n by n matrix A...
void LARNV(const OrdinalType &idist, OrdinalType *seed, const OrdinalType &n, ScalarType *v) const
Returns a vector of random numbers from a chosen distribution.
void TGSEN(const OrdinalType &ijob, const OrdinalType &wantq, const OrdinalType &wantz, const OrdinalType *SELECT, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, ScalarType *B, const OrdinalType &ldb, MagnitudeType *ALPHAR, MagnitudeType *ALPHAI, MagnitudeType *BETA, ScalarType *Q, const OrdinalType &ldq, ScalarType *Z, const OrdinalType &ldz, OrdinalType *M, MagnitudeType *PL, MagnitudeType *PR, MagnitudeType *DIF, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *IWORK, const OrdinalType &liwork, OrdinalType *info) const
void POCON(const char &UPLO, const OrdinalType &n, const ScalarType *A, const OrdinalType &lda, const ScalarType &anorm, ScalarType *rcond, ScalarType *WORK, OrdinalType *IWORK, OrdinalType *info) const
Estimates the reciprocal of the condition number (1-norm) of a real symmetric positive definite matri...
void PTTRS(const OrdinalType &n, const OrdinalType &nrhs, const MagnitudeType *d, const ScalarType *e, ScalarType *B, const OrdinalType &ldb, OrdinalType *info) const
Solves a tridiagonal system A*X=B using the *D*L&#39; factorization of A computed by PTTRF.
void GERFS(const char &TRANS, const OrdinalType &n, const OrdinalType &nrhs, const ScalarType *A, const OrdinalType &lda, const ScalarType *AF, const OrdinalType &ldaf, const OrdinalType *IPIV, const ScalarType *B, const OrdinalType &ldb, ScalarType *X, const OrdinalType &ldx, ScalarType *FERR, ScalarType *BERR, ScalarType *WORK, OrdinalType *IWORK, OrdinalType *info) const
Improves the computed solution to a system of linear equations and provides error bounds and backward...
void GEQP3(const OrdinalType &m, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, OrdinalType *jpvt, ScalarType *TAU, ScalarType *WORK, const OrdinalType &lwork, MagnitudeType *RWORK, OrdinalType *info) const
Computes a QR factorization with column pivoting of a matrix A: A*P = Q*R using Level 3 BLAS...
ScalarType LAMCH(const char &CMACH) const
Determines machine parameters for floating point characteristics.
void HEGV(const OrdinalType &itype, const char &JOBZ, const char &UPLO, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, ScalarType *B, const OrdinalType &ldb, MagnitudeType *W, ScalarType *WORK, const OrdinalType &lwork, MagnitudeType *RWORK, OrdinalType *info) const
Computes all the eigenvalues and, optionally, eigenvectors of a generalized Hermitian-definite n by n...
void ORGHR(const OrdinalType &n, const OrdinalType &ilo, const OrdinalType &ihi, ScalarType *A, const OrdinalType &lda, const ScalarType *TAU, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *info) const
Generates a real orthogonal matrix Q which is the product of ihi-ilo elementary reflectors of order n...
void TRTRI(const char &UPLO, const char &DIAG, const OrdinalType &n, ScalarType *A, const OrdinalType &lda, OrdinalType *info) const
Computes the inverse of an upper or lower triangular matrix A.
void GECON(const char &NORM, const OrdinalType &n, const ScalarType *A, const OrdinalType &lda, const ScalarType &anorm, ScalarType *rcond, ScalarType *WORK, OrdinalType *IWORK, OrdinalType *info) const
Estimates the reciprocal of the condition number of a general real matrix A, in either the 1-norm or ...
void HSEQR(const char &JOB, const char &COMPZ, const OrdinalType &n, const OrdinalType &ilo, const OrdinalType &ihi, ScalarType *H, const OrdinalType &ldh, ScalarType *WR, ScalarType *WI, ScalarType *Z, const OrdinalType &ldz, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *info) const
Computes the eigenvalues of a real upper Hessenberg matrix H and, optionally, the matrices T and Z fr...
void LASWP(const OrdinalType &N, ScalarType *A, const OrdinalType &LDA, const OrdinalType &K1, const OrdinalType &K2, const OrdinalType *IPIV, const OrdinalType &INCX) const
Apply a series of row interchanges to the matrix A.
void GBRFS(const char &TRANS, const OrdinalType &n, const OrdinalType &kl, const OrdinalType &ku, const OrdinalType &nrhs, const ScalarType *A, const OrdinalType &lda, const ScalarType *AF, const OrdinalType &ldaf, const OrdinalType *IPIV, const ScalarType *B, const OrdinalType &ldb, ScalarType *X, const OrdinalType &ldx, ScalarType *FERR, ScalarType *BERR, ScalarType *WORK, OrdinalType *IWORK, OrdinalType *info) const
Improves the computed solution to a banded system of linear equations and provides error bounds and b...
void POEQU(const OrdinalType &n, const ScalarType *A, const OrdinalType &lda, MagnitudeType *S, MagnitudeType *scond, MagnitudeType *amax, OrdinalType *info) const
Computes row and column scalings intended to equilibrate a symmetric positive definite matrix A and r...
void UNMQR(const char &SIDE, const char &TRANS, const OrdinalType &m, const OrdinalType &n, const OrdinalType &k, const ScalarType *A, const OrdinalType &lda, const ScalarType *TAU, ScalarType *C, const OrdinalType &ldc, ScalarType *WORK, const OrdinalType &lwork, OrdinalType *info) const
Apply Householder reflectors (complex case).
void GBEQU(const OrdinalType &m, const OrdinalType &n, const OrdinalType &kl, const OrdinalType &ku, const ScalarType *A, const OrdinalType &lda, MagnitudeType *R, MagnitudeType *C, MagnitudeType *rowcond, MagnitudeType *colcond, MagnitudeType *amax, OrdinalType *info) const
Computes row and column scalings intended to equilibrate an m by n banded matrix A and reduce its con...