ENH: store sorted mesh pointers for vtkWrite, areaWrite

- replaces HashTable of pointers
This commit is contained in:
Mark Olesen
2023-07-18 16:23:00 +02:00
parent 945e3e41b1
commit 4dfafc3c36
5 changed files with 24 additions and 28 deletions

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2019-2022 OpenCFD Ltd. Copyright (C) 2019-2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -148,9 +148,6 @@ bool Foam::areaWrite::read(const dictionary& dict)
verbose_ = dict.getOrDefault("verbose", false); verbose_ = dict.getOrDefault("verbose", false);
// All possible area meshes for the given fvMesh region
meshes_ = obr().lookupClass<faMesh>();
dict.readIfPresent("areas", selectAreas_); dict.readIfPresent("areas", selectAreas_);
if (selectAreas_.empty()) if (selectAreas_.empty())
@ -162,19 +159,19 @@ bool Foam::areaWrite::read(const dictionary& dict)
if (available.size()) if (available.size())
{ {
areaName = available.first(); areaName = available.front();
} }
} }
if (!areaName.empty()) if (!areaName.empty())
{ {
selectAreas_.resize(1); selectAreas_.resize(1);
selectAreas_.first() = areaName; selectAreas_.front() = areaName;
} }
} }
// Restrict to specified meshes // Restrict to specified meshes
meshes_.filterKeys(selectAreas_); meshes_ = obr().csorted<faMesh>(selectAreas_);
dict.readEntry("fields", fieldSelection_); dict.readEntry("fields", fieldSelection_);
fieldSelection_.uniq(); fieldSelection_.uniq();
@ -188,8 +185,10 @@ bool Foam::areaWrite::read(const dictionary& dict)
surfaceWriter::formatOptions(dict, writerType) surfaceWriter::formatOptions(dict, writerType)
); );
for (const word& areaName : meshes_.keys()) for (const faMesh& areaMesh : meshes_)
{ {
const word& areaName = areaMesh.name();
// Define surface writer, but do NOT yet attach a surface // Define surface writer, but do NOT yet attach a surface
auto surfWriter = surfaceWriter::New(writerType, writerOptions); auto surfWriter = surfaceWriter::New(writerType, writerOptions);
@ -222,9 +221,9 @@ bool Foam::areaWrite::write()
DynamicList<label> missed(fieldSelection_.size()); DynamicList<label> missed(fieldSelection_.size());
for (const word& areaName : meshes_.sortedToc()) for (const faMesh& areaMesh : meshes_)
{ {
const faMesh& areaMesh = *meshes_[areaName]; const word& areaName = areaMesh.name();
polySurface* surfptr = surfaces_->getObjectPtr<polySurface>(areaName); polySurface* surfptr = surfaces_->getObjectPtr<polySurface>(areaName);

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2019-2021 OpenCFD Ltd. Copyright (C) 2019-2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -128,8 +128,8 @@ class areaWrite
//- Names of fields to write //- Names of fields to write
wordRes fieldSelection_; wordRes fieldSelection_;
//- Pointers to the requested mesh regions //- Pointers to the requested mesh regions (sorted)
HashTable<const faMesh*> meshes_; UPtrList<const faMesh> meshes_;
//- Hold intermediate surfaces. //- Hold intermediate surfaces.
// The faMesh has an indirect face list but we require real ones. // The faMesh has an indirect face list but we require real ones.

View File

@ -289,8 +289,9 @@ bool Foam::functionObjects::vtkWrite::write()
Info<< name() << " output Time: " << time_.timeName() << nl; Info<< name() << " output Time: " << time_.timeName() << nl;
label regioni = 0; label regioni = 0;
for (const word& regionName : meshes_.sortedToc()) for (const fvMesh& mesh : meshes_)
{ {
const word& regionName = mesh.name();
const word& regionDir = polyMesh::regionName(regionName); const word& regionDir = polyMesh::regionName(regionName);
auto& meshProxy = meshSubsets_[regioni]; auto& meshProxy = meshSubsets_[regioni];

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2017-2022 OpenCFD Ltd. Copyright (C) 2017-2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -213,8 +213,8 @@ class vtkWrite
//- Dictionary of volume selections //- Dictionary of volume selections
dictionary selection_; dictionary selection_;
//- Pointers to the requested mesh regions //- Pointers to the requested mesh regions (sorted)
HashTable<const fvMesh*> meshes_; UPtrList<const fvMesh> meshes_;
//- Subsetting for meshes. //- Subsetting for meshes.
// Access index according to sorted mesh names. // Access index according to sorted mesh names.

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2018-2022 OpenCFD Ltd. Copyright (C) 2018-2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -98,10 +98,8 @@ bool Foam::functionObjects::vtkWrite::update()
vtuMappings_.resize(meshes_.size()); vtuMappings_.resize(meshes_.size());
label regioni = 0; label regioni = 0;
for (const word& regionName : meshes_.sortedToc()) for (const fvMesh& mesh : meshes_)
{ {
const fvMesh& mesh = *(meshes_[regionName]);
if (meshSubsets_.set(regioni)) if (meshSubsets_.set(regioni))
{ {
meshSubsets_[regioni].clear(); meshSubsets_[regioni].clear();
@ -149,29 +147,27 @@ bool Foam::functionObjects::vtkWrite::readSelection(const dictionary& dict)
{ {
meshSubsets_.clear(); meshSubsets_.clear();
vtuMappings_.clear(); vtuMappings_.clear();
meshes_.clear();
meshState_ = polyMesh::TOPO_CHANGE; meshState_ = polyMesh::TOPO_CHANGE;
// All possible meshes
meshes_ = time_.lookupClass<fvMesh>();
selectRegions_.clear(); selectRegions_.clear();
dict.readIfPresent("regions", selectRegions_); dict.readIfPresent("regions", selectRegions_);
if (selectRegions_.empty()) if (selectRegions_.empty())
{ {
selectRegions_.resize(1); selectRegions_.resize(1);
selectRegions_.first() = selectRegions_.front() =
dict.getOrDefault<word>("region", polyMesh::defaultRegion); dict.getOrDefault<word>("region", polyMesh::defaultRegion);
} }
// Restrict to specified meshes // Restrict to specified meshes
meshes_.filterKeys(selectRegions_); meshes_ = time_.csorted<fvMesh>(selectRegions_);
if (meshes_.empty()) if (meshes_.empty())
{ {
WarningInFunction WarningInFunction
<< "No mesh regions selected for function object " << name() << "No mesh regions selected for function object "
<< nl; << name() << nl;
} }
selectPatches_.clear(); selectPatches_.clear();