From ec2b1be8c550fac69bd634da3d12300d3332d4cc Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Tue, 23 Jan 2024 10:55:56 +0100
Subject: [PATCH] ENH: use tmp field factory methods [11] (#2723)

- src/optimisation
---
 .../adjoint/ATCModel/ATCModel/ATCModel.C      | 25 ++----
 .../adjoint/ATCModel/ATCUaGradU/ATCUaGradU.C  | 21 ++---
 ...oundaryAdjointContributionIncompressible.C |  9 +--
 .../elasticityMotionSolver.C                  |  4 +-
 .../volumetricBSplinesMotionSolver.C          |  4 +-
 .../volPointInterpolateAdjoint.C              | 17 ++--
 .../designVariables/designVariables.C         |  2 +-
 .../updateMethod/updateMethod/updateMethod.C  |  7 +-
 .../NURBS3DVolume/NURBS3DVolume.C             | 32 +++-----
 .../adjointSolverManager.C                    |  4 +-
 .../incompressible/incompressibleVars.C       |  9 ++-
 .../incompressibleAdjointMeanFlowVars.C       |  9 ++-
 .../adjointLaminar/adjointLaminar.C           | 77 ++++++-------------
 .../adjointSpalartAllmaras.C                  | 55 ++++---------
 .../adjointkOmegaSST/adjointkOmegaSST.C       | 26 +++----
 .../adjointTurbulenceModel.H                  | 12 +--
 .../RAS/RASModelVariables/RASModelVariables.C | 36 +++------
 .../RASModelVariables/RASModelVariablesI.H    | 21 ++---
 .../RAS/SpalartAllmaras/SpalartAllmaras.C     | 12 +--
 .../RAS/kOmegaSST/kOmegaSST.C                 | 16 ++--
 20 files changed, 137 insertions(+), 261 deletions(-)

diff --git a/src/optimisation/adjointOptimisation/adjoint/ATCModel/ATCModel/ATCModel.C b/src/optimisation/adjointOptimisation/adjoint/ATCModel/ATCModel/ATCModel.C
index 9a3bb69b9fe..2adc5016f83 100644
--- a/src/optimisation/adjointOptimisation/adjoint/ATCModel/ATCModel/ATCModel.C
+++ b/src/optimisation/adjointOptimisation/adjoint/ATCModel/ATCModel/ATCModel.C
@@ -229,25 +229,16 @@ tmp<volScalarField> ATCModel::createLimiter
     const labelList& zeroCells = zeroType->getZeroATCcells();
     const label nSmooth = dict.getOrDefault<label>("nSmooth", 0);
 
-    tmp<volScalarField> tlimiter
+    auto tlimiter = volScalarField::New
     (
-        new volScalarField
-        (
-            IOobject
-            (
-                "limiter",
-                mesh.time().timeName(),
-                mesh,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE
-            ),
-            mesh,
-            scalar(1),
-            dimless,
-            fvPatchFieldBase::zeroGradientType()
-        )
+        "limiter",
+        IOobject::NO_REGISTER,
+        mesh,
+        scalar(1),
+        dimless,
+        fvPatchFieldBase::zeroGradientType()
     );
-    volScalarField& limiter = tlimiter.ref();
+    auto& limiter = tlimiter.ref();
 
     computeLimiter(limiter, zeroCells, nSmooth);
 
diff --git a/src/optimisation/adjointOptimisation/adjoint/ATCModel/ATCUaGradU/ATCUaGradU.C b/src/optimisation/adjointOptimisation/adjoint/ATCModel/ATCUaGradU/ATCUaGradU.C
index 62048a5e95d..ae5e9ea36af 100644
--- a/src/optimisation/adjointOptimisation/adjoint/ATCModel/ATCUaGradU/ATCUaGradU.C
+++ b/src/optimisation/adjointOptimisation/adjoint/ATCModel/ATCUaGradU/ATCUaGradU.C
@@ -102,23 +102,14 @@ void ATCUaGradU::addATC(fvVectorMatrix& UaEqn)
 
 tmp<volTensorField> ATCUaGradU::getFISensitivityTerm() const
 {
-    tmp<volTensorField> tvolSDTerm
+    auto tvolSDTerm = volTensorField::New
     (
-        new volTensorField
-        (
-            IOobject
-            (
-                "ATCFISensitivityTerm" + type(),
-                mesh_.time().timeName(),
-                mesh_,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE
-            ),
-            mesh_,
-            dimensionedTensor(sqr(dimLength)/pow(dimTime, 3), Zero)
-        )
+        "ATCFISensitivityTerm" + type(),
+        IOobject::NO_REGISTER,
+        mesh_,
+        dimensionedTensor(sqr(dimLength)/pow(dimTime, 3), Zero)
     );
-    volTensorField& volSDTerm = tvolSDTerm.ref();
+    auto& volSDTerm = tvolSDTerm.ref();
 
     const volVectorField& U = primalVars_.U();
     const volVectorField& Ua = adjointVars_.Ua();
diff --git a/src/optimisation/adjointOptimisation/adjoint/boundaryAdjointContributions/boundaryAdjointContributionIncompressible/boundaryAdjointContributionIncompressible.C b/src/optimisation/adjointOptimisation/adjoint/boundaryAdjointContributions/boundaryAdjointContributionIncompressible/boundaryAdjointContributionIncompressible.C
index 86f780e6b1c..51c29df2557 100644
--- a/src/optimisation/adjointOptimisation/adjoint/boundaryAdjointContributions/boundaryAdjointContributionIncompressible/boundaryAdjointContributionIncompressible.C
+++ b/src/optimisation/adjointOptimisation/adjoint/boundaryAdjointContributions/boundaryAdjointContributionIncompressible/boundaryAdjointContributionIncompressible.C
@@ -251,8 +251,8 @@ tmp<scalarField> boundaryAdjointContributionIncompressible::momentumDiffusion()
 
 tmp<scalarField> boundaryAdjointContributionIncompressible::laminarDiffusivity()
 {
-    tmp<scalarField> tnu(new scalarField(patch_.size(), Zero));
-    scalarField& nu = tnu.ref();
+    auto tnu = tmp<scalarField>::New(patch_.size(), Zero);
+    auto& nu = tnu.ref();
 
     const autoPtr<incompressible::turbulenceModel>& turbulenceModel =
         primalVars_.turbulence();
@@ -272,13 +272,10 @@ tmp<scalarField> boundaryAdjointContributionIncompressible::thermalDiffusion()
     tmp<scalarField> talphaEff = turbulenceModel.alphaEff(patch_.index());
     */
 
-    tmp<scalarField> talphaEff(new scalarField(patch_.size(), Zero));
-
     WarningInFunction
         << "no abstract thermalDiffusion is implemented. Returning zero field";
 
-
-    return talphaEff;
+    return tmp<scalarField>::New(patch_.size(), Zero);
 }
 
 
diff --git a/src/optimisation/adjointOptimisation/adjoint/dynamicMesh/motionSolver/elasticityMotionSolver/elasticityMotionSolver.C b/src/optimisation/adjointOptimisation/adjoint/dynamicMesh/motionSolver/elasticityMotionSolver/elasticityMotionSolver.C
index 5b562382f79..172b675c1f9 100644
--- a/src/optimisation/adjointOptimisation/adjoint/dynamicMesh/motionSolver/elasticityMotionSolver/elasticityMotionSolver.C
+++ b/src/optimisation/adjointOptimisation/adjoint/dynamicMesh/motionSolver/elasticityMotionSolver/elasticityMotionSolver.C
@@ -171,9 +171,7 @@ Foam::elasticityMotionSolver::elasticityMotionSolver
 
 Foam::tmp<Foam::pointField> Foam::elasticityMotionSolver::curPoints() const
 {
-    tmp<pointField> tnewPoints(new pointField(mesh().points()));
-
-    return tnewPoints;
+    return tmp<pointField>::New(mesh().points());
 }
 
 
diff --git a/src/optimisation/adjointOptimisation/adjoint/dynamicMesh/motionSolver/volumetricBSplinesMotionSolver/volumetricBSplinesMotionSolver.C b/src/optimisation/adjointOptimisation/adjoint/dynamicMesh/motionSolver/volumetricBSplinesMotionSolver/volumetricBSplinesMotionSolver.C
index 89fa4dd4a41..143c9b84ad0 100644
--- a/src/optimisation/adjointOptimisation/adjoint/dynamicMesh/motionSolver/volumetricBSplinesMotionSolver/volumetricBSplinesMotionSolver.C
+++ b/src/optimisation/adjointOptimisation/adjoint/dynamicMesh/motionSolver/volumetricBSplinesMotionSolver/volumetricBSplinesMotionSolver.C
@@ -74,8 +74,8 @@ Foam::volumetricBSplinesMotionSolver::volumetricBSplinesMotionSolver
 Foam::tmp<Foam::pointField>
 Foam::volumetricBSplinesMotionSolver::curPoints() const
 {
-    tmp<vectorField> tPointMovement(new vectorField(mesh().points()));
-    vectorField& pointMovement = tPointMovement.ref();
+    auto tPointMovement = tmp<vectorField>::New(mesh().points());
+    auto& pointMovement = tPointMovement.ref();
 
     label pastControlPoints(0);
     PtrList<NURBS3DVolume>& boxes = volBSplinesBase_.boxesRef();
diff --git a/src/optimisation/adjointOptimisation/adjoint/interpolation/volPointInterpolation/volPointInterpolateAdjoint.C b/src/optimisation/adjointOptimisation/adjoint/interpolation/volPointInterpolation/volPointInterpolateAdjoint.C
index e174ef78889..a4841aea9d7 100644
--- a/src/optimisation/adjointOptimisation/adjoint/interpolation/volPointInterpolation/volPointInterpolateAdjoint.C
+++ b/src/optimisation/adjointOptimisation/adjoint/interpolation/volPointInterpolation/volPointInterpolateAdjoint.C
@@ -81,7 +81,8 @@ void Foam::volPointInterpolationAdjoint::pushUntransformedData
 
 
 template<class Type>
-Foam::tmp<Foam::Field<Type>> Foam::volPointInterpolationAdjoint::flatBoundaryField
+Foam::tmp<Foam::Field<Type>>
+Foam::volPointInterpolationAdjoint::flatBoundaryField
 (
     const GeometricField<Type, fvPatchField, volMesh>& vf
 ) const
@@ -89,11 +90,8 @@ Foam::tmp<Foam::Field<Type>> Foam::volPointInterpolationAdjoint::flatBoundaryFie
     const fvMesh& mesh = vf.mesh();
     const fvBoundaryMesh& bm = mesh.boundary();
 
-    tmp<Field<Type>> tboundaryVals
-    (
-        new Field<Type>(mesh.nBoundaryFaces())
-    );
-    Field<Type>& boundaryVals = tboundaryVals.ref();
+    auto tboundaryVals = tmp<Field<Type>>::New(mesh.nBoundaryFaces());
+    auto& boundaryVals = tboundaryVals.ref();
 
     forAll(vf.boundaryField(), patchi)
     {
@@ -188,11 +186,8 @@ void Foam::volPointInterpolationAdjoint::interpolateSensitivitiesField
     const fvMesh& Mesh = mesh();
     const fvBoundaryMesh& bm = Mesh.boundary();
 
-    tmp<Field<Type>> tboundaryVals
-    (
-        new Field<Type>(Mesh.nBoundaryFaces(), Zero)
-    );
-    Field<Type>& boundaryVals = tboundaryVals.ref();
+    auto tboundaryVals = tmp<Field<Type>>::New(Mesh.nBoundaryFaces(), Zero);
+    auto& boundaryVals = tboundaryVals.ref();
 
     // Do points on 'normal' patches from the surrounding patch faces
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/designVariables/designVariables/designVariables.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/designVariables/designVariables/designVariables.C
index bd0b171d589..3c3c3e4f349 100644
--- a/src/optimisation/adjointOptimisation/adjoint/optimisation/designVariables/designVariables/designVariables.C
+++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/designVariables/designVariables/designVariables.C
@@ -262,7 +262,7 @@ void Foam::designVariables::addFvOptions
 
 Foam::tmp<Foam::scalarField> Foam::designVariables::constraintValues()
 {
-    return tmp<scalarField>(nullptr);
+    return nullptr;
 }
 
 
diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/updateMethod/updateMethod/updateMethod.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/updateMethod/updateMethod/updateMethod.C
index 4178195c9b2..b08a2ffe2c6 100644
--- a/src/optimisation/adjointOptimisation/adjoint/optimisation/updateMethod/updateMethod/updateMethod.C
+++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/updateMethod/updateMethod/updateMethod.C
@@ -267,12 +267,7 @@ Foam::tmp<Foam::scalarField> Foam::updateMethod::readOrZeroField
     const label size
 )
 {
-    return tmp<scalarField>
-    (
-        found(name) ?
-        new scalarField(name, *this, size) :
-        new scalarField(size, Zero)
-    );
+    return tmp<scalarField>::New(name, *this, size, IOobjectOption::LAZY_READ);
 }
 
 
diff --git a/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolume.C b/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolume.C
index fc43049d1f9..3ad91b1aafb 100644
--- a/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolume.C
+++ b/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolume.C
@@ -1342,8 +1342,9 @@ Foam::tmp<Foam::tensorField> Foam::NURBS3DVolume::dndbBasedSensitivities
     const fvPatch& patch = mesh_.boundary()[patchI];
     const polyPatch& ppatch = patch.patch();
     // Return field
-    tmp<tensorField> tdndbSens(new tensorField(patch.size(), Zero));
-    tensorField& dndbSens = tdndbSens.ref();
+    auto tdndbSens = tmp<tensorField>::New(patch.size(), Zero);
+    auto& dndbSens = tdndbSens.ref();
+
     // Auxiliary quantities
     deltaBoundary deltaBoundary(mesh_);
     const label patchStart = ppatch.start();
@@ -1574,8 +1575,8 @@ Foam::tmp<Foam::vectorField> Foam::NURBS3DVolume::computeNewPoints
     const vectorField& parameterizedPoints = tparameterizedPoints();
 
     // Return field. Initialized with current mesh points
-    tmp<vectorField> tnewPoints(new vectorField(mesh_.points()));
-    vectorField& newPoints = tnewPoints.ref();
+    auto tnewPoints = tmp<vectorField>::New(mesh_.points());
+    auto& newPoints = tnewPoints.ref();
 
     // Update position of parameterized points
     forAll(parameterizedPoints, pI)
@@ -1612,8 +1613,8 @@ Foam::tmp<Foam::vectorField> Foam::NURBS3DVolume::computeNewBoundaryPoints
     }
 
     // Return field. Initialized with current mesh points
-    tmp<vectorField> tnewPoints(new vectorField(mesh_.points()));
-    vectorField& newPoints = tnewPoints.ref();
+    auto tnewPoints = tmp<vectorField>::New(mesh_.points());
+    auto& newPoints = tnewPoints.ref();
 
     // Update position of parameterized boundary points
     for (const label patchI : patchesToBeMoved)
@@ -1883,21 +1884,12 @@ Foam::tmp<Foam::volTensorField> Foam::NURBS3DVolume::getDxCellsDb
     const vectorField& parametricCoordinates = getParametricCoordinates();
 
     // Set return field to zero
-    tmp<volTensorField> tDxDb
+    auto tDxDb = volTensorField::New
     (
-        new volTensorField
-        (
-            IOobject
-            (
-                "DxDb",
-                mesh_.time().timeName(),
-                mesh_,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE
-            ),
-            mesh_,
-            dimensionedTensor(dimless, Zero)
-        )
+        "DxDb",
+        IOobject::NO_REGISTER,
+        mesh_,
+        dimensionedTensor(dimless, Zero)
     );
 
     volTensorField& DxDb = tDxDb.ref();
diff --git a/src/optimisation/adjointOptimisation/adjoint/solvers/adjointSolverManager/adjointSolverManager.C b/src/optimisation/adjointOptimisation/adjoint/solvers/adjointSolverManager/adjointSolverManager.C
index ed51b74da3c..69a56f42449 100644
--- a/src/optimisation/adjointOptimisation/adjoint/solvers/adjointSolverManager/adjointSolverManager.C
+++ b/src/optimisation/adjointOptimisation/adjoint/solvers/adjointSolverManager/adjointSolverManager.C
@@ -301,8 +301,8 @@ void Foam::adjointSolverManager::solveAdjointEquations()
 Foam::tmp<Foam::scalarField>
 Foam::adjointSolverManager::aggregateSensitivities()
 {
-    tmp<scalarField> tsens(new scalarField(0));
-    scalarField& sens = tsens.ref();
+    auto tsens = tmp<scalarField>::New();
+    auto& sens = tsens.ref();
 
     // Sum sensitivities from all objectives expect the constraints
     for (const label solveri : objectiveSolverIDs_)
diff --git a/src/optimisation/adjointOptimisation/adjoint/solvers/variablesSet/incompressible/incompressibleVars.C b/src/optimisation/adjointOptimisation/adjoint/solvers/variablesSet/incompressible/incompressibleVars.C
index 0fe83537d5a..09b49f83369 100644
--- a/src/optimisation/adjointOptimisation/adjoint/solvers/variablesSet/incompressible/incompressibleVars.C
+++ b/src/optimisation/adjointOptimisation/adjoint/solvers/variablesSet/incompressible/incompressibleVars.C
@@ -131,7 +131,8 @@ void incompressibleVars::setMeanFields()
                     mesh_.time().timeName(),
                     mesh_,
                     IOobject::READ_IF_PRESENT,
-                    IOobject::AUTO_WRITE
+                    IOobject::AUTO_WRITE,
+                    IOobject::REGISTER
                 ),
                 pInst()
             )
@@ -146,7 +147,8 @@ void incompressibleVars::setMeanFields()
                     mesh_.time().timeName(),
                     mesh_,
                     IOobject::READ_IF_PRESENT,
-                    IOobject::AUTO_WRITE
+                    IOobject::AUTO_WRITE,
+                    IOobject::REGISTER
                 ),
                 UInst()
             )
