aboutsummaryrefslogtreecommitdiff
path: root/Carpet/CarpetInterp
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@cct.lsu.edu>2005-12-02 14:33:00 +0000
committerErik Schnetter <schnetter@cct.lsu.edu>2005-12-02 14:33:00 +0000
commit37228f47fff68b3d176009b11a2e44b28d103e9e (patch)
tree1827768fac609585282ef78b400898a7cc4ebee6 /Carpet/CarpetInterp
parentb60db11de8f7bdce6df6a05ad64e9470bb3f5890 (diff)
CarpetInterp: Correct another error in the coordinate calculations
Correct some errors in determining the coordinate extent and number of grid points on a given refinement level. Make a case distinction between grid function and grid arrays, because the grid spacing in grid functions depends on the refinement level, while the grid spacing in grid arrays does not. darcs-hash:20051202143331-dae7b-f16b89629f7cf523bba93a26fae88aba3bab63e0.gz
Diffstat (limited to 'Carpet/CarpetInterp')
-rw-r--r--Carpet/CarpetInterp/src/interp.cc29
1 files changed, 21 insertions, 8 deletions
diff --git a/Carpet/CarpetInterp/src/interp.cc b/Carpet/CarpetInterp/src/interp.cc
index 17d900aec..9babd7c89 100644
--- a/Carpet/CarpetInterp/src/interp.cc
+++ b/Carpet/CarpetInterp/src/interp.cc
@@ -819,9 +819,9 @@ namespace CarpetInterp {
for (int m = 0; m < maps; ++m) {
const ibbox& baseextent = arrdata.at(coord_group).at(m).hh->baseextent;
lower.at(m) = coord_lower;
- delta.at(m) = (coord_upper - coord_lower) / baseextent.upper();
- upper.at(m) = lower.at(m) +
- delta.at(m) * (baseextent.upper() - baseextent.lower());
+ upper.at(m) = coord_upper;
+ delta.at(m) = ((coord_upper - coord_lower) /
+ (baseextent.upper() - baseextent.lower()));
}
// Assign interpolation points to processors/components
@@ -1182,15 +1182,28 @@ namespace CarpetInterp {
}
#endif
+ int const grouptype = CCTK_GroupTypeI (coord_group);
+ assert (grouptype >= 0);
+ int const m = grouptype == CCTK_GF ? Carpet::map : 0;
+ // delta for the Carpet grid indices
+ const ibbox& baseextent = arrdata.at(coord_group).at(m).hh->baseextent;
+ delta = (upper - lower) / (baseextent.upper() - baseextent.lower());
+
// Get processor-local origin and spacing
cGroupDynamicData coord_group_data;
CCTK_GroupDynamicData (cctkGH, coord_group, &coord_group_data);
+ // To do: do this via hh->bases instead
for (int d = 0; d < N_dims; ++d) {
- delta[d] = (upper[d] - lower[d]) /
- ((coord_group_data.gsh[d]-1) * cctkGH->cctk_levfac[d]);
- lower[d] += delta[d] *
- (coord_group_data.lbnd[d] +
- 1.0 * cctkGH->cctk_levoff[d] / cctkGH->cctk_levoffdenom[d]);
+ if (grouptype == CCTK_GF) {
+ assert (maxspacereflevelfact[d] % cctkGH->cctk_levfac[d] == 0);
+ delta[d] *= maxspacereflevelfact[d] / cctkGH->cctk_levfac[d];
+ lower[d] += (delta[d] *
+ (cctkGH->cctk_lbnd[d] +
+ 1.0 * cctkGH->cctk_levoff[d] /
+ cctkGH->cctk_levoffdenom[d]));
+ } else {
+ lower[d] += delta[d] * cctkGH->cctk_lbnd[d];
+ }
}
void const* tmp_coords[dim];