diff options
author | eschnett <> | 2001-03-24 21:38:00 +0000 |
---|---|---|
committer | eschnett <> | 2001-03-24 21:38:00 +0000 |
commit | 63aad58172f57c2d2d91af630ae3b13a7cda70eb (patch) | |
tree | 054fe9b47ceca6067cb3dbe982d3c87c3c5b5255 /Carpet/CarpetLib/src/gdata.cc | |
parent | 4f27fd634e6772a8075f9737c0d5e2f9545109fe (diff) |
Added support for higher-order interpolation in space and time.
darcs-hash:20010324213842-f6438-3ccfdd7797b28055f08d28b77e33205c69c60e27.gz
Diffstat (limited to 'Carpet/CarpetLib/src/gdata.cc')
-rw-r--r-- | Carpet/CarpetLib/src/gdata.cc | 74 |
1 files changed, 17 insertions, 57 deletions
diff --git a/Carpet/CarpetLib/src/gdata.cc b/Carpet/CarpetLib/src/gdata.cc index 5418db23a..6f2a2ecd3 100644 --- a/Carpet/CarpetLib/src/gdata.cc +++ b/Carpet/CarpetLib/src/gdata.cc @@ -5,7 +5,7 @@ copyright : (C) 2000 by Erik Schnetter email : schnetter@astro.psu.edu - $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gdata.cc,v 1.9 2001/03/22 18:42:05 eschnett Exp $ + $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gdata.cc,v 1.10 2001/03/24 22:38:48 eschnett Exp $ ***************************************************************************/ @@ -88,78 +88,38 @@ void generic_data<D>::copy_from (const generic_data* src, const ibbox& box) template<int D> void generic_data<D> -::interpolate_from (const generic_data* src, const ibbox& box) +::interpolate_from (const vector<const generic_data*> srcs, + const vector<int> tls, + const ibbox& box, const int tl, + const int order_space) { - assert (has_storage() && src->has_storage()); - assert (all(box.lower()>=extent().lower() - && box.upper()<=extent().upper())); - assert (all(box.lower()>=extent().lower() - && box.lower()>=src->extent().lower())); - assert (all(box.upper()<=extent().upper() - && box.upper()<=src->extent().upper())); + assert (has_storage()); + assert (all(box.lower()>=extent().lower())); + assert (all(box.upper()<=extent().upper())); assert (all(box.stride()==extent().stride())); assert (all((box.lower()-extent().lower())%box.stride() == 0)); - - if (proc() == src->proc()) { - // interpolate on same processor - - int rank; - MPI_Comm_rank (dist::comm, &rank); - if (rank == proc()) { - interpolate_from_innerloop (src, box); - } - - } else { - // interpolate from other processor - - generic_data* const tmp = make_typed(); - tmp->allocate (box, src->proc()); - tmp->interpolate_from (src, box); - tmp->change_processor (proc()); - copy_from (tmp, box); - delete tmp; - + assert (srcs.size() == tls.size() && srcs.size()>0); + for (int t=0; t<(int)srcs.size(); ++t) { + assert (srcs[t]->has_storage()); + assert (all(box.lower()>=srcs[t]->extent().lower())); + assert (all(box.upper()<=srcs[t]->extent().upper())); } -} - - - -template<int D> -void generic_data<D> -::interpolate_from (const generic_data* src1, const int t1, - const generic_data* src2, const int t2, - const ibbox& box, const int t) -{ - assert (has_storage() && src1->has_storage() && src2->has_storage()); - assert (all(box.lower()>=extent().lower() - && box.upper()<=extent().upper())); - assert (all(box.lower()>=extent().lower() - && box.lower()>=src1->extent().lower() - && box.lower()>=src2->extent().lower())); - assert (all(box.upper()<=extent().upper() - && box.upper()<=src1->extent().upper() - && box.upper()<=src2->extent().upper())); - assert (all(box.stride()==extent().stride())); - assert (all((box.lower()-extent().lower())%box.stride() == 0 - && (box.lower()-src1->extent().lower())%box.stride() == 0 - && (box.lower()-src2->extent().lower())%box.stride() == 0)); - assert (src1->proc() == src2->proc()); - if (proc() == src1->proc()) { + if (proc() == srcs[0]->proc()) { // interpolate on same processor int rank; MPI_Comm_rank (dist::comm, &rank); if (rank == proc()) { - interpolate_from_innerloop (src1, t1, src2, t2, box, t); + interpolate_from_innerloop (srcs, tls, box, tl, order_space); } } else { // interpolate from other processor generic_data* const tmp = make_typed(); - tmp->allocate (box, src1->proc()); - tmp->interpolate_from (src1, t1, src2, t2, box, t); + tmp->allocate (box, srcs[0]->proc()); + tmp->interpolate_from (srcs, tls, box, tl, order_space); tmp->change_processor (proc()); copy_from (tmp, box); delete tmp; |