@@ -161,7 +163,8 @@ void incompressibleVars::setMeanFields()
                     mesh_.time().timeName(),
                     mesh_,
                     IOobject::READ_IF_PRESENT,
-                    IOobject::AUTO_WRITE
+                    IOobject::AUTO_WRITE,
+                    IOobject::REGISTER
                 ),
                 phiInst()
             )
diff --git a/src/optimisation/adjointOptimisation/adjoint/solvers/variablesSet/incompressibleAdjointMeanFlow/incompressibleAdjointMeanFlowVars.C b/src/optimisation/adjointOptimisation/adjoint/solvers/variablesSet/incompressibleAdjointMeanFlow/incompressibleAdjointMeanFlowVars.C
index 2b03684a2d7..576a20f97e5 100644
--- a/src/optimisation/adjointOptimisation/adjoint/solvers/variablesSet/incompressibleAdjointMeanFlow/incompressibleAdjointMeanFlowVars.C
+++ b/src/optimisation/adjointOptimisation/adjoint/solvers/variablesSet/incompressibleAdjointMeanFlow/incompressibleAdjointMeanFlowVars.C
@@ -76,7 +76,8 @@ void incompressibleAdjointMeanFlowVars::setMeanFields()
                     mesh_.time().timeName(),
                     mesh_,
                     IOobject::READ_IF_PRESENT,
