aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorallen <allen@b61c5cb5-eaca-4651-9a7a-d64986f99364>1999-11-01 13:23:06 +0000
committerallen <allen@b61c5cb5-eaca-4651-9a7a-d64986f99364>1999-11-01 13:23:06 +0000
commit63f66cba484dbe529a5780b00ca848f7af346747 (patch)
tree6781cec7e95dabcb01f8d6cc541352e5b3145c0f
parent45a06c3396cdfcf628e8ad49d435f838c961096b (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.c238
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)