From 69be54107d2247bb12c40f9cc86fe7a010ecf76a Mon Sep 17 00:00:00 2001 From: mattijs Date: Tue, 8 Nov 2022 11:17:46 +0000 Subject: [PATCH] ENH: IOobject headerClassName now initialised to empty value - was previously populated with "IOobject" (the typeName) but then cannot easily detect if the object was actually read. Also clear the headerClassName on a failed read BUG: parallel inconsistency in regIOobject::readHeaderOk - headerOk() checked with master, but possible parallel operations within it --- .../preProcessing/setExprFields/setExprFields.C | 12 ++++++------ src/OpenFOAM/db/IOobject/IOobject.C | 15 ++++++--------- src/OpenFOAM/db/IOobject/IOobjectReadHeader.C | 3 +++ src/OpenFOAM/db/regIOobject/regIOobjectRead.C | 2 ++ 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/applications/utilities/preProcessing/setExprFields/setExprFields.C b/applications/utilities/preProcessing/setExprFields/setExprFields.C index 592c65fc70..bc367fa2bf 100644 --- a/applications/utilities/preProcessing/setExprFields/setExprFields.C +++ b/applications/utilities/preProcessing/setExprFields/setExprFields.C @@ -272,18 +272,18 @@ void evaluate ); io.typeHeaderOk(false); - oldFieldType = io.headerClassName(); - - if (oldFieldType == IOobject::typeName) + if (!io.hasHeaderClass() || io.isHeaderClass()) { FatalErrorInFunction - << "Field " << fieldName << "(type: " << oldFieldType - << ") seems to be missing. Use 'create'" << nl + << "Field '" << fieldName + << "' seems to be missing. Use 'create'" << nl << exit(FatalError); } + oldFieldType = io.headerClassName(); + Info<< "Modify field: " << fieldName - << " (type " << oldFieldType << ')'; + << " (type: " << oldFieldType << ')'; } diff --git a/src/OpenFOAM/db/IOobject/IOobject.C b/src/OpenFOAM/db/IOobject/IOobject.C index b88c622922..e3e2913929 100644 --- a/src/OpenFOAM/db/IOobject/IOobject.C +++ b/src/OpenFOAM/db/IOobject/IOobject.C @@ -321,7 +321,7 @@ Foam::IOobject::IOobject sizeofScalar_(static_cast(sizeof(scalar))), name_(name), - headerClassName_(typeName), + headerClassName_(), note_(), instance_(instance), local_(), @@ -331,8 +331,7 @@ Foam::IOobject::IOobject if (objectRegistry::debug) { InfoInFunction - << "Constructing IOobject called " << name_ - << " of type " << headerClassName_ << endl; + << "Constructing IOobject: " << name_ << endl; } } @@ -352,7 +351,7 @@ Foam::IOobject::IOobject sizeofScalar_(static_cast(sizeof(scalar))), name_(name), - headerClassName_(typeName), + headerClassName_(), note_(), instance_(instance), local_(local), @@ -362,8 +361,7 @@ Foam::IOobject::IOobject if (objectRegistry::debug) { InfoInFunction - << "Constructing IOobject called " << name_ - << " of type " << headerClassName_ << endl; + << "Constructing IOobject: " << name_ << endl; } } @@ -381,7 +379,7 @@ Foam::IOobject::IOobject sizeofScalar_(static_cast(sizeof(scalar))), name_(), - headerClassName_(typeName), + headerClassName_(), note_(), instance_(), local_(), @@ -398,8 +396,7 @@ Foam::IOobject::IOobject if (objectRegistry::debug) { InfoInFunction - << "Constructing IOobject called " << name_ - << " of type " << headerClassName_ << endl; + << "Constructing IOobject: " << name_ << endl; } } diff --git a/src/OpenFOAM/db/IOobject/IOobjectReadHeader.C b/src/OpenFOAM/db/IOobject/IOobjectReadHeader.C index 36ff0f2b8d..94d764f079 100644 --- a/src/OpenFOAM/db/IOobject/IOobjectReadHeader.C +++ b/src/OpenFOAM/db/IOobject/IOobjectReadHeader.C @@ -120,6 +120,9 @@ bool Foam::IOobject::readHeader(dictionary& headerDict, Istream& is) writeHeader(Info); + // Mark as not read + headerClassName_.clear(); + return false; } diff --git a/src/OpenFOAM/db/regIOobject/regIOobjectRead.C b/src/OpenFOAM/db/regIOobject/regIOobjectRead.C index 56c94bc2f5..9de632967e 100644 --- a/src/OpenFOAM/db/regIOobject/regIOobjectRead.C +++ b/src/OpenFOAM/db/regIOobject/regIOobjectRead.C @@ -60,7 +60,9 @@ bool Foam::regIOobject::readHeaderOk { if (Pstream::master()) { + const bool oldParRun = Pstream::parRun(false); isHeaderOk = headerOk(); + Pstream::parRun(oldParRun); } Pstream::broadcast(isHeaderOk); }