ENH: respect IOobject::readOpt in hexRef8 constructor

This commit is contained in:
mattijs
2023-01-25 13:21:44 +00:00
committed by Mark Olesen
parent 505704d290
commit 16064b60e2
2 changed files with 44 additions and 18 deletions

View File

@ -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<const polyMesh&>(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);
}
}

View File

@ -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<refinementHistory> 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.