Simbody  3.5
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>
37 using std::complex;
38 
39 namespace SimTK {
40 
41 class Lapack {
42 public:
43  // MEANINGLESS IF NOT SPECIALIZED
44 
45  template <class P> static void
46  gemm
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
54  getri
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
64  getrf
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 
76 template <> 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 }
88 template <> 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 }
100 template <> 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 }
112 template <> 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 
127 template <> 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 
139 template <> 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 
151 template <> 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 
163 template <> 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 
176 template <> 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 
187 template <> 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 
198 template <> 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 
209 template <> 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 /*
222 void SimTK_STDCALL
223 SimTK_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 
241 void SimTK_STDCALL
242 SimTK_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 
255 void SimTK_STDCALL
256 SimTK_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 
269 void SimTK_STDCALL
270 SimTK_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 
279 void SimTK_STDCALL
280 SimTK_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 
288 void SimTK_STDCALL
289 SimTK_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 
311 void SimTK_STDCALL
312 SimTK_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 
327 void SimTK_STDCALL
328 SimTK_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 
338 void SimTK_STDCALL
339 SimTK_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_
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition: Assembler.h:37
static void getri(int n, P a[], int lda, const int ipiv[], P work[], int lwork, int &info)
Definition: TemplatizedLapack.h:55
Apache License January AND DISTRIBUTION Definitions License shall mean the terms and conditions for and distribution as defined by Sections through of this document Licensor shall mean the copyright owner or entity authorized by the copyright owner that is granting the License Legal Entity shall mean the union of the acting entity and all other entities that control are controlled by or are under common control with that entity For the purposes of this definition control direct or to cause the direction or management of such whether by contract or including but not limited to software source documentation and configuration files Object form shall mean any form resulting from mechanical transformation or translation of a Source including but not limited to compiled object generated and conversions to other media types Work shall mean the work of whether in Source or Object made available under the as indicated by a copyright notice that is included in or attached to the work(an example is provided in the Appendix below)."Derivative Works"shall mean any work
m
Definition: CMakeCache.txt:469
static void getrf(int m, int n, P a[], int lda, int ipiv[], int &info)
Definition: TemplatizedLapack.h:65
Definition: TemplatizedLapack.h:41
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
gikDdMV wfaIJt A٩t1 JcA nr S q is3 ֧ VK C 9Z D q Fxn n T Y < ['jd< K JvTMH"sw>}o_o? z'z:mV$yng͖i۸J{ Ta*dE|lzbX@!^Ooi_=O}&ŲQUVWTsh!P_7DRAVfʿbOԹɫt0Y!|'x'óݥ:/ V[,}-B֞/܂;:;;Iޘ[nK4#-='Gf\lb41۩> Os7x f pZzB I g n
Definition: SimmathUserGuide.doc:2262
Mandatory first inclusion for any Simbody source or header file.