Simbody 3.7
Loading...
Searching...
No Matches
TemplatizedLapack.h
Go to the documentation of this file.
1#ifndef SimTK_SimTKCOMMON_TEMPLATIZED_LAPACK_H_
2#define SimTK_SimTKCOMMON_TEMPLATIZED_LAPACK_H_
3
4/* -------------------------------------------------------------------------- *
5 * Simbody(tm): SimTKcommon *
6 * -------------------------------------------------------------------------- *
7 * This is part of the SimTK biosimulation toolkit originating from *
8 * Simbios, the NIH National Center for Physics-Based Simulation of *
9 * Biological Structures at Stanford, funded under the NIH Roadmap for *
10 * Medical Research, grant U54 GM072970. See https://simtk.org/home/simbody. *
11 * *
12 * Portions copyright (c) 2006-12 Stanford University and the Authors. *
13 * Authors: Michael Sherman *
14 * Contributors: *
15 * *
16 * Licensed under the Apache License, Version 2.0 (the "License"); you may *
17 * not use this file except in compliance with the License. You may obtain a *
18 * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. *
19 * *
20 * Unless required by applicable law or agreed to in writing, software *
21 * distributed under the License is distributed on an "AS IS" BASIS, *
22 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
23 * See the License for the specific language governing permissions and *
24 * limitations under the License. *
25 * -------------------------------------------------------------------------- */
26
34#include "SimTKlapack.h"
35
36#include <complex>
37using std::complex;
38
39namespace SimTK {
40
41class Lapack {
42public:
43 // MEANINGLESS IF NOT SPECIALIZED
44
45 template <class P> static void
47 (char transa, char transb,
48 int m, int n, int k,
49 const P& alpha, const P a[], int lda,
50 const P b[], int ldb,
51 const P& beta, P c[], int ldc) {assert(false);}
52
53 template <class P> static void
55 (int n,
56 P a[],
57 int lda,
58 const int ipiv[],
59 P work[],
60 int lwork,
61 int &info ) {assert(false);}
62
63 template <class P> static void
65 (int m,
66 int n,
67 P a[],
68 int lda,
69 int ipiv[],
70 int &info ) {assert(false);}
71
72};
73
74 // xGEMM //
75
76template <> inline void Lapack::gemm<float>
77 (char transa, char transb,
78 int m, int n, int k,
79 const float& alpha, const float a[], int lda,
80 const float b[], int ldb,
81 const float& beta, float c[], int ldc)
82{
83 sgemm_(
84 transa, transb,
85 m,n,k,alpha,a,lda,b,ldb,beta,c,ldc
86 );
87}
88template <> inline void Lapack::gemm<double>
89 (char transa, char transb,
90 int m, int n, int k,
91 const double& alpha, const double a[], int lda,
92 const double b[], int ldb,
93 const double& beta, double c[], int ldc)
94{
95 dgemm_(
96 transa, transb,
97 m,n,k,alpha,a,lda,b,ldb,beta,c,ldc
98 );
99}
100template <> inline void Lapack::gemm< complex<float> >
101 (char transa, char transb,
102 int m, int n, int k,
103 const complex<float>& alpha, const complex<float> a[], int lda,
104 const complex<float> b[], int ldb,
105 const complex<float>& beta, complex<float> c[], int ldc)
106{
107 cgemm_(
108 transa, transb,
109 m,n,k,alpha,a,lda,b,ldb,beta,c,ldc
110 );
111}
112template <> inline void Lapack::gemm< complex<double> >
113 (char transa, char transb,
114 int m, int n, int k,
115 const complex<double>& alpha, const complex<double> a[], int lda,
116 const complex<double> b[], int ldb,
117 const complex<double>& beta, complex<double> c[], int ldc)
118{
119 zgemm_(
120 transa, transb,
121 m,n,k,alpha,a,lda,b,ldb,beta,c,ldc
122 );
123}
124
125 // xGETRI //
126
127template <> inline void Lapack::getri<float>
128 (int n,
129 float a[],
130 int lda,
131 const int ipiv[],
132 float work[],
133 int lwork,
134 int& info )
135{
136 sgetri_(n,a,lda,ipiv,work,lwork,info);
137}
138
139template <> inline void Lapack::getri<double>
140 (int n,
141 double a[],
142 int lda,
143 const int ipiv[],
144 double work[],
145 int lwork,
146 int& info )
147{
148 dgetri_(n,a,lda,ipiv,work,lwork,info);
149}
150
151template <> inline void Lapack::getri< complex<float> >
152 (int n,
153 complex<float> a[],
154 int lda,
155 const int ipiv[],
156 complex<float> work[],
157 int lwork,
158 int& info )
159{
160 cgetri_(n,a,lda,ipiv,work,lwork,info);
161}
162
163template <> inline void Lapack::getri< complex<double> >
164 (int n,
165 complex<double> a[],
166 int lda,
167 const int ipiv[],
168 complex<double> work[],
169 int lwork,
170 int& info )
171{
172 zgetri_(n,a,lda,ipiv,work,lwork,info);
173}
174 // xGETRF //
175
176template <> inline void Lapack::getrf<float>
177 (int m,
178 int n,
179 float a[],
180 int lda,
181 int ipiv[],
182 int& info )
183{
184 sgetrf_(m,n,a,lda,ipiv,info);
185}
186
187template <> inline void Lapack::getrf<double>
188 (int m,
189 int n,
190 double a[],
191 int lda,
192 int ipiv[],
193 int& info )
194{
195 dgetrf_(m,n,a,lda,ipiv,info);
196}
197
198template <> inline void Lapack::getrf< complex<float> >
199 (int m,
200 int n,
201 complex<float> a[],
202 int lda,
203 int ipiv[],
204 int& info )
205{
206 cgetrf_(m,n,a,lda,ipiv,info);
207}
208
209template <> inline void Lapack::getrf< complex<double> >
210 (int m,
211 int n,
212 complex<double> a[],
213 int lda,
214 int ipiv[],
215 int& info )
216{
217 zgetrf_(m,n,a,lda,ipiv,info);
218}
219
220
221/*
222void SimTK_STDCALL
223SimTK_LAPACK(dgeev,DGEEV)
224 (const char &jobvl SimTK_LAPACK_STRLEN_FOLLOWS_DECL,
225 const char &jobvr SimTK_LAPACK_STRLEN_FOLLOWS_DECL,
226 const int &n,
227 double a[],
228 const int &lda,
229 double wr[],
230 double wi[],
231 double vl[],
232 const int &ldvl,
233 double vr[],
234 const int &ldvr,
235 double work[],
236 const int &lwork,
237 int &info
238 SimTK_LAPACK_STRLEN_ATEND_DECL
239 SimTK_LAPACK_STRLEN_ATEND_DECL);
240
241void SimTK_STDCALL
242SimTK_LAPACK(dsyev,DSYEV)
243 (const char &jobz SimTK_LAPACK_STRLEN_FOLLOWS_DECL,
244 const char &uplo SimTK_LAPACK_STRLEN_FOLLOWS_DECL,
245 const int &n,
246 double a[],
247 const int &lda,
248 double w[],
249 double work[],
250 const int &lwork,
251 int &info
252 SimTK_LAPACK_STRLEN_ATEND_DECL
253 SimTK_LAPACK_STRLEN_ATEND_DECL);
254
255void SimTK_STDCALL
256SimTK_LAPACK(dspev,DSPEV)
257 (const char &jobz SimTK_LAPACK_STRLEN_FOLLOWS_DECL,
258 const char &uplo SimTK_LAPACK_STRLEN_FOLLOWS_DECL,
259 const int &n,
260 double a[],
261 double w[],
262 double z[],
263 const int &ldz,
264 double work[],
265 int &info
266 SimTK_LAPACK_STRLEN_ATEND_DECL
267 SimTK_LAPACK_STRLEN_ATEND_DECL);
268
269void SimTK_STDCALL
270SimTK_LAPACK(dsptri,DSPTRI)
271 (const char &uplo SimTK_LAPACK_STRLEN_FOLLOWS_DECL,
272 const int &size,
273 double a[],
274 int ipiv[],
275 double work[],
276 int &info
277 SimTK_LAPACK_STRLEN_ATEND_DECL);
278
279void SimTK_STDCALL
280SimTK_LAPACK(dsptrf,DSPTRF)
281 (const char &uplo SimTK_LAPACK_STRLEN_FOLLOWS_DECL,
282 const int &size,
283 double a[],
284 int ipiv[],
285 int &info
286 SimTK_LAPACK_STRLEN_ATEND_DECL);
287
288void SimTK_STDCALL
289SimTK_LAPACK(dsyevx,DSYEVX)
290 (const char &jobz,
291 const char &range,
292 const char &uplo,
293 const int &n,
294 double a[],
295 const int &lda,
296 const double &vl,
297 const double &vu,
298 const int &il,
299 const int &iu,
300 const double &abstol,
301 int &m,
302 double w[],
303 double z[],
304 const int &ldz,
305 double work[],
306 const int &lwork,
307 int iwork[],
308 int ifail[],
309 int &info);
310
311void SimTK_STDCALL
312SimTK_LAPACK(dgelss,DGELSS)
313 (int &m,
314 const int &n,
315 const int &nrhs,
316 double a[],
317 const int &lda,
318 double b[],
319 const int &ldb,
320 double s[],
321 const double &rcond,
322 int &rank,
323 double work[],
324 const int &lwork,
325 int &info );
326
327void SimTK_STDCALL
328SimTK_LAPACK(dgesv,DGESV)
329 (int &n,
330 int &nrhs,
331 double a[],
332 int &lda,
333 int ipiv[],
334 double b[],
335 int &ldb,
336 int &info);
337
338void SimTK_STDCALL
339SimTK_LAPACK(dgesvd,DGESVD)
340 (const char &jobu SimTK_LAPACK_STRLEN_FOLLOWS_DECL,
341 const char &jobvt SimTK_LAPACK_STRLEN_FOLLOWS_DECL,
342 const int &m,
343 const int &n,
344 double a[],
345 const int &lda,
346 double s[],
347 double u[],
348 const int &ldu,
349 double vt[],
350 const int &ldvt,
351 double work[],
352 const int &lwork,
353 int &info
354 SimTK_LAPACK_STRLEN_ATEND_DECL
355 SimTK_LAPACK_STRLEN_ATEND_DECL);
356
357*/
358
359} // namespace SimTK
360
361#endif // SimTK_SimTKCOMMON_TEMPLATIZED_LAPACK_H_
Mandatory first inclusion for any Simbody source or header file.
Definition TemplatizedLapack.h:41
static void getrf(int m, int n, P a[], int lda, int ipiv[], int &info)
Definition TemplatizedLapack.h:65
static void gemm(char transa, char transb, int m, int n, int k, const P &alpha, const P a[], int lda, const P b[], int ldb, const P &beta, P c[], int ldc)
Definition TemplatizedLapack.h:47
static void getri(int n, P a[], int lda, const int ipiv[], P work[], int lwork, int &info)
Definition TemplatizedLapack.h:55
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition Assembler.h:37