From 5d9456187d16e780cb788a2471029abf0177661e Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Wed, 11 May 2022 17:39:18 +0200 Subject: [PATCH] ENH: zero tag for constructing various IO types - for int64 compilations this disambiguates between '0' as int32 (size) or as bool 'false' for local processor validity Eg, IOList list(io, 0); <- With label-size 64: is this bool or label? IOList list(io, Zero); <- Size = 0 (int32/int64), not a bool --- .../IOobjects/CompactIOField/CompactIOField.C | 32 +++++++++++++++---- .../IOobjects/CompactIOField/CompactIOField.H | 18 ++++++----- .../IOobjects/CompactIOList/CompactIOList.C | 13 ++++++++ .../IOobjects/CompactIOList/CompactIOList.H | 9 ++++-- .../db/IOobjects/GlobalIOList/GlobalIOList.C | 18 +++++++++-- .../db/IOobjects/GlobalIOList/GlobalIOList.H | 9 ++++-- src/OpenFOAM/db/IOobjects/IOField/IOField.C | 12 +++++++ src/OpenFOAM/db/IOobjects/IOField/IOField.H | 11 ++++--- src/OpenFOAM/db/IOobjects/IOList/IOList.C | 12 +++++++ src/OpenFOAM/db/IOobjects/IOList/IOList.H | 9 ++++-- 10 files changed, 113 insertions(+), 30 deletions(-) diff --git a/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.C b/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.C index 027ccc53eaf..c5b082cca77 100644 --- a/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.C +++ b/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation - Copyright (C) 2018-2020 OpenCFD Ltd. + Copyright (C) 2018-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -51,9 +51,9 @@ void Foam::CompactIOField<T, BaseType>::readFromStream(const bool valid) else { FatalIOErrorInFunction(is) - << "unexpected class name " << headerClassName() - << " expected " << typeName << " or " << IOField<T>::typeName - << endl + << "Unexpected class name " << headerClassName() + << " expected " << typeName + << " or " << IOField<T>::typeName << nl << " while reading object " << name() << exit(FatalIOError); } @@ -104,7 +104,27 @@ template<class T, class BaseType> Foam::CompactIOField<T, BaseType>::CompactIOField ( const IOobject& io, - const label size + Foam::zero +) +: + regIOobject(io) +{ + if + ( + io.readOpt() == IOobject::MUST_READ + || (io.readOpt() == IOobject::READ_IF_PRESENT && headerOk()) + ) + { + readFromStream(); + } +} + + +template<class T, class BaseType> +Foam::CompactIOField<T, BaseType>::CompactIOField +( + const IOobject& io, + const label len ) : regIOobject(io) @@ -119,7 +139,7 @@ Foam::CompactIOField<T, BaseType>::CompactIOField } else { - Field<T>::setSize(size); + Field<T>::resize(len); } } diff --git a/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.H b/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.H index 09b6fb943fe..d4e9b193f72 100644 --- a/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.H +++ b/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -39,18 +39,17 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef CompactIOField_H -#define CompactIOField_H +#ifndef Foam_CompactIOField_H +#define Foam_CompactIOField_H #include "IOField.H" -#include "regIOobject.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -// Forward declarations +// Forward Declarations template<class T, class BaseType> class CompactIOField; template<class T, class BaseType> Istream& operator>> @@ -94,11 +93,14 @@ public: //- Construct from IOobject explicit CompactIOField(const IOobject& io); - //- Construct from IOobject; does local processor require reading? + //- Construct from IOobject, with local processor conditional reading CompactIOField(const IOobject& io, const bool valid); - //- Construct from IOobject and size - CompactIOField(const IOobject& io, const label size); + //- Construct from IOobject and zero size (if not read) + CompactIOField(const IOobject& io, Foam::zero); + + //- Construct from IOobject and size (if not read) + CompactIOField(const IOobject& io, const label len); //- Construct from IOobject and a List/Field content CompactIOField(const IOobject& io, const UList<T>& content); diff --git a/src/OpenFOAM/db/IOobjects/CompactIOList/CompactIOList.C b/src/OpenFOAM/db/IOobjects/CompactIOList/CompactIOList.C index fcedb1ced5c..32620ffd08d 100644 --- a/src/OpenFOAM/db/IOobjects/CompactIOList/CompactIOList.C +++ b/src/OpenFOAM/db/IOobjects/CompactIOList/CompactIOList.C @@ -103,6 +103,19 @@ Foam::CompactIOList<T, BaseType>::CompactIOList(const IOobject& io) } +template<class T, class BaseType> +Foam::CompactIOList<T, BaseType>::CompactIOList +( + const IOobject& io, + Foam::zero +) +: + regIOobject(io) +{ + readContents(); +} + + template<class T, class BaseType> Foam::CompactIOList<T, BaseType>::CompactIOList ( diff --git a/src/OpenFOAM/db/IOobjects/CompactIOList/CompactIOList.H b/src/OpenFOAM/db/IOobjects/CompactIOList/CompactIOList.H index b609985bdf1..b3357a4ee2c 100644 --- a/src/OpenFOAM/db/IOobjects/CompactIOList/CompactIOList.H +++ b/src/OpenFOAM/db/IOobjects/CompactIOList/CompactIOList.H @@ -67,7 +67,7 @@ template<class T, class BaseType> Ostream& operator<< ); /*---------------------------------------------------------------------------*\ - Class CompactIOList Declaration + Class CompactIOList Declaration \*---------------------------------------------------------------------------*/ template<class T, class BaseType> @@ -106,6 +106,9 @@ public: //- Construct from IOobject explicit CompactIOList(const IOobject& io); + //- Construct from IOobject and zero size (if not read) + CompactIOList(const IOobject& io, Foam::zero); + //- Construct from IOobject and default length of CompactIOList CompactIOList(const IOobject& io, const label len); @@ -115,9 +118,9 @@ public: //- Construct by transferring the List content CompactIOList(const IOobject& io, List<T>&& content); - // Destructor - virtual ~CompactIOList() = default; + //- Destructor + virtual ~CompactIOList() = default; // Member Functions diff --git a/src/OpenFOAM/db/IOobjects/GlobalIOList/GlobalIOList.C b/src/OpenFOAM/db/IOobjects/GlobalIOList/GlobalIOList.C index 3c5988a24aa..c73ff16cba2 100644 --- a/src/OpenFOAM/db/IOobjects/GlobalIOList/GlobalIOList.C +++ b/src/OpenFOAM/db/IOobjects/GlobalIOList/GlobalIOList.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015 OpenFOAM Foundation - Copyright (C) 2016-2018 OpenCFD Ltd. + Copyright (C) 2016-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -43,7 +43,19 @@ Foam::GlobalIOList<Type>::GlobalIOList(const IOobject& io) template<class Type> -Foam::GlobalIOList<Type>::GlobalIOList(const IOobject& io, const label size) +Foam::GlobalIOList<Type>::GlobalIOList(const IOobject& io, Foam::zero) +: + regIOobject(io) +{ + // Check for MUST_READ_IF_MODIFIED + warnNoRereading<GlobalIOList<Type>>(); + + readHeaderOk(IOstream::BINARY, typeName); +} + + +template<class Type> +Foam::GlobalIOList<Type>::GlobalIOList(const IOobject& io, const label len) : regIOobject(io) { @@ -52,7 +64,7 @@ Foam::GlobalIOList<Type>::GlobalIOList(const IOobject& io, const label size) if (!readHeaderOk(IOstream::BINARY, typeName)) { - List<Type>::setSize(size); + List<Type>::resize(len); } } diff --git a/src/OpenFOAM/db/IOobjects/GlobalIOList/GlobalIOList.H b/src/OpenFOAM/db/IOobjects/GlobalIOList/GlobalIOList.H index 2cf6f9e39f8..a38a1097f43 100644 --- a/src/OpenFOAM/db/IOobjects/GlobalIOList/GlobalIOList.H +++ b/src/OpenFOAM/db/IOobjects/GlobalIOList/GlobalIOList.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015-2017 OpenFOAM Foundation - Copyright (C) 2018 OpenCFD Ltd. + Copyright (C) 2018-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -69,8 +69,11 @@ public: //- Construct from IOobject explicit GlobalIOList(const IOobject& io); - //- Construct from IOobject - GlobalIOList(const IOobject& io, const label size); + //- Construct from IOobject and zero size (if not read) + GlobalIOList(const IOobject& io, Foam::zero); + + //- Construct from IOobject and list size (if not read) + GlobalIOList(const IOobject& io, const label len); //- Construct from IOobject and a List GlobalIOList(const IOobject& io, const UList<Type>& content); diff --git a/src/OpenFOAM/db/IOobjects/IOField/IOField.C b/src/OpenFOAM/db/IOobjects/IOField/IOField.C index bb84a52e0c8..c4edcd27daf 100644 --- a/src/OpenFOAM/db/IOobjects/IOField/IOField.C +++ b/src/OpenFOAM/db/IOobjects/IOField/IOField.C @@ -102,6 +102,18 @@ Foam::IOField<Type>::IOField(const IOobject& io, const bool valid) } +template<class Type> +Foam::IOField<Type>::IOField(const IOobject& io, Foam::zero) +: + regIOobject(io) +{ + // Check for MUST_READ_IF_MODIFIED + warnNoRereading<IOField<Type>>(); + + readContents(); +} + + template<class Type> Foam::IOField<Type>::IOField(const IOobject& io, const label len) : diff --git a/src/OpenFOAM/db/IOobjects/IOField/IOField.H b/src/OpenFOAM/db/IOobjects/IOField/IOField.H index 7dc71fdf145..e7ac808430d 100644 --- a/src/OpenFOAM/db/IOobjects/IOField/IOField.H +++ b/src/OpenFOAM/db/IOobjects/IOField/IOField.H @@ -79,13 +79,16 @@ public: //- Construct from IOobject explicit IOField(const IOobject& io); - //- Construct from IOobject; does local processor require reading? + //- Construct from IOobject, with local processor conditional reading IOField(const IOobject& io, const bool valid); - //- Construct from IOobject and size (does not set values) - IOField(const IOobject& io, const label size); + //- Construct from IOobject and zero size (if not read) + IOField(const IOobject& io, Foam::zero); - //- Construct from IOobject and a List/Field content + //- Construct from IOobject and field size (if not read) + IOField(const IOobject& io, const label len); + + //- Construct from IOobject and copy of List/Field content IOField(const IOobject& io, const UList<Type>& content); //- Construct by transferring the Field content diff --git a/src/OpenFOAM/db/IOobjects/IOList/IOList.C b/src/OpenFOAM/db/IOobjects/IOList/IOList.C index a058b524428..79c9cd690e8 100644 --- a/src/OpenFOAM/db/IOobjects/IOList/IOList.C +++ b/src/OpenFOAM/db/IOobjects/IOList/IOList.C @@ -65,6 +65,18 @@ Foam::IOList<T>::IOList(const IOobject& io) } +template<class T> +Foam::IOList<T>::IOList(const IOobject& io, Foam::zero) +: + regIOobject(io) +{ + // Check for MUST_READ_IF_MODIFIED + warnNoRereading<IOList<T>>(); + + readContents(); +} + + template<class T> Foam::IOList<T>::IOList(const IOobject& io, const label len) : diff --git a/src/OpenFOAM/db/IOobjects/IOList/IOList.H b/src/OpenFOAM/db/IOobjects/IOList/IOList.H index 3894f96a3df..d22d73e7c52 100644 --- a/src/OpenFOAM/db/IOobjects/IOList/IOList.H +++ b/src/OpenFOAM/db/IOobjects/IOList/IOList.H @@ -79,13 +79,16 @@ public: //- Construct from IOobject explicit IOList(const IOobject& io); - //- Construct from IOobject and size of IOList + //- Construct from IOobject and zero size (if not read) + IOList(const IOobject& io, Foam::zero); + + //- Construct from IOobject and list size (if not read) IOList(const IOobject& io, const label len); - //- Construct from IOobject and a copy of UList content + //- Construct from IOobject and a copy of content IOList(const IOobject& io, const UList<T>& content); - //- Construct by transferring the List content + //- Construct by transferring the content IOList(const IOobject& io, List<T>&& content); -- GitLab