From 404bb1e388fae0590f93df3879709272381c37e4 Mon Sep 17 00:00:00 2001 From: eschnett <> Date: Thu, 15 Mar 2001 08:59:00 +0000 Subject: 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 --- Carpet/Carpet/src/carpet.cc | 67 ++++++++++++++++++++++++++------------------- Carpet/CarpetLib/src/ggf.hh | 5 +++- 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; ccomponents(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; ccomponents(reflevel); ++c) { gfdata[group].data[var]->ref_bnd_prolongate (tl, reflevel, c, mglevel); @@ -1177,36 +1179,45 @@ namespace Carpet { for (int group=0; groupcomponents(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; ccomponents(reflevel); ++c) { + arrdata[group].data[var]->ref_restrict + (tl, reflevel, c, mglevel); + } + for (int c=0; ccomponents(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; ccomponents(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; ccomponents(reflevel); ++c) { + gfdata[group].data[var]->ref_restrict + (tl, reflevel, c, mglevel); + } + for (int c=0; ccomponents(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); -- cgit v1.2.3