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 567 of file pzgemr.c.

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