SCALAPACK 2.2.2
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches

◆ init_chenille() [2/2]

static2 void init_chenille ( Int  mypnum,
Int  nprocs,
Int  n0,
Int proc0,
Int  n1,
Int proc1,
Int **  psend,
Int **  precv,
Int myrang 
)

Definition at line 589 of file pztrmr.c.

591{
592 Int ns, nr, i, tot;
593 Int *sender, *recver, *g0, *g1;
594 tot = max(n0, n1);
595 sender = (Int *) mr2d_malloc((nprocs + tot) * sizeof(Int) * 2);
596 recver = sender + tot;
597 *psend = sender;
598 *precv = recver;
599 g0 = recver + tot;
600 g1 = g0 + nprocs;
601 for (i = 0; i < nprocs; i++) {
602 g0[i] = -1;
603 g1[i] = -1;
604 }
605 for (i = 0; i < tot; i++) {
606 sender[i] = -1;
607 recver[i] = -1;
608 }
609 for (i = 0; i < n0; i++)
610 g0[proc0[i]] = i;
611 for (i = 0; i < n1; i++)
612 g1[proc1[i]] = i;
613 ns = 0;
614 nr = 0;
615 *myrang = -1;
616 for (i = 0; i < nprocs; i++)
617 if (g0[i] >= 0 && g1[i] >= 0) {
618 if (i == mypnum)
619 *myrang = nr;
620 sender[ns] = g0[i];
621 ns += 1;
622 recver[nr] = g1[i];
623 nr += 1;
624 assert(ns <= n0 && nr <= n1 && nr == ns);
625 }
626 for (i = 0; i < nprocs; i++)
627 if (g0[i] >= 0 && g1[i] < 0) {
628 if (i == mypnum)
629 *myrang = ns;
630 sender[ns] = g0[i];
631 ns += 1;
632 assert(ns <= n0);
633 }
634 for (i = 0; i < nprocs; i++)
635 if (g1[i] >= 0 && g0[i] < 0) {
636 if (i == mypnum)
637 *myrang = nr;
638 recver[nr] = g1[i];
639 nr += 1;
640 assert(nr <= n1);
641 }
#define Int
Definition Bconfig.h:22
#define max(A, B)
Definition pztrmr.c:195
void * mr2d_malloc()
Here is the call graph for this function: