diff --git a/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.C b/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.C index 027ccc53eaf472730daa11631bf72ebdf360e9fc..c5b082cca7703530db99db7c56c579190a8eca93 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 09b6fb943fe3921a5ca8a6344c74934414b66036..d4e9b193f725f51fe6f13b2e591fe4fde0d5a22e 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 fcedb1ced5c588d1a8ed49bcd751939d71db6412..32620ffd08d145431e4143106d4248a8e079688c 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 b609985bdf1da2fd58daae6f6bb7aae48cec8aec..b3357a4ee2c0799d377c916c14fa2a884385950d 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 3c5988a24aacf03ce42c6cff0a4402b2483b831c..c73ff16cba2ac099bc5ac6124ea3c5713e4ffa15 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 2cf6f9e39f82f2150cf0471b3c08d9fdecfcf8ef..a38a1097f43afeb0fdd5e18e19c7b094bea4ed95 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 bb84a52e0c863de0382470fcef2c6951bc0812d2..c4edcd27daf90a7f0d2fa69dc7c6f14e116d99c5 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 7dc71fdf145c67bc2a9661eab673f9fead60f703..e7ac808430da9e66c28d9ab60126b236765ee7ee 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 a058b524428cea08a64439b8704a64c59d285f8e..79c9cd690e8751d789a38f765a3e142f3fe09a93 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 3894f96a3dfb8b6f0dccee57139953c603025920..d22d73e7c524543f1f316aec9c911effb1d9c5d9 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);