DynamicList changes.

- setSize() adjusts the addressable length only.
  Changed setSize(label) usage to setCapacity(label) or reserve(label)
  throughout. The final name (capacity vs. storageSize() vs. whatever) can
  easily be decided at a later date.
- added setSize(label, const T&), which may still not be really useful, but
  is at least now meaningful
- made shrink() a bit more legible.
- added append(UList<T>&)
- copying from a UList avoids reallocations where possible

The following bits of code continue to use the DynamicList::setSize(), but
appear to be legitimate (or the corresponding code itself needs rethinking).

  src/OpenFOAM/meshes/primitiveMesh/primitiveMeshPointCells.C:167: error: within this context
  src/OpenFOAM/lnInclude/faceTemplates.C:44: error: within this context
  src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatCore.C:178: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:737: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:741: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:745: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:749: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:754: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:935: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:940: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:1041: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:1046: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2161: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2162: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2201: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2205: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2261: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2262: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2263: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2264: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:2265: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:3011: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:3076: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:3244: error: within this context
  src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C:3371: error: within this context
  src/dynamicMesh/meshCut/cellLooper/topoCellLooper.C:73: error: within this context
  src/dynamicMesh/meshCut/cellLooper/topoCellLooper.C:91: error: within this context
  src/dynamicMesh/meshCut/cellLooper/topoCellLooper.C:73: error: within this context
  src/dynamicMesh/meshCut/cellLooper/topoCellLooper.C:91: error: within this context
This commit is contained in:
Mark Olesen 2008-11-24 17:22:37 +01:00
parent b7e349a727
commit 41bbcb6337
25 changed files with 263 additions and 237 deletions

View File

@ -43,11 +43,11 @@ int main(int argc, char *argv[])
ldl[0](3) = 3;
ldl[0](1) = 1;
ldl[0].allocSize(5); // increase allocated size
ldl[1].allocSize(10); // increase allocated size
ldl[0].reserve(15); // should increase allocated size
ldl[1].reserve(5); // should not decrease allocated size
ldl[1](3) = 2; // allocates space and sets value
ldl[0].setCapacity(5); // increase allocated size
ldl[1].setCapacity(10); // increase allocated size
ldl[0].reserve(15); // should increase allocated size
ldl[1].reserve(5); // should not decrease allocated size
ldl[1](3) = 2; // allocates space and sets value
// this works without a segfault, but doesn't change the list size
ldl[0][4] = 4;
@ -57,7 +57,7 @@ int main(int argc, char *argv[])
Info<< "<ldl>" << ldl << "</ldl>" << nl << "sizes: ";
forAll(ldl, i)
{
Info<< " " << ldl[i].size() << "/" << ldl[i].allocSize();
Info<< " " << ldl[i].size() << "/" << ldl[i].capacity();
}
Info<< endl;
@ -68,7 +68,7 @@ int main(int argc, char *argv[])
Info<< "<ldl>" << ldl << "</ldl>" << nl << "sizes: ";
forAll(ldl, i)
{
Info<< " " << ldl[i].size() << "/" << ldl[i].allocSize();
Info<< " " << ldl[i].size() << "/" << ldl[i].capacity();
}
Info<< endl;
@ -83,10 +83,10 @@ int main(int argc, char *argv[])
{
dlA.append(i);
}
dlA.allocSize(10);
dlA.setCapacity(10);
Info<< "<dlA>" << dlA << "</dlA>" << nl << "sizes: "
<< " " << dlA.size() << "/" << dlA.allocSize() << endl;
<< " " << dlA.size() << "/" << dlA.capacity() << endl;
dlB.transfer(dlA);
@ -96,9 +96,9 @@ int main(int argc, char *argv[])
Info<< "Transferred to dlB" << endl;
Info<< "<dlA>" << dlA << "</dlA>" << nl << "sizes: "
<< " " << dlA.size() << "/" << dlA.allocSize() << endl;
<< " " << dlA.size() << "/" << dlA.capacity() << endl;
Info<< "<dlB>" << dlB << "</dlB>" << nl << "sizes: "
<< " " << dlB.size() << "/" << dlB.allocSize() << endl;
<< " " << dlB.size() << "/" << dlB.capacity() << endl;
// try with a normal list:
List<label> lstA;
@ -107,7 +107,34 @@ int main(int argc, char *argv[])
Info<< "<lstA>" << lstA << "</lstA>" << nl << "sizes: "
<< " " << lstA.size() << endl;
Info<< "<dlB>" << dlB << "</dlB>" << nl << "sizes: "
<< " " << dlB.size() << "/" << dlB.allocSize() << endl;
<< " " << dlB.size() << "/" << dlB.capacity() << endl;
// Copy back and append a few time
for (label i=0; i < 3; i++)
{
dlB.append(lstA);
}
Info<< "appended list a few times" << endl;
Info<< "<dlB>" << dlB << "</dlB>" << nl << "sizes: "
<< " " << dlB.size() << "/" << dlB.capacity() << endl;
// assign the list (should maintain allocated space)
dlB = lstA;
Info<< "assigned list" << endl;
Info<< "<dlB>" << dlB << "</dlB>" << nl << "sizes: "
<< " " << dlB.size() << "/" << dlB.capacity() << endl;
// dlB.append(dlB);
// Info<< "appended to itself:" << endl;
// Info<< "<dlB>" << dlB << "</dlB>" << nl << "sizes: "
// << " " << dlB.size() << "/" << dlB.capacity() << endl;
// dlB = dlB;
// Info<< "self assignment:" << endl;
// Info<< "<dlB>" << dlB << "</dlB>" << nl << "sizes: "
// << " " << dlB.size() << "/" << dlB.capacity() << endl;
return 0;
}

View File

@ -108,13 +108,13 @@ int main(int argc, char *argv[])
face f1(dl);
face f2(xferCopy<labelList>(dl));
Info<< "dl[" << dl.size() << "/" << dl.allocSize() << "] " << dl << endl;
Info<< "dl[" << dl.size() << "/" << dl.capacity() << "] " << dl << endl;
Info<< "f1: " << f1 << endl;
Info<< "f2: " << f2 << endl;
// note: using xferMoveTo to ensure the correct transfer() method is called
face f3( xferMoveTo<labelList>(dl) );
Info<< "dl[" << dl.size() << "/" << dl.allocSize() << "] " << dl << endl;
Info<< "dl[" << dl.size() << "/" << dl.capacity() << "] " << dl << endl;
Info<< "f3: " << f3 << endl;
return 0;

View File

@ -144,7 +144,7 @@ Foam::mergePolyMesh::mergePolyMesh(const IOobject& io)
wordList curPointZoneNames = pointZones().names();
if (curPointZoneNames.size() > 0)
{
pointZoneNames_.setSize(2*curPointZoneNames.size());
pointZoneNames_.setCapacity(2*curPointZoneNames.size());
}
forAll (curPointZoneNames, zoneI)
@ -157,7 +157,7 @@ Foam::mergePolyMesh::mergePolyMesh(const IOobject& io)
if (curFaceZoneNames.size() > 0)
{
faceZoneNames_.setSize(2*curFaceZoneNames.size());
faceZoneNames_.setCapacity(2*curFaceZoneNames.size());
}
forAll (curFaceZoneNames, zoneI)
{
@ -169,7 +169,7 @@ Foam::mergePolyMesh::mergePolyMesh(const IOobject& io)
if (curCellZoneNames.size() > 0)
{
cellZoneNames_.setSize(2*curCellZoneNames.size());
cellZoneNames_.setCapacity(2*curCellZoneNames.size());
}
forAll (curCellZoneNames, zoneI)
{

View File

@ -354,7 +354,7 @@ bool domainDecomposition::writeDecomposition()
// Estimate size
forAll(zonePoints, zoneI)
{
zonePoints[zoneI].setSize(pz[zoneI].size() / nProcs_);
zonePoints[zoneI].setCapacity(pz[zoneI].size() / nProcs_);
}
// Use the pointToZone map to find out the single zone (if any),
@ -423,8 +423,8 @@ bool domainDecomposition::writeDecomposition()
{
label procSize = fz[zoneI].size() / nProcs_;
zoneFaces[zoneI].setSize(procSize);
zoneFaceFlips[zoneI].setSize(procSize);
zoneFaces[zoneI].setCapacity(procSize);
zoneFaceFlips[zoneI].setCapacity(procSize);
}
// Go through all the zoned faces and find out if they
@ -514,7 +514,7 @@ bool domainDecomposition::writeDecomposition()
// Estimate size
forAll(zoneCells, zoneI)
{
zoneCells[zoneI].setSize(cz[zoneI].size() / nProcs_);
zoneCells[zoneI].setCapacity(cz[zoneI].size() / nProcs_);
}
forAll (curCellLabels, celli)

View File

@ -40,11 +40,11 @@ Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::DynamicList(Istream& is)
template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
Foam::Ostream& Foam::operator<<
(
Foam::Ostream& os,
const Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>& DL
Ostream& os,
const DynamicList<T, SizeInc, SizeMult, SizeDiv>& lst
)
{
os << static_cast<const List<T>&>(DL);
os << static_cast<const List<T>&>(lst);
return os;
}
@ -52,12 +52,12 @@ Foam::Ostream& Foam::operator<<
template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
Foam::Istream& Foam::operator>>
(
Foam::Istream& is,
Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>& DL
Istream& is,
DynamicList<T, SizeInc, SizeMult, SizeDiv>& lst
)
{
is >> static_cast<List<T>&>(DL);
DL.allocSize_ = DL.List<T>::size();
is >> static_cast<List<T>&>(lst);
lst.allocSize_ = lst.List<T>::size();
return is;
}

View File

@ -86,9 +86,6 @@ class DynamicList
// Private Member Functions
// Disabled, since the usefulness and semantics are not quite clear
void setSize(const label, const T&);
public:
// Related types
@ -116,29 +113,27 @@ public:
// Access
//- Size of the underlying storage.
inline label allocSize() const;
inline label capacity() const;
// Edit
//- Alter the size of the underlying storage.
// The addressed size will be truncated if needed to fit, but will
// otherwise remain untouched.
inline void allocSize(const label);
// remain otherwise untouched.
// Use this or reserve() in combination with append().
inline void setCapacity(const label);
// CURRENT BEHAVIOUR
//- When the new size is greater than the addressed list size, the
// allocated list sizes is adjusted and the
// addressed size does not change.
// Otherwise the addressed list size is just reduced and the
// allocated size does not change.
//
// PROPOSED BEHAVIOUR
//- Alter the addressed list size.
// New space will be allocated if required.
// Use this to resize the list prior to using the operator[] for
// setting values (as per List usage).
inline void setSize(const label);
//- Alter the addressed list size and fill new space with a constant.
inline void setSize(const label, const T&);
//- Reserve allocation space for at least this size.
// Never shrinks the allocated size, use allocSize() for that.
// Never shrinks the allocated size, use setCapacity() for that.
inline void reserve(const label);
//- Clear the addressed list, i.e. set the size to zero.
@ -164,6 +159,9 @@ public:
//- Append an element at the end of the list
inline void append(const T& e);
//- Append a List at the end of this list
inline void append(const UList<T>&);
//- Remove and return the top element
inline T remove();
@ -174,7 +172,7 @@ public:
inline void operator=(const T&);
//- Assignment from List<T>. Also handles assignment from DynamicList.
inline void operator=(const List<T>&);
inline void operator=(const UList<T>&);
// IOstream operators

View File

@ -63,7 +63,7 @@ inline Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::DynamicList
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
inline Foam::label Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::allocSize()
inline Foam::label Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::capacity()
const
{
return allocSize_;
@ -71,7 +71,7 @@ const
template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::allocSize
inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::setCapacity
(
const label s
)
@ -79,13 +79,12 @@ inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::allocSize
label nextFree = List<T>::size();
allocSize_ = s;
// truncate addressed size too?
if (nextFree > allocSize_)
{
// truncate both allocated and addressed sizes
nextFree = allocSize_;
}
// adjust allocated size, and addressed size if necessary
List<T>::setSize(allocSize_);
List<T>::size(nextFree);
}
@ -102,7 +101,7 @@ inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::reserve
allocSize_ = max
(
s,
label(SizeMult*allocSize_/SizeDiv + SizeInc)
label(SizeInc + allocSize_ * SizeMult / SizeDiv)
);
// adjust allocated size, leave addressed size untouched
@ -119,33 +118,13 @@ inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::setSize
const label s
)
{
#if 1
// CURRENT BEHAVIOUR:
// slightly ambiguous about what size the list will actually get
// cannot increase the size of the addressed list (for compatibility
// with List), without automatically adjusting the allocated space!
label nextFree = List<T>::size();
if (s <= nextFree)
{
// adjust addressed size, leave allocated size untouched
nextFree = s;
}
else
{
// adjust allocated size, leave addressed size untouched
allocSize_ = s;
List<T>::setSize(allocSize_);
}
List<T>::size(nextFree);
#else
// allocate more space?
if (s > allocSize_)
{
allocSize_ = max
(
s,
label(SizeMult*allocSize_/SizeDiv + SizeInc)
label(SizeInc + allocSize_ * SizeMult / SizeDiv)
);
List<T>::setSize(allocSize_);
@ -153,7 +132,24 @@ inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::setSize
// adjust addressed size
List<T>::size(s);
#endif
}
template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::setSize
(
const label s,
const T& t
)
{
label nextFree = List<T>::size();
setSize(s);
// set new elements to constant value
while (nextFree < s)
{
this->operator[](nextFree++) = t;
}
}
@ -176,13 +172,15 @@ template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
inline Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>&
Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::shrink()
{
if (allocSize_ > List<T>::size())
label nextFree = List<T>::size();
if (allocSize_ > nextFree)
{
allocSize_ = List<T>::size();
// force re-allocation/copying in List<T>::setSize() by temporarily
// faking a larger list size that will be truncated
List<T>::size(allocSize_+1);
// use the full list when resizing
List<T>::size(allocSize_);
// the new size
allocSize_ = nextFree;
List<T>::setSize(allocSize_);
List<T>::size(nextFree);
}
return *this;
}
@ -213,9 +211,12 @@ Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::transfer
template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::append(const T& e)
inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::append
(
const T& e
)
{
// Work on copy free index since gets overwritten by setSize
// Work on copy free index since the size gets overwritten by setSize
label nextFree = List<T>::size();
reserve(nextFree+1);
@ -225,6 +226,32 @@ inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::append(const T& e)
}
template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::append
(
const UList<T>& lst
)
{
label nextFree = List<T>::size();
if (this == &lst)
{
FatalErrorIn
(
"DynamicList<T, SizeInc, SizeMult, SizeDiv>::append(UList<T>&)"
) << "attempted appending to self" << abort(FatalError);
}
reserve(nextFree + lst.size());
List<T>::size(nextFree + lst.size());
forAll(lst, elemI)
{
this->operator[](nextFree++) = lst[elemI];
}
}
template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
inline T Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::remove()
{
@ -270,21 +297,38 @@ inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::operator=
const T& t
)
{
List<T>::operator=(t);
UList<T>::operator=(t);
}
template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
inline void Foam::DynamicList<T, SizeInc, SizeMult, SizeDiv>::operator=
(
const List<T>& lst
const UList<T>& lst
)
{
// make the entire storage available for the copy operation:
List<T>::size(allocSize_);
if (this == &lst)
{
FatalErrorIn
(
"DynamicList<T, SizeInc, SizeMult, SizeDiv>::operator=(UList<T>&)"
) << "attempted assignment to self" << abort(FatalError);
}
List<T>::operator=(lst);
allocSize_ = List<T>::size();
if (allocSize_ >= lst.size())
{
// can copy without reallocation, match sizes to avoid reallocation
List<T>::size(lst.size());
List<T>::operator=(lst);
}
else
{
// make the entire storage available for the copy operation
List<T>::size(allocSize_);
List<T>::operator=(lst);
allocSize_ = List<T>::size();
}
}

View File

@ -50,14 +50,14 @@ inline Foam::UList<T>::UList(T* __restrict__ v, label size)
template<class T>
inline Foam::label Foam::UList<T>::fcIndex(const label i) const
{
return (i == size()-1 ? 0 : i+1);
return (i == size()-1 ? 0 : i+1);
}
template<class T>
inline Foam::label Foam::UList<T>::rcIndex(const label i) const
{
return (i == 0 ? size()-1 : i-1);
return (i == 0 ? size()-1 : i-1);
}

View File

@ -45,7 +45,7 @@ void Foam::UList<T>::writeEntry(Ostream& os) const
{
os << word("List<" + word(pTraits<T>::typeName) + '>') << " ";
}
os << *this;
}

View File

@ -40,8 +40,8 @@ Foam::label Foam::face::triangles
label quadI = 0;
faceList quadFaces;
// adjusts the addressable size (and allocate space if needed)
triFaces(triI + nTriangles());
// adjust the addressable size (and allocate space if needed)
triFaces.setSize(triI + nTriangles());
return split(SPLITTRIANGLE, points, triI, quadI, triFaces, quadFaces);
}

