From 2fa0c7520c32afc344d4ae212672fbaa6f1f426f Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Sun, 10 Dec 2023 17:08:40 +0100 Subject: [PATCH] ENH: provide faMesh static accessors for registry and single-region - the fields for finite-area are currently stored directly on the polyMesh registry, but for future relocation to a sub-registry provide a uniform accessor. ENH: use thisDb() for faMatrix access and extrapolatedCalculated --- src/finiteArea/faMatrices/faMatrix/faMatrix.C | 14 +++------ src/finiteArea/faMesh/faMesh.C | 19 ++++++++++++ src/finiteArea/faMesh/faMesh.H | 8 +++++ .../utilities/areaWrite/areaWrite.C | 29 +++++++++++++------ .../utilities/areaWrite/areaWrite.H | 8 ++--- 5 files changed, 55 insertions(+), 23 deletions(-) diff --git a/src/finiteArea/faMatrices/faMatrix/faMatrix.C b/src/finiteArea/faMatrices/faMatrix/faMatrix.C index 55aa863bf71..074cc0693a8 100644 --- a/src/finiteArea/faMatrices/faMatrix/faMatrix.C +++ b/src/finiteArea/faMatrices/faMatrix/faMatrix.C @@ -2108,18 +2108,12 @@ Foam::operator& const DimensionedField<Type, areaMesh>& psi ) { - auto tMphi = tmp<GeometricField<Type, faPatchField, areaMesh>>::New + auto tMphi = GeometricField<Type, faPatchField, areaMesh>::New ( - IOobject - ( - "M&" + psi.name(), - psi.instance(), - psi.mesh().mesh(), - IOobject::NO_READ, - IOobject::NO_WRITE - ), + "M&" + psi.name(), psi.mesh(), - M.dimensions()/dimArea + M.dimensions()/dimArea, + faPatchFieldBase::extrapolatedCalculatedType() ); auto& Mphi = tMphi.ref(); diff --git a/src/finiteArea/faMesh/faMesh.C b/src/finiteArea/faMesh/faMesh.C index 7a0efb3f9f0..8e095062728 100644 --- a/src/finiteArea/faMesh/faMesh.C +++ b/src/finiteArea/faMesh/faMesh.C @@ -68,6 +68,25 @@ Foam::word Foam::faMesh::meshSubDir = "faMesh"; const int Foam::faMesh::quadricsFit_ = 0; // Tuning (experimental) +// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // + +const Foam::objectRegistry* Foam::faMesh::registry(const polyMesh& pMesh) +{ + // This will change in the near future + return &static_cast<const objectRegistry&>(pMesh); +} + + +const Foam::faMesh& Foam::faMesh::mesh +( + const polyMesh& pMesh +) +{ + // This will change in the near future + return pMesh.lookupObject<faMesh>("faMesh"); +} + + // * * * * * * * * * * * * * * * Local Functions * * * * * * * * * * * * * * // namespace Foam diff --git a/src/finiteArea/faMesh/faMesh.H b/src/finiteArea/faMesh/faMesh.H index c6443000813..49d35817f21 100644 --- a/src/finiteArea/faMesh/faMesh.H +++ b/src/finiteArea/faMesh/faMesh.H @@ -625,6 +625,14 @@ public: // Database + //- The parent registry containing all finite-area meshes + //- on the polyMesh. + static const objectRegistry* registry(const polyMesh& pMesh); + + //- The single-region finite-area region on the polyMesh. + //- Uses lookupObject semantics - Fatal if non-existent + static const faMesh& mesh(const polyMesh& pMesh); + //- Return access to polyMesh inline const polyMesh& mesh() const; diff --git a/src/functionObjects/utilities/areaWrite/areaWrite.C b/src/functionObjects/utilities/areaWrite/areaWrite.C index 424471ddc72..cecb0e2fac3 100644 --- a/src/functionObjects/utilities/areaWrite/areaWrite.C +++ b/src/functionObjects/utilities/areaWrite/areaWrite.C @@ -148,18 +148,24 @@ bool Foam::areaWrite::read(const dictionary& dict) verbose_ = dict.getOrDefault("verbose", false); + // Registry containing all finite-area meshes on the polyMesh + const auto* faRegistry = faMesh::registry(mesh_); + dict.readIfPresent("areas", selectAreas_); if (selectAreas_.empty()) { word areaName; + if (!dict.readIfPresent("area", areaName)) { - wordList available = obr().sortedNames<faMesh>(); - - if (available.size()) + if (faRegistry) { - areaName = available.front(); + wordList available = faRegistry->sortedNames<faMesh>(); + if (!available.empty()) + { + areaName = available.front(); + } } } @@ -171,7 +177,12 @@ bool Foam::areaWrite::read(const dictionary& dict) } // Restrict to specified meshes - meshes_ = obr().csorted<faMesh>(selectAreas_); + meshes_.clear(); + + if (faRegistry) + { + meshes_ = faRegistry->csorted<faMesh>(selectAreas_); + } dict.readEntry("fields", fieldSelection_); fieldSelection_.uniq(); @@ -252,7 +263,7 @@ bool Foam::areaWrite::write() selected.clear(); - IOobjectList objects(0); + IOobjectList objects; if (loadFromFiles_) { @@ -279,7 +290,7 @@ bool Foam::areaWrite::write() { if (!ListOps::found(allFields, fieldSelection_[i])) { - missed.append(i); + missed.push_back(i); } } @@ -304,8 +315,8 @@ bool Foam::areaWrite::write() if ( - fieldTypes::area.found(clsName) - || fieldTypes::area_internal.found(clsName) + fieldTypes::area.contains(clsName) + || fieldTypes::area_internal.contains(clsName) ) { nAreaFields += n; diff --git a/src/functionObjects/utilities/areaWrite/areaWrite.H b/src/functionObjects/utilities/areaWrite/areaWrite.H index 4c261640708..4974f9f56b1 100644 --- a/src/functionObjects/utilities/areaWrite/areaWrite.H +++ b/src/functionObjects/utilities/areaWrite/areaWrite.H @@ -75,8 +75,8 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef areaWrite_H -#define areaWrite_H +#ifndef Foam_areaWrite_H +#define Foam_areaWrite_H #include "fvMeshFunctionObject.H" #include "polyMesh.H" @@ -191,8 +191,8 @@ public: const dictionary& dict ); - //- Construct for given objectRegistry and dictionary - // allow the possibility to load fields from files + //- Construct for given objectRegistry and dictionary. + //- Allow the possibility to load fields from files areaWrite ( const word& name, -- GitLab