BUG: continuation of updateMethods with empty activeDesignVariables

When activeDesignVariables are not set explicitly, all design variables
are treated as active. These were allocated properly when starting from
0 but not when starting from an intermediate optimisation cycle
(e.g. running 5 optimisation cycles, stopping and restarting).

TUT: added a new tutorial including the restart of an optimisation run
to help identify future regression
This commit is contained in:
Vaggelis Papoutsis 2019-12-31 20:03:22 +02:00 committed by Andrew Heather
parent 60efde8c09
commit 254d38d772
24 changed files with 922 additions and 32 deletions

View File

@ -51,11 +51,7 @@ void Foam::BFGS::allocateMatrices()
// Set active design variables, if necessary // Set active design variables, if necessary
if (activeDesignVars_.empty()) if (activeDesignVars_.empty())
{ {
activeDesignVars_.setSize(correction_.size()); activeDesignVars_ = identity(objectiveDerivatives_.size());
forAll(activeDesignVars_, dvI)
{
activeDesignVars_[dvI] = dvI;
}
} }
// Set previous HessianInv to be a diagonal matrix // Set previous HessianInv to be a diagonal matrix
@ -155,9 +151,14 @@ void Foam::BFGS::readFromDict()
optMethodIODict_.readEntry("counter", counter_); optMethodIODict_.readEntry("counter", counter_);
optMethodIODict_.readEntry("eta", eta_); optMethodIODict_.readEntry("eta", eta_);
label n = HessianInvOld_.n(); const label n(HessianInvOld_.n());
HessianInv_ = SquareMatrix<scalar>(n, Zero); HessianInv_ = SquareMatrix<scalar>(n, Zero);
correction_ = scalarField(correctionOld_.size(), Zero); correction_ = scalarField(correctionOld_.size(), Zero);
if (activeDesignVars_.empty())
{
activeDesignVars_ = identity(n);
}
} }
} }

View File

@ -51,11 +51,7 @@ void Foam::DBFGS::allocateMatrices()
// Set active design variables, if necessary // Set active design variables, if necessary
if (activeDesignVars_.empty()) if (activeDesignVars_.empty())
{ {
activeDesignVars_.setSize(correction_.size()); activeDesignVars_ = identity(objectiveDerivatives_.size());
forAll(activeDesignVars_, dvI)
{
activeDesignVars_[dvI] = dvI;
}
} }
// Set previous Hessian to be a diagonal matrix // Set previous Hessian to be a diagonal matrix
@ -162,6 +158,11 @@ void Foam::DBFGS::readFromDict()
label n = HessianOld_.n(); label n = HessianOld_.n();
Hessian_ = SquareMatrix<scalar>(n, Zero); Hessian_ = SquareMatrix<scalar>(n, Zero);
correction_ = scalarField(correctionOld_.size(), Zero); correction_ = scalarField(correctionOld_.size(), Zero);
if (activeDesignVars_.empty())
{
activeDesignVars_ = identity(n);
}
} }
} }

View File

@ -51,11 +51,7 @@ void Foam::LBFGS::allocateMatrices()
// Set active design variables, if necessary // Set active design variables, if necessary
if (activeDesignVars_.empty()) if (activeDesignVars_.empty())
{ {
activeDesignVars_.setSize(objectiveDerivatives_.size()); activeDesignVars_ = identity(objectiveDerivatives_.size());
forAll(activeDesignVars_, dvI)
{
activeDesignVars_[dvI] = dvI;
}
} }
// Allocate vectors // Allocate vectors
@ -184,6 +180,11 @@ void Foam::LBFGS::readFromDict()
optMethodIODict_.readEntry("correctionOld", correctionOld_); optMethodIODict_.readEntry("correctionOld", correctionOld_);
correction_ = scalarField(correctionOld_.size(), Zero); correction_ = scalarField(correctionOld_.size(), Zero);
if (activeDesignVars_.empty())
{
activeDesignVars_ = identity(derivativesOld_.size());
}
} }
} }

View File