View File

@ -27,14 +27,9 @@ License
#include "primitiveMesh.H"
#include "ListOps.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
const labelListList& primitiveMesh::cellPoints() const
const Foam::labelListList& Foam::primitiveMesh::cellPoints() const
{
if (!cpPtr_)
{
@ -56,12 +51,12 @@ const labelListList& primitiveMesh::cellPoints() const
cpPtr_ = new labelListList(nCells());
invertManyToMany(nCells(), pointCells(), *cpPtr_);
}
return *cpPtr_;
}
const labelList& primitiveMesh::cellPoints
const Foam::labelList& Foam::primitiveMesh::cellPoints
(
const label cellI,
DynamicList<label>& storage
@ -84,14 +79,14 @@ const labelList& primitiveMesh::cellPoints
forAll(f, fp)
{
labelSet_.insert(f[fp]);
labelSet_.insert(f[fp]);
}
}
storage.clear();
if (labelSet_.size() > storage.allocSize())
if (labelSet_.size() > storage.capacity())
{
storage.setSize(labelSet_.size());
storage.setCapacity(labelSet_.size());
}
forAllConstIter(labelHashSet, labelSet_, iter)
@ -104,7 +99,7 @@ const labelList& primitiveMesh::cellPoints
}
const labelList& primitiveMesh::cellPoints(const label cellI) const
const Foam::labelList& Foam::primitiveMesh::cellPoints(const label cellI) const
{
return cellPoints(cellI, labels_);
}
@ -112,6 +107,4 @@ const labelList& primitiveMesh::cellPoints(const label cellI) const
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View File

