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"
46 #include "Teuchos_LAPACK_wrappers.hpp"
47 #ifdef HAVE_TEUCHOSCORE_QUADMATH
48 # include "Teuchos_Details_Lapack128.hpp" // impl for __float128
49 #endif // HAVE_TEUCHOSCORE_QUADMATH
50
51 /* for INTEL_CXML, the second arg may need to be changed to 'one'. If so
52 the appropriate declaration of one will need to be added back into
53 functions that include the macro:
54 */
55
56 #ifdef CHAR_MACRO
57 #undef CHAR_MACRO
58 #endif
59 #if defined (INTEL_CXML)
60 #define CHAR_MACRO(char_var) &char_var, one
61 #else
62 #define CHAR_MACRO(char_var) &char_var
63 #endif
64
65 #ifdef CHARPTR_MACRO
66 #undef CHARPR_MACRO
67 #endif
68 #if defined (INTEL_CXML)
69 #define CHARPTR_MACRO(charptr_var) charptr_var, one
70 #else
71 #define CHARPTR_MACRO(charptr_var) charptr_var
72 #endif
73
74 namespace {
75
76 #if defined (INTEL_CXML)
77 unsigned int one=1;
78 #endif
79
80 // Use a wrapper function to handle calling ILAENV(). This removes
81 // duplicaiton and avoid name lookup problems with member functions called
82 // ILAENV() trying to call nonmember functions called ILAENV() (which does not
83 // work on Intel compiler on Windows, see Trilinos bug 5762).
84 inline
ilaenv_wrapper(const int * ispec,const char * name,const unsigned int & name_length,const char * opts,const unsigned int & opts_length,const int * N1,const int * N2,const int * N3,const int * N4)85 int ilaenv_wrapper(
86 const int* ispec, const char* name, const unsigned int& name_length,
87 const char* opts, const unsigned int& opts_length,
88 const int* N1, const int* N2, const int* N3, const int* N4 )
89 {
90 #if defined (INTEL_CXML)
91 return ILAENV_F77(ispec, name, name_length, opts, opts_length, N1, N2, N3, N4 );
92 #else
93 return ILAENV_F77(ispec, name, opts, N1, N2, N3, N4, name_length, opts_length );
94 #endif
95 }
96
97 } // namespace
98
99
100
101 extern "C" {
102
103
104 typedef int (*gees_nullfptr_t)(double*,double*);
105
106
107 } // extern "C"
108
109
110 namespace Teuchos
111 {
112 // BEGIN INT, FLOAT SPECIALIZATION IMPLEMENTATION //
113
PTTRF(const int & n,float * d,float * e,int * info) const114 void LAPACK<int, float>::PTTRF(const int& n, float* d, float* e, int* info) const
115 { SPTTRF_F77(&n,d,e,info); }
116
117
PTTRS(const int & n,const int & nrhs,const float * d,const float * e,float * B,const int & ldb,int * info) const118 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
119 { SPTTRS_F77(&n,&nrhs,d,e,B,&ldb,info); }
120
121
POTRF(const char & UPLO,const int & n,float * A,const int & lda,int * info) const122 void LAPACK<int, float>::POTRF(const char& UPLO, const int& n, float* A, const int& lda, int* info) const
123 { SPOTRF_F77(CHAR_MACRO(UPLO), &n, A, &lda, info); }
124
125
POTRS(const char & UPLO,const int & n,const int & nrhs,const float * A,const int & lda,float * B,const int & ldb,int * info) const126 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
127 { SPOTRS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info); }
128
129
POTRI(const char & UPLO,const int & n,float * A,const int & lda,int * info) const130 void LAPACK<int, float>::POTRI(const char& UPLO, const int& n, float* A, const int& lda, int* info) const
131 { SPOTRI_F77(CHAR_MACRO(UPLO), &n, A, &lda, info); }
132
133
POCON(const char & UPLO,const int & n,const float * A,const int & lda,const float & anorm,float * rcond,float * WORK,int * IWORK,int * info) const134 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
135 { SPOCON_F77(CHAR_MACRO(UPLO), &n, A, &lda, &anorm, rcond, WORK, IWORK, info); }
136
137
POSV(const char & UPLO,const int & n,const int & nrhs,float * A,const int & lda,float * B,const int & ldb,int * info) const138 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
139 { SPOSV_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info); }
140
141
POEQU(const int & n,const float * A,const int & lda,float * S,float * scond,float * amax,int * info) const142 void LAPACK<int, float>::POEQU(const int& n, const float* A, const int& lda, float* S, float* scond, float* amax, int* info) const
143 { SPOEQU_F77(&n, A, &lda, S, scond, amax, info); }
144
145
PORFS(const char & UPLO,const int & n,const int & nrhs,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) const146 void LAPACK<int, float>::PORFS(const char& UPLO, const int& n, const int& nrhs, 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
147 { SPORFS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, B, &ldb, X, &ldx, FERR, BERR, WORK, IWORK, info); }
148
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) const149 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
150 { 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); }
151
152
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) const153 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
154 { SGELS_F77(CHAR_MACRO(TRANS), &m, &n, &nrhs, A, &lda, B, &ldb, WORK, &lwork, info); }
155
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) const156 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
157 {
158 (void) rwork;
159 SGELSS_F77(&m, &n, &nrhs, A, &lda, B, &ldb, S, &rcond, rank, WORK, &lwork, info);
160 }
161
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) const162 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
163 { SGELSS_F77(&m, &n, &nrhs, A, &lda, B, &ldb, S, &rcond, rank, WORK, &lwork, info); }
164
165
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) const166 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
167 { SGGLSE_F77(&m, &n, &p, A, &lda, B, &ldb, C, D, X, WORK, &lwork, info); }
168
169
GEQRF(const int & m,const int & n,float * A,const int & lda,float * TAU,float * WORK,const int & lwork,int * info) const170 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
171 { SGEQRF_F77(&m, &n, A, &lda, TAU, WORK, &lwork, info); }
172
GEQR2(const int & m,const int & n,float A[],const int & lda,float TAU[],float WORK[],int * const info) const173 void LAPACK<int,float>::GEQR2 (const int& m, const int& n, float A[], const int& lda, float TAU[], float WORK[], int* const info) const
174 {
175 SGEQR2_F77(&m, &n, A, &lda, TAU, WORK, info);
176 }
177
GETRF(const int & m,const int & n,float * A,const int & lda,int * IPIV,int * info) const178 void LAPACK<int,float>::GETRF(const int& m, const int& n, float* A, const int& lda, int* IPIV, int* info) const
179 { SGETRF_F77(&m, &n, A, &lda, IPIV, info); }
180
181
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) const182 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
183 { SGETRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, IPIV, B, &ldb, info); }
184
185
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) const186 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
187 { SLASCL_F77(CHAR_MACRO(TYPE), &kl, &ku, &cfrom, &cto, &m, &n, A, &lda, info); }
188
189 void
190 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) const191 GEQP3 (const int& m,
192 const int& n,
193 float* A,
194 const int& lda,
195 int* jpvt,
196 float* TAU,
197 float* WORK,
198 const int& lwork,
199 float* RWORK,
200 int* info) const
201 {
202 (void) RWORK;
203 SGEQP3_F77(&m, &n, A, &lda, jpvt, TAU, WORK, &lwork, info);
204 }
205
206 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) const207 LASWP (const int& N,
208 float A[],
209 const int& LDA,
210 const int& K1,
211 const int& K2,
212 const int IPIV[],
213 const int& INCX) const
214 {
215 SLASWP_F77(&N, A, &LDA, &K1, &K2, IPIV, &INCX);
216 }
217
GBTRF(const int & m,const int & n,const int & kl,const int & ku,float * A,const int & lda,int * IPIV,int * info) const218 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
219 { SGBTRF_F77(&m, &n, &kl, &ku, A, &lda, IPIV, info); }
220
221
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) const222 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
223 { SGBTRS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, A, &lda, IPIV, B, &ldb, info); }
224
225
GTTRF(const int & n,float * dl,float * d,float * du,float * du2,int * IPIV,int * info) const226 void LAPACK<int,float>::GTTRF(const int& n, float* dl, float* d, float* du, float* du2, int* IPIV, int* info) const
227 { SGTTRF_F77(&n, dl, d, du, du2, IPIV, info); }
228
229
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) const230 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
231 { SGTTRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, dl, d, du, du2, IPIV, B, &ldb, info); }
232
233
GETRI(const int & n,float * A,const int & lda,const int * IPIV,float * WORK,const int & lwork,int * info) const234 void LAPACK<int,float>::GETRI(const int& n, float* A, const int& lda, const int* IPIV, float* WORK, const int& lwork, int* info) const
235 { SGETRI_F77(&n, A, &lda, IPIV, WORK, &lwork, info); }
236
237 void
LATRS(const char & UPLO,const char & TRANS,const char & DIAG,const char & NORMIN,const int & N,float * A,const int & LDA,float * X,float * SCALE,float * CNORM,int * INFO) const238 LAPACK<int, float>::LATRS (const char& UPLO,
239 const char& TRANS,
240 const char& DIAG,
241 const char& NORMIN,
242 const int& N,
243 float* A,
244 const int& LDA,
245 float* X,
246 float* SCALE,
247 float* CNORM,
248 int* INFO) const
249 {
250 SLATRS_F77(CHAR_MACRO(UPLO),
251 CHAR_MACRO(TRANS),
252 CHAR_MACRO(DIAG),
253 CHAR_MACRO(NORMIN),
254 &N,
255 A,
256 &LDA,
257 X,
258 SCALE,
259 CNORM,
260 INFO);
261 }
262
263
GECON(const char & NORM,const int & n,const float * A,const int & lda,const float & anorm,float * rcond,float * WORK,int * IWORK,int * info) const264 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
265 { SGECON_F77(CHAR_MACRO(NORM), &n, A, &lda, &anorm, rcond, WORK, IWORK, info); }
266
267
GBCON(const char & NORM,const int & n,const int & kl,const int & ku,const float * A,const int & lda,int * IPIV,const float & anorm,float * rcond,float * WORK,int * IWORK,int * info) const268 void LAPACK<int,float>::GBCON(const char& NORM, const int& n, const int& kl, const int& ku, const float* A, const int& lda, int* IPIV, const float& anorm, float* rcond, float* WORK, int* IWORK, int* info) const
269 { SGBCON_F77(CHAR_MACRO(NORM), &n, &kl, &ku, A, &lda, IPIV, &anorm, rcond, WORK, IWORK, info); }
270
271
LANGB(const char & NORM,const int & n,const int & kl,const int & ku,const float * A,const int & lda,float * WORK) const272 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
273 { return( SLANGB_F77(CHAR_MACRO(NORM), &n, &kl, &ku, A, &lda, WORK) ); }
274
275
GESV(const int & n,const int & nrhs,float * A,const int & lda,int * IPIV,float * B,const int & ldb,int * info) const276 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
277 { SGESV_F77(&n, &nrhs, A, &lda, IPIV, B, &ldb, info); }
278
279
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) const280 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
281 { SGEEQU_F77(&m, &n, A, &lda, R, C, rowcond, colcond, amax, info); }
282
283
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) const284 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
285 { SGERFS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, IWORK, info); }
286
287
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) const288 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
289 { SGBEQU_F77(&m, &n, &kl, &ku, A, &lda, R, C, rowcond, colcond, amax, info); }
290
291
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) const292 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
293 { SGBRFS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, IWORK, info); }
294
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) const295 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
296 { 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); }
297
298
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) const299 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
300 { SSYTRD_F77(CHAR_MACRO(UPLO), &n, A, &lda, D, E, TAU, WORK, &lwork, info); }
301
302
GEHRD(const int & n,const int & ilo,const int & ihi,float * A,const int & lda,float * TAU,float * WORK,const int & lwork,int * info) const303 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
304 { SGEHRD_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info); }
305
306
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) const307 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
308 { STRTRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), &n, &nrhs, A, &lda, B, &ldb, info); }
309
310
TRTRI(const char & UPLO,const char & DIAG,const int & n,const float * A,const int & lda,int * info) const311 void LAPACK<int,float>::TRTRI(const char& UPLO, const char& DIAG, const int& n, const float* A, const int& lda, int* info) const
312 { STRTRI_F77(CHAR_MACRO(UPLO), CHAR_MACRO(DIAG), &n, A, &lda, info); }
313
314
SPEV(const char & JOBZ,const char & UPLO,const int & n,float * AP,float * W,float * Z,const int & ldz,float * WORK,int * info) const315 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
316 { SSPEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, AP, W, Z, &ldz, WORK, info); }
317
318
SYEV(const char & JOBZ,const char & UPLO,const int & n,float * A,const int & lda,float * W,float * WORK,const int & lwork,int * info) const319 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
320 { SSYEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, info); }
321
322
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) const323 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
324 { SSYGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, info); }
325
326
HEEV(const char & JOBZ,const char & UPLO,const int & n,float * A,const int & lda,float * W,float * WORK,const int & lwork,float *,int * info) const327 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
328 { SSYEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, info); }
329
330
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 *,int * info) const331 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
332 { SSYGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, info); }
333
334
STEQR(const char & COMPZ,const int & n,float * D,float * E,float * Z,const int & ldz,float * WORK,int * info) const335 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
336 { SSTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info); }
337
338
PTEQR(const char & COMPZ,const int & n,float * D,float * E,float * Z,const int & ldz,float * WORK,int * info) const339 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
340 { SPTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info); }
341
342
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) const343 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
344 { SHSEQR_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPZ), &n, &ilo, &ihi, H, &ldh, WR, WI, Z, &ldz, WORK, &lwork, info); }
345
346
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) const347 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
348 { SGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(SORT), ptr2func, &n, A, &lda, sdim, WR, WI, VS, &ldvs, WORK, &lwork, BWORK, info); }
349
350
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 *,int * BWORK,int * info) const351 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
352 {
353 int (*nullfptr)(float*,float*) = NULL;
354 const char sort = 'N';
355 SGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(sort), nullfptr, &n, A, &lda, sdim, WR, WI, VS, &ldvs, WORK, &lwork, BWORK, info);
356 }
357
358
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) const359 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
360 { SGEEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, WR, WI, VL, &ldvl, VR, &ldvr, WORK, &lwork, info); }
361
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 *,int * info) const362 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
363 {
364 GEEV (JOBVL, JOBVR, n, A, lda, WR, WI, VL, ldvl, VR, ldvr, WORK, lwork, info);
365 }
366
367
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 *,int * info) const368 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
369 { SGESVD_F77(CHAR_MACRO(JOBU), CHAR_MACRO(JOBVT), &m, &n, A, &lda, S, U, &ldu, V, &ldv, WORK, &lwork, info); }
370
371
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) const372 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
373 { 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); }
374
375
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) const376 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
377 { 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); }
378
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 *,int * IWORK,int * BWORK,int * info) const379 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
380 {
381 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);
382 }
383
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) const384 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
385 { SGGEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, B, &ldb, ALPHAR, ALPHAI, BETA, VL, &ldvl, VR, &ldvr, WORK, &lwork, info); }
386
387
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) const388 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
389 { STRSEN_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPQ), SELECT, &n, T, &ldt, Q, &ldq, WR, WI, M, S, SEP, WORK, &lwork, IWORK, &liwork, info); }
390
391
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) const392 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
393 { 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); }
394
395
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) const396 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
397 { 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); }
398
399
ORMQR(const char & SIDE,const char & TRANS,const int & m,const int & n,const int & k,float * A,const int & lda,const float * TAU,float * C,const int & ldc,float * WORK,const int & lwork,int * info) const400 void LAPACK<int, float>::ORMQR(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, float* A, const int& lda, const float* TAU, float* C, const int& ldc, float* WORK, const int& lwork, int* info) const
401 { SORMQR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &k, A, &lda, TAU, C, &ldc, WORK, &lwork, info); }
402
403
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) const404 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
405 { SORM2R_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &k, A, &lda, TAU, C, &ldc, WORK, info); }
406
407
UNMQR(const char & SIDE,const char & TRANS,const int & m,const int & n,const int & k,float * A,const int & lda,const float * TAU,float * C,const int & ldc,float * WORK,const int & lwork,int * info) const408 void LAPACK<int, float>::UNMQR(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, float* A, const int& lda, const float* TAU, float* C, const int& ldc, float* WORK, const int& lwork, int* info) const
409 {
410 // LAPACK only defines UNMQR for Z and C (complex*8
411 // resp. complex*16), but logically, UNMQR means the same thing as
412 // ORMQR for real arithmetic.
413 ORMQR (SIDE, TRANS, m, n, k, A, lda, TAU, C, ldc, WORK, lwork, info);
414 }
415
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) const416 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
417 {
418 // LAPACK only defines UNM2R for Z and C (complex*8
419 // resp. complex*16), but logically, UNM2R means the same thing as
420 // ORM2R for real arithmetic.
421 ORM2R (SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, INFO);
422 }
423
424
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) const425 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
426 { SORGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info); }
427
428
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) const429 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
430 { SORGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info); }
431
432
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) const433 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
434 { SORGHR_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info); }
435
436
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) const437 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
438 { SORMHR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &ilo, &ihi, A, &lda, TAU, C, &ldc, WORK, &lwork, info); }
439
440
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) const441 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
442 { STREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), select, &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, info); }
443
444
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 *,int * info) const445 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
446 {
447 std::vector<int> select(1);
448 const char whch = 'A';
449 STREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(whch), &select[0], &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, info);
450 }
451
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) const452 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
453 { STREXC_F77(CHAR_MACRO(COMPQ), &n, T, &ldt, Q, &ldq, ifst, ilst, WORK, info); }
454
455
TGEVC(const char & SIDE,const char & HOWMNY,const int * SELECT,const int & n,float * S,const int & lds,float * P,const int & ldp,float * VL,const int & ldvl,float * VR,const int & ldvr,const int & mm,int * M,float * WORK,int * info) const456 void LAPACK<int, float>::TGEVC(const char& SIDE, const char& HOWMNY, const int* SELECT, const int& n, float* S, const int& lds, 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
457 { STGEVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), SELECT, &n, S, &lds, P, &ldp, VL, &ldvl, VR, &ldvr, &mm, M, WORK, info); }
458
459
LARTG(const float & f,const float & g,float * c,float * s,float * r) const460 void LAPACK<int, float>::LARTG( const float& f, const float& g, float* c, float* s, float* r ) const
461 { SLARTG_F77(&f, &g, c, s, r); }
462
463
LARFG(const int & n,float * alpha,float * x,const int & incx,float * tau) const464 void LAPACK<int, float>::LARFG( const int& n, float* alpha, float* x, const int& incx, float* tau ) const
465 { SLARFG_F77(&n, alpha, x, &incx, tau); }
466
GEBAL(const char & JOBZ,const int & n,float * A,const int & lda,int * ilo,int * ihi,float * scale,int * info) const467 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
468 { SGEBAL_F77(CHAR_MACRO(JOBZ),&n, A, &lda, ilo, ihi, scale, info); }
469
470
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) const471 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
472 { SGEBAK_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(SIDE), &n, &ilo, &ihi, scale, &m, V, &ldv, info); }
473
474 #ifdef HAVE_TEUCHOS_LAPACKLARND
LARND(const int & idist,int * seed) const475 float LAPACK<int, float>::LARND( const int& idist, int* seed ) const
476 { return(SLARND_F77(&idist, seed)); }
477 #endif
478
LARNV(const int & idist,int * seed,const int & n,float * v) const479 void LAPACK<int, float>::LARNV( const int& idist, int* seed, const int& n, float* v ) const
480 { SLARNV_F77(&idist, seed, &n, v); }
481
482
LAMCH(const char & CMACH) const483 float LAPACK<int, float>::LAMCH(const char& CMACH) const
484 { return(SLAMCH_F77(CHAR_MACRO(CMACH))); }
485
486
ILAENV(const int & ispec,const std::string & NAME,const std::string & OPTS,const int & N1,const int & N2,const int & N3,const int & N4) const487 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
488 {
489 unsigned int opts_length = OPTS.length();
490 // if user queries a Hermitian routine, change it to a symmetric routine
491 std::string temp_NAME = "s" + NAME;
492 if (temp_NAME.substr(1,2) == "he") {
493 temp_NAME.replace(1,2,"sy");
494 }
495 unsigned int name_length = temp_NAME.length();
496 return ilaenv_wrapper(&ispec, &temp_NAME[0], name_length, &OPTS[0], opts_length, &N1, &N2, &N3, &N4);
497 }
498
499
LAPY2(const float & x,const float & y) const500 float LAPACK<int, float>::LAPY2(const float& x, const float& y) const
501 {
502 #if defined(HAVE_TEUCHOS_BLASFLOAT)
503 return SLAPY2_F77(&x, &y);
504 #else
505 typedef ScalarTraits<float> ST;
506 const float xabs = ST::magnitude(x);
507 const float yabs = ST::magnitude(y);
508 const float w = TEUCHOS_MAX(xabs, yabs);
509 const float z = TEUCHOS_MIN(xabs, yabs);
510 if ( z == 0.0 ) {
511 return w;
512 }
513 const float z_over_w = z/w;
514 return w*ST::squareroot( 1.0+(z_over_w*z_over_w));
515 #endif
516 }
517
518 // END INT, FLOAT SPECIALIZATION IMPLEMENTATION //
519
520 // BEGIN INT, DOUBLE SPECIALIZATION IMPLEMENTATION //
521
522
523
PTTRF(const int & n,double * d,double * e,int * info) const524 void LAPACK<int, double>::PTTRF(const int& n, double* d, double* e, int* info) const
525 { DPTTRF_F77(&n,d,e,info); }
526
527
PTTRS(const int & n,const int & nrhs,const double * d,const double * e,double * B,const int & ldb,int * info) const528 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
529 { DPTTRS_F77(&n,&nrhs,d,e,B,&ldb,info); }
530
531
POTRF(const char & UPLO,const int & n,double * A,const int & lda,int * info) const532 void LAPACK<int, double>::POTRF(const char& UPLO, const int& n, double* A, const int& lda, int* info) const
533 { DPOTRF_F77(CHAR_MACRO(UPLO), &n, A, &lda, info); }
534
535
POTRS(const char & UPLO,const int & n,const int & nrhs,const double * A,const int & lda,double * B,const int & ldb,int * info) const536 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
537 { DPOTRS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info); }
538
539
POTRI(const char & UPLO,const int & n,double * A,const int & lda,int * info) const540 void LAPACK<int, double>::POTRI(const char& UPLO, const int& n, double* A, const int& lda, int* info) const
541 { DPOTRI_F77(CHAR_MACRO(UPLO), &n, A, &lda, info); }
542
543
POCON(const char & UPLO,const int & n,const double * A,const int & lda,const double & anorm,double * rcond,double * WORK,int * IWORK,int * info) const544 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
545 { DPOCON_F77(CHAR_MACRO(UPLO), &n, A, &lda, &anorm, rcond, WORK, IWORK, info); }
546
547
POSV(const char & UPLO,const int & n,const int & nrhs,double * A,const int & lda,double * B,const int & ldb,int * info) const548 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
549 { DPOSV_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info); }
550
551
POEQU(const int & n,const double * A,const int & lda,double * S,double * scond,double * amax,int * info) const552 void LAPACK<int, double>::POEQU(const int& n, const double* A, const int& lda, double* S, double* scond, double* amax, int* info) const
553 { DPOEQU_F77(&n, A, &lda, S, scond, amax, info); }
554
555
PORFS(const char & UPLO,const int & n,const int & nrhs,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) const556 void LAPACK<int, double>::PORFS(const char& UPLO, const int& n, const int& nrhs, 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
557 { DPORFS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, B, &ldb, X, &ldx, FERR, BERR, WORK, IWORK, info); }
558
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) const559 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
560 { 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); }
561
562
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) const563 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
564 { DGELS_F77(CHAR_MACRO(TRANS), &m, &n, &nrhs, A, &lda, B, &ldb, WORK, &lwork, info); }
565
566
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) const567 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
568 {
569 (void) rwork;
570 DGELSS_F77(&m, &n, &nrhs, A, &lda, B, &ldb, S, &rcond, rank, WORK, &lwork, info);
571 }
572
573
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) const574 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
575 { DGELSS_F77(&m, &n, &nrhs, A, &lda, B, &ldb, S, &rcond, rank, WORK, &lwork, info); }
576
577
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) const578 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
579 { DGGLSE_F77(&m, &n, &p, A, &lda, B, &ldb, C, D, X, WORK, &lwork, info); }
580
581
GEQRF(const int & m,const int & n,double * A,const int & lda,double * TAU,double * WORK,const int & lwork,int * info) const582 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
583 { DGEQRF_F77(&m, &n, A, &lda, TAU, WORK, &lwork, info); }
584
GEQR2(const int & m,const int & n,double A[],const int & lda,double TAU[],double WORK[],int * const info) const585 void LAPACK<int,double>::GEQR2 (const int& m, const int& n, double A[], const int& lda, double TAU[], double WORK[], int* const info) const
586 {
587 DGEQR2_F77(&m, &n, A, &lda, TAU, WORK, info);
588 }
589
GETRF(const int & m,const int & n,double * A,const int & lda,int * IPIV,int * info) const590 void LAPACK<int,double>::GETRF(const int& m, const int& n, double* A, const int& lda, int* IPIV, int* info) const
591 { DGETRF_F77(&m, &n, A, &lda, IPIV, info); }
592
593
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) const594 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
595 { DGETRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, IPIV, B, &ldb, info); }
596
597
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) const598 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
599 { DLASCL_F77(CHAR_MACRO(TYPE), &kl, &ku, &cfrom, &cto, &m, &n, A, &lda, info); }
600
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) const601 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
602 {
603 (void) RWORK;
604 DGEQP3_F77(&m, &n, A, &lda, jpvt, TAU, WORK, &lwork, info);
605 }
606
607 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) const608 LASWP (const int& N,
609 double A[],
610 const int& LDA,
611 const int& K1,
612 const int& K2,
613 const int IPIV[],
614 const int& INCX) const
615 {
616 DLASWP_F77(&N, A, &LDA, &K1, &K2, IPIV, &INCX);
617 }
618
GBTRF(const int & m,const int & n,const int & kl,const int & ku,double * A,const int & lda,int * IPIV,int * info) const619 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
620 { DGBTRF_F77(&m, &n, &kl, &ku, A, &lda, IPIV, info); }
621
622
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) const623 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
624 { DGBTRS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, A, &lda, IPIV, B, &ldb, info); }
625
626
GTTRF(const int & n,double * dl,double * d,double * du,double * du2,int * IPIV,int * info) const627 void LAPACK<int,double>::GTTRF(const int& n, double* dl, double* d, double* du, double* du2, int* IPIV, int* info) const
628 { DGTTRF_F77(&n, dl, d, du, du2, IPIV, info); }
629
630
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) const631 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
632 { DGTTRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, dl, d, du, du2, IPIV, B, &ldb, info); }
633
634
GETRI(const int & n,double * A,const int & lda,const int * IPIV,double * WORK,const int & lwork,int * info) const635 void LAPACK<int,double>::GETRI(const int& n, double* A, const int& lda, const int* IPIV, double* WORK, const int& lwork, int* info) const
636 { DGETRI_F77(&n, A, &lda, IPIV, WORK, &lwork, info); }
637
638 void
LATRS(const char & UPLO,const char & TRANS,const char & DIAG,const char & NORMIN,const int & N,double * A,const int & LDA,double * X,double * SCALE,double * CNORM,int * INFO) const639 LAPACK<int, double>::LATRS (const char& UPLO,
640 const char& TRANS,
641 const char& DIAG,
642 const char& NORMIN,
643 const int& N,
644 double* A,
645 const int& LDA,
646 double* X,
647 double* SCALE,
648 double* CNORM,
649 int* INFO) const
650 {
651 DLATRS_F77(CHAR_MACRO(UPLO),
652 CHAR_MACRO(TRANS),
653 CHAR_MACRO(DIAG),
654 CHAR_MACRO(NORMIN),
655 &N,
656 A,
657 &LDA,
658 X,
659 SCALE,
660 CNORM,
661 INFO);
662 }
663
GECON(const char & NORM,const int & n,const double * A,const int & lda,const double & anorm,double * rcond,double * WORK,int * IWORK,int * info) const664 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
665 { DGECON_F77(CHAR_MACRO(NORM), &n, A, &lda, &anorm, rcond, WORK, IWORK, info); }
666
667
GBCON(const char & NORM,const int & n,const int & kl,const int & ku,const double * A,const int & lda,int * IPIV,const double & anorm,double * rcond,double * WORK,int * IWORK,int * info) const668 void LAPACK<int,double>::GBCON(const char& NORM, const int& n, const int& kl, const int& ku, const double* A, const int& lda, int* IPIV, const double& anorm, double* rcond, double* WORK, int* IWORK, int* info) const
669 { DGBCON_F77(CHAR_MACRO(NORM), &n, &kl, &ku, A, &lda, IPIV, &anorm, rcond, WORK, IWORK, info); }
670
671
LANGB(const char & NORM,const int & n,const int & kl,const int & ku,const double * A,const int & lda,double * WORK) const672 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
673 { return( DLANGB_F77(CHAR_MACRO(NORM), &n, &kl, &ku, A, &lda, WORK) ); }
674
675
GESV(const int & n,const int & nrhs,double * A,const int & lda,int * IPIV,double * B,const int & ldb,int * info) const676 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
677 { DGESV_F77(&n, &nrhs, A, &lda, IPIV, B, &ldb, info); }
678
679
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) const680 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
681 { DGEEQU_F77(&m, &n, A, &lda, R, C, rowcond, colcond, amax, info); }
682
683
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) const684 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
685 { DGERFS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, IWORK, info); }
686
687
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) const688 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
689 { DGBEQU_F77(&m, &n, &kl, &ku, A, &lda, R, C, rowcond, colcond, amax, info); }
690
691
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) const692 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
693 { DGBRFS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, IWORK, info); }
694
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) const695 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
696 { 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); }
697
698
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) const699 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
700 { DSYTRD_F77(CHAR_MACRO(UPLO), &n, A, &lda, D, E, TAU, WORK, &lwork, info); }
701
702
GEHRD(const int & n,const int & ilo,const int & ihi,double * A,const int & lda,double * TAU,double * WORK,const int & lwork,int * info) const703 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
704 { DGEHRD_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info); }
705
706
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) const707 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
708 { DTRTRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), &n, &nrhs, A, &lda, B, &ldb, info); }
709
710
TRTRI(const char & UPLO,const char & DIAG,const int & n,const double * A,const int & lda,int * info) const711 void LAPACK<int,double>::TRTRI(const char& UPLO, const char& DIAG, const int& n, const double* A, const int& lda, int* info) const
712 { DTRTRI_F77(CHAR_MACRO(UPLO), CHAR_MACRO(DIAG), &n, A, &lda, info); }
713
714
SPEV(const char & JOBZ,const char & UPLO,const int & n,double * AP,double * W,double * Z,const int & ldz,double * WORK,int * info) const715 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
716 { DSPEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, AP, W, Z, &ldz, WORK, info); }
717
718
SYEV(const char & JOBZ,const char & UPLO,const int & n,double * A,const int & lda,double * W,double * WORK,const int & lwork,int * info) const719 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
720 {
721 DSYEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, info);
722 }
723
724
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) const725 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
726 {
727 DSYGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, info);
728 }
729
730
HEEV(const char & JOBZ,const char & UPLO,const int & n,double * A,const int & lda,double * W,double * WORK,const int & lwork,double *,int * info) const731 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
732 {
733 DSYEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, info);
734 }
735
736
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 *,int * info) const737 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
738 {
739 DSYGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, info);
740 }
741
742
STEQR(const char & COMPZ,const int & n,double * D,double * E,double * Z,const int & ldz,double * WORK,int * info) const743 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
744 { DSTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info); }
745
746
PTEQR(const char & COMPZ,const int & n,double * D,double * E,double * Z,const int & ldz,double * WORK,int * info) const747 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
748 { DPTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info); }
749
750
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) const751 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
752 {
753 DHSEQR_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPZ), &n, &ilo, &ihi, H, &ldh, WR, WI, Z, &ldz, WORK, &lwork, info);
754 }
755
756
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) const757 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
758 {
759 DGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(SORT), ptr2func, &n, A, &lda, sdim, WR, WI, VS, &ldvs, WORK, &lwork, BWORK, info);
760 }
761
762
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 *,int * BWORK,int * info) const763 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
764 {
765 //int (*nullfptr)(double*,double*) = NULL;
766 gees_nullfptr_t nullfptr = 0;
767 const char sort = 'N';
768 DGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(sort), nullfptr, &n, A, &lda, sdim, WR, WI, VS, &ldvs, WORK, &lwork, BWORK, info);
769 }
770
771
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) const772 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
773 {
774 DGEEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, WR, WI, VL, &ldvl, VR, &ldvr, WORK, &lwork, info);
775 }
776
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 *,int * info) const777 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
778 {
779 GEEV (JOBVL, JOBVR, n, A, lda, WR, WI, VL, ldvl, VR, ldvr, WORK, lwork, info);
780 }
781
782
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 *,int * info) const783 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 {
784 DGESVD_F77(CHAR_MACRO(JOBU), CHAR_MACRO(JOBVT), &m, &n, A, &lda, S, U, &ldu, V, &ldv, WORK, &lwork, info);
785 }
786
787
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) const788 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
789 {
790 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);
791 }
792
793
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) const794 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
795 {
796 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);
797 }
798
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 *,int * IWORK,int * BWORK,int * info) const799 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
800 {
801 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);
802 }
803
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) const804 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
805 {
806 DGGEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, B, &ldb, ALPHAR, ALPHAI, BETA, VL, &ldvl, VR, &ldvr, WORK, &lwork, info);
807 }
808
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) const809 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
810 { DTRSEN_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPQ), SELECT, &n, T, &ldt, Q, &ldq, WR, WI, M, S, SEP, WORK, &lwork, IWORK, &liwork, info); }
811
812
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) const813 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
814 { 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); }
815
816
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) const817 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
818 { 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); }
819
820
ORMQR(const char & SIDE,const char & TRANS,const int & m,const int & n,const int & k,double * A,const int & lda,const double * TAU,double * C,const int & ldc,double * WORK,const int & lwork,int * info) const821 void LAPACK<int, double>::ORMQR(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, double* A, const int& lda, const double* TAU, double* C, const int& ldc, double* WORK, const int& lwork, int* info) const
822 {
823 DORMQR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &k, A, &lda, TAU, C, &ldc, WORK, &lwork, info);
824 }
825
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) const826 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
827 {
828 DORM2R_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &k, A, &lda, TAU, C, &ldc, WORK, info);
829 }
830
UNMQR(const char & SIDE,const char & TRANS,const int & m,const int & n,const int & k,double * A,const int & lda,const double * TAU,double * C,const int & ldc,double * WORK,const int & lwork,int * info) const831 void LAPACK<int, double>::UNMQR(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, double* A, const int& lda, const double* TAU, double* C, const int& ldc, double* WORK, const int& lwork, int* info) const
832 {
833 // LAPACK only defines UNMQR for Z and C (complex*8
834 // resp. complex*16), but logically, UNMQR means the same thing as
835 // ORMQR for real arithmetic.
836 ORMQR (SIDE, TRANS, m, n, k, A, lda, TAU, C, ldc, WORK, lwork, info);
837 }
838
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) const839 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
840 {
841 // LAPACK only defines UNM2R for Z and C (complex*8
842 // resp. complex*16), but logically, UNM2R means the same thing as
843 // ORM2R for real arithmetic.
844 ORM2R (SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, INFO);
845 }
846
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) const847 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
848 {
849 DORGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info);
850 }
851
852
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) const853 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
854 {
855 DORGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info);
856 }
857
858
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) const859 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
860 {
861 DORGHR_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info);
862 }
863
864
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) const865 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
866 {
867 DORMHR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &ilo, &ihi, A, &lda, TAU, C, &ldc, WORK, &lwork, info);
868 }
869
870
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) const871 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
872 {
873 DTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), select, &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, info);
874 }
875
876
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 *,int * info) const877 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
878 {
879 std::vector<int> select(1);
880 const char whch = 'A';
881 DTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(whch), &select[0], &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, info);
882 }
883
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) const884 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
885 {
886 DTREXC_F77(CHAR_MACRO(COMPQ), &n, T, &ldt, Q, &ldq, ifst, ilst, WORK, info);
887 }
888
889
TGEVC(const char & SIDE,const char & HOWMNY,const int * SELECT,const int & n,double * S,const int & lds,double * P,const int & ldp,double * VL,const int & ldvl,double * VR,const int & ldvr,const int & mm,int * M,double * WORK,int * info) const890 void LAPACK<int, double>::TGEVC(const char& SIDE, const char& HOWMNY, const int* SELECT, const int& n, double* S, const int& lds, 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
891 { DTGEVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), SELECT, &n, S, &lds, P, &ldp, VL, &ldvl, VR, &ldvr, &mm, M, WORK, info); }
892
893
LARTG(const double & f,const double & g,double * c,double * s,double * r) const894 void LAPACK<int, double>::LARTG( const double& f, const double& g, double* c, double* s, double* r ) const
895 {
896 DLARTG_F77(&f, &g, c, s, r);
897 }
898
899
LARFG(const int & n,double * alpha,double * x,const int & incx,double * tau) const900 void LAPACK<int, double>::LARFG( const int& n, double* alpha, double* x, const int& incx, double* tau ) const
901 {
902 DLARFG_F77(&n, alpha, x, &incx, tau);
903 }
904
GEBAL(const char & JOBZ,const int & n,double * A,const int & lda,int * ilo,int * ihi,double * scale,int * info) const905 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
906 {
907 DGEBAL_F77(CHAR_MACRO(JOBZ),&n, A, &lda, ilo, ihi, scale, info);
908 }
909
910
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) const911 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
912 {
913 DGEBAK_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(SIDE), &n, &ilo, &ihi, scale, &m, V, &ldv, info);
914 }
915
916
917 #ifdef HAVE_TEUCHOS_LAPACKLARND
LARND(const int & idist,int * seed) const918 double LAPACK<int, double>::LARND( const int& idist, int* seed ) const
919 {
920 return(DLARND_F77(&idist, seed));
921 }
922 #endif
923
LARNV(const int & idist,int * seed,const int & n,double * v) const924 void LAPACK<int, double>::LARNV( const int& idist, int* seed, const int& n, double* v ) const
925 {
926 DLARNV_F77(&idist, seed, &n, v);
927 }
928
929
LAMCH(const char & CMACH) const930 double LAPACK<int, double>::LAMCH(const char& CMACH) const
931 {
932 return(DLAMCH_F77(CHAR_MACRO(CMACH)));
933 }
934
935
ILAENV(const int & ispec,const std::string & NAME,const std::string & OPTS,const int & N1,const int & N2,const int & N3,const int & N4) const936 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
937 {
938 unsigned int opts_length = OPTS.length();
939 // if user queries a Hermitian routine, change it to a symmetric routine
940 std::string temp_NAME = "d" + NAME;
941 if (temp_NAME.substr(1,2) == "he") {
942 temp_NAME.replace(1,2,"sy");
943 }
944 unsigned int name_length = temp_NAME.length();
945 return ilaenv_wrapper(&ispec, &temp_NAME[0], name_length, &OPTS[0], opts_length, &N1, &N2, &N3, &N4);
946 }
947
948
LAPY2(const double & x,const double & y) const949 double LAPACK<int, double>::LAPY2(const double& x, const double& y) const
950 {
951 return DLAPY2_F77(&x, &y);
952 }
953
954 // END INT, DOUBLE SPECIALIZATION IMPLEMENTATION //
955
956 #ifdef HAVE_TEUCHOS_COMPLEX
957
958 // BEGIN INT, COMPLEX<FLOAT> SPECIALIZATION IMPLEMENTATION //
959
960
PTTRF(const int & n,std::complex<float> * d,std::complex<float> * e,int * info) const961 void LAPACK<int, std::complex<float> >::PTTRF(const int& n, std::complex<float>* d, std::complex<float>* e, int* info) const
962 {
963 CPTTRF_F77(&n,d,e,info);
964 }
965
966
PTTRS(const int & n,const int & nrhs,const std::complex<float> * d,const std::complex<float> * e,std::complex<float> * B,const int & ldb,int * info) const967 void LAPACK<int, std::complex<float> >::PTTRS(const int& n, const int& nrhs, const std::complex<float>* d, const std::complex<float>* e, std::complex<float>* B, const int& ldb, int* info) const
968 {
969 CPTTRS_F77(&n,&nrhs,d,e,B,&ldb,info);
970 }
971
972
POTRF(const char & UPLO,const int & n,std::complex<float> * A,const int & lda,int * info) const973 void LAPACK<int, std::complex<float> >::POTRF(const char& UPLO, const int& n, std::complex<float>* A, const int& lda, int* info) const
974 {
975 CPOTRF_F77(CHAR_MACRO(UPLO), &n, A, &lda, info);
976 }
977
978
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) const979 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
980 {
981 CPOTRS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info);
982 }
983
984
POTRI(const char & UPLO,const int & n,std::complex<float> * A,const int & lda,int * info) const985 void LAPACK<int, std::complex<float> >::POTRI(const char& UPLO, const int& n, std::complex<float>* A, const int& lda, int* info) const
986 {
987 CPOTRI_F77(CHAR_MACRO(UPLO), &n, A, &lda, info);
988 }
989
990
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) const991 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
992 {
993 CPOCON_F77(CHAR_MACRO(UPLO), &n, A, &lda, &anorm, rcond, WORK, RWORK, info);
994 }
995
996
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) const997 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
998 {
999 CPOSV_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info);
1000 }
1001
1002
POEQU(const int & n,const std::complex<float> * A,const int & lda,float * S,float * scond,float * amax,int * info) const1003 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
1004 {
1005 CPOEQU_F77(&n, A, &lda, S, scond, amax, info);
1006 }
1007
1008
PORFS(const char & UPLO,const int & n,const int & nrhs,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) const1009 void LAPACK<int, std::complex<float> >::PORFS(const char& UPLO, const int& n, const int& nrhs, 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
1010 {
1011 CPORFS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, B, &ldb, X, &ldx, FERR, BERR, WORK, RWORK, info);
1012 }
1013
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) const1014 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
1015 {
1016 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);
1017 }
1018
1019
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) const1020 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
1021 {
1022 CGELS_F77(CHAR_MACRO(TRANS), &m, &n, &nrhs, A, &lda, B, &ldb, WORK, &lwork, info);
1023 }
1024
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) const1025 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
1026 {
1027 CGELSS_F77(&m, &n, &nrhs, A, &lda, B, &ldb, S, &rcond, rank, WORK, &lwork, rwork, info);
1028 }
1029
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) const1030 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
1031 {
1032 CGEQRF_F77(&m, &n, A, &lda, TAU, WORK, &lwork, info);
1033 }
1034
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) const1035 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
1036 {
1037 CGEQR2_F77(&m, &n, A, &lda, TAU, WORK, info);
1038 }
1039
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) const1040 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
1041 {
1042 CUNGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info);
1043 }
1044
UNMQR(const char & SIDE,const char & TRANS,const int & m,const int & n,const int & k,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) const1045 void LAPACK<int,std::complex<float> >::UNMQR(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, 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
1046 {
1047 CUNMQR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &k, A, &lda, TAU, C, &ldc, WORK, &lwork, info);
1048 }
1049
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) const1050 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
1051 {
1052 CUNM2R_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &M, &N, &K, A, &LDA, TAU, C, &LDC, WORK, INFO);
1053 }
1054
GETRF(const int & m,const int & n,std::complex<float> * A,const int & lda,int * IPIV,int * info) const1055 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
1056 {
1057 CGETRF_F77(&m, &n, A, &lda, IPIV, info);
1058 }
1059
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) const1060 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
1061 {
1062 CGETRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, IPIV, B, &ldb, info);
1063 }
1064
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) const1065 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
1066 { CLASCL_F77(CHAR_MACRO(TYPE), &kl, &ku, &cfrom, &cto, &m, &n, A, &lda, info); }
1067
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) const1068 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
1069 {
1070 CGEQP3_F77(&m, &n, A, &lda, jpvt, TAU, WORK, &lwork, RWORK, info);
1071 }
1072
1073 void LAPACK<int, std::complex<float> >::
LASWP(const int & N,std::complex<float> A[],const int & LDA,const int & K1,const int & K2,const int IPIV[],const int & INCX) const1074 LASWP (const int& N,
1075 std::complex<float> A[],
1076 const int& LDA,
1077 const int& K1,
1078 const int& K2,
1079 const int IPIV[],
1080 const int& INCX) const
1081 {
1082 CLASWP_F77(&N, A, &LDA, &K1, &K2, IPIV, &INCX);
1083 }
1084
GBTRF(const int & m,const int & n,const int & kl,const int & ku,std::complex<float> * A,const int & lda,int * IPIV,int * info) const1085 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
1086 {
1087 CGBTRF_F77(&m, &kl, &ku, &n, A, &lda, IPIV, info);
1088 }
1089
1090
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) const1091 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
1092 {
1093 CGBTRS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, A, &lda, IPIV, B, &ldb, info);
1094 }
1095
1096
GTTRF(const int & n,std::complex<float> * dl,std::complex<float> * d,std::complex<float> * du,std::complex<float> * du2,int * IPIV,int * info) const1097 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
1098 {
1099 CGTTRF_F77(&n, dl, d, du, du2, IPIV, info);
1100 }
1101
1102
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) const1103 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
1104 {
1105 CGTTRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, dl, d, du, du2, IPIV, B, &ldb, info);
1106 }
1107
1108
GETRI(const int & n,std::complex<float> * A,const int & lda,const int * IPIV,std::complex<float> * WORK,const int & lwork,int * info) const1109 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
1110 {
1111 CGETRI_F77(&n, A, &lda, IPIV, WORK, &lwork, info);
1112 }
1113
1114
1115 void
LATRS(const char & UPLO,const char & TRANS,const char & DIAG,const char & NORMIN,const int & N,std::complex<float> * A,const int & LDA,std::complex<float> * X,float * SCALE,float * CNORM,int * INFO) const1116 LAPACK<int, std::complex<float> >::LATRS (const char& UPLO,
1117 const char& TRANS,
1118 const char& DIAG,
1119 const char& NORMIN,
1120 const int& N,
1121 std::complex<float>* A,
1122 const int& LDA,
1123 std::complex<float>* X,
1124 float* SCALE,
1125 float* CNORM,
1126 int* INFO) const
1127 {
1128 CLATRS_F77(CHAR_MACRO(UPLO),
1129 CHAR_MACRO(TRANS),
1130 CHAR_MACRO(DIAG),
1131 CHAR_MACRO(NORMIN),
1132 &N,
1133 A,
1134 &LDA,
1135 X,
1136 SCALE,
1137 CNORM,
1138 INFO);
1139 }
1140
1141
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) const1142 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
1143 {
1144 CGECON_F77(CHAR_MACRO(NORM), &n, A, &lda, &anorm, rcond, WORK, RWORK, info);
1145 }
1146
1147
GBCON(const char & NORM,const int & n,const int & kl,const int & ku,const std::complex<float> * A,const int & lda,int * IPIV,const float & anorm,float * rcond,std::complex<float> * WORK,float * RWORK,int * info) const1148 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, int* IPIV, const float& anorm, float* rcond, std::complex<float>* WORK, float* RWORK, int* info) const
1149 {
1150 CGBCON_F77(CHAR_MACRO(NORM), &n, &kl, &ku, A, &lda, IPIV, &anorm, rcond, WORK, RWORK, info);
1151 }
1152
1153
LANGB(const char & NORM,const int & n,const int & kl,const int & ku,const std::complex<float> * A,const int & lda,float * WORK) const1154 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
1155 {
1156 return( CLANGB_F77(CHAR_MACRO(NORM), &n, &kl, &ku, A, &lda, WORK) );
1157 }
1158
1159
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) const1160 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
1161 {
1162 CGESV_F77(&n, &nrhs, A, &lda, IPIV, B, &ldb, info);
1163 }
1164
1165
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) const1166 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
1167 {
1168 CGEEQU_F77(&m, &n, A, &lda, R, C, rowcond, colcond, amax, info);
1169 }
1170
1171
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) const1172 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
1173 {
1174 CGERFS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, RWORK, info);
1175 }
1176
1177
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) const1178 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
1179 {
1180 CGBEQU_F77(&m, &n, &kl, &ku, A, &lda, R, C, rowcond, colcond, amax, info);
1181 }
1182
1183
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) const1184 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
1185 {
1186 CGBRFS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, RWORK, info);
1187 }
1188
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) const1189 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
1190 {
1191 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);
1192 }
1193
1194
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) const1195 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
1196 {
1197 CGEHRD_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info);
1198 }
1199
1200
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) const1201 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
1202 {
1203 CTRTRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), &n, &nrhs, A, &lda, B, &ldb, info);
1204 }
1205
1206
TRTRI(const char & UPLO,const char & DIAG,const int & n,const std::complex<float> * A,const int & lda,int * info) const1207 void LAPACK<int,std::complex<float> >::TRTRI(const char& UPLO, const char& DIAG, const int& n, const std::complex<float>* A, const int& lda, int* info) const
1208 {
1209 CTRTRI_F77(CHAR_MACRO(UPLO), CHAR_MACRO(DIAG), &n, A, &lda, info);
1210 }
1211
1212
STEQR(const char & COMPZ,const int & n,float * D,float * E,std::complex<float> * Z,const int & ldz,float * WORK,int * info) const1213 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
1214 {
1215 CSTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info);
1216 }
1217
1218
PTEQR(const char & COMPZ,const int & n,float * D,float * E,std::complex<float> * Z,const int & ldz,float * WORK,int * info) const1219 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
1220 {
1221 CPTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info);
1222 }
1223
1224
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) const1225 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
1226 {
1227 CHEEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, RWORK, info);
1228 }
1229
1230
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) const1231 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
1232 {
1233 CHEGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, RWORK, info);
1234 }
1235
1236
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) const1237 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
1238 {
1239 CHSEQR_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPZ), &n, &ilo, &ihi, H, &ldh, W, Z, &ldz, WORK, &lwork, info);
1240 }
1241
1242
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) const1243 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
1244 {
1245 CGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(SORT), ptr2func, &n, A, &lda, sdim, W, VS, &ldvs, WORK, &lwork, RWORK, BWORK, info);
1246 }
1247
1248
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) const1249 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
1250 {
1251 int (*nullfptr)(std::complex<float>*) = NULL;
1252 std::vector< std::complex<float> > W(n);
1253 const char sort = 'N';
1254 CGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(sort), nullfptr, &n, A, &lda, sdim, &W[0], VS, &ldvs, WORK, &lwork, RWORK, BWORK, info);
1255 for (int i=0; i<n; i++) {
1256 WR[i] = W[i].real();
1257 WI[i] = W[i].imag();
1258 }
1259 }
1260
1261
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) const1262 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
1263 {
1264 CGEEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, W, VL, &ldvl, VR, &ldvr, WORK, &lwork, RWORK, info);
1265 }
1266
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) const1267 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
1268 {
1269 std::vector<std::complex<float> > w (n);
1270 std::complex<float>* w_rawPtr = (n == 0) ? NULL : &w[0];
1271 GEEV (JOBVL, JOBVR, n, A, lda, w_rawPtr, VL, ldvl, VR, ldvr, WORK, lwork, RWORK, info);
1272 if (*info == 0) {
1273 // The eigenvalues are only valid on output if INFO is zero.
1274 // Otherwise, we shouldn't even write to WR or WI.
1275 for (int k = 0; k < n; ++k) {
1276 WR[k] = w[k].real ();
1277 WI[k] = w[k].imag ();
1278 }
1279 }
1280 }
1281
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) const1282 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 {
1283 CGESVD_F77(CHAR_MACRO(JOBU), CHAR_MACRO(JOBVT), &m, &n, A, &lda, S, U, &ldu, V, &ldv, WORK, &lwork, RWORK, info);
1284 }
1285
1286
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) const1287 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
1288 {
1289 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);
1290 }
1291
1292
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) const1293 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
1294 {
1295 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);
1296 }
1297
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) const1298 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
1299 {
1300 std::vector<std::complex<float> > w (n);
1301 std::complex<float>* w_rawPtr = (n == 0) ? NULL : &w[0];
1302 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);
1303 if (*info == 0) {
1304 // The eigenvalues are only valid on output if INFO is zero.
1305 // Otherwise, we shouldn't even write to WR or WI.
1306 for (int k = 0; k < n; ++k) {
1307 ALPHAR[k] = w[k].real ();
1308 ALPHAI[k] = w[k].imag ();
1309 }
1310 }
1311 }
1312
1313
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) const1314 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
1315 {
1316 CTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), select, &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, RWORK, info);
1317 }
1318
1319
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) const1320 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
1321 {
1322 std::vector<int> select(1);
1323 const char& whch = 'A';
1324 CTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(whch), &select[0], &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, RWORK, info);
1325 }
1326
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) const1327 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
1328 {
1329 CTREXC_F77(CHAR_MACRO(COMPQ), &n, T, &ldt, Q, &ldq, ifst, ilst, info);
1330 }
1331
1332
LARTG(const std::complex<float> f,const std::complex<float> g,float * c,std::complex<float> * s,std::complex<float> * r) const1333 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
1334 {
1335 CLARTG_F77(&f, &g, c, s, r);
1336 }
1337
1338
LARFG(const int & n,std::complex<float> * alpha,std::complex<float> * x,const int & incx,std::complex<float> * tau) const1339 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
1340 {
1341 CLARFG_F77(&n, alpha, x, &incx, tau);
1342 }
1343
GEBAL(const char & JOBZ,const int & n,std::complex<float> * A,const int & lda,int * ilo,int * ihi,float * scale,int * info) const1344 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
1345 {
1346 CGEBAL_F77(CHAR_MACRO(JOBZ),&n, A, &lda, ilo, ihi, scale, info);
1347 }
1348
1349
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) const1350 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
1351 {
1352 CGEBAK_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(SIDE), &n, &ilo, &ihi, scale, &m, V, &ldv, info);
1353 }
1354
1355
1356 #ifdef HAVE_TEUCHOS_LAPACKLARND
LARND(const int & idist,int * seed) const1357 std::complex<float> LAPACK<int, std::complex<float> >::LARND( const int& idist, int* seed ) const
1358 {
1359 return(CLARND_F77(&idist, seed));
1360 }
1361 #endif
1362
LARNV(const int & idist,int * seed,const int & n,std::complex<float> * v) const1363 void LAPACK<int, std::complex<float> >::LARNV( const int& idist, int* seed, const int& n, std::complex<float>* v ) const
1364 {
1365 CLARNV_F77(&idist, seed, &n, v);
1366 }
1367
1368
ILAENV(const int & ispec,const std::string & NAME,const std::string & OPTS,const int & N1,const int & N2,const int & N3,const int & N4) const1369 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
1370 {
1371 unsigned int opts_length = OPTS.length();
1372 std::string temp_NAME = "c" + NAME;
1373 unsigned int name_length = temp_NAME.length();
1374 return ilaenv_wrapper(&ispec, &temp_NAME[0], name_length, &OPTS[0], opts_length, &N1, &N2, &N3, &N4);
1375 }
1376
1377 // END INT, COMPLEX<FLOAT> SPECIALIZATION IMPLEMENTATION //
1378
1379 // BEGIN INT, COMPLEX<DOUBLE> SPECIALIZATION IMPLEMENTATION //
1380
1381
PTTRF(const int & n,std::complex<double> * d,std::complex<double> * e,int * info) const1382 void LAPACK<int, std::complex<double> >::PTTRF(const int& n, std::complex<double>* d, std::complex<double>* e, int* info) const
1383 {
1384 ZPTTRF_F77(&n,d,e,info);
1385 }
1386
1387
PTTRS(const int & n,const int & nrhs,const std::complex<double> * d,const std::complex<double> * e,std::complex<double> * B,const int & ldb,int * info) const1388 void LAPACK<int, std::complex<double> >::PTTRS(const int& n, const int& nrhs, const std::complex<double>* d, const std::complex<double>* e, std::complex<double>* B, const int& ldb, int* info) const
1389 {
1390 ZPTTRS_F77(&n,&nrhs,d,e,B,&ldb,info);
1391 }
1392
1393
POTRF(const char & UPLO,const int & n,std::complex<double> * A,const int & lda,int * info) const1394 void LAPACK<int, std::complex<double> >::POTRF(const char& UPLO, const int& n, std::complex<double>* A, const int& lda, int* info) const
1395 {
1396 ZPOTRF_F77(CHAR_MACRO(UPLO), &n, A, &lda, info);
1397 }
1398
1399
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) const1400 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
1401 {
1402 ZPOTRS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info);
1403 }
1404
1405
POTRI(const char & UPLO,const int & n,std::complex<double> * A,const int & lda,int * info) const1406 void LAPACK<int, std::complex<double> >::POTRI(const char& UPLO, const int& n, std::complex<double>* A, const int& lda, int* info) const
1407 {
1408 ZPOTRI_F77(CHAR_MACRO(UPLO), &n, A, &lda, info);
1409 }
1410
1411
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) const1412 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
1413 {
1414 ZPOCON_F77(CHAR_MACRO(UPLO), &n, A, &lda, &anorm, rcond, WORK, RWORK, info);
1415 }
1416
1417
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) const1418 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
1419 {
1420 ZPOSV_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, B, &ldb, info);
1421 }
1422
1423
POEQU(const int & n,const std::complex<double> * A,const int & lda,double * S,double * scond,double * amax,int * info) const1424 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
1425 {
1426 ZPOEQU_F77(&n, A, &lda, S, scond, amax, info);
1427 }
1428
1429
PORFS(const char & UPLO,const int & n,const int & nrhs,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) const1430 void LAPACK<int, std::complex<double> >::PORFS(const char& UPLO, const int& n, const int& nrhs, 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
1431 {
1432 ZPORFS_F77(CHAR_MACRO(UPLO), &n, &nrhs, A, &lda, AF, &ldaf, B, &ldb, X, &ldx, FERR, BERR, WORK, RWORK, info);
1433 }
1434
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) const1435 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
1436 {
1437 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);
1438 }
1439
1440
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) const1441 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
1442 {
1443 ZGELS_F77(CHAR_MACRO(TRANS), &m, &n, &nrhs, A, &lda, B, &ldb, WORK, &lwork, info);
1444 }
1445
1446
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) const1447 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
1448 {
1449 ZGELSS_F77(&m, &n, &nrhs, A, &lda, B, &ldb, S, &rcond, rank, WORK, &lwork, rwork, info);
1450 }
1451
1452
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) const1453 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
1454 {
1455 ZGEQRF_F77(&m, &n, A, &lda, TAU, WORK, &lwork, info);
1456 }
1457
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) const1458 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
1459 {
1460 ZGEQR2_F77(&m, &n, A, &lda, TAU, WORK, info);
1461 }
1462
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) const1463 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
1464 {
1465 ZUNGQR_F77( &m, &n, &k, A, &lda, TAU, WORK, &lwork, info);
1466 }
1467
1468
UNMQR(const char & SIDE,const char & TRANS,const int & m,const int & n,const int & k,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) const1469 void LAPACK<int,std::complex<double> >::UNMQR(const char& SIDE, const char& TRANS, const int& m, const int& n, const int& k, 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
1470 {
1471 ZUNMQR_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &m, &n, &k, A, &lda, TAU, C, &ldc, WORK, &lwork, info);
1472 }
1473
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) const1474 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
1475 {
1476 ZUNM2R_F77(CHAR_MACRO(SIDE), CHAR_MACRO(TRANS), &M, &N, &K, A, &LDA, TAU, C, &LDC, WORK, INFO);
1477 }
1478
GETRF(const int & m,const int & n,std::complex<double> * A,const int & lda,int * IPIV,int * info) const1479 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
1480 {
1481 ZGETRF_F77(&m, &n, A, &lda, IPIV, info);
1482 }
1483
1484
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) const1485 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
1486 {
1487 ZGETRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, IPIV, B, &ldb, info);
1488 }
1489
1490
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) const1491 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
1492 { ZLASCL_F77(CHAR_MACRO(TYPE), &kl, &ku, &cfrom, &cto, &m, &n, A, &lda, info); }
1493
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) const1494 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
1495 {
1496 ZGEQP3_F77(&m, &n, A, &lda, jpvt, TAU, WORK, &lwork, RWORK, info);
1497 }
1498
1499 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) const1500 LASWP (const int& N,
1501 std::complex<double> A[],
1502 const int& LDA,
1503 const int& K1,
1504 const int& K2,
1505 const int IPIV[],
1506 const int& INCX) const
1507 {
1508 ZLASWP_F77(&N, A, &LDA, &K1, &K2, IPIV, &INCX);
1509 }
1510
GBTRF(const int & m,const int & n,const int & kl,const int & ku,std::complex<double> * A,const int & lda,int * IPIV,int * info) const1511 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
1512 {
1513 ZGBTRF_F77(&m, &n, &kl, &ku, A, &lda, IPIV, info);
1514 }
1515
1516
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) const1517 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
1518 {
1519 ZGBTRS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, A, &lda, IPIV, B, &ldb, info);
1520 }
1521
1522
GTTRF(const int & n,std::complex<double> * dl,std::complex<double> * d,std::complex<double> * du,std::complex<double> * du2,int * IPIV,int * info) const1523 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
1524 {
1525 ZGTTRF_F77(&n, dl, d, du, du2, IPIV, info);
1526 }
1527
1528
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) const1529 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
1530 {
1531 ZGTTRS_F77(CHAR_MACRO(TRANS), &n, &nrhs, dl, d, du, du2, IPIV, B, &ldb, info);
1532 }
1533
1534
GETRI(const int & n,std::complex<double> * A,const int & lda,const int * IPIV,std::complex<double> * WORK,const int & lwork,int * info) const1535 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
1536 {
1537 ZGETRI_F77(&n, A, &lda, IPIV, WORK, &lwork, info);
1538 }
1539
1540 void
LATRS(const char & UPLO,const char & TRANS,const char & DIAG,const char & NORMIN,const int & N,std::complex<double> * A,const int & LDA,std::complex<double> * X,double * SCALE,double * CNORM,int * INFO) const1541 LAPACK<int, std::complex<double> >::LATRS (const char& UPLO,
1542 const char& TRANS,
1543 const char& DIAG,
1544 const char& NORMIN,
1545 const int& N,
1546 std::complex<double>* A,
1547 const int& LDA,
1548 std::complex<double>* X,
1549 double* SCALE,
1550 double* CNORM,
1551 int* INFO) const
1552 {
1553 ZLATRS_F77(CHAR_MACRO(UPLO),
1554 CHAR_MACRO(TRANS),
1555 CHAR_MACRO(DIAG),
1556 CHAR_MACRO(NORMIN),
1557 &N,
1558 A,
1559 &LDA,
1560 X,
1561 SCALE,
1562 CNORM,
1563 INFO);
1564 }
1565
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) const1566 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
1567 {
1568 ZGECON_F77(CHAR_MACRO(NORM), &n, A, &lda, &anorm, rcond, WORK, RWORK, info);
1569 }
1570
1571
GBCON(const char & NORM,const int & n,const int & kl,const int & ku,const std::complex<double> * A,const int & lda,int * IPIV,const double & anorm,double * rcond,std::complex<double> * WORK,double * RWORK,int * info) const1572 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, int* IPIV, const double& anorm, double* rcond, std::complex<double>* WORK, double* RWORK, int* info) const
1573 {
1574 ZGBCON_F77(CHAR_MACRO(NORM), &n, &kl, &ku, A, &lda, IPIV, &anorm, rcond, WORK, RWORK, info);
1575 }
1576
1577
LANGB(const char & NORM,const int & n,const int & kl,const int & ku,const std::complex<double> * A,const int & lda,double * WORK) const1578 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
1579 {
1580 return( ZLANGB_F77(CHAR_MACRO(NORM), &n, &kl, &ku, A, &lda, WORK) );
1581 }
1582
1583
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) const1584 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
1585 {
1586 ZGESV_F77(&n, &nrhs, A, &lda, IPIV, B, &ldb, info);
1587 }
1588
1589
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) const1590 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
1591 {
1592 ZGEEQU_F77(&m, &n, A, &lda, R, C, rowcond, colcond, amax, info);
1593 }
1594
1595
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) const1596 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
1597 {
1598 ZGERFS_F77(CHAR_MACRO(TRANS), &n, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, RWORK, info);
1599 }
1600
1601
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) const1602 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
1603 {
1604 ZGBEQU_F77(&m, &n, &kl, &ku, A, &lda, R, C, rowcond, colcond, amax, info);
1605 }
1606
1607
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) const1608 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
1609 {
1610 ZGBRFS_F77(CHAR_MACRO(TRANS), &n, &kl, &ku, &nrhs, A, &lda, AF, &ldaf, IPIV, B, &ldb, X, &ldx, FERR, BERR, WORK, RWORK, info);
1611 }
1612
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) const1613 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
1614 {
1615 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);
1616 }
1617
1618
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) const1619 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
1620 {
1621 ZGEHRD_F77(&n, &ilo, &ihi, A, &lda, TAU, WORK, &lwork, info);
1622 }
1623
1624
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) const1625 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
1626 {
1627 ZTRTRS_F77(CHAR_MACRO(UPLO), CHAR_MACRO(TRANS), CHAR_MACRO(DIAG), &n, &nrhs, A, &lda, B, &ldb, info);
1628 }
1629
1630
TRTRI(const char & UPLO,const char & DIAG,const int & n,const std::complex<double> * A,const int & lda,int * info) const1631 void LAPACK<int,std::complex<double> >::TRTRI(const char& UPLO, const char& DIAG, const int& n, const std::complex<double>* A, const int& lda, int* info) const
1632 {
1633 ZTRTRI_F77(CHAR_MACRO(UPLO), CHAR_MACRO(DIAG), &n, A, &lda, info);
1634 }
1635
1636
STEQR(const char & COMPZ,const int & n,double * D,double * E,std::complex<double> * Z,const int & ldz,double * WORK,int * info) const1637 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
1638 {
1639 ZSTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info);
1640 }
1641
1642
PTEQR(const char & COMPZ,const int & n,double * D,double * E,std::complex<double> * Z,const int & ldz,double * WORK,int * info) const1643 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
1644 {
1645 ZPTEQR_F77(CHAR_MACRO(COMPZ), &n, D, E, Z, &ldz, WORK, info);
1646 }
1647
1648
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) const1649 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
1650 {
1651 ZHEEV_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, W, WORK, &lwork, RWORK, info);
1652 }
1653
1654
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) const1655 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
1656 {
1657 ZHEGV_F77(&itype, CHAR_MACRO(JOBZ), CHAR_MACRO(UPLO), &n, A, &lda, B, &ldb, W, WORK, &lwork, RWORK, info);
1658 }
1659
1660
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) const1661 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
1662 {
1663 ZHSEQR_F77(CHAR_MACRO(JOB), CHAR_MACRO(COMPZ), &n, &ilo, &ihi, H, &ldh, W, Z, &ldz, WORK, &lwork, info);
1664 }
1665
1666
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) const1667 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
1668 {
1669 ZGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(SORT), ptr2func, &n, A, &lda, sdim, W, VS, &ldvs, WORK, &lwork, RWORK, BWORK, info);
1670 }
1671
1672
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) const1673 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
1674 {
1675 int (*nullfptr)(std::complex<double>*) = NULL;
1676 std::vector< std::complex<double> > W(n);
1677 const char sort = 'N';
1678 ZGEES_F77(CHAR_MACRO(JOBVS), CHAR_MACRO(sort), nullfptr, &n, A, &lda, sdim, &W[0], VS, &ldvs, WORK, &lwork, RWORK, BWORK, info);
1679 for (int i=0; i<n; i++) {
1680 WR[i] = W[i].real();
1681 WI[i] = W[i].imag();
1682 }
1683 }
1684
1685
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) const1686 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
1687 {
1688 ZGEEV_F77(CHAR_MACRO(JOBVL), CHAR_MACRO(JOBVR), &n, A, &lda, W, VL, &ldvl, VR, &ldvr, WORK, &lwork, RWORK, info);
1689 }
1690
1691
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) const1692 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
1693 {
1694 std::vector<std::complex<double> > w (n);
1695 std::complex<double>* w_rawPtr = (n == 0) ? NULL : &w[0];
1696 GEEV (JOBVL, JOBVR, n, A, lda, w_rawPtr, VL, ldvl, VR, ldvr, WORK, lwork, RWORK, info);
1697 if (*info == 0) {
1698 // The eigenvalues are only valid on output if INFO is zero.
1699 // Otherwise, we shouldn't even write to WR or WI.
1700 for (int k = 0; k < n; ++k) {
1701 WR[k] = w[k].real ();
1702 WI[k] = w[k].imag ();
1703 }
1704 }
1705 }
1706
1707
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) const1708 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 {
1709 ZGESVD_F77(CHAR_MACRO(JOBU), CHAR_MACRO(JOBVT), &m, &n, A, &lda, S, U, &ldu, V, &ldv, WORK, &lwork, RWORK, info);
1710 }
1711
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) const1712 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
1713 {
1714 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);
1715 }
1716
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) const1717 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
1718 {
1719 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);
1720 }
1721
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) const1722 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
1723 {
1724 std::vector<std::complex<double> > w (n);
1725 std::complex<double>* w_rawPtr = (n == 0) ? NULL : &w[0];
1726 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);
1727 if (*info == 0) {
1728 // The eigenvalues are only valid on output if INFO is zero.
1729 // Otherwise, we shouldn't even write to WR or WI.
1730 for (int k = 0; k < n; ++k) {
1731 ALPHAR[k] = w[k].real ();
1732 ALPHAI[k] = w[k].imag ();
1733 }
1734 }
1735 }
1736
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) const1737 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
1738 {
1739 ZTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(HOWMNY), select, &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, RWORK, info);
1740 }
1741
1742
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) const1743 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
1744 {
1745 std::vector<int> select(1);
1746 const char& whch = 'A';
1747 ZTREVC_F77(CHAR_MACRO(SIDE), CHAR_MACRO(whch), &select[0], &n, T, &ldt, VL, &ldvl, VR, &ldvr, &mm, m, WORK, RWORK, info);
1748 }
1749
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) const1750 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
1751 {
1752 ZTREXC_F77(CHAR_MACRO(COMPQ), &n, T, &ldt, Q, &ldq, ifst, ilst, info);
1753 }
1754
LARTG(const std::complex<double> f,const std::complex<double> g,double * c,std::complex<double> * s,std::complex<double> * r) const1755 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
1756 {
1757 ZLARTG_F77(&f, &g, c, s, r);
1758 }
1759
1760
LARFG(const int & n,std::complex<double> * alpha,std::complex<double> * x,const int & incx,std::complex<double> * tau) const1761 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
1762 {
1763 ZLARFG_F77(&n, alpha, x, &incx, tau);
1764 }
1765
GEBAL(const char & JOBZ,const int & n,std::complex<double> * A,const int & lda,int * ilo,int * ihi,double * scale,int * info) const1766 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
1767 {
1768 ZGEBAL_F77(CHAR_MACRO(JOBZ),&n, A, &lda, ilo, ihi, scale, info);
1769 }
1770
1771
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) const1772 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
1773 {
1774 ZGEBAK_F77(CHAR_MACRO(JOBZ), CHAR_MACRO(SIDE), &n, &ilo, &ihi, scale, &m, V, &ldv, info);
1775 }
1776
1777
1778 #ifdef HAVE_TEUCHOS_LAPACKLARND
LARND(const int & idist,int * seed) const1779 std::complex<double> LAPACK<int, std::complex<double> >::LARND( const int& idist, int* seed ) const
1780 {
1781 return(ZLARND_F77(&idist, seed));
1782 }
1783 #endif
1784
LARNV(const int & idist,int * seed,const int & n,std::complex<double> * v) const1785 void LAPACK<int, std::complex<double> >::LARNV( const int& idist, int* seed, const int& n, std::complex<double>* v ) const
1786 {
1787 ZLARNV_F77(&idist, seed, &n, v);
1788 }
1789
1790
ILAENV(const int & ispec,const std::string & NAME,const std::string & OPTS,const int & N1,const int & N2,const int & N3,const int & N4) const1791 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
1792 {
1793 unsigned int opts_length = OPTS.length();
1794 std::string temp_NAME = "z" + NAME;
1795 unsigned int name_length = temp_NAME.length();
1796 return ilaenv_wrapper(&ispec, &temp_NAME[0], name_length, &OPTS[0], opts_length, &N1, &N2, &N3, &N4);
1797 }
1798
1799 // END INT, COMPLEX<DOUBLE> SPECIALIZATION IMPLEMENTATION //
1800
1801 #endif // HAVE_TEUCHOS_COMPLEX
1802
1803
1804 #ifdef HAVE_TEUCHOSCORE_QUADMATH
1805
1806 // BEGIN int, __float128 SPECIALIZATION IMPLEMENTATION //
1807
1808 void LAPACK<int, __float128>::
GEQRF(const int & m,const int & n,__float128 * A,const int & lda,__float128 * TAU,__float128 * WORK,const int & lwork,int * info) const1809 GEQRF(const int& m, const int& n, __float128* A, const int& lda, __float128* TAU, __float128* WORK, const int& lwork, int* info) const
1810 {
1811 Teuchos::Details::Lapack128 lapack;
1812 lapack.GEQRF (m, n, A, lda, TAU, WORK, lwork, info);
1813 }
1814
1815 void LAPACK<int, __float128>::
GEQR2(const int & m,const int & n,__float128 A[],const int & lda,__float128 TAU[],__float128 WORK[],int * const info) const1816 GEQR2(const int& m, const int& n, __float128 A[], const int& lda, __float128 TAU[], __float128 WORK[], int* const info) const
1817 {
1818 Teuchos::Details::Lapack128 lapack;
1819 lapack.GEQR2 (m, n, A, lda, TAU, WORK, info);
1820 }
1821
1822 void LAPACK<int, __float128>::
GETRF(const int & m,const int & n,__float128 * A,const int & lda,int * IPIV,int * info) const1823 GETRF(const int& m, const int& n, __float128* A, const int& lda, int* IPIV, int* info) const
1824 {
1825 Teuchos::Details::Lapack128 lapack;
1826 lapack.GETRF (m, n, A, lda, IPIV, info);
1827 }
1828
1829 void LAPACK<int, __float128>::
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) const1830 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
1831 {
1832 Teuchos::Details::Lapack128 lapack;
1833 lapack.GETRS (TRANS, n, nrhs, A, lda, IPIV, B, ldb, info);
1834 }
1835
1836 void LAPACK<int, __float128>::
GETRI(const int & n,__float128 * A,const int & lda,const int * IPIV,__float128 * WORK,const int & lwork,int * info) const1837 GETRI (const int& n, __float128* A, const int& lda, const int* IPIV, __float128* WORK, const int& lwork, int* info) const
1838 {
1839 Teuchos::Details::Lapack128 lapack;
1840 lapack.GETRI (n, A, lda, const_cast<int*> (IPIV), WORK, lwork, info);
1841 }
1842
1843 void LAPACK<int, __float128>::
LASWP(const int & N,__float128 A[],const int & LDA,const int & K1,const int & K2,const int IPIV[],const int & INCX) const1844 LASWP (const int& N, __float128 A[], const int& LDA, const int& K1, const int& K2, const int IPIV[], const int& INCX) const
1845 {
1846 Teuchos::Details::Lapack128 lapack;
1847 lapack.LASWP (N, A, LDA, K1, K2, IPIV, INCX);
1848 }
1849
1850 void LAPACK<int, __float128>::
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) const1851 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
1852 {
1853 Teuchos::Details::Lapack128 lapack;
1854 lapack.ORM2R (SIDE, TRANS, m, n, k, A, lda, TAU, C, ldc, WORK, info);
1855 }
1856
1857 void LAPACK<int, __float128>::
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) const1858 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
1859 {
1860 Teuchos::Details::Lapack128 lapack;
1861 lapack.ORGQR (m, n, k, A, lda, TAU, WORK, lwork, info);
1862 }
1863
1864 void LAPACK<int, __float128>::
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) const1865 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
1866 {
1867 Teuchos::Details::Lapack128 lapack;
1868 lapack.UNGQR (m, n, k, A, lda, TAU, WORK, lwork, info);
1869 }
1870
1871 void LAPACK<int, __float128>::
LARFG(const int & n,__float128 * alpha,__float128 * x,const int & incx,__float128 * tau) const1872 LARFG( const int& n, __float128* alpha, __float128* x, const int& incx, __float128* tau ) const
1873 {
1874 Teuchos::Details::Lapack128 lapack;
1875 lapack.LARFG (n, alpha, x, incx, tau);
1876 }
1877
1878 __float128 LAPACK<int, __float128>::
LAPY2(const __float128 x,const __float128 y) const1879 LAPY2 (const __float128 x, const __float128 y) const
1880 {
1881 Teuchos::Details::Lapack128 lapack;
1882 return lapack.LAPY2 (x, y);
1883 }
1884
1885 void LAPACK<int, __float128>::
GBTRF(const int & m,const int & n,const int & kl,const int & ku,__float128 * A,const int & lda,int * IPIV,int * info) const1886 GBTRF (const int& m, const int& n, const int& kl, const int& ku,
1887 __float128* A, const int& lda, int* IPIV, int* info) const
1888 {
1889 Teuchos::Details::Lapack128 lapack;
1890 return lapack.GBTRF (m, n, kl, ku, A, lda, IPIV, info);
1891 }
1892
1893 void LAPACK<int, __float128>::
GBTRS(const char & TRANS,const int & n,const int & kl,const int & ku,const int & nrhs,const __float128 * A,const int & lda,const int * IPIV,__float128 * B,const int & ldb,int * info) const1894 GBTRS (const char& TRANS, const int& n, const int& kl, const int& ku,
1895 const int& nrhs, const __float128* A, const int& lda, const int* IPIV,
1896 __float128* B, const int& ldb, int* info) const
1897 {
1898 Teuchos::Details::Lapack128 lapack;
1899 return lapack.GBTRS (TRANS, n, kl, ku, nrhs, A, lda, IPIV, B, ldb, info);
1900 }
1901
1902 void LAPACK<int, __float128>::
LASCL(const char & TYPE,const int & kl,const int & ku,const __float128 cfrom,const __float128 cto,const int & m,const int & n,__float128 * A,const int & lda,int * info) const1903 LASCL (const char& TYPE, const int& kl, const int& ku, const __float128 cfrom,
1904 const __float128 cto, const int& m, const int& n, __float128* A,
1905 const int& lda, int* info) const
1906 {
1907 Teuchos::Details::Lapack128 lapack;
1908 return lapack.LASCL (TYPE, kl, ku, cfrom, cto, m, n, A, lda, info);
1909 }
1910
1911 // END int, __float128 SPECIALIZATION IMPLEMENTATION //
1912
1913 #endif // HAVE_TEUCHOSCORE_QUADMATH
1914
1915 } // namespace Teuchos
1916