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 A(m,n) &((PLASMA_Complex32_t*)A.mat)[A.bsiz*(m)+A.bsiz*A.lmt*(n)]
12: #define SB(m,n) &((PLASMA_Complex32_t*)SB.mat)[SB.bsiz*(m)+SB.bsiz*SB.lmt*(n)]
13: 
14: void plasma_pclag2c(plasma_context_t *plasma)
15: {
16:     PLASMA_desc A;
17:     PLASMA_desc SB;
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(A, SB);
26: 
27:     n = 0;
28:     m = PLASMA_RANK;
29:     while (m >= A.mt && n < A.nt) {
30:         n++;
31:         m = m-A.mt;
32:     }
33: 
34:     while (n < A.nt) {
35:         next_m = m;
36:         next_n = n;
37: 
38:         next_m += PLASMA_SIZE;
39:         while (next_m >= A.mt && next_n < A.nt) {
40:             next_n++;
41:             next_m = next_m-A.mt;
42:         }
43: 
44:         X1 = m == 0 ? A.i%A.nb : 0;
45:         Y1 = n == 0 ? A.j%A.nb : 0;
46:         X2 = m == A.mt-1 ? (A.i+A.m-1)%A.nb+1 : A.nb;
47:         Y2 = n == A.nt-1 ? (A.j+A.n-1)%A.nb+1 : A.nb;
48:         X = X2 - X1;
49:         Y = Y2 - Y1;
50: 
51:         zlag2c(&X, &Y, A(m,n), &A.nb, SB(m,n), &A.nb, &info);
52: 
53:         m = next_m;
54:         n = next_n;
55:     }
56: }
57: 
58: