Commit ee919965 authored by Henry's avatar Henry
Browse files

GeometricField: Do not transfer registration of a GeometricField to a copy...

GeometricField: Do not transfer registration of a GeometricField to a copy unless it is being transferred from a tmp
This avoids loosing the registration of non-tmp fields
parent ef95c576
......@@ -173,6 +173,47 @@ Foam::regIOobject::regIOobject(const regIOobject& rio, bool registerCopy)
}
Foam::regIOobject::regIOobject
(
const word& newName,
const regIOobject& rio,
bool registerCopy
)
:
IOobject(newName, rio.instance(), rio.local(), rio.db()),
registered_(false),
ownedByRegistry_(false),
watchIndex_(-1),
eventNo_(db().getEvent()),
isPtr_(NULL)
{
if (registerCopy)
{
checkIn();
}
}
Foam::regIOobject::regIOobject
(
const IOobject& io,
const regIOobject& rio
)
:
IOobject(io),
registered_(false),
ownedByRegistry_(false),
watchIndex_(-1),
eventNo_(db().getEvent()),
isPtr_(NULL)
{
if (registerObject())
{
checkIn();
}
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
// Delete read stream, checkout from objectRegistry and destroy
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -138,10 +138,17 @@ public:
//- Construct as copy
regIOobject(const regIOobject&);
//- Construct as copy, and transferring registry registration to copy
//- Construct as copy, transferring registry registration to copy
// if registerCopy is true
regIOobject(const regIOobject&, bool registerCopy);
//- Construct as copy with new name, transfering registry registration
// to copy as specified
regIOobject(const word& newName, const regIOobject&, bool registerCopy);
//- Construct as copy with new IO parameters
regIOobject(const IOobject&, const regIOobject&);
//- Destructor
virtual ~regIOobject();
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -193,6 +193,21 @@ DimensionedField<Type, GeoMesh>::DimensionedField
{}
template<class Type, class GeoMesh>
DimensionedField<Type, GeoMesh>::DimensionedField
(
const IOobject& io,
DimensionedField<Type, GeoMesh>& df,
bool reUse
)
:
regIOobject(io, df),
Field<Type>(df, reUse),
mesh_(df.mesh_),
dimensions_(df.dimensions_)
{}
template<class Type, class GeoMesh>
DimensionedField<Type, GeoMesh>::DimensionedField
(
......@@ -200,7 +215,7 @@ DimensionedField<Type, GeoMesh>::DimensionedField
const DimensionedField<Type, GeoMesh>& df
)
:
regIOobject(IOobject(newName, df.time().timeName(), df.db())),
regIOobject(newName, df, newName == df.name()),
Field<Type>(df),
mesh_(df.mesh_),
dimensions_(df.dimensions_)
......@@ -215,7 +230,7 @@ DimensionedField<Type, GeoMesh>::DimensionedField
bool reUse
)
:
regIOobject(IOobject(newName, df.time().timeName(), df.db())),
regIOobject(newName, df, true),
Field<Type>(df, reUse),
mesh_(df.mesh_),
dimensions_(df.dimensions_)
......@@ -229,7 +244,7 @@ DimensionedField<Type, GeoMesh>::DimensionedField
const Xfer<DimensionedField<Type, GeoMesh> >& df
)
:
regIOobject(IOobject(newName, df->time().timeName(), df->db())),
regIOobject(newName, df, true),
Field<Type>(df),
mesh_(df->mesh_),
dimensions_(df->dimensions_)
......@@ -244,7 +259,7 @@ DimensionedField<Type, GeoMesh>::DimensionedField
const tmp<DimensionedField<Type, GeoMesh> >& tdf
)
:
regIOobject(IOobject(newName, tdf().time().timeName(), tdf().db())),
regIOobject(newName, tdf(), true),
Field<Type>
(
const_cast<DimensionedField<Type, GeoMesh>&>(tdf()),
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -104,6 +104,7 @@ public:
//- Runtime type information
TypeName("DimensionedField");
// Static Member Functions
//- Return a null DimensionedField
......@@ -168,12 +169,12 @@ public:
);
//- Construct as copy of tmp<DimensionedField> deleting argument
# ifdef ConstructFromTmp
#ifdef ConstructFromTmp
DimensionedField
(
const tmp<DimensionedField<Type, GeoMesh> >&
);
# endif
#endif
//- Construct as copy resetting IO parameters
DimensionedField
......@@ -182,6 +183,14 @@ public:
const DimensionedField<Type, GeoMesh>&
);
//- Construct as copy resetting IO parameters and re-use as specified.
DimensionedField
(
const IOobject&,
DimensionedField<Type, GeoMesh>&,
bool reUse
);
//- Construct as copy resetting name
DimensionedField
(
......@@ -205,13 +214,13 @@ public:
);
//- Construct as copy resetting name
# ifdef ConstructFromTmp
#ifdef ConstructFromTmp
DimensionedField
(
const word& newName,
const tmp<DimensionedField<Type, GeoMesh> >&
);
# endif
#endif
//- Clone
tmp<DimensionedField<Type, GeoMesh> > clone() const;
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -31,8 +31,6 @@ License
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// check mesh for two fields
#define checkField(gf1, gf2, op) \
if ((gf1).mesh() != (gf2).mesh()) \
{ \
......@@ -180,10 +178,6 @@ bool Foam::GeometricField<Type, PatchField, GeoMesh>::readOldTimeIfPresent()
// * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * //
// Constructor given a GeometricField and dimensionSet
// This allocates storage for the field but not values.
// Note : This constructor should only be used to
// construct TEMPORARY variables
template<class Type, template<class> class PatchField, class GeoMesh>
Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
(
......@@ -210,10 +204,6 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
}
// Constructor given a GeometricField and dimensionSet
// This allocates storage for the field but not values.
// Note : This constructor should only be used to
// construct TEMPORARY variables
template<class Type, template<class> class PatchField, class GeoMesh>
Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
(
......@@ -241,7 +231,6 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
}
// Constructor given a GeometricField and dimensioned<Type>
template<class Type, template<class> class PatchField, class GeoMesh>
Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
(
......@@ -270,7 +259,6 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
}
// Constructor given a GeometricField and dimensioned<Type>
template<class Type, template<class> class PatchField, class GeoMesh>
Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
(
......@@ -300,7 +288,6 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
}
// construct from components
template<class Type, template<class> class PatchField, class GeoMesh>
Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
(
......@@ -408,7 +395,6 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
}
// construct as copy
template<class Type, template<class> class PatchField, class GeoMesh>
Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
(
......@@ -439,7 +425,7 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
this->writeOpt() = IOobject::NO_WRITE;
}
// construct as copy of tmp<GeometricField> deleting argument
#ifdef ConstructFromTmp
template<class Type, template<class> class PatchField, class GeoMesh>
Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
......@@ -471,7 +457,6 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
#endif
// construct as copy resetting IO parameters
template<class Type, template<class> class PatchField, class GeoMesh>
Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
(
......@@ -503,7 +488,39 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
}
// construct as copy resetting name
#ifdef ConstructFromTmp
template<class Type, template<class> class PatchField, class GeoMesh>
Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
(
const IOobject& io,
const tmp<GeometricField<Type, PatchField, GeoMesh> >& tgf
)
:
DimensionedField<Type, GeoMesh>
(
io,
const_cast<GeometricField<Type, PatchField, GeoMesh>&>(tgf()),
tgf.isTmp()
),
timeIndex_(tgf().timeIndex()),
field0Ptr_(NULL),
fieldPrevIterPtr_(NULL),
boundaryField_(*this, tgf().boundaryField_)
{
if (debug)
{
Info<< "GeometricField<Type, PatchField, GeoMesh>::GeometricField : "
"constructing from tmp resetting IO params"
<< endl << this->info() << endl;
}
tgf.clear();
readIfPresent();
}
#endif
template<class Type, template<class> class PatchField, class GeoMesh>
Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
(
......@@ -535,7 +552,6 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
}
// construct as copy resetting name
#ifdef ConstructFromTmp
template<class Type, template<class> class PatchField, class GeoMesh>
Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
......@@ -566,7 +582,7 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
}
#endif
// construct as copy resetting IO parameters and patch type
template<class Type, template<class> class PatchField, class GeoMesh>
Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
(
......@@ -601,7 +617,6 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
}
// construct as copy resetting IO parameters and boundary types
template<class Type, template<class> class PatchField, class GeoMesh>
Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
(
......@@ -627,7 +642,7 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
if (debug)
{
Info<< "GeometricField<Type, PatchField, GeoMesh>::GeometricField : "
"constructing as copy resetting IO params"
"constructing as copy resetting IO params and patch types"
<< endl << this->info() << endl;
}
......@@ -678,7 +693,6 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::internalField()
}
// Return reference to GeometricBoundaryField
template<class Type, template<class> class PatchField, class GeoMesh>
typename
Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricBoundaryField&
......@@ -690,7 +704,6 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::boundaryField()
}
// Store old-time field
template<class Type, template<class> class PatchField, class GeoMesh>
void Foam::GeometricField<Type, PatchField, GeoMesh>::storeOldTimes() const
{
......@@ -711,7 +724,7 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::storeOldTimes() const
timeIndex_ = this->time().timeIndex();
}
// Store old-time field
template<class Type, template<class> class PatchField, class GeoMesh>
void Foam::GeometricField<Type, PatchField, GeoMesh>::storeOldTime() const
{
......@@ -735,7 +748,7 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::storeOldTime() const
}
}
// Return the number of old time fields stored
template<class Type, template<class> class PatchField, class GeoMesh>
Foam::label Foam::GeometricField<Type, PatchField, GeoMesh>::nOldTimes() const
{
......@@ -749,7 +762,7 @@ Foam::label Foam::GeometricField<Type, PatchField, GeoMesh>::nOldTimes() const
}
}
// Return old time internal field
template<class Type, template<class> class PatchField, class GeoMesh>
const Foam::GeometricField<Type, PatchField, GeoMesh>&
Foam::GeometricField<Type, PatchField, GeoMesh>::oldTime() const
......@@ -778,7 +791,7 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::oldTime() const
return *field0Ptr_;
}
// Return old time internal field
template<class Type, template<class> class PatchField, class GeoMesh>
Foam::GeometricField<Type, PatchField, GeoMesh>&
Foam::GeometricField<Type, PatchField, GeoMesh>::oldTime()
......@@ -790,7 +803,6 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::oldTime()
}
// Store previous iteration field
template<class Type, template<class> class PatchField, class GeoMesh>
void Foam::GeometricField<Type, PatchField, GeoMesh>::storePrevIter() const
{
......@@ -815,7 +827,6 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::storePrevIter() const
}
// Return previous iteration field
template<class Type, template<class> class PatchField, class GeoMesh>
const Foam::GeometricField<Type, PatchField, GeoMesh>&
Foam::GeometricField<Type, PatchField, GeoMesh>::prevIter() const
......@@ -835,7 +846,6 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::prevIter() const
}
// Correct the boundary conditions
template<class Type, template<class> class PatchField, class GeoMesh>
void Foam::GeometricField<Type, PatchField, GeoMesh>::
correctBoundaryConditions()
......@@ -846,7 +856,6 @@ correctBoundaryConditions()
}
// Does the field need a reference level for solution
template<class Type, template<class> class PatchField, class GeoMesh>
bool Foam::GeometricField<Type, PatchField, GeoMesh>::needReference() const
{
......@@ -940,7 +949,6 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::writeMinMax
}
// writeData member function required by regIOobject
template<class Type, template<class> class PatchField, class GeoMesh>
bool Foam::GeometricField<Type, PatchField, GeoMesh>::
writeData(Ostream& os) const
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -369,6 +369,15 @@ public:
const GeometricField<Type, PatchField, GeoMesh>&
);
//- Construct as copy of tmp<GeometricField> resetting IO parameters
#ifdef ConstructFromTmp
GeometricField
(
const IOobject&,
const tmp<GeometricField<Type, PatchField, GeoMesh> >&
);
#endif
//- Construct as copy resetting name
GeometricField
(
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment