QMCPACK
Blasf.h
Go to the documentation of this file.
1 //////////////////////////////////////////////////////////////////////////////////////
2 // This file is distributed under the University of Illinois/NCSA Open Source License.
3 // See LICENSE file in top directory for details.
4 //
5 // Copyright (c) 2016 Jeongnim Kim and QMCPACK developers.
6 //
7 // File developed by: Jeongnim Kim, jeongnim.kim@gmail.com, University of Illinois at Urbana-Champaign
8 // Ken Esler, kpesler@gmail.com, University of Illinois at Urbana-Champaign
9 // Jeremy McMinnis, jmcminis@gmail.com, University of Illinois at Urbana-Champaign
10 // Mark A. Berrill, berrillma@ornl.gov, Oak Ridge National Laboratory
11 //
12 // File created by: Jeongnim Kim, jeongnim.kim@gmail.com, University of Illinois at Urbana-Champaign
13 //////////////////////////////////////////////////////////////////////////////////////
14 
15 
16 #ifndef OHMMS_BLAS_FUNCTIONDEFS_H
17 #define OHMMS_BLAS_FUNCTIONDEFS_H
18 
19 #include <complex>
20 #include <cstring>
21 
22 #ifdef ADD_
23 #define caxpy caxpy_
24 #define daxpy daxpy_
25 #define saxpy saxpy_
26 #define zaxpy zaxpy_
27 #define dnrm2 dnrm2_
28 #define snrm2 snrm2_
29 #define scnrm2 scnrm2_
30 #define dznrm2 dznrm2_
31 #define dsymv dsymv_
32 #define ssymv ssymv_
33 #define csymv csymv_
34 #define zsymv zsymv_
35 #define sscal sscal_
36 #define cscal cscal_
37 #define dscal dscal_
38 #define zscal zscal_
39 #define csscal csscal_
40 #define zdscal zdscal_
41 #define dcopy dcopy_
42 #define zcopy zcopy_
43 #define dsyrk dsyrk_
44 #define dsymm dsymm_
45 #define dgemm dgemm_
46 #define sgemm sgemm_
47 #define zgemm zgemm_
48 #define cgemm cgemm_
49 #define dgemv dgemv_
50 #define sgemv sgemv_
51 #define zgemv zgemv_
52 #define cgemv cgemv_
53 #define dsyr2k dsyr2k_
54 #define dgetrf dgetrf_
55 #define dgetri dgetri_
56 #define sgetrf sgetrf_
57 #define sgetri sgetri_
58 #define zgetrf zgetrf_
59 #define zgetri zgetri_
60 #define cgetrf cgetrf_
61 #define cgetri cgetri_
62 #define dgesvd dgesvd_
63 #define sgesvd sgesvd_
64 #define cgesvd cgesvd_
65 #define zgesvd zgesvd_
66 #define dgeev dgeev_
67 #define sgeev sgeev_
68 #define zgeev zgeev_
69 #define cgeev cgeev_
70 #define dggev dggev_
71 #define sggev sggev_
72 #define dger dger_
73 #define sger sger_
74 #define zgeru zgeru_
75 #define cgeru cgeru_
76 
77 #define dgeqrf dgeqrf_
78 #define dormqr dormqr_
79 #define dgghrd dgghrd_
80 #define dhgeqz dhgeqz_
81 #define dtgexc dtgexc_
82 #define dtgevc dtgevc_
83 
84 #define dsyevr dsyevr_
85 #define zheev zheev_
86 #define zheevr zheevr_
87 #define ssyevr ssyevr_
88 #define cheevr cheevr_
89 #define cheev cheev_
90 #define zhegvx zhegvx_
91 #define zgeqrf zgeqrf_
92 #define zungqr zungqr_
93 
94 #define cgeqrf cgeqrf_
95 #define sgeqrf sgeqrf_
96 #define dorgqr dorgqr_
97 #define sorgqr sorgqr_
98 #define cungqr cungqr_
99 #define zgelqf zgelqf_
100 #define dgelqf dgelqf_
101 #define cgelqf cgelqf_
102 #define sgelqf sgelqf_
103 #define dorglq dorglq_
104 #define sorglq sorglq_
105 #define zunglq zunglq_
106 #define cunglq cunglq_
107 
108 #define spotrf spotrf_
109 #define cpotrf cpotrf_
110 #define dpotrf dpotrf_
111 #define zpotrf zpotrf_
112 
113 #endif
114 
115 // declaring Fortran interfaces
116 extern "C"
117 {
118  void saxpy(const int& n, const float& da, const float* dx, const int& incx, float* dy, const int& incy);
119 
120  void caxpy(const int& n,
121  const std::complex<float>& da,
122  const std::complex<float>* dx,
123  const int& incx,
124  std::complex<float>* dy,
125  const int& incy);
126 
127  void daxpy(const int& n, const double& da, const double* dx, const int& incx, double* dy, const int& incy);
128 
129  void zaxpy(const int& n,
130  const std::complex<double>& da,
131  const std::complex<double>* dx,
132  const int& incx,
133  std::complex<double>* dy,
134  const int& incy);
135 
136 
137  float snrm2(const int& n, const float* dx, const int& incx);
138  float scnrm2(const int& n, const std::complex<float>* dx, const int& incx);
139  double dnrm2(const int& n, const double* dx, const int& incx);
140  double dznrm2(const int& n, const std::complex<double>* dx, const int& incx);
141 
142 
143  void sscal(const int& n, const float&, float* x, const int&);
144  void cscal(const int& n, const std::complex<float>&, std::complex<float>* x, const int&);
145  void dscal(const int& n, const double&, double* x, const int&);
146  void zscal(const int& n, const std::complex<double>&, std::complex<double>* x, const int&);
147  void csscal(const int& n, const float&, std::complex<float>* x, const int&);
148  void zdscal(const int& n, const double&, std::complex<double>* x, const int&);
149 
150  void dsymv(const char& uplo,
151  const int& n,
152  const double& alpha,
153  const double& a,
154  const int& lda,
155  const double* x,
156  const int& incx,
157  const double& beta,
158  double* y,
159  const int& incy);
160 
161  void ssymv(const char& uplo,
162  const int& n,
163  const float& alpha,
164  const float& a,
165  const int& lda,
166  const float* x,
167  const int& incx,
168  const float& beta,
169  float* y,
170  const int& incy);
171 
172  void zsymv(const char& uplo,
173  const int& n,
174  const std::complex<double>& alpha,
175  std::complex<double>* a,
176  const int& lda,
177  std::complex<double>* x,
178  const int& incx,
179  const std::complex<double>& beta,
180  std::complex<double>* y,
181  const int& incy);
182 
183  void csymv(const char& uplo,
184  const int& n,
185  const std::complex<float>& alpha,
186  std::complex<float>* a,
187  const int& lda,
188  std::complex<float>* x,
189  const int& incx,
190  const std::complex<float>& beta,
191  std::complex<float>* y,
192  const int& incy);
193 
194  void zcopy(const int& n, const std::complex<double>* x, const int& incx, std::complex<double>* y, const int& incy);
195  void dcopy(const int& n, const double*, const int&, double*, const int&);
196 
197 
198  void dsyr2k(const char&,
199  const char&,
200  const int&,
201  const int&,
202  const double&,
203  const double*,
204  const int&,
205  const double*,
206  const int&,
207  const double&,
208  double*,
209  const int&);
210 
211  void dsymm(const char&,
212  const char&,
213  const int&,
214  const int&,
215  const double&,
216  const double* A,
217  const int& lda,
218  const double* B,
219  const int& ldb,
220  const double& beta,
221  double* C,
222  const int& ldc);
223 
224  void dgemm(const char&,
225  const char&,
226  const int&,
227  const int&,
228  const int&,
229  const double&,
230  const double*,
231  const int&,
232  const double*,
233  const int&,
234  const double&,
235  double*,
236  const int&);
237 
238  void sgemm(const char&,
239  const char&,
240  const int&,
241  const int&,
242  const int&,
243  const float&,
244  const float*,
245  const int&,
246  const float*,
247  const int&,
248  const float&,
249  float*,
250  const int&);
251 
252  void zgemm(const char&,
253  const char&,
254  const int&,
255  const int&,
256  const int&,
257  const std::complex<double>&,
258  const std::complex<double>*,
259  const int&,
260  const std::complex<double>*,
261  const int&,
262  const std::complex<double>&,
263  std::complex<double>*,
264  const int&);
265 
266  void cgemm(const char&,
267  const char&,
268  const int&,
269  const int&,
270  const int&,
271  const std::complex<float>&,
272  const std::complex<float>*,
273  const int&,
274  const std::complex<float>*,
275  const int&,
276  const std::complex<float>&,
277  std::complex<float>*,
278  const int&);
279 
280  void dgemv(const char& trans,
281  const int& nr,
282  const int& nc,
283  const double& alpha,
284  const double* amat,
285  const int& lda,
286  const double* bv,
287  const int& incx,
288  const double& beta,
289  double* cv,
290  const int& incy);
291 
292  void sgemv(const char& trans,
293  const int& nr,
294  const int& nc,
295  const float& alpha,
296  const float* amat,
297  const int& lda,
298  const float* bv,
299  const int& incx,
300  const float& beta,
301  float* cv,
302  const int& incy);
303 
304  void zgemv(const char& trans,
305  const int& nr,
306  const int& nc,
307  const std::complex<double>& alpha,
308  const std::complex<double>* amat,
309  const int& lda,
310  const std::complex<double>* bv,
311  const int& incx,
312  const std::complex<double>& beta,
313  std::complex<double>* cv,
314  const int& incy);
315 
316  void cgemv(const char& trans,
317  const int& nr,
318  const int& nc,
319  const std::complex<float>& alpha,
320  const std::complex<float>* amat,
321  const int& lda,
322  const std::complex<float>* bv,
323  const int& incx,
324  const std::complex<float>& beta,
325  std::complex<float>* cv,
326  const int& incy);
327 
328  void dsyrk(const char&,
329  const char&,
330  const int&,
331  const int&,
332  const double&,
333  const double*,
334  const int&,
335  const double&,
336  double*,
337  const int&);
338 
339  void dgetrf(const int& n, const int& m, double* a, const int& n0, int* piv, int& st);
340 
341  void sgetrf(const int& n, const int& m, float* a, const int& n0, int* piv, int& st);
342 
343  void zgetrf(const int& n, const int& m, std::complex<double>* a, const int& n0, int* piv, int& st);
344 
345  void cgetrf(const int& n, const int& m, std::complex<float>* a, const int& n0, int* piv, int& st);
346 
347  void dgetri(const int& n, double* a, const int& n0, int const* piv, double* work, const int&, int& st);
348 
349  void sgetri(const int& n, float* a, const int& n0, int const* piv, float* work, const int&, int& st);
350 
351  void zgetri(const int& n,
352  std::complex<double>* a,
353  const int& n0,
354  int const* piv,
355  std::complex<double>* work,
356  const int&,
357  int& st);
358 
359  void cgetri(const int& n,
360  std::complex<float>* a,
361  const int& n0,
362  int const* piv,
363  std::complex<float>* work,
364  const int&,
365  int& st);
366 
367  void dgesvd(const char& JOBU,
368  const char& JOBVT,
369  const int& M,
370  const int& N,
371  double* A,
372  const int& LDA,
373  double* S,
374  double* U,
375  const int& LDU,
376  double* VT,
377  const int& LDVT,
378  double* work,
379  const int& LWORK,
380  int& INFO);
381 
382  void sgesvd(const char& JOBU,
383  const char& JOBVT,
384  const int& M,
385  const int& N,
386  float* A,
387  const int& LDA,
388  float* S,
389  float* U,
390  const int& LDU,
391  float* VT,
392  const int& LDVT,
393  float* work,
394  const int& LWORK,
395  int& INFO);
396 
397  void zgesvd(const char& JOBU,
398  const char& JOBVT,
399  const int& M,
400  const int& N,
401  std::complex<double>* A,
402  const int& LDA,
403  double* S,
404  std::complex<double>* U,
405  const int& LDU,
406  std::complex<double>* VT,
407  const int& LDVT,
408  std::complex<double>* work,
409  const int& LWORK,
410  double* RWORK,
411  int& INFO);
412 
413  void cgesvd(const char& JOBU,
414  const char& JOBVT,
415  const int& M,
416  const int& N,
417  std::complex<float>* A,
418  const int& LDA,
419  float* S,
420  std::complex<float>* U,
421  const int& LDU,
422  std::complex<float>* VT,
423  const int& LDVT,
424  std::complex<float>* work,
425  const int& LWORK,
426  float* RWORK,
427  int& INFO);
428 
429  void dgeev(char* JOBVL,
430  char* JOBVR,
431  int* N,
432  double* A,
433  int* LDA,
434  double* ALPHAR,
435  double* ALPHAI,
436  double* VL,
437  int* LDVL,
438  double* VR,
439  int* LDVR,
440  double* WORK,
441  int* LWORK,
442  int* INFO);
443 
444  void sgeev(char* JOBVL,
445  char* JOBVR,
446  int* N,
447  float* A,
448  int* LDA,
449  float* ALPHAR,
450  float* ALPHAI,
451  float* VL,
452  int* LDVL,
453  float* VR,
454  int* LDVR,
455  float* WORK,
456  int* LWORK,
457  int* INFO);
458 
459  void zgeev(char* JOBVL,
460  char* JOBVR,
461  int* N,
462  std::complex<double>* A,
463  int* LDA,
464  std::complex<double>* ALPHA,
465  std::complex<double>* VL,
466  int* LDVL,
467  std::complex<double>* VR,
468  int* LDVR,
469  std::complex<double>* WORK,
470  int* LWORK,
471  double* RWORK,
472  int* INFO);
473 
474  void cgeev(char* JOBVL,
475  char* JOBVR,
476  int* N,
477  std::complex<float>* A,
478  int* LDA,
479  std::complex<float>* ALPHA,
480  std::complex<float>* VL,
481  int* LDVL,
482  std::complex<float>* VR,
483  int* LDVR,
484  std::complex<float>* WORK,
485  int* LWORK,
486  float* RWORK,
487  int* INFO);
488 
489  void dggev(char* JOBVL,
490  char* JOBVR,
491  int* N,
492  double* A,
493  int* LDA,
494  double* B,
495  int* LDB,
496  double* ALPHAR,
497  double* ALPHAI,
498  double* BETA,
499  double* VL,
500  int* LDVL,
501  double* VR,
502  int* LDVR,
503  double* WORK,
504  int* LWORK,
505  int* INFO);
506 
507  void sggev(char* JOBVL,
508  char* JOBVR,
509  int* N,
510  float* A,
511  int* LDA,
512  float* B,
513  int* LDB,
514  float* ALPHAR,
515  float* ALPHAI,
516  float* BETA,
517  float* VL,
518  int* LDVL,
519  float* VR,
520  int* LDVR,
521  float* WORK,
522  int* LWORK,
523  int* INFO);
524 
525  void ssyevr(char& JOBZ,
526  char& RANGE,
527  char& UPLO,
528  int& N,
529  float* A,
530  int& LDA,
531  float& VL,
532  float& VU,
533  int& IL,
534  int& IU,
535  float& ABSTOL,
536  int& M,
537  float* W,
538  float* Z,
539  int& LDZ,
540  int* ISUPPZ,
541  float* WORK,
542  int& LWORK,
543  int* IWORK,
544  int& LIWORK,
545  int& INFO);
546 
547  void cheevr(char& JOBZ,
548  char& RANGE,
549  char& UPLO,
550  int& N,
551  std::complex<float>* A,
552  int& LDA,
553  float& VL,
554  float& VU,
555  int& IL,
556  int& IU,
557  float& ABSTOL,
558  int& M,
559  float* W,
560  std::complex<float>* Z,
561  int& LDZ,
562  int* ISUPPZ,
563  std::complex<float>* WORK,
564  int& LWORK,
565  float* RWORK,
566  int& LRWORK,
567  int* IWORK,
568  int& LIWORK,
569  int& INFO);
570 
571  void dsyevr(char& JOBZ,
572  char& RANGE,
573  char& UPLO,
574  int& N,
575  double* A,
576  int& LDA,
577  double& VL,
578  double& VU,
579  int& IL,
580  int& IU,
581  double& ABSTOL,
582  int& M,
583  double* W,
584  double* Z,
585  int& LDZ,
586  int* ISUPPZ,
587  double* WORK,
588  int& LWORK,
589  int* IWORK,
590  int& LIWORK,
591  int& INFO);
592 
593  void cheev(char& JOBZ,
594  char& UPLO,
595  int& N,
596  std::complex<float>* A,
597  int& LDA,
598  float* W,
599  std::complex<float>* WORK,
600  int& LWORK,
601  float* RWORK,
602  int& INFO);
603 
604  void zheev(char& JOBZ,
605  char& UPLO,
606  int& N,
607  std::complex<double>* A,
608  int& LDA,
609  double* W,
610  std::complex<double>* WORK,
611  int& LWORK,
612  double* RWORK,
613  int& INFO);
614 
615  void zheevr(char& JOBZ,
616  char& RANGE,
617  char& UPLO,
618  int& N,
619  std::complex<double>* A,
620  int& LDA,
621  double& VL,
622  double& VU,
623  int& IL,
624  int& IU,
625  double& ABSTOL,
626  int& M,
627  double* W,
628  std::complex<double>* Z,
629  int& LDZ,
630  int* ISUPPZ,
631  std::complex<double>* WORK,
632  int& LWORK,
633  double* RWORK,
634  int& LRWORK,
635  int* IWORK,
636  int& LIWORK,
637  int& INFO);
638 
639  void zhegvx(int&,
640  char& JOBZ,
641  char& RANGE,
642  char& UPLO,
643  int& N,
644  std::complex<double>* A,
645  int& LDA,
646  std::complex<double>* B,
647  int& LDB,
648  double& VL,
649  double& VU,
650  int& IL,
651  int& IU,
652  double& ABSTOL,
653  int& M,
654  double* W,
655  std::complex<double>* Z,
656  int& LDZ,
657  std::complex<double>* WORK,
658  int& LWORK,
659  double* RWORK,
660  int* IWORK,
661  int* IFAIL,
662  int& INFO);
663 
664  void zgeqrf(const int& M,
665  const int& N,
666  std::complex<double>* A,
667  const int& LDA,
668  std::complex<double>* TAU,
669  std::complex<double>* WORK,
670  const int& LWORK,
671  int& INFO);
672 
673  void cgeqrf(const int& M,
674  const int& N,
675  std::complex<float>* A,
676  const int& LDA,
677  std::complex<float>* TAU,
678  std::complex<float>* WORK,
679  const int& LWORK,
680  int& INFO);
681 
682  void dgeqrf(const int& M,
683  const int& N,
684  double* A,
685  const int& LDA,
686  double* TAU,
687  double* WORK,
688  const int& LWORK,
689  int& INFO);
690 
691  void sgeqrf(const int& M,
692  const int& N,
693  float* A,
694  const int& LDA,
695  float* TAU,
696  float* WORK,
697  const int& LWORK,
698  int& INFO);
699 
700 
701  void zungqr(const int& M,
702  const int& N,
703  const int& K,
704  std::complex<double>* A,
705  const int& LDA,
706  std::complex<double>* TAU,
707  std::complex<double>* WORK,
708  const int& LWORK,
709  int& INFO);
710 
711  void cungqr(const int& M,
712  const int& N,
713  const int& K,
714  std::complex<float>* A,
715  const int& LDA,
716  std::complex<float>* TAU,
717  std::complex<float>* WORK,
718  const int& LWORK,
719  int& INFO);
720 
721  void dorgqr(const int& M,
722  const int& N,
723  const int& K,
724  double* A,
725  const int& LDA,
726  double* TAU,
727  double* WORK,
728  const int& LWORK,
729  int& INFO);
730 
731  void sorgqr(const int& M,
732  const int& N,
733  const int& K,
734  float* A,
735  const int& LDA,
736  float* TAU,
737  float* WORK,
738  const int& LWORK,
739  int& INFO);
740 
741  void zgelqf(const int& M,
742  const int& N,
743  std::complex<double>* A,
744  const int& LDA,
745  std::complex<double>* TAU,
746  std::complex<double>* WORK,
747  const int& LWORK,
748  int& INFO);
749 
750  void cgelqf(const int& M,
751  const int& N,
752  std::complex<float>* A,
753  const int& LDA,
754  std::complex<float>* TAU,
755  std::complex<float>* WORK,
756  const int& LWORK,
757  int& INFO);
758 
759  void dgelqf(const int& M,
760  const int& N,
761  double* A,
762  const int& LDA,
763  double* TAU,
764  double* WORK,
765  const int& LWORK,
766  int& INFO);
767 
768  void sgelqf(const int& M,
769  const int& N,
770  float* A,
771  const int& LDA,
772  float* TAU,
773  float* WORK,
774  const int& LWORK,
775  int& INFO);
776 
777 
778  void zunglq(const int& M,
779  const int& N,
780  const int& K,
781  std::complex<double>* A,
782  const int& LDA,
783  std::complex<double>* TAU,
784  std::complex<double>* WORK,
785  const int& LWORK,
786  int& INFO);
787 
788  void cunglq(const int& M,
789  const int& N,
790  const int& K,
791  std::complex<float>* A,
792  const int& LDA,
793  std::complex<float>* TAU,
794  std::complex<float>* WORK,
795  const int& LWORK,
796  int& INFO);
797 
798  void dorglq(const int& M,
799  const int& N,
800  const int& K,
801  double* A,
802  const int& LDA,
803  double* TAU,
804  double* WORK,
805  const int& LWORK,
806  int& INFO);
807 
808  void sorglq(const int& M,
809  const int& N,
810  const int& K,
811  float* A,
812  const int& LDA,
813  float* TAU,
814  float* WORK,
815  const int& LWORK,
816  int& INFO);
817 
818 
819  void dger(const int* m,
820  const int* n,
821  const double* alpha,
822  const double* x,
823  const int* incx,
824  const double* y,
825  const int* incy,
826  double* a,
827  const int* lda);
828 
829  void sger(const int* m,
830  const int* n,
831  const float* alpha,
832  const float* x,
833  const int* incx,
834  const float* y,
835  const int* incy,
836  float* a,
837  const int* lda);
838 
839  void zgeru(const int* m,
840  const int* n,
841  const std::complex<double>* alpha,
842  const std::complex<double>* x,
843  const int* incx,
844  const std::complex<double>* y,
845  const int* incy,
846  std::complex<double>* a,
847  const int* lda);
848 
849  void cgeru(const int* m,
850  const int* n,
851  const std::complex<float>* alpha,
852  const std::complex<float>* x,
853  const int* incx,
854  const std::complex<float>* y,
855  const int* incy,
856  std::complex<float>* a,
857  const int* lda);
858 
859  void dormqr(const char* SIDE,
860  const char* TRANS,
861  const int* M,
862  const int* N,
863  const int* K,
864  const double* A,
865  const int* LDA,
866  const double* TAU,
867  double* C,
868  const int* LDC,
869  double* WORK,
870  int* LWORK,
871  int* INFO);
872 
873  void dgghrd(const char* COMPQ,
874  const char* COMPZ,
875  const int* N,
876  const int* ILO,
877  const int* IHI,
878  double* A,
879  const int* LDA,
880  double* B,
881  const int* LDB,
882  double* Q,
883  const int* LDQ,
884  double* Z,
885  const int* LDZ,
886  int* INFO);
887 
888  void dhgeqz(const char* JOB,
889  const char* COMPQ,
890  const char* COMPZ,
891  const int* N,
892  const int* ILO,
893  const int* IHI,
894  double* H,
895  const int* LDH,
896  double* T,
897  const int* LDT,
898  double* ALPHAR,
899  double* ALPHAI,
900  double* BETA,
901  double* Q,
902  const int* LDQ,
903  double* Z,
904  const int* LDZ,
905  double* WORK,
906  int* LWORK,
907  int* INFO);
908 
909  void dtgexc(const bool* WANTQ,
910  const bool* WANTZ,
911  const int* N,
912  double* A,
913  const int* LDA,
914  double* B,
915  const int* LDB,
916  double* Q,
917  const int* LDQ,
918  double* Z,
919  const int* LDZ,
920  int* IFST,
921  int* ILST,
922  double* WORK,
923  int* LWORK,
924  int* INFO);
925 
926  void dtgevc(const char* SIDE,
927  const char* HOWMNY,
928  const bool* SELECT,
929  const int* N,
930  double* S,
931  const int* LDS,
932  double* P,
933  const int* LDP,
934  double* VL,
935  const int* LDVL,
936  double* VR,
937  const int* LDVR,
938  const int* MM,
939  int* M,
940  double* WORK,
941  int* INFO);
942 
943  void spotrf(const char& UPLO, const int& N, float* A, const int& LDA, int& INFO);
944  void dpotrf(const char& UPLO, const int& N, double* A, const int& LDA, int& INFO);
945  void cpotrf(const char& UPLO, const int& N, std::complex<float>* A, const int& LDA, int& INFO);
946  void zpotrf(const char& UPLO, const int& N, std::complex<double>* A, const int& LDA, int& INFO);
947 }
948 #endif
void zungqr(const int &M, const int &N, const int &K, std::complex< double > *A, const int &LDA, std::complex< double > *TAU, std::complex< double > *WORK, const int &LWORK, int &INFO)
void zgemm(const char &, const char &, const int &, const int &, const int &, const std::complex< double > &, const std::complex< double > *, const int &, const std::complex< double > *, const int &, const std::complex< double > &, std::complex< double > *, const int &)
void sgemm(const char &, const char &, const int &, const int &, const int &, const float &, const float *, const int &, const float *, const int &, const float &, float *, const int &)
void ssymv(const char &uplo, const int &n, const float &alpha, const float &a, const int &lda, const float *x, const int &incx, const float &beta, float *y, const int &incy)
void zheev(char &JOBZ, char &UPLO, int &N, std::complex< double > *A, int &LDA, double *W, std::complex< double > *WORK, int &LWORK, double *RWORK, int &INFO)
void zgeru(const int *m, const int *n, const std::complex< double > *alpha, const std::complex< double > *x, const int *incx, const std::complex< double > *y, const int *incy, std::complex< double > *a, const int *lda)
void zcopy(const int &n, const std::complex< double > *x, const int &incx, std::complex< double > *y, const int &incy)
double dnrm2(const int &n, const double *dx, const int &incx)
void saxpy(const int &n, const float &da, const float *dx, const int &incx, float *dy, const int &incy)
void cscal(const int &n, const std::complex< float > &, std::complex< float > *x, const int &)
void dorgqr(const int &M, const int &N, const int &K, double *A, const int &LDA, double *TAU, double *WORK, const int &LWORK, int &INFO)
void zdscal(const int &n, const double &, std::complex< double > *x, const int &)
void sgelqf(const int &M, const int &N, float *A, const int &LDA, float *TAU, float *WORK, const int &LWORK, int &INFO)
void cgetri(const int &n, std::complex< float > *a, const int &n0, int const *piv, std::complex< float > *work, const int &, int &st)
void csymv(const char &uplo, const int &n, const std::complex< float > &alpha, std::complex< float > *a, const int &lda, std::complex< float > *x, const int &incx, const std::complex< float > &beta, std::complex< float > *y, const int &incy)
void sgeqrf(const int &M, const int &N, float *A, const int &LDA, float *TAU, float *WORK, const int &LWORK, int &INFO)
void cgeru(const int *m, const int *n, const std::complex< float > *alpha, const std::complex< float > *x, const int *incx, const std::complex< float > *y, const int *incy, std::complex< float > *a, const int *lda)
void dgghrd(const char *COMPQ, const char *COMPZ, const int *N, const int *ILO, const int *IHI, double *A, const int *LDA, double *B, const int *LDB, double *Q, const int *LDQ, double *Z, const int *LDZ, int *INFO)
void dpotrf(const char &UPLO, const int &N, double *A, const int &LDA, int &INFO)
void dormqr(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 *LWORK, int *INFO)
void dgeqrf(const int &M, const int &N, double *A, const int &LDA, double *TAU, double *WORK, const int &LWORK, int &INFO)
void dtgevc(const char *SIDE, const char *HOWMNY, const bool *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)
void dgesvd(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 *VT, const int &LDVT, double *work, const int &LWORK, int &INFO)
void zgesvd(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 > *VT, const int &LDVT, std::complex< double > *work, const int &LWORK, double *RWORK, int &INFO)
void zsymv(const char &uplo, const int &n, const std::complex< double > &alpha, std::complex< double > *a, const int &lda, std::complex< double > *x, const int &incx, const std::complex< double > &beta, std::complex< double > *y, const int &incy)
void dsymm(const char &, const char &, const int &, const int &, const double &, const double *A, const int &lda, const double *B, const int &ldb, const double &beta, double *C, const int &ldc)
void dgemm(const char &, const char &, const int &, const int &, const int &, const double &, const double *, const int &, const double *, const int &, const double &, double *, const int &)
void dgelqf(const int &M, const int &N, double *A, const int &LDA, double *TAU, double *WORK, const int &LWORK, int &INFO)
void zgeqrf(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)
void sorglq(const int &M, const int &N, const int &K, float *A, const int &LDA, float *TAU, float *WORK, const int &LWORK, int &INFO)
constexpr char UPLO
Definition: BLAS.hpp:42
void dorglq(const int &M, const int &N, const int &K, double *A, const int &LDA, double *TAU, double *WORK, const int &LWORK, int &INFO)
void cgeev(char *JOBVL, char *JOBVR, int *N, std::complex< float > *A, int *LDA, std::complex< float > *ALPHA, std::complex< float > *VL, int *LDVL, std::complex< float > *VR, int *LDVR, std::complex< float > *WORK, int *LWORK, float *RWORK, int *INFO)
void dscal(const int &n, const double &, double *x, const int &)
void zaxpy(const int &n, const std::complex< double > &da, const std::complex< double > *dx, const int &incx, std::complex< double > *dy, const int &incy)
void zgemv(const char &trans, const int &nr, const int &nc, const std::complex< double > &alpha, const std::complex< double > *amat, const int &lda, const std::complex< double > *bv, const int &incx, const std::complex< double > &beta, std::complex< double > *cv, const int &incy)
void sscal(const int &n, const float &, float *x, const int &)
void dggev(char *JOBVL, char *JOBVR, int *N, double *A, int *LDA, double *B, int *LDB, double *ALPHAR, double *ALPHAI, double *BETA, double *VL, int *LDVL, double *VR, int *LDVR, double *WORK, int *LWORK, int *INFO)
void cgelqf(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)
void sorgqr(const int &M, const int &N, const int &K, float *A, const int &LDA, float *TAU, float *WORK, const int &LWORK, int &INFO)
void zheevr(char &JOBZ, char &RANGE, char &UPLO, int &N, std::complex< double > *A, int &LDA, double &VL, double &VU, int &IL, int &IU, double &ABSTOL, int &M, double *W, std::complex< double > *Z, int &LDZ, int *ISUPPZ, std::complex< double > *WORK, int &LWORK, double *RWORK, int &LRWORK, int *IWORK, int &LIWORK, int &INFO)
void sgetri(const int &n, float *a, const int &n0, int const *piv, float *work, const int &, int &st)
void sgeev(char *JOBVL, char *JOBVR, int *N, float *A, int *LDA, float *ALPHAR, float *ALPHAI, float *VL, int *LDVL, float *VR, int *LDVR, float *WORK, int *LWORK, int *INFO)
void dger(const int *m, const int *n, const double *alpha, const double *x, const int *incx, const double *y, const int *incy, double *a, const int *lda)
void ssyevr(char &JOBZ, char &RANGE, char &UPLO, int &N, float *A, int &LDA, float &VL, float &VU, int &IL, int &IU, float &ABSTOL, int &M, float *W, float *Z, int &LDZ, int *ISUPPZ, float *WORK, int &LWORK, int *IWORK, int &LIWORK, int &INFO)
void dgetrf(const int &n, const int &m, double *a, const int &n0, int *piv, int &st)
void zgeev(char *JOBVL, char *JOBVR, int *N, std::complex< double > *A, int *LDA, std::complex< double > *ALPHA, std::complex< double > *VL, int *LDVL, std::complex< double > *VR, int *LDVR, std::complex< double > *WORK, int *LWORK, double *RWORK, int *INFO)
void dhgeqz(const char *JOB, const char *COMPQ, const char *COMPZ, const int *N, const int *ILO, const int *IHI, double *H, const int *LDH, double *T, const int *LDT, double *ALPHAR, double *ALPHAI, double *BETA, double *Q, const int *LDQ, double *Z, const int *LDZ, double *WORK, int *LWORK, int *INFO)
void sggev(char *JOBVL, char *JOBVR, int *N, float *A, int *LDA, float *B, int *LDB, float *ALPHAR, float *ALPHAI, float *BETA, float *VL, int *LDVL, float *VR, int *LDVR, float *WORK, int *LWORK, int *INFO)
void dcopy(const int &n, const double *, const int &, double *, const int &)
void cgemm(const char &, const char &, const int &, const int &, const int &, const std::complex< float > &, const std::complex< float > *, const int &, const std::complex< float > *, const int &, const std::complex< float > &, std::complex< float > *, const int &)
void cgetrf(const int &n, const int &m, std::complex< float > *a, const int &n0, int *piv, int &st)
void zgetri(const int &n, std::complex< double > *a, const int &n0, int const *piv, std::complex< double > *work, const int &, int &st)
float scnrm2(const int &n, const std::complex< float > *dx, const int &incx)
void sgetrf(const int &n, const int &m, float *a, const int &n0, int *piv, int &st)
void zpotrf(const char &UPLO, const int &N, std::complex< double > *A, const int &LDA, int &INFO)
void cgemv(const char &trans, const int &nr, const int &nc, const std::complex< float > &alpha, const std::complex< float > *amat, const int &lda, const std::complex< float > *bv, const int &incx, const std::complex< float > &beta, std::complex< float > *cv, const int &incy)
void cgesvd(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 > *VT, const int &LDVT, std::complex< float > *work, const int &LWORK, float *RWORK, int &INFO)
void cunglq(const int &M, const int &N, const int &K, std::complex< float > *A, const int &LDA, std::complex< float > *TAU, std::complex< float > *WORK, const int &LWORK, int &INFO)
void dsyr2k(const char &, const char &, const int &, const int &, const double &, const double *, const int &, const double *, const int &, const double &, double *, const int &)
double dznrm2(const int &n, const std::complex< double > *dx, const int &incx)
void caxpy(const int &n, const std::complex< float > &da, const std::complex< float > *dx, const int &incx, std::complex< float > *dy, const int &incy)
void cheevr(char &JOBZ, char &RANGE, char &UPLO, int &N, std::complex< float > *A, int &LDA, float &VL, float &VU, int &IL, int &IU, float &ABSTOL, int &M, float *W, std::complex< float > *Z, int &LDZ, int *ISUPPZ, std::complex< float > *WORK, int &LWORK, float *RWORK, int &LRWORK, int *IWORK, int &LIWORK, int &INFO)
void cungqr(const int &M, const int &N, const int &K, std::complex< float > *A, const int &LDA, std::complex< float > *TAU, std::complex< float > *WORK, const int &LWORK, int &INFO)
float snrm2(const int &n, const float *dx, const int &incx)
void cpotrf(const char &UPLO, const int &N, std::complex< float > *A, const int &LDA, int &INFO)
void sger(const int *m, const int *n, const float *alpha, const float *x, const int *incx, const float *y, const int *incy, float *a, const int *lda)
void spotrf(const char &UPLO, const int &N, float *A, const int &LDA, int &INFO)
void zgelqf(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)
void csscal(const int &n, const float &, std::complex< float > *x, const int &)
void dsyrk(const char &, const char &, const int &, const int &, const double &, const double *, const int &, const double &, double *, const int &)
void sgesvd(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 *VT, const int &LDVT, float *work, const int &LWORK, int &INFO)
void zscal(const int &n, const std::complex< double > &, std::complex< double > *x, const int &)
constexpr char TRANS
Definition: BLAS.hpp:43
void zunglq(const int &M, const int &N, const int &K, std::complex< double > *A, const int &LDA, std::complex< double > *TAU, std::complex< double > *WORK, const int &LWORK, int &INFO)
void dtgexc(const bool *WANTQ, const bool *WANTZ, const int *N, double *A, const int *LDA, double *B, const int *LDB, double *Q, const int *LDQ, double *Z, const int *LDZ, int *IFST, int *ILST, double *WORK, int *LWORK, int *INFO)
void daxpy(const int &n, const double &da, const double *dx, const int &incx, double *dy, const int &incy)
void dgeev(char *JOBVL, char *JOBVR, int *N, double *A, int *LDA, double *ALPHAR, double *ALPHAI, double *VL, int *LDVL, double *VR, int *LDVR, double *WORK, int *LWORK, int *INFO)
double B(double x, int k, int i, const std::vector< double > &t)
void dsymv(const char &uplo, const int &n, const double &alpha, const double &a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
void cgeqrf(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)
void dgemv(const char &trans, const int &nr, const int &nc, const double &alpha, const double *amat, const int &lda, const double *bv, const int &incx, const double &beta, double *cv, const int &incy)
void dsyevr(char &JOBZ, char &RANGE, char &UPLO, int &N, double *A, int &LDA, double &VL, double &VU, int &IL, int &IU, double &ABSTOL, int &M, double *W, double *Z, int &LDZ, int *ISUPPZ, double *WORK, int &LWORK, int *IWORK, int &LIWORK, int &INFO)
void zhegvx(int &, char &JOBZ, char &RANGE, char &UPLO, int &N, std::complex< double > *A, int &LDA, std::complex< double > *B, int &LDB, double &VL, double &VU, int &IL, int &IU, double &ABSTOL, int &M, double *W, std::complex< double > *Z, int &LDZ, std::complex< double > *WORK, int &LWORK, double *RWORK, int *IWORK, int *IFAIL, int &INFO)
void zgetrf(const int &n, const int &m, std::complex< double > *a, const int &n0, int *piv, int &st)
void dgetri(const int &n, double *a, const int &n0, int const *piv, double *work, const int &, int &st)
void sgemv(const char &trans, const int &nr, const int &nc, const float &alpha, const float *amat, const int &lda, const float *bv, const int &incx, const float &beta, float *cv, const int &incy)
void cheev(char &JOBZ, char &UPLO, int &N, std::complex< float > *A, int &LDA, float *W, std::complex< float > *WORK, int &LWORK, float *RWORK, int &INFO)