From 4609aa38e1a110636e122697cec8cde9630d2562 Mon Sep 17 00:00:00 2001 From: mattijs Date: Mon, 4 Dec 2023 14:38:45 +0000 Subject: [PATCH] BUG: redistributePar: fix global object headerOk. See !605 - mesh/parallel/cavity not yet working since zero-sized mesh not written on new processors. --- .../redistributePar/redistributePar.C | 11 ++- src/OpenFOAM/db/IOobject/IOobjectTemplates.C | 70 +++++++++++++------ 2 files changed, 59 insertions(+), 22 deletions(-) diff --git a/applications/utilities/parallelProcessing/redistributePar/redistributePar.C b/applications/utilities/parallelProcessing/redistributePar/redistributePar.C index 6f36d2725e..caef6f9611 100644 --- a/applications/utilities/parallelProcessing/redistributePar/redistributePar.C +++ b/applications/utilities/parallelProcessing/redistributePar/redistributePar.C @@ -110,7 +110,8 @@ using namespace Foam; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -const int debug(::Foam::debug::debugSwitch("redistributePar", 0)); +// Use -verbose -verbose to switch on debug info. TBD. +int debug(::Foam::debug::debugSwitch("redistributePar", 0)); #define InfoOrPout (::debug ? Pout : Info()) @@ -1307,6 +1308,14 @@ int main(int argc, char *argv[]) if (optVerbose) { + if (optVerbose == 2) + { + WarningInFunction + << "-verbose -verbose switches on full debugging" + << nl << endl; + ::debug = 1; + } + // Report on output faMeshDistributor::verbose_ = 1; parPointFieldDistributor::verbose_ = 1; diff --git a/src/OpenFOAM/db/IOobject/IOobjectTemplates.C b/src/OpenFOAM/db/IOobject/IOobjectTemplates.C index d8218133bf..f83a5fcba2 100644 --- a/src/OpenFOAM/db/IOobject/IOobjectTemplates.C +++ b/src/OpenFOAM/db/IOobject/IOobjectTemplates.C @@ -59,30 +59,58 @@ bool Foam::IOobject::typeHeaderOk // Determine local status bool ok = false; - fileName fName; - if (!masterOnly || UPstream::master()) - { - fName = typeFilePath(*this, search); - ok = fp.readHeader(*this, fName, Type::typeName); - } - - if (ok && checkType && headerClassName_ != Type::typeName) - { - ok = false; - if (verbose) - { - WarningInFunction - << "Unexpected class name \"" << headerClassName_ - << "\" expected \"" << Type::typeName - << "\" when reading " << fName << endl; - } - } - - // If masterOnly make sure all processors know about it if (masterOnly) { - Pstream::broadcast(ok); + if (UPstream::master()) + { + // Force master-only header reading + const bool oldParRun = UPstream::parRun(false); + const fileName fName(typeFilePath(*this, search)); + ok = fp.readHeader(*this, fName, Type::typeName); + UPstream::parRun(oldParRun); + + if (ok && checkType && headerClassName_ != Type::typeName) + { + ok = false; + if (verbose) + { + WarningInFunction + << "Unexpected class name \"" << headerClassName_ + << "\" expected \"" << Type::typeName + << "\" when reading " << fName << endl; + } + } + } + + // If masterOnly make sure all processors know about the read + // information. Note: should ideally be inside fileHandler... + Pstream::broadcasts + ( + fp.comm(), + ok, + headerClassName_, + note_ + ); + } + else + { + const fileName fName(typeFilePath(*this, search)); + + // All read header + ok = fp.readHeader(*this, fName, Type::typeName); + + if (ok && checkType && headerClassName_ != Type::typeName) + { + ok = false; + if (verbose) + { + WarningInFunction + << "Unexpected class name \"" << headerClassName_ + << "\" expected \"" << Type::typeName + << "\" when reading " << fName << endl; + } + } } return ok;