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 586 of file pdtrmr.c.

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