diff --git a/src/surfMesh/writers/surfaceWriter.C b/src/surfMesh/writers/surfaceWriter.C index dbdc60e2d0..33ddbb7fb8 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(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(emptySurface_); + surfComp_.clear(); } @@ -316,7 +322,9 @@ void Foam::surfaceWriter::setSurface ) { expire(); + useComponents_ = false; surf_ = std::cref(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(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()) : 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