diff --git a/src/sampling/sampledSurface/sampledSurface/sampledSurfaceRegister.C b/src/sampling/sampledSurface/sampledSurface/sampledSurfaceRegister.C index 17de846f1f..28f23ce6a6 100644 --- a/src/sampling/sampledSurface/sampledSurface/sampledSurfaceRegister.C +++ b/src/sampling/sampledSurface/sampledSurface/sampledSurfaceRegister.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2019-2022 OpenCFD Ltd. + Copyright (C) 2019-2024 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -36,12 +36,12 @@ Foam::polySurface* Foam::sampledSurface::getRegistrySurface word lookupName ) const { - if (lookupName.empty()) - { - lookupName = this->name(); - } - - return obr.getObjectPtr(lookupName); + return + ( + lookupName.empty() + ? obr.getObjectPtr(this->name()) + : obr.getObjectPtr(lookupName) + ); } @@ -56,15 +56,16 @@ Foam::polySurface* Foam::sampledSurface::storeRegistrySurface lookupName = this->name(); } - polySurface* surfptr = getRegistrySurface(obr, lookupName); + auto* surfptr = obr.getObjectPtr(lookupName); if (!surfptr) { - // Default construct and add to registry (owned by registry) - surfptr = new polySurface(lookupName, obr, true); + surfptr = new polySurface(lookupName, obr); + regIOobject::store(surfptr); } - surfptr->copySurface(*this); // Copy in geometry (removes old fields) + // Copy in geometry (removes existing fields if sizes have changed) + surfptr->copySurface(*this); return surfptr; } @@ -76,8 +77,12 @@ bool Foam::sampledSurface::removeRegistrySurface word lookupName ) const { - polySurface* surfptr = getRegistrySurface(obr, lookupName); - return obr.checkOut(surfptr); + return + ( + lookupName.empty() + ? polySurface::Delete(this->name(), obr) + : polySurface::Delete(lookupName, obr) + ); } diff --git a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C index d7de7db89d..e6e912f6b0 100644 --- a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C +++ b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation - Copyright (C) 2016-2022 OpenCFD Ltd. + Copyright (C) 2016-2024 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -57,41 +57,15 @@ Foam::scalar Foam::sampledSurfaces::mergeTol_ = 1e-10; // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -Foam::polySurface* Foam::sampledSurfaces::getRegistrySurface -( - const sampledSurface& s -) const -{ - return s.getRegistrySurface - ( - storedObjects(), - IOobject::groupName(name(), s.name()) - ); -} - - -Foam::polySurface* Foam::sampledSurfaces::storeRegistrySurface +void Foam::sampledSurfaces::storeRegistrySurface ( const sampledSurface& s ) { - return s.storeRegistrySurface + s.storeRegistrySurface ( storedObjects(), - IOobject::groupName(name(), s.name()) - ); -} - - -bool Foam::sampledSurfaces::removeRegistrySurface -( - const sampledSurface& s -) -{ - return s.removeRegistrySurface - ( - storedObjects(), - IOobject::groupName(name(), s.name()) + IOobject::groupName(name(), s.name()) // surfaceName ); } @@ -129,7 +103,7 @@ Foam::IOobjectList Foam::sampledSurfaces::preCheckFields() { if (!ListOps::found(allFields, fieldSelection_[i])) { - missed.append(i); + missed.push_back(i); } } @@ -153,11 +127,11 @@ Foam::IOobjectList Foam::sampledSurfaces::preCheckFields() const word& clsName = iter.key(); const label n = iter.val().size(); - if (fieldTypes::volume.found(clsName)) + if (fieldTypes::volume.contains(clsName)) { nVolumeFields += n; } - else if (fieldTypes::surface.found(clsName)) + else if (fieldTypes::surface.contains(clsName)) { nSurfaceFields += n; } @@ -224,13 +198,7 @@ Foam::sampledSurfaces::sampledSurfaces outputPath_ ( time_.globalPath()/functionObject::outputPrefix/name - ), - fieldSelection_(), - sampleFaceScheme_(), - sampleNodeScheme_(), - writers_(), - actions_(), - nFaces_() + ) { outputPath_.clean(); // Remove unneeded ".." @@ -254,13 +222,7 @@ Foam::sampledSurfaces::sampledSurfaces outputPath_ ( time_.globalPath()/functionObject::outputPrefix/name - ), - fieldSelection_(), - sampleFaceScheme_(), - sampleNodeScheme_(), - writers_(), - actions_(), - nFaces_() + ) { outputPath_.clean(); // Remove unneeded ".." @@ -270,7 +232,7 @@ Foam::sampledSurfaces::sampledSurfaces // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -bool Foam::sampledSurfaces::verbose(const bool on) noexcept +bool Foam::sampledSurfaces::verbose(bool on) noexcept { bool old(verbose_); verbose_ = on; @@ -285,7 +247,7 @@ bool Foam::sampledSurfaces::read(const dictionary& dict) PtrList::clear(); writers_.clear(); actions_.clear(); - nFaces_.clear(); + hasFaces_.clear(); fieldSelection_.clear(); verbose_ = dict.getOrDefault("verbose", false); @@ -312,7 +274,6 @@ bool Foam::sampledSurfaces::read(const dictionary& dict) actions_.resize(surfs.size(), ACTION_WRITE); // Default action writers_.resize(surfs.size()); - nFaces_.resize(surfs.size(), Zero); label surfi = 0; @@ -385,7 +346,6 @@ bool Foam::sampledSurfaces::read(const dictionary& dict) actions_.resize(surfs.size(), ACTION_WRITE); // Default action writers_.resize(surfs.size()); - nFaces_.resize(surfs.size(), Zero); label surfi = 0; @@ -436,10 +396,11 @@ bool Foam::sampledSurfaces::read(const dictionary& dict) // Have some surfaces, so sort out which fields are needed and report + hasFaces_.resize_nocopy(surfs.size()); + hasFaces_ = false; + if (surfs.size()) { - nFaces_.resize(surfs.size(), Zero); - dict.readEntry("fields", fieldSelection_); fieldSelection_.uniq(); @@ -466,7 +427,7 @@ bool Foam::sampledSurfaces::read(const dictionary& dict) Info<< nl; } - if (debug && Pstream::master()) + if (debug && UPstream::master()) { Pout<< "sample fields:" << fieldSelection_ << nl << "sample surfaces:" << nl << '(' << nl; @@ -499,12 +460,15 @@ bool Foam::sampledSurfaces::performAction(unsigned request) if (s.update()) { writers_[surfi].expire(); + hasFaces_[surfi] = false; } - nFaces_[surfi] = returnReduce(s.faces().size(), sumOp