TUT: updated the BFGS continuation tutorial

to be in line with the changes in 00f46a2c52 and added the same tutorial
which performs the optimisation in one-go, for comparison.
This commit is contained in:
Vaggelis Papoutsis
2021-12-13 11:04:54 +02:00
committed by Andrew Heather
parent 22d4f5fc20
commit ab40d502a7
22 changed files with 947 additions and 32 deletions

View File

@ -5,7 +5,6 @@ cd "${0%/*}" || exit # Run from this directory
cleanCase0
sed -i 's/endTime 10/endTime 5/g' system/controlDict
sed -i 's/fromFile/axisAligned/g' constant/dynamicMeshDict
foamDictionary system/controlDict -entry endTime -set 5
#------------------------------------------------------------------------------

View File

@ -13,8 +13,7 @@ runApplication decomposePar
runParallel -s adjointOptimisationFoamFirstPhase $(getApplication)
sed -i 's/endTime 5/endTime 10/g' system/controlDict
sed -i 's/axisAligned/fromFile/g' constant/dynamicMeshDict
foamDictionary system/controlDict -entry endTime -set 10
runParallel $(getApplication)

View File

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

View File

@ -16,7 +16,7 @@ FoamFile
dimensions [ 0 1 -1 0 0 0 0 ];
internalField uniform ( 3.95 0 0 );
internalField uniform ( 0.3 0 0 );
boundaryField
{
@ -24,31 +24,26 @@ boundaryField
{
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 );
value uniform ( 0.3 0 0 );
}
Outlet
{
type zeroGradient;

View File

@ -0,0 +1,59 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2106 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volVectorField;
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,60 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2106 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volVectorField;
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,59 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2106 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
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,65 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2106 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
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,59 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2106 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
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,56 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2106 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
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,56 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2106 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
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,8 @@
#!/bin/sh
cd "${0%/*}" || exit # Run from this directory
. ${WM_PROJECT_DIR:?}/bin/tools/CleanFunctions # Tutorial clean functions
#------------------------------------------------------------------------------
cleanCase0
#------------------------------------------------------------------------------

View File

@ -0,0 +1,18 @@
#!/bin/sh
cd "${0%/*}" || exit # Run from this directory
. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions # Tutorial run functions
#------------------------------------------------------------------------------
resourcesDir="$FOAM_TUTORIALS"/incompressible/adjointOptimisationFoam/resources
restore0Dir
cp -rf "$resourcesDir"/meshes/sbend/polyMesh/ constant/
runApplication decomposePar
runParallel $(getApplication)
runParallel cumulativeDisplacement
#------------------------------------------------------------------------------

View File

@ -0,0 +1,22 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2106 |
| \\ / 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,48 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2106 |
| \\ / 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);
confineUMovement false;
confineVMovement false;
confineWMovement true;
confineBoundaryControlPoints false;
confineUMinCPs ( (true true true) (true true true) );
confineUMaxCPs ( (true true true) (true true true) );
confineWMinCPs ( (true true true) );
confineWMaxCPs ( (true true true) );
}
}
// ************************************************************************* //

View File

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

View File

@ -0,0 +1,29 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2106 |
| \\ / 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,58 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2106 |
| \\ / 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 10;
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 (fieldFunctionObjects);
writeControl writeTime;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,27 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2106 |
| \\ / 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: v2106 |
| \\ / 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,68 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2106 |
| \\ / 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,137 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2106 |
| \\ / 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;
}
}
// ************************************************************************* //