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 pigemr.c.

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