mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
A set of libraries and executables creating a workflow for performing gradient-based optimisation loops. The main executable (adjointOptimisationFoam) solves the flow (primal) equations, followed by the adjoint equations and, eventually, the computation of sensitivity derivatives. Current functionality supports the solution of the adjoint equations for incompressible turbulent flows, including the adjoint to the Spalart-Allmaras turbulence model and the adjoint to the nutUSpaldingWallFunction, [1], [2]. Sensitivity derivatives are computed with respect to the normal displacement of boundary wall nodes/faces (the so-called sensitivity maps) following the Enhanced Surface Integrals (E-SI) formulation, [3]. The software was developed by PCOpt/NTUA and FOSS GP, with contributions from Dr. Evangelos Papoutsis-Kiachagias, Konstantinos Gkaragounis, Professor Kyriakos Giannakoglou, Andy Heather and contributions in earlier version from Dr. Ioannis Kavvadias, Dr. Alexandros Zymaris, Dr. Dimitrios Papadimitriou [1] A.S. Zymaris, D.I. Papadimitriou, K.C. Giannakoglou, and C. Othmer. Continuous adjoint approach to the Spalart-Allmaras turbulence model for incompressible flows. Computers & Fluids, 38(8):1528–1538, 2009. [2] E.M. Papoutsis-Kiachagias and K.C. Giannakoglou. Continuous adjoint methods for turbulent flows, applied to shape and topology optimization: Industrial applications. 23(2):255–299, 2016. [3] I.S. Kavvadias, E.M. Papoutsis-Kiachagias, and K.C. Giannakoglou. On the proper treatment of grid sensitivities in continuous adjoint methods for shape optimization. Journal of Computational Physics, 301:1–18, 2015. Integration into the official OpenFOAM release by OpenCFD
195 lines
4.7 KiB
Bash
195 lines
4.7 KiB
Bash
#---------------------------------*- sh -*-------------------------------------
|
|
# ========= |
|
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
# \\ / O peration |
|
|
# \\ / A nd | Copyright (C) 2015-2018 OpenCFD Ltd.
|
|
# \\/ M anipulation |
|
|
#------------------------------------------------------------------------------
|
|
# | Copyright (C) 2011-2016 OpenFOAM Foundation
|
|
#------------------------------------------------------------------------------
|
|
# License
|
|
# This file is part of OpenFOAM, licensed under GNU General Public License
|
|
# <http://www.gnu.org/licenses/>.
|
|
#
|
|
# Script
|
|
# CleanFunctions
|
|
#
|
|
# Description
|
|
# Miscellaneous cleanup functions for tutorial cases
|
|
#
|
|
#------------------------------------------------------------------------------
|
|
|
|
cleanTimeDirectories()
|
|
{
|
|
echo "Cleaning case $PWD"
|
|
zeros=""
|
|
while [ ${#zeros} -lt 8 ]
|
|
do
|
|
timeDir="0.${zeros}[1-9]*"
|
|
rm -rf ./${timeDir} ./-${timeDir} > /dev/null 2>&1
|
|
zeros="0$zeros"
|
|
done
|
|
rm -rf \
|
|
./[1-9]* ./-[1-9]* ./log ./log.* ./log-* ./logSummary.* \
|
|
./.fxLock ./*.xml ./ParaView* ./paraFoam* \
|
|
./*.blockMesh ./*.foam ./*.OpenFOAM \
|
|
./.setSet > /dev/null 2>&1
|
|
}
|
|
|
|
|
|
cleanDynamicCode()
|
|
{
|
|
if [ -d dynamicCode ] && [ -d system ]
|
|
then
|
|
rm -rf dynamicCode > /dev/null 2>&1
|
|
fi
|
|
}
|
|
|
|
|
|
cleanSnappyFiles()
|
|
{
|
|
rm -f \
|
|
constant/polyMesh/cellLevel \
|
|
constant/polyMesh/pointLevel \
|
|
constant/polyMesh/refinementHistory \
|
|
constant/polyMesh/level0Edge \
|
|
constant/polyMesh/surfaceIndex > /dev/null 2>&1
|
|
rm -f \
|
|
processor*/constant/polyMesh/cellLevel \
|
|
processor*/constant/polyMesh/pointLevel \
|
|
processor*/constant/polyMesh/refinementHistory \
|
|
processor*/constant/polyMesh/level0Edge \
|
|
processor*/constant/polyMesh/surfaceIndex > /dev/null 2>&1
|
|
rm -f \
|
|
constant/cellLevel \
|
|
constant/pointLevel \
|
|
0/cellLevel \
|
|
0/pointLevel > /dev/null 2>&1
|
|
rm -f \
|
|
processor*/constant/cellLevel \
|
|
processor*/constant/pointLevel \
|
|
processor*/0/cellLevel \
|
|
processor*/0/pointLevel > /dev/null 2>&1
|
|
}
|
|
|
|
|
|
cleanOptimisation()
|
|
{
|
|
rm -rf optimisation
|
|
rm -rf constant/controlPoints
|
|
}
|
|
|
|
|
|
cleanPostProcessing()
|
|
{
|
|
rm -rf Ensight EnSight ensightWrite insitu VTK > /dev/null 2>&1
|
|
rm -rf postProcessing > /dev/null 2>&1
|
|
rm -rf cuttingPlane > /dev/null 2>&1
|
|
rm -rf surfaceSampling > /dev/null 2>&1
|
|
}
|
|
|
|
|
|
cleanCase()
|
|
{
|
|
cleanTimeDirectories
|
|
cleanPostProcessing
|
|
cleanDynamicCode
|
|
cleanOptimisation
|
|
|
|
rm -rf processor* > /dev/null 2>&1
|
|
rm -rf TDAC > /dev/null 2>&1
|
|
rm -rf probes* > /dev/null 2>&1
|
|
rm -rf forces* > /dev/null 2>&1
|
|
rm -rf graphs* > /dev/null 2>&1
|
|
rm -rf sets > /dev/null 2>&1
|
|
rm -rf system/machines > /dev/null 2>&1
|
|
|
|
# From mpirunDebug
|
|
rm -f gdbCommands mpirun.schema
|
|
|
|
cleanSnappyFiles
|
|
rm -f 0/cellDist > /dev/null 2>&1
|
|
|
|
(
|
|
cd constant 2>/dev/null || exit 0
|
|
|
|
rm -rf \
|
|
cellDecomposition cellToRegion cellLevel* pointLevel* \
|
|
tetDualMesh \
|
|
> /dev/null 2>&1
|
|
|
|
# Old constant/polyMesh location for blockMeshDict still in use?
|
|
# - emit a gentle warning
|
|
if [ -e polyMesh/blockMeshDict.m4 ]
|
|
then
|
|
rm -f polyMesh/blockMeshDict > /dev/null 2>&1
|
|
echo
|
|
echo "Warning: not removing constant/polyMesh/ "
|
|
echo " it contains a blockMeshDict, which should normally be under system/ instead"
|
|
echo
|
|
elif [ -e polyMesh/blockMeshDict ]
|
|
then
|
|
echo
|
|
echo "Warning: not removing constant/polyMesh/ "
|
|
echo " it contains a blockMeshDict, which should normally be under system/ instead"
|
|
echo
|
|
else
|
|
# Remove polyMesh entirely if there is no blockMeshDict
|
|
rm -rf polyMesh > /dev/null 2>&1
|
|
fi
|
|
)
|
|
|
|
if [ -e system/blockMeshDict.m4 ]
|
|
then
|
|
rm -f system/blockMeshDict > /dev/null 2>&1
|
|
fi
|
|
}
|
|
|
|
|
|
# Frequently used - cleanCase and rm -rf 0/
|
|
cleanCase0()
|
|
{
|
|
cleanCase
|
|
rm -rf 0
|
|
}
|
|
|
|
|
|
removeCase()
|
|
{
|
|
echo "Removing case ${1:-unknown}"
|
|
[ "$#" -ge 1 ] && rm -rf "$1"
|
|
}
|
|
|
|
|
|
cleanSamples()
|
|
{
|
|
rm -rf sets samples sampleSurfaces > /dev/null 2>&1
|
|
}
|
|
|
|
|
|
cleanUcomponents()
|
|
{
|
|
rm -rf 0/Ux 0/Uy 0/Uz > /dev/null 2>&1
|
|
}
|
|
|
|
|
|
cleanFaMesh ()
|
|
{
|
|
(
|
|
cd constant/faMesh 2>/dev/null && \
|
|
rm -rf \
|
|
faceLabels* faBoundary* \
|
|
> /dev/null 2>&1 \
|
|
)
|
|
}
|
|
|
|
|
|
cleanApplication()
|
|
{
|
|
echo "Cleaning application $PWD"
|
|
wclean
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------------
|