From aaaa80589f3d0e46fc45768b7e520635bb26cc49 Mon Sep 17 00:00:00 2001 From: Mattijs Janssens Date: Thu, 12 Dec 2024 16:21:59 +0000 Subject: [PATCH] BUG: READ_IF_PRESENT: return false if not read. Fixes #3193 --- .../IOobjects/CompactIOField/CompactIOField.C | 66 ++++++++----------- src/OpenFOAM/db/IOobjects/IOField/IOField.C | 30 +++------ .../plenumPressureFvPatchScalarField.C | 14 +++- 3 files changed, 49 insertions(+), 61 deletions(-) diff --git a/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.C b/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.C index 8f5a6c2d97..c0da5cd9bf 100644 --- a/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.C +++ b/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.C @@ -34,50 +34,38 @@ License template bool Foam::CompactIOField::readIOcontents(bool readOnProc) { - if (readOpt() == IOobject::MUST_READ) + if (isReadRequired() || (isReadOptional() && headerOk())) { - // Reading - } - else if (isReadOptional()) - { - if (!headerOk()) + // Do reading + Istream& is = readStream(word::null, readOnProc); + + if (readOnProc) { - readOnProc = false; + if (headerClassName() == IOField::typeName) + { + is >> static_cast&>(*this); + close(); + } + else if (headerClassName() == typeName) + { + is >> *this; + close(); + } + else + { + FatalIOErrorInFunction(is) + << "Unexpected class name " << headerClassName() + << " expected " << typeName + << " or " << IOField::typeName << nl + << " while reading object " << name() + << exit(FatalIOError); + } } - } - else - { - return false; + + return true; } - - // Do reading - Istream& is = readStream(word::null, readOnProc); - - if (readOnProc) - { - if (headerClassName() == IOField::typeName) - { - is >> static_cast&>(*this); - close(); - } - else if (headerClassName() == typeName) - { - is >> *this; - close(); - } - else - { - FatalIOErrorInFunction(is) - << "Unexpected class name " << headerClassName() - << " expected " << typeName - << " or " << IOField::typeName << nl - << " while reading object " << name() - << exit(FatalIOError); - } - } - - return true; + return false; } diff --git a/src/OpenFOAM/db/IOobjects/IOField/IOField.C b/src/OpenFOAM/db/IOobjects/IOField/IOField.C index 89b3d2f848..e3588f81f0 100644 --- a/src/OpenFOAM/db/IOobjects/IOField/IOField.C +++ b/src/OpenFOAM/db/IOobjects/IOField/IOField.C @@ -33,32 +33,20 @@ License template bool Foam::IOField::readIOcontents(bool readOnProc) { - if (isReadRequired()) + if (isReadRequired() || (isReadOptional() && headerOk())) { - // Reading - } - else if (isReadOptional()) - { - if (!headerOk()) + // Do reading + Istream& is = readStream(typeName, readOnProc); + + if (readOnProc) { - readOnProc = false; + is >> *this; } - } - else - { - return false; + close(); + return true; } - - // Do reading - Istream& is = readStream(typeName, readOnProc); - - if (readOnProc) - { - is >> *this; - } - close(); - return true; + return false; } diff --git a/src/finiteVolume/fields/fvPatchFields/derived/plenumPressure/plenumPressureFvPatchScalarField.C b/src/finiteVolume/fields/fvPatchFields/derived/plenumPressure/plenumPressureFvPatchScalarField.C index 364e24d3aa..4b5dc3559f 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/plenumPressure/plenumPressureFvPatchScalarField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/plenumPressure/plenumPressureFvPatchScalarField.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2016-2017 OpenFOAM Foundation - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020,2024 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -75,12 +75,15 @@ Foam::plenumPressureFvPatchScalarField::plenumPressureFvPatchScalarField supplyTotalTemperature_(dict.get("supplyTotalTemperature")), plenumVolume_(dict.get("plenumVolume")), plenumDensity_(dict.get("plenumDensity")), + plenumDensityOld_(1.0), plenumTemperature_(dict.get("plenumTemperature")), + plenumTemperatureOld_(300.0), rho_(1.0), hasRho_(false), inletAreaRatio_(dict.get("inletAreaRatio")), inletDischargeCoefficient_(dict.get("inletDischargeCoefficient")), timeScale_(dict.getOrDefault("timeScale", 0)), + timeIndex_(-1), phiName_(dict.getOrDefault("phi", "phi")), UName_(dict.getOrDefault("U", "U")) { @@ -103,12 +106,15 @@ Foam::plenumPressureFvPatchScalarField::plenumPressureFvPatchScalarField supplyTotalTemperature_(ptf.supplyTotalTemperature_), plenumVolume_(ptf.plenumVolume_), plenumDensity_(ptf.plenumDensity_), + plenumDensityOld_(ptf.plenumDensityOld_), plenumTemperature_(ptf.plenumTemperature_), + plenumTemperatureOld_(ptf.plenumTemperatureOld_), rho_(ptf.rho_), hasRho_(ptf.hasRho_), inletAreaRatio_(ptf.inletAreaRatio_), inletDischargeCoefficient_(ptf.inletDischargeCoefficient_), timeScale_(ptf.timeScale_), + timeIndex_(ptf.timeIndex_), phiName_(ptf.phiName_), UName_(ptf.UName_) {} @@ -126,12 +132,15 @@ Foam::plenumPressureFvPatchScalarField::plenumPressureFvPatchScalarField supplyTotalTemperature_(tppsf.supplyTotalTemperature_), plenumVolume_(tppsf.plenumVolume_), plenumDensity_(tppsf.plenumDensity_), + plenumDensityOld_(tppsf.plenumDensityOld_), plenumTemperature_(tppsf.plenumTemperature_), + plenumTemperatureOld_(tppsf.plenumTemperatureOld_), rho_(tppsf.rho_), hasRho_(tppsf.hasRho_), inletAreaRatio_(tppsf.inletAreaRatio_), inletDischargeCoefficient_(tppsf.inletDischargeCoefficient_), timeScale_(tppsf.timeScale_), + timeIndex_(tppsf.timeIndex_), phiName_(tppsf.phiName_), UName_(tppsf.UName_) {} @@ -150,12 +159,15 @@ Foam::plenumPressureFvPatchScalarField::plenumPressureFvPatchScalarField supplyTotalTemperature_(tppsf.supplyTotalTemperature_), plenumVolume_(tppsf.plenumVolume_), plenumDensity_(tppsf.plenumDensity_), + plenumDensityOld_(tppsf.plenumDensityOld_), plenumTemperature_(tppsf.plenumTemperature_), + plenumTemperatureOld_(tppsf.plenumTemperatureOld_), rho_(tppsf.rho_), hasRho_(tppsf.hasRho_), inletAreaRatio_(tppsf.inletAreaRatio_), inletDischargeCoefficient_(tppsf.inletDischargeCoefficient_), timeScale_(tppsf.timeScale_), + timeIndex_(tppsf.timeIndex_), phiName_(tppsf.phiName_), UName_(tppsf.UName_) {}