@ -58,11 +58,7 @@ void Foam::SQP::allocateMatrices()
// Set active design variables, if necessary // Set active design variables, if necessary
if (activeDesignVars_.empty()) if (activeDesignVars_.empty())
{ {
activeDesignVars_.setSize(correction_.size()); activeDesignVars_ = identity(objectiveDerivatives_.size());
forAll(activeDesignVars_, dvI)
{
activeDesignVars_[dvI] = dvI;
}
} }
// Set previous Hessian to be a diagonal matrix // Set previous Hessian to be a diagonal matrix
@ -269,6 +265,11 @@ void Foam::SQP::readFromDict()
optMethodIODict_.readEntry("eta", eta_); optMethodIODict_.readEntry("eta", eta_);
correction_ = scalarField(correctionOld_.size(), Zero); correction_ = scalarField(correctionOld_.size(), Zero);
if (activeDesignVars_.empty())
{
activeDesignVars_ = identity(correction_.size());
}
} }
} }

View File

@ -51,11 +51,7 @@ void Foam::SR1::allocateMatrices()
// Set active design variables, if necessary // Set active design variables, if necessary
if (activeDesignVars_.empty()) if (activeDesignVars_.empty())
{ {
activeDesignVars_.setSize(correction_.size()); activeDesignVars_ = identity(objectiveDerivatives_.size());
forAll(activeDesignVars_, dvI)
{
activeDesignVars_[dvI] = dvI;
}
} }
// Set previous HessianInv to be a diagonal matrix // Set previous HessianInv to be a diagonal matrix
@ -146,9 +142,14 @@ void Foam::SR1::readFromDict()
optMethodIODict_.readEntry("counter", counter_); optMethodIODict_.readEntry("counter", counter_);
optMethodIODict_.readEntry("eta", eta_); optMethodIODict_.readEntry("eta", eta_);
label n = HessianInvOld_.n(); const label n(HessianInvOld_.n());
HessianInv_ = SquareMatrix<scalar>(n, Zero); HessianInv_ = SquareMatrix<scalar>(n, Zero);
correction_ = scalarField(correctionOld_.size(), Zero); correction_ = scalarField(correctionOld_.size(), Zero);
if (activeDesignVars_.empty())
{
activeDesignVars_ = identity(n);
}
} }
} }

View File

@ -51,11 +51,7 @@ void Foam::conjugateGradient::allocateFields()
// Set active design variables, if necessary // Set active design variables, if necessary
if (activeDesignVars_.empty()) if (activeDesignVars_.empty())
{ {
activeDesignVars_.setSize(objectiveDerivatives_.size()); activeDesignVars_ = identity(objectiveDerivatives_.size());
forAll(activeDesignVars_, dvI)
{
activeDesignVars_[dvI] = dvI;
}
} }
// Allocate old fields // Allocate old fields
@ -75,6 +71,11 @@ void Foam::conjugateGradient::readFromDict()
label nDVs = optMethodIODict_.get<label>("nDVs"); label nDVs = optMethodIODict_.get<label>("nDVs");
correction_ = scalarField(nDVs, Zero); correction_ = scalarField(nDVs, Zero);
if (activeDesignVars_.empty())
{
activeDesignVars_ = identity(nDVs);
}
} }
} }

View File