-                    IOobject::AUTO_WRITE
+                    IOobject::AUTO_WRITE,
+                    IOobject::REGISTER
                 ),
                 paInst()
             )
@@ -91,7 +92,8 @@ void incompressibleAdjointMeanFlowVars::setMeanFields()
                     mesh_.time().timeName(),
                     mesh_,
                     IOobject::READ_IF_PRESENT,
-                    IOobject::AUTO_WRITE
+                    IOobject::AUTO_WRITE,
+                    IOobject::REGISTER
                 ),
                 UaInst()
             )
@@ -106,7 +108,8 @@ void incompressibleAdjointMeanFlowVars::setMeanFields()
                     mesh_.time().timeName(),
                     mesh_,
                     IOobject::READ_IF_PRESENT,
-                    IOobject::AUTO_WRITE
+                    IOobject::AUTO_WRITE,
+                    IOobject::REGISTER
                 ),
                 phiaInst()
             )
diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointLaminar/adjointLaminar.C b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointLaminar/adjointLaminar.C
index 2413c420efd..1300c7edba4 100644
--- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointLaminar/adjointLaminar.C
+++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointLaminar/adjointLaminar.C
@@ -80,18 +80,11 @@ tmp<volSymmTensorField> adjointLaminar::devReff
     const volVectorField& U
 ) const
 {
-    return tmp<volSymmTensorField>
+    return volSymmTensorField::New
     (
-        new volSymmTensorField
+        "devRhoReff",
+        IOobject::NO_REGISTER,
         (
-            IOobject
-            (
-                "devRhoReff",
-                runTime_.timeName(),
-                mesh_,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE
-            ),
            -nu()*devTwoSymm(fvc::grad(U))
         )
     );
@@ -110,23 +103,13 @@ tmp<fvVectorMatrix> adjointLaminar::divDevReff(volVectorField& U) const
 
 tmp<volVectorField> adjointLaminar::adjointMeanFlowSource()
 {
-    return tmp<volVectorField>::New
-        (
-            IOobject
-            (
-                "adjointMeanFlowSource",
-                runTime_.timeName(),
-                mesh_,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE
-            ),
-            mesh_,
-            dimensionedVector
-            (
-                dimensionSet(0, 1, -2, 0, 0),
-                Zero
-            )
-        );
+    return volVectorField::New
+    (
+        "adjointMeanFlowSource",
+        IOobject::NO_REGISTER,
+        mesh_,
+        dimensionedVector(dimensionSet(0, 1, -2, 0, 0), Zero)
+    );
 }
 
 
@@ -151,37 +134,25 @@ const boundaryVectorField& adjointLaminar::wallFloCoSensitivities()
 
 tmp<volScalarField> adjointLaminar::distanceSensitivities()
 {
-    return tmp<volScalarField>::New
-        (
-            IOobject
-            (
-                "adjointEikonalSource" + type(),
-                runTime_.timeName(),
-                mesh_,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE
-            ),
-            mesh_,
-            dimensionedScalar(dimLength/pow3(dimTime), Zero)
-       );
+    return volScalarField::New
+    (
+        "adjointEikonalSource" + type(),
+        IOobject::NO_REGISTER,
+        mesh_,
+        dimensionedScalar(dimLength/pow3(dimTime), Zero)
+    );
 }
 
 
 tmp<volTensorField> adjointLaminar::FISensitivityTerm()
 {
-    return tmp<volTensorField>::New
-        (
-            IOobject
-            (
-                "volumeSensTerm" + type(),
-                runTime_.timeName(),
-                mesh_,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE
-            ),
-            mesh_,
-            dimensionedTensor(dimensionSet(0, 2, -3, 0, 0), Zero)
-       );
+    return volTensorField::New
+    (
+        "volumeSensTerm" + type(),
+        IOobject::NO_REGISTER,
+        mesh_,
+        dimensionedTensor(dimensionSet(0, 2, -3, 0, 0), Zero)
+    );
 }
 
 
diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointSpalartAllmaras/adjointSpalartAllmaras.C b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointSpalartAllmaras/adjointSpalartAllmaras.C
index d4c6e8f8f64..702d5b369d3 100644
--- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointSpalartAllmaras/adjointSpalartAllmaras.C
+++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointSpalartAllmaras/adjointSpalartAllmaras.C
@@ -440,32 +440,18 @@ void adjointSpalartAllmaras::updatePrimalRelatedFields()
 
 tmp<volScalarField> adjointSpalartAllmaras::allocateMask()
 {
-    tmp<volScalarField> mask;
     if (limitAdjointProduction_)
     {
-        mask = ATCModel::createLimiter(mesh_, coeffDict_);
-    }
-    else
-    {
-        mask = tmp<volScalarField>
-        (
-            new volScalarField
-            (
-                IOobject
-                (
-                   "unitMask",
-                   mesh_.time().timeName(),
-                   mesh_,
-                   IOobject::NO_READ,
-                   IOobject::NO_WRITE
-                ),
-                mesh_,
-                dimensionedScalar("unit", dimless, scalar(1))
-            )
-        );
+        return ATCModel::createLimiter(mesh_, coeffDict_);
     }
 
-    return mask;
+    return volScalarField::New
+    (
+        "unitMask",
+        IOobject::NO_REGISTER,
+        mesh_,
+        dimensionedScalar("unit", dimless, scalar(1))
+    );
 }
 
 
@@ -714,19 +700,12 @@ tmp<volSymmTensorField> adjointSpalartAllmaras::devReff
     const volVectorField& U
 ) const
 {
-    return
-        tmp<volSymmTensorField>::New
-        (
-            IOobject
-            (
-                "devRhoReff",
-                runTime_.timeName(),
-                mesh_,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE
-            ),
-           -nuEff()*devTwoSymm(fvc::grad(U))
-        );
+    return volSymmTensorField::New
+    (
+        "devRhoReff",
+        IOobject::NO_REGISTER,
+        -nuEff()*devTwoSymm(fvc::grad(U))
+    );
 }
 
 
