From 3ef0d19ef42bd210ea17114eb9e0c782ba3ce9e5 Mon Sep 17 00:00:00 2001 From: Vaggelis Papoutsis Date: Thu, 22 Jul 2021 19:04:03 +0300 Subject: [PATCH 1/3] ENH: added functionality for smoothing the sensitivity derivatives A Helmholtz-like filter is applied to the original field of sensitivity derivatives. The corresponding PDE is solved on the sensitivity patches, using the finite area infrastructure. A smoothing radius is needed, which is computed based on the average 'length' of the boundary faces, if not provided by the user explicitly. If an faMesh is provided, it will be used; otherwise it will be created on the fly based on either an faMeshDefinition dictionary in system or one constructed internally based on the sensitivity patches. --- .../adjointOptimisation/adjoint/Make/options | 2 + .../sensitivitySurfaceIncompressible.C | 202 +++++++++++++++++- .../sensitivitySurfaceIncompressible.H | 40 +++- 3 files changed, 238 insertions(+), 6 deletions(-) diff --git a/src/optimisation/adjointOptimisation/adjoint/Make/options b/src/optimisation/adjointOptimisation/adjoint/Make/options index 44dec84580..f3041856b6 100644 --- a/src/optimisation/adjointOptimisation/adjoint/Make/options +++ b/src/optimisation/adjointOptimisation/adjoint/Make/options @@ -1,5 +1,6 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/finiteArea/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/surfMesh/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ @@ -14,6 +15,7 @@ EXE_INC = \ LIB_LIBS = \ -lfiniteVolume \ + -lfiniteArea \ -lmeshTools \ -lsurfMesh \ -lsampling \ diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivitySurface/sensitivitySurfaceIncompressible.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivitySurface/sensitivitySurfaceIncompressible.C index 90bcce43aa..e17c5365a8 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivitySurface/sensitivitySurfaceIncompressible.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivitySurface/sensitivitySurfaceIncompressible.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2020 PCOpt/NTUA - Copyright (C) 2013-2020 FOSS GP + Copyright (C) 2007-2021 PCOpt/NTUA + Copyright (C) 2013-2021 FOSS GP Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -31,6 +31,11 @@ License #include "PrimitivePatchInterpolation.H" #include "syncTools.H" #include "addToRunTimeSelectionTable.H" +#include "faCFD.H" +#include "fixedValueFaPatchFieldsFwd.H" +#include "fixedValueFaPatchFields.H" +#include "zeroGradientFaPatchFieldsFwd.H" +#include "zeroGradientFaPatchFields.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -42,7 +47,7 @@ namespace incompressible // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -defineTypeNameAndDebug(sensitivitySurface, 0); +defineTypeNameAndDebug(sensitivitySurface, 1); addToRunTimeSelectionTable ( adjointSensitivity, @@ -214,6 +219,188 @@ void sensitivitySurface::setSuffixName() } +void sensitivitySurface::smoothSensitivities() +{ + // Read in parameters + const label iters(dict().getOrDefault