diff options
Diffstat (limited to 'src/CartGrid3D.c')
-rw-r--r-- | src/CartGrid3D.c | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/src/CartGrid3D.c b/src/CartGrid3D.c index 3592adf..87b76ee 100644 --- a/src/CartGrid3D.c +++ b/src/CartGrid3D.c @@ -104,13 +104,16 @@ void CartGrid3D(CCTK_ARGUMENTS) /* Calculate physical indices, using symmetries and periodicity */ for (i = 0; i < 3; i++) { - loweri[i] = domainsym[2*i] ? cctk_nghostzones[i] : 0; + loweri[i] = 0; upperi[i] = cctk_gsh[i] - 1; - if (do_periodic[i]) + if (domainsym[2*i+0] || do_periodic[i]) { - loweri[i] = cctk_nghostzones[i]; - upperi[i] = cctk_gsh[i] - 1 - cctk_nghostzones[i]; + loweri[i] += cctk_nghostzones[i]; + } + if (domainsym[2*i+1] || do_periodic[i]) + { + upperi[i] -= cctk_nghostzones[i]; } } @@ -162,19 +165,31 @@ void CartGrid3D(CCTK_ARGUMENTS) /* Grid spacing on coarsest grid */ for (i = 0; i < 3; i++) { - if (domainsym[2*i]) + if (domainsym[2*i+0]) { if (cntstag[i]) { - *coarse_delta[i] = max1[i] / (cctk_gsh[i] - cctk_nghostzones[i]-0.5); + *coarse_delta[i] = max1[i] / (cctk_gsh[i]-cctk_nghostzones[i]-0.5); origin[i] = - (cctk_nghostzones[i]-0.5) * *coarse_delta[i]; } else { - *coarse_delta[i] = max1[i] / (cctk_gsh[i] - cctk_nghostzones[i]-1); + *coarse_delta[i] = max1[i] / (cctk_gsh[i]-cctk_nghostzones[i]-1); origin[i] = - cctk_nghostzones[i] * *coarse_delta[i]; } } + else if (domainsym[2*i+1]) + { + if (cntstag[i]) + { + *coarse_delta[i] = fabs(min1[i]) / (cctk_gsh[i]-cctk_nghostzones[i]-0.5); + } + else + { + *coarse_delta[i] = fabs(min1[i]) / (cctk_gsh[i]-cctk_nghostzones[i]-1); + } + origin[i] = min1[i]; + } else { if (cntstag[i]) @@ -215,15 +230,19 @@ void CartGrid3D(CCTK_ARGUMENTS) this_delta[i] = *coarse_delta[i]; /* Set minimum values of coordinates */ - if (domainsym[2*i]) + if (domainsym[2*i+0]) + { + origin[i] = -(cctk_nghostzones[i] - cntstag[i]*0.5); + } + else if (domainsym[2*i+1]) { - origin[i] = (- cctk_nghostzones[i] + cntstag[i]*0.5) * this_delta[i]; + origin[i] = -(cctk_gsh[i]-1 - cctk_nghostzones[i] + cntstag[i]*0.5); } else { - origin[i] = - 0.5 * (cctk_gsh[i]-1 - cntstag[i] * cctk_gsh[i]%2) - * this_delta[i]; + origin[i] = -0.5 * (cctk_gsh[i]-1 - cntstag[i] * cctk_gsh[i]%2); } + origin[i] *= this_delta[i]; } } |