DFT-EFE
 
Loading...
Searching...
No Matches
ScalapackTemplates.h
Go to the documentation of this file.
1// ---------------------------------------------------------------------
2//
3// Copyright (C) 2017 - 2019 by the deal.II authors
4//
5// This file is part of the deal.II library.
6//
7// The deal.II library is free software; you can use it, redistribute
8// it, and/or modify it under the terms of the GNU Lesser General
9// Public License as published by the Free Software Foundation; either
10// version 2.1 of the License, or (at your option) any later version.
11// The full text of the license can be found in the file LICENSE.md at
12// the top level directory of deal.II.
13//
14// ---------------------------------------------------------------------
15
16#ifndef dftefeScalapackTemplates_h
17#define dftefeScalapackTemplates_h
18
19#include "MultiVector.h"
20#include <fstream>
21#include <iostream>
22#include <fenv.h>
23#include <vector>
24
25// useful examples:
26// https://stackoverflow.com/questions/14147705/cholesky-decomposition-scalapack-error/14203864
27// http://icl.cs.utk.edu/lapack-forum/viewtopic.php?t=139 // second post by
28// Julien Langou
29// https://andyspiros.wordpress.com/2011/07/08/an-example-of-blacs-with-c/
30// http://qboxcode.org/trac/browser/qb/tags/rel1_63_4/src/Matrix.C
31// https://gitlab.phys.ethz.ch/lwossnig/lecture/blob/a534f562dfb2ad5c564abe5c2356d5d956fb7218/examples/mpi/scalapack.cpp
32// https://github.com/elemental/Elemental/blob/master/src/core/imports/scalapack.cpp
33// https://scicomp.stackexchange.com/questions/7766/performance-optimization-or-tuning-possible-for-scalapack-gemm
34//
35// info:
36// http://www.netlib.org/scalapack/slug/index.html // User guide
37// http://www.netlib.org/scalapack/slug/node135.html // How to Measure Errors
38// NOTE: Non-templated functions are chosen over templated functions if their
39// names match and template function is not explicitly called
40namespace dftefe
41{
42 namespace linearAlgebra
43 {
44 extern "C"
45 {
46 /* Basic Linear Algebra Communication Subprograms (BLACS) declarations */
47 // https://www.ibm.com/support/knowledgecenter/SSNR5K_4.2.0/com.ibm.cluster.pessl.v4r2.pssl100.doc/am6gr_dinitb.htm#dinitb
48
55 void
56 Cblacs_pinfo(int *rank, int *nprocs);
57
65 void
66 Cblacs_get(int icontxt, int what, int *val);
67
79 void
80 Cblacs_gridinit(int * context,
81 const char *order,
82 int grid_height,
83 int grid_width);
84
90 void
91 Cblacs_gridinfo(int context,
92 int *grid_height,
93 int *grid_width,
94 int *grid_row,
95 int *grid_col);
96
101 void
102 Cblacs_pcoord(int ictxt, int pnum, int *prow, int *pcol);
103
107 void
108 Cblacs_gridexit(int context);
109
114 void
115 Cblacs_barrier(int, const char *);
116
120 void
121 Cblacs_exit(int error_code);
122
128 void
129 Cdgerv2d(int context,
130 int M,
131 int N,
132 double *A,
133 int lda,
134 int rsrc,
135 int csrc);
136 void
137 Csgerv2d(int context,
138 int M,
139 int N,
140 float *A,
141 int lda,
142 int rsrc,
143 int csrc);
144
151 void
152 Cdgesd2d(int context,
153 int M,
154 int N,
155 double *A,
156 int lda,
157 int rdest,
158 int cdest);
159 void
160 Csgesd2d(int context,
161 int M,
162 int N,
163 float *A,
164 int lda,
165 int rdest,
166 int cdest);
167
171 int
173
180 int
181 numroc_(const int *n,
182 const int *nb,
183 const int *iproc,
184 const int *isproc,
185 const int *nprocs);
189 void
190 pzlacgv_(const int * N,
191 std::complex<double> *A,
192 const int * IA,
193 const int * JA,
194 const int * DESCA,
195 const int * INCX);
196
205 void
206 pdpotrf_(const char *UPLO,
207 const int * N,
208 double * A,
209 const int * IA,
210 const int * JA,
211 const int * DESCA,
212 int * INFO);
213 void
214 pspotrf_(const char *UPLO,
215 const int * N,
216 float * A,
217 const int * IA,
218 const int * JA,
219 const int * DESCA,
220 int * INFO);
221 void
222 pzpotrf_(const char * UPLO,
223 const int * N,
224 std::complex<double> *A,
225 const int * IA,
226 const int * JA,
227 const int * DESCA,
228 int * INFO);
229
237 void
238 pdgetrf_(const int *m,
239 const int *n,
240 double * A,
241 const int *IA,
242 const int *JA,
243 const int *DESCA,
244 int * ipiv,
245 int * INFO);
246 void
247 psgetrf_(const int *m,
248 const int *n,
249 float * A,
250 const int *IA,
251 const int *JA,
252 const int *DESCA,
253 int * ipiv,
254 int * INFO);
255 void
256 pzgetrf_(const int * m,
257 const int * n,
258 std::complex<double> *A,
259 const int * IA,
260 const int * JA,
261 const int * DESCA,
262 int * ipiv,
263 int * INFO);
274 void
275 pdpotri_(const char *UPLO,
276 const int * N,
277 double * A,
278 const int * IA,
279 const int * JA,
280 const int * DESCA,
281 int * INFO);
282 void
283 pspotri_(const char *UPLO,
284 const int * N,
285 float * A,
286 const int * IA,
287 const int * JA,
288 const int * DESCA,
289 int * INFO);
290 void
291 pzpotri_(const char * UPLO,
292 const int * N,
293 std::complex<double> *A,
294 const int * IA,
295 const int * JA,
296 const int * DESCA,
297 int * INFO);
298
308 void
309 pdgetri_(const int *N,
310 double * A,
311 const int *IA,
312 const int *JA,
313 const int *DESCA,
314 const int *ipiv,
315 double * work,
316 int * lwork,
317 int * iwork,
318 int * liwork,
319 int * info);
320 void
321 psgetri_(const int *N,
322 float * A,
323 const int *IA,
324 const int *JA,
325 const int *DESCA,
326 const int *ipiv,
327 float * work,
328 int * lwork,
329 int * iwork,
330 int * liwork,
331 int * info);
332 void
333 pzgetri_(const int * N,
334 std::complex<double> *A,
335 const int * IA,
336 const int * JA,
337 const int * DESCA,
338 const int * ipiv,
339 std::complex<double> *work,
340 int * lwork,
341 int * iwork,
342 int * liwork,
343 int * info);
344
353 void
354 pdtrtri_(const char *UPLO,
355 const char *DIAG,
356 const int * N,
357 double * A,
358 const int * IA,
359 const int * JA,
360 const int * DESCA,
361 int * INFO);
362 void
363 pstrtri_(const char *UPLO,
364 const char *DIAG,
365 const int * N,
366 float * A,
367 const int * IA,
368 const int * JA,
369 const int * DESCA,
370 int * INFO);
371
372 void
373 pztrtri_(const char * UPLO,
374 const char * DIAG,
375 const int * N,
376 std::complex<double> *A,
377 const int * IA,
378 const int * JA,
379 const int * DESCA,
380 int * INFO);
381
391 void
392 pdpocon_(const char * uplo,
393 const int * N,
394 const double *A,
395 const int * IA,
396 const int * JA,
397 const int * DESCA,
398 const double *ANORM,
399 double * RCOND,
400 double * WORK,
401 const int * LWORK,
402 int * IWORK,
403 const int * LIWORK,
404 int * INFO);
405 void
406 pspocon_(const char * uplo,
407 const int * N,
408 const float *A,
409 const int * IA,
410 const int * JA,
411 const int * DESCA,
412 const float *ANORM,
413 float * RCOND,
414 float * WORK,
415 const int * LWORK,
416 int * IWORK,
417 const int * LIWORK,
418 int * INFO);
419
426 double
427 pdlansy_(const char * norm,
428 const char * uplo,
429 const int * N,
430 const double *A,
431 const int * IA,
432 const int * JA,
433 const int * DESCA,
434 double * work);
435 float
436 pslansy_(const char * norm,
437 const char * uplo,
438 const int * N,
439 const float *A,
440 const int * IA,
441 const int * JA,
442 const int * DESCA,
443 float * work);
444
452 int
453 ilcm_(const int *M, const int *N);
454
460 int
461 iceil_(const int *i1, const int *i2);
462
466 void
467 descinit_(int * desc,
468 const int *m,
469 const int *n,
470 const int *mb,
471 const int *nb,
472 const int *irsrc,
473 const int *icsrc,
474 const int *ictxt,
475 const int *lld,
476 int * info);
477
493 int
494 indxl2g_(const int *indxloc,
495 const int *nb,
496 const int *iproc,
497 const int *isrcproc,
498 const int *nprocs);
499
503 void
504 pdgesv_(const int *n,
505 const int *nrhs,
506 double * A,
507 const int *ia,
508 const int *ja,
509 const int *desca,
510 int * ipiv,
511 double * B,
512 const int *ib,
513 const int *jb,
514 const int *descb,
515 int * info);
516 void
517 psgesv_(const int *n,
518 const int *nrhs,
519 float * A,
520 const int *ia,
521 const int *ja,
522 const int *desca,
523 int * ipiv,
524 float * B,
525 const int *ib,
526 const int *jb,
527 const int *descb,
528 int * info);
529
544 void
545 pdgemm_(const char * transa,
546 const char * transb,
547 const int * m,
548 const int * n,
549 const int * k,
550 const double *alpha,
551 const double *A,
552 const int * IA,
553 const int * JA,
554 const int * DESCA,
555 const double *B,
556 const int * IB,
557 const int * JB,
558 const int * DESCB,
559 const double *beta,
560 double * C,
561 const int * IC,
562 const int * JC,
563 const int * DESCC);
564 void
565 psgemm_(const char * transa,
566 const char * transb,
567 const int * m,
568 const int * n,
569 const int * k,
570 const float *alpha,
571 const float *A,
572 const int * IA,
573 const int * JA,
574 const int * DESCA,
575 const float *B,
576 const int * IB,
577 const int * JB,
578 const int * DESCB,
579 const float *beta,
580 float * C,
581 const int * IC,
582 const int * JC,
583 const int * DESCC);
584
585 void
586 pzgemm_(const char * transa,
587 const char * transb,
588 const int * m,
589 const int * n,
590 const int * k,
591 const std::complex<double> *alpha,
592 const std::complex<double> *A,
593 const int * IA,
594 const int * JA,
595 const int * DESCA,
596 const std::complex<double> *B,
597 const int * IB,
598 const int * JB,
599 const int * DESCB,
600 const std::complex<double> *beta,
601 std::complex<double> * C,
602 const int * IC,
603 const int * JC,
604 const int * DESCC);
605
611 double
612 pdlange_(char const * norm,
613 const int * m,
614 const int * n,
615 const double *A,
616 const int * ia,
617 const int * ja,
618 const int * desca,
619 double * work);
620 float
621 pslange_(const char * norm,
622 const int * m,
623 const int * n,
624 const float *A,
625 const int * ia,
626 const int * ja,
627 const int * desca,
628 float * work);
629
634 int
635 indxg2p_(const int *glob,
636 const int *nb,
637 const int *iproc,
638 const int *isproc,
639 const int *nprocs);
640
653 void
654 pdsyev_(const char *jobz,
655 const char *uplo,
656 const int * m,
657 double * A,
658 const int * ia,
659 const int * ja,
660 int * desca,
661 double * w,
662 double * z,
663 const int * iz,
664 const int * jz,
665 int * descz,
666 double * work,
667 const int * lwork,
668 int * info);
669 void
670 pssyev_(const char *jobz,
671 const char *uplo,
672 const int * m,
673 float * A,
674 const int * ia,
675 const int * ja,
676 int * desca,
677 float * w,
678 float * z,
679 const int * iz,
680 const int * jz,
681 int * descz,
682 float * work,
683 const int * lwork,
684 int * info);
685 void
686 pzheev_(const char * jobz,
687 const char * uplo,
688 const int * m,
689 std::complex<double> *A,
690 const int * ia,
691 const int * ja,
692 int * desca,
693 double * w,
694 std::complex<double> *z,
695 const int * iz,
696 const int * jz,
697 int * descz,
698 std::complex<double> *work,
699 const int * lwork,
700 int * info);
701
709 void
710 pdlacpy_(const char * uplo,
711 const int * m,
712 const int * n,
713 const double *A,
714 const int * ia,
715 const int * ja,
716 const int * desca,
717 double * B,
718 const int * ib,
719 const int * jb,
720 const int * descb);
721 void
722 pslacpy_(const char * uplo,
723 const int * m,
724 const int * n,
725 const float *A,
726 const int * ia,
727 const int * ja,
728 const int * desca,
729 float * B,
730 const int * ib,
731 const int * jb,
732 const int * descb);
733
742 void
743 pdgemr2d_(const int * m,
744 const int * n,
745 const double *A,
746 const int * ia,
747 const int * ja,
748 const int * desca,
749 double * B,
750 const int * ib,
751 const int * jb,
752 const int * descb,
753 const int * ictxt);
754 void
755 psgemr2d_(const int * m,
756 const int * n,
757 const float *A,
758 const int * ia,
759 const int * ja,
760 const int * desca,
761 float * B,
762 const int * ib,
763 const int * jb,
764 const int * descb,
765 const int * ictxt);
766
770 double
771 pdlamch_(const int *ictxt, const char *cmach);
772 float
773 pslamch_(const int *ictxt, const char *cmach);
774
775
782 void
783 pdsyevx_(const char * jobz,
784 const char * range,
785 const char * uplo,
786 const int * n,
787 double * A,
788 const int * ia,
789 const int * ja,
790 const int * desca,
791 const double *VL,
792 const double *VU,
793 const int * il,
794 const int * iu,
795 const double *abstol,
796 const int * m,
797 const int * nz,
798 double * w,
799 double * orfac,
800 double * Z,
801 const int * iz,
802 const int * jz,
803 const int * descz,
804 double * work,
805 int * lwork,
806 int * iwork,
807 int * liwork,
808 int * ifail,
809 int * iclustr,
810 double * gap,
811 int * info);
812 void
813 pssyevx_(const char * jobz,
814 const char * range,
815 const char * uplo,
816 const int * n,
817 float * A,
818 const int * ia,
819 const int * ja,
820 const int * desca,
821 const float *VL,
822 const float *VU,
823 const int * il,
824 const int * iu,
825 const float *abstol,
826 const int * m,
827 const int * nz,
828 float * w,
829 float * orfac,
830 float * Z,
831 const int * iz,
832 const int * jz,
833 const int * descz,
834 float * work,
835 int * lwork,
836 int * iwork,
837 int * liwork,
838 int * ifail,
839 int * iclustr,
840 float * gap,
841 int * info);
842 void
843 pzheevx_(const char * jobz,
844 const char * range,
845 const char * uplo,
846 const int * n,
847 std::complex<double> *A,
848 const int * ia,
849 const int * ja,
850 const int * desca,
851 const double * VL,
852 const double * VU,
853 const int * il,
854 const int * iu,
855 const double * abstol,
856 const int * m,
857 const int * nz,
858 double * w,
859 double * orfac,
860 std::complex<double> *Z,
861 const int * iz,
862 const int * jz,
863 const int * descz,
864 std::complex<double> *work,
865 int * lwork,
866 int * iwork,
867 int * liwork,
868 int * ifail,
869 int * iclustr,
870 double * gap,
871 int * info);
872
873 /*
874 * PDGESVD computes the singular value decomposition (SVD) of an
875 * M-by-N matrix A, optionally computing the left and/or right
876 * singular vectors
877 */
878 void
879 pdgesvd_(const char *jobu,
880 const char *jobvt,
881 const int * m,
882 const int * n,
883 double * A,
884 const int * ia,
885 const int * ja,
886 const int * desca,
887 double * S,
888 double * U,
889 const int * iu,
890 const int * ju,
891 const int * descu,
892 double * VT,
893 const int * ivt,
894 const int * jvt,
895 const int * descvt,
896 double * work,
897 int * lwork,
898 int * info);
899 void
900 psgesvd_(const char *jobu,
901 const char *jobvt,
902 const int * m,
903 const int * n,
904 float * A,
905 const int * ia,
906 const int * ja,
907 const int * desca,
908 float * S,
909 float * U,
910 const int * iu,
911 const int * ju,
912 const int * descu,
913 float * VT,
914 const int * ivt,
915 const int * jvt,
916 const int * descvt,
917 float * work,
918 int * lwork,
919 int * info);
920
921 /*
922 * P_GELS solves overdetermined or underdetermined real linear
923 * systems involving an M-by-N matrix A, or its transpose,
924 * using a QR or LQ factorization of A. It is assumed that A has full
925 * rank.
926 */
927 void
928 pdgels_(const char *trans,
929 const int * m,
930 const int * n,
931 const int * nrhs,
932 double * A,
933 const int * ia,
934 const int * ja,
935 const int * desca,
936 double * B,
937 const int * ib,
938 const int * jb,
939 const int * descb,
940 double * work,
941 int * lwork,
942 int * info);
943 void
944 psgels_(const char *trans,
945 const int * m,
946 const int * n,
947 const int * nrhs,
948 float * A,
949 const int * ia,
950 const int * ja,
951 const int * desca,
952 float * B,
953 const int * ib,
954 const int * jb,
955 const int * descb,
956 float * work,
957 int * lwork,
958 int * info);
959
960 /*
961 * Perform matrix sum:
962 * @f{equation*}
963 * C \dealcoloneq \beta C + \alpha op(A),
964 * @f
965 * where $op(A)$ denotes either $op(A) = A$ or $op(A)=A^T$.
966 */
967 void
968 pdgeadd_(const char * transa,
969 const int * m,
970 const int * n,
971 const double *alpha,
972 const double *A,
973 const int * IA,
974 const int * JA,
975 const int * DESCA,
976 const double *beta,
977 double * C,
978 const int * IC,
979 const int * JC,
980 const int * DESCC);
981 void
982 psgeadd_(const char * transa,
983 const int * m,
984 const int * n,
985 const float *alpha,
986 const float *A,
987 const int * IA,
988 const int * JA,
989 const int * DESCA,
990 const float *beta,
991 float * C,
992 const int * IC,
993 const int * JC,
994 const int * DESCC);
995 void
996 pzgeadd_(const char * transa,
997 const int * m,
998 const int * n,
999 const std::complex<double> *alpha,
1000 const std::complex<double> *A,
1001 const int * IA,
1002 const int * JA,
1003 const int * DESCA,
1004 const std::complex<double> *beta,
1005 std::complex<double> * C,
1006 const int * IC,
1007 const int * JC,
1008 const int * DESCC);
1009
1014 void
1015 pdtran_(const int * m,
1016 const int * n,
1017 const double *alpha,
1018 const double *A,
1019 const int * IA,
1020 const int * JA,
1021 const int * DESCA,
1022 const double *beta,
1023 double * C,
1024 const int * IC,
1025 const int * JC,
1026 const int * DESCC);
1027 void
1028 pstran_(const int * m,
1029 const int * n,
1030 const float *alpha,
1031 const float *A,
1032 const int * IA,
1033 const int * JA,
1034 const int * DESCA,
1035 const float *beta,
1036 float * C,
1037 const int * IC,
1038 const int * JC,
1039 const int * DESCC);
1040
1047 void
1048 pdsyevr_(const char * jobz,
1049 const char * range,
1050 const char * uplo,
1051 const int * n,
1052 double * A,
1053 const int * IA,
1054 const int * JA,
1055 const int * DESCA,
1056 const double *VL,
1057 const double *VU,
1058 const int * IL,
1059 const int * IU,
1060 int * m,
1061 int * nz,
1062 double * w,
1063 double * Z,
1064 const int * IZ,
1065 const int * JZ,
1066 const int * DESCZ,
1067 double * work,
1068 int * lwork,
1069 int * iwork,
1070 int * liwork,
1071 int * info);
1072 void
1073 pssyevr_(const char * jobz,
1074 const char * range,
1075 const char * uplo,
1076 const int * n,
1077 float * A,
1078 const int * IA,
1079 const int * JA,
1080 const int * DESCA,
1081 const float *VL,
1082 const float *VU,
1083 const int * IL,
1084 const int * IU,
1085 int * m,
1086 int * nz,
1087 float * w,
1088 float * Z,
1089 const int * IZ,
1090 const int * JZ,
1091 const int * DESCZ,
1092 float * work,
1093 int * lwork,
1094 int * iwork,
1095 int * liwork,
1096 int * info);
1097 void
1098 pzheevr_(const char * jobz,
1099 const char * range,
1100 const char * uplo,
1101 const int * n,
1102 std::complex<double> *A,
1103 const int * IA,
1104 const int * JA,
1105 const int * DESCA,
1106 const double * VL,
1107 const double * VU,
1108 const int * IL,
1109 const int * IU,
1110 int * m,
1111 int * nz,
1112 double * w,
1113 std::complex<double> *Z,
1114 const int * IZ,
1115 const int * JZ,
1116 const int * DESCZ,
1117 std::complex<double> *work,
1118 int * lwork,
1119 int * iwork,
1120 int * liwork,
1121 int * info);
1122 }
1123
1124
1125
1126 /*
1127 * In the following we have template wrappers for the ScaLAPACK routines
1128 * wrappers for other numeric types can be added in the future
1129 */
1130 template <typename number>
1131 inline void
1132 Cgerv2d(int /*context*/,
1133 int /*M*/,
1134 int /*N*/,
1135 number * /*A*/,
1136 int /*lda*/,
1137 int /*rsrc*/,
1138 int /*csrc*/)
1139 {
1141 "Function in ScalapackTemplates.h not implemented");
1142 }
1143
1144 inline void
1145 Cgerv2d(int context, int M, int N, double *A, int lda, int rsrc, int csrc)
1146 {
1147 Cdgerv2d(context, M, N, A, lda, rsrc, csrc);
1148 }
1149
1150 inline void
1151 Cgerv2d(int context, int M, int N, float *A, int lda, int rsrc, int csrc)
1152 {
1153 Csgerv2d(context, M, N, A, lda, rsrc, csrc);
1154 }
1155
1156
1157 template <typename number>
1158 inline void
1159 Cgesd2d(int /*context*/,
1160 int /*M*/,
1161 int /*N*/,
1162 number * /*A*/,
1163 int /*lda*/,
1164 int /*rdest*/,
1165 int /*cdest*/)
1166 {
1168 "Function in ScalapackTemplates.h not implemented");
1169 }
1170
1171 inline void
1172 Cgesd2d(int context, int M, int N, double *A, int lda, int rdest, int cdest)
1173 {
1174 Cdgesd2d(context, M, N, A, lda, rdest, cdest);
1175 }
1176
1177 inline void
1178 Cgesd2d(int context, int M, int N, float *A, int lda, int rdest, int cdest)
1179 {
1180 Csgesd2d(context, M, N, A, lda, rdest, cdest);
1181 }
1182
1183 inline void
1184 pplacgv(const int *N,
1185 double * A,
1186 const int *IA,
1187 const int *JA,
1188 const int *DESCA,
1189 const int *INCX)
1190 {}
1191
1192 inline void
1193 pplacgv(const int * N,
1194 std::complex<double> *A,
1195 const int * IA,
1196 const int * JA,
1197 const int * DESCA,
1198 const int * INCX)
1199 {
1200 pzlacgv_(N, A, IA, JA, DESCA, INCX);
1201 }
1202
1203 template <typename number>
1204 inline void
1205 ppotrf(const char * /*UPLO*/,
1206 const int * /*N*/,
1207 number * /*A*/,
1208 const int * /*IA*/,
1209 const int * /*JA*/,
1210 const int * /*DESCA*/,
1211 int * /*INFO*/)
1212 {
1214 "Function in ScalapackTemplates.h not implemented");
1215 }
1216
1217 inline void
1218 ppotrf(const char *UPLO,
1219 const int * N,
1220 double * A,
1221 const int * IA,
1222 const int * JA,
1223 const int * DESCA,
1224 int * INFO)
1225 {
1226 pdpotrf_(UPLO, N, A, IA, JA, DESCA, INFO);
1227 }
1228
1229 inline void
1230 ppotrf(const char *UPLO,
1231 const int * N,
1232 float * A,
1233 const int * IA,
1234 const int * JA,
1235 const int * DESCA,
1236 int * INFO)
1237 {
1238 pspotrf_(UPLO, N, A, IA, JA, DESCA, INFO);
1239 }
1240
1241 inline void
1242 ppotrf(const char * UPLO,
1243 const int * N,
1244 std::complex<double> *A,
1245 const int * IA,
1246 const int * JA,
1247 const int * DESCA,
1248 int * INFO)
1249 {
1250 pzpotrf_(UPLO, N, A, IA, JA, DESCA, INFO);
1251 }
1252
1253 template <typename number>
1254 inline void
1255 pgetrf(const int * /*m*/,
1256 const int * /*n*/,
1257 number * /*A*/,
1258 const int * /*IA*/,
1259 const int * /*JA*/,
1260 const int * /*DESCA*/,
1261 int * /*ipiv*/,
1262 int * /*INFO*/)
1263 {
1265 "Function in ScalapackTemplates.h not implemented");
1266 }
1267
1268 inline void
1269 pgetrf(const int *m,
1270 const int *n,
1271 double * A,
1272 const int *IA,
1273 const int *JA,
1274 const int *DESCA,
1275 int * ipiv,
1276 int * INFO)
1277 {
1278 pdgetrf_(m, n, A, IA, JA, DESCA, ipiv, INFO);
1279 }
1280
1281 inline void
1282 pgetrf(const int *m,
1283 const int *n,
1284 float * A,
1285 const int *IA,
1286 const int *JA,
1287 const int *DESCA,
1288 int * ipiv,
1289 int * INFO)
1290 {
1291 psgetrf_(m, n, A, IA, JA, DESCA, ipiv, INFO);
1292 }
1293
1294 inline void
1295 pgetrf(const int * m,
1296 const int * n,
1297 std::complex<double> *A,
1298 const int * IA,
1299 const int * JA,
1300 const int * DESCA,
1301 int * ipiv,
1302 int * INFO)
1303 {
1304 pzgetrf_(m, n, A, IA, JA, DESCA, ipiv, INFO);
1305 }
1306
1307 template <typename number>
1308 inline void
1309 ppotri(const char * /*UPLO*/,
1310 const int * /*N*/,
1311 number * /*A*/,
1312 const int * /*IA*/,
1313 const int * /*JA*/,
1314 const int * /*DESCA*/,
1315 int * /*INFO*/)
1316 {
1318 "Function in ScalapackTemplates.h not implemented");
1319 }
1320
1321 inline void
1322 ppotri(const char *UPLO,
1323 const int * N,
1324 double * A,
1325 const int * IA,
1326 const int * JA,
1327 const int * DESCA,
1328 int * INFO)
1329 {
1330 pdpotri_(UPLO, N, A, IA, JA, DESCA, INFO);
1331 }
1332
1333 inline void
1334 ppotri(const char *UPLO,
1335 const int * N,
1336 float * A,
1337 const int * IA,
1338 const int * JA,
1339 const int * DESCA,
1340 int * INFO)
1341 {
1342 pspotri_(UPLO, N, A, IA, JA, DESCA, INFO);
1343 }
1344
1345 inline void
1346 ppotri(const char * UPLO,
1347 const int * N,
1348 std::complex<double> *A,
1349 const int * IA,
1350 const int * JA,
1351 const int * DESCA,
1352 int * INFO)
1353 {
1354 pzpotri_(UPLO, N, A, IA, JA, DESCA, INFO);
1355 }
1356
1357 template <typename number>
1358 inline void
1359 pgetri(const int * /*N*/,
1360 number * /*A*/,
1361 const int * /*IA*/,
1362 const int * /*JA*/,
1363 const int * /*DESCA*/,
1364 const int * /*ipiv*/,
1365 number * /*work*/,
1366 int * /*lwork*/,
1367 int * /*iwork*/,
1368 int * /*liwork*/,
1369 int * /*info*/)
1370 {
1372 "Function in ScalapackTemplates.h not implemented");
1373 }
1374
1375 inline void
1376 pgetri(const int *N,
1377 double * A,
1378 const int *IA,
1379 const int *JA,
1380 const int *DESCA,
1381 const int *ipiv,
1382 double * work,
1383 int * lwork,
1384 int * iwork,
1385 int * liwork,
1386 int * info)
1387 {
1388 pdgetri_(N, A, IA, JA, DESCA, ipiv, work, lwork, iwork, liwork, info);
1389 }
1390
1391 inline void
1392 pgetri(const int *N,
1393 float * A,
1394 const int *IA,
1395 const int *JA,
1396 const int *DESCA,
1397 const int *ipiv,
1398 float * work,
1399 int * lwork,
1400 int * iwork,
1401 int * liwork,
1402 int * info)
1403 {
1404 psgetri_(N, A, IA, JA, DESCA, ipiv, work, lwork, iwork, liwork, info);
1405 }
1406
1407 inline void
1408 pgetri(const int * N,
1409 std::complex<double> *A,
1410 const int * IA,
1411 const int * JA,
1412 const int * DESCA,
1413 const int * ipiv,
1414 std::complex<double> *work,
1415 int * lwork,
1416 int * iwork,
1417 int * liwork,
1418 int * info)
1419 {
1420 pzgetri_(N, A, IA, JA, DESCA, ipiv, work, lwork, iwork, liwork, info);
1421 }
1422
1423
1424
1425 template <typename number>
1426 inline void
1427 ptrtri(const char * /*UPLO*/,
1428 const char * /*DIAG*/,
1429 const int * /*N*/,
1430 number * /*A*/,
1431 const int * /*IA*/,
1432 const int * /*JA*/,
1433 const int * /*DESCA*/,
1434 int * /*INFO*/)
1435 {
1437 "Function in ScalapackTemplates.h not implemented");
1438 }
1439
1440 inline void
1441 ptrtri(const char *UPLO,
1442 const char *DIAG,
1443 const int * N,
1444 double * A,
1445 const int * IA,
1446 const int * JA,
1447 const int * DESCA,
1448 int * INFO)
1449 {
1450 pdtrtri_(UPLO, DIAG, N, A, IA, JA, DESCA, INFO);
1451 }
1452
1453 inline void
1454 ptrtri(const char *UPLO,
1455 const char *DIAG,
1456 const int * N,
1457 float * A,
1458 const int * IA,
1459 const int * JA,
1460 const int * DESCA,
1461 int * INFO)
1462 {
1463 pstrtri_(UPLO, DIAG, N, A, IA, JA, DESCA, INFO);
1464 }
1465
1466 inline void
1467 ptrtri(const char * UPLO,
1468 const char * DIAG,
1469 const int * N,
1470 std::complex<double> *A,
1471 const int * IA,
1472 const int * JA,
1473 const int * DESCA,
1474 int * INFO)
1475 {
1476 pztrtri_(UPLO, DIAG, N, A, IA, JA, DESCA, INFO);
1477 }
1478
1479 template <typename number>
1480 inline void
1481 ppocon(const char * /*uplo*/,
1482 const int * /*N*/,
1483 const number * /*A*/,
1484 const int * /*IA*/,
1485 const int * /*JA*/,
1486 const int * /*DESCA*/,
1487 const number * /*ANORM*/,
1488 number * /*RCOND*/,
1489 number * /*WORK*/,
1490 const int * /*LWORK*/,
1491 int * /*IWORK*/,
1492 const int * /*LIWORK*/,
1493 int * /*INFO*/)
1494 {
1496 "Function in ScalapackTemplates.h not implemented");
1497 }
1498
1499 inline void
1500 ppocon(const char * uplo,
1501 const int * N,
1502 const double *A,
1503 const int * IA,
1504 const int * JA,
1505 const int * DESCA,
1506 const double *ANORM,
1507 double * RCOND,
1508 double * WORK,
1509 const int * LWORK,
1510 int * IWORK,
1511 const int * LIWORK,
1512 int * INFO)
1513 {
1514 pdpocon_(uplo,
1515 N,
1516 A,
1517 IA,
1518 JA,
1519 DESCA,
1520 ANORM,
1521 RCOND,
1522 WORK,
1523 LWORK,
1524 IWORK,
1525 LIWORK,
1526 INFO);
1527 }
1528
1529 inline void
1530 ppocon(const char * uplo,
1531 const int * N,
1532 const float *A,
1533 const int * IA,
1534 const int * JA,
1535 const int * DESCA,
1536 const float *ANORM,
1537 float * RCOND,
1538 float * WORK,
1539 const int * LWORK,
1540 int * IWORK,
1541 const int * LIWORK,
1542 int * INFO)
1543 {
1544 pspocon_(uplo,
1545 N,
1546 A,
1547 IA,
1548 JA,
1549 DESCA,
1550 ANORM,
1551 RCOND,
1552 WORK,
1553 LWORK,
1554 IWORK,
1555 LIWORK,
1556 INFO);
1557 }
1558
1559
1560 template <typename number>
1561 inline number
1562 plansy(const char * /*norm*/,
1563 const char * /*uplo*/,
1564 const int * /*N*/,
1565 const number * /*A*/,
1566 const int * /*IA*/,
1567 const int * /*JA*/,
1568 const int * /*DESCA*/,
1569 number * /*work*/)
1570 {
1572 "Function in ScalapackTemplates.h not implemented");
1573 }
1574
1575 inline double
1576 plansy(const char * norm,
1577 const char * uplo,
1578 const int * N,
1579 const double *A,
1580 const int * IA,
1581 const int * JA,
1582 const int * DESCA,
1583 double * work)
1584 {
1585 return pdlansy_(norm, uplo, N, A, IA, JA, DESCA, work);
1586 }
1587
1588 inline float
1589 plansy(const char * norm,
1590 const char * uplo,
1591 const int * N,
1592 const float *A,
1593 const int * IA,
1594 const int * JA,
1595 const int * DESCA,
1596 float * work)
1597 {
1598 return pslansy_(norm, uplo, N, A, IA, JA, DESCA, work);
1599 }
1600
1601
1602 template <typename number>
1603 inline void
1604 pgesv(const int * /*n*/,
1605 const int * /*nrhs*/,
1606 number * /*A*/,
1607 const int * /*ia*/,
1608 const int * /*ja*/,
1609 const int * /*desca*/,
1610 int * /*ipiv*/,
1611 number * /*B*/,
1612 const int * /*ib*/,
1613 const int * /*jb*/,
1614 const int * /*descb*/,
1615 int * /*info*/)
1616 {
1618 "Function in ScalapackTemplates.h not implemented");
1619 }
1620
1621 inline void
1622 pgesv(const int *n,
1623 const int *nrhs,
1624 double * A,
1625 const int *ia,
1626 const int *ja,
1627 const int *desca,
1628 int * ipiv,
1629 double * B,
1630 const int *ib,
1631 const int *jb,
1632 const int *descb,
1633 int * info)
1634 {
1635 pdgesv_(n, nrhs, A, ia, ja, desca, ipiv, B, ib, jb, descb, info);
1636 }
1637
1638 inline void
1639 pgesv(const int *n,
1640 const int *nrhs,
1641 float * A,
1642 const int *ia,
1643 const int *ja,
1644 const int *desca,
1645 int * ipiv,
1646 float * B,
1647 const int *ib,
1648 const int *jb,
1649 const int *descb,
1650 int * info)
1651 {
1652 psgesv_(n, nrhs, A, ia, ja, desca, ipiv, B, ib, jb, descb, info);
1653 }
1654
1655
1656 template <typename number>
1657 inline void
1658 pgemm(const char * /*transa*/,
1659 const char * /*transb*/,
1660 const int * /*m*/,
1661 const int * /*n*/,
1662 const int * /*k*/,
1663 const number * /*alpha*/,
1664 const number * /*A*/,
1665 const int * /*IA*/,
1666 const int * /*JA*/,
1667 const int * /*DESCA*/,
1668 const number * /*B*/,
1669 const int * /*IB*/,
1670 const int * /*JB*/,
1671 const int * /*DESCB*/,
1672 const number * /*beta*/,
1673 number * /*C*/,
1674 const int * /*IC*/,
1675 const int * /*JC*/,
1676 const int * /*DESCC*/)
1677 {
1679 "Function in ScalapackTemplates.h not implemented");
1680 }
1681
1682 inline void
1683 pgemm(const char * transa,
1684 const char * transb,
1685 const int * m,
1686 const int * n,
1687 const int * k,
1688 const double *alpha,
1689 const double *A,
1690 const int * IA,
1691 const int * JA,
1692 const int * DESCA,
1693 const double *B,
1694 const int * IB,
1695 const int * JB,
1696 const int * DESCB,
1697 const double *beta,
1698 double * C,
1699 const int * IC,
1700 const int * JC,
1701 const int * DESCC)
1702 {
1703 pdgemm_(transa,
1704 transb,
1705 m,
1706 n,
1707 k,
1708 alpha,
1709 A,
1710 IA,
1711 JA,
1712 DESCA,
1713 B,
1714 IB,
1715 JB,
1716 DESCB,
1717 beta,
1718 C,
1719 IC,
1720 JC,
1721 DESCC);
1722 }
1723
1724 inline void
1725 pgemm(const char * transa,
1726 const char * transb,
1727 const int * m,
1728 const int * n,
1729 const int * k,
1730 const float *alpha,
1731 const float *A,
1732 const int * IA,
1733 const int * JA,
1734 const int * DESCA,
1735 const float *B,
1736 const int * IB,
1737 const int * JB,
1738 const int * DESCB,
1739 const float *beta,
1740 float * C,
1741 const int * IC,
1742 const int * JC,
1743 const int * DESCC)
1744 {
1745 psgemm_(transa,
1746 transb,
1747 m,
1748 n,
1749 k,
1750 alpha,
1751 A,
1752 IA,
1753 JA,
1754 DESCA,
1755 B,
1756 IB,
1757 JB,
1758 DESCB,
1759 beta,
1760 C,
1761 IC,
1762 JC,
1763 DESCC);
1764 }
1765
1766
1767 inline void
1768 pgemm(const char * transa,
1769 const char * transb,
1770 const int * m,
1771 const int * n,
1772 const int * k,
1773 const std::complex<double> *alpha,
1774 const std::complex<double> *A,
1775 const int * IA,
1776 const int * JA,
1777 const int * DESCA,
1778 const std::complex<double> *B,
1779 const int * IB,
1780 const int * JB,
1781 const int * DESCB,
1782 const std::complex<double> *beta,
1783 std::complex<double> * C,
1784 const int * IC,
1785 const int * JC,
1786 const int * DESCC)
1787 {
1788 pzgemm_(transa,
1789 transb,
1790 m,
1791 n,
1792 k,
1793 alpha,
1794 A,
1795 IA,
1796 JA,
1797 DESCA,
1798 B,
1799 IB,
1800 JB,
1801 DESCB,
1802 beta,
1803 C,
1804 IC,
1805 JC,
1806 DESCC);
1807 }
1808
1809 template <typename number>
1810 inline number
1811 plange(const char * /*norm*/,
1812 const int * /*m*/,
1813 const int * /*n*/,
1814 const number * /*A*/,
1815 const int * /*ia*/,
1816 const int * /*ja*/,
1817 const int * /*desca*/,
1818 number * /*work*/)
1819 {
1821 "Function in ScalapackTemplates.h not implemented");
1822 }
1823
1824 inline double
1825 plange(const char * norm,
1826 const int * m,
1827 const int * n,
1828 const double *A,
1829 const int * ia,
1830 const int * ja,
1831 const int * desca,
1832 double * work)
1833 {
1834 return pdlange_(norm, m, n, A, ia, ja, desca, work);
1835 }
1836
1837 inline float
1838 plange(const char * norm,
1839 const int * m,
1840 const int * n,
1841 const float *A,
1842 const int * ia,
1843 const int * ja,
1844 const int * desca,
1845 float * work)
1846 {
1847 return pslange_(norm, m, n, A, ia, ja, desca, work);
1848 }
1849
1850
1851 template <typename number>
1852 inline void
1853 psyev(const char * /*jobz*/,
1854 const char * /*uplo*/,
1855 const int * /*m*/,
1856 number * /*A*/,
1857 const int * /*ia*/,
1858 const int * /*ja*/,
1859 int * /*desca*/,
1860 number * /*w*/,
1861 number * /*z*/,
1862 const int * /*iz*/,
1863 const int * /*jz*/,
1864 int * /*descz*/,
1865 number * /*work*/,
1866 const int * /*lwork*/,
1867 int * /*info*/)
1868 {
1870 "Function in ScalapackTemplates.h not implemented");
1871 }
1872
1873 inline void
1874 psyev(const char *jobz,
1875 const char *uplo,
1876 const int * m,
1877 double * A,
1878 const int * ia,
1879 const int * ja,
1880 int * desca,
1881 double * w,
1882 double * z,
1883 const int * iz,
1884 const int * jz,
1885 int * descz,
1886 double * work,
1887 const int * lwork,
1888 int * info)
1889 {
1890 pdsyev_(jobz,
1891 uplo,
1892 m,
1893 A,
1894 ia,
1895 ja,
1896 desca,
1897 w,
1898 z,
1899 iz,
1900 jz,
1901 descz,
1902 work,
1903 lwork,
1904 info);
1905 }
1906
1907 inline void
1908 psyev(const char *jobz,
1909 const char *uplo,
1910 const int * m,
1911 float * A,
1912 const int * ia,
1913 const int * ja,
1914 int * desca,
1915 float * w,
1916 float * z,
1917 const int * iz,
1918 const int * jz,
1919 int * descz,
1920 float * work,
1921 const int * lwork,
1922 int * info)
1923 {
1924 pssyev_(jobz,
1925 uplo,
1926 m,
1927 A,
1928 ia,
1929 ja,
1930 desca,
1931 w,
1932 z,
1933 iz,
1934 jz,
1935 descz,
1936 work,
1937 lwork,
1938 info);
1939 }
1940
1941 inline void
1942 psyev(const char * jobz,
1943 const char * uplo,
1944 const int * m,
1945 std::complex<double> *A,
1946 const int * ia,
1947 const int * ja,
1948 int * desca,
1949 double * w,
1950 std::complex<double> *z,
1951 const int * iz,
1952 const int * jz,
1953 int * descz,
1954 std::complex<double> *work,
1955 const int * lwork,
1956 int * info)
1957 {
1958 pzheev_(jobz,
1959 uplo,
1960 m,
1961 A,
1962 ia,
1963 ja,
1964 desca,
1965 w,
1966 z,
1967 iz,
1968 jz,
1969 descz,
1970 work,
1971 lwork,
1972 info);
1973 }
1974
1975 template <typename number>
1976 inline void
1977 placpy(const char * /*uplo*/,
1978 const int * /*m*/,
1979 const int * /*n*/,
1980 const number * /*A*/,
1981 const int * /*ia*/,
1982 const int * /*ja*/,
1983 const int * /*desca*/,
1984 number * /*B*/,
1985 const int * /*ib*/,
1986 const int * /*jb*/,
1987 const int * /*descb*/)
1988 {
1990 "Function in ScalapackTemplates.h not implemented");
1991 }
1992
1993 inline void
1994 placpy(const char * uplo,
1995 const int * m,
1996 const int * n,
1997 const double *A,
1998 const int * ia,
1999 const int * ja,
2000 const int * desca,
2001 double * B,
2002 const int * ib,
2003 const int * jb,
2004 const int * descb)
2005 {
2006 pdlacpy_(uplo, m, n, A, ia, ja, desca, B, ib, jb, descb);
2007 }
2008
2009 inline void
2010 placpy(const char * uplo,
2011 const int * m,
2012 const int * n,
2013 const float *A,
2014 const int * ia,
2015 const int * ja,
2016 const int * desca,
2017 float * B,
2018 const int * ib,
2019 const int * jb,
2020 const int * descb)
2021 {
2022 pslacpy_(uplo, m, n, A, ia, ja, desca, B, ib, jb, descb);
2023 }
2024
2025
2026 template <typename number>
2027 inline void
2028 pgemr2d(const int * /*m*/,
2029 const int * /*n*/,
2030 const number * /*A*/,
2031 const int * /*ia*/,
2032 const int * /*ja*/,
2033 const int * /*desca*/,
2034 number * /*B*/,
2035 const int * /*ib*/,
2036 const int * /*jb*/,
2037 const int * /*descb*/,
2038 const int * /*ictxt*/)
2039 {
2041 "Function in ScalapackTemplates.h not implemented");
2042 }
2043
2044 inline void
2045 pgemr2d(const int * m,
2046 const int * n,
2047 const double *A,
2048 const int * ia,
2049 const int * ja,
2050 const int * desca,
2051 double * B,
2052 const int * ib,
2053 const int * jb,
2054 const int * descb,
2055 const int * ictxt)
2056 {
2057 pdgemr2d_(m, n, A, ia, ja, desca, B, ib, jb, descb, ictxt);
2058 }
2059
2060 inline void
2061 pgemr2d(const int * m,
2062 const int * n,
2063 const float *A,
2064 const int * ia,
2065 const int * ja,
2066 const int * desca,
2067 float * B,
2068 const int * ib,
2069 const int * jb,
2070 const int * descb,
2071 const int * ictxt)
2072 {
2073 psgemr2d_(m, n, A, ia, ja, desca, B, ib, jb, descb, ictxt);
2074 }
2075
2076
2077 template <typename number>
2078 inline void
2079 plamch(const int * /*ictxt*/, const char * /*cmach*/, number & /*val*/)
2080 {
2082 "Function in ScalapackTemplates.h not implemented");
2083 }
2084
2085 inline void
2086 plamch(const int *ictxt, const char *cmach, double &val)
2087 {
2088 val = pdlamch_(ictxt, cmach);
2089 }
2090
2091 inline void
2092 plamch(const int *ictxt, const char *cmach, float &val)
2093 {
2094 val = pslamch_(ictxt, cmach);
2095 }
2096
2097
2098 template <typename number>
2099 inline void
2100 psyevx(const char * /*jobz*/,
2101 const char * /*range*/,
2102 const char * /*uplo*/,
2103 const int * /*n*/,
2104 number * /*A*/,
2105 const int * /*ia*/,
2106 const int * /*ja*/,
2107 const int * /*desca*/,
2108 number * /*VL*/,
2109 number * /*VU*/,
2110 const int * /*il*/,
2111 const int * /*iu*/,
2112 number * /*abstol*/,
2113 const int * /*m*/,
2114 const int * /*nz*/,
2115 number * /*w*/,
2116 number * /*orfac*/,
2117 number * /*Z*/,
2118 const int * /*iz*/,
2119 const int * /*jz*/,
2120 const int * /*descz*/,
2121 number * /*work*/,
2122 int * /*lwork*/,
2123 int * /*iwork*/,
2124 int * /*liwork*/,
2125 int * /*ifail*/,
2126 int * /*iclustr*/,
2127 number * /*gap*/,
2128 int * /*info*/)
2129 {
2131 "Function in ScalapackTemplates.h not implemented");
2132 }
2133
2134 inline void
2135 psyevx(const char *jobz,
2136 const char *range,
2137 const char *uplo,
2138 const int * n,
2139 double * A,
2140 const int * ia,
2141 const int * ja,
2142 const int * desca,
2143 double * VL,
2144 double * VU,
2145 const int * il,
2146 const int * iu,
2147 double * abstol,
2148 const int * m,
2149 const int * nz,
2150 double * w,
2151 double * orfac,
2152 double * Z,
2153 const int * iz,
2154 const int * jz,
2155 const int * descz,
2156 double * work,
2157 int * lwork,
2158 int * iwork,
2159 int * liwork,
2160 int * ifail,
2161 int * iclustr,
2162 double * gap,
2163 int * info)
2164 {
2165 pdsyevx_(jobz,
2166 range,
2167 uplo,
2168 n,
2169 A,
2170 ia,
2171 ja,
2172 desca,
2173 VL,
2174 VU,
2175 il,
2176 iu,
2177 abstol,
2178 m,
2179 nz,
2180 w,
2181 orfac,
2182 Z,
2183 iz,
2184 jz,
2185 descz,
2186 work,
2187 lwork,
2188 iwork,
2189 liwork,
2190 ifail,
2191 iclustr,
2192 gap,
2193 info);
2194 }
2195
2196 inline void
2197 psyevx(const char *jobz,
2198 const char *range,
2199 const char *uplo,
2200 const int * n,
2201 float * A,
2202 const int * ia,
2203 const int * ja,
2204 const int * desca,
2205 float * VL,
2206 float * VU,
2207 const int * il,
2208 const int * iu,
2209 float * abstol,
2210 const int * m,
2211 const int * nz,
2212 float * w,
2213 float * orfac,
2214 float * Z,
2215 const int * iz,
2216 const int * jz,
2217 const int * descz,
2218 float * work,
2219 int * lwork,
2220 int * iwork,
2221 int * liwork,
2222 int * ifail,
2223 int * iclustr,
2224 float * gap,
2225 int * info)
2226 {
2227 pssyevx_(jobz,
2228 range,
2229 uplo,
2230 n,
2231 A,
2232 ia,
2233 ja,
2234 desca,
2235 VL,
2236 VU,
2237 il,
2238 iu,
2239 abstol,
2240 m,
2241 nz,
2242 w,
2243 orfac,
2244 Z,
2245 iz,
2246 jz,
2247 descz,
2248 work,
2249 lwork,
2250 iwork,
2251 liwork,
2252 ifail,
2253 iclustr,
2254 gap,
2255 info);
2256 }
2257
2258 inline void
2259 psyevx(const char * jobz,
2260 const char * range,
2261 const char * uplo,
2262 const int * n,
2263 std::complex<double> *A,
2264 const int * ia,
2265 const int * ja,
2266 const int * desca,
2267 double * VL,
2268 double * VU,
2269 const int * il,
2270 const int * iu,
2271 double * abstol,
2272 const int * m,
2273 const int * nz,
2274 double * w,
2275 double * orfac,
2276 std::complex<double> *Z,
2277 const int * iz,
2278 const int * jz,
2279 const int * descz,
2280 std::complex<double> *work,
2281 int * lwork,
2282 int * iwork,
2283 int * liwork,
2284 int * ifail,
2285 int * iclustr,
2286 double * gap,
2287 int * info)
2288 {
2289 pzheevx_(jobz,
2290 range,
2291 uplo,
2292 n,
2293 A,
2294 ia,
2295 ja,
2296 desca,
2297 VL,
2298 VU,
2299 il,
2300 iu,
2301 abstol,
2302 m,
2303 nz,
2304 w,
2305 orfac,
2306 Z,
2307 iz,
2308 jz,
2309 descz,
2310 work,
2311 lwork,
2312 iwork,
2313 liwork,
2314 ifail,
2315 iclustr,
2316 gap,
2317 info);
2318 }
2319
2320 template <typename number>
2321 inline void
2322 pgesvd(const char * /*jobu*/,
2323 const char * /*jobvt*/,
2324 const int * /*m*/,
2325 const int * /*n*/,
2326 number * /*A*/,
2327 const int * /*ia*/,
2328 const int * /*ja*/,
2329 const int * /*desca*/,
2330 number * /*S*/,
2331 number * /*U*/,
2332 const int * /*iu*/,
2333 const int * /*ju*/,
2334 const int * /*descu*/,
2335 number * /*VT*/,
2336 const int * /*ivt*/,
2337 const int * /*jvt*/,
2338 const int * /*descvt*/,
2339 number * /*work*/,
2340 int * /*lwork*/,
2341 int * /*info*/)
2342 {
2344 "Function in ScalapackTemplates.h not implemented");
2345 }
2346
2347 inline void
2348 pgesvd(const char *jobu,
2349 const char *jobvt,
2350 const int * m,
2351 const int * n,
2352 double * A,
2353 const int * ia,
2354 const int * ja,
2355 const int * desca,
2356 double * S,
2357 double * U,
2358 const int * iu,
2359 const int * ju,
2360 const int * descu,
2361 double * VT,
2362 const int * ivt,
2363 const int * jvt,
2364 const int * descvt,
2365 double * work,
2366 int * lwork,
2367 int * info)
2368 {
2369 pdgesvd_(jobu,
2370 jobvt,
2371 m,
2372 n,
2373 A,
2374 ia,
2375 ja,
2376 desca,
2377 S,
2378 U,
2379 iu,
2380 ju,
2381 descu,
2382 VT,
2383 ivt,
2384 jvt,
2385 descvt,
2386 work,
2387 lwork,
2388 info);
2389 }
2390
2391 inline void
2392 pgesvd(const char *jobu,
2393 const char *jobvt,
2394 const int * m,
2395 const int * n,
2396 float * A,
2397 const int * ia,
2398 const int * ja,
2399 const int * desca,
2400 float * S,
2401 float * U,
2402 const int * iu,
2403 const int * ju,
2404 const int * descu,
2405 float * VT,
2406 const int * ivt,
2407 const int * jvt,
2408 const int * descvt,
2409 float * work,
2410 int * lwork,
2411 int * info)
2412 {
2413 psgesvd_(jobu,
2414 jobvt,
2415 m,
2416 n,
2417 A,
2418 ia,
2419 ja,
2420 desca,
2421 S,
2422 U,
2423 iu,
2424 ju,
2425 descu,
2426 VT,
2427 ivt,
2428 jvt,
2429 descvt,
2430 work,
2431 lwork,
2432 info);
2433 }
2434
2435
2436 template <typename number>
2437 inline void
2438 pgels(const char * /*trans*/,
2439 const int * /*m*/,
2440 const int * /*n*/,
2441 const int * /*nrhs*/,
2442 number * /*A*/,
2443 const int * /*ia*/,
2444 const int * /*ja*/,
2445 const int * /*desca*/,
2446 number * /*B*/,
2447 const int * /*ib*/,
2448 const int * /*jb*/,
2449 const int * /*descb*/,
2450 number * /*work*/,
2451 int * /*lwork*/,
2452 int * /*info*/)
2453 {
2455 "Function in ScalapackTemplates.h not implemented");
2456 }
2457
2458 inline void
2459 pgels(const char *trans,
2460 const int * m,
2461 const int * n,
2462 const int * nrhs,
2463 double * A,
2464 const int * ia,
2465 const int * ja,
2466 const int * desca,
2467 double * B,
2468 const int * ib,
2469 const int * jb,
2470 const int * descb,
2471 double * work,
2472 int * lwork,
2473 int * info)
2474 {
2475 pdgels_(trans,
2476 m,
2477 n,
2478 nrhs,
2479 A,
2480 ia,
2481 ja,
2482 desca,
2483 B,
2484 ib,
2485 jb,
2486 descb,
2487 work,
2488 lwork,
2489 info);
2490 }
2491
2492 inline void
2493 pgels(const char *trans,
2494 const int * m,
2495 const int * n,
2496 const int * nrhs,
2497 float * A,
2498 const int * ia,
2499 const int * ja,
2500 const int * desca,
2501 float * B,
2502 const int * ib,
2503 const int * jb,
2504 const int * descb,
2505 float * work,
2506 int * lwork,
2507 int * info)
2508 {
2509 psgels_(trans,
2510 m,
2511 n,
2512 nrhs,
2513 A,
2514 ia,
2515 ja,
2516 desca,
2517 B,
2518 ib,
2519 jb,
2520 descb,
2521 work,
2522 lwork,
2523 info);
2524 }
2525
2526
2527 template <typename number>
2528 inline void
2529 pgeadd(const char * /*transa*/,
2530 const int * /*m*/,
2531 const int * /*n*/,
2532 const number * /*alpha*/,
2533 const number * /*A*/,
2534 const int * /*IA*/,
2535 const int * /*JA*/,
2536 const int * /*DESCA*/,
2537 const number * /*beta*/,
2538 number * /*C*/,
2539 const int * /*IC*/,
2540 const int * /*JC*/,
2541 const int * /*DESCC*/)
2542 {
2544 "Function in ScalapackTemplates.h not implemented");
2545 }
2546
2547 inline void
2548 pgeadd(const char * transa,
2549 const int * m,
2550 const int * n,
2551 const double *alpha,
2552 const double *A,
2553 const int * IA,
2554 const int * JA,
2555 const int * DESCA,
2556 const double *beta,
2557 double * C,
2558 const int * IC,
2559 const int * JC,
2560 const int * DESCC)
2561 {
2562 pdgeadd_(transa, m, n, alpha, A, IA, JA, DESCA, beta, C, IC, JC, DESCC);
2563 }
2564
2565 inline void
2566 pgeadd(const char * transa,
2567 const int * m,
2568 const int * n,
2569 const float *alpha,
2570 const float *A,
2571 const int * IA,
2572 const int * JA,
2573 const int * DESCA,
2574 const float *beta,
2575 float * C,
2576 const int * IC,
2577 const int * JC,
2578 const int * DESCC)
2579 {
2580 psgeadd_(transa, m, n, alpha, A, IA, JA, DESCA, beta, C, IC, JC, DESCC);
2581 }
2582
2583 inline void
2584 pgeadd(const char * transa,
2585 const int * m,
2586 const int * n,
2587 const std::complex<double> *alpha,
2588 const std::complex<double> *A,
2589 const int * IA,
2590 const int * JA,
2591 const int * DESCA,
2592 const std::complex<double> *beta,
2593 std::complex<double> * C,
2594 const int * IC,
2595 const int * JC,
2596 const int * DESCC)
2597 {
2598 pzgeadd_(transa, m, n, alpha, A, IA, JA, DESCA, beta, C, IC, JC, DESCC);
2599 }
2600
2601 template <typename number>
2602 inline void
2603 ptran(const int * /*m*/,
2604 const int * /*n*/,
2605 const number * /*alpha*/,
2606 const number * /*A*/,
2607 const int * /*IA*/,
2608 const int * /*JA*/,
2609 const int * /*DESCA*/,
2610 const number * /*beta*/,
2611 number * /*C*/,
2612 const int * /*IC*/,
2613 const int * /*JC*/,
2614 const int * /*DESCC*/)
2615 {
2617 "Function in ScalapackTemplates.h not implemented");
2618 }
2619
2620 inline void
2621 ptran(const int * m,
2622 const int * n,
2623 const double *alpha,
2624 const double *A,
2625 const int * IA,
2626 const int * JA,
2627 const int * DESCA,
2628 const double *beta,
2629 double * C,
2630 const int * IC,
2631 const int * JC,
2632 const int * DESCC)
2633 {
2634 pdtran_(m, n, alpha, A, IA, JA, DESCA, beta, C, IC, JC, DESCC);
2635 }
2636
2637 inline void
2638 ptran(const int * m,
2639 const int * n,
2640 const float *alpha,
2641 const float *A,
2642 const int * IA,
2643 const int * JA,
2644 const int * DESCA,
2645 const float *beta,
2646 float * C,
2647 const int * IC,
2648 const int * JC,
2649 const int * DESCC)
2650 {
2651 pstran_(m, n, alpha, A, IA, JA, DESCA, beta, C, IC, JC, DESCC);
2652 }
2653
2654
2655 template <typename number>
2656 inline void
2657 psyevr(const char * /*jobz*/,
2658 const char * /*range*/,
2659 const char * /*uplo*/,
2660 const int * /*n*/,
2661 number * /*A*/,
2662 const int * /*IA*/,
2663 const int * /*JA*/,
2664 const int * /*DESCA*/,
2665 const number * /*VL*/,
2666 const number * /*VU*/,
2667 const int * /*IL*/,
2668 const int * /*IU*/,
2669 int * /*m*/,
2670 int * /*nz*/,
2671 number * /*w*/,
2672 number * /*Z*/,
2673 const int * /*IZ*/,
2674 const int * /*JZ*/,
2675 const int * /*DESCZ*/,
2676 number * /*work*/,
2677 int * /*lwork*/,
2678 int * /*iwork*/,
2679 int * /*liwork*/,
2680 int * /*info*/)
2681 {
2683 "Function in ScalapackTemplates.h not implemented");
2684 }
2685
2686 inline void
2687 psyevr(const char * jobz,
2688 const char * range,
2689 const char * uplo,
2690 const int * n,
2691 double * A,
2692 const int * IA,
2693 const int * JA,
2694 const int * DESCA,
2695 const double *VL,
2696 const double *VU,
2697 const int * IL,
2698 const int * IU,
2699 int * m,
2700 int * nz,
2701 double * w,
2702 double * Z,
2703 const int * IZ,
2704 const int * JZ,
2705 const int * DESCZ,
2706 double * work,
2707 int * lwork,
2708 int * iwork,
2709 int * liwork,
2710 int * info)
2711 {
2712 pdsyevr_(jobz,
2713 range,
2714 uplo,
2715 n,
2716 A,
2717 IA,
2718 JA,
2719 DESCA,
2720 VL,
2721 VU,
2722 IL,
2723 IU,
2724 m,
2725 nz,
2726 w,
2727 Z,
2728 IZ,
2729 JZ,
2730 DESCZ,
2731 work,
2732 lwork,
2733 iwork,
2734 liwork,
2735 info);
2736 }
2737
2738 inline void
2739 psyevr(const char * jobz,
2740 const char * range,
2741 const char * uplo,
2742 const int * n,
2743 float * A,
2744 const int * IA,
2745 const int * JA,
2746 const int * DESCA,
2747 const float *VL,
2748 const float *VU,
2749 const int * IL,
2750 const int * IU,
2751 int * m,
2752 int * nz,
2753 float * w,
2754 float * Z,
2755 const int * IZ,
2756 const int * JZ,
2757 const int * DESCZ,
2758 float * work,
2759 int * lwork,
2760 int * iwork,
2761 int * liwork,
2762 int * info)
2763 {
2764 pssyevr_(jobz,
2765 range,
2766 uplo,
2767 n,
2768 A,
2769 IA,
2770 JA,
2771 DESCA,
2772 VL,
2773 VU,
2774 IL,
2775 IU,
2776 m,
2777 nz,
2778 w,
2779 Z,
2780 IZ,
2781 JZ,
2782 DESCZ,
2783 work,
2784 lwork,
2785 iwork,
2786 liwork,
2787 info);
2788 }
2789
2790 inline void
2791 psyevr(const char * jobz,
2792 const char * range,
2793 const char * uplo,
2794 const int * n,
2795 std::complex<double> *A,
2796 const int * IA,
2797 const int * JA,
2798 const int * DESCA,
2799 const double * VL,
2800 const double * VU,
2801 const int * IL,
2802 const int * IU,
2803 int * m,
2804 int * nz,
2805 double * w,
2806 std::complex<double> *Z,
2807 const int * IZ,
2808 const int * JZ,
2809 const int * DESCZ,
2810 std::complex<double> *work,
2811 int * lwork,
2812 int * iwork,
2813 int * liwork,
2814 int * info)
2815 {
2816 pzheevr_(jobz,
2817 range,
2818 uplo,
2819 n,
2820 A,
2821 IA,
2822 JA,
2823 DESCA,
2824 VL,
2825 VU,
2826 IL,
2827 IU,
2828 m,
2829 nz,
2830 w,
2831 Z,
2832 IZ,
2833 JZ,
2834 DESCZ,
2835 work,
2836 lwork,
2837 iwork,
2838 liwork,
2839 info);
2840 }
2841
2842 inline int
2843 lworkFromWork(std::vector<double> &work)
2844 {
2845 return static_cast<int>(work[0]);
2846 }
2847
2848 inline int
2849 lworkFromWork(std::vector<float> &work)
2850 {
2851 return static_cast<int>(work[0]);
2852 }
2853
2854 inline int
2855 lworkFromWork(std::vector<std::complex<double>> &work)
2856 {
2857 return static_cast<int>(work[0].real());
2858 }
2859 } // namespace linearAlgebra
2860} // namespace dftefe
2861#endif // dftefeScalapackTemplates_h
void pplacgv(const int *N, double *A, const int *IA, const int *JA, const int *DESCA, const int *INCX)
Definition: ScalapackTemplates.h:1184
void pzgetri_(const int *N, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, const int *ipiv, std::complex< double > *work, int *lwork, int *iwork, int *liwork, int *info)
void psyevr(const char *, const char *, const char *, const int *, number *, const int *, const int *, const int *, const number *, const number *, const int *, const int *, int *, int *, number *, number *, const int *, const int *, const int *, number *, int *, int *, int *, int *)
Definition: ScalapackTemplates.h:2657
void pgels(const char *, const int *, const int *, const int *, number *, const int *, const int *, const int *, number *, const int *, const int *, const int *, number *, int *, int *)
Definition: ScalapackTemplates.h:2438
double pdlange_(char const *norm, const int *m, const int *n, const double *A, const int *ia, const int *ja, const int *desca, double *work)
int lworkFromWork(std::vector< double > &work)
Definition: ScalapackTemplates.h:2843
void Cdgerv2d(int context, int M, int N, double *A, int lda, int rsrc, int csrc)
void pzlacgv_(const int *N, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, const int *INCX)
float pslamch_(const int *ictxt, const char *cmach)
void pdlacpy_(const char *uplo, const int *m, const int *n, const double *A, const int *ia, const int *ja, const int *desca, double *B, const int *ib, const int *jb, const int *descb)
void pgetri(const int *, number *, const int *, const int *, const int *, const int *, number *, int *, int *, int *, int *)
Definition: ScalapackTemplates.h:1359
void pspocon_(const char *uplo, const int *N, const float *A, const int *IA, const int *JA, const int *DESCA, const float *ANORM, float *RCOND, float *WORK, const int *LWORK, int *IWORK, const int *LIWORK, int *INFO)
void pdgetri_(const int *N, double *A, const int *IA, const int *JA, const int *DESCA, const int *ipiv, double *work, int *lwork, int *iwork, int *liwork, int *info)
void pzpotrf_(const char *UPLO, const int *N, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, int *INFO)
int ilcm_(const int *M, const int *N)
void pdgeadd_(const char *transa, const int *m, const int *n, const double *alpha, const double *A, const int *IA, const int *JA, const int *DESCA, const double *beta, double *C, const int *IC, const int *JC, const int *DESCC)
number plansy(const char *, const char *, const int *, const number *, const int *, const int *, const int *, number *)
Definition: ScalapackTemplates.h:1562
int iceil_(const int *i1, const int *i2)
void ppotri(const char *, const int *, number *, const int *, const int *, const int *, int *)
Definition: ScalapackTemplates.h:1309
void psgesv_(const int *n, const int *nrhs, float *A, const int *ia, const int *ja, const int *desca, int *ipiv, float *B, const int *ib, const int *jb, const int *descb, int *info)
void pdpocon_(const char *uplo, const int *N, const double *A, const int *IA, const int *JA, const int *DESCA, const double *ANORM, double *RCOND, double *WORK, const int *LWORK, int *IWORK, const int *LIWORK, int *INFO)
void Cgesd2d(int, int, int, number *, int, int, int)
Definition: ScalapackTemplates.h:1159
void pzgetrf_(const int *m, const int *n, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, int *ipiv, int *INFO)
void pdgels_(const char *trans, const int *m, const int *n, const int *nrhs, double *A, const int *ia, const int *ja, const int *desca, double *B, const int *ib, const int *jb, const int *descb, double *work, int *lwork, int *info)
void pgesvd(const char *, const char *, const int *, const int *, number *, const int *, const int *, const int *, number *, number *, const int *, const int *, const int *, number *, const int *, const int *, const int *, number *, int *, int *)
Definition: ScalapackTemplates.h:2322
void Cblacs_gridinit(int *context, const char *order, int grid_height, int grid_width)
void pdgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k, const double *alpha, const double *A, const int *IA, const int *JA, const int *DESCA, const double *B, const int *IB, const int *JB, const int *DESCB, const double *beta, double *C, const int *IC, const int *JC, const int *DESCC)
void pdgetrf_(const int *m, const int *n, double *A, const int *IA, const int *JA, const int *DESCA, int *ipiv, int *INFO)
void psgemr2d_(const int *m, const int *n, const float *A, const int *ia, const int *ja, const int *desca, float *B, const int *ib, const int *jb, const int *descb, const int *ictxt)
void pdsyevr_(const char *jobz, const char *range, const char *uplo, const int *n, double *A, const int *IA, const int *JA, const int *DESCA, const double *VL, const double *VU, const int *IL, const int *IU, int *m, int *nz, double *w, double *Z, const int *IZ, const int *JZ, const int *DESCZ, double *work, int *lwork, int *iwork, int *liwork, int *info)
void pgemr2d(const int *, const int *, const number *, const int *, const int *, const int *, number *, const int *, const int *, const int *, const int *)
Definition: ScalapackTemplates.h:2028
void pgesv(const int *, const int *, number *, const int *, const int *, const int *, int *, number *, const int *, const int *, const int *, int *)
Definition: ScalapackTemplates.h:1604
void Csgerv2d(int context, int M, int N, float *A, int lda, int rsrc, int csrc)
void ptran(const int *, const int *, const number *, const number *, const int *, const int *, const int *, const number *, number *, const int *, const int *, const int *)
Definition: ScalapackTemplates.h:2603
void psgeadd_(const char *transa, const int *m, const int *n, const float *alpha, const float *A, const int *IA, const int *JA, const int *DESCA, const float *beta, float *C, const int *IC, const int *JC, const int *DESCC)
void pssyev_(const char *jobz, const char *uplo, const int *m, float *A, const int *ia, const int *ja, int *desca, float *w, float *z, const int *iz, const int *jz, int *descz, float *work, const int *lwork, int *info)
void pdpotrf_(const char *UPLO, const int *N, double *A, const int *IA, const int *JA, const int *DESCA, int *INFO)
int numroc_(const int *n, const int *nb, const int *iproc, const int *isproc, const int *nprocs)
void Cblacs_pcoord(int ictxt, int pnum, int *prow, int *pcol)
void pstran_(const int *m, const int *n, const float *alpha, const float *A, const int *IA, const int *JA, const int *DESCA, const float *beta, float *C, const int *IC, const int *JC, const int *DESCC)
void psyev(const char *, const char *, const int *, number *, const int *, const int *, int *, number *, number *, const int *, const int *, int *, number *, const int *, int *)
Definition: ScalapackTemplates.h:1853
void pslacpy_(const char *uplo, const int *m, const int *n, const float *A, const int *ia, const int *ja, const int *desca, float *B, const int *ib, const int *jb, const int *descb)
void pzheev_(const char *jobz, const char *uplo, const int *m, std::complex< double > *A, const int *ia, const int *ja, int *desca, double *w, std::complex< double > *z, const int *iz, const int *jz, int *descz, std::complex< double > *work, const int *lwork, int *info)
void placpy(const char *, const int *, const int *, const number *, const int *, const int *, const int *, number *, const int *, const int *, const int *)
Definition: ScalapackTemplates.h:1977
int indxg2p_(const int *glob, const int *nb, const int *iproc, const int *isproc, const int *nprocs)
double pdlansy_(const char *norm, const char *uplo, const int *N, const double *A, const int *IA, const int *JA, const int *DESCA, double *work)
void Cblacs_gridinfo(int context, int *grid_height, int *grid_width, int *grid_row, int *grid_col)
void psyevx(const char *, const char *, const char *, const int *, number *, const int *, const int *, const int *, number *, number *, const int *, const int *, number *, const int *, const int *, number *, number *, number *, const int *, const int *, const int *, number *, int *, int *, int *, int *, int *, number *, int *)
Definition: ScalapackTemplates.h:2100
void psgetri_(const int *N, float *A, const int *IA, const int *JA, const int *DESCA, const int *ipiv, float *work, int *lwork, int *iwork, int *liwork, int *info)
void ptrtri(const char *, const char *, const int *, number *, const int *, const int *, const int *, int *)
Definition: ScalapackTemplates.h:1427
void Cblacs_pinfo(int *rank, int *nprocs)
void Cblacs_get(int icontxt, int what, int *val)
void pdgesv_(const int *n, const int *nrhs, double *A, const int *ia, const int *ja, const int *desca, int *ipiv, double *B, const int *ib, const int *jb, const int *descb, int *info)
void pdsyev_(const char *jobz, const char *uplo, const int *m, double *A, const int *ia, const int *ja, int *desca, double *w, double *z, const int *iz, const int *jz, int *descz, double *work, const int *lwork, int *info)
void psgels_(const char *trans, const int *m, const int *n, const int *nrhs, float *A, const int *ia, const int *ja, const int *desca, float *B, const int *ib, const int *jb, const int *descb, float *work, int *lwork, int *info)
void pzpotri_(const char *UPLO, const int *N, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, int *INFO)
void pspotrf_(const char *UPLO, const int *N, float *A, const int *IA, const int *JA, const int *DESCA, int *INFO)
void pdgemr2d_(const int *m, const int *n, const double *A, const int *ia, const int *ja, const int *desca, double *B, const int *ib, const int *jb, const int *descb, const int *ictxt)
void pstrtri_(const char *UPLO, const char *DIAG, const int *N, float *A, const int *IA, const int *JA, const int *DESCA, int *INFO)
void pdsyevx_(const char *jobz, const char *range, const char *uplo, const int *n, double *A, const int *ia, const int *ja, const int *desca, const double *VL, const double *VU, const int *il, const int *iu, const double *abstol, const int *m, const int *nz, double *w, double *orfac, double *Z, const int *iz, const int *jz, const int *descz, double *work, int *lwork, int *iwork, int *liwork, int *ifail, int *iclustr, double *gap, int *info)
void pzgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k, const std::complex< double > *alpha, const std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, const std::complex< double > *B, const int *IB, const int *JB, const int *DESCB, const std::complex< double > *beta, std::complex< double > *C, const int *IC, const int *JC, const int *DESCC)
void pssyevr_(const char *jobz, const char *range, const char *uplo, const int *n, float *A, const int *IA, const int *JA, const int *DESCA, const float *VL, const float *VU, const int *IL, const int *IU, int *m, int *nz, float *w, float *Z, const int *IZ, const int *JZ, const int *DESCZ, float *work, int *lwork, int *iwork, int *liwork, int *info)
void Cgerv2d(int, int, int, number *, int, int, int)
Definition: ScalapackTemplates.h:1132
void pgetrf(const int *, const int *, number *, const int *, const int *, const int *, int *, int *)
Definition: ScalapackTemplates.h:1255
int indxl2g_(const int *indxloc, const int *nb, const int *iproc, const int *isrcproc, const int *nprocs)
double pdlamch_(const int *ictxt, const char *cmach)
void Cblacs_exit(int error_code)
void Csgesd2d(int context, int M, int N, float *A, int lda, int rdest, int cdest)
void Cblacs_gridexit(int context)
void pgemm(const char *, const char *, const int *, const int *, const int *, const number *, const number *, const int *, const int *, const int *, const number *, const int *, const int *, const int *, const number *, number *, const int *, const int *, const int *)
Definition: ScalapackTemplates.h:1658
void ppocon(const char *, const int *, const number *, const int *, const int *, const int *, const number *, number *, number *, const int *, int *, const int *, int *)
Definition: ScalapackTemplates.h:1481
float pslange_(const char *norm, const int *m, const int *n, const float *A, const int *ia, const int *ja, const int *desca, float *work)
number plange(const char *, const int *, const int *, const number *, const int *, const int *, const int *, number *)
Definition: ScalapackTemplates.h:1811
void pdpotri_(const char *UPLO, const int *N, double *A, const int *IA, const int *JA, const int *DESCA, int *INFO)
void plamch(const int *, const char *, number &)
Definition: ScalapackTemplates.h:2079
void pspotri_(const char *UPLO, const int *N, float *A, const int *IA, const int *JA, const int *DESCA, int *INFO)
void pdtran_(const int *m, const int *n, const double *alpha, const double *A, const int *IA, const int *JA, const int *DESCA, const double *beta, double *C, const int *IC, const int *JC, const int *DESCC)
void pdtrtri_(const char *UPLO, const char *DIAG, const int *N, double *A, const int *IA, const int *JA, const int *DESCA, int *INFO)
void pgeadd(const char *, const int *, const int *, const number *, const number *, const int *, const int *, const int *, const number *, number *, const int *, const int *, const int *)
Definition: ScalapackTemplates.h:2529
void Cblacs_barrier(int, const char *)
void pzheevr_(const char *jobz, const char *range, const char *uplo, const int *n, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, const double *VL, const double *VU, const int *IL, const int *IU, int *m, int *nz, double *w, std::complex< double > *Z, const int *IZ, const int *JZ, const int *DESCZ, std::complex< double > *work, int *lwork, int *iwork, int *liwork, int *info)
void pzgeadd_(const char *transa, const int *m, const int *n, const std::complex< double > *alpha, const std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, const std::complex< double > *beta, std::complex< double > *C, const int *IC, const int *JC, const int *DESCC)
void pztrtri_(const char *UPLO, const char *DIAG, const int *N, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, int *INFO)
void descinit_(int *desc, const int *m, const int *n, const int *mb, const int *nb, const int *irsrc, const int *icsrc, const int *ictxt, const int *lld, int *info)
int Csys2blacs_handle(utils::mpi::MPIComm comm)
void ppotrf(const char *, const int *, number *, const int *, const int *, const int *, int *)
Definition: ScalapackTemplates.h:1205
void pssyevx_(const char *jobz, const char *range, const char *uplo, const int *n, float *A, const int *ia, const int *ja, const int *desca, const float *VL, const float *VU, const int *il, const int *iu, const float *abstol, const int *m, const int *nz, float *w, float *orfac, float *Z, const int *iz, const int *jz, const int *descz, float *work, int *lwork, int *iwork, int *liwork, int *ifail, int *iclustr, float *gap, int *info)
void psgetrf_(const int *m, const int *n, float *A, const int *IA, const int *JA, const int *DESCA, int *ipiv, int *INFO)
void psgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k, const float *alpha, const float *A, const int *IA, const int *JA, const int *DESCA, const float *B, const int *IB, const int *JB, const int *DESCB, const float *beta, float *C, const int *IC, const int *JC, const int *DESCC)
void pdgesvd_(const char *jobu, const char *jobvt, const int *m, const int *n, double *A, const int *ia, const int *ja, const int *desca, double *S, double *U, const int *iu, const int *ju, const int *descu, double *VT, const int *ivt, const int *jvt, const int *descvt, double *work, int *lwork, int *info)
float pslansy_(const char *norm, const char *uplo, const int *N, const float *A, const int *IA, const int *JA, const int *DESCA, float *work)
void Cdgesd2d(int context, int M, int N, double *A, int lda, int rdest, int cdest)
void psgesvd_(const char *jobu, const char *jobvt, const int *m, const int *n, float *A, const int *ia, const int *ja, const int *desca, float *S, float *U, const int *iu, const int *ju, const int *descu, float *VT, const int *ivt, const int *jvt, const int *descvt, float *work, int *lwork, int *info)
void pzheevx_(const char *jobz, const char *range, const char *uplo, const int *n, std::complex< double > *A, const int *ia, const int *ja, const int *desca, const double *VL, const double *VU, const int *il, const int *iu, const double *abstol, const int *m, const int *nz, double *w, double *orfac, std::complex< double > *Z, const int *iz, const int *jz, const int *descz, std::complex< double > *work, int *lwork, int *iwork, int *liwork, int *ifail, int *iclustr, double *gap, int *info)
int MPIComm
Definition: MPITypes.h:84
void throwException(bool condition, std::string msg)
Definition: Exceptions.cpp:56
dealii includes
Definition: AtomFieldDataSpherical.cpp:31