ENH: use tmp field factory methods [11] (#2723)

- src/optimisation
This commit is contained in:
Mark Olesen
2024-01-23 10:55:56 +01:00
parent c138f89c1f
commit ec2b1be8c5
20 changed files with 137 additions and 261 deletions

View File

@ -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);

View File

@ -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();

View File

@ -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);
}

View File

@ -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());
}

View File

@ -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();

View File

@ -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
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -262,7 +262,7 @@ void Foam::designVariables::addFvOptions
Foam::tmp<Foam::scalarField> Foam::designVariables::constraintValues()
{
return tmp<scalarField>(nullptr);
return nullptr;
}

View File

@ -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);
}

View File

@ -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();

View File

@ -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_)

View File

@ -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()
)

View File

@ -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()
)

View File

@ -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)
);
}

View File

@ -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();

View File

@ -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
(

View File

@ -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

View File

@ -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))
);
}

View File

@ -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)
);
}

View File

@ -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)
);

View File

@ -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();