@ -30,15 +30,10 @@ License
#include "SortableList.H"
#include "ListOps.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
// Returns edgeI between two points.
Foam::label primitiveMesh::getEdge
Foam::label Foam::primitiveMesh::getEdge
(
List<DynamicList<label> >& pe,
DynamicList<edge>& es,
@ -76,7 +71,7 @@ Foam::label primitiveMesh::getEdge
}
void primitiveMesh::calcEdges(const bool doFaceEdges) const
void Foam::primitiveMesh::calcEdges(const bool doFaceEdges) const
{
if (debug)
{
@ -113,7 +108,7 @@ void primitiveMesh::calcEdges(const bool doFaceEdges) const
List<DynamicList<label> > pe(nPoints());
forAll(pe, pointI)
{
pe[pointI].setSize(primitiveMesh::edgesPerPoint_);
pe[pointI].setCapacity(primitiveMesh::edgesPerPoint_);
}
// Estimate edges storage
@ -337,7 +332,7 @@ void primitiveMesh::calcEdges(const bool doFaceEdges) const
oldToNew[edgeI] = internal0EdgeI++;
}
}
}
}
else
{
@ -460,8 +455,8 @@ void primitiveMesh::calcEdges(const bool doFaceEdges) const
}
label primitiveMesh::findFirstCommonElementFromSortedLists
(
Foam::label Foam::primitiveMesh::findFirstCommonElementFromSortedLists
(
const labelList& list1,
const labelList& list2
)
@ -494,7 +489,7 @@ label primitiveMesh::findFirstCommonElementFromSortedLists
"primitiveMesh::findFirstCommonElementFromSortedLists"
"(const labelList&, const labelList&)"
) << "No common elements in lists " << list1 << " and " << list2
<< abort(FatalError);
<< abort(FatalError);
}
return result;
}
@ -502,7 +497,7 @@ label primitiveMesh::findFirstCommonElementFromSortedLists
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
const edgeList& primitiveMesh::edges() const
const Foam::edgeList& Foam::primitiveMesh::edges() const
{
if (!edgesPtr_)
{
@ -513,7 +508,7 @@ const edgeList& primitiveMesh::edges() const
return *edgesPtr_;
}
const labelListList& primitiveMesh::pointEdges() const
const Foam::labelListList& Foam::primitiveMesh::pointEdges() const
{
if (!pePtr_)
{
@ -525,7 +520,7 @@ const labelListList& primitiveMesh::pointEdges() const
}
const labelListList& primitiveMesh::faceEdges() const
const Foam::labelListList& Foam::primitiveMesh::faceEdges() const
{
if (!fePtr_)
{
@ -576,7 +571,7 @@ const labelListList& primitiveMesh::faceEdges() const
}
void primitiveMesh::clearOutEdges()
void Foam::primitiveMesh::clearOutEdges()
{
deleteDemandDrivenData(edgesPtr_);
deleteDemandDrivenData(pePtr_);
@ -586,7 +581,7 @@ void primitiveMesh::clearOutEdges()
}
const labelList& primitiveMesh::faceEdges
const Foam::labelList& Foam::primitiveMesh::faceEdges
(
const label faceI,
DynamicList<label>& storage
@ -602,9 +597,9 @@ const labelList& primitiveMesh::faceEdges
const face& f = faces()[faceI];
storage.clear();
if (f.size() > storage.allocSize())
if (f.size() > storage.capacity())
{
storage.setSize(f.size());
storage.setCapacity(f.size());
}
forAll(f, fp)
@ -624,13 +619,13 @@ const labelList& primitiveMesh::faceEdges
}
const labelList& primitiveMesh::faceEdges(const label faceI) const
const Foam::labelList& Foam::primitiveMesh::faceEdges(const label faceI) const
{
return faceEdges(faceI, labels_);
}
const labelList& primitiveMesh::cellEdges
const Foam::labelList& Foam::primitiveMesh::cellEdges
(
const label cellI,
DynamicList<label>& storage
@ -652,15 +647,15 @@ const labelList& primitiveMesh::cellEdges
forAll(fe, feI)
{
labelSet_.insert(fe[feI]);
labelSet_.insert(fe[feI]);
}
}
storage.clear();
if (labelSet_.size() > storage.allocSize())
if (labelSet_.size() > storage.capacity())
{
storage.setSize(labelSet_.size());
storage.setCapacity(labelSet_.size());
}
forAllConstIter(labelHashSet, labelSet_, iter)
@ -673,7 +668,7 @@ const labelList& primitiveMesh::cellEdges
}
const labelList& primitiveMesh::cellEdges(const label cellI) const
const Foam::labelList& Foam::primitiveMesh::cellEdges(const label cellI) const
{
return cellEdges(cellI, labels_);;
}
@ -681,6 +676,4 @@ const labelList& primitiveMesh::cellEdges(const label cellI) const
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View File

@ -27,14 +27,9 @@ License
#include "primitiveMesh.H"
#include "cell.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
void primitiveMesh::calcPointCells() const
void Foam::primitiveMesh::calcPointCells() const
{
// Loop through cells and mark up points
@ -111,7 +106,7 @@ void primitiveMesh::calcPointCells() const
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
const labelListList& primitiveMesh::pointCells() const
const Foam::labelListList& Foam::primitiveMesh::pointCells() const
{
if (!pcPtr_)
{
@ -122,7 +117,7 @@ const labelListList& primitiveMesh::pointCells() const
}
const labelList& primitiveMesh::pointCells
const Foam::labelList& Foam::primitiveMesh::pointCells
(
const label pointI,
DynamicList<label>& storage
@ -155,26 +150,29 @@ const labelList& primitiveMesh::pointCells
}
// Filter duplicates
sort(storage);
label n = 1;
for (label i = 1; i < storage.size(); i++)
if (storage.size() > 1)
{
if (storage[i] != storage[i-1])
{
storage[n++] = storage[i];
}
}
sort(storage);
storage.setSize(n);
label n = 1;
for (label i = 1; i < storage.size(); i++)
{
if (storage[i-1] != storage[i])
{
storage[n++] = storage[i];
}
}
// truncate addressed list
storage.setSize(n);
}
return storage;
}
}
const labelList& primitiveMesh::pointCells(const label pointI) const
const Foam::labelList& Foam::primitiveMesh::pointCells(const label pointI) const
{
return pointCells(pointI, labels_);
}
@ -182,6 +180,4 @@ const labelList& primitiveMesh::pointCells(const label pointI) const
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View File

@ -26,14 +26,9 @@ License
#include "primitiveMesh.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
void primitiveMesh::calcPointPoints() const
void Foam::primitiveMesh::calcPointPoints() const
{
if (debug)
{
@ -94,7 +89,7 @@ void primitiveMesh::calcPointPoints() const
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
const labelListList& primitiveMesh::pointPoints() const
const Foam::labelListList& Foam::primitiveMesh::pointPoints() const
{
if (!ppPtr_)
{
@ -105,7 +100,7 @@ const labelListList& primitiveMesh::pointPoints() const
}
const labelList& primitiveMesh::pointPoints
const Foam::labelList& Foam::primitiveMesh::pointPoints
(
const label pointI,
DynamicList<label>& storage
@ -122,9 +117,9 @@ const labelList& primitiveMesh::pointPoints
storage.clear();
if (pEdges.size() > storage.allocSize())
if (pEdges.size() > storage.capacity())
{
storage.setSize(pEdges.size());
storage.setCapacity(pEdges.size());
}
forAll(pEdges, i)
@ -137,7 +132,10 @@ const labelList& primitiveMesh::pointPoints
}
const labelList& primitiveMesh::pointPoints(const label pointI) const
const Foam::labelList& Foam::primitiveMesh::pointPoints
(
const label pointI
) const
{
return pointPoints(pointI, labels_);
}
@ -145,6 +143,4 @@ const labelList& primitiveMesh::pointPoints(const label pointI) const
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View File

@ -236,13 +236,13 @@ Foam::labelList Foam::polyDualMesh::collectPatchSideFace
if (pointToDualPoint[meshPointI] >= 0)
{
// Number of pFaces + 2 boundary edge + feature point
dualFace.setSize(pFaces.size()+2+1);
dualFace.setCapacity(pFaces.size()+2+1);
// Store dualVertex for feature edge
dualFace.append(pointToDualPoint[meshPointI]);
}
else
{
dualFace.setSize(pFaces.size()+2);
dualFace.setCapacity(pFaces.size()+2);
}
// Store dual vertex for starting edge.
@ -958,13 +958,13 @@ void Foam::polyDualMesh::calcDual
if (edgeToDualPoint[edgeI] >= 0)
{
// Number of cells + 2 boundary faces + feature edge point
dualFace.setSize(mesh.edgeCells()[edgeI].size()+2+1);
dualFace.setCapacity(mesh.edgeCells()[edgeI].size()+2+1);
// Store dualVertex for feature edge
dualFace.append(edgeToDualPoint[edgeI]);
}
else
{
dualFace.setSize(mesh.edgeCells()[edgeI].size()+2);
dualFace.setCapacity(mesh.edgeCells()[edgeI].size()+2);
}
// Store dual vertex for starting face.

View File

@ -1250,7 +1250,7 @@ void Foam::boundaryMesh::patchify
forAll(patchFaces, newPatchI)
{
patchFaces[newPatchI].setSize(nAvgFaces);
patchFaces[newPatchI].setCapacity(nAvgFaces);
}
//

View File

@ -37,16 +37,11 @@ License
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(topoCellLooper, 0);
addToRunTimeSelectionTable(cellLooper, topoCellLooper, word);
defineTypeNameAndDebug(topoCellLooper, 0);
addToRunTimeSelectionTable(cellLooper, topoCellLooper, word);
}
// Angle for polys to be considered splitHexes.
@ -67,7 +62,7 @@ void Foam::topoCellLooper::subsetList
{
if (startI == 0)
{
// Truncate (setsize decides itself not to do anything if nothing
// Truncate (setSize decides itself not to do anything if nothing
// changed)
if (freeI < 0)
{
@ -228,7 +223,7 @@ Foam::labelList Foam::topoCellLooper::getSuperEdge
do
{
vertI = mesh().edges()[edgeI].otherVertex(vertI);
vertI = mesh().edges()[edgeI].otherVertex(vertI);
superVerts[superVertI++] = vertI;
@ -237,7 +232,7 @@ Foam::labelList Foam::topoCellLooper::getSuperEdge
edgeI = meshTools::otherEdge(mesh(), fEdges, edgeI, vertI);
}
while (!features.isFeaturePoint(prevEdgeI, edgeI));
superVerts.setSize(superVertI);
return superVerts;
@ -500,7 +495,7 @@ void Foam::topoCellLooper::walkSplitHex
nextEdgeI,
nextVertI
);
edgeI = nextEdgeI;
vertI = nextVertI;
}
@ -615,7 +610,7 @@ void Foam::topoCellLooper::walkSplitHex
labelList nextFaces =
getVertFacesNonEdge
(
cellI,
cellI,
edgeI,
vertI
);
@ -720,7 +715,7 @@ bool Foam::topoCellLooper::cut
if (mesh().cellShapes()[cellI].model() == hex_)
{
// Let parent handle hex case.
return
return
hexCellLooper::cut
(
refDir,
@ -752,7 +747,7 @@ bool Foam::topoCellLooper::cut
if (edgeI != -1)
{
// Found non-feature edge. Start walking from vertex on edge.
// Found non-feature edge. Start walking from vertex on edge.
vertI = mesh().edges()[edgeI].start();
}
else

View File

@ -47,7 +47,7 @@ void Foam::polyMeshAdder::append
DynamicList<label>& dynLst
)
{
dynLst.setSize(dynLst.size() + lst.size());
dynLst.setCapacity(dynLst.size() + lst.size());
forAll(lst, i)
{
@ -902,7 +902,7 @@ void Foam::polyMeshAdder::mergePointZones
List<DynamicList<label> >& pzPoints
)
{
zoneNames.setSize(pz0.size() + pz1.size());
zoneNames.setCapacity(pz0.size() + pz1.size());
// Names
append(pz0.names(), zoneNames);
@ -922,7 +922,7 @@ void Foam::polyMeshAdder::mergePointZones
{
DynamicList<label>& newZone = pzPoints[zoneI];
newZone.setSize(pz0[zoneI].size());
newZone.setCapacity(pz0[zoneI].size());
append(from0ToAllPoints, pz0[zoneI], newZone);
}
@ -933,7 +933,7 @@ void Foam::polyMeshAdder::mergePointZones
// Relabel all points of zone and add to correct pzPoints.
DynamicList<label>& newZone = pzPoints[from1ToAll[zoneI]];
newZone.setSize(newZone.size() + pz1[zoneI].size());
newZone.setCapacity(newZone.size() + pz1[zoneI].size());
append(from1ToAllPoints, pz1[zoneI], newZone);
}
@ -958,7 +958,7 @@ void Foam::polyMeshAdder::mergeFaceZones
List<DynamicList<bool> >& fzFlips
)
{
zoneNames.setSize(fz0.size() + fz1.size());
zoneNames.setCapacity(fz0.size() + fz1.size());
append(fz0.names(), zoneNames);
@ -979,8 +979,8 @@ void Foam::polyMeshAdder::mergeFaceZones
DynamicList<label>& newZone = fzFaces[zoneI];
DynamicList<bool>& newFlip = fzFlips[zoneI];
newZone.setSize(fz0[zoneI].size());
newFlip.setSize(newZone.size());
newZone.setCapacity(fz0[zoneI].size());
newFlip.setCapacity(newZone.size());
const labelList& addressing = fz0[zoneI];
const boolList& flipMap = fz0[zoneI].flipMap();
@ -1003,8 +1003,8 @@ void Foam::polyMeshAdder::mergeFaceZones
DynamicList<label>& newZone = fzFaces[from1ToAll[zoneI]];
DynamicList<bool>& newFlip = fzFlips[from1ToAll[zoneI]];
newZone.setSize(newZone.size() + fz1[zoneI].size());
newFlip.setSize(newZone.size());
newZone.setCapacity(newZone.size() + fz1[zoneI].size());
newFlip.setCapacity(newZone.size());
const labelList& addressing = fz1[zoneI];
const boolList& flipMap = fz1[zoneI].flipMap();
@ -1040,7 +1040,7 @@ void Foam::polyMeshAdder::mergeCellZones
List<DynamicList<label> >& czCells
)
{
zoneNames.setSize(cz0.size() + cz1.size());
zoneNames.setCapacity(cz0.size() + cz1.size());
append(cz0.names(), zoneNames);
@ -1056,7 +1056,7 @@ void Foam::polyMeshAdder::mergeCellZones
czCells.setSize(zoneNames.size());
forAll(cz0, zoneI)
{
czCells[zoneI].setSize(cz0[zoneI].size());
czCells[zoneI].setCapacity(cz0[zoneI].size());
// Insert mesh0 cells
append(cz0[zoneI], czCells[zoneI]);
}
@ -1067,7 +1067,7 @@ void Foam::polyMeshAdder::mergeCellZones
{
DynamicList<label>& newZone = czCells[from1ToAll[zoneI]];
newZone.setSize(newZone.size() + cz1[zoneI].size());
newZone.setCapacity(newZone.size() + cz1[zoneI].size());
append(from1ToAllCells, cz1[zoneI], newZone);
}

View File

@ -31,7 +31,7 @@ License
template<class T>
void Foam::polyMeshAdder::append(const List<T>& lst, DynamicList<T>& dynLst)
{
dynLst.setSize(dynLst.size() + lst.size());
dynLst.setCapacity(dynLst.size() + lst.size());
forAll(lst, i)
{

View File

@ -2432,8 +2432,8 @@ Foam::labelList Foam::hexRef8::consistentSlowRefinement
// Transfer into seedFaces, seedFacesInfo
seedFaces.setSize(changedFacesInfo.size());
seedFacesInfo.setSize(changedFacesInfo.size());
seedFaces.setCapacity(changedFacesInfo.size());
seedFacesInfo.setCapacity(changedFacesInfo.size());
forAllConstIter(Map<refinementData>, changedFacesInfo, iter)
{

View File

@ -726,7 +726,7 @@ void Foam::polyTopoChange::getFaceOrder
}
// Compact and reorder faces according to map.
// Reorder and compact faces according to map.
void Foam::polyTopoChange::reorderCompactFaces
(
const label newSize,
@ -2999,9 +2999,6 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::changeMesh
patchStarts,
syncParallel
);
// Invalidate new points to go into map.
newPoints.clear();
mesh.changing(true);
}
@ -3010,14 +3007,8 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::changeMesh
retiredPoints_.clear();
retiredPoints_.resize(0);
faces_.clear();
faces_.setSize(0);
region_.clear();
region_.setSize(0);
faceOwner_.clear();
faceOwner_.setSize(0);
faceNeighbour_.clear();
faceNeighbour_.setSize(0);
}
@ -3237,27 +3228,20 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::makeMesh
new fvMesh
(
io,
xferMove<pointField>(newPoints),
xferMove<faceList>(faces_),
xferMove<labelList>(faceOwner_),
xferMove<labelList>(faceNeighbour_)
xferMove(newPoints),
xferMoveTo<faceList>(faces_),
xferMoveTo<labelList>(faceOwner_),
xferMoveTo<labelList>(faceNeighbour_)
)
);
fvMesh& newMesh = newMeshPtr();
// Clear out primitives
{
newPoints.clear();
retiredPoints_.clear();
retiredPoints_.resize(0);
faces_.clear();
faces_.setSize(0);
region_.clear();
region_.setSize(0);
faceOwner_.clear();
faceOwner_.setSize(0);
faceNeighbour_.clear();
faceNeighbour_.setSize(0);
}

View File

@ -411,7 +411,7 @@ Foam::refinementHistory::refinementHistory
else
{
visibleCells_.setSize(nCells);
splitCells_.setSize(nCells);
splitCells_.setCapacity(nCells);
for (label cellI = 0; cellI < nCells; cellI++)
{

View File

@ -157,7 +157,7 @@ void indexedOctree<Type>::divide
List<DynamicList<label> > subIndices(8);
for (direction octant = 0; octant < subIndices.size(); octant++)
{
subIndices[octant].setSize(indices.size()/8);
subIndices[octant].setCapacity(indices.size()/8);
}
// Precalculate bounding boxes.

View File

@ -247,7 +247,7 @@ Foam::label Foam::surfaceFeatures::nextFeatEdge
// prevPointI. Marks feature edges visited in featVisited by assigning them
// the current feature line number. Returns cumulative length of edges walked.
// Works in one of two modes:
// - mark : step to edges with featVisited = -1.
// - mark : step to edges with featVisited = -1.
// Mark edges visited with currentFeatI.
// - clear : step to edges with featVisited = currentFeatI
// Mark edges visited with -2 and erase from feature edges.
@ -257,7 +257,7 @@ Foam::surfaceFeatures::labelScalar Foam::surfaceFeatures::walkSegment
const List<edgeStatus>& edgeStat,
const label startEdgeI,
const label startPointI,
const label currentFeatI,
const label currentFeatI,
labelList& featVisited
)
{
@ -360,7 +360,7 @@ Foam::surfaceFeatures::surfaceFeatures
const labelList& featureEdges,
const label externalStart,
const label internalStart
)
)
:
surf_(surf),
featurePoints_(featurePoints),
@ -457,7 +457,7 @@ Foam::labelList Foam::surfaceFeatures::selectFeatureEdges
if (regionEdges)
{
selectedEdges.setSize(selectedEdges.size() + nRegionEdges());
selectedEdges.setCapacity(selectedEdges.size() + nRegionEdges());
for (label i = 0; i < externalStart_; i++)
{
@ -467,7 +467,7 @@ Foam::labelList Foam::surfaceFeatures::selectFeatureEdges
if (externalEdges)
{
selectedEdges.setSize(selectedEdges.size() + nExternalEdges());
selectedEdges.setCapacity(selectedEdges.size() + nExternalEdges());
for (label i = externalStart_; i < internalStart_; i++)
{
@ -477,7 +477,7 @@ Foam::labelList Foam::surfaceFeatures::selectFeatureEdges
if (internalEdges)
{
selectedEdges.setSize(selectedEdges.size() + nInternalEdges());
selectedEdges.setCapacity(selectedEdges.size() + nInternalEdges());
for (label i = internalStart_; i < featureEdges_.size(); i++)
{
@ -530,8 +530,8 @@ void Foam::surfaceFeatures::findFeatures(const scalar includedAngle)
// Check if convex or concave by looking at angle
// between face centres and normal
vector f0Tof1 =
surf_[face1].centre(points)
vector f0Tof1 =
surf_[face1].centre(points)
- surf_[face0].centre(points);
if ((f0Tof1 & faceNormals[face0]) > 0.0)
@ -683,11 +683,11 @@ void Foam::surfaceFeatures::writeDict(Ostream& writeFile) const
{
dictionary featInfoDict;
featInfoDict.add("externalStart", externalStart_);
featInfoDict.add("externalStart", externalStart_);
featInfoDict.add("internalStart", internalStart_);
featInfoDict.add("featureEdges", featureEdges_);
featInfoDict.add("featurePoints", featurePoints_);
featInfoDict.write(writeFile);
}
@ -1152,7 +1152,7 @@ void Foam::surfaceFeatures::nearestSurfEdge
(
const labelList& selectedEdges,
const pointField& samples,
const vector& searchSpan, // Search span
const vector& searchSpan, // Search span
labelList& edgeLabel,
labelList& edgeEndPoint,
pointField& edgePoint
@ -1163,7 +1163,7 @@ void Foam::surfaceFeatures::nearestSurfEdge
edgePoint.setSize(samples.size());
const pointField& localPoints = surf_.localPoints();
octree<octreeDataEdges> ppTree
(
treeBoundBox(localPoints), // overall search domain
@ -1232,7 +1232,7 @@ void Foam::surfaceFeatures::nearestSurfEdge
const labelList& selectedSampleEdges,
const pointField& samplePoints,
const vector& searchSpan, // Search span
const vector& searchSpan, // Search span
labelList& edgeLabel, // label of surface edge or -1
pointField& pointOnEdge, // point on above edge
pointField& pointOnFeature // point on sample edge
@ -1242,7 +1242,6 @@ void Foam::surfaceFeatures::nearestSurfEdge
pointOnEdge.setSize(selectedSampleEdges.size());
pointOnFeature.setSize(selectedSampleEdges.size());
octree<octreeDataEdges> ppTree
(

View File

@ -174,6 +174,7 @@ bool Foam::fileFormats::TRIsurfaceFormatCore::read
nPatch++;
}
}
// truncate addressed size
dynSizes.setSize(nPatch);
// transfer to normal lists