aboutsummaryrefslogtreecommitdiff
path: root/src/SetupPGV.c
diff options
context:
space:
mode:
authorlanfer <lanfer@b61c5cb5-eaca-4651-9a7a-d64986f99364>2000-03-27 16:35:29 +0000
committerlanfer <lanfer@b61c5cb5-eaca-4651-9a7a-d64986f99364>2000-03-27 16:35:29 +0000
commit55597e84a8e74d89e59b2f6877ce1e9e69ba3d34 (patch)
tree84164cebbaaab0da0f21f53b190d0171a0899f89 /src/SetupPGV.c
parentcf061a2821736574b21d5d52b051ce172f67748c (diff)
staggering with PGV
git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGH/PUGH/trunk@186 b61c5cb5-eaca-4651-9a7a-d64986f99364
Diffstat (limited to 'src/SetupPGV.c')
-rw-r--r--src/SetupPGV.c137
1 files changed, 48 insertions, 89 deletions
diff --git a/src/SetupPGV.c b/src/SetupPGV.c
index b77bdd2..1ddca74 100644
--- a/src/SetupPGV.c
+++ b/src/SetupPGV.c
@@ -159,6 +159,8 @@ pGExtras *pugh_SetupPGExtras(int dim,
total_procs, nprocs, this_proc,this);
pugh_SetupPGExtrasOwnership(dim, perme, stagger, sh, nghosts,
total_procs, nprocs, this_proc, this);
+ pugh_SetupPGExtrasStaggering(dim, perme, stagger, sh, nghosts,
+ total_procs, nprocs, this_proc, this);
}
}
@@ -1051,111 +1053,68 @@ int pugh_SetupPGExtrasOwnership(int dim,
}
- /* if staggering, set up ownership, overlaps, ghosts */
- if(stagger == PUGH_STAGGER)
+ return 0;
+}
+
+int pugh_SetupPGExtrasStaggering(int dim,
+ int *perme,
+ int stagger,
+ int *sh,
+ int *nghosts,
+ int total_procs,
+ int *nprocs,
+ int this_proc,
+ pGExtras *this)
+{
+ int s,d,k,dir;
+ int *upperbnd;
+
+ upperbnd = (int*) malloc(dim*sizeof(int));
+
+
+ for (d=0;d<dim;d++)
+ {
+ upperbnd[d] = (this->ub[this_proc][d] == this->nsize[d]-1) ? 1 : 0;
+ }
+
+ /* copy ownership/ghost/overlap from the default PUGH_VERTEXCTR */
+ for(s=1;s<PUGH_NSTAGGER;s++)
{
- /* copy ownership from PUGH_VERTEXCTR */
- for(i = 1; i < PUGH_NSTAGGER; i++)
+ for(d=0;d<dim;d++)
{
- for(j = 0; j < dim; j++)
+ for(k=0;k<2;k++)
{
- for(k = 0; k < 2; k++)
- {
- this->ownership[i][k][j] = this->ownership[PUGH_VERTEXCTR][k][j];
- }
- }
- }
-
- /* correct ownership for staggered grids */
- for(i = 0; i < PUGH_NSTAGGER; i++)
- {
- for (idir = 0; idir < dim; idir++)
- {
- if(this->ub[this_proc][idir] != this->nsize[idir]-1)
- {
- this->ownership[i][1][idir] --;
- }
- else
+ this->ownership[s][k][d] = this->ownership[0][k][d];
+ for (dir=0;dir<2*dim;dir++)
{
- if(i == PUGH_FACECTR(idir))
- {
- this->ownership[i][1][idir] --;
- }
+ this->overlap[s][k][dir][d] = this->overlap[0][k][dir][d];
+ this->ghosts [s][k][dir][d] = this->ghosts [0][k][dir][d];
}
}
- }
-
- /* set overlaps for staggered grids */
- for(staglcv = 0; staglcv < PUGH_NSTAGGER; staglcv++)
- {
- for(dir = 0; dir < 2*dim; dir++)
+
+ /* decrease ownership at upper bound */
+ if(upperbnd[d])
{
- for (idir = 0; idir < dim; idir++)
- {
- istart = 0;
- iend = this->lnsize[idir];
- if(staglcv == PUGH_FACECTR(idir))
- {
- iend --;
- }
- if(dir == 2*idir)
- {
- istart = this->nghostzones[idir];
- iend = 2 * this->nghostzones[idir];
- if(staglcv != PUGH_FACECTR(idir))
- {
- istart ++;
- iend ++;
- }
- }
- if(dir == 2*idir+1)
- {
- istart = this->lnsize[idir] - 2 * this->nghostzones[idir] -1;
- iend = istart + this->nghostzones[idir];
- }
-
- this->overlap[staglcv][0][dir][idir] = istart;
- this->overlap[staglcv][1][dir][idir] = iend;
- }
+ this->ownership[s][1][d] --;
}
}
-
- /* set ghosts for staggered grids */
- for(staglcv = 0; staglcv < PUGH_NSTAGGER; staglcv++)
+
+ /* correct overlaps */
+ for(dir=0;dir<2*dim;dir++)
{
- for(dir = 0; dir < 2*dim; dir++)
+ for (d=0;d<dim;d++)
{
- for(idir=0;idir<dim;idir++)
+ /* if we are at a upper physical bnd && at a upperface (1,3,5)
+ && we are in the dir direction decrease by one */
+ if((upperbnd[d])&&((dir+1)%2==0)&&(dir==2*d+1))
{
- istart = 0;
- iend = this->lnsize[idir];
- if(staglcv == PUGH_FACECTR(idir))
- {
- iend --;
- }
- if(dir == 2*idir)
- {
- istart = 0;
- iend = this->nghostzones[idir];
- }
- if(dir == 2*idir+1)
- {
- istart = this->lnsize[idir] - this->nghostzones[idir];
- iend = this->lnsize[idir];
- if(staglcv == PUGH_FACECTR(idir))
- {
- istart --;
- iend --;
- }
- }
- this->ghosts[staglcv][0][dir][idir] = istart;
- this->ghosts[staglcv][1][dir][idir] = iend;
+ this->overlap[s][0][dir][d]--;
+ this->overlap[s][1][dir][d]--;
}
}
}
}
-
- return 0;
+ return(0);
}
/*@@