diff --git a/src/surfMesh/writers/surfaceWriter.C b/src/surfMesh/writers/surfaceWriter.C index dbdc60e2d087c16f10068292f663e44aa392fefa..33ddbb7fb81e54f57ffc97e1ce87983055302177 100644 --- a/src/surfMesh/writers/surfaceWriter.C +++ b/src/surfMesh/writers/surfaceWriter.C @@ -135,6 +135,8 @@ Foam::surfaceWriter::New Foam::surfaceWriter::surfaceWriter() : surf_(std::cref<meshedSurf>(emptySurface_)), + surfComp_(), + useComponents_(false), upToDate_(false), parallel_(true), useTimeDir_(false), @@ -188,7 +190,9 @@ Foam::surfaceWriter::surfaceWriter // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // Foam::surfaceWriter::~surfaceWriter() -{} +{ + close(); +} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // @@ -305,7 +309,9 @@ void Foam::surfaceWriter::clear() { close(); expire(); + useComponents_ = false; surf_ = std::cref<meshedSurf>(emptySurface_); + surfComp_.clear(); } @@ -316,7 +322,9 @@ void Foam::surfaceWriter::setSurface ) { expire(); + useComponents_ = false; surf_ = std::cref<meshedSurf>(surf); + surfComp_.clear(); parallel_ = (parallel && Pstream::parRun()); } @@ -329,7 +337,10 @@ void Foam::surfaceWriter::setSurface ) { expire(); - setSurface(meshedSurfRef(points, faces), parallel); + useComponents_ = true; + surf_ = std::cref<meshedSurf>(emptySurface_); + surfComp_.reset(points, faces); + parallel_ = (parallel && Pstream::parRun()); } @@ -372,13 +383,18 @@ bool Foam::surfaceWriter::expire() bool Foam::surfaceWriter::hasSurface() const { - return (&emptySurface_ != &(surf_.get())); + return (useComponents_ || (&emptySurface_ != &(surf_.get()))); } bool Foam::surfaceWriter::empty() const { - const bool value = surf_.get().faces().empty(); + const bool value = + ( + useComponents_ + ? surfComp_.faces().empty() + : surf_.get().faces().empty() + ); return (parallel_ ? returnReduce(value, andOp<bool>()) : value); } @@ -386,7 +402,12 @@ bool Foam::surfaceWriter::empty() const Foam::label Foam::surfaceWriter::size() const { - const label value = surf_.get().faces().size(); + const bool value = + ( + useComponents_ + ? surfComp_.faces().empty() + : surf_.get().faces().empty() + ); return (parallel_ ? returnReduce(value, sumOp<label>()) : value); } @@ -411,7 +432,14 @@ bool Foam::surfaceWriter::merge() const if (parallel_ && Pstream::parRun() && !upToDate_) { - changed = merged_.merge(surf_.get(), mergeDim_); + if (useComponents_) + { + changed = merged_.merge(surfComp_, mergeDim_); + } + else + { + changed = merged_.merge(surf_.get(), mergeDim_); + } } upToDate_ = true; @@ -428,7 +456,14 @@ const Foam::meshedSurf& Foam::surfaceWriter::surface() const return merged_; } - return surf_.get(); + if (useComponents_) + { + return surfComp_; + } + else + { + return surf_.get(); + } } diff --git a/src/surfMesh/writers/surfaceWriter.H b/src/surfMesh/writers/surfaceWriter.H index 0686d333047237e0b5d0d808beda871cce7bf095..a2a7451e87f891aaf63ae9c31f9feda76d1e4c2b 100644 --- a/src/surfMesh/writers/surfaceWriter.H +++ b/src/surfMesh/writers/surfaceWriter.H @@ -98,17 +98,23 @@ class surfaceWriter { protected: - // Static data members + // Static Data Members //- Placeholder static const meshedSurf::emptySurface emptySurface_; - // Protected data + // Protected Data - //- Reference to the surface + //- Reference to a surface std::reference_wrapper<const meshedSurf> surf_; + //- Reference to raw surface components + meshedSurfRef surfComp_; + + //- Use raw surface components instead of surface reference + bool useComponents_; + //- The topology/surface is up-to-date? mutable bool upToDate_; diff --git a/src/surfMesh/writers/vtk/vtkSurfaceWriter.C b/src/surfMesh/writers/vtk/vtkSurfaceWriter.C index a259d8dc183508a3fb8250c5e0f693f92530400d..39deb3d4d5f6a2065487cf05241e4ee724670f1a 100644 --- a/src/surfMesh/writers/vtk/vtkSurfaceWriter.C +++ b/src/surfMesh/writers/vtk/vtkSurfaceWriter.C @@ -153,7 +153,9 @@ Foam::surfaceWriters::vtkWriter::vtkWriter // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // Foam::surfaceWriters::vtkWriter::~vtkWriter() -{} +{ + close(); +} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //