ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
scalapack_connector.h
Go to the documentation of this file.
1#ifndef SCALAPACK_CONNECTOR_H
2#define SCALAPACK_CONNECTOR_H
3
4#ifdef __MPI
5
6#include <complex>
7
8extern "C"
9{
10 int numroc_( const int *n, const int *nb, const int *iproc, const int *srcproc, const int *nprocs );
11 void descinit_(
12 int *desc,
13 const int *m, const int *n, const int *mb, const int *nb, const int *irsrc, const int *icsrc,
14 const int *ictxt, const int *lld, int *info);
15
16 void pddot_(int* n, double* dot, double* x, int* ix, int* jx, int* descx, int* incx,
17 double* y, int* iy, int* jy, int* descy, int* incy);
18 void pzdotc_(int* n, std::complex<double>* dot, std::complex<double>* x, int* ix, int* jx, int* descx, int* incx,
19 std::complex<double>* y, int* iy, int* jy, int* descy, int* incy);
20
21 void pdpotrf_(char *uplo, int *n, double *a, int *ia, int *ja, int *desca, int *info);
22// void pzpotrf_(char *uplo, int *n, double _Complex *a, int *ia, int *ja, int *desca, int *info);
23 void pzpotrf_(char *uplo, int *n, std::complex<double> *a, int *ia, int *ja, int *desca, int *info);
24
25 void pdtran_(const int* m, const int* n,
26 const double* alpha, const double* a, const int* ia, const int* ja, const int* desca,
27 const double* beta, double* c, const int* ic, const int* jc, const int* descc);
28
29 void pztranu_(const int *m,const int*n,
30 const std::complex<double>* alpha, const std::complex<double>* a, const int* ia, const int* ja, const int* desca,
31 const std::complex<double> *beta , std::complex<double> *c , const int *ic ,const int *jc ,const int *descc);
32
33 void pzgemv_(
34 const char *transa,
35 const int *M, const int *N,
36 const double *alpha,
37 const std::complex<double> *A, const int *IA, const int *JA, const int *DESCA,
38 const std::complex<double> *B, const int *IB, const int *JB, const int *DESCB, const int *K,
39 const double *beta, std::complex<double> *C, const int *IC, const int *JC, const int *DESCC,const int *L);
40 void pdgemv_(
41 const char *transa,
42 const int *M, const int *N,
43 const double *alpha,
44 const double *A, const int *IA, const int *JA, const int *DESCA,
45 const double *B, const int *IB, const int *JB, const int *DESCB, const int *K,
46 const double *beta, double *C, const int *IC, const int *JC, const int *DESCC,const int *L);
47 // C = a * A.? * B.? + b * C
48 void pdgemm_(
49 const char *transa, const char *transb,
50 const int *M, const int *N, const int *K,
51 const double *alpha,
52 const double *A, const int *IA, const int *JA, const int *DESCA,
53 const double *B, const int *IB, const int *JB, const int *DESCB,
54 const double *beta,
55 double *C, const int *IC, const int *JC, const int *DESCC);
56 void pzgemm_(
57 const char *transa, const char *transb,
58 const int *M, const int *N, const int *K,
59 const std::complex<double> *alpha,
60 const std::complex<double> *A, const int *IA, const int *JA, const int *DESCA,
61 const std::complex<double> *B, const int *IB, const int *JB, const int *DESCB,
62 const std::complex<double> *beta,
63 std::complex<double> *C, const int *IC, const int *JC, const int *DESCC);
64 void pdsymm_(char *side , char *uplo , int *m , int *n ,
65 double *alpha , double *a , int *ia , int *ja , int *desca ,
66 double *b , int *ib , int *jb , int *descb ,
67 double *beta , double *c , int *ic , int *jc , int *descc );
68 void pdtrmm_(char *side , char *uplo , char *transa , char *diag , int *m , int *n ,
69 double *alpha , double *a , int *ia , int *ja , int *desca ,
70 double *b , int *ib , int *jb , int *descb );
71// void pztrmm_(char *side , char *uplo , char *transa , char *diag , int *m , int *n ,
72// double *alpha , double _Complex *a , int *ia , int *ja , int *desca ,
73// double _Complex *b , int *ib , int *jb , int *descb );
74 void pztrmm_(char *side , char *uplo , char *transa , char *diag , int *m , int *n ,
75 std::complex<double> *alpha , std::complex<double> *a , int *ia , int *ja , int *desca ,
76 std::complex<double> *b , int *ib , int *jb , int *descb );
77 void pzhemm_(char* side , char* uplo , int* m , int* n ,
78 std::complex<double>* alpha , std::complex<double>* a , int* ia , int* ja , int* desca ,
79 std::complex<double>* b , int* ib , int* jb , int* descb ,
80 std::complex<double>* beta , std::complex<double>* c , int* ic , int* jc , int* descc );
82 const int *M, const int *N,
83 std::complex<double> *A, const int *IA, const int *JA, const int *DESCA,
84 int *ipiv, int *info);
85
86 void pzgesv_(
87 const int *n, const int *nrhs,
88 const std::complex<double> *A, const int *ia, const int *ja, const int *desca,
89 int *ipiv, std::complex<double>* B, const int* ib, const int* jb, const int*descb, const int *info
90 );
91
92 void pdsygvx_(const int* itype, const char* jobz, const char* range, const char* uplo,
93 const int* n, double* A, const int* ia, const int* ja, const int*desca, double* B, const int* ib, const int* jb, const int*descb,
94 const double* vl, const double* vu, const int* il, const int* iu,
95 const double* abstol, int* m, int* nz, double* w, const double*orfac, double* Z, const int* iz, const int* jz, const int*descz,
96 double* work, int* lwork, int*iwork, int*liwork, int* ifail, int*iclustr, double*gap, int* info);
97
98 void pzhegvx_(const int* itype, const char* jobz, const char* range, const char* uplo,
99 const int* n, std::complex<double>* A, const int* ia, const int* ja, const int*desca, std::complex<double>* B, const int* ib, const int* jb, const int*descb,
100 const double* vl, const double* vu, const int* il, const int* iu,
101 const double* abstol, int* m, int* nz, double* w, const double*orfac, std::complex<double>* Z, const int* iz, const int* jz, const int*descz,
102 std::complex<double>* work, int* lwork, double* rwork, int* lrwork, int*iwork, int*liwork, int* ifail, int*iclustr, double*gap, int* info);
103
104 void pssygvx_(const int* itype, const char* jobz, const char* range, const char* uplo,
105 const int* n, float* A, const int* ia, const int* ja, const int*desca, float* B, const int* ib, const int* jb, const int*descb,
106 const float* vl, const float* vu, const int* il, const int* iu,
107 const float* abstol, int* m, int* nz, float* w, const float*orfac, float* Z, const int* iz, const int* jz, const int*descz,
108 float* work, int* lwork, int*iwork, int*liwork, int* ifail, int*iclustr, float*gap, int* info);
109
110 void pchegvx_(const int* itype, const char* jobz, const char* range, const char* uplo,
111 const int* n, std::complex<float>* A, const int* ia, const int* ja, const int*desca, std::complex<float>* B, const int* ib, const int* jb, const int*descb,
112 const float* vl, const float* vu, const int* il, const int* iu,
113 const float* abstol, int* m, int* nz, float* w, const float*orfac, std::complex<float>* Z, const int* iz, const int* jz, const int*descz,
114 std::complex<float>* work, int* lwork, float* rwork, int* lrwork, int*iwork, int*liwork, int* ifail, int*iclustr, float*gap, int* info);
115
116
118 const int *n,
119 const std::complex<double> *A, const int *ia, const int *ja, const int *desca,
120 int *ipiv, const std::complex<double> *work, const int *lwork, const int *iwork, const int *liwork, const int *info);
121
123 const char *transa,
124 const int *m, const int *n,
125 const std::complex<double> *alpha,
126 const std::complex<double> *a, const int *ia, const int *ja, const int *desca,
127 const std::complex<double> *beta,
128 const std::complex<double> *c, const int *ic, const int *jc, const int *descc);
129
131 const int *M, const int *N,
132 const std::complex<double> *alpha,
133 const std::complex<double> *A, const int *IA, const int *JA, const int *DESCA,
134 const std::complex<double> *beta,
135 std::complex<double> *C, const int *IC, const int *JC, const int *DESCC);
136
137 void pdgemr2d_(const int *M, const int *N,
138 double *A, const int *IA, const int *JA, const int *DESCA,
139 double *B, const int *IB, const int *JB, const int *DESCB,
140 const int *ICTXT);
141
142 void pzgemr2d_(const int *M, const int *N,
143 std::complex<double> *A, const int *IA, const int *JA, const int *DESCA,
144 std::complex<double> *B, const int *IB, const int *JB, const int *DESCB,
145 const int *ICTXT);
146
147 // Scalapack wrappers to copy 2D blocks of data
148 // more info:
149 // https://netlib.org/scalapack/explore-html/da/db5/pigemr_8c.html
150 // https://netlib.org/scalapack/explore-html/dd/dcd/pdgemr_8c.html
151 // https://netlib.org/scalapack/explore-html/d5/dd4/pzgemr_8c.html
152 // https://netlib.org/scalapack/explore-html/d5/deb/psgemr_8c.html
153 // https://netlib.org/scalapack/explore-html/d4/dad/pcgemr_8c.html
154 void Cpigemr2d (int m, int n, int *ptrmyblock, int ia, int ja, int *ma, int *ptrmynewblock, int ib, int jb, int *mb, int globcontext);
155 void Cpdgemr2d (int m, int n, double *ptrmyblock, int ia, int ja, int *ma, double *ptrmynewblock, int ib, int jb, int *mb, int globcontext);
156 void Cpzgemr2d (int m, int n, std::complex<double> *ptrmyblock, int ia, int ja, int *ma, std::complex<double> *ptrmynewblock, int ib, int jb, int *mb, int globcontext);
157 void Cpsgemr2d (int m, int n, float *ptrmyblock, int ia, int ja, int *ma, float *ptrmynewblock, int ib, int jb, int *mb, int globcontext);
158 void Cpcgemr2d (int m, int n, std::complex<float> *ptrmyblock, int ia, int ja, int *ma, std::complex<float> *ptrmynewblock, int ib, int jb, int *mb, int globcontext);
159}
160
161 template <typename T>
163 {
164 constexpr static bool value = std::is_same<T, double>::value || std::is_same<T, std::complex<double>>::value || std::is_same<T, float>::value || std::is_same<T, std::complex<float>>::value || std::is_same<T, int>::value;
165 };
166
167
185 template <typename T>
186 typename std::enable_if<block2d_data_type<T>::value,void>::type Cpxgemr2d(int M, int N, T *A, int IA, int JA, int *DESCA, T *B, int IB, int JB, int *DESCB, int ICTXT)
187 {
188 if (std::is_same<T,double>::value) Cpdgemr2d(M, N, reinterpret_cast<double*>(A),IA, JA, DESCA,reinterpret_cast<double*>(B),IB,JB, DESCB,ICTXT);
189 if (std::is_same<T,std::complex<double>>::value) Cpzgemr2d(M, N, reinterpret_cast<std::complex<double>*>(A),IA, JA, DESCA,reinterpret_cast<std::complex<double>*>(B),IB,JB, DESCB,ICTXT);
190 if (std::is_same<T,float>::value) Cpsgemr2d(M, N, reinterpret_cast<float*>(A),IA, JA, DESCA,reinterpret_cast<float*>(B),IB,JB, DESCB,ICTXT);
191 if (std::is_same<T,std::complex<float>>::value) Cpcgemr2d(M, N, reinterpret_cast<std::complex<float>*>(A),IA, JA, DESCA,reinterpret_cast<std::complex<float>*>(B),IB,JB, DESCB,ICTXT);
192 if (std::is_same<T,int>::value) Cpigemr2d(M, N, reinterpret_cast<int*>(A),IA, JA, DESCA,reinterpret_cast<int*>(B),IB,JB, DESCB,ICTXT);
193 };
194
195
197{
198public:
199 static inline
200 void geadd(
201 const char transa,
202 const int m, const int n,
203 const std::complex<double> alpha,
204 const std::complex<double> *a, const int ia, const int ja, const int *desca,
205 const std::complex<double> beta,
206 const std::complex<double> *c, const int ic, const int jc, const int *descc)
207 {
208 pzgeadd_(&transa, &m, &n, &alpha, a, &ia, &ja, desca, &beta, c, &ic, &jc, descc);
209 }
210
211 static inline
212 void dot(int n,
213 double& dot,
214 double* a,
215 int ia,
216 int ja,
217 int inca,
218 double* b,
219 int ib,
220 int jb,
221 int incb,
222 int* desc)
223 {
224 pddot_(&n, &dot, a, &ia, &ja, desc, &inca, b, &ib, &jb, desc, &incb);
225 }
226
227 static inline
228 void dot(int n,
229 std::complex<double>& dotc,
230 std::complex<double>* a,
231 int ia,
232 int ja,
233 int inca,
234 std::complex<double>* b,
235 int ib,
236 int jb,
237 int incb,
238 int* desc)
239 {
240 pzdotc_(&n, &dotc, a, &ia, &ja, desc, &inca, b, &ib, &jb, desc, &incb);
241 }
242
243 static inline
244 void gemm(
245 const char transa, const char transb,
246 const int M, const int N, const int K,
247 const double alpha,
248 const double* A, const int IA, const int JA, const int* DESCA,
249 const double* B, const int IB, const int JB, const int* DESCB,
250 const double beta,
251 double* C, const int IC, const int JC, const int* DESCC)
252 {
253 pdgemm_(&transa, &transb, &M, &N, &K, &alpha, A, &IA, &JA, DESCA,
254 B, &IB, &JB, DESCB, &beta, C, &IC, &JC, DESCC);
255 }
256
257 static inline
258 void gemm(
259 const char transa, const char transb,
260 const int M, const int N, const int K,
261 const std::complex<double> alpha,
262 const std::complex<double> *A, const int IA, const int JA, const int *DESCA,
263 const std::complex<double> *B, const int IB, const int JB, const int *DESCB,
264 const std::complex<double> beta,
265 std::complex<double> *C, const int IC, const int JC, const int *DESCC)
266 {
267 pzgemm_(&transa, &transb, &M, &N, &K, &alpha, A, &IA, &JA, DESCA,
268 B, &IB, &JB, DESCB, &beta, C, &IC, &JC, DESCC);
269 }
270
271 static inline
272 void gemm(char transa, char transb, int M, int N, int K,
273 double alpha,
274 double* A,
275 double* B,
276 double beta,
277 double* C,
278 int* DESC)
279 {
280 int isrc = 1;
281 pdgemm_(&transa,
282 &transb,
283 &M,
284 &N,
285 &K,
286 &alpha,
287 A,
288 &isrc,
289 &isrc,
290 DESC,
291 B,
292 &isrc,
293 &isrc,
294 DESC,
295 &beta,
296 C,
297 &isrc,
298 &isrc,
299 DESC);
300 }
301
302 static inline
303 void gemm(char transa, char transb, int M, int N, int K,
304 std::complex<double> alpha,
305 std::complex<double>* A,
306 std::complex<double>* B,
307 std::complex<double> beta,
308 std::complex<double>* C,
309 int* DESC)
310 {
311
312 int isrc = 1;
313 pzgemm_(&transa,
314 &transb,
315 &M,
316 &N,
317 &K,
318 &alpha,
319 A,
320 &isrc,
321 &isrc,
322 DESC,
323 B,
324 &isrc,
325 &isrc,
326 DESC,
327 &beta,
328 C,
329 &isrc,
330 &isrc,
331 DESC);
332 }
333
334 static inline
335 void symm(char side,
336 char uplo,
337 int m,
338 int n,
339 double alpha,
340 double* a,
341 double* b,
342 double beta,
343 double* c,
344 int* desc)
345 {
346 int isrc = 1;
347 pdsymm_(&side, &uplo, &m, &n, &alpha, a, &isrc, &isrc, desc, b, &isrc, &isrc, desc, &beta, c, &isrc, &isrc, desc);
348 }
349
350 static inline
351 void getrf(
352 const int M, const int N,
353 std::complex<double> *A, const int IA, const int JA, const int *DESCA,
354 int *ipiv, int *info) //fix a bug: info is output and we must use int*
355 {
356 pzgetrf_(&M, &N, A, &IA, &JA, DESCA, ipiv, info);
357 }
358
359 static inline
360 void getri(
361 const int n,
362 const std::complex<double> *A, const int ia, const int ja, const int *desca, int *ipiv,
363 const std::complex<double> *work, const int *lwork, const int *iwork, const int *liwork, int *info)
364 {
365 pzgetri_(&n, A, &ia, &ja, desca, ipiv, work, lwork, iwork, liwork, info);
366 }
367
368 static inline
369 void gesv(
370 const int n, const int nrhs,
371 const std::complex<double> *A, const int ia, const int ja, const int *desca,
372 int *ipiv, std::complex<double>* B, const int ib, const int jb, const int*descb, int *info)
373 {
374 pzgesv_(&n, &nrhs, A, &ia, &ja, desca, ipiv, B, &ib, &jb, descb, info);
375 }
376
377 static inline
378 void tranu(
379 const int m, const int n,
380 const std::complex<double> alpha , std::complex<double> *a , const int ia , const int ja , const int *desca,
381 const std::complex<double> beta , std::complex<double> *c , const int ic , const int jc , const int *descc)
382 {
383 pztranu_(&m, &n, &alpha, a, &ia, &ja, desca, &beta, c, &ic, &jc, descc);
384 }
385
386 static inline
387 int potrf(char uplo, int na, double* U, int* desc)
388 {
389 int isrc = 1;
390 int info;
391 pdpotrf_(&uplo, &na, U, &isrc, &isrc, desc, &info);
392 return info;
393 }
394
395 static inline
396 int potrf(char uplo, int na, std::complex<double>* U, int* desc)
397 {
398 int isrc = 1;
399 int info;
400 pzpotrf_(&uplo, &na, U, &isrc, &isrc, desc, &info);
401 return info;
402 }
403
404 static inline
405 void trmm(char side,
406 char uplo,
407 char trans,
408 char diag,
409 int m,
410 int n,
411 double alpha,
412 double* a,
413 double* b,
414 int* desc)
415 {
416 int isrc = 1;
417 pdtrmm_(&side, &uplo, &trans, &diag, &m, &n, &alpha, a, &isrc, &isrc, desc, b, &isrc, &isrc, desc);
418 }
419
420 static inline
421 void trmm(char side,
422 char uplo,
423 char trans,
424 char diag,
425 int m,
426 int n,
427 std::complex<double> alpha,
428 std::complex<double>* a,
429 std::complex<double>* b,
430 int* desc)
431 {
432 int isrc = 1;
433 pztrmm_(&side, &uplo, &trans, &diag, &m, &n, &alpha, a, &isrc, &isrc, desc, b, &isrc, &isrc, desc);
434 }
435
436 static inline
437 void hemm(char side,
438 char uplo,
439 int na,
440 std::complex<double> alpha,
441 std::complex<double>* a,
442 std::complex<double>* b,
443 std::complex<double> beta,
444 std::complex<double>* c,
445 int* desc)
446 {
447 int isrc = 1;
448 pzhemm_(&side,
449 &uplo,
450 &na,
451 &na,
452 &alpha,
453 a,
454 &isrc,
455 &isrc,
456 desc,
457 b,
458 &isrc,
459 &isrc,
460 desc,
461 &beta,
462 c,
463 &isrc,
464 &isrc,
465 desc);
466 }
467};
468
469#endif // __MPI
470
471#endif
Definition scalapack_connector.h:197
static void gemm(char transa, char transb, int M, int N, int K, double alpha, double *A, double *B, double beta, double *C, int *DESC)
Definition scalapack_connector.h:272
static void getri(const int n, const std::complex< double > *A, const int ia, const int ja, const int *desca, int *ipiv, const std::complex< double > *work, const int *lwork, const int *iwork, const int *liwork, int *info)
Definition scalapack_connector.h:360
static void gemm(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)
Definition scalapack_connector.h:258
static void trmm(char side, char uplo, char trans, char diag, int m, int n, std::complex< double > alpha, std::complex< double > *a, std::complex< double > *b, int *desc)
Definition scalapack_connector.h:421
static void symm(char side, char uplo, int m, int n, double alpha, double *a, double *b, double beta, double *c, int *desc)
Definition scalapack_connector.h:335
static int potrf(char uplo, int na, double *U, int *desc)
Definition scalapack_connector.h:387
static void gemm(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)
Definition scalapack_connector.h:244
static void geadd(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, const std::complex< double > *c, const int ic, const int jc, const int *descc)
Definition scalapack_connector.h:200
static void dot(int n, std::complex< double > &dotc, std::complex< double > *a, int ia, int ja, int inca, std::complex< double > *b, int ib, int jb, int incb, int *desc)
Definition scalapack_connector.h:228
static void gemm(char transa, char transb, int M, int N, int K, std::complex< double > alpha, std::complex< double > *A, std::complex< double > *B, std::complex< double > beta, std::complex< double > *C, int *DESC)
Definition scalapack_connector.h:303
static void tranu(const int m, const int n, const std::complex< double > alpha, 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)
Definition scalapack_connector.h:378
static void trmm(char side, char uplo, char trans, char diag, int m, int n, double alpha, double *a, double *b, int *desc)
Definition scalapack_connector.h:405
static int potrf(char uplo, int na, std::complex< double > *U, int *desc)
Definition scalapack_connector.h:396
static void dot(int n, double &dot, double *a, int ia, int ja, int inca, double *b, int ib, int jb, int incb, int *desc)
Definition scalapack_connector.h:212
static void gesv(const int n, const int nrhs, const std::complex< double > *A, const int ia, const int ja, const int *desca, int *ipiv, std::complex< double > *B, const int ib, const int jb, const int *descb, int *info)
Definition scalapack_connector.h:369
static void hemm(char side, char uplo, int na, std::complex< double > alpha, std::complex< double > *a, std::complex< double > *b, std::complex< double > beta, std::complex< double > *c, int *desc)
Definition scalapack_connector.h:437
static void getrf(const int M, const int N, std::complex< double > *A, const int IA, const int JA, const int *DESCA, int *ipiv, int *info)
Definition scalapack_connector.h:351
#define N
Definition exp.cpp:24
#define T
Definition exp.cpp:237
void Cpigemr2d(int m, int n, int *ptrmyblock, int ia, int ja, int *ma, int *ptrmynewblock, int ib, int jb, int *mb, int globcontext)
void pztrmm_(char *side, char *uplo, char *transa, char *diag, int *m, int *n, std::complex< double > *alpha, std::complex< double > *a, int *ia, int *ja, int *desca, std::complex< double > *b, int *ib, int *jb, int *descb)
void Cpzgemr2d(int m, int n, std::complex< double > *ptrmyblock, int ia, int ja, int *ma, std::complex< double > *ptrmynewblock, int ib, int jb, int *mb, int globcontext)
void pchegvx_(const int *itype, const char *jobz, const char *range, const char *uplo, const int *n, std::complex< float > *A, const int *ia, const int *ja, const int *desca, std::complex< float > *B, const int *ib, const int *jb, const int *descb, const float *vl, const float *vu, const int *il, const int *iu, const float *abstol, int *m, int *nz, float *w, const float *orfac, std::complex< float > *Z, const int *iz, const int *jz, const int *descz, std::complex< float > *work, int *lwork, float *rwork, int *lrwork, int *iwork, int *liwork, int *ifail, int *iclustr, float *gap, int *info)
void pzgetri_(const int *n, const std::complex< double > *A, const int *ia, const int *ja, const int *desca, int *ipiv, const std::complex< double > *work, const int *lwork, const int *iwork, const int *liwork, const int *info)
void pzgemr2d_(const int *M, const int *N, std::complex< double > *A, const int *IA, const int *JA, const int *DESCA, std::complex< double > *B, const int *IB, const int *JB, const int *DESCB, const int *ICTXT)
void Cpcgemr2d(int m, int n, std::complex< float > *ptrmyblock, int ia, int ja, int *ma, std::complex< float > *ptrmynewblock, int ib, int jb, int *mb, int globcontext)
void pdpotrf_(char *uplo, int *n, double *a, int *ia, int *ja, int *desca, int *info)
int numroc_(const int *n, const int *nb, const int *iproc, const int *srcproc, const int *nprocs)
void Cpdgemr2d(int m, int n, double *ptrmyblock, int ia, int ja, int *ma, double *ptrmynewblock, int ib, int jb, int *mb, int globcontext)
void pdgemv_(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 *B, const int *IB, const int *JB, const int *DESCB, const int *K, const double *beta, double *C, const int *IC, const int *JC, const int *DESCC, const int *L)
void pztranc_(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 pdsygvx_(const int *itype, const char *jobz, const char *range, const char *uplo, const int *n, double *A, const int *ia, const int *ja, const int *desca, double *B, const int *ib, const int *jb, const int *descb, const double *vl, const double *vu, const int *il, const int *iu, const double *abstol, int *m, int *nz, double *w, const 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 pzhegvx_(const int *itype, 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, std::complex< double > *B, const int *ib, const int *jb, const int *descb, const double *vl, const double *vu, const int *il, const int *iu, const double *abstol, int *m, int *nz, double *w, const double *orfac, std::complex< double > *Z, const int *iz, const int *jz, const int *descz, std::complex< double > *work, int *lwork, double *rwork, int *lrwork, int *iwork, int *liwork, int *ifail, int *iclustr, double *gap, 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 pzpotrf_(char *uplo, int *n, std::complex< double > *a, int *ia, int *ja, int *desca, int *info)
void pddot_(int *n, double *dot, double *x, int *ix, int *jx, int *descx, int *incx, double *y, int *iy, int *jy, int *descy, int *incy)
void pzdotc_(int *n, std::complex< double > *dot, std::complex< double > *x, int *ix, int *jx, int *descx, int *incx, std::complex< double > *y, int *iy, int *jy, int *descy, int *incy)
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 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 pzgemv_(const char *transa, const int *M, const int *N, const 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 int *K, const double *beta, std::complex< double > *C, const int *IC, const int *JC, const int *DESCC, const int *L)
void pdtrmm_(char *side, char *uplo, char *transa, char *diag, int *m, int *n, double *alpha, double *a, int *ia, int *ja, int *desca, double *b, int *ib, int *jb, int *descb)
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)
void pzgesv_(const int *n, const int *nrhs, const std::complex< double > *A, const int *ia, const int *ja, const int *desca, int *ipiv, std::complex< double > *B, const int *ib, const int *jb, const int *descb, const int *info)
std::enable_if< block2d_data_type< T >::value, void >::type Cpxgemr2d(int M, int N, T *A, int IA, int JA, int *DESCA, T *B, int IB, int JB, int *DESCB, int ICTXT)
Definition scalapack_connector.h:186
void pztranu_(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 pdgemr2d_(const int *M, const int *N, 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 pdsymm_(char *side, char *uplo, int *m, int *n, double *alpha, double *a, int *ia, int *ja, int *desca, double *b, int *ib, int *jb, int *descb, double *beta, double *c, int *ic, int *jc, int *descc)
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, const std::complex< double > *c, const int *ic, const int *jc, const int *descc)
void pssygvx_(const int *itype, const char *jobz, const char *range, const char *uplo, const int *n, float *A, const int *ia, const int *ja, const int *desca, float *B, const int *ib, const int *jb, const int *descb, const float *vl, const float *vu, const int *il, const int *iu, const float *abstol, int *m, int *nz, float *w, const 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 Cpsgemr2d(int m, int n, float *ptrmyblock, int ia, int ja, int *ma, float *ptrmynewblock, int ib, int jb, int *mb, int globcontext)
void pzhemm_(char *side, char *uplo, int *m, int *n, std::complex< double > *alpha, std::complex< double > *a, int *ia, int *ja, int *desca, std::complex< double > *b, int *ib, int *jb, int *descb, std::complex< double > *beta, std::complex< double > *c, int *ic, int *jc, int *descc)
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)
Definition scalapack_connector.h:163
static constexpr bool value
Definition scalapack_connector.h:164
int ictxt
Definition tddft_test.cpp:14