diff --git a/src/OpenFOAM/db/regIOobject/regIOobject.C b/src/OpenFOAM/db/regIOobject/regIOobject.C index 2764476f69..6b66a2a681 100644 --- a/src/OpenFOAM/db/regIOobject/regIOobject.C +++ b/src/OpenFOAM/db/regIOobject/regIOobject.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -71,6 +71,22 @@ Foam::regIOobject::regIOobject(const regIOobject& rio) } +Foam::regIOobject::regIOobject(const regIOobject&& rio) +: + IOobject(rio), + registered_(false), + ownedByRegistry_(false), + watchIndices_(), + eventNo_(db().getEvent()) +{ + if (rio.registered_) + { + const_cast(rio).checkOut(); + checkIn(); + } +} + + Foam::regIOobject::regIOobject(const regIOobject& rio, bool registerCopy) : IOobject(rio), diff --git a/src/OpenFOAM/db/regIOobject/regIOobject.H b/src/OpenFOAM/db/regIOobject/regIOobject.H index 1c5787df76..bc587704f5 100644 --- a/src/OpenFOAM/db/regIOobject/regIOobject.H +++ b/src/OpenFOAM/db/regIOobject/regIOobject.H @@ -111,6 +111,10 @@ public: //- Copy constructor regIOobject(const regIOobject&); + //- Move constructor + // Registers copy if the object is registered + regIOobject(const regIOobject&&); + //- Copy constructor, transferring registry registration to copy // if registerCopy is true regIOobject(const regIOobject&, bool registerCopy); diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.C b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.C index 5b93532c2f..78cdf7f132 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.C +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.C @@ -135,7 +135,7 @@ DimensionedField::DimensionedField bool reuse ) : - regIOobject(df, reuse), + regIOobject(df, reuse && df.registered()), Field(df, reuse), mesh_(df.mesh_), dimensions_(df.dimensions_) @@ -148,7 +148,7 @@ DimensionedField::DimensionedField DimensionedField&& df ) : - regIOobject(move(df), true), + regIOobject(move(df)), Field(move(df)), mesh_(df.mesh_), dimensions_(move(df.dimensions_)) diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C index 1515692863..520ff52bf7 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C @@ -720,6 +720,8 @@ Foam::GeometricField::GeometricField boundaryField_ == tgf().boundaryField_; tgf.clear(); + + readIfPresent(); }