aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreschnett <>2001-03-15 08:59:00 +0000
committereschnett <>2001-03-15 08:59:00 +0000
commit404bb1e388fae0590f93df3879709272381c37e4 (patch)
treea427d517437e3ee4a1d44a5f8cf83baa96e7e333
parent8e7c27de1a43de6e9c4902d58e414babaa2699af (diff)
Made WaveToy work with three refinement levels. There was a bug in
Made WaveToy work with three refinement levels. There was a bug in the restriction operation. darcs-hash:20010315085936-f6438-b01d4c14463f1b38f95d847eb2c73d9bd0dc0983.gz
-rw-r--r--Carpet/Carpet/src/carpet.cc67
-rw-r--r--Carpet/CarpetLib/src/ggf.hh5
2 files changed, 43 insertions, 29 deletions
diff --git a/Carpet/Carpet/src/carpet.cc b/Carpet/Carpet/src/carpet.cc
index 1a65ea17f..7d564e954 100644
--- a/Carpet/Carpet/src/carpet.cc
+++ b/Carpet/Carpet/src/carpet.cc
@@ -1,4 +1,4 @@
-// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Attic/carpet.cc,v 1.11 2001/03/14 12:57:38 eschnett Exp $
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Attic/carpet.cc,v 1.12 2001/03/15 09:59:36 eschnett Exp $
/* It is assumed that the number of components of all arrays is equal
to the number of components of the grid functions, and that their
@@ -32,7 +32,7 @@
#include "carpet.hh"
-static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Attic/carpet.cc,v 1.11 2001/03/14 12:57:38 eschnett Exp $";
+static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Attic/carpet.cc,v 1.12 2001/03/15 09:59:36 eschnett Exp $";
@@ -797,6 +797,8 @@ namespace Carpet {
return -1;
}
+ const int n0 = CCTK_FirstVarIndexI(group);
+ const int num_tl = CCTK_NumTimeLevelsFromVarI(n0);
const int tl = activetimelevel;
switch (CCTK_GroupTypeI(group)) {
@@ -807,7 +809,7 @@ namespace Carpet {
case CCTK_ARRAY:
assert (group<(int)arrdata.size());
for (int var=0; var<(int)arrdata[group].data.size(); ++var) {
- if (reflevel>0) {
+ if (num_tl>1 && reflevel>0) {
for (int c=0; c<arrdata[group].hh->components(reflevel); ++c) {
arrdata[group].data[var]->ref_bnd_prolongate
(tl, reflevel, c, mglevel);
@@ -822,7 +824,7 @@ namespace Carpet {
case CCTK_GF:
assert (group<(int)gfdata.size());
for (int var=0; var<(int)gfdata[group].data.size(); ++var) {
- if (reflevel>0) {
+ if (num_tl>1 && reflevel>0) {
for (int c=0; c<hh->components(reflevel); ++c) {
gfdata[group].data[var]->ref_bnd_prolongate
(tl, reflevel, c, mglevel);
@@ -1177,36 +1179,45 @@ namespace Carpet {
for (int group=0; group<CCTK_NumGroups(); ++group) {
- const int tl = activetimelevel;
-
- switch (CCTK_GroupTypeI(group)) {
+ // Restrict only groups with storage
+ if (CCTK_QueryGroupStorageI(cgh, group)) {
- case CCTK_SCALAR:
- break;
+ const int tl = activetimelevel;
- case CCTK_ARRAY:
- for (int var=0; var<(int)arrdata[group].data.size(); ++var) {
- for (int c=0; c<hh->components(reflevel); ++c) {
- arrdata[group].data[var]->ref_restrict
- (tl, reflevel, c, mglevel);
+ switch (CCTK_GroupTypeI(group)) {
+
+ case CCTK_SCALAR:
+ break;
+
+ case CCTK_ARRAY:
+ for (int var=0; var<(int)arrdata[group].data.size(); ++var) {
+ for (int c=0; c<hh->components(reflevel); ++c) {
+ arrdata[group].data[var]->ref_restrict
+ (tl, reflevel, c, mglevel);
+ }
+ for (int c=0; c<arrdata[group].hh->components(reflevel); ++c) {
+ arrdata[group].data[var]->sync (tl, reflevel, c, mglevel);
+ }
}
- }
- break;
-
- case CCTK_GF:
- for (int var=0; var<(int)gfdata[group].data.size(); ++var) {
- for (int c=0; c<hh->components(reflevel); ++c) {
- gfdata[group].data[var]->ref_restrict
- (tl, reflevel, c, mglevel);
+ break;
+
+ case CCTK_GF:
+ for (int var=0; var<(int)gfdata[group].data.size(); ++var) {
+ for (int c=0; c<hh->components(reflevel); ++c) {
+ gfdata[group].data[var]->ref_restrict
+ (tl, reflevel, c, mglevel);
+ }
+ for (int c=0; c<hh->components(reflevel); ++c) {
+ gfdata[group].data[var]->sync (tl, reflevel, c, mglevel);
+ }
}
+ break;
+
+ default:
+ abort();
}
- break;
- default:
- abort();
- }
-
- SyncGroup (cgh, CCTK_GroupName(group));
+ } // if group has storage
} // loop over groups
}
diff --git a/Carpet/CarpetLib/src/ggf.hh b/Carpet/CarpetLib/src/ggf.hh
index 1501aa5dd..f59d4e415 100644
--- a/Carpet/CarpetLib/src/ggf.hh
+++ b/Carpet/CarpetLib/src/ggf.hh
@@ -6,7 +6,7 @@
copyright : (C) 2000 by Erik Schnetter
email : schnetter@astro.psu.edu
- $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/ggf.hh,v 1.1 2001/03/01 13:40:10 eschnett Exp $
+ $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/ggf.hh,v 1.2 2001/03/15 09:59:43 eschnett Exp $
***************************************************************************/
@@ -153,6 +153,9 @@ public:
// The grid boundaries have to be updated after calling mg_restrict,
// mg_prolongate, ref_restrict, or ref_prolongate.
+ // "Updating" means here that the boundaries have to be
+ // synchronised. They don't need to be prolongated.
+
// Copy a component from the next time level
virtual void copy (int tl, int rl, int c, int ml);