Index: Array/Array.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Array/Array.h,v retrieving revision 1.139 diff -c -p -r1.139 Array.h *** Array/Array.h 2001/04/20 21:16:23 1.139 --- Array/Array.h 2001/05/11 02:37:11 *************** *** 29,34 **** --- 29,35 ---- //----------------------------------------------------------------------------- // Classes: // Array + // View0 // View[1-7] // LeafFunctor // LeafFunctor > *************** public: *** 1763,1773 **** inline Domain_t domain() const { return engine_m.domain(); - } - - inline Domain_t innerDomain() const - { - return engine_m.innerDomain(); } inline Domain_t physicalDomain() const --- 1764,1769 ---- Index: Engine/CompressibleBlock.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Engine/CompressibleBlock.h,v retrieving revision 1.27 diff -c -p -r1.27 CompressibleBlock.h *** Engine/CompressibleBlock.h 2000/07/11 22:13:00 1.27 --- Engine/CompressibleBlock.h 2001/05/11 02:37:13 *************** private: *** 531,541 **** CompressibleBlockController(const CompressibleBlockController& model) : Observable(ptr_m), - size_m(model.size_m), compressible_m(!Pooma::neverCompress()), dataObject_m(model.dataObject_m.affinity()), ! ucOffset_m(model.ucOffset_m), ! viewcount_m(0) { // Lock the model while we get information pertaining to it // being compressed or not (such data can't be initialized in --- 531,541 ---- CompressibleBlockController(const CompressibleBlockController& model) : Observable(ptr_m), compressible_m(!Pooma::neverCompress()), + viewcount_m(0), dataObject_m(model.dataObject_m.affinity()), ! size_m(model.size_m), ! ucOffset_m(model.ucOffset_m) { // Lock the model while we get information pertaining to it // being compressed or not (such data can't be initialized in Index: Engine/CompressibleBrick.cpp =================================================================== RCS file: /home/pooma/Repository/r2/src/Engine/CompressibleBrick.cpp,v retrieving revision 1.24 diff -c -p -r1.24 CompressibleBrick.cpp *** Engine/CompressibleBrick.cpp 2000/07/11 23:06:40 1.24 --- Engine/CompressibleBrick.cpp 2001/05/11 02:37:13 *************** Engine(const Engine & makeOwnCopy() + // + // Causes the CompressibleBrickView-Engine to obtain a private copy of the data + // that it refers to. + // + //----------------------------------------------------------------------------- + + template + Engine &Engine::makeOwnCopy() + { + // JIM: This is probably not thread safe??? + // There is a race from checking isShared to getting into cblock's + // makeOwnCopy, which is thread safe. As a result, this should only + // be called after a blockAndEvaluate() to ensure that nobody else + // is messing with the underlying CBC while this is + // occuring. (Logically, this is necessary anyway since you probably + // want a copy of the data that results from all previous + // computations having taken place.) Also, as mentioned elsewhere, + // the current implementation results in copying uncompressed data + // in the parse thread, which will result in incorrect memory + // affinity. + + if (cblock_m.isControllerValidUnlocked() && cblock_m.isShared()) + { + cblock_m.detach(this); + cblock_m.makeOwnCopy(); + cblock_m.attach(this); + + data0_m = cblock_m.data() + (cblock_m.compressed() ? 0 : baseOffset()); + } + + return *this; + } + + //----------------------------------------------------------------------------- + // // Engine:: // elementsCompressed() const // Index: Engine/CompressibleBrick.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Engine/CompressibleBrick.h,v retrieving revision 1.67 diff -c -p -r1.67 CompressibleBrick.h *** Engine/CompressibleBrick.h 2000/07/11 23:06:40 1.67 --- Engine/CompressibleBrick.h 2001/05/11 02:37:14 *************** public: *** 237,242 **** --- 237,250 ---- inline Layout_t layout() const { return Layout_t(domain_m); } + //--------------------------------------------------------------------------- + // Return the domain and base domain. + + inline const Domain_t &domain() const + { + return layout().domain(); + } + // Get a private copy of data viewed by this Engine. Engine_t &makeOwnCopy(); *************** public: *** 557,562 **** --- 565,582 ---- ElementRef_t operator()(const Loc &) const; Element_t read(const Loc &) const; + //--------------------------------------------------------------------------- + // Return the domain and base domain. + + inline const Domain_t &domain() const + { + return Layout_t(domain_m).domain(); + } + + // Get a private copy of data viewed by this Engine. + + Engine_t &makeOwnCopy(); + // Return the block controller (uncompressed). // See comments in CompressibleBrick above. *************** struct NewEngine struct ElementProperties > : public MakeOwnCopyProperties > + { }; + + template + struct ElementProperties > + : public MakeOwnCopyProperties > { }; Index: Layout/Node.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Layout/Node.h,v retrieving revision 1.35 diff -c -p -r1.35 Node.h *** Layout/Node.h 2001/05/04 15:41:28 1.35 --- Layout/Node.h 2001/05/11 02:37:15 *************** public: *** 121,128 **** Node(const Domain_t &owned, const AllocatedDomain_t &allocated, Context_t c, ID_t gid, ID_t lid = (-1)) : domain_m(owned), allocated_m(allocated), ! context_m(c), global_m(gid), local_m(lid), ! affinity_m(-1) { PAssert(owned.size() >= 0); PAssert(allocated.size() >= 0); --- 121,128 ---- Node(const Domain_t &owned, const AllocatedDomain_t &allocated, Context_t c, ID_t gid, ID_t lid = (-1)) : domain_m(owned), allocated_m(allocated), ! local_m(lid), global_m(gid), ! context_m(c), affinity_m(-1) { PAssert(owned.size() >= 0); PAssert(allocated.size() >= 0); *************** public: *** 130,137 **** } Node(const Domain_t &d, Context_t c, ID_t gid, ID_t lid = (-1)) ! : domain_m(d), allocated_m(d), context_m(c), global_m(gid), local_m(lid), ! affinity_m(-1) { PAssert(d.size() >= 0); PAssert(gid >= 0); --- 130,138 ---- } Node(const Domain_t &d, Context_t c, ID_t gid, ID_t lid = (-1)) ! : domain_m(d), allocated_m(d), ! local_m(lid), global_m(gid), ! context_m(c), affinity_m(-1) { PAssert(d.size() >= 0); PAssert(gid >= 0); *************** public: *** 152,159 **** Node(int affinity, const Domain_t &d, Context_t c, ID_t gid, ID_t lid = (-1)) ! : domain_m(d), allocated_m(d), context_m(c), global_m(gid), local_m(lid), ! affinity_m(affinity) { PAssert(d.size() >= 0); PAssert(gid >= 0); --- 153,161 ---- Node(int affinity, const Domain_t &d, Context_t c, ID_t gid, ID_t lid = (-1)) ! : domain_m(d), allocated_m(d), ! local_m(lid), global_m(gid), ! context_m(c), affinity_m(affinity) { PAssert(d.size() >= 0); PAssert(gid >= 0); *************** public: *** 172,180 **** template Node(const Node &n) ! : domain_m(n.domain()), context_m(n.context()), allocated_m(n.allocated()), ! global_m(n.globalID()), local_m(n.localID()), ! affinity_m(n.affinity()) { } --- 174,182 ---- template Node(const Node &n) ! : domain_m(n.domain()), allocated_m(n.allocated()), ! local_m(n.localID()), global_m(n.globalID()), ! context_m(n.context()), affinity_m(n.affinity()) { } Index: NewField/FieldEngine/FieldEngine.NoGeometry.h =================================================================== RCS file: /home/pooma/Repository/r2/src/NewField/FieldEngine/FieldEngine.NoGeometry.h,v retrieving revision 1.4 diff -c -p -r1.4 FieldEngine.NoGeometry.h *** NewField/FieldEngine/FieldEngine.NoGeometry.h 2001/04/10 23:13:25 1.4 --- NewField/FieldEngine/FieldEngine.NoGeometry.h 2001/05/11 02:37:15 *************** public: *** 254,267 **** // This field-engine always has vert-centering and the total domain is // given by the engine. ! inline const Domain_t &physicalCellDomain() const { ! return shrink(physicalDomain(), 1); } inline Domain_t totalCellDomain() const { ! return shrink(engine_m.domain(), 1); } Domain_t physicalDomain() const --- 254,267 ---- // This field-engine always has vert-centering and the total domain is // given by the engine. ! inline const Domain_t physicalCellDomain() const { ! return shrinkRight(physicalDomain(), 1); } inline Domain_t totalCellDomain() const { ! return shrinkRight(engine_m.domain(), 1); } Domain_t physicalDomain() const