diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.C b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.C index 9359883d01735b0feed401d124e29d15fb41e324..53ce51cc13a30e58ed5ce7fe5f218c1932e3570d 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.C +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.C @@ -81,14 +81,20 @@ DimensionedField<Type, GeoMesh>::DimensionedField ( const IOobject& io, const Mesh& mesh, - const dimensionSet& dims + const dimensionSet& dims, + const bool checkIOFlags ) : regIOobject(io), Field<Type>(GeoMesh::size(mesh)), mesh_(mesh), dimensions_(dims) -{} +{ + if (checkIOFlags) + { + readIfPresent(); + } +} template<class Type, class GeoMesh> @@ -96,14 +102,20 @@ DimensionedField<Type, GeoMesh>::DimensionedField ( const IOobject& io, const Mesh& mesh, - const dimensioned<Type>& dt + const dimensioned<Type>& dt, + const bool checkIOFlags ) : regIOobject(io), Field<Type>(GeoMesh::size(mesh), dt.value()), mesh_(mesh), dimensions_(dt.dimensions()) -{} +{ + if (checkIOFlags) + { + readIfPresent(); + } +} template<class Type, class GeoMesh> diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.H b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.H index 621114c7166156622a64f27fa92dc50ca4c2ccc1..4342d3a41db6e64003d178f3f1a656b370bb156d 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.H +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.H @@ -94,6 +94,11 @@ private: dimensionSet dimensions_; + // Private Member Functions + + void readIfPresent(const word& fieldDictEntry = "value"); + + public: //- Runtime type information @@ -122,7 +127,8 @@ public: ( const IOobject&, const Mesh& mesh, - const dimensionSet& + const dimensionSet&, + const bool checkIOFlags = true ); //- Construct from components @@ -130,7 +136,8 @@ public: ( const IOobject&, const Mesh& mesh, - const dimensioned<Type>& + const dimensioned<Type>&, + const bool checkIOFlags = true ); //- Construct from Istream @@ -141,12 +148,6 @@ public: const word& fieldDictEntry="value" ); - void readField - ( - const dictionary& fieldDict, - const word& fieldDictEntry="value" - ); - //- Construct as copy DimensionedField ( @@ -222,6 +223,12 @@ public: // Member Functions + void readField + ( + const dictionary& fieldDict, + const word& fieldDictEntry = "value" + ); + //- Return mesh inline const Mesh& mesh() const; diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldIO.C b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldIO.C index d5f84f59ce7cf6a38da70be20f3133d6c44285ac..86be3e985e0507c1b58353f3845cf4e57ed5adfa 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldIO.C +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldIO.C @@ -47,6 +47,21 @@ void DimensionedField<Type, GeoMesh>::readField } +template<class Type, class GeoMesh> +void DimensionedField<Type, GeoMesh>::readIfPresent(const word& fieldDictEntry) +{ + if + ( + (this->headerOk() && this->readOpt() == IOobject::READ_IF_PRESENT) + || this->readOpt() == IOobject::MUST_READ + || this->readOpt() == IOobject::MUST_READ_IF_MODIFIED + ) + { + readField(dictionary(readStream(typeName)), fieldDictEntry); + } +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class Type, class GeoMesh> diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C index fd86f6bd8c4dbc6ed0364c3908a4c222b19c0167..b77b68d1e88d7e52e412b9e947bc7330dec457c6 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C @@ -209,7 +209,7 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField const word& patchFieldType ) : - DimensionedField<Type, GeoMesh>(io, mesh, ds), + DimensionedField<Type, GeoMesh>(io, mesh, ds, false), timeIndex_(this->time().timeIndex()), field0Ptr_(NULL), fieldPrevIterPtr_(NULL), @@ -240,7 +240,7 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField const wordList& actualPatchTypes ) : - DimensionedField<Type, GeoMesh>(io, mesh, ds), + DimensionedField<Type, GeoMesh>(io, mesh, ds, false), timeIndex_(this->time().timeIndex()), field0Ptr_(NULL), fieldPrevIterPtr_(NULL), @@ -267,7 +267,7 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField const word& patchFieldType ) : - DimensionedField<Type, GeoMesh>(io, mesh, dt), + DimensionedField<Type, GeoMesh>(io, mesh, dt, false), timeIndex_(this->time().timeIndex()), field0Ptr_(NULL), fieldPrevIterPtr_(NULL), @@ -297,7 +297,7 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField const wordList& actualPatchTypes ) : - DimensionedField<Type, GeoMesh>(io, mesh, dt), + DimensionedField<Type, GeoMesh>(io, mesh, dt, false), timeIndex_(this->time().timeIndex()), field0Ptr_(NULL), fieldPrevIterPtr_(NULL), @@ -327,7 +327,7 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField const PtrList<PatchField<Type> >& ptfl ) : - DimensionedField<Type, GeoMesh>(io, mesh, ds, iField), + DimensionedField<Type, GeoMesh>(io, mesh, ds, iField, false), timeIndex_(this->time().timeIndex()), field0Ptr_(NULL), fieldPrevIterPtr_(NULL), @@ -351,7 +351,7 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField const Mesh& mesh ) : - DimensionedField<Type, GeoMesh>(io, mesh, dimless), + DimensionedField<Type, GeoMesh>(io, mesh, dimless, false), timeIndex_(this->time().timeIndex()), field0Ptr_(NULL), fieldPrevIterPtr_(NULL), @@ -392,7 +392,7 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField Istream& is ) : - DimensionedField<Type, GeoMesh>(io, mesh, dimless), + DimensionedField<Type, GeoMesh>(io, mesh, dimless, false), timeIndex_(this->time().timeIndex()), field0Ptr_(NULL), fieldPrevIterPtr_(NULL), @@ -431,7 +431,7 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField const dictionary& dict ) : - DimensionedField<Type, GeoMesh>(io, mesh, dimless), + DimensionedField<Type, GeoMesh>(io, mesh, dimless, false), timeIndex_(this->time().timeIndex()), field0Ptr_(NULL), fieldPrevIterPtr_(NULL),