01: /* ///////////////////////////// P /// L /// A /// S /// M /// A /////////////////////////////// */
02: /* ///                    PLASMA auxiliary routines (version 2.1.0)                          ///
03:  * ///                    Release Date: November, 15th 2009                                  ///
04:  * ///                    PLASMA is a software package provided by Univ. of Tennessee,       ///
05:  * ///                    Univ. of California Berkeley and Univ. of Colorado Denver          /// */
06: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
07: #include "common.h"
08: #include "lapack.h"
09: 
10: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
11: #define B(m,n) &((PLASMA_Complex64_t*)B.mat)[B.bsiz*(m)+B.bsiz*B.lmt*(n)]
12: #define SA(m,n) &((PLASMA_Complex32_t*)SA.mat)[SA.bsiz*(m)+SA.bsiz*SA.lmt*(n)]
13: 
14: void plasma_pclag2z(plasma_context_t *plasma)
15: {
16:     PLASMA_desc SA;
17:     PLASMA_desc B;
18: 
19:     int info;
20:     int X, X1, X2, Y, Y1, Y2;
21:     int m, n;
22:     int next_m;
23:     int next_n;
24: 
25:     plasma_unpack_args_2(SA, B);
26: 
27:     n = 0;
28:     m = PLASMA_RANK;
29:     while (m >= SA.mt && n < SA.nt) {
30:         n++;
31:         m = m-SA.mt;
32:     }
33: 
34:     while (n < SA.nt) {
35:         next_m = m;
36:         next_n = n;
37: 
38:         next_m += PLASMA_SIZE;
39:         while (next_m >= SA.mt && next_n < SA.nt) {
40:             next_n++;
41:             next_m = next_m-SA.mt;
42:         }
43: 
44:         X1 = m == 0 ? SA.i%SA.nb : 0;
45:         Y1 = n == 0 ? SA.j%SA.nb : 0;
46:         X2 = m == SA.mt-1 ? (SA.i+SA.m-1)%SA.nb+1 : SA.nb;
47:         Y2 = n == SA.nt-1 ? (SA.j+SA.n-1)%SA.nb+1 : SA.nb;
48:         X = X2 - X1;
49:         Y = Y2 - Y1;
50: 
51:         clag2z(&X, &Y, SA(m,n), &SA.nb, B(m,n), &SA.nb, &info );
52: 
53:         m = next_m;
54:         n = next_n;
55:     }
56: }
57: