From 16064b60e2c98b68570ee926c382c3d64f5fe7b4 Mon Sep 17 00:00:00 2001 From: mattijs Date: Wed, 25 Jan 2023 13:21:44 +0000 Subject: [PATCH] ENH: respect IOobject::readOpt in hexRef8 constructor --- .../polyTopoChange/hexRef8/hexRef8Data.C | 44 +++++++++++++++---- .../polyTopoChange/hexRef8/hexRef8Data.H | 18 ++++---- 2 files changed, 44 insertions(+), 18 deletions(-) diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8Data.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8Data.C index 38bba1898b..78bb1bfe48 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8Data.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8Data.C @@ -40,6 +40,16 @@ License Foam::hexRef8Data::hexRef8Data(const IOobject& io) { + if + ( + // Or: !io.anyRead() ? + io.readOpt() != IOobject::MUST_READ + && io.readOpt() != IOobject::LAZY_READ + ) + { + return; + } + { typedef labelIOList Type; IOobject rio(io, "cellLevel"); @@ -237,8 +247,7 @@ void Foam::hexRef8Data::sync(const IOobject& io) { const polyMesh& mesh = dynamic_cast(io.db()); - bool hasCellLevel = returnReduceOr(bool(cellLevelPtr_)); - if (hasCellLevel && !cellLevelPtr_) + if (returnReduceOr(cellLevelPtr_) && !cellLevelPtr_) { IOobject rio(io, "cellLevel"); rio.readOpt(IOobject::NO_READ); @@ -247,9 +256,13 @@ void Foam::hexRef8Data::sync(const IOobject& io) new labelIOList(rio, labelList(mesh.nCells(), Zero)) ); } + // Take over IOobject settings + if (cellLevelPtr_) + { + cellLevelPtr_->IOobjectOption::operator=(io); + } - bool hasPointLevel = returnReduceOr(bool(pointLevelPtr_)); - if (hasPointLevel && !pointLevelPtr_) + if (returnReduceOr(pointLevelPtr_) && !pointLevelPtr_) { IOobject rio(io, "pointLevel"); rio.readOpt(IOobject::NO_READ); @@ -258,12 +271,16 @@ void Foam::hexRef8Data::sync(const IOobject& io) new labelIOList(rio, labelList(mesh.nPoints(), Zero)) ); } + // Take over IOobject settings + if (pointLevelPtr_) + { + pointLevelPtr_->IOobjectOption::operator=(io); + } - bool hasLevel0Edge = returnReduceOr(bool(level0EdgePtr_)); - if (hasLevel0Edge) + if (returnReduceOr(level0EdgePtr_)) { // Get master length - scalar masterLen = (Pstream::master() ? level0EdgePtr_().value() : 0); + scalar masterLen = (UPstream::master() ? level0EdgePtr_().value() : 0); Pstream::broadcast(masterLen); if (!level0EdgePtr_) { @@ -275,14 +292,23 @@ void Foam::hexRef8Data::sync(const IOobject& io) ); } } + // Take over IOobject settings + if (level0EdgePtr_) + { + level0EdgePtr_->IOobjectOption::operator=(io); + } - bool hasHistory = returnReduceOr(bool(refHistoryPtr_)); - if (hasHistory && !refHistoryPtr_) + if (returnReduceOr(refHistoryPtr_) && !refHistoryPtr_) { IOobject rio(io, "refinementHistory"); rio.readOpt(IOobject::NO_READ); refHistoryPtr_.reset(new refinementHistory(rio, mesh.nCells(), true)); } + // Take over IOobject settings + if (refHistoryPtr_) + { + refHistoryPtr_->IOobjectOption::operator=(io); + } } diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8Data.H b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8Data.H index 39627b8496..8363c3839a 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8Data.H +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8Data.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015-2016 OpenFOAM Foundation - Copyright (C) 2017-2020 OpenCFD Ltd. + Copyright (C) 2017-2023 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -36,8 +36,8 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef hexRef8Data_H -#define hexRef8Data_H +#ifndef Foam_hexRef8Data_H +#define Foam_hexRef8Data_H #include "labelIOList.H" #include "uniformDimensionedFields.H" @@ -71,7 +71,9 @@ class hexRef8Data autoPtr refHistoryPtr_; - // Private Member Functions +public: + + // Generated Methods //- No copy construct hexRef8Data(const hexRef8Data&) = delete; @@ -80,12 +82,10 @@ class hexRef8Data void operator=(const hexRef8Data&) = delete; -public: - // Constructors - //- Construct read. Has special provision for only some processors - //- having the files so can be used in redistribution. + //- Construct from IOobject, reading if MUST_READ or LAZY_READ. + //- Use sync() if used in redistributing to different number of ranks explicit hexRef8Data(const IOobject& io); //- Construct as subset @@ -114,7 +114,7 @@ public: // Member Functions //- Parallel synchronise. This enforces valid objects on all processors - // (even if they don't have a mesh). Used by redistributePar. + //- (even if they don't have a mesh). Used by redistributePar. void sync(const IOobject& io); //- Update local numbering for changed mesh.