@@ -767,10 +746,8 @@ tmp<volScalarField> adjointSpalartAllmaras::nutJacobianTMVar1() const
 
 tmp<scalarField> adjointSpalartAllmaras::diffusionCoeffVar1(label patchI) const
 {
-    tmp<scalarField> tdiffCoeff
-    (
-        new scalarField(mesh_.boundary()[patchI].size(), Zero)
-    );
+    auto tdiffCoeff =
+        tmp<scalarField>::New(mesh_.boundary()[patchI].size(), Zero);
 
     scalarField& diffCoeff = tdiffCoeff.ref();
 
diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointkOmegaSST/adjointkOmegaSST.C b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointkOmegaSST/adjointkOmegaSST.C
index fa3d542ff76..e04e2237059 100644
--- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointkOmegaSST/adjointkOmegaSST.C
+++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointkOmegaSST/adjointkOmegaSST.C
@@ -125,21 +125,14 @@ tmp<volScalarField::Internal> adjointkOmegaSST::GbyNu
 
 tmp<volScalarField> adjointkOmegaSST::zeroFirstCell()
 {
-    auto tzeroFirstCell =
-        tmp<volScalarField>::New
-        (
-            IOobject
-            (
-                "zeroFirstCell",
-                runTime_.timeName(),
-                mesh_,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE
-            ),
-            mesh_,
-            dimensionedScalar(dimless, Foam::one{})
-        );
-    volScalarField& zeroFirstCell = tzeroFirstCell.ref();
+    auto tzeroFirstCell = volScalarField::New
+    (
+        "zeroFirstCell",
+        IOobject::NO_REGISTER,
+        mesh_,
+        dimensionedScalar(dimless, Foam::one{})
+    );
+    auto& zeroFirstCell = tzeroFirstCell.ref();
 
     firstCellIDs_.resize(mesh_.nCells(), -1);
     label counter(0);
@@ -1799,8 +1792,7 @@ tmp<volSymmTensorField> adjointkOmegaSST::devReff
     const volVectorField& U
 ) const
 {
-    return
-        tmp<volSymmTensorField>::New
+    return tmp<volSymmTensorField>::New
         (
             IOobject
             (
diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointTurbulenceModel/adjointTurbulenceModel.H b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointTurbulenceModel/adjointTurbulenceModel.H
index ebabdf33667..0ddf9e2385e 100644
--- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointTurbulenceModel/adjointTurbulenceModel.H
+++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointTurbulenceModel/adjointTurbulenceModel.H
@@ -174,12 +174,12 @@ public:
             const autoPtr<incompressible::RASModelVariables>&
                 turbVars = primalVars_.RASModelVariables();
 
-            return
-                tmp<volScalarField>::New
-                (
-                    "nuEff",
-                    lamTrans.nu() + turbVars().nut()
-                );
+            return volScalarField::New
+            (
+                "nuEff",
+                IOobject::NO_REGISTER,
+                lamTrans.nu() + turbVars().nut()
+            );
         }
 
         //- Return the effective viscosity on a given patch
diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/turbulenceModelVariables/RAS/RASModelVariables/RASModelVariables.C b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/turbulenceModelVariables/RAS/RASModelVariables/RASModelVariables.C
index a16f7677e7d..07650771779 100644
--- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/turbulenceModelVariables/RAS/RASModelVariables/RASModelVariables.C
+++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/turbulenceModelVariables/RAS/RASModelVariables/RASModelVariables.C
@@ -305,16 +305,10 @@ tmp<volScalarField> RASModelVariables::nutJacobianVar1
         << "jutJacobianVar1 not implemented for the current turbulence model."
         << "Returning zero field" << endl;
 
-    return tmp<volScalarField>::New
+    return volScalarField::New
     (
-        IOobject
-        (
-            "nutJacobianVar1",
-            mesh_.time().timeName(),
-            mesh_,
-            IOobject::NO_READ,
-            IOobject::NO_WRITE
-        ),
+        "nutJacobianVar1",
+        IOobject::NO_REGISTER,
         mesh_,
         dimensionedScalar(dimless, Zero)
     );
@@ -330,16 +324,10 @@ tmp<volScalarField> RASModelVariables::nutJacobianVar2
         << "nutJacobianVar2 not implemented for the current turbulence model."
         << "Returning zero field" << endl;
 
-    return tmp<volScalarField>::New
+    return volScalarField::New
     (
-        IOobject
-        (
-            "nutJacobianVar2",
-            mesh_.time().timeName(),
-            mesh_,
-            IOobject::NO_READ,
-            IOobject::NO_WRITE
-        ),
+        "nutJacobianVar2",
+        IOobject::NO_REGISTER,
         mesh_,
         dimensionedScalar(dimless, Zero)
     );
@@ -426,16 +414,10 @@ tmp<volSymmTensorField> RASModelVariables::devReff
     const volVectorField& U
 ) const
 {
-    return tmp<volSymmTensorField>::New
+    return volSymmTensorField::New
     (
-        IOobject
-        (
-            "devRhoReff",
-            mesh_.time().timeName(),
-            mesh_,
-            IOobject::NO_READ,
-            IOobject::NO_WRITE
-        ),
+        "devRhoReff",
+        IOobject::NO_REGISTER,
       - (laminarTransport.nu() + nut())*devTwoSymm(fvc::grad(U))
     );
 }
diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/turbulenceModelVariables/RAS/RASModelVariables/RASModelVariablesI.H b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/turbulenceModelVariables/RAS/RASModelVariables/RASModelVariablesI.H
index ccbc5285b8d..e05c8ea5c93 100644
--- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/turbulenceModelVariables/RAS/RASModelVariables/RASModelVariablesI.H
+++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/turbulenceModelVariables/RAS/RASModelVariables/RASModelVariablesI.H
@@ -148,20 +148,13 @@ inline tmp<volScalarField> RASModelVariables::nut() const
         return tmp<volScalarField>(nutRef());
     }
 
-    return
-        tmp<volScalarField>::New
-        (
-            IOobject
-            (
-                "dummylaminarNut",
-                mesh_.time().timeName(),
-                mesh_,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE
-            ),
-            mesh_,
-            dimensionedScalar(dimViscosity, Zero)
-        );
+    return volScalarField::New
+    (
+        "dummylaminarNut",
+        IOobject::NO_REGISTER,
+        mesh_,
+        dimensionedScalar(dimViscosity, Zero)
+    );
 }
 
 
diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/turbulenceModelVariables/RAS/SpalartAllmaras/SpalartAllmaras.C b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/turbulenceModelVariables/RAS/SpalartAllmaras/SpalartAllmaras.C
index c583938e484..44a15b8222f 100644
--- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/turbulenceModelVariables/RAS/SpalartAllmaras/SpalartAllmaras.C
+++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/turbulenceModelVariables/RAS/SpalartAllmaras/SpalartAllmaras.C
@@ -80,16 +80,10 @@ tmp<volScalarField> SpalartAllmaras::nutJacobianVar1
     const singlePhaseTransportModel& laminarTransport
 ) const
 {
-    auto tnutJacobian = tmp<volScalarField>::New
+    auto tnutJacobian = volScalarField::New
     (
-        IOobject
-        (
-            "nutJacobianVar1",
-            mesh_.time().timeName(),
-            mesh_,
-            IOobject::NO_READ,
-            IOobject::NO_WRITE
-        ),
+        "nutJacobianVar1",
+        IOobject::NO_REGISTER,
         mesh_,
         dimensionedScalar(dimless, Zero)
     );
diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/turbulenceModelVariables/RAS/kOmegaSST/kOmegaSST.C b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/turbulenceModelVariables/RAS/kOmegaSST/kOmegaSST.C
index cb02c4b7b60..fde3ec198a3 100644
--- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/turbulenceModelVariables/RAS/kOmegaSST/kOmegaSST.C
+++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/turbulenceModelVariables/RAS/kOmegaSST/kOmegaSST.C
@@ -63,7 +63,8 @@ void kOmegaSST::allocateMeanFields()
                     mesh_.time().timeName(),
                     mesh_,
                     IOobject::READ_IF_PRESENT,
-                    IOobject::AUTO_WRITE
+                    IOobject::AUTO_WRITE,
+                    IOobject::REGISTER
                 ),
                 mesh_,
                 dimensionedScalar(dimArea/pow3(dimTime), Zero)
@@ -120,12 +121,13 @@ tmp<volScalarField::Internal> kOmegaSST::computeG()
     );
 
     // NB: leave tmp registered (for correctBoundaryConditions)
-    auto tG =
-        tmp<volScalarField::Internal>::New
-        (
-            turbModel.GName(),
-            nutRefInst()*GbyNu0
-        );
+    auto tG = volScalarField::Internal::New
+    (
+        turbModel.GName(),
+        IOobject::REGISTER,
+        nutRefInst()*GbyNu0
+    );
+
     // Use correctBoundaryConditions instead of updateCoeffs to avoid
     // messing with updateCoeffs in the next iteration of omegaEqn
     TMVar2Inst().correctBoundaryConditions();
-- 
GitLab