diff options
author | Erik Schnetter <schnetter@cct.lsu.edu> | 2005-12-02 14:33:00 +0000 |
---|---|---|
committer | Erik Schnetter <schnetter@cct.lsu.edu> | 2005-12-02 14:33:00 +0000 |
commit | 37228f47fff68b3d176009b11a2e44b28d103e9e (patch) | |
tree | 1827768fac609585282ef78b400898a7cc4ebee6 /Carpet/CarpetInterp | |
parent | b60db11de8f7bdce6df6a05ad64e9470bb3f5890 (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.cc | 29 |
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]; |