explicit_mapmaking
 All Classes Files Pages
scalapack_wrapper.hpp
Go to the documentation of this file.
1 
8 #ifndef EXPLICIT_MAPMAKING_SCALAPACK_WRAPPER_HPP_
9 #define EXPLICIT_MAPMAKING_SCALAPACK_WRAPPER_HPP_
10 
11 #include <vector>
12 
13 namespace mapmaking {
14 
15 inline bool i_am_in_grid(const std::vector<int>& desc) { return desc[1] != -1; }
16 
17 int numroc_w(int m, int mb_a, int myroc, int rsrc_a, int n_proc);
18 
19 int descinit_w(std::vector<int>* desc, int m, int n, int mb, int nb, int irsrc, int icsrc, int icontxt, int lld);
20 
21 void pdgemr2d_w(int m, int n, std::vector<double>* a, int ia, int ja, std::vector<int>* desca,
22  std::vector<double>* b, int ib, int jb, std::vector<int>* descb, int ictxt);
23 
24 void pdgemm_w(char transa, char transb, int m, int n, int k, double alpha,
25  std::vector<double>* a, int ia, int ja, std::vector<int>* desca,
26  std::vector<double>* b, int ib, int jb, std::vector<int>* descb,
27  double beta, std::vector<double>* c, int ic, int jc, std::vector<int>* descc);
28 
29 void pdgemv_w(char transa, int m, int n, double alpha,
30  std::vector<double>* a, int ia, int ja, std::vector<int>* desca,
31  std::vector<double>* x, int ix, int jx, std::vector<int>* descx, int incx,
32  double beta, std::vector<double>* y, int iy, int jy, std::vector<int>* descy, int incy);
33 
34 int dsyev_w(char jobz, char uplo, int n, std::vector<double>* a, int lda,
35  std::vector<double>* w, std::vector<double>* work, int lwork);
36 
37 int dgemv_w(char trans, int m, int n, double alpha, std::vector<double>* a, int lda,
38  std::vector<double>* x, int inc_x,
39  double beta, std::vector<double>* y, int inc_y);
40 
41 int dgemv_w(char trans, int m, int n, double alpha, std::vector<double>* a, int lda,
42  std::vector<double>* x, int inc_x);
43 
44 int pdsyevr_w(char jobz, char range, char uplo, int n,
45  std::vector<double>* a, int ia, int ja, std::vector<int>* desca,
46  double vl, double vu, int il, int iu, int* m, int* nz, std::vector<double>* w,
47  std::vector<double>* z, int iz, int jz, std::vector<int>* descz,
48  std::vector<double>* work, int lwork, std::vector<int>* iwork, int liwork);
49 
50 int sym_inv_ev(char uplo, std::vector<double>* a, double cn_threshold);
51 
52 // Assumes
53 // - squared proc grid
54 // - the size of the blocks is as balanced as possible
55 // - first element the (1, 1) element of proc with coordinates (0, 0)
56 // - the size of the eigenvalues vector w being the side of the full matrix
57 int psym_inv_ev(char uplo, std::vector<double>* a, std::vector<int>* desca,
58  double cn_threshold, std::vector<double>* w, std::vector<double>* u,
59  std::pair<int, int> coor_proc_grid, int side_grid);
60 }
61 
62 #endif // EXPLICIT_MAPMAKING_SCALAPACK_WRAPPER_HPP_
Definition: atfa.hpp:18