mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: store sorted mesh pointers for vtkWrite, areaWrite
- replaces HashTable of pointers
This commit is contained in:
@ -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);
|
||||||
|
|
||||||
|
|||||||
@ -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.
|
||||||
|
|||||||
@ -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];
|
||||||
|
|||||||
@ -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.
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user