From 73d6fc9e91a01cfbfd7e49d3fbe6e06b92b32972 Mon Sep 17 00:00:00 2001 From: Andrew Heather <> Date: Fri, 23 Jul 2021 22:24:44 +0100 Subject: [PATCH 01/11] ENH: Added profiling for dynamic mesh updates --- src/dynamicFvMesh/dynamicFvMesh/dynamicFvMesh.C | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/dynamicFvMesh/dynamicFvMesh/dynamicFvMesh.C b/src/dynamicFvMesh/dynamicFvMesh/dynamicFvMesh.C index fbca194237..7b3fe124ed 100644 --- a/src/dynamicFvMesh/dynamicFvMesh/dynamicFvMesh.C +++ b/src/dynamicFvMesh/dynamicFvMesh/dynamicFvMesh.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2012 OpenFOAM Foundation - Copyright (C) 2018-2020 OpenCFD Ltd. + Copyright (C) 2018-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -27,6 +27,7 @@ License \*---------------------------------------------------------------------------*/ #include "dynamicFvMesh.H" +#include "profiling.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -174,6 +175,7 @@ bool Foam::dynamicFvMesh::controlledUpdate() << timeControl_.type() << nl; } + addProfiling(mesh, "mesh.update()"); return this->update(); } From 053727d2d97d5b9bb46d848a8da5da6d8eadda81 Mon Sep 17 00:00:00 2001 From: Andrew Heather <> Date: Fri, 23 Jul 2021 22:25:14 +0100 Subject: [PATCH 02/11] ENH: Enable Time objects for writeObjects FO --- .../utilities/writeObjects/writeObjects.C | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/functionObjects/utilities/writeObjects/writeObjects.C b/src/functionObjects/utilities/writeObjects/writeObjects.C index 5f39a40b2f..e0a3d83cab 100644 --- a/src/functionObjects/utilities/writeObjects/writeObjects.C +++ b/src/functionObjects/utilities/writeObjects/writeObjects.C @@ -60,6 +60,22 @@ Foam::functionObjects::writeObjects::writeOptionNames_ { writeOption::ANY_WRITE, "anyWrite" }, }); +const Foam::objectRegistry& setRegistry +( + const Foam::Time& runTime, + const Foam::dictionary& dict +) +{ + const Foam::word regionName = + dict.getOrDefault("region", Foam::polyMesh::defaultRegion); + + if (regionName == "__TIME__") + { + return runTime; + } + + return runTime.lookupObject(regionName); +} // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -71,13 +87,7 @@ Foam::functionObjects::writeObjects::writeObjects ) : functionObject(name), - obr_ - ( - runTime.lookupObject - ( - dict.getOrDefault("region", polyMesh::defaultRegion) - ) - ), + obr_(setRegistry(runTime, dict)), writeOption_(ANY_WRITE), objectNames_() { From ef14a415a97a58c8c7dfe3d13da56cad6ae6ecdb Mon Sep 17 00:00:00 2001 From: Andrew Heather <> Date: Wed, 9 Mar 2022 11:32:00 +0000 Subject: [PATCH 03/11] ENH: ListOps - added uniqueSort function --- .../containers/Lists/ListOps/ListOps.H | 4 +++ .../Lists/ListOps/ListOpsTemplates.C | 27 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/OpenFOAM/containers/Lists/ListOps/ListOps.H b/src/OpenFOAM/containers/Lists/ListOps/ListOps.H index 1ac082a857..78efbc82ec 100644 --- a/src/OpenFOAM/containers/Lists/ListOps/ListOps.H +++ b/src/OpenFOAM/containers/Lists/ListOps/ListOps.H @@ -217,6 +217,10 @@ void uniqueOrder ); +//- Return sorted list with removal of duplicates +template +List uniqueSort(const UList& input); + //- Inplace sorting and removal of duplicates. // Do not use FixedList for the input list, since it doesn't resize. template diff --git a/src/OpenFOAM/containers/Lists/ListOps/ListOpsTemplates.C b/src/OpenFOAM/containers/Lists/ListOps/ListOpsTemplates.C index 0b4885f957..bcdeb8ea18 100644 --- a/src/OpenFOAM/containers/Lists/ListOps/ListOpsTemplates.C +++ b/src/OpenFOAM/containers/Lists/ListOps/ListOpsTemplates.C @@ -424,6 +424,33 @@ void Foam::uniqueOrder } +template +Foam::List Foam::uniqueSort(const UList& input) +{ + List output(input); + + const label len = output.size(); + + if (len > 1) + { + Foam::stableSort(output); + + label count = 0; + for (label i = 1; i < len; ++i) + { + if (output[count] != output[i]) + { + output[++count] = output[i]; + } + } + + output.resize(count+1); + } + + return output; +} + + template void Foam::inplaceUniqueSort(ListType& input) { From 0dc1faa2be040b9ec344f047d87cb0154590e503 Mon Sep 17 00:00:00 2001 From: Andrew Heather <> Date: Wed, 16 Mar 2022 19:31:28 +0000 Subject: [PATCH 04/11] ENH: primitiveMeshTools - added partial geometry update functions Added new functions: - updateFaceCentresAndAreas : update faces in faceIDs list - updateCellCentresAndVols : update cells in cellIDs list --- .../primitiveMeshCheck/primitiveMeshTools.C | 172 +++++++++++++++++- .../primitiveMeshCheck/primitiveMeshTools.H | 25 ++- 2 files changed, 192 insertions(+), 5 deletions(-) diff --git a/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCheck/primitiveMeshTools.C b/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCheck/primitiveMeshTools.C index c2e5d1cdd8..a5f93524bf 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCheck/primitiveMeshTools.C +++ b/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCheck/primitiveMeshTools.C @@ -34,6 +34,172 @@ License // * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // +void Foam::primitiveMeshTools::updateFaceCentresAndAreas +( + const primitiveMesh& mesh, + const UList