diff --git a/src/finiteArea/faMatrices/faMatrix/faMatrix.C b/src/finiteArea/faMatrices/faMatrix/faMatrix.C index 55aa863bf71724c4fcecbb41c0c21b080b183645..074cc0693a88ec08fc4bf641bba6baacdaab338e 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 7a0efb3f9f0721f3367106673675ddfc1bb3b16f..8e09506272805862e77c3f37b4cc286c002374ef 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 c64430008132fec961699ac7c21b5c2550109657..49d35817f21923170debfad67bc2a23cd22c8226 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 424471ddc723e3b29d525be42ffafd2c3e59e43d..cecb0e2fac3e5201c51021cbae163ce3df4d9ca8 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 4c26164070827cbae16202af56975dd733d4d18f..4974f9f56b19e9e9548595b034486c93a2876017 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,