diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.C b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.C index 166f7941fa..5823ee3f57 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.C +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2015-2017 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -45,6 +45,27 @@ if (&(df1).mesh() != &(df2).mesh()) \ } +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +template +void Foam::DimensionedField::checkFieldSize() const +{ + const label fieldSize = this->size(); + if (fieldSize) + { + const label meshSize = GeoMesh::size(this->mesh_); + if (fieldSize != meshSize) + { + FatalErrorInFunction + << "size of field = " << fieldSize + << " is not the same as the size of mesh = " + << meshSize + << abort(FatalError); + } + } +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template @@ -61,14 +82,43 @@ DimensionedField::DimensionedField mesh_(mesh), dimensions_(dims) { - if (field.size() && field.size() != GeoMesh::size(mesh)) - { - FatalErrorInFunction - << "size of field = " << field.size() - << " is not the same as the size of mesh = " - << GeoMesh::size(mesh) - << abort(FatalError); - } + checkFieldSize(); +} + + +template +DimensionedField::DimensionedField +( + const IOobject& io, + const Mesh& mesh, + const dimensionSet& dims, + const Xfer>& field +) +: + regIOobject(io), + Field(field), + mesh_(mesh), + dimensions_(dims) +{ + checkFieldSize(); +} + + +template +DimensionedField::DimensionedField +( + const IOobject& io, + const Mesh& mesh, + const dimensionSet& dims, + const Xfer>& field +) +: + regIOobject(io), + Field(field), + mesh_(mesh), + dimensions_(dims) +{ + checkFieldSize(); } diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.H b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.H index a302e54171..b37c63724f 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.H +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2015-2017 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -53,14 +53,14 @@ template class DimensionedField; template Ostream& operator<< ( - Ostream&, - const DimensionedField& + Ostream& os, + const DimensionedField& df ); template Ostream& operator<< ( - Ostream&, - const tmp>& + Ostream& os, + const tmp>& tdf ); @@ -102,6 +102,9 @@ private: // Private Member Functions + //- Assert that non-zero field size == mesh size + void checkFieldSize() const; + void readIfPresent(const word& fieldDictEntry = "value"); @@ -122,87 +125,105 @@ public: //- Construct from components DimensionedField ( - const IOobject&, + const IOobject& io, const Mesh& mesh, - const dimensionSet&, - const Field& + const dimensionSet& dims, + const Field& field + ); + + //- Construct from components, transferring the initial field content + DimensionedField + ( + const IOobject& io, + const Mesh& mesh, + const dimensionSet& dims, + const Xfer>& field + ); + + //- Construct from components, transferring the initial field content + DimensionedField + ( + const IOobject& io, + const Mesh& mesh, + const dimensionSet& dims, + const Xfer>& field ); //- Construct from components // Used for temporary fields which are initialised after construction DimensionedField ( - const IOobject&, + const IOobject& io, const Mesh& mesh, - const dimensionSet&, + const dimensionSet& dims, const bool checkIOFlags = true ); //- Construct from components DimensionedField ( - const IOobject&, + const IOobject& io, const Mesh& mesh, - const dimensioned&, + const dimensioned& dt, const bool checkIOFlags = true ); //- Construct from Istream DimensionedField ( - const IOobject&, + const IOobject& io, const Mesh& mesh, - const word& fieldDictEntry="value" + const word& fieldDictEntry = "value" ); //- Construct from dictionary DimensionedField ( - const IOobject&, + const IOobject& io, const Mesh& mesh, const dictionary& fieldDict, - const word& fieldDictEntry="value" + const word& fieldDictEntry = "value" ); //- Construct as copy DimensionedField ( - const DimensionedField& + const DimensionedField& df ); //- Construct as copy or re-use as specified. DimensionedField ( - DimensionedField&, + DimensionedField& df, bool reuse ); //- Construct by transferring the DimensionedField DimensionedField ( - const Xfer>& + const Xfer>& df ); //- Construct as copy of tmp deleting argument #ifndef NoConstructFromTmp DimensionedField ( - const tmp>& + const tmp>& tdf ); #endif //- Construct as copy resetting IO parameters DimensionedField ( - const IOobject&, - const DimensionedField& + const IOobject& io, + const DimensionedField& df ); //- Construct as copy resetting IO parameters and re-use as specified. DimensionedField ( - const IOobject&, - DimensionedField&, + const IOobject& io, + DimensionedField& df, bool reuse ); @@ -210,14 +231,14 @@ public: DimensionedField ( const word& newName, - const DimensionedField& + const DimensionedField& df ); //- Construct as copy resetting name and re-use as specified. DimensionedField ( const word& newName, - DimensionedField&, + DimensionedField& df, bool reuse ); @@ -225,7 +246,7 @@ public: DimensionedField ( const word& newName, - const Xfer>& + const Xfer>& df ); //- Construct as copy resetting name @@ -233,7 +254,7 @@ public: DimensionedField ( const word& newName, - const tmp>& + const tmp>& tdf ); #endif @@ -262,28 +283,30 @@ public: //- Return non-const access to dimensions inline dimensionSet& dimensions(); + //- Return field inline const Field& field() const; + //- Return field inline Field& field(); //- Return a component field of the field tmp> component ( - const direction + const direction d ) const; //- Replace a component field of the field void replace ( - const direction, - const DimensionedField& + const direction d, + const DimensionedField& df ); //- Replace a component field of the field void replace ( - const direction, - const tmp>& + const direction d, + const tmp>& tdf ); //- Return the field transpose (only defined for second rank tensors) @@ -295,60 +318,60 @@ public: //- Calculate and return weighted average dimensioned weightedAverage ( - const DimensionedField& + const DimensionedField& weightField ) const; //- Calculate and return weighted average dimensioned weightedAverage ( - const tmp>& + const tmp>& tweightField ) const; // Write - bool writeData(Ostream&, const word& fieldDictEntry) const; + bool writeData(Ostream& os, const word& fieldDictEntry) const; - bool writeData(Ostream&) const; + bool writeData(Ostream& os) const; // Member Operators - void operator=(const DimensionedField&); - void operator=(const tmp>&); - void operator=(const dimensioned&); + void operator=(const DimensionedField& df); + void operator=(const tmp>& tdf); + void operator=(const dimensioned& dt); - void operator+=(const DimensionedField&); - void operator+=(const tmp>&); + void operator+=(const DimensionedField& df); + void operator+=(const tmp>& tdf); - void operator-=(const DimensionedField&); - void operator-=(const tmp>&); + void operator-=(const DimensionedField& df); + void operator-=(const tmp>& tdf); - void operator*=(const DimensionedField&); - void operator*=(const tmp>&); + void operator*=(const DimensionedField& df); + void operator*=(const tmp>& tdf); - void operator/=(const DimensionedField&); - void operator/=(const tmp>&); + void operator/=(const DimensionedField& df); + void operator/=(const tmp>& tdf); - void operator+=(const dimensioned&); - void operator-=(const dimensioned&); + void operator+=(const dimensioned& dt); + void operator-=(const dimensioned& dt); - void operator*=(const dimensioned&); - void operator/=(const dimensioned&); + void operator*=(const dimensioned& dt); + void operator/=(const dimensioned& dt); // Ostream Operators friend Ostream& operator<< ( - Ostream&, - const DimensionedField& + Ostream& os, + const DimensionedField& df ); friend Ostream& operator<< ( - Ostream&, - const tmp>& + Ostream& os, + const tmp>& tdf ); }; diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctionsM.H b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctionsM.H index 444192f399..5932562ebf 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctionsM.H +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctionsM.H @@ -194,7 +194,7 @@ tmp> operator Op \ // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#define BINARY_TYPE_OPERATOR_SF(ReturnType, Type1, Type2, Op, OpName, OpFunc) \ +#define BINARY_TYPE_OPERATOR_SF(ReturnType, Type1, Type2, Op, OpName, OpFunc) \ \ TEMPLATE \ tmp> operator Op \ @@ -225,7 +225,7 @@ tmp> operator Op \ ); -#define BINARY_TYPE_OPERATOR_FS(ReturnType, Type1, Type2, Op, OpName, OpFunc) \ +#define BINARY_TYPE_OPERATOR_FS(ReturnType, Type1, Type2, Op, OpName, OpFunc) \ \ TEMPLATE \ tmp> operator Op \ diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/SubDimensionedField.H b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/SubDimensionedField.H index e0e4282fb4..1f90a784ab 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/SubDimensionedField.H +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/SubDimensionedField.H @@ -105,7 +105,7 @@ public: //- Return a component field of the field inline tmp> component ( - const direction + const direction d ) const; //- Return the field transpose (only defined for second rank tensors) @@ -115,7 +115,7 @@ public: // Member operators //- Assignment - inline void operator=(const SubDimensionedField&); + inline void operator=(const SubDimensionedField& rhs); //- Allow cast to a const DimensionedField& inline operator const DimensionedField&() const; diff --git a/src/OpenFOAM/memory/Xfer/Xfer.H b/src/OpenFOAM/memory/Xfer/Xfer.H index 0c5e8e8cff..615712d610 100644 --- a/src/OpenFOAM/memory/Xfer/Xfer.H +++ b/src/OpenFOAM/memory/Xfer/Xfer.H @@ -93,20 +93,23 @@ class Xfer public: + typedef T Type; + + // Constructors //- Store object pointer and manage its deletion // Can also be used later to transfer by assignment - inline explicit Xfer(T* = 0); + inline explicit Xfer(T* p = 0); //- Construct by copying or by transferring the parameter contents - inline explicit Xfer(T&, bool allowTransfer=false); + inline explicit Xfer(T& t, bool allowTransfer=false); //- Construct by copying the parameter contents - inline explicit Xfer(const T&); + inline explicit Xfer(const T& t); //- Construct by transferring the contents - inline Xfer(const Xfer&); + inline Xfer(const Xfer& t); //- Destructor @@ -122,10 +125,10 @@ public: // Member Operators //- Transfer the contents into the object - inline void operator=(T&); + inline void operator=(T& t); //- Transfer the contents into the object - inline void operator=(const Xfer&); + inline void operator=(const Xfer& t); //- Reference to the underlying datatype inline T& operator()() const;