diff options
author | schnetter <> | 2004-09-17 14:37:00 +0000 |
---|---|---|
committer | schnetter <> | 2004-09-17 14:37:00 +0000 |
commit | d4752b8eddff766ca6d4280eaa0c4249f850e511 (patch) | |
tree | 2e56ff0b12b308e62ce9b88f3012da055ddf88c5 /Carpet/CarpetLib | |
parent | 59e03f2e92628fede1db8e6aa23b3f3487221188 (diff) |
Recompose vector groups on multiple refinement levels correctly.
darcs-hash:20040917143726-07bb3-cdfed6bde9278cc33ad4ad0a04ed13d6a700b65d.gz
Diffstat (limited to 'Carpet/CarpetLib')
-rw-r--r-- | Carpet/CarpetLib/src/dh.cc | 15 | ||||
-rw-r--r-- | Carpet/CarpetLib/src/ggf.cc | 17 |
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); |