ENH: regIOobject store() now also registers the object

- previously the store() method just set the ownedByRegistry flag.
  Now ensure that it is indeed registered first.

- support register/store of tmp<> items.
  The tmp parameter is not cleared, but changed from PTR to CREF
  to allow further use.

  The implicit registration allows code simplification using the
  GeometricField::New factory method, for example.

  Old Code
  ========
      volScalarField* ptr = new volScalarField
      (
          IOobject
          (
              fieldName,
              mesh.time().timeName(),
              mesh,
              IOobject::NO_READ,
              IOobject::NO_WRITE,
              true  // Register
          ),
          mesh,
          dimless,
          zeroGradientFvPatchField<scalar>::typeName
      );
      ptr->store();

  New Code
  ========
      auto tptr = volScalarField::New
      (
          fieldName,
          mesh,
          dimless,
          zeroGradientFvPatchField<scalar>::typeName
      );
      regIOobject::store(tptr);

  or even
      regIOobject::store
      (
          volScalarField::New
          (
              fieldName,
              mesh,
              dimless,
              zeroGradientFvPatchField<scalar>::typeName
          )
      );
This commit is contained in:
Mark Olesen
2020-01-09 12:27:45 +01:00
committed by Mattijs Janssens
parent 12bd45673a
commit b0072bfab8
4 changed files with 117 additions and 34 deletions

View File

@ -34,24 +34,17 @@ cellZoneID
{
if (!volZonePtr)
{
volZonePtr = new volScalarField
volZonePtr = &regIOobject::store
(
IOobject
volScalarField::New
(
fieldName,
mesh.time().timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE,
true // Register
),
mesh,
dimless,
zeroGradientFvPatchField<scalar>::typeName
dimless,
zeroGradientFvPatchField<scalar>::typeName
)
);
volZonePtr->store();
Info<< "Creating " << fieldName
<< " field for postProcessing" << nl;
}