diff options
author | allen <allen@b61c5cb5-eaca-4651-9a7a-d64986f99364> | 1999-11-01 13:23:06 +0000 |
---|---|---|
committer | allen <allen@b61c5cb5-eaca-4651-9a7a-d64986f99364> | 1999-11-01 13:23:06 +0000 |
commit | 63f66cba484dbe529a5780b00ca848f7af346747 (patch) | |
tree | 6781cec7e95dabcb01f8d6cc541352e5b3145c0f | |
parent | 45a06c3396cdfcf628e8ad49d435f838c961096b (diff) |
Doing local grid option in bounding box too
git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGH/PUGH/trunk@125 b61c5cb5-eaca-4651-9a7a-d64986f99364
-rw-r--r-- | src/pugh_BoundingBox.c | 238 |
1 files changed, 210 insertions, 28 deletions
diff --git a/src/pugh_BoundingBox.c b/src/pugh_BoundingBox.c index 6e36a7c..93b16d6 100644 --- a/src/pugh_BoundingBox.c +++ b/src/pugh_BoundingBox.c @@ -12,13 +12,55 @@ #include "cctk.h" #include "cctk_parameters.h" -void BoundingBox3D(pGH *GH, int *step, int *nproc, int staggertype) + +void BoundingBox1D(pGH *GH, int *nproc, int staggertype); +void BoundingBox3D(pGH *GH, int *nproc, int staggertype); +void BoundingBox1D_local(pGH *GH, int *nproc, int staggertype); +void BoundingBox3D_local(pGH *GH, int *nproc, int staggertype); + + +void BoundingBox(pGH *GH, int *nproc, int staggertype) +{ + switch (GH->dim) + { + case 1: + if (nproc[0]>=0) + { + BoundingBox1D(GH,nproc,staggertype); + } + else + { + BoundingBox1D_local(GH,nproc,staggertype); + } + break; + case 3: + if (nproc[0]>=0) + { + BoundingBox3D(GH,nproc,staggertype); + } + else + { + BoundingBox3D_local(GH,nproc,staggertype); + } + break; + default: + CCTK_WARN(0,"PUGH can't cope with this dimension grid yet"); + return; + } +} + +void BoundingBox3D(pGH *GH, int *nproc, int staggertype) { DECLARE_CCTK_PARAMETERS - int i,j,k; + int i,j,k,idir; + int *step; + step = (int *)malloc(GH->dim*sizeof(int)); + for (idir=0;idir<GH->dim;idir++) + step[idir] = (GH->nsize[idir]-1) / nproc[idir]; + for (i=0;i<nproc[0];i++) { for (j=0;j<nproc[1];j++) @@ -28,35 +70,67 @@ void BoundingBox3D(pGH *GH, int *step, int *nproc, int staggertype) int pnum = i + nproc[0]*(j+nproc[1]*k); /* Bounding box information */ - if (i == 0) GH->lb[pnum][0] = 0; - else {GH->lb[pnum][0] = i*step[0] +1 - GH->nghostzones[0]; - if(staggertype == PUGH_STAGGER) + if (i == 0) + { + GH->lb[pnum][0] = 0; + } + else + { + GH->lb[pnum][0] = i*step[0] +1 - GH->nghostzones[0]; + if(staggertype == PUGH_STAGGER) GH->lb[pnum][0] --; } - if (i == nproc[0]-1) GH->ub[pnum][0] = GH->nsize[0]-1; - else GH->ub[pnum][0] = (i+1)*step[0] + GH->nghostzones[0]; - - if (j == 0) GH->lb[pnum][1] = 0; - else {GH->lb[pnum][1] = j*step[1] +1 - GH->nghostzones[1]; - if(staggertype == PUGH_STAGGER) - GH->lb[pnum][1] --; + + if (i == nproc[0]-1) + { + GH->ub[pnum][0] = GH->nsize[0]-1; } - if (j == nproc[1]-1) GH->ub[pnum][1] = GH->nsize[1]-1; - else GH->ub[pnum][1] = (j+1)*step[1] + GH->nghostzones[1]; - - if (k == 0) GH->lb[pnum][2] = 0; - else {GH->lb[pnum][2] = k*step[2] +1 - GH->nghostzones[2]; - if(staggertype == PUGH_STAGGER) - GH->lb[pnum][2] --; + else + { + GH->ub[pnum][0] = (i+1)*step[0] + GH->nghostzones[0]; } - if (k == nproc[2]-1) + + if (j == 0) + { + GH->lb[pnum][1] = 0; + } + else + { + GH->lb[pnum][1] = j*step[1] +1 - GH->nghostzones[1]; + if(staggertype == PUGH_STAGGER) + { + GH->lb[pnum][1] --; + } + } + if (j == nproc[1]-1) + { + GH->ub[pnum][1] = GH->nsize[1]-1; + } + else + { + GH->ub[pnum][1] = (j+1)*step[1] + GH->nghostzones[1]; + } + + if (k == 0) + { + GH->lb[pnum][2] = 0; + } + else + { + GH->lb[pnum][2] = k*step[2] +1 - GH->nghostzones[2]; + if(staggertype == PUGH_STAGGER) { - GH->ub[pnum][2] = GH->nsize[2]-1; + GH->lb[pnum][2] --; } + } + if (k == nproc[2]-1) + { + GH->ub[pnum][2] = GH->nsize[2]-1; + } else - { - GH->ub[pnum][2] = (k+1)*step[2] + GH->nghostzones[2]; - } + { + GH->ub[pnum][2] = (k+1)*step[2] + GH->nghostzones[2]; + } } } } @@ -64,14 +138,82 @@ void BoundingBox3D(pGH *GH, int *step, int *nproc, int staggertype) } +void BoundingBox3D_local(pGH *GH, int *nproc, int staggertype) +{ -void BoundingBox1D(pGH *GH, int *step, int *nproc, int staggertype) + DECLARE_CCTK_PARAMETERS + + int i,j,k,idir; + int *step; + + step = (int *)malloc(GH->dim*sizeof(int)); + for (idir=0;idir<GH->dim;idir++) + step[idir] = (GH->nsize[idir]-1) / nproc[idir]; + + for (i=0;i<nproc[0];i++) + { + for (j=0;j<nproc[1];j++) + { + for (k=0;k<nproc[2];k++) + { + int pnum = i + nproc[0]*(j+nproc[1]*k); + + if (i == 0) + { + GH->lb[pnum][0] = 0; + } + else + { + GH->lb[pnum][0] = GH->ub[pnum-1][0] + 1 - + 2*(GH->nghostzones[0]); + if(staggertype == PUGH_STAGGER) GH->lb[pnum][0] --; + } + GH->ub[pnum][0] = GH->lb[pnum][0] + abs(GH->nsize[0]) - 1; + + if (j == 0) + { + GH->lb[pnum][1] = 0; + } + else + { + GH->lb[pnum][1] = GH->ub[pnum-nproc[0]][1] + 1 - + 2*(GH->nghostzones[1]); + if(staggertype == PUGH_STAGGER) GH->lb[pnum][1] --; + } + GH->ub[pnum][1] = GH->lb[pnum][1] + abs(GH->nsize[1]) - 1; + + if (k == 0) + { + GH->lb[pnum][2] = 0; + } + else + { + GH->lb[pnum][2] = GH->ub[pnum-nproc[0]*nproc[1]][2] + 1 - + 2*(GH->nghostzones[2]); + if(staggertype == PUGH_STAGGER) GH->lb[pnum][2] --; + } + GH->ub[pnum][2] = GH->lb[pnum][2] + abs(GH->nsize[2]) - 1; + + } + } + } + +} + + + +void BoundingBox1D(pGH *GH, int *nproc, int staggertype) { DECLARE_CCTK_PARAMETERS - int i; + int i,idir; + int *step; + step = (int *)malloc(GH->dim*sizeof(int)); + for (idir=0;idir<GH->dim;idir++) + step[idir] = (GH->nsize[idir]-1) / nproc[idir]; + for (i=0;i<nproc[0];i++) { if (i == 0) @@ -102,7 +244,39 @@ void BoundingBox1D(pGH *GH, int *step, int *nproc, int staggertype) -void Neighbours3D(pGH *GH, int *nproc, int *maxpoints, int *minpoints, double *avgpoints) +void BoundingBox1D_local(pGH *GH, int *nproc, int staggertype) +{ + + DECLARE_CCTK_PARAMETERS + + int i,idir; + int *step; + + step = (int *)malloc(GH->dim*sizeof(int)); + for (idir=0;idir<GH->dim;idir++) + step[idir] = (GH->nsize[idir]-1) / nproc[idir]; + + for (i=0;i<nproc[0];i++) + { + if (i == 0) + { + GH->lb[i][0] = 0; + } + else + { + GH->lb[i][0] = GH->ub[i-1][0] + 1 - + 2*(GH->nghostzones[0]); + if(staggertype == PUGH_STAGGER) GH->lb[i][0] --; + } + GH->ub[i][0] = GH->lb[i][0] + abs(GH->nsize[0]) - 1; + + } + +} + + + +void Neighbours3D(pGH *GH, int *nproc, int *maxpoints, int *minpoints, int *avgpoints) { int i,j,k,index,pnum; int dim; @@ -125,13 +299,21 @@ void Neighbours3D(pGH *GH, int *nproc, int *maxpoints, int *minpoints, double *a GH->neighbors[pnum][XDP] = (i+1) + nproc[0]*(j+nproc[1]*k); if (i == 0) + { if (GH->periodic) + { /* Use the nprocx processor */ GH->neighbors[pnum][XDM] = nproc[0]-1 + nproc[0]*(j+nproc[1]*k); - else + } + else + { GH->neighbors[pnum][XDM] = -1; + } + } else + { GH->neighbors[pnum][XDM] = (i-1) + nproc[0]*(j+nproc[1]*k); + } if (j == nproc[1]-1) if (GH->periodic) |