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 564 of file pdgemr.c.

568{
569 Int ns, nr, i, tot;
570 Int *sender, *recver, *g0, *g1;
571 tot = max(n0, n1);
572 sender = (Int *) mr2d_malloc((nprocs + tot) * sizeof(Int) * 2);
573 recver = sender + tot;
574 *psend = sender;
575 *precv = recver;
576 g0 = recver + tot;
577 g1 = g0 + nprocs;
578 for (i = 0; i < nprocs; i++) {
579 g0[i] = -1;
580 g1[i] = -1;
581 }
582 for (i = 0; i < tot; i++) {
583 sender[i] = -1;
584 recver[i] = -1;
585 }
586 for (i = 0; i < n0; i++)
587 g0[proc0[i]] = i;
588 for (i = 0; i < n1; i++)
589 g1[proc1[i]] = i;
590 ns = 0;
591 nr = 0;
592 *myrang = -1;
593 for (i = 0; i < nprocs; i++)
594 if (g0[i] >= 0 && g1[i] >= 0) {
595 if (i == mypnum)
596 *myrang = nr;
597 sender[ns] = g0[i];
598 ns += 1;
599 recver[nr] = g1[i];
600 nr += 1;
601 assert(ns <= n0 && nr <= n1 && nr == ns);
602 }
603 for (i = 0; i < nprocs; i++)
604 if (g0[i] >= 0 && g1[i] < 0) {
605 if (i == mypnum)
606 *myrang = ns;
607 sender[ns] = g0[i];
608 ns += 1;
609 assert(ns <= n0);
610 }
611 for (i = 0; i < nprocs; i++)
612 if (g1[i] >= 0 && g0[i] < 0) {
613 if (i == mypnum)
614 *myrang = nr;
615 recver[nr] = g1[i];
616 nr += 1;
617 assert(nr <= n1);
618 }
#define Int
Definition Bconfig.h:22
#define max(A, B)
Definition pdgemr.c:177
void * mr2d_malloc()
Here is the call graph for this function: