From d300fab63ac05c32c34c6a74b3b89d38a764f67d Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Wed, 12 Jun 2024 11:47:53 +0200 Subject: [PATCH] ENH: reduce some allocations in rawTopoChangerFvMesh - cache and reuse the zero field STYLE: use templated form of objectRegistry::names<..> --- .../rawTopoChangerFvMesh.C | 32 ++++--------- .../rawTopoChangerFvMesh.H | 9 ++-- .../rawTopoChangerFvMeshTemplates.C | 47 +++++++------------ 3 files changed, 32 insertions(+), 56 deletions(-) diff --git a/src/topoChangerFvMesh/rawTopoChangerFvMesh/rawTopoChangerFvMesh.C b/src/topoChangerFvMesh/rawTopoChangerFvMesh/rawTopoChangerFvMesh.C index 9c2dae8736..c4f76ca093 100644 --- a/src/topoChangerFvMesh/rawTopoChangerFvMesh/rawTopoChangerFvMesh.C +++ b/src/topoChangerFvMesh/rawTopoChangerFvMesh/rawTopoChangerFvMesh.C @@ -65,12 +65,6 @@ Foam::rawTopoChangerFvMesh::rawTopoChangerFvMesh {} -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::rawTopoChangerFvMesh::~rawTopoChangerFvMesh() -{} - - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // bool Foam::rawTopoChangerFvMesh::update() @@ -121,30 +115,24 @@ bool Foam::rawTopoChangerFvMesh::update() } } - const List& fromFaces = topoChangeMap().facesFromFacesMap(); - - forAll(fromFaces, i) + for (const auto& map : topoChangeMap().facesFromFacesMap()) { - mappedFace.set(fromFaces[i].index()); + mappedFace.set(map.index()); } - const List& fromEdges = topoChangeMap().facesFromEdgesMap(); - - forAll(fromEdges, i) + for (const auto& map : topoChangeMap().facesFromEdgesMap()) { - mappedFace.set(fromEdges[i].index()); + mappedFace.set(map.index()); } - const List& fromPts = topoChangeMap().facesFromPointsMap(); - - forAll(fromPts, i) + for (const auto& map : topoChangeMap().facesFromPointsMap()) { - mappedFace.set(fromPts[i].index()); + mappedFace.set(map.index()); } // Set unmapped faces to zero - Info<< "rawTopoChangerFvMesh : zeroing unmapped boundary values." - << endl; + Info<< "rawTopoChangerFvMesh : zeroing unmapped boundary values." << nl; + zeroUnmappedValues(mappedFace); zeroUnmappedValues(mappedFace); zeroUnmappedValues(mappedFace); @@ -155,8 +143,8 @@ bool Foam::rawTopoChangerFvMesh::update() Info<< "rawTopoChangerFvMesh :" << " recreating phi for unmapped boundary values." << endl; - const volVectorField& U = lookupObject("U"); - surfaceScalarField& phi = lookupObjectRef("phi"); + const auto& U = lookupObject("U"); + auto& phi = lookupObjectRef("phi"); setUnmappedValues ( diff --git a/src/topoChangerFvMesh/rawTopoChangerFvMesh/rawTopoChangerFvMesh.H b/src/topoChangerFvMesh/rawTopoChangerFvMesh/rawTopoChangerFvMesh.H index 2cc7c9b526..34710b03be 100644 --- a/src/topoChangerFvMesh/rawTopoChangerFvMesh/rawTopoChangerFvMesh.H +++ b/src/topoChangerFvMesh/rawTopoChangerFvMesh/rawTopoChangerFvMesh.H @@ -38,8 +38,8 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef rawTopoChangerFvMesh_H -#define rawTopoChangerFvMesh_H +#ifndef Foam_rawTopoChangerFvMesh_H +#define Foam_rawTopoChangerFvMesh_H #include "topoChangerFvMesh.H" #include "bitSet.H" @@ -49,8 +49,6 @@ SourceFiles namespace Foam { -// Forward declaration of classes - /*---------------------------------------------------------------------------*\ Class rawTopoChangerFvMesh Declaration \*---------------------------------------------------------------------------*/ @@ -94,8 +92,9 @@ public: const bool doInit=true ); + //- Destructor - virtual ~rawTopoChangerFvMesh(); + virtual ~rawTopoChangerFvMesh() = default; // Member Functions diff --git a/src/topoChangerFvMesh/rawTopoChangerFvMesh/rawTopoChangerFvMeshTemplates.C b/src/topoChangerFvMesh/rawTopoChangerFvMesh/rawTopoChangerFvMeshTemplates.C index f4d676933f..b627bc0b24 100644 --- a/src/topoChangerFvMesh/rawTopoChangerFvMesh/rawTopoChangerFvMeshTemplates.C +++ b/src/topoChangerFvMesh/rawTopoChangerFvMesh/rawTopoChangerFvMeshTemplates.C @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation + Copyright (C) 2024 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -25,9 +26,6 @@ License \*---------------------------------------------------------------------------*/ -#include "rawTopoChangerFvMesh.H" -#include "Time.H" - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template class PatchField, class GeoMesh> @@ -42,10 +40,7 @@ void Foam::rawTopoChangerFvMesh::setUnmappedValues forAll(fld.boundaryField(), patchi) { - PatchField& fvp = const_cast&> - ( - fld.boundaryField()[patchi] - ); + auto& fvp = const_cast&>(fld.boundaryField()[patchi]); const label start = fvp.patch().start(); forAll(fvp, i) @@ -71,33 +66,27 @@ void Foam::rawTopoChangerFvMesh::zeroUnmappedValues { typedef GeometricField FieldType; - const wordList fldNames(names(FieldType::typeName)); + std::unique_ptr zeroFieldPtr; - forAll(fldNames, i) + for (const word& fldName : names()) { - //Pout<< "Checking field " << fldNames[i] << endl; + FieldType& fld = lookupObjectRef(fldName); + //Pout<< "Checking field " << fld.name() << endl; - FieldType& fld = lookupObjectRef(fldNames[i]); - - setUnmappedValues - ( - fld, - mappedFace, - FieldType + if (!zeroFieldPtr) + { + zeroFieldPtr = std::make_unique ( - IOobject - ( - "zero", - time().timeName(), - *this, - IOobject::NO_READ, - IOobject::NO_WRITE, - IOobject::NO_REGISTER - ), + this->newIOobject("zero"), *this, - dimensioned(fld.dimensions(), Zero) - ) - ); + Foam::zero{}, + dimless + ); + } + + zeroFieldPtr->dimensions().reset(fld.dimensions()); + + setUnmappedValues(fld, mappedFace, *zeroFieldPtr); } }