File: BI_SringBR.c

package info (click to toggle)
scalapack 2.2.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 37,012 kB
  • sloc: fortran: 339,113; ansic: 74,517; makefile: 1,494; sh: 34
file content (28 lines) | stat: -rw-r--r-- 702 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "Bdef.h"

void BI_SringBR(BLACSCONTEXT *ctxt, BLACBUFF *bp, SDRVPTR send, Int src)
{
   void BI_Srecv(BLACSCONTEXT *, Int, Int, BLACBUFF *);

   Int mydist;  	/* my distance from source */
   Int Np, Iam, msgid, rightedge;

   Np = ctxt->scp->Np;
   Iam = ctxt->scp->Iam;
   msgid = Mscopeid(ctxt);

   mydist = (Np + Iam - src) % Np;
   rightedge = Np/2;
   BI_Srecv(ctxt, BANYNODE, msgid, bp);

/*
 * If I'm between source & right edge of split ring, send to right
 */
   if (mydist < rightedge)
      send(ctxt, (Iam+1)%Np, msgid, bp);
/*
 * If I'm between source and left edge of split ring, send to left
 */
   else if (mydist > rightedge+1)
      send(ctxt, (Np+Iam-1)%Np, msgid, bp);
}