mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
BUG: unguarded use of globalIndex in vtk writers (fixes #1110)
- the problem occurred when running the writers in a parallel solver or utility but requesting output on the master only. Adjusted the logic to avoid globalIndex for these cases. Previously the if (parallel_) checks were happening later, after the globalIndex had already been created.
This commit is contained in:
@ -123,10 +123,7 @@ void Foam::vtk::internalWriter::writePoints()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::vtk::internalWriter::writeCellsLegacy
|
void Foam::vtk::internalWriter::writeCellsLegacy(const label pointOffset)
|
||||||
(
|
|
||||||
const globalIndex& pointOffsets
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
const List<uint8_t>& cellTypes = vtuCells_.cellTypes();
|
const List<uint8_t>& cellTypes = vtuCells_.cellTypes();
|
||||||
const labelList& vertLabels = vtuCells_.vertLabels();
|
const labelList& vertLabels = vtuCells_.vertLabels();
|
||||||
@ -165,7 +162,7 @@ void Foam::vtk::internalWriter::writeCellsLegacy
|
|||||||
vtk::vtuSizing::copyVertLabelsLegacy
|
vtk::vtuSizing::copyVertLabelsLegacy
|
||||||
(
|
(
|
||||||
vertLabels,
|
vertLabels,
|
||||||
pointOffsets.localStart()
|
pointOffset
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -206,10 +203,7 @@ void Foam::vtk::internalWriter::writeCellsLegacy
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::vtk::internalWriter::writeCellsConnectivity
|
void Foam::vtk::internalWriter::writeCellsConnectivity(const label pointOffset)
|
||||||
(
|
|
||||||
const globalIndex& pointOffsets
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// 'connectivity'
|
// 'connectivity'
|
||||||
@ -239,7 +233,7 @@ void Foam::vtk::internalWriter::writeCellsConnectivity
|
|||||||
vtk::vtuSizing::copyVertLabelsXml
|
vtk::vtuSizing::copyVertLabelsXml
|
||||||
(
|
(
|
||||||
vertLabels,
|
vertLabels,
|
||||||
pointOffsets.localStart()
|
pointOffset
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -263,12 +257,6 @@ void Foam::vtk::internalWriter::writeCellsConnectivity
|
|||||||
const labelList& vertOffsets = vtuCells_.vertOffsets();
|
const labelList& vertOffsets = vtuCells_.vertOffsets();
|
||||||
label nOffs = vertOffsets.size();
|
label nOffs = vertOffsets.size();
|
||||||
|
|
||||||
// global connectivity offsets
|
|
||||||
const globalIndex procOffset
|
|
||||||
(
|
|
||||||
vertOffsets.empty() ? 0 : vertOffsets.last()
|
|
||||||
);
|
|
||||||
|
|
||||||
if (parallel_)
|
if (parallel_)
|
||||||
{
|
{
|
||||||
reduce(nOffs, sumOp<label>());
|
reduce(nOffs, sumOp<label>());
|
||||||
@ -285,6 +273,12 @@ void Foam::vtk::internalWriter::writeCellsConnectivity
|
|||||||
|
|
||||||
if (parallel_)
|
if (parallel_)
|
||||||
{
|
{
|
||||||
|
// processor-local connectivity offsets
|
||||||
|
const globalIndex procOffset
|
||||||
|
(
|
||||||
|
vertOffsets.empty() ? 0 : vertOffsets.last()
|
||||||
|
);
|
||||||
|
|
||||||
vtk::writeListParallel(format_.ref(), vertOffsets, procOffset);
|
vtk::writeListParallel(format_.ref(), vertOffsets, procOffset);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -347,10 +341,7 @@ void Foam::vtk::internalWriter::writeCellsConnectivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::vtk::internalWriter::writeCellsFaces
|
void Foam::vtk::internalWriter::writeCellsFaces(const label pointOffset)
|
||||||
(
|
|
||||||
const globalIndex& pointOffsets
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
label nFaceLabels = vtuCells_.faceLabels().size();
|
label nFaceLabels = vtuCells_.faceLabels().size();
|
||||||
|
|
||||||
@ -393,7 +384,7 @@ void Foam::vtk::internalWriter::writeCellsFaces
|
|||||||
vtk::vtuSizing::copyFaceLabelsXml
|
vtk::vtuSizing::copyFaceLabelsXml
|
||||||
(
|
(
|
||||||
faceLabels,
|
faceLabels,
|
||||||
pointOffsets.localStart()
|
pointOffset
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -578,12 +569,15 @@ bool Foam::vtk::internalWriter::writeGeometry()
|
|||||||
|
|
||||||
writePoints();
|
writePoints();
|
||||||
|
|
||||||
// With addPointCellLabels for the point offsets
|
// Include addPointCellLabels for the point offsets
|
||||||
const globalIndex globalPointOffset(vtuCells_.nFieldPoints());
|
const label pointOffset =
|
||||||
|
(
|
||||||
|
parallel_ ? globalIndex(vtuCells_.nFieldPoints()).localStart() : 0
|
||||||
|
);
|
||||||
|
|
||||||
if (legacy())
|
if (legacy())
|
||||||
{
|
{
|
||||||
writeCellsLegacy(globalPointOffset);
|
writeCellsLegacy(pointOffset);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -592,8 +586,8 @@ bool Foam::vtk::internalWriter::writeGeometry()
|
|||||||
format().tag(vtk::fileTag::CELLS);
|
format().tag(vtk::fileTag::CELLS);
|
||||||
}
|
}
|
||||||
|
|
||||||
writeCellsConnectivity(globalPointOffset);
|
writeCellsConnectivity(pointOffset);
|
||||||
writeCellsFaces(globalPointOffset);
|
writeCellsFaces(pointOffset);
|
||||||
|
|
||||||
if (format_)
|
if (format_)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -58,7 +58,6 @@ namespace Foam
|
|||||||
{
|
{
|
||||||
|
|
||||||
// Forward declarations
|
// Forward declarations
|
||||||
class globalIndex;
|
|
||||||
class volPointInterpolation;
|
class volPointInterpolation;
|
||||||
|
|
||||||
namespace vtk
|
namespace vtk
|
||||||
@ -96,13 +95,16 @@ class internalWriter
|
|||||||
void writePoints();
|
void writePoints();
|
||||||
|
|
||||||
//- Write cells (connectivity and type), legacy format
|
//- Write cells (connectivity and type), legacy format
|
||||||
void writeCellsLegacy(const globalIndex& pointOffsets);
|
// \param pointOffset processor-local point offset
|
||||||
|
void writeCellsLegacy(const label pointOffset);
|
||||||
|
|
||||||
//- Write cells connectivity
|
//- Write cells connectivity
|
||||||
void writeCellsConnectivity(const globalIndex& pointOffsets);
|
// \param pointOffset processor-local point offset
|
||||||
|
void writeCellsConnectivity(const label pointOffset);
|
||||||
|
|
||||||
//- Write cells face streams
|
//- Write cells face streams
|
||||||
void writeCellsFaces(const globalIndex& pointOffsets);
|
// \param pointOffset processor-local point offset
|
||||||
|
void writeCellsFaces(const label pointOffset);
|
||||||
|
|
||||||
|
|
||||||
//- No copy construct
|
//- No copy construct
|
||||||
|
|||||||
@ -171,10 +171,7 @@ void Foam::vtk::patchWriter::writePoints()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::vtk::patchWriter::writePolysLegacy
|
void Foam::vtk::patchWriter::writePolysLegacy(const label pointOffset)
|
||||||
(
|
|
||||||
const globalIndex& pointOffsets
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
const polyBoundaryMesh& patches = mesh_.boundaryMesh();
|
const polyBoundaryMesh& patches = mesh_.boundaryMesh();
|
||||||
|
|
||||||
@ -207,7 +204,7 @@ void Foam::vtk::patchWriter::writePolysLegacy
|
|||||||
|
|
||||||
auto iter = vertLabels.begin();
|
auto iter = vertLabels.begin();
|
||||||
|
|
||||||
label off = pointOffsets.localStart();
|
label off = pointOffset;
|
||||||
|
|
||||||
for (const label patchId : patchIDs_)
|
for (const label patchId : patchIDs_)
|
||||||
{
|
{
|
||||||
@ -245,10 +242,7 @@ void Foam::vtk::patchWriter::writePolysLegacy
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::vtk::patchWriter::writePolys
|
void Foam::vtk::patchWriter::writePolys(const label pointOffset)
|
||||||
(
|
|
||||||
const globalIndex& pointOffsets
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
if (format_)
|
if (format_)
|
||||||
{
|
{
|
||||||
@ -285,7 +279,7 @@ void Foam::vtk::patchWriter::writePolys
|
|||||||
|
|
||||||
auto iter = vertLabels.begin();
|
auto iter = vertLabels.begin();
|
||||||
|
|
||||||
label off = pointOffsets.localStart();
|
label off = pointOffset;
|
||||||
|
|
||||||
for (const label patchId : patchIDs_)
|
for (const label patchId : patchIDs_)
|
||||||
{
|
{
|
||||||
@ -328,9 +322,6 @@ void Foam::vtk::patchWriter::writePolys
|
|||||||
labelList vertOffsets(nLocalFaces_);
|
labelList vertOffsets(nLocalFaces_);
|
||||||
label nOffs = vertOffsets.size();
|
label nOffs = vertOffsets.size();
|
||||||
|
|
||||||
// global connectivity offsets
|
|
||||||
const globalIndex procOffset(nLocalVerts_);
|
|
||||||
|
|
||||||
if (parallel_)
|
if (parallel_)
|
||||||
{
|
{
|
||||||
reduce(nOffs, sumOp<label>());
|
reduce(nOffs, sumOp<label>());
|
||||||
@ -346,7 +337,12 @@ void Foam::vtk::patchWriter::writePolys
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
label off = procOffset.localStart();
|
// processor-local connectivity offsets
|
||||||
|
label off =
|
||||||
|
(
|
||||||
|
parallel_ ? globalIndex(nLocalVerts_).localStart() : 0
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
auto iter = vertOffsets.begin();
|
auto iter = vertOffsets.begin();
|
||||||
|
|
||||||
@ -517,15 +513,18 @@ bool Foam::vtk::patchWriter::writeGeometry()
|
|||||||
|
|
||||||
writePoints();
|
writePoints();
|
||||||
|
|
||||||
const globalIndex globalPointOffset(nLocalPoints_);
|
const label pointOffset =
|
||||||
|
(
|
||||||
|
parallel_ ? globalIndex(nLocalPoints_).localStart() : 0
|
||||||
|
);
|
||||||
|
|
||||||
if (legacy())
|
if (legacy())
|
||||||
{
|
{
|
||||||
writePolysLegacy(globalPointOffset);
|
writePolysLegacy(pointOffset);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
writePolys(globalPointOffset);
|
writePolys(pointOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -55,10 +55,6 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
// Forward declarations
|
|
||||||
class globalIndex;
|
|
||||||
|
|
||||||
namespace vtk
|
namespace vtk
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -107,10 +103,12 @@ class patchWriter
|
|||||||
void writePoints();
|
void writePoints();
|
||||||
|
|
||||||
//- Write patch faces, legacy format
|
//- Write patch faces, legacy format
|
||||||
void writePolysLegacy(const globalIndex& pointOffsets);
|
// \param pointOffset processor-local point offset
|
||||||
|
void writePolysLegacy(const label pointOffset);
|
||||||
|
|
||||||
//- Write patch faces
|
//- Write patch faces
|
||||||
void writePolys(const globalIndex& pointOffsets);
|
// \param pointOffset processor-local point offset
|
||||||
|
void writePolys(const label pointOffset);
|
||||||
|
|
||||||
|
|
||||||
//- No copy construct
|
//- No copy construct
|
||||||
|
|||||||
@ -24,7 +24,6 @@ License
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "foamVtkFileWriter.H"
|
#include "foamVtkFileWriter.H"
|
||||||
#include "globalIndex.H"
|
|
||||||
#include "OSspecific.H"
|
#include "OSspecific.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -148,10 +148,7 @@ void Foam::vtk::indirectPatchWriter::writePoints()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::vtk::indirectPatchWriter::writePolysLegacy
|
void Foam::vtk::indirectPatchWriter::writePolysLegacy(const label pointOffset)
|
||||||
(
|
|
||||||
const globalIndex& pointOffsets
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
// Connectivity count without additional storage (done internally)
|
// Connectivity count without additional storage (done internally)
|
||||||
|
|
||||||
@ -182,7 +179,7 @@ void Foam::vtk::indirectPatchWriter::writePolysLegacy
|
|||||||
|
|
||||||
auto iter = vertLabels.begin();
|
auto iter = vertLabels.begin();
|
||||||
|
|
||||||
label off = pointOffsets.localStart();
|
label off = pointOffset;
|
||||||
|
|
||||||
{
|
{
|
||||||
for (const face& f : pp_.localFaces())
|
for (const face& f : pp_.localFaces())
|
||||||
@ -217,10 +214,7 @@ void Foam::vtk::indirectPatchWriter::writePolysLegacy
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::vtk::indirectPatchWriter::writePolys
|
void Foam::vtk::indirectPatchWriter::writePolys(const label pointOffset)
|
||||||
(
|
|
||||||
const globalIndex& pointOffsets
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
if (format_)
|
if (format_)
|
||||||
{
|
{
|
||||||
@ -254,7 +248,7 @@ void Foam::vtk::indirectPatchWriter::writePolys
|
|||||||
|
|
||||||
auto iter = vertLabels.begin();
|
auto iter = vertLabels.begin();
|
||||||
|
|
||||||
label off = pointOffsets.localStart();
|
label off = pointOffset;
|
||||||
|
|
||||||
{
|
{
|
||||||
for (const face& f : pp_.localFaces())
|
for (const face& f : pp_.localFaces())
|
||||||
@ -294,9 +288,6 @@ void Foam::vtk::indirectPatchWriter::writePolys
|
|||||||
labelList vertOffsets(nLocalFaces_);
|
labelList vertOffsets(nLocalFaces_);
|
||||||
label nOffs = vertOffsets.size();
|
label nOffs = vertOffsets.size();
|
||||||
|
|
||||||
// global connectivity offsets
|
|
||||||
const globalIndex procOffset(nLocalVerts_);
|
|
||||||
|
|
||||||
if (parallel_)
|
if (parallel_)
|
||||||
{
|
{
|
||||||
reduce(nOffs, sumOp<label>());
|
reduce(nOffs, sumOp<label>());
|
||||||
@ -311,7 +302,11 @@ void Foam::vtk::indirectPatchWriter::writePolys
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
label off = procOffset.localStart();
|
// processor-local connectivity offsets
|
||||||
|
label off =
|
||||||
|
(
|
||||||
|
parallel_ ? globalIndex(nLocalVerts_).localStart() : 0
|
||||||
|
);
|
||||||
|
|
||||||
auto iter = vertOffsets.begin();
|
auto iter = vertOffsets.begin();
|
||||||
|
|
||||||
@ -419,15 +414,18 @@ bool Foam::vtk::indirectPatchWriter::writeGeometry()
|
|||||||
|
|
||||||
writePoints();
|
writePoints();
|
||||||
|
|
||||||
const globalIndex globalPointOffset(nLocalPoints_);
|
const label pointOffset =
|
||||||
|
(
|
||||||
|
parallel_ ? globalIndex(nLocalPoints_).localStart() : 0
|
||||||
|
);
|
||||||
|
|
||||||
if (legacy())
|
if (legacy())
|
||||||
{
|
{
|
||||||
writePolysLegacy(globalPointOffset);
|
writePolysLegacy(pointOffset);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
writePolys(globalPointOffset);
|
writePolys(pointOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -54,10 +54,6 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
// Forward declarations
|
|
||||||
class globalIndex;
|
|
||||||
|
|
||||||
namespace vtk
|
namespace vtk
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -100,10 +96,12 @@ class indirectPatchWriter
|
|||||||
void writePoints();
|
void writePoints();
|
||||||
|
|
||||||
//- Write patch faces, legacy format
|
//- Write patch faces, legacy format
|
||||||
void writePolysLegacy(const globalIndex& pointOffsets);
|
// \param pointOffset processor-local point offset
|
||||||
|
void writePolysLegacy(const label pointOffset);
|
||||||
|
|
||||||
//- Write patch faces
|
//- Write patch faces
|
||||||
void writePolys(const globalIndex& pointOffsets);
|
// \param pointOffset processor-local point offset
|
||||||
|
void writePolys(const label pointOffset);
|
||||||
|
|
||||||
|
|
||||||
//- No copy construct
|
//- No copy construct
|
||||||
|
|||||||
@ -148,10 +148,7 @@ void Foam::vtk::surfaceWriter::writePoints()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::vtk::surfaceWriter::writePolysLegacy
|
void Foam::vtk::surfaceWriter::writePolysLegacy(const label pointOffset)
|
||||||
(
|
|
||||||
const globalIndex& pointOffsets
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
// Connectivity count without additional storage (done internally)
|
// Connectivity count without additional storage (done internally)
|
||||||
|
|
||||||
@ -182,7 +179,7 @@ void Foam::vtk::surfaceWriter::writePolysLegacy
|
|||||||
|
|
||||||
auto iter = vertLabels.begin();
|
auto iter = vertLabels.begin();
|
||||||
|
|
||||||
label off = pointOffsets.localStart();
|
label off = pointOffset;
|
||||||
|
|
||||||
{
|
{
|
||||||
for (const face& f : faces_)
|
for (const face& f : faces_)
|
||||||
@ -217,10 +214,7 @@ void Foam::vtk::surfaceWriter::writePolysLegacy
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::vtk::surfaceWriter::writePolys
|
void Foam::vtk::surfaceWriter::writePolys(const label pointOffset)
|
||||||
(
|
|
||||||
const globalIndex& pointOffsets
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
if (format_)
|
if (format_)
|
||||||
{
|
{
|
||||||
@ -254,7 +248,7 @@ void Foam::vtk::surfaceWriter::writePolys
|
|||||||
|
|
||||||
auto iter = vertLabels.begin();
|
auto iter = vertLabels.begin();
|
||||||
|
|
||||||
label off = pointOffsets.localStart();
|
label off = pointOffset;
|
||||||
|
|
||||||
{
|
{
|
||||||
for (const face& f : faces_)
|
for (const face& f : faces_)
|
||||||
@ -294,9 +288,6 @@ void Foam::vtk::surfaceWriter::writePolys
|
|||||||
labelList vertOffsets(nLocalFaces_);
|
labelList vertOffsets(nLocalFaces_);
|
||||||
label nOffs = vertOffsets.size();
|
label nOffs = vertOffsets.size();
|
||||||
|
|
||||||
// global connectivity offsets
|
|
||||||
const globalIndex procOffset(nLocalVerts_);
|
|
||||||
|
|
||||||
if (parallel_)
|
if (parallel_)
|
||||||
{
|
{
|
||||||
reduce(nOffs, sumOp<label>());
|
reduce(nOffs, sumOp<label>());
|
||||||
@ -311,7 +302,12 @@ void Foam::vtk::surfaceWriter::writePolys
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
label off = procOffset.localStart();
|
// processor-local connectivity offsets
|
||||||
|
label off =
|
||||||
|
(
|
||||||
|
parallel_ ? globalIndex(nLocalVerts_).localStart() : 0
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
auto iter = vertOffsets.begin();
|
auto iter = vertOffsets.begin();
|
||||||
|
|
||||||
@ -438,15 +434,18 @@ bool Foam::vtk::surfaceWriter::writeGeometry()
|
|||||||
|
|
||||||
writePoints();
|
writePoints();
|
||||||
|
|
||||||
const globalIndex globalPointOffset(nLocalPoints_);
|
const label pointOffset =
|
||||||
|
(
|
||||||
|
parallel_ ? globalIndex(nLocalPoints_).localStart() : 0
|
||||||
|
);
|
||||||
|
|
||||||
if (legacy())
|
if (legacy())
|
||||||
{
|
{
|
||||||
writePolysLegacy(globalPointOffset);
|
writePolysLegacy(pointOffset);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
writePolys(globalPointOffset);
|
writePolys(pointOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -56,10 +56,6 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
// Forward declarations
|
|
||||||
class globalIndex;
|
|
||||||
|
|
||||||
namespace vtk
|
namespace vtk
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -108,10 +104,12 @@ class surfaceWriter
|
|||||||
void writePoints();
|
void writePoints();
|
||||||
|
|
||||||
//- Write patch faces, legacy format
|
//- Write patch faces, legacy format
|
||||||
void writePolysLegacy(const globalIndex& pointOffsets);
|
// \param pointOffset processor-local point offset
|
||||||
|
void writePolysLegacy(const label pointOffset);
|
||||||
|
|
||||||
//- Write patch faces
|
//- Write patch faces
|
||||||
void writePolys(const globalIndex& pointOffsets);
|
// \param pointOffset processor-local point offset
|
||||||
|
void writePolys(const label pointOffset);
|
||||||
|
|
||||||
|
|
||||||
//- No copy construct
|
//- No copy construct
|
||||||
|
|||||||
@ -42,8 +42,6 @@ bool Foam::vtk::writeCellSetFaces
|
|||||||
{
|
{
|
||||||
typedef IndirectList<face> FaceListType;
|
typedef IndirectList<face> FaceListType;
|
||||||
|
|
||||||
const globalIndex cellIdOffset(mesh.nCells());
|
|
||||||
|
|
||||||
indirectPrimitivePatch pp
|
indirectPrimitivePatch pp
|
||||||
(
|
(
|
||||||
FaceListType(mesh.faces(), labelList()),
|
FaceListType(mesh.faces(), labelList()),
|
||||||
@ -88,22 +86,6 @@ bool Foam::vtk::writeCellSetFaces
|
|||||||
// Use these faces
|
// Use these faces
|
||||||
faces.resetAddressing(cellFaces.sortedToc());
|
faces.resetAddressing(cellFaces.sortedToc());
|
||||||
|
|
||||||
// For each face, the corresponding cellID
|
|
||||||
|
|
||||||
labelList faceValues(faces.size());
|
|
||||||
|
|
||||||
// Cell ID
|
|
||||||
{
|
|
||||||
const labelList& faceIds = faces.addressing();
|
|
||||||
|
|
||||||
const label off = cellIdOffset.localStart();
|
|
||||||
|
|
||||||
forAll(faceValues, facei)
|
|
||||||
{
|
|
||||||
faceValues[facei] = cellFaces[faceIds[facei]] + off;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
indirectPatchWriter writer(pp, opts);
|
indirectPatchWriter writer(pp, opts);
|
||||||
@ -115,14 +97,31 @@ bool Foam::vtk::writeCellSetFaces
|
|||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
// CellData - cellID only
|
// CellData - faceID only
|
||||||
{
|
|
||||||
writer.beginCellData(1);
|
writer.beginCellData(1);
|
||||||
|
{
|
||||||
|
// For each face, the corresponding cellID
|
||||||
|
|
||||||
|
labelList faceValues(faces.size());
|
||||||
|
|
||||||
|
const labelList& faceIds = faces.addressing();
|
||||||
|
|
||||||
|
// processor-local cellID offset
|
||||||
|
const label cellIdOffset =
|
||||||
|
(
|
||||||
|
writer.parallel() ? globalIndex(mesh.nCells()).localStart() : 0
|
||||||
|
);
|
||||||
|
|
||||||
|
forAll(faceValues, facei)
|
||||||
|
{
|
||||||
|
faceValues[facei] = cellFaces[faceIds[facei]] + cellIdOffset;
|
||||||
|
}
|
||||||
|
|
||||||
writer.write("faceID", faceValues);
|
writer.write("faceID", faceValues);
|
||||||
|
}
|
||||||
|
|
||||||
// End CellData/PointData is implicit
|
// End CellData/PointData is implicit
|
||||||
}
|
|
||||||
|
|
||||||
writer.close();
|
writer.close();
|
||||||
|
|
||||||
|
|||||||
@ -42,8 +42,6 @@ bool Foam::vtk::writeFaceSet
|
|||||||
{
|
{
|
||||||
typedef IndirectList<face> FaceListType;
|
typedef IndirectList<face> FaceListType;
|
||||||
|
|
||||||
const globalIndex faceIdOffset(mesh.nFaces());
|
|
||||||
|
|
||||||
indirectPrimitivePatch pp
|
indirectPrimitivePatch pp
|
||||||
(
|
(
|
||||||
FaceListType(mesh.faces(), labelList()),
|
FaceListType(mesh.faces(), labelList()),
|
||||||
@ -69,7 +67,17 @@ bool Foam::vtk::writeFaceSet
|
|||||||
writer.beginCellData(1);
|
writer.beginCellData(1);
|
||||||
|
|
||||||
labelField faceValues(faces.addressing());
|
labelField faceValues(faces.addressing());
|
||||||
faceValues += faceIdOffset.localStart();
|
|
||||||
|
// processor-local faceID offset
|
||||||
|
const label faceIdOffset =
|
||||||
|
(
|
||||||
|
writer.parallel() ? globalIndex(mesh.nFaces()).localStart() : 0
|
||||||
|
);
|
||||||
|
|
||||||
|
if (faceIdOffset)
|
||||||
|
{
|
||||||
|
faceValues += faceIdOffset;
|
||||||
|
}
|
||||||
|
|
||||||
writer.write("faceID", faceValues);
|
writer.write("faceID", faceValues);
|
||||||
|
|
||||||
|
|||||||
@ -94,8 +94,6 @@ bool Foam::vtk::writePointSet
|
|||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
const globalIndex pointIdOffset(mesh.nPoints());
|
|
||||||
|
|
||||||
labelField pointLabels(set.sortedToc());
|
labelField pointLabels(set.sortedToc());
|
||||||
|
|
||||||
label numberOfPoints = pointLabels.size();
|
label numberOfPoints = pointLabels.size();
|
||||||
@ -206,6 +204,8 @@ bool Foam::vtk::writePointSet
|
|||||||
|
|
||||||
if (parallel)
|
if (parallel)
|
||||||
{
|
{
|
||||||
|
const globalIndex pointIdOffset(mesh.nPoints());
|
||||||
|
|
||||||
vtk::writeListParallel(format.ref(), pointLabels, pointIdOffset);
|
vtk::writeListParallel(format.ref(), pointLabels, pointIdOffset);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user