@ -0,0 +1,55 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volVectorField;
location "0";
object U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [ 0 1 -1 0 0 0 0 ];
internalField uniform ( 3.95 0 0 );
boundaryField
{
frontBack
{
type empty;
}
sideWall
{
type fixedValue;
value uniform ( 0 0 0 );
}
lower
{
type fixedValue;
value uniform ( 0 0 0 );
}
upper
{
type fixedValue;
value uniform ( 0 0 0 );
}
Inlet
{
type fixedValue;
value uniform ( 3.95 0 0 );
}
Outlet
{
type zeroGradient;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,56 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volVectorField;
location "0";
object Ua;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [ 0 1 -1 0 0 0 0 ];
internalField uniform ( 0 0 0 );
boundaryField
{
frontBack
{
type empty;
}
sideWall
{
type adjointWallVelocity;
value uniform ( 0 0 0 );
}
upper
{
type adjointWallVelocity;
value uniform ( 0 0 0 );
}
Inlet
{
type adjointInletVelocity;
value uniform ( 0 0 0 );
}
Outlet
{
type adjointOutletVelocity;
value uniform ( 0 0 0 );
}
lower
{
type adjointWallVelocity;
value uniform ( 0 0 0 );
}
}
// ************************************************************************* //

View File

@ -0,0 +1,55 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object nuTilda;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [ 0 2 -1 0 0 0 0 ];
internalField uniform 4.5e-05;
boundaryField
{
frontBack
{
type empty;
}
sideWall
{
type fixedValue;
value uniform 0;
}
upper
{
type fixedValue;
value uniform 0;
}
lower
{
type fixedValue;
value uniform 0;
}
Inlet
{
type fixedValue;
value uniform 4.5e-05;
}
Outlet
{
type zeroGradient;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,60 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object nuaTilda;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [ 0 0 -1 0 0 0 0 ];
internalField uniform 0;
boundaryField
{
frontBack
{
type empty;
}
sideWall
{
type fixedValue;
value uniform 0;
}
upper
{
type fixedValue;
value uniform 0;
}
lower
{
type fixedValue;
value uniform 0;
}
Inlet
{
type adjointInletNuaTilda;
value uniform 0;
}
Outlet
{
type adjointOutletNuaTilda;
value uniform 0;
}
defaultFaces
{
type empty;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,55 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object nut;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [ 0 2 -1 0 0 0 0 ];
internalField uniform 3.15e-06;
boundaryField
{
frontBack
{
type empty;
}
sideWall
{
type nutLowReWallFunction;
value uniform 0;
}
upper
{
type nutLowReWallFunction;
value uniform 0;
}
lower
{
type nutLowReWallFunction;
value uniform 0;
}
Inlet
{
type fixedValue;
value uniform 3.15e-06;
}
Outlet
{
type zeroGradient;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,52 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object p;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [ 0 2 -2 0 0 0 0 ];
internalField uniform 0;
boundaryField
{
frontBack
{
type empty;
}
lower
{
type zeroGradient;
}
upper
{
type zeroGradient;
}
sideWall
{
type zeroGradient;
}
Inlet
{
type zeroGradient;
}
Outlet
{
type fixedValue;
value uniform 0;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,52 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object pa;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [ 0 2 -2 0 0 0 0 ];
internalField uniform 0;
boundaryField
{
frontBack
{
type empty;
}
sideWall
{
type zeroGradient;
}
upper
{
type zeroGradient;
}
Inlet
{
type zeroGradient;
}
Outlet
{
type adjointOutletPressure;
value uniform 0;
}
lower
{
type zeroGradient;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,10 @@
#!/bin/sh
cd "${0%/*}" || exit # Run from this directory
. ${WM_PROJECT_DIR:?}/bin/tools/CleanFunctions # Tutorial clean functions
#------------------------------------------------------------------------------
cleanCase
sed -i 's/endTime 10/endTime 5/g' system/controlDict
sed -i 's/fromFile/axisAligned/g' constant/dynamicMeshDict
#------------------------------------------------------------------------------

View File

@ -0,0 +1,17 @@
#!/bin/sh
cd "${0%/*}" || exit # Run from this directory
. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions # Tutorial run functions
#------------------------------------------------------------------------------
resourcesDir=$FOAM_TUTORIALS/incompressible/adjointOptimisationFoam/resources
\cp -r $resourcesDir/meshes/sbend/polyMesh constant
runApplication decomposePar
runParallel $(getApplication)
mv log.adjointOptimisationFoam log.adjointOptimisationFoamFirstPhase
sed -i 's/endTime 5/endTime 10/g' system/controlDict
sed -i 's/axisAligned/fromFile/g' constant/dynamicMeshDict
runParallel $(getApplication)
runParallel cumulativeDisplacement
#------------------------------------------------------------------------------

View File

@ -0,0 +1,21 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object adjointTurbulenceProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
adjointRASModel adjointSpalartAllmaras;
adjointTurbulence on;
// ************************************************************************* //

View File

@ -0,0 +1,47 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object dynamicMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
solver volumetricBSplinesMotionSolver;
volumetricBSplinesMotionSolverCoeffs
{
duct
{
type cartesian;
nCPsU 9;
nCPsV 5;
nCPsW 3;
degreeU 3;
degreeV 3;
degreeW 2;
controlPointsDefinition axisAligned;
lowerCpBounds (-1.1 -0.21 -0.05);
upperCpBounds ( 1.1 0.39 0.15);
confineX1movement false;
confineX2movement false;
confineX3movement true;
confineBoundaryControlPoints false;
boundUMinCPs ( (true true true) (true true true) );
boundUMaxCPs ( (true true true) (true true true) );
boundWMinCPs ( (true true true) );
boundWMaxCPs ( (true true true) );
}
}
// ************************************************************************* //

View File

@ -0,0 +1,21 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object transportProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
transportModel Newtonian;
nu nu [0 2 -1 0 0 0 0] 1.5e-05;
// ************************************************************************* //

View File

@ -0,0 +1,28 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object turbulenceProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
simulationType RAS;
RAS
{
RASModel SpalartAllmaras;
turbulence on;
printCoeffs on;
}
// ************************************************************************* //

View File

@ -0,0 +1,57 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application adjointOptimisationFoam;
startFrom latestTime;
startTime 0;
stopAt endTime;
endTime 5;
deltaT 1;
writeControl timeStep;
writeInterval 1;
purgeWrite 0;
writeFormat ascii;
writePrecision 16;
writeCompression true;
timeFormat general;
timePrecision 6;
runTimeModifiable yes;
functions
{
yPlus
{
type yPlus;
libs ("libfieldFunctionObjects.so");
writeControl writeTime;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,26 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object decomposeParDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
numberOfSubdomains 4;
method hierarchical;
coeffs
{
n (4 1 1);
}
// ************************************************************************* //

View File

@ -0,0 +1,71 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object fvSchemes;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
ddtSchemes
{
default steadyState;
}
gradSchemes
{
default Gauss linear;
gradDConv cellLimited Gauss linear 1;
}
divSchemes
{
default Gauss linear;
div(phi,U) bounded Gauss linearUpwind gradUConv;
div(phi,nuTilda) bounded Gauss linearUpwind gradNuTildaConv;
div(yPhi,yWall) Gauss linearUpwind gradDConv;
div(-phi,Ua) bounded Gauss linearUpwind gradUaConv;
div(-phi,nuaTilda) bounded Gauss linearUpwind gradNuaTildaConv;
div(-yPhi,da) Gauss linearUpwind gradDaConv;
div((nuEff*dev(grad(U).T()))) Gauss linear;
div((nuEff*dev(grad(Ua).T()))) Gauss linear;
}
laplacianSchemes
{
default Gauss linear limited 0.333;
}
interpolationSchemes
{
default linear;
}
snGradSchemes
{
default corrected;
}
wallDist
{
method advectionDiffusion;
advectionDiffusionCoeffs
{
method meshWave;
tolerance 3.e-6;
maxIter 1000;
epsilon 0.1;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,65 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
SIMPLE
{
nNonOrthogonalCorrectors 0;
}
solvers
{
"p|pa"
{
solver PCG;
preconditioner DIC;
tolerance 1e-9;
relTol 0.01;
};
"m|ma"
{
solver PCG;
preconditioner DIC;
tolerance 1e-9;
relTol 0.01;
};
"U|Ua|nuTilda|nuaTilda|yWall|da"
{
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-9;
relTol 0.1;
};
}
relaxationFactors
{
fields
{
p 0.5;
pa 0.5;
}
equations
{
U 0.7;
Ua 0.7;
nuTilda 0.7;
nuaTilda 0.7;
yWall 0.7;
da 0.7;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,136 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object optimisationDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
optimisationManager steadyOptimisation;
primalSolvers
{
p1
{
active true;
type incompressible;
solver simple;
solutionControls
{
nIters 3000;
residualControl
{
"p.*" 1.e-7;
"U.*" 1.e-7;
"nuTilda.*" 1.e-7;
}
}
}
}
adjointManagers
{
am1
{
primalSolver p1;
adjointSolvers
{
as1
{
// choose adjoint solver
//----------------------
active true;
type incompressible;
solver adjointSimple;
// manage objectives
//------------------
objectives
{
type incompressible;
objectiveNames
{
losses
{
weight 1;
type PtLosses;
patches (Inlet Outlet);
}
}
}
// ATC treatment
//--------------
ATCModel
{
ATCModel standard;
}
// solution control
//------------------
solutionControls
{
nIters 3000;
residualControl
{
"pa.*" 1.e-7;
"Ua.*" 1.e-7;
}
}
}
}
}
}
optimisation
{
optimisationType
{
type shapeOptimisation;
writeEachMesh true;
}
sensitivities
{
type volumetricBSplinesFI;
patches (lower upper);
}
updateMethod
{
method BFGS;
BFGS
{
etaHessian 0.8;
scaleFirstHessian true;
/*
activeDesignVariables
(
141 142 144 145 147 148
150 151 153 154 168 169
171 172 174 175 177 178
180 181 195 196 198 199
201 202 204 205 207 208
222 223 225 226 228 229
231 232 234 235 249 250
252 253 255 256 258 259
261 262
);
*/
}
}
meshMovement
{
type volumetricBSplines;
maxAllowedDisplacement 2.e-3;
}
}
// ************************************************************************* //