aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschnetter <>2004-09-17 14:37:00 +0000
committerschnetter <>2004-09-17 14:37:00 +0000
commitd4752b8eddff766ca6d4280eaa0c4249f850e511 (patch)
tree2e56ff0b12b308e62ce9b88f3012da055ddf88c5
parent59e03f2e92628fede1db8e6aa23b3f3487221188 (diff)
Recompose vector groups on multiple refinement levels correctly.
darcs-hash:20040917143726-07bb3-cdfed6bde9278cc33ad4ad0a04ed13d6a700b65d.gz
-rw-r--r--Carpet/CarpetLib/src/dh.cc15
-rw-r--r--Carpet/CarpetLib/src/ggf.cc17
2 files changed, 22 insertions, 10 deletions
diff --git a/Carpet/CarpetLib/src/dh.cc b/Carpet/CarpetLib/src/dh.cc
index 7cc9ff96b..e7e8778ff 100644
--- a/Carpet/CarpetLib/src/dh.cc
+++ b/Carpet/CarpetLib/src/dh.cc
@@ -1,4 +1,4 @@
-// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/dh.cc,v 1.56 2004/08/07 19:47:11 schnetter Exp $
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/dh.cc,v 1.57 2004/09/17 16:37:26 schnetter Exp $
#include <assert.h>
@@ -612,22 +612,29 @@ void dh<D>::recompose (const bool do_prolongate) {
for (comm_state<D> state; !state.done(); state.step()) {
(*f)->recompose_fill (state, rl, do_prolongate);
}
+ assert ((*f)->vectorlength >= 1);
if ((*f)->vectorlength == 1) {
+ assert (! vectorleader);
(*f)->recompose_free (rl);
} else {
// treat vector groups specially: delete the leader only
// after all other elements have been deleted
if ((*f)->vectorindex == 0) {
// first element: delete nothing
- assert (! vectorleader);
- vectorleader = *f;
+ if (rl == 0) {
+ assert (! vectorleader);
+ vectorleader = *f;
+ }
+ assert (vectorleader);
} else {
assert (vectorleader);
(*f)->recompose_free (rl);
if ((*f)->vectorindex == (*f)->vectorlength-1) {
// this was the last element: delete the leader as well
vectorleader->recompose_free (rl);
- vectorleader = NULL;
+ if (rl == h.reflevels()-1) {
+ vectorleader = NULL;
+ }
}
}
}
diff --git a/Carpet/CarpetLib/src/ggf.cc b/Carpet/CarpetLib/src/ggf.cc
index bcb6263ed..c26b22dbc 100644
--- a/Carpet/CarpetLib/src/ggf.cc
+++ b/Carpet/CarpetLib/src/ggf.cc
@@ -1,4 +1,4 @@
-// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/ggf.cc,v 1.45 2004/08/07 19:47:11 schnetter Exp $
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/ggf.cc,v 1.46 2004/09/17 16:37:26 schnetter Exp $
#include <assert.h>
#include <math.h>
@@ -36,7 +36,12 @@ ggf<D>::ggf (const int varindex, const operator_type transport_operator,
vectorleader(vectorleader)
{
assert (&t.h == &d.h);
-
+
+ assert (vectorlength >= 1);
+ assert (vectorindex >= 0 && vectorindex < vectorlength);
+ assert ((vectorindex==0 && !vectorleader)
+ || (vectorindex!=0 && vectorleader));
+
d.add(this);
}
@@ -277,9 +282,9 @@ void ggf<D>::flip (int rl, int c, int ml) {
template<int D>
void ggf<D>::copycat (comm_state<D>& state,
int tl1, int rl1, int c1, int ml1,
- const ibbox dh<D>::dboxes::* recv_list,
+ const ibbox dh<D>::dboxes::* recv_box,
int tl2, int rl2, int ml2,
- const ibbox dh<D>::dboxes::* send_list)
+ const ibbox dh<D>::dboxes::* send_box)
{
assert (tl1>=tmin && tl1<=tmax);
assert (rl1>=0 && rl1<h.reflevels());
@@ -289,8 +294,8 @@ void ggf<D>::copycat (comm_state<D>& state,
assert (rl2>=0 && rl2<h.reflevels());
const int c2=c1;
assert (ml2<h.mglevels(rl2,c2));
- const ibbox recv = d.boxes.at(rl1).at(c1).at(ml1).*recv_list;
- const ibbox send = d.boxes.at(rl2).at(c2).at(ml2).*send_list;
+ const ibbox recv = d.boxes.at(rl1).at(c1).at(ml1).*recv_box;
+ const ibbox send = d.boxes.at(rl2).at(c2).at(ml2).*send_box;
assert (all(recv.shape()==send.shape()));
// copy the content
assert (recv==send);