diff options
-rw-r--r-- | Carpet/Carpet/src/carpet.cc | 8 | ||||
-rw-r--r-- | Carpet/CarpetLib/src/bbox.hh | 9 | ||||
-rw-r--r-- | Carpet/CarpetLib/src/data.cc | 74 | ||||
-rw-r--r-- | Carpet/CarpetLib/src/gdata.hh | 10 | ||||
-rw-r--r-- | Carpet/CarpetLib/src/ggf.cc | 7 |
5 files changed, 55 insertions, 53 deletions
diff --git a/Carpet/Carpet/src/carpet.cc b/Carpet/Carpet/src/carpet.cc index 1ebb4a70d..e1fee926c 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.9 2001/03/13 17:40:30 eschnett Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Attic/carpet.cc,v 1.10 2001/03/14 11:00:17 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.9 2001/03/13 17:40:30 eschnett Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Attic/carpet.cc,v 1.10 2001/03/14 11:00:17 eschnett Exp $"; @@ -931,8 +931,8 @@ namespace Carpet { abort(); } - // The return value seems to be 1 (success) no matter whether - // storage has actually been disabled. + // The return values seems to be whether storage was enabled + // previously, and not whether storage is enabled now. return retval; } diff --git a/Carpet/CarpetLib/src/bbox.hh b/Carpet/CarpetLib/src/bbox.hh index 14aeb7895..db43519b4 100644 --- a/Carpet/CarpetLib/src/bbox.hh +++ b/Carpet/CarpetLib/src/bbox.hh @@ -5,7 +5,7 @@ copyright : (C) 2000 by Erik Schnetter email : schnetter@astro.psu.edu - $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/bbox.hh,v 1.5 2001/03/12 16:54:25 eschnett Exp $ + $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/bbox.hh,v 1.6 2001/03/14 11:00:26 eschnett Exp $ ***************************************************************************/ @@ -54,9 +54,10 @@ public: const vect<T,D>& stride); // Accessors - const vect<T,D>& lower () const { return _lower; } - const vect<T,D>& upper () const { return _upper; } - const vect<T,D>& stride () const { return _stride; } + // (Don't return references; *this might be a temporary) + vect<T,D> lower () const { return _lower; } + vect<T,D> upper () const { return _upper; } + vect<T,D> stride () const { return _stride; } vect<T,D> shape () const { return _upper - _lower + _stride; } bool empty() const { diff --git a/Carpet/CarpetLib/src/data.cc b/Carpet/CarpetLib/src/data.cc index b2c190865..683139ebe 100644 --- a/Carpet/CarpetLib/src/data.cc +++ b/Carpet/CarpetLib/src/data.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/data.cc,v 1.4 2001/03/10 20:55:06 eschnett Exp $ + $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/data.cc,v 1.5 2001/03/14 11:00:26 eschnett Exp $ ***************************************************************************/ @@ -60,6 +60,8 @@ data<T,D>* data<T,D>::make_typed () const { return new data(); } + + // Storage management template<class T, int D> void data<T,D>::allocate (const ibbox& extent, const int proc, @@ -68,7 +70,7 @@ void data<T,D>::allocate (const ibbox& extent, const int proc, _has_storage = true; // data _extent = extent; - _shape = _extent.shape() / _extent.stride(); + _shape = max(ivect(0), _extent.shape() / _extent.stride()); _size = 1; for (int d=0; d<D; ++d) { _stride[d] = _size; @@ -79,7 +81,7 @@ void data<T,D>::allocate (const ibbox& extent, const int proc, MPI_Comm_rank (dist::comm, &rank); if (rank==_proc) { _owns_storage = !mem; - if (!mem) { + if (_owns_storage) { _storage = new T[_size]; } else { _storage = (T*)mem; @@ -104,8 +106,9 @@ void data<T,D>::transfer_from (generic_data<D>* gsrc) { *src = data(); } -// Processor management + +// Processor management template<class T, int D> void data<T,D>::change_processor (const int newproc, void* const mem=0) { if (newproc == _proc) { @@ -121,7 +124,7 @@ void data<T,D>::change_processor (const int newproc, void* const mem=0) { assert (!_storage); _owns_storage = !mem; - if (!mem) { + if (_owns_storage) { _storage = new T[_size]; } else { _storage = (T*)mem; @@ -155,11 +158,13 @@ void data<T,D>::change_processor (const int newproc, void* const mem=0) { _proc = newproc; } + + // Data manipulators template<class T, int D> void data<T,D>::copy_from (const generic_data<D>* gsrc, const ibbox& box) { const data* src = (const data*)gsrc; - assert (_has_storage && src->_has_storage); + assert (has_storage() && src->has_storage()); assert (all(box.lower()>=extent().lower() && box.lower()>=src->extent().lower())); assert (all(box.upper()<=extent().upper() @@ -168,14 +173,14 @@ void data<T,D>::copy_from (const generic_data<D>* gsrc, const ibbox& box) { && box.stride()==src->extent().stride())); assert (all((box.lower()-extent().lower())%box.stride() == 0 && (box.lower()-src->extent().lower())%box.stride() == 0)); - - if (_proc == src->_proc) { + + if (proc() == src->proc()) { // copy on same processor - + int rank; MPI_Comm_rank (dist::comm, &rank); - if (rank == _proc) { - + if (rank == proc()) { + for (ibbox::iterator it=box.begin(); it!=box.end(); ++it) { const ivect index = *it; (*this)[index] = (*src)[index]; @@ -186,7 +191,7 @@ void data<T,D>::copy_from (const generic_data<D>* gsrc, const ibbox& box) { } else { // copy to different processor - data* const tmp = new data(box, src->_proc); + data* const tmp = new data(box, src->proc()); tmp->copy_from (src, box); tmp->change_processor (_proc); copy_from (tmp, box); @@ -200,7 +205,7 @@ void data<T,D>::interpolate_from (const generic_data<D>* gsrc, const ibbox& box) { const data* src = (const data*)gsrc; - assert (_has_storage && src->_has_storage); + assert (has_storage() && src->has_storage()); assert (all(box.lower()>=extent().lower() && box.upper()<=extent().upper())); assert (all(box.lower()>=extent().lower() @@ -211,14 +216,14 @@ void data<T,D>::interpolate_from (const generic_data<D>* gsrc, /* && box.stride()<=src->extent().stride() */ )); assert (all((box.lower()-extent().lower())%box.stride() == 0 /* && (box.lower()-src->extent().lower())%box.stride() == 0 */ )); - - if (_proc == src->_proc) { + + if (proc() == src->proc()) { // interpolate on same processor int rank; MPI_Comm_rank (dist::comm, &rank); - if (rank == _proc) { - + if (rank == proc()) { + for (ibbox::iterator posi=box.begin(); posi!=box.end(); ++posi) { const ivect& pos = *posi; @@ -248,9 +253,9 @@ void data<T,D>::interpolate_from (const generic_data<D>* gsrc, } else { // interpolate from other processor - data* const tmp = new data(box, src->_proc); + data* const tmp = new data(box, src->proc()); tmp->interpolate_from (src, box); - tmp->change_processor (_proc); + tmp->change_processor (proc()); copy_from (tmp, box); delete tmp; @@ -266,7 +271,7 @@ void data<T,D>::interpolate_from (const generic_data<D>* gsrc, { const data* src = (const data*)gsrc; const data* trc = (const data*)gtrc; - assert (_has_storage && src->_has_storage && trc->_has_storage); + assert (has_storage() && src->has_storage() && trc->has_storage()); assert (all(box.lower()>=extent().lower() && box.upper()<=extent().upper())); assert (all(box.lower()>=extent().lower() @@ -281,21 +286,22 @@ void data<T,D>::interpolate_from (const generic_data<D>* gsrc, assert (all((box.lower()-extent().lower())%box.stride() == 0 && (box.lower()-src->extent().lower())%box.stride() == 0 && (box.lower()-trc->extent().lower())%box.stride() == 0)); - - if (_proc == src->_proc && _proc == trc->_proc) { + assert (src->proc() == trc->proc()); + + if (proc() == src->proc()) { // interpolate on same processor int rank; MPI_Comm_rank (dist::comm, &rank); - if (rank == _proc) { - + if (rank == proc()) { + for (ibbox::iterator posi=box.begin(); posi!=box.end(); ++posi) { const ivect& pos = *posi; - + // get box around current position const ibbox frombox = ibbox(pos,pos,extent().stride()).expanded_for(src->extent()); - + // interpolate from box to position T src_sum = 0; T trc_sum = 0; @@ -314,18 +320,16 @@ void data<T,D>::interpolate_from (const generic_data<D>* gsrc, (*this)[pos] = (T)sfact * src_sum + (T)tfact * trc_sum; } // for pos - + } } else { - // interpolate from other processors - - data* const smp = new data(box, src->_proc); - smp->copy_from (src, box); - data* const tmp = new data(box, trc->_proc); - tmp->copy_from (trc, box); - interpolate_from (smp, sfact, tmp, tfact, box); - delete smp; + // interpolate from other processor + + data* const tmp = new data(box, src->proc()); + tmp->interpolate_from (src, sfact, trc, tfact, box); + tmp->change_processor (proc()); + copy_from (tmp, box); delete tmp; } diff --git a/Carpet/CarpetLib/src/gdata.hh b/Carpet/CarpetLib/src/gdata.hh index 4e77071d1..e765cc7c6 100644 --- a/Carpet/CarpetLib/src/gdata.hh +++ b/Carpet/CarpetLib/src/gdata.hh @@ -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.hh,v 1.3 2001/03/10 20:55:06 eschnett Exp $ + $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gdata.hh,v 1.4 2001/03/14 11:00:26 eschnett Exp $ ***************************************************************************/ @@ -96,12 +96,12 @@ public: virtual void* storage () = 0; - ivect shape () const { + const ivect& shape () const { assert (_has_storage); return _shape; } - ivect stride () const { + const ivect& stride () const { assert (_has_storage); return _stride; } @@ -116,7 +116,7 @@ public: return _proc; } - ibbox extent () const { + const ibbox& extent () const { assert (_has_storage); return _extent; } @@ -138,7 +138,7 @@ public: virtual void interpolate_from (const generic_data* src, const double sfact, const generic_data* trc, const double tfact, const ibbox& box) = 0; - + // Output template<int DD> void write_ascii (const string name, const int time, diff --git a/Carpet/CarpetLib/src/ggf.cc b/Carpet/CarpetLib/src/ggf.cc index b8948dc3f..1d0371ac4 100644 --- a/Carpet/CarpetLib/src/ggf.cc +++ b/Carpet/CarpetLib/src/ggf.cc @@ -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.cc,v 1.3 2001/03/12 16:54:25 eschnett Exp $ + $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/ggf.cc,v 1.4 2001/03/14 11:00:26 eschnett Exp $ ***************************************************************************/ @@ -165,9 +165,6 @@ void generic_gf<D>::copycat (int tl1, int rl1, int c1, int ml1, assert (rl1>=0 && rl1<h.reflevels()); assert (c1>=0 && c1<h.components(rl1)); assert (ml1>=0 && ml1<h.mglevels(rl1,c1)); -#if 0 - cout << "copycat tmin " << tmin << " tmax " << tmax << endl; -#endif assert (tl2>=tmin && tl2<=tmax); assert (rl2>=0 && rl2<h.reflevels()); const int c2=c1; @@ -358,7 +355,7 @@ void generic_gf<D>::ref_bnd_prolongate (int tl, int rl, int c, int ml) { assert (rl>=1); double time = (t.time(tl,rl,ml) - t.get_time(rl-1,ml)) / (double)t.get_delta(rl-1, ml); - const int tl2 = (int)floor(time); + const int tl2 = (int)floor(time + 1e-6); assert (tl2>=tmin && tl2<=tmax); if (time==tl2) { copycat (tl ,rl ,c,ml, &dh<D>::dboxes::recv_ref_bnd_coarse, |