diff --git a/src/optimisation/adjointOptimisation/adjoint/Make/files b/src/optimisation/adjointOptimisation/adjoint/Make/files index 0c72b563269ddcc67734e577710d00009b0db583..f377ef4598f5eb21831baa2258c62d2d05efbd60 100644 --- a/src/optimisation/adjointOptimisation/adjoint/Make/files +++ b/src/optimisation/adjointOptimisation/adjoint/Make/files @@ -55,6 +55,7 @@ objectives/incompressible/objectiveMoment/objectiveMoment.C objectives/incompressible/objectivePtLosses/objectivePtLosses.C objectives/incompressible/objectiveForceTarget/objectiveForceTarget.C objectives/incompressible/objectivePartialVolume/objectivePartialVolume.C +objectives/incompressible/objectiveNutSqr/objectiveNutSqr.C /* OBJECTIVE MANAGER*/ objectiveManager/objectiveManager/objectiveManager.C @@ -76,11 +77,12 @@ turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOu turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletFlux/adjointOutletFluxFvPatchScalarField.C /* ADJOINT BOUNDARY CONDITIONS */ -adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryCondition.C +adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryConditions.C adjointBoundaryConditions/adjointInletVelocity/adjointInletVelocityFvPatchVectorField.C adjointBoundaryConditions/adjointOutletVelocity/adjointOutletVelocityFvPatchVectorField.C adjointBoundaryConditions/adjointWallVelocity/adjointWallVelocityFvPatchVectorField.C adjointBoundaryConditions/adjointWallVelocityLowRe/adjointWallVelocityLowReFvPatchVectorField.C +adjointBoundaryConditions/adjointRotatingWallVelocity/adjointRotatingWallVelocityFvPatchVectorField.C adjointBoundaryConditions/adjointOutletPressure/adjointOutletPressureFvPatchScalarField.C adjointBoundaryConditions/adjointFarFieldPressure/adjointFarFieldPressureFvPatchScalarField.C adjointBoundaryConditions/adjointFarFieldVelocity/adjointFarFieldVelocityFvPatchVectorField.C @@ -125,6 +127,7 @@ optimisation/adjointSensitivity/sensitivity/sensitivity.C optimisation/adjointSensitivity/shapeSensitivitiesBase/shapeSensitivitiesBase.C incoSens=optimisation/adjointSensitivity/incompressible $(incoSens)/adjointSensitivity/adjointSensitivityIncompressible.C +$(incoSens)/shapeSensitivities/shapeSensitivitiesIncompressible.C $(incoSens)/adjointEikonalSolver/adjointEikonalSolverIncompressible.C $(incoSens)/adjointMeshMovementSolver/adjointMeshMovementSolverIncompressible.C $(incoSens)/sensitivitySurface/sensitivitySurfaceIncompressible.C diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryCondition.C b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryCondition.C index 735b9387a471318702bff4da3fe7cc384ed42397..2febf7f9125ba530823dd8072d0a420c1febfab3 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryCondition.C +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryCondition.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -28,6 +28,10 @@ License \*---------------------------------------------------------------------------*/ #include "adjointBoundaryCondition.H" +#include "emptyFvPatch.H" +#include "adjointSolverManager.H" +#include "HashTable.H" +#include "surfaceInterpolationScheme.H" #include "ATCUaGradU.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -35,14 +39,109 @@ License namespace Foam { -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // -defineTypeNameAndDebug(adjointBoundaryCondition, 0); +template<class Type> +template<class Type2> +tmp +< + Field<typename Foam::outerProduct<Foam::vector, Type2>::type> +> +adjointBoundaryCondition<Type>::computePatchGrad(word name) +{ + // Return field + typedef typename outerProduct<vector, Type2>::type GradType; + auto tresGrad = tmp<Field<GradType>>::New(patch_.size(), Zero); + auto& resGrad = tresGrad.ref(); + + const labelList& faceCells = patch_.faceCells(); + const fvMesh& mesh = patch_.boundaryMesh().mesh(); + const cellList& cells = mesh.cells(); + + // Go through the surfaceInterpolation scheme defined in gradSchemes for + // consistency + const GeometricField<Type2, fvPatchField, volMesh>& field = + mesh.lookupObject<volVectorField>(name); + + // Gives problems when grad(AdjointVar) is computed using a limited scheme, + // since it is not possible to know a priori how many words to expect in the + // stream. + // Interpolation scheme is now read through interpolation schemes. + /* + word gradSchemeName ("grad(" + name + ')'); + Istream& is = mesh.gradScheme(gradSchemeName); + word schemeData(is); + */ + + tmp<surfaceInterpolationScheme<Type2>> tinterpScheme + ( + surfaceInterpolationScheme<Type2>::New + ( + mesh, + mesh.interpolationScheme("interpolate(" + name + ")") + ) + ); + GeometricField<Type2, fvsPatchField, surfaceMesh> surfField + ( + tinterpScheme().interpolate(field) + ); + + // Auxiliary fields + const surfaceVectorField& Sf = mesh.Sf(); + tmp<vectorField> tnf = patch_.nf(); + const vectorField& nf = tnf(); + const scalarField& V = mesh.V(); + const labelUList& owner = mesh.owner(); + + // Compute grad value of cell adjacent to the boundary + forAll(faceCells, fI) + { + const label cI = faceCells[fI]; + const cell& cellI = cells[cI]; + for (const label faceI : cellI) // global face numbering + { + label patchID = mesh.boundaryMesh().whichPatch(faceI); + if (patchID == -1) //face is internal + { + const label own = owner[faceI]; + tensor flux = Sf[faceI]*surfField[faceI]; + if (cI == own) + { + resGrad[fI] += flux; + } + else + { + resGrad[fI] -= flux; + } + } + else // Face is boundary. Covers coupled patches as well + { + if (!isA<emptyFvPatch>(mesh.boundary()[patchID])) + { + const fvPatch& patchForFlux = mesh.boundary()[patchID]; + const label boundaryFaceI = faceI - patchForFlux.start(); + const vectorField& Sfb = Sf.boundaryField()[patchID]; + resGrad[fI] += + Sfb[boundaryFaceI] + *surfField.boundaryField()[patchID][boundaryFaceI]; + } + } + } + resGrad[fI] /= V[cI]; + } + + // This has concluded the computation of the grad at the cell next to the + // boundary. We now need to compute the grad at the boundary face + const fvPatchField<Type2>& bField = field.boundaryField()[patch_.index()]; + resGrad = nf*bField.snGrad() + (resGrad - nf*(nf & resGrad)); + + return tresGrad; +} -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // -bool adjointBoundaryCondition::addATCUaGradUTerm() +template<class Type> +bool adjointBoundaryCondition<Type>::addATCUaGradUTerm() { if (addATCUaGradUTerm_.empty()) { @@ -54,9 +153,10 @@ bool adjointBoundaryCondition::addATCUaGradUTerm() // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -adjointBoundaryCondition::adjointBoundaryCondition +template<class Type> +adjointBoundaryCondition<Type>::adjointBoundaryCondition ( - const adjointBoundaryCondition& adjointBC + const adjointBoundaryCondition<Type>& adjointBC ) : patch_(adjointBC.patch_), @@ -77,27 +177,53 @@ adjointBoundaryCondition::adjointBoundaryCondition {} +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class Type> +adjointBoundaryCondition<Type>::adjointBoundaryCondition +( + const fvPatch& p, + const DimensionedField<Type, volMesh>& iF, + const word& solverName +) +: + patch_(p), + managerName_("objectiveManager" + solverName), + adjointSolverName_(solverName), + simulationType_("incompressible"), + boundaryContrPtr_(nullptr), + addATCUaGradUTerm_(nullptr) +{ + // Set the boundaryContribution pointer + setBoundaryContributionPtr(); +} + + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -const word& adjointBoundaryCondition::objectiveManagerName() const +template<class Type> +const word& adjointBoundaryCondition<Type>::objectiveManagerName() const { return managerName_; } -const word& adjointBoundaryCondition::adjointSolverName() const +template<class Type> +const word& adjointBoundaryCondition<Type>::adjointSolverName() const { return adjointSolverName_; } -const word& adjointBoundaryCondition::simulationType() const +template<class Type> +const word& adjointBoundaryCondition<Type>::simulationType() const { return simulationType_; } -void adjointBoundaryCondition::setBoundaryContributionPtr() +template<class Type> +void adjointBoundaryCondition<Type>::setBoundaryContributionPtr() { // Note: // Check whether there is an objectiveFunctionManager object in the registry @@ -128,19 +254,35 @@ void adjointBoundaryCondition::setBoundaryContributionPtr() } +template<class Type> boundaryAdjointContribution& -adjointBoundaryCondition::getBoundaryAdjContribution() +adjointBoundaryCondition<Type>::getBoundaryAdjContribution() { return boundaryContrPtr_(); } -const ATCModel& adjointBoundaryCondition::getATC() const +template<class Type> +const ATCModel& adjointBoundaryCondition<Type>::getATC() const +{ + return + patch_.boundaryMesh().mesh().template + lookupObject<ATCModel>("ATCModel" + adjointSolverName_); +} + + +template<class Type> +tmp +< + Field<typename Foam::outerProduct<Foam::vector, Type>::type> +> +adjointBoundaryCondition<Type>::dxdbMult() const { return - patch_.boundaryMesh().mesh().lookupObject<ATCModel> + tmp<Field<typename Foam::outerProduct<Foam::vector, Type>::type>>::New ( - "ATCModel" + adjointSolverName_ + patch_.size(), + Zero ); } diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryCondition.H b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryCondition.H index 415a770b06809cb5cca02b93cb722fd877904b7c..4ec46c64c96867bc520b24b39cbfe082eb8c8933 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryCondition.H +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryCondition.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -46,9 +46,10 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class adjointBoundaryCondition Declaration + Class adjointBoundaryCondition Declaration \*---------------------------------------------------------------------------*/ +template<class Type> class adjointBoundaryCondition { protected: @@ -82,10 +83,10 @@ protected: // Protected Member Functions //- Get gradient of field on a specific boundary - template<class Type> + template<class Type2> tmp < - Field<typename Foam::outerProduct<Foam::vector, Type>::type> + Field<typename Foam::outerProduct<Foam::vector, Type2>::type> > computePatchGrad(word name); //- Whether to add the extra term from the UaGradU formulation @@ -103,7 +104,6 @@ public: // Constructors //- Construct from field and base name - template<class Type> adjointBoundaryCondition ( const fvPatch& p, @@ -112,11 +112,11 @@ public: ); //- Construct as copy - adjointBoundaryCondition(const adjointBoundaryCondition&); + adjointBoundaryCondition(const adjointBoundaryCondition<Type>&); //- Destructor - virtual ~adjointBoundaryCondition() = default; + virtual ~adjointBoundaryCondition<Type>() = default; // Member Functions @@ -140,6 +140,18 @@ public: //- ATC type might be useful for a number of BCs. Return here const ATCModel& getATC() const; + + + // Contribution to sensitivity derivatives + + //- Return contribution to sensitivity derivatives + // For adjoint boundary conditions corresponding to primal + // boundary conditions that include geometric components + // (e.g. rotatingWallVelocity) + virtual tmp + < + Field<typename Foam::outerProduct<Foam::vector, Type>::type> + > dxdbMult() const; }; @@ -150,11 +162,14 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository - #include "adjointBoundaryConditionTemplates.C" + #include "adjointBoundaryCondition.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif +#define makeAdjointBoundaryCondition(adjointTypeBoundaryCondition) \ +defineNamedTemplateTypeNameAndDebug(adjointTypeBoundaryCondition, 0); + // ************************************************************************* // diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryConditions.C b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryConditions.C new file mode 100644 index 0000000000000000000000000000000000000000..3b6da10de1e732726cfbea1e0ed82aff76c2e930 --- /dev/null +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryConditions.C @@ -0,0 +1,45 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2020 PCOpt/NTUA + Copyright (C) 2020 FOSS GP +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "adjointBoundaryConditions.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +makeAdjointBoundaryCondition(adjointScalarBoundaryCondition) +makeAdjointBoundaryCondition(adjointVectorBoundaryCondition) + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryConditions.H b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryConditions.H new file mode 100644 index 0000000000000000000000000000000000000000..9551722dad12b38a7fe79459c98d3a97c4aa7912 --- /dev/null +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryConditions.H @@ -0,0 +1,39 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2020 PCOpt/NTUA + Copyright (C) 2020 FOSS GP +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#ifndef adjointBoundaryConditions_H +#define adjointBoundaryConditions_H + +#include "adjointBoundaryCondition.H" +#include "adjointBoundaryConditionsFwd.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryConditionsFwd.H b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryConditionsFwd.H new file mode 100644 index 0000000000000000000000000000000000000000..88a093c2c2d6850ca004b153c0314e872435f133 --- /dev/null +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointBoundaryCondition/adjointBoundaryConditionsFwd.H @@ -0,0 +1,54 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2020 PCOpt/NTUA + Copyright (C) 2020 FOSS GP +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#ifndef adjointBoundaryConditionsFwd_H +#define adjointBoundaryConditionsFwd_H + +#include "fieldTypes.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +template<class Type> class adjointBoundaryCondition; + +typedef adjointBoundaryCondition<scalar> adjointScalarBoundaryCondition; +typedef adjointBoundaryCondition<vector> adjointVectorBoundaryCondition; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointFarFieldPressure/adjointFarFieldPressureFvPatchScalarField.C b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointFarFieldPressure/adjointFarFieldPressureFvPatchScalarField.C index 09dd5ea5c7cd554ffbf5fadaff7f6ded1e8e4cbf..695f1e4c4595fcde9e4f49243cef31685838947c 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointFarFieldPressure/adjointFarFieldPressureFvPatchScalarField.C +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointFarFieldPressure/adjointFarFieldPressureFvPatchScalarField.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -44,7 +44,7 @@ adjointFarFieldPressureFvPatchScalarField ) : fixedValueFvPatchScalarField(p, iF), - adjointBoundaryCondition(p, iF, word::null) + adjointScalarBoundaryCondition(p, iF, word::null) {} @@ -58,7 +58,7 @@ adjointFarFieldPressureFvPatchScalarField ) : fixedValueFvPatchScalarField(ptf, p, iF, mapper), - adjointBoundaryCondition(p, iF, ptf.adjointSolverName_) + adjointScalarBoundaryCondition(p, iF, ptf.adjointSolverName_) {} @@ -71,7 +71,7 @@ adjointFarFieldPressureFvPatchScalarField ) : fixedValueFvPatchScalarField(p, iF), - adjointBoundaryCondition(p, iF, dict.get<word>("solverName")) + adjointScalarBoundaryCondition(p, iF, dict.get<word>("solverName")) { fvPatchField<scalar>::operator= ( @@ -88,7 +88,7 @@ adjointFarFieldPressureFvPatchScalarField ) : fixedValueFvPatchScalarField(tppsf, iF), - adjointBoundaryCondition(tppsf) + adjointScalarBoundaryCondition(tppsf) {} diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointFarFieldPressure/adjointFarFieldPressureFvPatchScalarField.H b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointFarFieldPressure/adjointFarFieldPressureFvPatchScalarField.H index 0e69a91d5a79671756f37ac372ef98f8aa140f16..97406ef979ac3f0ea2c99b1e2f52279d8dc9b4b4 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointFarFieldPressure/adjointFarFieldPressureFvPatchScalarField.H +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointFarFieldPressure/adjointFarFieldPressureFvPatchScalarField.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -41,7 +41,7 @@ SourceFiles #include "fvPatchFields.H" #include "fixedValueFvPatchFields.H" -#include "adjointBoundaryCondition.H" +#include "adjointBoundaryConditions.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -55,7 +55,7 @@ namespace Foam class adjointFarFieldPressureFvPatchScalarField : public fixedValueFvPatchScalarField, - public adjointBoundaryCondition + public adjointScalarBoundaryCondition { public: diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointFarFieldVelocity/adjointFarFieldVelocityFvPatchVectorField.C b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointFarFieldVelocity/adjointFarFieldVelocityFvPatchVectorField.C index 1646cbe0a10c53c0fb57b1b47da629833a0669e3..88de315419b4714102a1edbf23e48c6f33bbf724 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointFarFieldVelocity/adjointFarFieldVelocityFvPatchVectorField.C +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointFarFieldVelocity/adjointFarFieldVelocityFvPatchVectorField.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -40,7 +40,7 @@ adjointFarFieldVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(p, iF), - adjointBoundaryCondition(p, iF, word::null) + adjointVectorBoundaryCondition(p, iF, word::null) {} @@ -54,7 +54,7 @@ adjointFarFieldVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(ptf, p, iF, mapper), - adjointBoundaryCondition(p, iF, ptf.adjointSolverName_) + adjointVectorBoundaryCondition(p, iF, ptf.adjointSolverName_) {} @@ -67,7 +67,7 @@ adjointFarFieldVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(p, iF), - adjointBoundaryCondition(p, iF, dict.get<word>("solverName")) + adjointVectorBoundaryCondition(p, iF, dict.get<word>("solverName")) { fvPatchField<vector>::operator= ( @@ -84,7 +84,7 @@ adjointFarFieldVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(pivpvf, iF), - adjointBoundaryCondition(pivpvf) + adjointVectorBoundaryCondition(pivpvf) {} diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointFarFieldVelocity/adjointFarFieldVelocityFvPatchVectorField.H b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointFarFieldVelocity/adjointFarFieldVelocityFvPatchVectorField.H index 13638347e6cacfc24e6d669312b32cd56ada7e8d..1f61a89d7a188e4a9cc23f9a8fd30f4369d7f678 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointFarFieldVelocity/adjointFarFieldVelocityFvPatchVectorField.H +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointFarFieldVelocity/adjointFarFieldVelocityFvPatchVectorField.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -41,7 +41,7 @@ SourceFiles #include "fvPatchFields.H" #include "fixedValueFvPatchFields.H" -#include "adjointBoundaryCondition.H" +#include "adjointBoundaryConditions.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -55,7 +55,7 @@ namespace Foam class adjointFarFieldVelocityFvPatchVectorField : public fixedValueFvPatchVectorField, - public adjointBoundaryCondition + public adjointVectorBoundaryCondition { public: diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointInletVelocity/adjointInletVelocityFvPatchVectorField.C b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointInletVelocity/adjointInletVelocityFvPatchVectorField.C index 6350f30d6374c36e2805fb935846c3293400c5ec..a5e71cb4c3373a54f2cb890a64db5b85d9f41743 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointInletVelocity/adjointInletVelocityFvPatchVectorField.C +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointInletVelocity/adjointInletVelocityFvPatchVectorField.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -42,7 +42,7 @@ adjointInletVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(p, iF), - adjointBoundaryCondition(p, iF, word::null) + adjointVectorBoundaryCondition(p, iF, word::null) {} @@ -56,7 +56,7 @@ adjointInletVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(ptf, p, iF, mapper), - adjointBoundaryCondition(p, iF, ptf.adjointSolverName_) + adjointVectorBoundaryCondition(p, iF, ptf.adjointSolverName_) {} @@ -69,7 +69,7 @@ adjointInletVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(p, iF), - adjointBoundaryCondition(p, iF, dict.get<word>("solverName")) + adjointVectorBoundaryCondition(p, iF, dict.get<word>("solverName")) { fvPatchField<vector>::operator= ( @@ -86,7 +86,7 @@ adjointInletVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(pivpvf, iF), - adjointBoundaryCondition(pivpvf) + adjointVectorBoundaryCondition(pivpvf) {} diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointInletVelocity/adjointInletVelocityFvPatchVectorField.H b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointInletVelocity/adjointInletVelocityFvPatchVectorField.H index e9c688bdbde99c2bf9374d4a8f6b9fea030a48b0..04d4891f0966af67446f1d69b9e9bb6cccc6c441 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointInletVelocity/adjointInletVelocityFvPatchVectorField.H +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointInletVelocity/adjointInletVelocityFvPatchVectorField.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -41,7 +41,7 @@ SourceFiles #include "fvPatchFields.H" #include "fixedValueFvPatchFields.H" -#include "adjointBoundaryCondition.H" +#include "adjointBoundaryConditions.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -55,7 +55,7 @@ namespace Foam class adjointInletVelocityFvPatchVectorField : public fixedValueFvPatchVectorField, - public adjointBoundaryCondition + public adjointVectorBoundaryCondition { public: diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletPressure/adjointOutletPressureFvPatchScalarField.C b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletPressure/adjointOutletPressureFvPatchScalarField.C index 5c76bc26716fc7195563ca7a35bcc402c8df93f4..b4f5015493981585dcc962ca6c8129a66997d831 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletPressure/adjointOutletPressureFvPatchScalarField.C +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletPressure/adjointOutletPressureFvPatchScalarField.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -45,7 +45,7 @@ adjointOutletPressureFvPatchScalarField ) : fixedValueFvPatchScalarField(p, iF), - adjointBoundaryCondition(p, iF, word::null) + adjointScalarBoundaryCondition(p, iF, word::null) {} @@ -59,7 +59,7 @@ adjointOutletPressureFvPatchScalarField ) : fixedValueFvPatchScalarField(ptf, p, iF, mapper), - adjointBoundaryCondition(p, iF, ptf.adjointSolverName_) + adjointScalarBoundaryCondition(p, iF, ptf.adjointSolverName_) {} @@ -72,7 +72,7 @@ adjointOutletPressureFvPatchScalarField ) : fixedValueFvPatchScalarField(p, iF), - adjointBoundaryCondition(p, iF, dict.get<word>("solverName")) + adjointScalarBoundaryCondition(p, iF, dict.get<word>("solverName")) { fvPatchField<scalar>::operator= ( @@ -89,7 +89,7 @@ adjointOutletPressureFvPatchScalarField ) : fixedValueFvPatchScalarField(tppsf, iF), - adjointBoundaryCondition(tppsf) + adjointScalarBoundaryCondition(tppsf) {} diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletPressure/adjointOutletPressureFvPatchScalarField.H b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletPressure/adjointOutletPressureFvPatchScalarField.H index 7e12c17cb704176871cc9488c50ff48fee349639..ad035cc6ff7f9eaac33884b80be1d6877ef15902 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletPressure/adjointOutletPressureFvPatchScalarField.H +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletPressure/adjointOutletPressureFvPatchScalarField.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -41,7 +41,7 @@ SourceFiles #include "fvPatchFields.H" #include "fixedValueFvPatchFields.H" -#include "adjointBoundaryCondition.H" +#include "adjointBoundaryConditions.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -55,7 +55,7 @@ namespace Foam class adjointOutletPressureFvPatchScalarField : public fixedValueFvPatchScalarField, - public adjointBoundaryCondition + public adjointScalarBoundaryCondition { public: diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletVelocity/adjointOutletVelocityFvPatchVectorField.C b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletVelocity/adjointOutletVelocityFvPatchVectorField.C index adc25347523361206961850f7ac2b8b7445ffd7d..4d3f2fce75d2acb8d6fe9ab9022c454c307b62a3 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletVelocity/adjointOutletVelocityFvPatchVectorField.C +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletVelocity/adjointOutletVelocityFvPatchVectorField.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -102,7 +102,7 @@ adjointOutletVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(p, iF), - adjointBoundaryCondition(p, iF, word::null) + adjointVectorBoundaryCondition(p, iF, word::null) {} @@ -116,7 +116,7 @@ adjointOutletVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(ptf, p, iF, mapper), - adjointBoundaryCondition(p, iF, ptf.adjointSolverName_) + adjointVectorBoundaryCondition(p, iF, ptf.adjointSolverName_) {} @@ -129,7 +129,7 @@ adjointOutletVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(p, iF), - adjointBoundaryCondition(p, iF, dict.get<word>("solverName")) + adjointVectorBoundaryCondition(p, iF, dict.get<word>("solverName")) { fvPatchField<vector>::operator= ( @@ -146,7 +146,7 @@ adjointOutletVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(pivpvf, iF), - adjointBoundaryCondition(pivpvf) + adjointVectorBoundaryCondition(pivpvf) {} diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletVelocity/adjointOutletVelocityFvPatchVectorField.H b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletVelocity/adjointOutletVelocityFvPatchVectorField.H index b0ae32e3eaca8570f05e8f1832940c47dccf8f65..95c57078aa6e78b21ea3a6f9a81c890b97eaa4fd 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletVelocity/adjointOutletVelocityFvPatchVectorField.H +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletVelocity/adjointOutletVelocityFvPatchVectorField.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ SourceFiles #include "fvPatchFields.H" #include "fixedValueFvPatchFields.H" -#include "adjointBoundaryCondition.H" +#include "adjointBoundaryConditions.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -60,7 +60,7 @@ namespace Foam class adjointOutletVelocityFvPatchVectorField : public fixedValueFvPatchVectorField, - public adjointBoundaryCondition + public adjointVectorBoundaryCondition { // Private Member Functions diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletVelocityFlux/adjointOutletVelocityFluxFvPatchVectorField.C b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletVelocityFlux/adjointOutletVelocityFluxFvPatchVectorField.C index 871db0a78616687b144671f19069847fc4ad2a7b..8abaf44d00c9eadc46ee9e0168c4620201974ef3 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletVelocityFlux/adjointOutletVelocityFluxFvPatchVectorField.C +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletVelocityFlux/adjointOutletVelocityFluxFvPatchVectorField.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -42,7 +42,7 @@ adjointOutletVelocityFluxFvPatchVectorField ) : fixedValueFvPatchVectorField(p, iF), - adjointBoundaryCondition(p, iF, word::null) + adjointVectorBoundaryCondition(p, iF, word::null) {} @@ -56,7 +56,7 @@ adjointOutletVelocityFluxFvPatchVectorField ) : fixedValueFvPatchVectorField(ptf, p, iF, mapper), - adjointBoundaryCondition(p, iF, ptf.adjointSolverName_) + adjointVectorBoundaryCondition(p, iF, ptf.adjointSolverName_) {} @@ -69,7 +69,7 @@ adjointOutletVelocityFluxFvPatchVectorField ) : fixedValueFvPatchVectorField(p, iF), - adjointBoundaryCondition(p, iF, dict.get<word>("solverName")) + adjointVectorBoundaryCondition(p, iF, dict.get<word>("solverName")) { fvPatchField<vector>::operator= ( @@ -86,7 +86,7 @@ adjointOutletVelocityFluxFvPatchVectorField ) : fixedValueFvPatchVectorField(pivpvf, iF), - adjointBoundaryCondition(pivpvf) + adjointVectorBoundaryCondition(pivpvf) {} diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletVelocityFlux/adjointOutletVelocityFluxFvPatchVectorField.H b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletVelocityFlux/adjointOutletVelocityFluxFvPatchVectorField.H index 854443b350789c524ae0c127bc7ca3ce98b972d4..3201b245ab79d4d7c403ef690b1944635b0b4b1a 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletVelocityFlux/adjointOutletVelocityFluxFvPatchVectorField.H +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointOutletVelocityFlux/adjointOutletVelocityFluxFvPatchVectorField.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -47,7 +47,7 @@ SourceFiles #include "fvPatchFields.H" #include "fixedValueFvPatchFields.H" -#include "adjointBoundaryCondition.H" +#include "adjointBoundaryConditions.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -61,7 +61,7 @@ namespace Foam class adjointOutletVelocityFluxFvPatchVectorField : public fixedValueFvPatchVectorField, - public adjointBoundaryCondition + public adjointVectorBoundaryCondition { // Private Member Functions diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointRotatingWallVelocity/adjointRotatingWallVelocityFvPatchVectorField.C b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointRotatingWallVelocity/adjointRotatingWallVelocityFvPatchVectorField.C new file mode 100644 index 0000000000000000000000000000000000000000..c7d4487a479238c20fbe4a326f9808cfd81b6b9e --- /dev/null +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointRotatingWallVelocity/adjointRotatingWallVelocityFvPatchVectorField.C @@ -0,0 +1,135 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2020 PCOpt/NTUA + Copyright (C) 2020 FOSS GP +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "adjointRotatingWallVelocityFvPatchVectorField.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::adjointRotatingWallVelocityFvPatchVectorField:: +adjointRotatingWallVelocityFvPatchVectorField +( + const fvPatch& p, + const DimensionedField<vector, volMesh>& iF +) +: + adjointWallVelocityFvPatchVectorField(p, iF), + origin_(), + axis_(Zero), + omega_(nullptr) +{} + + +Foam::adjointRotatingWallVelocityFvPatchVectorField:: +adjointRotatingWallVelocityFvPatchVectorField +( + const adjointRotatingWallVelocityFvPatchVectorField& ptf, + const fvPatch& p, + const DimensionedField<vector, volMesh>& iF, + const fvPatchFieldMapper& mapper +) +: + adjointWallVelocityFvPatchVectorField(ptf, p, iF, mapper), + origin_(ptf.origin_), + axis_(ptf.axis_), + omega_(ptf.omega_.clone()) +{} + + +Foam::adjointRotatingWallVelocityFvPatchVectorField:: +adjointRotatingWallVelocityFvPatchVectorField +( + const fvPatch& p, + const DimensionedField<vector, volMesh>& iF, + const dictionary& dict +) +: + adjointWallVelocityFvPatchVectorField(p, iF, dict), + origin_(dict.get<vector>("origin")), + axis_(dict.get<vector>("axis")), + omega_(Function1<scalar>::New("omega", dict)) +{} + + +Foam::adjointRotatingWallVelocityFvPatchVectorField:: +adjointRotatingWallVelocityFvPatchVectorField +( + const adjointRotatingWallVelocityFvPatchVectorField& pivpvf, + const DimensionedField<vector, volMesh>& iF +) +: + adjointWallVelocityFvPatchVectorField(pivpvf, iF), + origin_(pivpvf.origin_), + axis_(pivpvf.axis_), + omega_(pivpvf.omega_.clone()) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::tmp<Foam::tensorField> +Foam::adjointRotatingWallVelocityFvPatchVectorField::dxdbMult() const +{ + const scalar t(this->db().time().timeOutputValue()); + const scalar om(omega_->value(t)); + const vector omega(om*axis_/mag(axis_)); + tensor mult + ( + scalar(0), -omega.z(), omega.y(), + omega.z(), scalar(0), -omega.x(), + -omega.y(), omega.x(), scalar(0) + ); + + return tmp<tensorField>::New(patch().size(), mult); +} + + +void Foam::adjointRotatingWallVelocityFvPatchVectorField::write +( + Ostream& os +) const +{ + adjointWallVelocityFvPatchVectorField::write(os); + os.writeEntry("origin", origin_); + os.writeEntry("axis", axis_); + omega_->writeData(os); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makePatchTypeField + ( + fvPatchVectorField, + adjointRotatingWallVelocityFvPatchVectorField + ); +} + +// ************************************************************************* // diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointRotatingWallVelocity/adjointRotatingWallVelocityFvPatchVectorField.H b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointRotatingWallVelocity/adjointRotatingWallVelocityFvPatchVectorField.H new file mode 100644 index 0000000000000000000000000000000000000000..382ffa5baaaf9791b1521668825a0f70a096222f --- /dev/null +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointRotatingWallVelocity/adjointRotatingWallVelocityFvPatchVectorField.H @@ -0,0 +1,154 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2020 PCOpt/NTUA + Copyright (C) 2020 FOSS GP +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + + +Class + Foam::adjointRotatingWallVelocityFvPatchVectorField + +Description + The same as adjointWallVelocity but additionally computes the sensitivity + contribution emerging from the change in the positions of the face centres, + in case rotatingWallVelocity is used for the flow simulation. + +SourceFiles + adjointRotatingWallVelocityFvPatchVectorField.C + +\*---------------------------------------------------------------------------*/ + +#ifndef adjointRotatingWallVelocityFvPatchVectorField_H +#define adjointRotatingWallVelocityFvPatchVectorField_H + +#include "adjointWallVelocityFvPatchVectorField.H" +#include "Function1.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class adjointRotatingWallVelocity Declaration +\*---------------------------------------------------------------------------*/ + +class adjointRotatingWallVelocityFvPatchVectorField +: + public adjointWallVelocityFvPatchVectorField +{ +private: + + // Private Data + + //- Origin of the rotation + vector origin_; + + //- Axis of the rotation + vector axis_; + + //- Rotational speed + autoPtr<Function1<scalar>> omega_; + + +public: + + //- Runtime type information + TypeName("adjointRotatingWallVelocity"); + + + // Constructors + + //- Construct from patch and internal field + adjointRotatingWallVelocityFvPatchVectorField + ( + const fvPatch&, + const DimensionedField<vector, volMesh>& + ); + + //- Construct from patch, internal field and dictionary + adjointRotatingWallVelocityFvPatchVectorField + ( + const fvPatch&, + const DimensionedField<vector, volMesh>&, + const dictionary& + ); + + //- Construct by mapping given + //- adjointRotatingWallVelocityFvPatchVectorField onto a new patch + adjointRotatingWallVelocityFvPatchVectorField + ( + const adjointRotatingWallVelocityFvPatchVectorField&, + const fvPatch&, + const DimensionedField<vector, volMesh>&, + const fvPatchFieldMapper& + ); + + //- Construct and return a clone + virtual tmp<fvPatchVectorField> clone() const + { + return tmp<fvPatchVectorField> + ( + new adjointRotatingWallVelocityFvPatchVectorField(*this) + ); + } + + //- Construct as copy setting internal field reference + adjointRotatingWallVelocityFvPatchVectorField + ( + const adjointRotatingWallVelocityFvPatchVectorField&, + const DimensionedField<vector, volMesh>& + ); + + //- Construct and return a clone setting internal field reference + virtual tmp<fvPatchVectorField> clone + ( + const DimensionedField<vector, volMesh>& iF + ) const + { + return tmp<fvPatchVectorField> + ( + new adjointRotatingWallVelocityFvPatchVectorField(*this, iF) + ); + } + + + // Member functions + + //- Compute contribution to SDs + virtual tmp<tensorField> dxdbMult() const; + + //- Write + virtual void write(Ostream&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointWallVelocity/adjointWallVelocityFvPatchVectorField.C b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointWallVelocity/adjointWallVelocityFvPatchVectorField.C index 00db8159e8099bc9ed58801b1837395a666becee..32372f99affc5c919f480a9d14400b602efd258e 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointWallVelocity/adjointWallVelocityFvPatchVectorField.C +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointWallVelocity/adjointWallVelocityFvPatchVectorField.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -42,7 +42,7 @@ adjointWallVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(p, iF), - adjointBoundaryCondition(p, iF, word::null), + adjointVectorBoundaryCondition(p, iF, word::null), kappa_(0.41), E_(9.8) {} @@ -58,7 +58,7 @@ adjointWallVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(ptf, p, iF, mapper), - adjointBoundaryCondition(p, iF, ptf.adjointSolverName_), + adjointVectorBoundaryCondition(p, iF, ptf.adjointSolverName_), kappa_(ptf.kappa_), E_(ptf.E_) {} @@ -73,7 +73,7 @@ adjointWallVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(p, iF), - adjointBoundaryCondition(p, iF, dict.get<word>("solverName")), + adjointVectorBoundaryCondition(p, iF, dict.get<word>("solverName")), kappa_(dict.getOrDefault<scalar>("kappa", 0.41)), E_(dict.getOrDefault<scalar>("E", 9.8)) { @@ -92,7 +92,7 @@ adjointWallVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(pivpvf, iF), - adjointBoundaryCondition(pivpvf), + adjointVectorBoundaryCondition(pivpvf), kappa_(pivpvf.kappa_), E_(pivpvf.E_) {} diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointWallVelocity/adjointWallVelocityFvPatchVectorField.H b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointWallVelocity/adjointWallVelocityFvPatchVectorField.H index f2b5ed4bc3a050c2951079fc0c5d8e98e5e871bc..7ead8328d5b09f6d8221d49fbc2eec88614b4972 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointWallVelocity/adjointWallVelocityFvPatchVectorField.H +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointWallVelocity/adjointWallVelocityFvPatchVectorField.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -55,7 +55,7 @@ SourceFiles #include "fvPatchFields.H" #include "fixedValueFvPatchFields.H" -#include "adjointBoundaryCondition.H" +#include "adjointBoundaryConditions.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -69,7 +69,7 @@ namespace Foam class adjointWallVelocityFvPatchVectorField : public fixedValueFvPatchVectorField, - public adjointBoundaryCondition + public adjointVectorBoundaryCondition { private: diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointWallVelocityLowRe/adjointWallVelocityLowReFvPatchVectorField.C b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointWallVelocityLowRe/adjointWallVelocityLowReFvPatchVectorField.C index aacded67f8bf4820bb944d1bbe857ed1068b8102..606eb246250e0532ffd0565ebb61810120541df7 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointWallVelocityLowRe/adjointWallVelocityLowReFvPatchVectorField.C +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointWallVelocityLowRe/adjointWallVelocityLowReFvPatchVectorField.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -41,7 +41,7 @@ adjointWallVelocityLowReFvPatchVectorField ) : fixedValueFvPatchVectorField(p, iF), - adjointBoundaryCondition(p, iF, word::null) + adjointVectorBoundaryCondition(p, iF, word::null) {} @@ -55,7 +55,7 @@ adjointWallVelocityLowReFvPatchVectorField ) : fixedValueFvPatchVectorField(ptf, p, iF, mapper), - adjointBoundaryCondition(p, iF, ptf.adjointSolverName_) + adjointVectorBoundaryCondition(p, iF, ptf.adjointSolverName_) {} @@ -68,7 +68,7 @@ adjointWallVelocityLowReFvPatchVectorField ) : fixedValueFvPatchVectorField(p, iF), - adjointBoundaryCondition(p, iF, dict.get<word>("solverName")) + adjointVectorBoundaryCondition(p, iF, dict.get<word>("solverName")) { fvPatchField<vector>::operator= ( @@ -85,7 +85,7 @@ adjointWallVelocityLowReFvPatchVectorField ) : fixedValueFvPatchVectorField(pivpvf, iF), - adjointBoundaryCondition(pivpvf) + adjointVectorBoundaryCondition(pivpvf) {} diff --git a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointWallVelocityLowRe/adjointWallVelocityLowReFvPatchVectorField.H b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointWallVelocityLowRe/adjointWallVelocityLowReFvPatchVectorField.H index 5d4980c89d68c4244556453b30785bb9042ef34e..30a1752191db6267a3a98a2854050aa398dee02c 100644 --- a/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointWallVelocityLowRe/adjointWallVelocityLowReFvPatchVectorField.H +++ b/src/optimisation/adjointOptimisation/adjoint/adjointBoundaryConditions/adjointWallVelocityLowRe/adjointWallVelocityLowReFvPatchVectorField.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -41,7 +41,7 @@ SourceFiles #include "fvPatchFields.H" #include "fixedValueFvPatchFields.H" -#include "adjointBoundaryCondition.H" +#include "adjointBoundaryConditions.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -55,7 +55,7 @@ namespace Foam class adjointWallVelocityLowReFvPatchVectorField : public fixedValueFvPatchVectorField, - public adjointBoundaryCondition + public adjointVectorBoundaryCondition { public: diff --git a/src/optimisation/adjointOptimisation/adjoint/objectiveManager/objectiveManager/objectiveManager.C b/src/optimisation/adjointOptimisation/adjoint/objectiveManager/objectiveManager/objectiveManager.C index 89c6ef89be01d14b199e68009cf9b7fe185d5ed7..2420ebfb244a55e47c3d112cf623d061d309e55f 100644 --- a/src/optimisation/adjointOptimisation/adjoint/objectiveManager/objectiveManager/objectiveManager.C +++ b/src/optimisation/adjointOptimisation/adjoint/objectiveManager/objectiveManager/objectiveManager.C @@ -151,12 +151,16 @@ bool objectiveManager::readDict(const dictionary& dict) return true; } + void objectiveManager::updateNormalizationFactor() { // Update normalization factors for all objectives for (objective& obj : objectives_) { - obj.updateNormalizationFactor(); + if (obj.normalize()) + { + obj.updateNormalizationFactor(); + } } } @@ -173,7 +177,7 @@ void objectiveManager::update() void objectiveManager::updateOrNullify() { - //- Update contributions to adjoint if true, otherwise return nulls + // Update contributions to adjoint if true, otherwise return nulls for (objective& obj : objectives_) { if (obj.isWithinIntegrationTime()) diff --git a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveForceTarget/objectiveForceTarget.C b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveForceTarget/objectiveForceTarget.C index 19195b77b0be718a89cd38f4c7c61dc8e169353e..b6895320e3e9273132bd018efa69882f68e2772b 100644 --- a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveForceTarget/objectiveForceTarget.C +++ b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveForceTarget/objectiveForceTarget.C @@ -7,7 +7,7 @@ ------------------------------------------------------------------------------- Copyright (C) 2007-2019 PCOpt/NTUA Copyright (C) 2013-2019 FOSS GP - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -75,7 +75,7 @@ scalar objectiveForceTarget::J() } -void objectiveForceTarget::write() const +bool objectiveForceTarget::write(const bool valid) const { if (Pstream::master()) { @@ -99,6 +99,8 @@ void objectiveForceTarget::write() const << setw(width) << force_ << " " << setw(width) << target_ << endl; } + + return true; } diff --git a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveForceTarget/objectiveForceTarget.H b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveForceTarget/objectiveForceTarget.H index 1e6bb6acc3d7d0d104c859ad4ee75f2ab0cfea67..f94763aeb9e1c152ba6d02325f58f4a2b8a9bb60 100644 --- a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveForceTarget/objectiveForceTarget.H +++ b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveForceTarget/objectiveForceTarget.H @@ -7,7 +7,7 @@ ------------------------------------------------------------------------------- Copyright (C) 2007-2019 PCOpt/NTUA Copyright (C) 2013-2019 FOSS GP - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -92,7 +92,7 @@ public: scalar J(); //- Write objective value - void write() const; + virtual bool write(const bool valid = true) const; }; diff --git a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveIncompressible/objectiveIncompressible.C b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveIncompressible/objectiveIncompressible.C index ac7fa6fb1f6895960253a57b626bde936f22854b..dbc0789d24bd6a9d871fdbf1426f47bee22178e4 100644 --- a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveIncompressible/objectiveIncompressible.C +++ b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveIncompressible/objectiveIncompressible.C @@ -7,7 +7,7 @@ ------------------------------------------------------------------------------- Copyright (C) 2007-2019 PCOpt/NTUA Copyright (C) 2013-2019 FOSS GP - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -128,6 +128,67 @@ autoPtr<objectiveIncompressible> objectiveIncompressible::New // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +void objectiveIncompressible::doNormalization() +{ + if (normalize_ && normFactor_.valid()) + { + const scalar oneOverNorm(1./normFactor_()); + + if (hasdJdv()) + { + dJdvPtr_().primitiveFieldRef() *= oneOverNorm; + } + if (hasdJdp()) + { + dJdpPtr_().primitiveFieldRef() *= oneOverNorm; + } + if (hasdJdT()) + { + dJdTPtr_().primitiveFieldRef() *= oneOverNorm; + } + if (hasdJdTMVar1()) + { + dJdTMvar1Ptr_().primitiveFieldRef() *= oneOverNorm; + } + if (hasdJdTMVar2()) + { + dJdTMvar2Ptr_().primitiveFieldRef() *= oneOverNorm; + } + if (hasBoundarydJdv()) + { + bdJdvPtr_() *= oneOverNorm; + } + if (hasBoundarydJdvn()) + { + bdJdvnPtr_() *= oneOverNorm; + } + if (hasBoundarydJdvt()) + { + bdJdvtPtr_() *= oneOverNorm; + } + if (hasBoundarydJdp()) + { + bdJdpPtr_() *= oneOverNorm; + } + if (hasBoundarydJdT()) + { + bdJdTPtr_() *= oneOverNorm; + } + if (hasBoundarydJdTMVar1()) + { + bdJdTMvar1Ptr_() *= oneOverNorm; + } + if (hasBoundarydJdTMVar2()) + { + bdJdTMvar2Ptr_() *= oneOverNorm; + } + + // Normalize geometric fields + objective::doNormalization(); + } +} + + const volVectorField& objectiveIncompressible::dJdv() { if (dJdvPtr_.empty()) @@ -418,6 +479,9 @@ void objectiveIncompressible::update() update_dxdbDirectMultiplier(); update_boundaryEdgeContribution(); update_dJdStressMultiplier(); + + // Divide everything with normalization factor + doNormalization(); } @@ -482,9 +546,9 @@ void objectiveIncompressible::nullify() } -void objectiveIncompressible::write() const +bool objectiveIncompressible::write(const bool valid) const { - objective::write(); + return objective::write(valid); } diff --git a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveIncompressible/objectiveIncompressible.H b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveIncompressible/objectiveIncompressible.H index 1bf89badd9675411198c7030bed5ead2eb81ab5a..a96a07b003ce4410896532b848509cb1ff3ce23c 100644 --- a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveIncompressible/objectiveIncompressible.H +++ b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveIncompressible/objectiveIncompressible.H @@ -7,7 +7,7 @@ ------------------------------------------------------------------------------- Copyright (C) 2007-2019 PCOpt/NTUA Copyright (C) 2013-2019 FOSS GP - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -165,6 +165,9 @@ public: //- Return the objective function value virtual scalar J() = 0; + //- Normalize all fields allocated by the objective + virtual void doNormalization(); + //- Contribution to field adjoint momentum eqs const volVectorField& dJdv(); @@ -303,7 +306,7 @@ public: {} //- Write objective function history - virtual void write() const; + virtual bool write(const bool valid = true) const; //- Inline functions for checking whether pointers are set or not inline bool hasdJdv() const; diff --git a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveNutSqr/objectiveNutSqr.C b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveNutSqr/objectiveNutSqr.C new file mode 100644 index 0000000000000000000000000000000000000000..515b82061ff3bdc6172ffb510000c8c4e3808d5d --- /dev/null +++ b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveNutSqr/objectiveNutSqr.C @@ -0,0 +1,169 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "objectiveNutSqr.H" +#include "createZeroField.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +namespace objectives +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(objectiveNutSqr, 1); +addToRunTimeSelectionTable +( + objectiveIncompressible, + objectiveNutSqr, + dictionary +); + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +objectiveNutSqr::objectiveNutSqr +( + const fvMesh& mesh, + const dictionary& dict, + const word& adjointSolverName, + const word& primalSolverName +) +: + objectiveIncompressible(mesh, dict, adjointSolverName, primalSolverName), + zones_ + ( + mesh_.cellZones().indices(this->dict().get<wordRes>("zones")) + ) +{ + // Allocate source term for the adjoint turbulence model + dJdTMvar1Ptr_.reset + ( + createZeroFieldPtr<scalar> + ( + mesh_, + "ATMSource", + (dimless/dimTime/dimTime) + ) + ); + // Allocate term to be added to volume-based sensitivity derivatives + divDxDbMultPtr_.reset + ( + createZeroFieldPtr<scalar> + ( + mesh_, + ("divDxdbMult"+type()) , + //variable dimensions!! + //Dummy zeroes. Only the internalField will be used + dimensionSet(0,0,0,0,0,0,0) + ) + ); + // set file pointer + //objFunctionFilePtr_ = new OFstream(objFunctionFolder_/type()); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +scalar objectiveNutSqr::J() +{ + J_ = Zero; + + const autoPtr<incompressible::RASModelVariables>& + turbVars = vars_.RASModelVariables(); + const volScalarField& nut = turbVars->nutRefInst(); + + //scalar zoneVol(Zero); + for (const label zI : zones_) + { + const cellZone& zoneI = mesh_.cellZones()[zI]; + for (const label cellI : zoneI) + { + J_ += sqr(nut[cellI])*(mesh_.V()[cellI]); + //zoneVol += mesh_.V()[cellI]; + } + } + reduce(J_, sumOp<scalar>()); + //reduce(zoneVol, sumOp<scalar>()); + + return J_; +} + + +void objectiveNutSqr::update_dJdTMvar1() +{ + const autoPtr<incompressible::RASModelVariables>& + turbVars = vars_.RASModelVariables(); + const singlePhaseTransportModel& lamTransp = vars_.laminarTransport(); + const volScalarField& nut = turbVars->nutRef(); + + tmp<volScalarField> tnutJacobian = turbVars->nutJacobianVar1(lamTransp); + const volScalarField& nutJacobian = tnutJacobian(); + + volScalarField& dJdTMvar1 = dJdTMvar1Ptr_(); + + for (const label zI : zones_) + { + const cellZone& zoneI = mesh_.cellZones()[zI]; + for (const label cellI : zoneI) + { + dJdTMvar1[cellI] = 2.*nut[cellI]*nutJacobian[cellI]; + } + } +} + + +void objectiveNutSqr::update_divDxDbMultiplier() +{ + const autoPtr<incompressible::RASModelVariables>& + turbVars = vars_.RASModelVariables(); + const volScalarField& nut = turbVars->nutRef(); + + volScalarField& divDxDbMult = divDxDbMultPtr_(); + + for (const label zI : zones_) + { + const cellZone& zoneI = mesh_.cellZones()[zI]; + for (const label cellI : zoneI) + { + divDxDbMult[cellI] = sqr(nut[cellI]); + } + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace objectives +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveNutSqr/objectiveNutSqr.H b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveNutSqr/objectiveNutSqr.H new file mode 100644 index 0000000000000000000000000000000000000000..b2211b9b506fe28b31ef3f929538fc0730aad7d0 --- /dev/null +++ b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveNutSqr/objectiveNutSqr.H @@ -0,0 +1,127 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + + +Class + Foam::objectives::objectiveNutSqr + +Description + Objective qualitatively quantifying noise through the integral of the + squared turbulent viscosity over specified cellZones. Requires the adjoint + to the turbulence model to be incorporated into the optimisation loop. + + Reference: + \verbatim + Objective function initially presented in + + Papoutsis-Kiachagias, E. M., Magoulas, N., Mueller, J., Othmer, C., + & Giannakoglou, K. C. (2015). + Noise reduction in car aerodynamics using a surrogate objective + function and the continuous adjoint method with wall functions. + Computers & Fluids, 122(20), 223-232. + https://doi.org/10.1016/j.compfluid.2015.09.002 + \endverbatim + +SourceFiles + objectiveNutSqrNoise.C + +\*---------------------------------------------------------------------------*/ + +#ifndef objectiveNutSqr_H +#define objectiveNutSqr_H + +#include "objectiveIncompressible.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +namespace objectives +{ + +/*---------------------------------------------------------------------------*\ + Class objectiveNutSqr Declaration +\*---------------------------------------------------------------------------*/ + +class objectiveNutSqr +: + public objectiveIncompressible +{ + // Private data + + //- Where to define the objective + labelList zones_; + + +public: + + //- Runtime type information + TypeName("nutSqr"); + + + // Constructors + + //- From components + objectiveNutSqr + ( + const fvMesh& mesh, + const dictionary& dict, + const word& adjointSolverName, + const word& primalSolverName + ); + + + //- Destructor + virtual ~objectiveNutSqr() = default; + + + // Member Functions + + //- Return the objective function value + scalar J(); + + //- Update field to be added to the adjoint turbulence model PDE + // The equivalent for the second turbulence model variable should + // be implemented for turbulence models other than SA + void update_dJdTMvar1(); + + //- Update field to be added to be added to volume-based + //- sensitivity derivatives, emerging from delta ( dV ) / delta b + void update_divDxDbMultiplier(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace objectiveNutSqrNoise +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePartialVolume/objectivePartialVolume.C b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePartialVolume/objectivePartialVolume.C index 7861fac8392da0b27612e0c38ec4b45c50bb8dba..8fec4c11ff16de8934690a32750d2f9404dd2397 100644 --- a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePartialVolume/objectivePartialVolume.C +++ b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePartialVolume/objectivePartialVolume.C @@ -133,7 +133,7 @@ void objectivePartialVolume::update_dSdbMultiplier() } -void objectivePartialVolume::write() const +bool objectivePartialVolume::write(const bool valid) const { if (Pstream::master()) { @@ -153,6 +153,8 @@ void objectivePartialVolume::write() const objFunctionFilePtr_() << setw(width) << J_ << " "; objFunctionFilePtr_() << setw(width) << initVol_ << endl; } + + return true; } diff --git a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePartialVolume/objectivePartialVolume.H b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePartialVolume/objectivePartialVolume.H index ba409f2af07468c463072fcd434b5ce4ca9325cb..aec678088a96017b0d9ce5f0204db95d0d274c46 100644 --- a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePartialVolume/objectivePartialVolume.H +++ b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePartialVolume/objectivePartialVolume.H @@ -7,7 +7,7 @@ ------------------------------------------------------------------------------- Copyright (C) 2007-2019 PCOpt/NTUA Copyright (C) 2013-2019 FOSS GP - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -99,7 +99,7 @@ public: void update_dSdbMultiplier(); //- Write objective function history - void write() const; + virtual bool write(const bool valid = true) const; }; diff --git a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePtLosses/objectivePtLosses.C b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePtLosses/objectivePtLosses.C index d4f43c7afc62d9471c3f13d58ac4eab0019ffe4d..53792824458558d4c7a294179b443a7cdf7f4b1e 100644 --- a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePtLosses/objectivePtLosses.C +++ b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePtLosses/objectivePtLosses.C @@ -234,7 +234,7 @@ void objectivePtLosses::update_boundarydJdvt() } -void objectivePtLosses::write() const +bool objectivePtLosses::write(const bool valid) const { if (Pstream::master()) { @@ -247,6 +247,7 @@ void objectivePtLosses::write() const setObjectiveFilePtr(); objFunctionFilePtr_() << setw(4) << "#" << " "; objFunctionFilePtr_() << setw(width) << "ptLosses" << " "; + objFunctionFilePtr_() << setw(width) << "JCycle" << " "; forAll(patches_, oI) { label patchI = patches_[oI]; @@ -258,12 +259,15 @@ void objectivePtLosses::write() const objFunctionFilePtr_() << setw(4) << mesh_.time().value() << " "; objFunctionFilePtr_() << setw(width) << J_ << " "; + objFunctionFilePtr_() << setw(width) << JCycle() << " "; forAll(patchPt_, pI) { objFunctionFilePtr_() << setw(width) << patchPt_[pI] << " "; } objFunctionFilePtr_() << endl; } + + return true; } diff --git a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePtLosses/objectivePtLosses.H b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePtLosses/objectivePtLosses.H index 0953add4055ae64fb8f453d478c16437c3b89409..014dd3cabdc0fe5a37ec1c067f87fd2590ee3ceb 100644 --- a/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePtLosses/objectivePtLosses.H +++ b/src/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePtLosses/objectivePtLosses.H @@ -7,7 +7,7 @@ ------------------------------------------------------------------------------- Copyright (C) 2007-2019 PCOpt/NTUA Copyright (C) 2013-2019 FOSS GP - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -59,8 +59,10 @@ class objectivePtLosses { // Private data + //- Patches on which to compute losses labelList patches_; + //- Total pressure per patch on patches_ scalarField patchPt_; @@ -107,7 +109,7 @@ public: void update_boundarydJdvt(); //- Write objective function values and its contrituents - void write() const; + virtual bool write(const bool valid = true) const; }; diff --git a/src/optimisation/adjointOptimisation/adjoint/objectives/objective/objective.C b/src/optimisation/adjointOptimisation/adjoint/objectives/objective/objective.C index a9a910d6a7a9fc7674477ec39ffee449df7adc10..5a0bf4dea6d1355e6d3cdec869be103729f2ff4f 100644 --- a/src/optimisation/adjointOptimisation/adjoint/objectives/objective/objective.C +++ b/src/optimisation/adjointOptimisation/adjoint/objectives/objective/objective.C @@ -5,9 +5,9 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP + Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -106,6 +106,22 @@ objective::objective const word& primalSolverName ) : + localIOdictionary + ( + IOobject + ( + dict.dictName(), + mesh.time().timeName(), + fileName("uniform")/fileName("objectives")/adjointSolverName, + mesh, + IOobject::READ_IF_PRESENT, + IOobject::AUTO_WRITE + ), + // avoid type checking since dictionary is read using the + // derived type name and type() will result in "objective" + // here + word::null + ), mesh_(mesh), dict_(dict), adjointSolverName_(adjointSolverName), @@ -113,10 +129,13 @@ objective::objective objectiveName_(dict.dictName()), computeMeanFields_(false), // is reset in derived classes nullified_(false), + normalize_(dict.getOrDefault<bool>("normalize", false)), J_(Zero), - JMean_(Zero), + JMean_(this->getOrDefault<scalar>("JMean", Zero)), weight_(Zero), + normFactor_(nullptr), + target_(dict.getOrDefault<scalar>("target", Zero)), integrationStartTimePtr_(nullptr), integrationEndTimePtr_(nullptr), @@ -159,19 +178,18 @@ objective::objective ); } - // Read JMean from dictionary, if present - IOobject headObjectiveIODict - ( - "objectiveDict" + objectiveName_, - mesh_.time().timeName(), - "uniform", - mesh_, - IOobject::READ_IF_PRESENT, - IOobject::NO_WRITE - ); - if (headObjectiveIODict.typeHeaderOk<IOdictionary>(false)) + // Set normalization factor, if present + if (normalize_) { - JMean_ = IOdictionary(headObjectiveIODict).get<scalar>("JMean"); + scalar normFactor(Zero); + if (dict.readIfPresent("normFactor", normFactor)) + { + normFactor_.reset(new scalar(normFactor)); + } + else if (this->readIfPresent("normFactor", normFactor)) + { + normFactor_.reset(new scalar(normFactor)); + } } } @@ -233,13 +251,26 @@ scalar objective::JCycle() const { J = JMean_; } + + // Subtract target, in case the objective is used as a constraint + J -= target_; + + // Normalize here, in order to get the correct value for line search + if (normalize_ && normFactor_.valid()) + { + J /= normFactor_(); + } + return J; } void objective::updateNormalizationFactor() { - // Does nothing in base + if (normalize_ && normFactor_.empty()) + { + normFactor_.reset(new scalar(JCycle())); + } } @@ -288,6 +319,62 @@ scalar objective::weight() const } +bool objective::normalize() const +{ + return normalize_; +} + + +void objective::doNormalization() +{ + if (normalize_ && normFactor_.valid()) + { + const scalar oneOverNorm(1./normFactor_()); + + if (hasdJdb()) + { + dJdbPtr_().primitiveFieldRef() *= oneOverNorm; + } + if (hasBoundarydJdb()) + { + bdJdbPtr_() *= oneOverNorm; + } + if (hasdSdbMult()) + { + bdSdbMultPtr_() *= oneOverNorm; + } + if (hasdndbMult()) + { + bdndbMultPtr_() *= oneOverNorm; + } + if (hasdxdbMult()) + { + bdxdbMultPtr_() *= oneOverNorm; + } + if (hasdxdbDirectMult()) + { + bdxdbDirectMultPtr_() *= oneOverNorm; + } + if (hasBoundaryEdgeContribution()) + { + bEdgeContribution_() *= oneOverNorm; + } + if (hasDivDxDbMult()) + { + divDxDbMultPtr_() *= oneOverNorm; + } + if (hasGradDxDbMult()) + { + gradDxDbMultPtr_() *= oneOverNorm; + } + if (hasBoundarydJdStress()) + { + bdJdStressPtr_() *= oneOverNorm; + } + } +} + + bool objective::isWithinIntegrationTime() const { if (hasIntegrationStartTime() && hasIntegrationEndTime()) @@ -590,7 +677,7 @@ void objective::nullify() } -void objective::write() const +bool objective::write(const bool valid) const { if (Pstream::master()) { @@ -604,6 +691,8 @@ void objective::write() const objFunctionFilePtr_() << mesh_.time().value() << tab << J_ << endl; } + + return true; } @@ -624,6 +713,18 @@ void objective::writeInstantaneousValue() const } +void objective::writeInstantaneousSeparator() const +{ + if (Pstream::master()) + { + if (instantValueFilePtr_.valid()) + { + instantValueFilePtr_() << endl; + } + } +} + + void objective::writeMeanValue() const { if (Pstream::master()) @@ -648,22 +749,17 @@ void objective::writeMeanValue() const << mesh_.time().value() << tab << JMean_ << endl; } } - // Write mean value under time/uniform, to allow for lineSearch to work - // appropriately in continuation runs, when field averaging is used - IOdictionary objectiveDict - ( - IOobject - ( - "objectiveDict" + objectiveName_, - mesh_.time().timeName(), - "uniform", - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ) - ); - objectiveDict.add<scalar>("JMean", JMean_); - objectiveDict.regIOobject::write(); +} + + +bool objective::writeData(Ostream& os) const +{ + os.writeEntry("JMean", JMean_); + if (normFactor_.valid()) + { + os.writeEntry("normFactor", normFactor_()); + } + return os.good(); } diff --git a/src/optimisation/adjointOptimisation/adjoint/objectives/objective/objective.H b/src/optimisation/adjointOptimisation/adjoint/objectives/objective/objective.H index 2293da74de47a7b5832868ef9bb337006e4c7528..4ded76e0d0e839a3124539a0b9f1ce0745cd70f6 100644 --- a/src/optimisation/adjointOptimisation/adjoint/objectives/objective/objective.H +++ b/src/optimisation/adjointOptimisation/adjoint/objectives/objective/objective.H @@ -5,9 +5,9 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP + Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -40,6 +40,7 @@ SourceFiles #ifndef objective_H #define objective_H +#include "localIOdictionary.H" #include "autoPtr.H" #include "runTimeSelectionTables.H" #include "OFstream.H" @@ -57,6 +58,8 @@ namespace Foam \*---------------------------------------------------------------------------*/ class objective +: + public localIOdictionary { protected: @@ -69,18 +72,32 @@ protected: const word objectiveName_; bool computeMeanFields_; bool nullified_; + bool normalize_; - // Objective function value and weight + //- Objective function value and weight scalar J_; - scalar JMean_; //average value + + //- Average objective value + scalar JMean_; + + //- Objective weight scalar weight_; - // Objective integration start and end times (for unsteady flows) + //- Normalization factor + autoPtr<scalar> normFactor_; + + //- Target value, in case the objective is used as a constraint + // Should be used in caution and with updateMethods than get affected + // by the target value, without requiring a sqr (e.g. SQP, MMA) + scalar target_; + + //- Objective integration start and end times (for unsteady flows) autoPtr<scalar> integrationStartTimePtr_; autoPtr<scalar> integrationEndTimePtr_; - // Contribution to field sensitivity derivatives - // Topology optimisation + //- Contribution to field sensitivity derivatives + // Topology optimisation or other variants with + // as many design variables as the mesh cells //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ autoPtr<volScalarField> dJdbPtr_; @@ -241,6 +258,12 @@ public: //- Return the objective function weight scalar weight() const; + //- Is the objective normalized + bool normalize() const; + + //- Normalize all fields allocated by the objective + virtual void doNormalization(); + //- Check whether this is an objective integration time bool isWithinIntegrationTime() const; @@ -350,14 +373,20 @@ public: {} //- Write objective function history - virtual void write() const; + virtual bool write(const bool valid = true) const; //- Write objective function history at each primal solver iteration virtual void writeInstantaneousValue() const; + //- Write objective function history at each primal solver iteration + virtual void writeInstantaneousSeparator() const; + //- Write mean objective function history virtual void writeMeanValue() const; + //- Write averaged objective for continuation + virtual bool writeData(Ostream& os) const; + // Inline functions for checking whether pointers are set or not inline const word& objectiveName() const; inline bool hasdJdb() const; diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/FIBase/FIBaseIncompressible.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/FIBase/FIBaseIncompressible.C index ca4fc90810ac7253f50918b550b4bd214f2d5841..4cc2993e2aff48e28c3d24f3e3168949b35ff5f3 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/FIBase/FIBaseIncompressible.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/FIBase/FIBaseIncompressible.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -84,7 +84,7 @@ FIBase::FIBase fv::optionAdjointList& fvOptionsAdjoint ) : - adjointSensitivity + shapeSensitivities ( mesh, dict, @@ -93,7 +93,6 @@ FIBase::FIBase objectiveManager, fvOptionsAdjoint ), - shapeSensitivitiesBase(mesh, dict), gradDxDbMult_ ( IOobject @@ -109,9 +108,6 @@ FIBase::FIBase ), divDxDbMult_(mesh_.nCells(), Zero), optionsDxDbMult_(mesh_.nCells(), Zero), - dSfdbMult_(createZeroBoundaryPtr<vector>(mesh_)), - dnfdbMult_(createZeroBoundaryPtr<vector>(mesh_)), - dxdbDirectMult_(createZeroBoundaryPtr<vector>(mesh_)), includeDistance_(false), eikonalSolver_(nullptr) @@ -165,18 +161,11 @@ void FIBase::accumulateIntegrand(const scalar dt) } // Accumulate direct sensitivities - for (const label patchI : sensitivityPatchIDs_) - { - const scalarField magSfDt(mesh_.boundary()[patchI].magSf()*dt); - for (objective& func : functions) - { - const scalar wei = func.weight(); - dSfdbMult_()[patchI] += wei*func.dSdbMultiplier(patchI)*dt; - dnfdbMult_()[patchI] += wei*func.dndbMultiplier(patchI)*magSfDt; - dxdbDirectMult_()[patchI] += - wei*func.dxdbDirectMultiplier(patchI)*magSfDt; - } - } + accumulateDirectSensitivityIntegrand(dt); + + // Accumulate sensitivities due to boundary conditions + accumulateBCSensitivityIntegrand(dt); + } @@ -185,24 +174,13 @@ void FIBase::clearSensitivities() gradDxDbMult_ = dimensionedTensor(gradDxDbMult_.dimensions(), Zero); divDxDbMult_ = Zero; optionsDxDbMult_ = vector::zero; - dSfdbMult_() = vector::zero; - dnfdbMult_() = vector::zero; - dxdbDirectMult_() = vector::zero; if (includeDistance_) { eikonalSolver_->reset(); } - adjointSensitivity::clearSensitivities(); - shapeSensitivitiesBase::clear(); -} - - -void FIBase::write(const word& baseName) -{ - adjointSensitivity::write(baseName); - shapeSensitivitiesBase::write(); + shapeSensitivities::clearSensitivities(); } diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/FIBase/FIBaseIncompressible.H b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/FIBase/FIBaseIncompressible.H index e7f1120caeafff3e4f486c873633dd0284cead09..576493b72a43c3b63c13a291a7a618606572a8b3 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/FIBase/FIBaseIncompressible.H +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/FIBase/FIBaseIncompressible.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -40,7 +40,7 @@ SourceFiles #define FIBaseIncompressible_H #include "adjointSensitivityIncompressible.H" -#include "shapeSensitivitiesBase.H" +#include "shapeSensitivitiesIncompressible.H" #include "adjointEikonalSolverIncompressible.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -52,13 +52,12 @@ namespace incompressible { /*---------------------------------------------------------------------------*\ - Class FIBase Declaration + Class FIBase Declaration \*---------------------------------------------------------------------------*/ class FIBase : - public adjointSensitivity, - public shapeSensitivitiesBase + public shapeSensitivities { protected: @@ -73,11 +72,6 @@ protected: //- dx/db multiplier coming from fvOptions vectorField optionsDxDbMult_; - //- Fields related to direct sensitivities - autoPtr<boundaryVectorField> dSfdbMult_; - autoPtr<boundaryVectorField> dnfdbMult_; - autoPtr<boundaryVectorField> dxdbDirectMult_; - //- Include distance variation in sens computation bool includeDistance_; @@ -139,9 +133,6 @@ public: //- Zero sensitivity fields and their constituents virtual void clearSensitivities(); - - //- Write sensitivity fields - virtual void write(const word& baseName = word::null); }; diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/SIBase/SIBaseIncompressible.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/SIBase/SIBaseIncompressible.C index ed34fc5ccd78c0f47e8e2679c3233853d74fd36c..bb9600eb583096535a877b367abb094c5f39be5a 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/SIBase/SIBaseIncompressible.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/SIBase/SIBaseIncompressible.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -50,6 +50,8 @@ void SIBase::read() surfaceSensitivity_.read(); includeObjective_ = dict().getOrDefault<bool>("includeObjectiveContribution", true); + writeSensitivityMap_ = + dict().getOrDefault<bool>("writeSensitivityMap", false); // If includeObjective is set to true both here and in the surface // sensitivities, set the one in the latter to false to avoid double @@ -83,7 +85,7 @@ SIBase::SIBase fv::optionAdjointList& fvOptionsAdjoint ) : - adjointSensitivity + shapeSensitivities ( mesh, dict, @@ -92,12 +94,11 @@ SIBase::SIBase objectiveManager, fvOptionsAdjoint ), - shapeSensitivitiesBase(mesh, dict), surfaceSensitivity_ ( mesh, // Ideally, subOrEmptyDict would be used. - // Since we need a recursive search in shapeSensitivitiesBase though + // Since we need a recursive search in shapeSensitivities though // and the dict returned by subOrEmptyDict (if found) // does not know its parent, optionalSubDict is used dict.optionalSubDict("surfaceSensitivities"), @@ -106,10 +107,8 @@ SIBase::SIBase objectiveManager, fvOptionsAdjoint ), - dSfdbMult_(createZeroBoundaryPtr<vector>(mesh_)), - dnfdbMult_(createZeroBoundaryPtr<vector>(mesh_)), - dxdbDirectMult_(createZeroBoundaryPtr<vector>(mesh_)), - includeObjective_(true) + includeObjective_(true), + writeSensitivityMap_(true) { read(); } @@ -141,42 +140,34 @@ void SIBase::accumulateIntegrand(const scalar dt) // Accumulate direct sensitivities if (includeObjective_) { - PtrList<objective>& functions - ( - objectiveManager_.getObjectiveFunctions() - ); - for (const label patchI : sensitivityPatchIDs_) - { - const scalarField magSfDt(mesh_.boundary()[patchI].magSf()*dt); - for (objective& func : functions) - { - const scalar wei = func.weight(); - dSfdbMult_()[patchI] += wei*func.dSdbMultiplier(patchI)*dt; - dnfdbMult_()[patchI] += wei*func.dndbMultiplier(patchI)*magSfDt; - dxdbDirectMult_()[patchI] += - wei*func.dxdbDirectMultiplier(patchI)*magSfDt; - } - } + accumulateDirectSensitivityIntegrand(dt); } + + // Accumulate sensitivities due to boundary conditions + accumulateBCSensitivityIntegrand(dt); } void SIBase::clearSensitivities() { surfaceSensitivity_.clearSensitivities(); - dSfdbMult_() = vector::zero; - dnfdbMult_() = vector::zero; - dxdbDirectMult_() = vector::zero; + shapeSensitivities::clearSensitivities(); +} - adjointSensitivity::clearSensitivities(); - shapeSensitivitiesBase::clear(); + +const sensitivitySurface& SIBase::getSurfaceSensitivities() const +{ + return surfaceSensitivity_; } void SIBase::write(const word& baseName) { - adjointSensitivity::write(baseName); - shapeSensitivitiesBase::write(); + shapeSensitivities::write(baseName); + if (writeSensitivityMap_) + { + surfaceSensitivity_.write(baseName); + } } diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/SIBase/SIBaseIncompressible.H b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/SIBase/SIBaseIncompressible.H index 25de490626adfe3ed02bdb0f65c8c42d94c37a1b..cc3342d05bf2165da77c0457df31b7e991469feb 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/SIBase/SIBaseIncompressible.H +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/SIBase/SIBaseIncompressible.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -40,8 +40,7 @@ SourceFiles #ifndef SIBaseIncompressible_H #define SIBaseIncompressible_H -#include "adjointSensitivityIncompressible.H" -#include "shapeSensitivitiesBase.H" +#include "shapeSensitivitiesIncompressible.H" #include "sensitivitySurfaceIncompressible.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -53,13 +52,12 @@ namespace incompressible { /*---------------------------------------------------------------------------*\ - Class SIBase Declaration + Class SIBase Declaration \*---------------------------------------------------------------------------*/ class SIBase : - public adjointSensitivity, - public shapeSensitivitiesBase + public shapeSensitivities { protected: @@ -68,13 +66,15 @@ protected: //- Surface sensitivities sensitivitySurface surfaceSensitivity_; - //- Fields related to direct sensitivities - autoPtr<boundaryVectorField> dSfdbMult_; - autoPtr<boundaryVectorField> dnfdbMult_; - autoPtr<boundaryVectorField> dxdbDirectMult_; - + //- Whether to include direct sensitivities or not. + // Used to avoid double contributions from both here and the + // sensitivitySurface object which might have already accounted for + // them bool includeObjective_; + //- Write sensitivity map upon write + bool writeSensitivityMap_; + // Protected Member Functions @@ -131,7 +131,10 @@ public: //- Zero sensitivity fields and their constituents virtual void clearSensitivities(); - //- Write sensitivity fields. + //- Return reference to underlaying surface sensitivities + const sensitivitySurface& getSurfaceSensitivities() const; + + //- Write sensitivity map virtual void write(const word& baseName = word::null); }; diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/adjointSensitivity/adjointSensitivityIncompressible.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/adjointSensitivity/adjointSensitivityIncompressible.C index b904c4032e358aba463c4681375db568662c404a..5ed9ec2fa1e5da98c3ffaa01f9d48b46faa2515d 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/adjointSensitivity/adjointSensitivityIncompressible.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/adjointSensitivity/adjointSensitivityIncompressible.C @@ -121,6 +121,12 @@ const scalarField& adjointSensitivity::calculateSensitivities() } +const scalarField& adjointSensitivity::getSensitivities() const +{ + return derivatives_; +} + + void adjointSensitivity::clearSensitivities() { derivatives_ = scalar(0); diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/adjointSensitivity/adjointSensitivityIncompressible.H b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/adjointSensitivity/adjointSensitivityIncompressible.H index 71b0f3b1bd027008ae6924f552df804f2304de4a..f0727a17eacac385b640b865b513fb38162fcbb4 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/adjointSensitivity/adjointSensitivityIncompressible.H +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/adjointSensitivity/adjointSensitivityIncompressible.H @@ -177,6 +177,10 @@ public: // Used with optimisation libraries virtual const scalarField& calculateSensitivities(); + //- Returns the sensitivity fields + // Assumes it has already been updated/computed + const scalarField& getSensitivities() const; + //- Zero sensitivity fields and their constituents virtual void clearSensitivities(); diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityBezier/sensitivityBezierIncompressible.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityBezier/sensitivityBezierIncompressible.C index 4e1b1cfd5057c46dbf36b07e12d1bdce02e8a936..af41e4fab2f986b77d67a25201f89f4826e1f7ac 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityBezier/sensitivityBezierIncompressible.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityBezier/sensitivityBezierIncompressible.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -77,6 +77,7 @@ sensitivityBezier::sensitivityBezier dSdbSens_(Bezier_.nBezier(), Zero), dndbSens_(Bezier_.nBezier(), Zero), dxdbDirectSens_(Bezier_.nBezier(), Zero), + bcSens_(Bezier_.nBezier(), Zero), derivativesFolder_("optimisation"/type() + "Derivatives") { derivatives_ = scalarField(3*Bezier_.nBezier(), Zero); @@ -137,9 +138,12 @@ void sensitivityBezier::assembleSensitivities() dxdbDirectSens_[iCP] += gSum((dxdbDirectMult_()[patchI] & dxidXj)); } + + // Sensitivities from boundary conditions + bcSens_[iCP] += gSum(bcDxDbMult_()[patchI] & dxidXj); } } - sens_ = flowSens_ + dSdbSens_ + dndbSens_ + dxdbDirectSens_; + sens_ = flowSens_ + dSdbSens_ + dndbSens_ + dxdbDirectSens_ + bcSens_; // Transform sensitivities to scalarField in order to cooperate with // updateMethod @@ -159,6 +163,7 @@ void sensitivityBezier::assembleSensitivities() dSdbSens_[cpI].x() = Zero; dndbSens_[cpI].x() = Zero; dxdbDirectSens_[cpI].x() = Zero; + bcSens_[cpI].x() = Zero; } if (confineYmovement[cpI]) { @@ -167,6 +172,7 @@ void sensitivityBezier::assembleSensitivities() dSdbSens_[cpI].y() = Zero; dndbSens_[cpI].y() = Zero; dxdbDirectSens_[cpI].y() = Zero; + bcSens_[cpI].y() = Zero; } if (confineZmovement[cpI]) { @@ -175,6 +181,7 @@ void sensitivityBezier::assembleSensitivities() dSdbSens_[cpI].z() = Zero; dndbSens_[cpI].z() = Zero; dxdbDirectSens_[cpI].z() = Zero; + bcSens_[cpI].z() = Zero; } } } @@ -187,6 +194,7 @@ void sensitivityBezier::clearSensitivities() dSdbSens_ = Zero; dndbSens_ = Zero; dxdbDirectSens_ = Zero; + bcSens_ = Zero; SIBase::clearSensitivities(); } @@ -195,6 +203,9 @@ void sensitivityBezier::clearSensitivities() void sensitivityBezier::write(const word& baseName) { Info<< "Writing control point sensitivities to file" << endl; + // Write sensitivity map + SIBase::write(baseName); + // Write control point sensitivities if (Pstream::master()) { OFstream derivFile @@ -210,7 +221,8 @@ void sensitivityBezier::write(const word& baseName) << setw(width) << "flow" << " " << setw(width) << "dSdb" << " " << setw(width) << "dndb" << " " - << setw(width) << "dxdbDirect" << endl; + << setw(width) << "dxdbDirect" << " " + << setw(width) << "dvdb" << endl; label nDV = derivatives_.size(); label nBezier = Bezier_.nBezier(); const boolListList& confineMovement = Bezier_.confineMovement(); @@ -229,7 +241,8 @@ void sensitivityBezier::write(const word& baseName) << setw(width) << flowSens_[iCP].component(idir) << " " << setw(width) << dSdbSens_[iCP].component(idir) << " " << setw(width) << dndbSens_[iCP].component(idir) << " " - << setw(width) << dxdbDirectSens_[iCP].component(idir) + << setw(width) << dxdbDirectSens_[iCP].component(idir) << " " + << setw(width) << bcSens_[iCP].component(idir) << endl; } } diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityBezier/sensitivityBezierIncompressible.H b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityBezier/sensitivityBezierIncompressible.H index cd450e0e115df15c6491ab29366398662e37c5eb..ad5a99222b8d3fa3c9abe3b8d4a0a22d447f1531 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityBezier/sensitivityBezierIncompressible.H +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityBezier/sensitivityBezierIncompressible.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -78,6 +78,7 @@ protected: vectorField dSdbSens_; vectorField dndbSens_; vectorField dxdbDirectSens_; + vectorField bcSens_; fileName derivativesFolder_; diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityBezierFI/sensitivityBezierFIIncompressible.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityBezierFI/sensitivityBezierFIIncompressible.C index 72b6f425869491d35713562be89ed5c428fa607b..ca17f29794670a2d1775fe0988aff9a5e1fd6731 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityBezierFI/sensitivityBezierFIIncompressible.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityBezierFI/sensitivityBezierFIIncompressible.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -146,6 +146,7 @@ sensitivityBezierFI::sensitivityBezierFI dVdbSens_(3*Bezier_.nBezier(), Zero), distanceSens_(3*Bezier_.nBezier(), Zero), optionsSens_(3*Bezier_.nBezier(), Zero), + bcSens_(3*Bezier_.nBezier(), Zero), derivativesFolder_("optimisation"/type() + "Derivatives"), @@ -249,6 +250,9 @@ void sensitivityBezierFI::assembleSensitivities() const vectorField& dxdbFace = tdxdbFace(); dxdbDirectSens_[iDV] += gSum(dxdbDirectMult_()[patchI] & dxdbFace); + + // Contribution from boundary conditions + bcSens_[iDV] += gSum(bcDxDbMult_()[patchI] & dxdbFace); } // Contribution from delta (V) / delta b @@ -290,7 +294,8 @@ void sensitivityBezierFI::assembleSensitivities() + dxdbDirectSens_ + dVdbSens_ + distanceSens_ - + optionsSens_; + + optionsSens_ + + bcSens_; } } @@ -304,6 +309,7 @@ void sensitivityBezierFI::clearSensitivities() dVdbSens_ = Zero; distanceSens_ = Zero; optionsSens_ = Zero; + bcSens_ = Zero; FIBase::clearSensitivities(); } @@ -329,7 +335,9 @@ void sensitivityBezierFI::write(const word& baseName) << setw(width) << "dndb" << " " << setw(width) << "dxdbDirect" << " " << setw(width) << "dVdb" << " " - << setw(width) << "distance" << endl; + << setw(width) << "distance" << " " + << setw(width) << "options" << " " + << setw(width) << "dvdb" << endl; const label nDVs = derivatives_.size(); const label nBezier = Bezier_.nBezier(); const boolListList& confineMovement = Bezier_.confineMovement(); @@ -337,11 +345,14 @@ void sensitivityBezierFI::write(const word& baseName) for (label iDV = 0; iDV < nDVs; iDV++) { - label iCP = iDV%nBezier; - label idir = iDV/nBezier; + const label iCP(iDV%nBezier); + const label idir(iDV/nBezier); if (!confineMovement[idir][iCP]) { - if (iDV!=lastActive + 1) derivFile << "\n"; + if (iDV!=lastActive + 1) + { + derivFile << "\n"; + } lastActive = iDV; derivFile << setw(widthDV) << iDV << " " @@ -351,7 +362,9 @@ void sensitivityBezierFI::write(const word& baseName) << setw(width) << dndbSens_[iDV] << " " << setw(width) << dxdbDirectSens_[iDV] << " " << setw(width) << dVdbSens_[iDV] << " " - << setw(width) << distanceSens_[iDV] << endl; + << setw(width) << distanceSens_[iDV] << " " + << setw(width) << optionsSens_[iDV] << " " + << setw(width) << bcSens_[iDV] << endl; } } } diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityBezierFI/sensitivityBezierFIIncompressible.H b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityBezierFI/sensitivityBezierFIIncompressible.H index 382316b432bd29c7cedb03cc348b5f083598cabb..2ea45cb5fe3ad28fcfed46e19a4b2f8ef930634d 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityBezierFI/sensitivityBezierFIIncompressible.H +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityBezierFI/sensitivityBezierFIIncompressible.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -93,6 +93,9 @@ protected: //- Term depending on fvOptions scalarField optionsSens_; + //- Term depending on the differenation of boundary conditions + scalarField bcSens_; + fileName derivativesFolder_; label meshMovementIters_; 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 3869c7dcf4605a0a4356153ff8b6261ce9d318f3..50786bf00faa65796e7246aa1d979f8cdffb8e9b 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-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -195,14 +195,21 @@ void sensitivitySurface::addGeometricSens() void sensitivitySurface::setSuffixName() { + word suffix(dict().getOrDefault<word>("suffix", word::null)); // Determine suffix for fields holding the sens if (includeMeshMovement_) { - shapeSensitivitiesBase::setSuffix(adjointVars_.solverName() + "ESI"); + shapeSensitivitiesBase::setSuffix + ( + adjointVars_.solverName() + "ESI" + suffix + ); } else { - shapeSensitivitiesBase::setSuffix(adjointVars_.solverName() + "SI"); + shapeSensitivitiesBase::setSuffix + ( + adjointVars_.solverName() + "SI" + suffix + ); } } @@ -707,7 +714,7 @@ void sensitivitySurface::clearSensitivities() } // Reset sensitivity fields adjointSensitivity::clearSensitivities(); - shapeSensitivitiesBase::clear(); + shapeSensitivitiesBase::clearSensitivities(); } diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivitySurfacePoints/sensitivitySurfacePointsIncompressible.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivitySurfacePoints/sensitivitySurfacePointsIncompressible.C index f856d24072755853f1a16f1de546e4be2aacde6e..264839e515301f8491ee771d612a184204762838 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivitySurfacePoints/sensitivitySurfacePointsIncompressible.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivitySurfacePoints/sensitivitySurfacePointsIncompressible.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -306,14 +306,21 @@ void sensitivitySurfacePoints::constructGlobalPointNormalsAndAreas void sensitivitySurfacePoints::setSuffixName() { + word suffix(dict().getOrDefault<word>("suffix", word::null)); // Determine suffix for fields holding the sens if (includeMeshMovement_) { - shapeSensitivitiesBase::setSuffix(adjointVars_.solverName() + "ESI"); + shapeSensitivitiesBase::setSuffix + ( + adjointVars_.solverName() + "ESI" + suffix + ); } else { - shapeSensitivitiesBase::setSuffix(adjointVars_.solverName() + "SI"); + shapeSensitivitiesBase::setSuffix + ( + adjointVars_.solverName() + "SI" + suffix + ); } } @@ -743,7 +750,7 @@ void sensitivitySurfacePoints::clearSensitivities() // Reset sensitivity fields adjointSensitivity::clearSensitivities(); - shapeSensitivitiesBase::clear(); + shapeSensitivitiesBase::clearSensitivities(); } diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityVolBSplines/sensitivityVolBSplinesIncompressible.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityVolBSplines/sensitivityVolBSplinesIncompressible.C index 7e9e54a6352edccffad789022fe886a431fbed2f..29946a2c035d0c6289c193c4e9137f28c1aa772b 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityVolBSplines/sensitivityVolBSplinesIncompressible.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityVolBSplines/sensitivityVolBSplinesIncompressible.C @@ -113,6 +113,30 @@ void sensitivityVolBSplines::computeObjectiveContributions() } +void sensitivityVolBSplines::computeBCContributions() +{ + label passedCPs = 0; + PtrList<NURBS3DVolume>& boxes = volBSplinesBase_.boxesRef(); + forAll(boxes, iNURB) + { + vectorField sensBcsDxDb = + boxes[iNURB].computeControlPointSensitivities + ( + bcDxDbMult_(), + sensitivityPatchIDs_.toc() + ); + + // Transfer to global list + forAll(sensBcsDxDb, cpI) + { + bcSens_[passedCPs + cpI] = sensBcsDxDb[cpI]; + } + passedCPs += sensBcsDxDb.size(); + } + volBSplinesBase_.boundControlPointMovement(bcSens_); +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // sensitivityVolBSplines::sensitivityVolBSplines @@ -143,16 +167,18 @@ sensitivityVolBSplines::sensitivityVolBSplines dSdbSens_(0), dndbSens_(0), dxdbDirectSens_(0), + bcSens_(0), derivativesFolder_("optimisation"/type() + "Derivatives") { // No boundary field pointers need to be allocated - label nCPs = volBSplinesBase_.getTotalControlPointsNumber(); + const label nCPs(volBSplinesBase_.getTotalControlPointsNumber()); derivatives_ = scalarField(3*nCPs, Zero); flowSens_ = vectorField(nCPs, Zero); dSdbSens_ = vectorField(nCPs, Zero); dndbSens_ = vectorField(nCPs, Zero); dxdbDirectSens_ = vectorField(nCPs, Zero); + bcSens_ = vectorField(nCPs, Zero); // Create folder to store sensitivities mkDir(derivativesFolder_); @@ -199,6 +225,8 @@ void sensitivityVolBSplines::assembleSensitivities() // false for sensitivityVolBSplines computeObjectiveContributions(); + computeBCContributions(); + // Transform sensitivites to scalarField in order to cooperate with // updateMethod forAll(flowSens_, cpI) @@ -207,17 +235,20 @@ void sensitivityVolBSplines::assembleSensitivities() flowSens_[cpI].x() + dSdbSens_[cpI].x() + dndbSens_[cpI].x() - + dxdbDirectSens_[cpI].x(); + + dxdbDirectSens_[cpI].x() + + bcSens_[cpI].x(); derivatives_[3*cpI + 1] = flowSens_[cpI].y() + dSdbSens_[cpI].y() + dndbSens_[cpI].y() - + dxdbDirectSens_[cpI].y(); + + dxdbDirectSens_[cpI].y() + + bcSens_[cpI].y(); derivatives_[3*cpI + 2] = flowSens_[cpI].z() + dSdbSens_[cpI].z() + dndbSens_[cpI].z() - + dxdbDirectSens_[cpI].z(); + + dxdbDirectSens_[cpI].z() + + bcSens_[cpI].z(); } } @@ -228,6 +259,7 @@ void sensitivityVolBSplines::clearSensitivities() dSdbSens_ = vector::zero; dndbSens_ = vector::zero; dxdbDirectSens_ = vector::zero; + bcSens_ = vector::zero; SIBase::clearSensitivities(); } @@ -236,6 +268,9 @@ void sensitivityVolBSplines::clearSensitivities() void sensitivityVolBSplines::write(const word& baseName) { Info<< "Writing control point sensitivities to file" << endl; + // Write sensitivity map + SIBase::write(baseName); + // Write control point sensitivities if (Pstream::master()) { OFstream derivFile @@ -262,7 +297,10 @@ void sensitivityVolBSplines::write(const word& baseName) << setw(width) << "dndb::z" << " " << setw(width) << "dxdbDirect::x" << " " << setw(width) << "dxdbDirect::y" << " " - << setw(width) << "dxdbDirect::z" << endl; + << setw(width) << "dxdbDirect::z" << " " + << setw(width) << "dvdb::x" << " " + << setw(width) << "dvdb::y" << " " + << setw(width) << "dvdb::z" << endl; label passedCPs(0); label lastActive(-1); @@ -298,7 +336,10 @@ void sensitivityVolBSplines::write(const word& baseName) << setw(width) << dndbSens_[globalCP].z() << " " << setw(width) << dxdbDirectSens_[globalCP].x() << " " << setw(width) << dxdbDirectSens_[globalCP].y() << " " - << setw(width) << dxdbDirectSens_[globalCP].z() + << setw(width) << dxdbDirectSens_[globalCP].z() << " " + << setw(width) << bcSens_[globalCP].x() << " " + << setw(width) << bcSens_[globalCP].y() << " " + << setw(width) << bcSens_[globalCP].z() << endl; } } diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityVolBSplines/sensitivityVolBSplinesIncompressible.H b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityVolBSplines/sensitivityVolBSplinesIncompressible.H index c42dd72eb0a9ef6ed3e2e45fda5ac9dfedfe4824..5d28be24b595fa5d365287092d25968391c2b725 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityVolBSplines/sensitivityVolBSplinesIncompressible.H +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityVolBSplines/sensitivityVolBSplinesIncompressible.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -79,12 +79,16 @@ protected: //- on x vectorField dxdbDirectSens_; + //- Term dependng on the differentiation of boundary conditions + vectorField bcSens_; + fileName derivativesFolder_; // Protected Member Functions void computeObjectiveContributions(); + void computeBCContributions(); private: diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityVolBSplinesFI/sensitivityVolBSplinesFIIncompressible.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityVolBSplinesFI/sensitivityVolBSplinesFIIncompressible.C index 7191f5a90cfd571d48feefc39b01d3168a5ba5f6..3fc71d20601719bf5b8565d60051099e69844ce7 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityVolBSplinesFI/sensitivityVolBSplinesFIIncompressible.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityVolBSplinesFI/sensitivityVolBSplinesFIIncompressible.C @@ -83,6 +83,7 @@ sensitivityVolBSplinesFI::sensitivityVolBSplinesFI dVdbSens_(0), distanceSens_(0), optionsSens_(0), + bcSens_(0), derivativesFolder_("optimisation"/type() + "Derivatives") { @@ -97,6 +98,7 @@ sensitivityVolBSplinesFI::sensitivityVolBSplinesFI dVdbSens_ = vectorField(nCPs, Zero); distanceSens_ = vectorField(nCPs, Zero); optionsSens_ = vectorField(nCPs, Zero); + bcSens_ = vectorField(nCPs, Zero); // Create folder to store sensitivities mkDir(derivativesFolder_); @@ -146,6 +148,12 @@ void sensitivityVolBSplinesFI::assembleSensitivities() sensitivityPatchIDs_.toc() ); + vectorField bcSens = boxes[iNURB].computeControlPointSensitivities + ( + bcDxDbMult_(), + sensitivityPatchIDs_.toc() + ); + for (label cpI = 0; cpI < nb; cpI++) { label globalCP = passedCPs + cpI; @@ -267,6 +275,9 @@ void sensitivityVolBSplinesFI::assembleSensitivities() // dxdbSens storage dxdbDirectSens_[globalCP] = dxdbSens[cpI]; + // bcSens storage + bcSens_[globalCP] = bcSens[cpI]; + boxSensitivities[cpI] = flowSens_[globalCP] + dSdbSens_[globalCP] @@ -274,7 +285,8 @@ void sensitivityVolBSplinesFI::assembleSensitivities() + dVdbSens_[globalCP] + distanceSens_[globalCP] + dxdbDirectSens_[globalCP] - + optionsSens_[globalCP]; + + optionsSens_[globalCP] + + bcSens_[globalCP]; } // Zero sensitivities in non-active design variables @@ -302,6 +314,7 @@ void sensitivityVolBSplinesFI::assembleSensitivities() volBSplinesBase_.boundControlPointMovement(distanceSens_); volBSplinesBase_.boundControlPointMovement(dxdbDirectSens_); volBSplinesBase_.boundControlPointMovement(optionsSens_); + volBSplinesBase_.boundControlPointMovement(bcSens_); } @@ -314,6 +327,7 @@ void sensitivityVolBSplinesFI::clearSensitivities() dVdbSens_ = vector::zero; distanceSens_ = vector::zero; optionsSens_ = vector::zero; + bcSens_ = vector::zero; FIBase::clearSensitivities(); } @@ -359,7 +373,10 @@ void sensitivityVolBSplinesFI::write(const word& baseName) << setw(width) << "distance::z" << " " << setw(width) << "options::x" << " " << setw(width) << "options::y" << " " - << setw(width) << "options::z" << endl; + << setw(width) << "options::z" << " " + << setw(width) << "dvdb::x" << " " + << setw(width) << "dvdb::y" << " " + << setw(width) << "dvdb::z" << endl; label passedCPs(0); label lastActive(-1); @@ -401,7 +418,10 @@ void sensitivityVolBSplinesFI::write(const word& baseName) << setw(width) << distanceSens_[globalCP].z() << " " << setw(width) << optionsSens_[globalCP].x() << " " << setw(width) << optionsSens_[globalCP].y() << " " - << setw(width) << optionsSens_[globalCP].z() << endl; + << setw(width) << optionsSens_[globalCP].z() << " " + << setw(width) << bcSens_[globalCP].x() << " " + << setw(width) << bcSens_[globalCP].y() << " " + << setw(width) << bcSens_[globalCP].z() << endl; } } passedCPs += nb; diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityVolBSplinesFI/sensitivityVolBSplinesFIIncompressible.H b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityVolBSplinesFI/sensitivityVolBSplinesFIIncompressible.H index 24267624bafd9d2024fcbe85098ea942ba425a49..b718cdfe9348dfb0dc5ab05ab213bac8cf036cee 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityVolBSplinesFI/sensitivityVolBSplinesFIIncompressible.H +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/sensitivityVolBSplinesFI/sensitivityVolBSplinesFIIncompressible.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -88,6 +88,9 @@ protected: //- Term depending on fvOptions vectorField optionsSens_; + //- Term depending on the differentiation of boundary conditions + vectorField bcSens_; + fileName derivativesFolder_; diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/shapeSensitivities/shapeSensitivitiesIncompressible.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/shapeSensitivities/shapeSensitivitiesIncompressible.C new file mode 100644 index 0000000000000000000000000000000000000000..1754b986c641afa55c9fd6ec555bb6cc5b2849f5 --- /dev/null +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/shapeSensitivities/shapeSensitivitiesIncompressible.C @@ -0,0 +1,184 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2020 PCOpt/NTUA + Copyright (C) 2020 FOSS GP +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "shapeSensitivitiesIncompressible.H" +#include "adjointBoundaryConditions.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +namespace incompressible +{ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +defineTypeNameAndDebug(shapeSensitivities, 0); + + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +void shapeSensitivities::accumulateDirectSensitivityIntegrand(const scalar dt) +{ + // Accumulate direct sensitivities + PtrList<objective>& functions(objectiveManager_.getObjectiveFunctions()); + for (const label patchI : sensitivityPatchIDs_) + { + const scalarField magSfDt(mesh_.boundary()[patchI].magSf()*dt); + for (objective& func : functions) + { + const scalar wei(func.weight()); + dSfdbMult_()[patchI] += wei*func.dSdbMultiplier(patchI)*dt; + dnfdbMult_()[patchI] += wei*func.dndbMultiplier(patchI)*magSfDt; + dxdbDirectMult_()[patchI] += + wei*func.dxdbDirectMultiplier(patchI)*magSfDt; + } + } +} + + +void shapeSensitivities::accumulateBCSensitivityIntegrand(const scalar dt) +{ + auto& UaBoundary = adjointVars_.Ua().boundaryFieldRef(); + tmp<boundaryVectorField> DvDbMult(dvdbMult()); + + // Accumulate sensitivities due to boundary conditions + for (const label patchI : sensitivityPatchIDs_) + { + const scalarField magSfDt(mesh_.boundary()[patchI].magSf()*dt); + fvPatchVectorField& Uab = UaBoundary[patchI]; + if (isA<adjointVectorBoundaryCondition>(Uab)) + { + bcDxDbMult_()[patchI] += + ( + DvDbMult()[patchI] + & refCast<adjointVectorBoundaryCondition>(Uab).dxdbMult() + )*magSfDt; + } + } +} + + +tmp<boundaryVectorField> shapeSensitivities::dvdbMult() const +{ + tmp<boundaryVectorField> + tres(createZeroBoundaryPtr<vector>(meshShape_).ptr()); + boundaryVectorField& res = tres.ref(); + + // Grab references + const volScalarField& pa = adjointVars_.pa(); + const volVectorField& Ua = adjointVars_.Ua(); + const autoPtr<incompressibleAdjoint::adjointRASModel>& adjointTurbulence = + adjointVars_.adjointTurbulence(); + + // Fields needed to calculate adjoint sensitivities + const autoPtr<incompressible::RASModelVariables>& + turbVars = primalVars_.RASModelVariables(); + const singlePhaseTransportModel& lamTransp = primalVars_.laminarTransport(); + volScalarField nuEff(lamTransp.nu() + turbVars->nutRef()); + volTensorField gradUa(fvc::grad(Ua)); + + for (const label patchI : sensitivityPatchIDs_) + { + const fvPatch& patch = meshShape_.boundary()[patchI]; + tmp<vectorField> tnf = patch.nf(); + const vectorField& nf = tnf(); + + res[patchI] = + ( + nuEff.boundaryField()[patchI] + * ( + Ua.boundaryField()[patchI].snGrad() + + (gradUa.boundaryField()[patchI] & nf) + ) + ) + - (nf*pa.boundaryField()[patchI]) + + adjointTurbulence().adjointMomentumBCSource()[patchI]; + } + + return tres; +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +shapeSensitivities::shapeSensitivities +( + const fvMesh& mesh, + const dictionary& dict, + incompressibleVars& primalVars, + incompressibleAdjointVars& adjointVars, + objectiveManager& objectiveManager, + fv::optionAdjointList& fvOptionsAdjoint +) +: + adjointSensitivity + ( + mesh, + dict, + primalVars, + adjointVars, + objectiveManager, + fvOptionsAdjoint + ), + shapeSensitivitiesBase(mesh, dict), + dSfdbMult_(createZeroBoundaryPtr<vector>(mesh_)), + dnfdbMult_(createZeroBoundaryPtr<vector>(mesh_)), + dxdbDirectMult_(createZeroBoundaryPtr<vector>(mesh_)), + bcDxDbMult_(createZeroBoundaryPtr<vector>(mesh_)) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void shapeSensitivities::clearSensitivities() +{ + dSfdbMult_() = vector::zero; + dnfdbMult_() = vector::zero; + dxdbDirectMult_() = vector::zero; + bcDxDbMult_() = vector::zero; + + adjointSensitivity::clearSensitivities(); + shapeSensitivitiesBase::clearSensitivities(); +} + + +void shapeSensitivities::write(const word& baseName) +{ + adjointSensitivity::write(baseName); + shapeSensitivitiesBase::write(); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace incompressible +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/shapeSensitivities/shapeSensitivitiesIncompressible.H b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/shapeSensitivities/shapeSensitivitiesIncompressible.H new file mode 100644 index 0000000000000000000000000000000000000000..6b5ac239a07ac5124b6869ab222aed30be9ae451 --- /dev/null +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/incompressible/shapeSensitivities/shapeSensitivitiesIncompressible.H @@ -0,0 +1,144 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2020 PCOpt/NTUA + Copyright (C) 2020 FOSS GP +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::incompressible::shapeSensitivitiesBase + +Description + Base class supporting shape sensitivity derivatives for + incompressible flows + +SourceFiles + shapeSensitivitiesBase.C + +\*---------------------------------------------------------------------------*/ + +#ifndef shapeSensitivitiesIncompressible_H +#define shapeSensitivitiesIncompressible_H + +#include "adjointSensitivityIncompressible.H" +#include "shapeSensitivitiesBase.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace incompressible +{ + +/*---------------------------------------------------------------------------*\ + Class shapeSensitivities Declaration +\*---------------------------------------------------------------------------*/ + +class shapeSensitivities +: + public adjointSensitivity, + public shapeSensitivitiesBase +{ +protected: + + // Protected data + + //- Fields related to direct sensitivities + autoPtr<boundaryVectorField> dSfdbMult_; + autoPtr<boundaryVectorField> dnfdbMult_; + autoPtr<boundaryVectorField> dxdbDirectMult_; + autoPtr<boundaryVectorField> bcDxDbMult_; + + + // Protected Member Fuctions + + //- Accumulate direct sensitivities + virtual void accumulateDirectSensitivityIntegrand(const scalar dt); + + //- Accumulate sensitivities enamating from the boundary conditions + virtual void accumulateBCSensitivityIntegrand(const scalar dt); + + //- Compute multiplier of dv_i/db + tmp<boundaryVectorField> dvdbMult() const; + + +private: + + // Private Member Functions + + //- No copy construct + shapeSensitivities(const shapeSensitivities&) = delete; + + //- No copy assignment + void operator=(const shapeSensitivities&) = delete; + + +public: + + //- Runtime type information + TypeName("shapeSensitivities"); + + + // Constructors + + //- Construct from components + shapeSensitivities + ( + const fvMesh& mesh, + const dictionary& dict, + incompressibleVars& primalVars, + incompressibleAdjointVars& adjointVars, + objectiveManager& objectiveManager, + fv::optionAdjointList& fvOptionsAdjoint + ); + + + //- Destructor + virtual ~shapeSensitivities() = default; + + + // Member Functions + + //- Accumulate sensitivity integrands + virtual void accumulateIntegrand(const scalar dt) = 0; + + //- Assemble sensitivities + virtual void assembleSensitivities() = 0; + + //- Zero sensitivity fields and their constituents + virtual void clearSensitivities(); + + //- Write sensitivity fields. + virtual void write(const word& baseName = word::null); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace incompressible +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/shapeSensitivitiesBase/shapeSensitivitiesBase.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/shapeSensitivitiesBase/shapeSensitivitiesBase.C index df928a8c319739c5f82f64f5102cdc4f9555ee56..4170963659f4f23824f08ef9e835441de4159891 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/shapeSensitivitiesBase/shapeSensitivitiesBase.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/shapeSensitivitiesBase/shapeSensitivitiesBase.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -172,7 +172,7 @@ void Foam::shapeSensitivitiesBase::setSensitivityPatchIDs } -void Foam::shapeSensitivitiesBase::clear() +void Foam::shapeSensitivitiesBase::clearSensitivities() { // Face-based boundary sens if (wallFaceSensVecPtr_.valid()) diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/shapeSensitivitiesBase/shapeSensitivitiesBase.H b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/shapeSensitivitiesBase/shapeSensitivitiesBase.H index 170683ccb5d5d8924c75150a75352129ef48d437..5389e6de82a74f9ac279dcd8d2cb5590400a1b60 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/shapeSensitivitiesBase/shapeSensitivitiesBase.H +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/adjointSensitivity/shapeSensitivitiesBase/shapeSensitivitiesBase.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -179,7 +179,7 @@ public: void setSensitivityPatchIDs(const labelHashSet& sensPatchIDs); //- Zero sensitivity fields and their constituents - void clear(); + void clearSensitivities(); //- Write sensitivity fields. // If valid, copies boundaryFields to volFields and writes them. diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/optMeshMovement/optMeshMovement/optMeshMovement.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/optMeshMovement/optMeshMovement/optMeshMovement.C index b26898be43b917e28fbdc9fa94563753d8687434..1cce17ff3bf3347a9b9d1b682c320ce652669d9b 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/optMeshMovement/optMeshMovement/optMeshMovement.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/optMeshMovement/optMeshMovement/optMeshMovement.C @@ -76,7 +76,7 @@ Foam::optMeshMovement::optMeshMovement dict.getOrDefault("writeMeshQualityMetrics", false) ) { - //- Set maxAllowedDisplacement if provided + // Set maxAllowedDisplacement if provided if (dict.found("maxAllowedDisplacement")) { maxAllowedDisplacement_.reset diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationManager/singleRun/singleRun.H b/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationManager/singleRun/singleRun.H index 19c3ff912343f00575268f60c44dfaff999d57c9..9f5f6708ad517e345a421c83d603de9fa89dc480 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationManager/singleRun/singleRun.H +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationManager/singleRun/singleRun.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -107,8 +107,7 @@ public: virtual bool update(); //- Update design variables. - // Might employ a line search to find a correction satisfying the step - // convergence criteria + // Does nothing virtual void updateDesignVariables(); }; diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationManager/steadyOptimisation/steadyOptimisation.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationManager/steadyOptimisation/steadyOptimisation.C index 7d7a8dba6159dfc787fa33f9fcde96bb8971e010..470756d7f154a596593a7c73f07c97dbffdd8709 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationManager/steadyOptimisation/steadyOptimisation.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationManager/steadyOptimisation/steadyOptimisation.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -68,8 +68,13 @@ void Foam::steadyOptimisation::updateOptTypeSource() // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // -void Foam::steadyOptimisation::lineSearchUpdate(scalarField& direction) +void Foam::steadyOptimisation::lineSearchUpdate() { + // Compute direction of update + tmp<scalarField> tdirection = optType_->computeDirection(); + scalarField& direction = tdirection.ref(); + + // Grab reference to line search autoPtr<lineSearch>& lineSrch = optType_->getLineSearch(); // Store starting point @@ -121,7 +126,7 @@ void Foam::steadyOptimisation::lineSearchUpdate(scalarField& direction) else { // If maximum number of iteration has been reached, continue - if (iter == lineSrch->maxIters()-1) + if (iter == lineSrch->maxIters() - 1) { Info<< "Line search reached max. number of iterations.\n" << "Proceeding to the next optimisation cycle" << endl; @@ -141,15 +146,10 @@ void Foam::steadyOptimisation::lineSearchUpdate(scalarField& direction) } -void Foam::steadyOptimisation::fixedStepUpdate(scalarField& direction) +void Foam::steadyOptimisation::fixedStepUpdate() { - // Update based on fixed step - optType_->update(direction); - - // If direction has been scaled (say by setting the initial eta), the - // old correction has to be updated - optType_->updateOldCorrection(direction); - optType_->write(); + // Update design variables + optType_->update(); // Solve primal equations solvePrimalEquations(); @@ -223,20 +223,15 @@ bool Foam::steadyOptimisation::update() void Foam::steadyOptimisation::updateDesignVariables() { - // Compute direction of update - tmp<scalarField> tdirection = optType_->computeDirection(); - scalarField& direction = tdirection.ref(); - autoPtr<lineSearch>& lineSrch = optType_->getLineSearch(); - // Update design variables using either a line-search scheme or // a fixed-step update - if (lineSrch.valid()) + if (optType_->getLineSearch().valid()) { - lineSearchUpdate(direction); + lineSearchUpdate(); } else { - fixedStepUpdate(direction); + fixedStepUpdate(); } // Reset adjoint sensitivities in all adjoint solver managers diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationManager/steadyOptimisation/steadyOptimisation.H b/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationManager/steadyOptimisation/steadyOptimisation.H index 549b0036878c094fc3c5654d0946c6cb78ddc8c2..0fad239c9c9b806f220d55b85be0a560c557b768 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationManager/steadyOptimisation/steadyOptimisation.H +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationManager/steadyOptimisation/steadyOptimisation.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -75,10 +75,10 @@ protected: // Protected Member Functions //- Update design variables using a line-search - void lineSearchUpdate(scalarField& direction); + void lineSearchUpdate(); //- Update design variables using a fixed step - void fixedStepUpdate(scalarField& direction); + void fixedStepUpdate(); public: diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/optimisationType/optimisationTypeIncompressible.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/optimisationType/optimisationTypeIncompressible.C index 0cfd8af5de4fdf937cb2e6eb31b9394e3c7bbc4d..06b2de5394b8a89ab1903d7cc4d99dde9ec169ff 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/optimisationType/optimisationTypeIncompressible.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/optimisationType/optimisationTypeIncompressible.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -157,14 +157,79 @@ autoPtr<optimisationType> optimisationType::New // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * // +void optimisationType::update() +{ + // Compute update of the design variables + tmp<scalarField> tcorrection(computeDirection()); + scalarField& correction = tcorrection.ref(); + + // Update design variables given the correction + update(correction); + + // If direction has been scaled (say by setting the initial eta), the + // old correction has to be updated + updateOldCorrection(correction); + write(); +} + + +void optimisationType::update(scalarField& direction) +{ + // Compute eta if needed + computeEta(direction); + + // Multiply with line search step, if necessary + scalarField correction(direction); + if (lineSearch_.valid()) + { + correction *= lineSearch_->step(); + } + + // Update the design variables + updateDesignVariables(correction); +} + + tmp<scalarField> optimisationType::computeDirection() { - // Sum contributions + // Sum contributions for sensitivities and objective/constraint values scalarField objectiveSens; PtrList<scalarField> constraintSens; scalar objectiveValue(Zero); scalarField constraintValues; + updateGradientsAndValues + ( + objectiveSens, + constraintSens, + objectiveValue, + constraintValues + ); + + // Based on the sensitivities, return design variables correction + updateMethod_->setObjectiveDeriv(objectiveSens); + updateMethod_->setConstraintDeriv(constraintSens); + updateMethod_->setObjectiveValue(objectiveValue); + updateMethod_->setConstraintValues(constraintValues); + tmp<scalarField> tcorrection + ( + new scalarField(objectiveSens.size(), Zero) + ); + scalarField& correction = tcorrection.ref(); + correction = updateMethod_->returnCorrection(); + + return tcorrection; +} + + +void optimisationType::updateGradientsAndValues +( + scalarField& objectiveSens, + PtrList<scalarField>& constraintSens, + scalar& objectiveValue, + scalarField& constraintValues +) +{ for (adjointSolverManager& adjSolvManager : adjointSolvManagers_) { const scalar opWeight = adjSolvManager.operatingPointWeight(); @@ -212,20 +277,6 @@ tmp<scalarField> optimisationType::computeDirection() } constraintValues += opWeight*cValues(); } - - // Based on the sensitivities, return design variables correction - updateMethod_->setObjectiveDeriv(objectiveSens); - updateMethod_->setConstraintDeriv(constraintSens); - updateMethod_->setObjectiveValue(objectiveValue); - updateMethod_->setConstraintValues(constraintValues); - tmp<scalarField> tcorrection - ( - new scalarField(objectiveSens.size(), Zero) - ); - scalarField& correction = tcorrection.ref(); - correction = updateMethod_->returnCorrection(); - - return tcorrection; } diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/optimisationType/optimisationTypeIncompressible.H b/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/optimisationType/optimisationTypeIncompressible.H index 8dd392c0e7ee8ad371393673d2a3706fef1bcad9..1c1a75619fb239e515bfadc3cb1f570457fe4fb7 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/optimisationType/optimisationTypeIncompressible.H +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/optimisationType/optimisationTypeIncompressible.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -69,7 +69,11 @@ protected: autoPtr<volScalarField> sourcePtr_; autoPtr<lineSearch> lineSearch_; - virtual void computeEta(scalarField& correction)=0; + //- Update the design variables given their correction + virtual void updateDesignVariables(scalarField& correction) = 0; + + //- Compute eta if not set in the first step + virtual void computeEta(scalarField& correction) = 0; private: @@ -132,10 +136,10 @@ public: virtual ~optimisationType() = default; //- Update design variables - virtual void update() = 0; + virtual void update(); //- Update design variables based on a given correction - virtual void update(scalarField& correction) = 0; + virtual void update(scalarField& correction); //- Store design variables, as the starting point for line search virtual void storeDesignVariables() = 0; @@ -146,6 +150,15 @@ public: //- Compute update direction virtual tmp<scalarField> computeDirection(); + //- Compute cumulative objective and constraint gradients + virtual void updateGradientsAndValues + ( + scalarField& objectiveSens, + PtrList<scalarField>& constraintSens, + scalar& objectiveValue, + scalarField& constraintValues + ); + //- Compute the merit function of the optimisation problem. // Could be different than the objective function in case of // constraint optimisation diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/shapeOptimisation/shapeOptimisationIncompressible.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/shapeOptimisation/shapeOptimisationIncompressible.C index d183c40af4b71b8529a95be5f3ba6aa22c349630..6af773aca9c68d93297f98bc96caff5392998c57 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/shapeOptimisation/shapeOptimisationIncompressible.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/shapeOptimisation/shapeOptimisationIncompressible.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -49,6 +49,39 @@ addToRunTimeSelectionTable // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // +void shapeOptimisation::updateDesignVariables(scalarField& correction) +{ + // Communicate the movement to optMeshMovement + optMeshMovement_->setCorrection(correction); + + if (updateGeometry_) + { + // Update the mesh + optMeshMovement_->moveMesh(); + + if (writeEachMesh_) + { + Info<< " Writing new mesh points " << endl; + pointIOField points + ( + IOobject + ( + "points", + mesh_.pointsInstance(), + mesh_.meshSubDir, + mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ), + mesh_.points() + ); + points.write(); + } + } +} + + void shapeOptimisation::computeEta ( scalarField& correction @@ -146,144 +179,6 @@ shapeOptimisation::shapeOptimisation // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void shapeOptimisation::update() -{ - Info<< nl << "Moving Mesh..." << nl << endl; - - // Sum contributions - scalarField objectiveSens(0); - PtrList<scalarField> constraintSens(0); - scalar objectiveValue(Zero); - scalarField constraintValues(0); - forAll(adjointSolvManagers_, amI) - { - adjointSolverManager& adjSolvManager(adjointSolvManagers_[amI]); - const scalar opWeight(adjSolvManager.operatingPointWeight()); - - // Allocate objective sens size if necessary - tmp<scalarField> tadjointSolverManagerSens = - adjSolvManager.aggregateSensitivities(); - - if (objectiveSens.empty()) - { - objectiveSens.setSize(tadjointSolverManagerSens().size(), Zero); - } - objectiveSens += opWeight*tadjointSolverManagerSens(); - objectiveValue += opWeight*adjSolvManager.objectiveValue(); - - // Allocate constraint sens size if necessary - PtrList<scalarField> adjointSolverManagerConstSens - = adjSolvManager.constraintSensitivities(); - tmp<scalarField> cValues = adjSolvManager.constraintValues(); - if (constraintSens.empty()) - { - constraintSens.setSize(adjointSolverManagerConstSens.size()); - forAll(constraintSens, cI) - { - constraintSens.set - ( - cI, - new scalarField - ( - adjointSolverManagerConstSens[cI].size(), - Zero - ) - ); - constraintValues.setSize(cValues().size()); - constraintValues = Zero; - } - } - - forAll(constraintSens, cI) - { - constraintSens[cI] += opWeight*adjointSolverManagerConstSens[cI]; - } - constraintValues += opWeight*cValues(); - } - - // Based on the sensitivities, return design variables correction - updateMethod_->setObjectiveDeriv(objectiveSens); - updateMethod_->setConstraintDeriv(constraintSens); - updateMethod_->setObjectiveValue(objectiveValue); - updateMethod_->setConstraintValues(constraintValues); - scalarField& correction = updateMethod_->returnCorrection(); - - // Computed eta if needed - computeEta(correction); - updateMethod_->writeCorrection(); - - // Communicate the movement to optMeshMovement - optMeshMovement_->setCorrection(correction); - if (updateGeometry_) - { - optMeshMovement_->moveMesh(); - - if (writeEachMesh_) - { - Info<< " Writing new mesh points " << endl; - pointIOField points - ( - IOobject - ( - "points", - mesh_.pointsInstance(), - mesh_.meshSubDir, - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE, - false - ), - mesh_.points() - ); - points.write(); - } - } -} - - -void shapeOptimisation::update(scalarField& direction) -{ - // Computed eta if needed - computeEta(direction); - - // Multiply with line search step, if necessary - scalarField correction = direction; - if (lineSearch_.valid()) - { - correction *= lineSearch_->step(); - } - - // Communicate the movement to optMeshMovement - optMeshMovement_->setCorrection(correction); - - if (updateGeometry_) - { - // Update the mesh - optMeshMovement_->moveMesh(); - - if (writeEachMesh_) - { - Info<< " Writing new mesh points " << endl; - pointIOField points - ( - IOobject - ( - "points", - mesh_.pointsInstance(), - mesh_.meshSubDir, - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE, - false - ), - mesh_.points() - ); - points.write(); - } - } -} - - void shapeOptimisation::storeDesignVariables() { optMeshMovement_->storeDesignVariables(); diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/shapeOptimisation/shapeOptimisationIncompressible.H b/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/shapeOptimisation/shapeOptimisationIncompressible.H index 5152941fb143d7efddb6cae371f209ce35ea13cc..421feaba671710687f9422582921254b701a11a1 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/shapeOptimisation/shapeOptimisationIncompressible.H +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/shapeOptimisation/shapeOptimisationIncompressible.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -76,6 +76,10 @@ protected: // Protected Member Functions + //- Update the design variables given their correction + virtual void updateDesignVariables(scalarField& correction); + + //- Compute eta if not set in the first step virtual void computeEta(scalarField& correction); @@ -113,20 +117,14 @@ public: // Member Functions - //- Master function. Calls all the others - void update(); - - //- Update design variables based on a given correction - virtual void update(scalarField& correction); - - //- Store design variables, as the starting point for line search - virtual void storeDesignVariables(); + //- Store design variables, as the starting point for line search + virtual void storeDesignVariables(); - //- Store design variables, as the starting point for line search - virtual void resetDesignVariables(); + //- Store design variables, as the starting point for line search + virtual void resetDesignVariables(); - //- Write useful quantities to files - virtual void write(); + //- Write useful quantities to files + virtual void write(); }; diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/updateMethod/updateMethod/updateMethod.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/updateMethod/updateMethod/updateMethod.C index 1410824a72b4421bc00ed505a171b533206955ed..2b9b08511969331373ce854ea81fae72e9cb26c6 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/updateMethod/updateMethod/updateMethod.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/updateMethod/updateMethod/updateMethod.C @@ -127,7 +127,7 @@ Foam::updateMethod::inv(SquareMatrix<scalar> A) label n(A.n()); SquareMatrix<scalar> invA(n, Zero); - //- LU decomposition of A + // LU decomposition of A labelList pivotIndices(n, Zero); LUDecompose(A, pivotIndices); DebugInfo diff --git a/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolume.C b/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolume.C index c6346ac5592fea49da49586878fdb8dd23527022..f8396174de1b52e3fb6ae02f88a1dff8f93d63c7 100644 --- a/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolume.C +++ b/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolume.C @@ -497,9 +497,9 @@ void Foam::NURBS3DVolume::continuityRealatedConfinement() // Zero movement to a number of x-constant slices of cps in order to // preserve continuity at the boundary of the parameterized space - forAll(boundUMinCPs_, iCPu) + forAll(confineUMinCPs_, iCPu) { - const FixedList<bool, 3>& confineSlice = boundUMinCPs_[iCPu]; + const FixedList<bool, 3>& confineSlice = confineUMinCPs_[iCPu]; // Control points at the start of the parameterized space for (label iCPw = 0; iCPw < nCPsW; iCPw++) { @@ -510,9 +510,9 @@ void Foam::NURBS3DVolume::continuityRealatedConfinement() } } - forAll(boundUMaxCPs_, sliceI) + forAll(confineUMaxCPs_, sliceI) { - const FixedList<bool, 3>& confineSlice = boundUMaxCPs_[sliceI]; + const FixedList<bool, 3>& confineSlice = confineUMaxCPs_[sliceI]; label iCPu = nCPsU - 1 - sliceI; // Control points at the end of the parameterized space for (label iCPw = 0; iCPw < nCPsW; iCPw++) @@ -526,9 +526,9 @@ void Foam::NURBS3DVolume::continuityRealatedConfinement() // Zero movement to a number of y-constant slices of cps in order to // preserve continuity at the boundary of the parameterized space - forAll(boundVMinCPs_, iCPv) + forAll(confineVMinCPs_, iCPv) { - const FixedList<bool, 3>& confineSlice = boundVMinCPs_[iCPv]; + const FixedList<bool, 3>& confineSlice = confineVMinCPs_[iCPv]; // Control points at the start of the parameterized space for (label iCPw = 0; iCPw < nCPsW; iCPw++) { @@ -539,9 +539,9 @@ void Foam::NURBS3DVolume::continuityRealatedConfinement() } } - forAll(boundVMaxCPs_, sliceI) + forAll(confineVMaxCPs_, sliceI) { - const FixedList<bool, 3>& confineSlice = boundVMaxCPs_[sliceI]; + const FixedList<bool, 3>& confineSlice = confineVMaxCPs_[sliceI]; label iCPv = nCPsV - 1 - sliceI; // Control points at the end of the parameterized space for (label iCPw = 0; iCPw < nCPsW; iCPw++) @@ -555,9 +555,9 @@ void Foam::NURBS3DVolume::continuityRealatedConfinement() // Zero movement to a number of w-constant slices of cps in order to // preserve continuity at the boundary of the parameterized space - forAll(boundWMinCPs_, iCPw) + forAll(confineWMinCPs_, iCPw) { - const FixedList<bool, 3>& confineSlice = boundWMinCPs_[iCPw]; + const FixedList<bool, 3>& confineSlice = confineWMinCPs_[iCPw]; // Control points at the start of the parameterized space for (label iCPv = 0; iCPv < nCPsV; iCPv++) { @@ -568,9 +568,9 @@ void Foam::NURBS3DVolume::continuityRealatedConfinement() } } - forAll(boundWMaxCPs_, sliceI) + forAll(confineWMaxCPs_, sliceI) { - const FixedList<bool, 3>& confineSlice = boundWMaxCPs_[sliceI]; + const FixedList<bool, 3>& confineSlice = confineWMaxCPs_[sliceI]; label iCPw = nCPsW - 1 - sliceI; // Control points at the end of the parameterized space for (label iCPv = 0; iCPv < nCPsV; iCPv++) @@ -588,9 +588,9 @@ void Foam::NURBS3DVolume::confineControlPointsDirections() { for (label cpI = 0; cpI < cps_.size(); ++cpI) { - if (confineX1movement_) activeDesignVariables_[3*cpI] = false; - if (confineX2movement_) activeDesignVariables_[3*cpI + 1] = false; - if (confineX3movement_) activeDesignVariables_[3*cpI + 2] = false; + if (confineUMovement_) activeDesignVariables_[3*cpI] = false; + if (confineVMovement_) activeDesignVariables_[3*cpI + 1] = false; + if (confineWMovement_) activeDesignVariables_[3*cpI + 2] = false; } } @@ -657,36 +657,72 @@ Foam::NURBS3DVolume::NURBS3DVolume reverseMapPtr_(nullptr), parametricCoordinatesPtr_(nullptr), localSystemCoordinates_(mesh_.nPoints(), Zero), - confineX1movement_(dict.getOrDefault<bool>("confineX1movement", false)), - confineX2movement_(dict.getOrDefault<bool>("confineX2movement", false)), - confineX3movement_(dict.getOrDefault<bool>("confineX3movement", false)), + confineUMovement_ + ( + dict.getOrDefaultCompat<bool> + ( + "confineUMovement", {{"confineX1movement", 1912}}, false + ) + ), + confineVMovement_ + ( + dict.getOrDefaultCompat<bool> + ( + "confineVMovement", {{"confineX2movement", 1912}}, false + ) + ), + confineWMovement_ + ( + dict.getOrDefaultCompat<bool> + ( + "confineWMovement", {{"confineX3movement", 1912}}, false + ) + ), confineBoundaryControlPoints_ ( dict.getOrDefault<bool>("confineBoundaryControlPoints", true) ), - boundUMinCPs_ + confineUMinCPs_ ( - dict.getOrDefault<boolListList3>("boundUMinCPs", boolListList3(0)) + dict.getOrDefaultCompat<boolListList3> + ( + "confineUMinCPs", {{"boundUMinCPs", 1912}}, boolListList3(0) + ) ), - boundUMaxCPs_ + confineUMaxCPs_ ( - dict.getOrDefault<boolListList3>("boundUMaxCPs", boolListList3(0)) + dict.getOrDefaultCompat<boolListList3> + ( + "confineUMaxCPs", {{"boundUMaxCPs", 1912}}, boolListList3(0) + ) ), - boundVMinCPs_ + confineVMinCPs_ ( - dict.getOrDefault<boolListList3>("boundVMinCPs", boolListList3(0)) + dict.getOrDefaultCompat<boolListList3> + ( + "confineVMinCPs", {{"boundVMinCPs", 1912}}, boolListList3(0) + ) ), - boundVMaxCPs_ + confineVMaxCPs_ ( - dict.getOrDefault<boolListList3>("boundVMaxCPs", boolListList3(0)) + dict.getOrDefaultCompat<boolListList3> + ( + "confineVMaxCPs", {{"boundVMaxCPs", 1912}}, boolListList3(0) + ) ), - boundWMinCPs_ + confineWMinCPs_ ( - dict.getOrDefault<boolListList3>("boundWMinCPs", boolListList3(0)) + dict.getOrDefaultCompat<boolListList3> + ( + "confineWMinCPs", {{"boundWMinCPs", 1912}}, boolListList3(0) + ) ), - boundWMaxCPs_ + confineWMaxCPs_ ( - dict.getOrDefault<boolListList3>("boundWMaxCPs", boolListList3(0)) + dict.getOrDefaultCompat<boolListList3> + ( + "confineWMaxCPs", {{"boundWMaxCPs", 1912}}, boolListList3(0) + ) ), activeControlPoints_(0), //zero here, execute sanity checks first activeDesignVariables_(0), //zero here, execute sanity checks first @@ -699,9 +735,9 @@ Foam::NURBS3DVolume::NURBS3DVolume // Sanity checks if ( - (boundUMinCPs_.size() + boundUMaxCPs_.size() >= basisU_.nCPs()) - || (boundVMinCPs_.size() + boundVMaxCPs_.size() >= basisV_.nCPs()) - || (boundWMinCPs_.size() + boundWMaxCPs_.size() >= basisW_.nCPs()) + (confineUMinCPs_.size() + confineUMaxCPs_.size() >= basisU_.nCPs()) + || (confineVMinCPs_.size() + confineVMaxCPs_.size() >= basisV_.nCPs()) + || (confineWMinCPs_.size() + confineWMaxCPs_.size() >= basisW_.nCPs()) ) { FatalErrorInFunction @@ -1850,7 +1886,7 @@ void Foam::NURBS3DVolume::writeCps(const fileName& baseName) const // Write header cpsFile << "\"Points : 0\", \"Points : 1\", \"Points : 2\"," - << "\"u\", \"v\", \"w\"," + << "\"i\", \"j\", \"k\"," << "\"active : 0\", \"active : 1\", \"active : 2\"" << endl; forAll(cpsInCartesian, cpI) diff --git a/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolume.H b/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolume.H index bdfcdc5456c46969d77069d13155ae93e07dd957..67dd94c23b1ce395cf986e0a7355ec9225629f97 100644 --- a/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolume.H +++ b/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolume.H @@ -112,26 +112,26 @@ protected: //- Confine movement in certain directions and control points. Refers //- to the local system - label confineX1movement_; + label confineUMovement_; - label confineX2movement_; + label confineVMovement_; - label confineX3movement_; + label confineWMovement_; label confineBoundaryControlPoints_; //- Which movement components to freeze in each plane - boolListList3 boundUMinCPs_; + boolListList3 confineUMinCPs_; - boolListList3 boundUMaxCPs_; + boolListList3 confineUMaxCPs_; - boolListList3 boundVMinCPs_; + boolListList3 confineVMinCPs_; - boolListList3 boundVMaxCPs_; + boolListList3 confineVMaxCPs_; - boolListList3 boundWMinCPs_; + boolListList3 confineWMinCPs_; - boolListList3 boundWMaxCPs_; + boolListList3 confineWMaxCPs_; //- Which of the cps are moved in an optimisation boolList activeControlPoints_; @@ -449,11 +449,11 @@ public: inline const vectorField& getControlPoints() const; //- Get confine movements - inline bool confineX1movement() const; + inline bool confineUMovement() const; - inline bool confineX2movement() const; + inline bool confineVMovement() const; - inline bool confineX3movement() const; + inline bool confineWMovement() const; //- Get basis functions inline const NURBSbasis& basisU() const; diff --git a/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolumeI.H b/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolumeI.H index 3e2aa32ee0d8431a0300c8e05a83d0d715951bd4..a3c58650297802c99d426ad75d1965a2785fb9f0 100644 --- a/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolumeI.H +++ b/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolumeI.H @@ -56,21 +56,21 @@ inline const Foam::vectorField& Foam::NURBS3DVolume::getControlPoints() const } -inline bool Foam::NURBS3DVolume::confineX1movement() const +inline bool Foam::NURBS3DVolume::confineUMovement() const { - return confineX1movement_; + return confineUMovement_; } -inline bool Foam::NURBS3DVolume::confineX2movement() const +inline bool Foam::NURBS3DVolume::confineVMovement() const { - return confineX2movement_; + return confineVMovement_; } -inline bool Foam::NURBS3DVolume::confineX3movement() const +inline bool Foam::NURBS3DVolume::confineWMovement() const { - return confineX3movement_; + return confineWMovement_; } diff --git a/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/volBSplinesBase/volBSplinesBase.C b/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/volBSplinesBase/volBSplinesBase.C index 3221257012726cac119b2e61c00ecb7ce6172566..4f8a5f94259e5013dcf1af1220102bfb8e429377 100644 --- a/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/volBSplinesBase/volBSplinesBase.C +++ b/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/volBSplinesBase/volBSplinesBase.C @@ -187,6 +187,24 @@ labelList volBSplinesBase::getStartCpID() const } +label volBSplinesBase::findBoxID(const label cpI) const +{ + const labelList startCPID(getStartCpID()); + for (label iBox = 0; iBox < startCPID.size() - 1 ; ++iBox) + { + if (cpI >= startCPID[iBox] || cpI < startCPID[iBox + 1]) + { + return iBox; + } + } + + FatalErrorInFunction + << "Invalid control point ID " << cpI << endl + << exit(FatalError); + return -1; +} + + const Foam::labelList& volBSplinesBase::getActiveDesignVariables() const { return activeDesignVariables_; diff --git a/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/volBSplinesBase/volBSplinesBase.H b/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/volBSplinesBase/volBSplinesBase.H index b880a932ce2051bc474cca220800adfeaae9bd94..d6fc19d6169a0a73cb4fb00238136d03818fb390 100644 --- a/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/volBSplinesBase/volBSplinesBase.H +++ b/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/volBSplinesBase/volBSplinesBase.H @@ -129,6 +129,9 @@ public: //- Get start CP ID for each box labelList getStartCpID() const; + //- Find box of certain control point + label findBoxID(const label cpI) const; + //- Get active design variables const labelList& getActiveDesignVariables() const; diff --git a/src/optimisation/adjointOptimisation/adjoint/solvers/adjointSolvers/incompressible/adjointSimple/adjointSimple.C b/src/optimisation/adjointOptimisation/adjoint/solvers/adjointSolvers/incompressible/adjointSimple/adjointSimple.C index d59f6e934718f1cecf73c78cc59ecc58e6cbe329..8b54effb8ac3fb363e79f03e896d6e660810471e 100644 --- a/src/optimisation/adjointOptimisation/adjoint/solvers/adjointSolvers/incompressible/adjointSimple/adjointSimple.C +++ b/src/optimisation/adjointOptimisation/adjoint/solvers/adjointSolvers/incompressible/adjointSimple/adjointSimple.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -312,9 +312,6 @@ void Foam::adjointSimple::solve() { if (active_) { - // Update objective function related quantities - objectiveManagerPtr_->updateAndWrite(); - // Reset mean fields before solving adjointVars_.resetMeanFields(); @@ -389,6 +386,15 @@ Foam::sensitivity& Foam::adjointSimple::getSensitivityBase() } +void Foam::adjointSimple::updatePrimalBasedQuantities() +{ + incompressibleAdjointSolver::updatePrimalBasedQuantities(); + + // Update objective function related quantities + objectiveManagerPtr_->updateAndWrite(); +} + + bool Foam::adjointSimple::writeData(Ostream& os) const { os.writeEntry("averageIter", solverControl_().averageIter()); diff --git a/src/optimisation/adjointOptimisation/adjoint/solvers/adjointSolvers/incompressible/adjointSimple/adjointSimple.H b/src/optimisation/adjointOptimisation/adjoint/solvers/adjointSolvers/incompressible/adjointSimple/adjointSimple.H index 14b348f632f1d3b29ecfc306a9e2805f2119ab62..a5884247be4f59e1dc1323bfa71dfc7c176a9610 100644 --- a/src/optimisation/adjointOptimisation/adjoint/solvers/adjointSolvers/incompressible/adjointSimple/adjointSimple.H +++ b/src/optimisation/adjointOptimisation/adjoint/solvers/adjointSolvers/incompressible/adjointSimple/adjointSimple.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -168,6 +168,14 @@ public: //- Return the base sensitivity object virtual sensitivity& getSensitivityBase(); + //- Update primal based quantities + //- related to the objective functions. + // Also writes the objective function values to files. + // Written here and not in the postLoop function of the primal + // to make sure we don't pollute the objective files with + // objectives of non-converged linearSearch iterations + virtual void updatePrimalBasedQuantities(); + //- Write average iteration virtual bool writeData(Ostream& os) const; }; diff --git a/src/optimisation/adjointOptimisation/adjoint/solvers/primalSolvers/incompressible/incompressiblePrimalSolver/incompressiblePrimalSolver.C b/src/optimisation/adjointOptimisation/adjoint/solvers/primalSolvers/incompressible/incompressiblePrimalSolver/incompressiblePrimalSolver.C index bfc3a4bc11aed0639949f7142bf2642339d0a749..f1f50530e36e924c371e6c23092a43cdd92c8d83 100644 --- a/src/optimisation/adjointOptimisation/adjoint/solvers/primalSolvers/incompressible/incompressiblePrimalSolver/incompressiblePrimalSolver.C +++ b/src/optimisation/adjointOptimisation/adjoint/solvers/primalSolvers/incompressible/incompressiblePrimalSolver/incompressiblePrimalSolver.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -130,7 +130,7 @@ Foam::incompressiblePrimalSolver::getObjectiveFunctions() const { adjointSolver& adjoint = *adjointPtr; - if (adjoint.active() && adjoint.primalSolverName() == solverName_) + if (adjoint.primalSolverName() == solverName_) { PtrList<objective>& managerObjectives = adjoint.getObjectiveManager().getObjectiveFunctions(); diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointFarFieldNuaTilda/adjointFarFieldNuaTildaFvPatchScalarField.C b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointFarFieldNuaTilda/adjointFarFieldNuaTildaFvPatchScalarField.C index e289098d4b907480734af1433b587f72ac49bf5a..edbdc4b09ca1ac869dd95097d50d4ffedd6ca895 100644 --- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointFarFieldNuaTilda/adjointFarFieldNuaTildaFvPatchScalarField.C +++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointFarFieldNuaTilda/adjointFarFieldNuaTildaFvPatchScalarField.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -48,7 +48,7 @@ adjointFarFieldNuaTildaFvPatchScalarField ) : fixedValueFvPatchScalarField(p, iF), - adjointBoundaryCondition(p, iF, word::null) + adjointScalarBoundaryCondition(p, iF, word::null) {} @@ -62,7 +62,7 @@ adjointFarFieldNuaTildaFvPatchScalarField ) : fixedValueFvPatchScalarField(ptf, p, iF, mapper), - adjointBoundaryCondition(p, iF, ptf.adjointSolverName_) + adjointScalarBoundaryCondition(p, iF, ptf.adjointSolverName_) {} @@ -75,7 +75,7 @@ adjointFarFieldNuaTildaFvPatchScalarField ) : fixedValueFvPatchScalarField(p, iF), - adjointBoundaryCondition(p, iF, dict.get<word>("solverName")) + adjointScalarBoundaryCondition(p, iF, dict.get<word>("solverName")) { fvPatchField<scalar>::operator= ( @@ -92,7 +92,7 @@ adjointFarFieldNuaTildaFvPatchScalarField ) : fixedValueFvPatchScalarField(tppsf, iF), - adjointBoundaryCondition(tppsf) + adjointScalarBoundaryCondition(tppsf) {} diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointFarFieldNuaTilda/adjointFarFieldNuaTildaFvPatchScalarField.H b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointFarFieldNuaTilda/adjointFarFieldNuaTildaFvPatchScalarField.H index ece262211f358c306b9c855069dd52965a4c3242..65d801600cf68b03080e4f8734bcd22e65c186da 100644 --- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointFarFieldNuaTilda/adjointFarFieldNuaTildaFvPatchScalarField.H +++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointFarFieldNuaTilda/adjointFarFieldNuaTildaFvPatchScalarField.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -40,7 +40,7 @@ SourceFiles #define adjointFarFieldNuaTildaFvPatchScalarField_H #include "fixedValueFvPatchFields.H" -#include "adjointBoundaryCondition.H" +#include "adjointBoundaryConditions.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -54,7 +54,7 @@ namespace Foam class adjointFarFieldNuaTildaFvPatchScalarField : public fixedValueFvPatchScalarField, - public adjointBoundaryCondition + public adjointScalarBoundaryCondition { public: diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointInletNuaTilda/adjointInletNuaTildaFvPatchScalarField.C b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointInletNuaTilda/adjointInletNuaTildaFvPatchScalarField.C index ef3eee6b769d40bc5d746f08da5188c052c69b15..a3d75d2fccb6fa3972277cd3f3d923a7b08daf9f 100644 --- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointInletNuaTilda/adjointInletNuaTildaFvPatchScalarField.C +++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointInletNuaTilda/adjointInletNuaTildaFvPatchScalarField.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -44,7 +44,7 @@ adjointInletNuaTildaFvPatchScalarField::adjointInletNuaTildaFvPatchScalarField ) : fixedValueFvPatchScalarField(p, iF), - adjointBoundaryCondition(p, iF, word::null) + adjointScalarBoundaryCondition(p, iF, word::null) {} @@ -57,7 +57,7 @@ adjointInletNuaTildaFvPatchScalarField::adjointInletNuaTildaFvPatchScalarField ) : fixedValueFvPatchScalarField(ptf, p, iF, mapper), - adjointBoundaryCondition(p, iF, ptf.adjointSolverName_) + adjointScalarBoundaryCondition(p, iF, ptf.adjointSolverName_) {} @@ -69,7 +69,7 @@ adjointInletNuaTildaFvPatchScalarField::adjointInletNuaTildaFvPatchScalarField ) : fixedValueFvPatchScalarField(p, iF, dict), - adjointBoundaryCondition(p, iF, dict.get<word>("solverName")) + adjointScalarBoundaryCondition(p, iF, dict.get<word>("solverName")) {} @@ -80,7 +80,7 @@ adjointInletNuaTildaFvPatchScalarField::adjointInletNuaTildaFvPatchScalarField ) : fixedValueFvPatchScalarField(ptf, iF), - adjointBoundaryCondition(ptf) + adjointScalarBoundaryCondition(ptf) {} diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointInletNuaTilda/adjointInletNuaTildaFvPatchScalarField.H b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointInletNuaTilda/adjointInletNuaTildaFvPatchScalarField.H index 2920ad074203c8d212beb10566d21db6ffe299ed..5cf3d8cb522860e13b94fd3366c3cf1c07891cfe 100644 --- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointInletNuaTilda/adjointInletNuaTildaFvPatchScalarField.H +++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointInletNuaTilda/adjointInletNuaTildaFvPatchScalarField.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -42,7 +42,7 @@ SourceFiles #include "fvPatchFields.H" #include "fixedValueFvPatchFields.H" -#include "adjointBoundaryCondition.H" +#include "adjointBoundaryConditions.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -56,7 +56,7 @@ namespace Foam class adjointInletNuaTildaFvPatchScalarField : public fixedValueFvPatchScalarField, - public adjointBoundaryCondition + public adjointScalarBoundaryCondition { public: diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletFlux/adjointOutletFluxFvPatchScalarField.H b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletFlux/adjointOutletFluxFvPatchScalarField.H index ad7bbce8badfd55483c89dffb1e3f7ed775e86bc..4efe56af5a9a3c1790428468b7df5029ffcbf96c 100644 --- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletFlux/adjointOutletFluxFvPatchScalarField.H +++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletFlux/adjointOutletFluxFvPatchScalarField.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -40,7 +40,7 @@ SourceFiles #define adjointOutletFluxFvPatchScalarField_H #include "fixedValueFvPatchFields.H" -#include "adjointBoundaryCondition.H" +#include "adjointBoundaryConditions.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletNuaTilda/adjointOutletNuaTildaFvPatchScalarField.C b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletNuaTilda/adjointOutletNuaTildaFvPatchScalarField.C index fc50925a99b5bbf4fb55c412039eb17a7b3bc45e..ef16a37865c667d389c753c052ffda5147d5acf6 100644 --- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletNuaTilda/adjointOutletNuaTildaFvPatchScalarField.C +++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletNuaTilda/adjointOutletNuaTildaFvPatchScalarField.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ adjointOutletNuaTildaFvPatchScalarField::adjointOutletNuaTildaFvPatchScalarField ) : fixedValueFvPatchScalarField(p, iF), - adjointBoundaryCondition(p, iF, word::null) + adjointScalarBoundaryCondition(p, iF, word::null) {} @@ -59,7 +59,7 @@ adjointOutletNuaTildaFvPatchScalarField::adjointOutletNuaTildaFvPatchScalarField ) : fixedValueFvPatchScalarField(ptf, p, iF, mapper), - adjointBoundaryCondition(p, iF, ptf.adjointSolverName_) + adjointScalarBoundaryCondition(p, iF, ptf.adjointSolverName_) {} @@ -71,7 +71,7 @@ adjointOutletNuaTildaFvPatchScalarField::adjointOutletNuaTildaFvPatchScalarField ) : fixedValueFvPatchScalarField(p, iF), - adjointBoundaryCondition(p, iF, dict.get<word>("solverName")) + adjointScalarBoundaryCondition(p, iF, dict.get<word>("solverName")) { fvPatchField<scalar>::operator= ( @@ -87,7 +87,7 @@ adjointOutletNuaTildaFvPatchScalarField::adjointOutletNuaTildaFvPatchScalarField ) : fixedValueFvPatchScalarField(tppsf, iF), - adjointBoundaryCondition(tppsf) + adjointScalarBoundaryCondition(tppsf) {} diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletNuaTilda/adjointOutletNuaTildaFvPatchScalarField.H b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletNuaTilda/adjointOutletNuaTildaFvPatchScalarField.H index b2f5ee87871ecfb538511f3f0f2f404944b994c0..8f20dcb0ea3425811818fc68cee414146dabea34 100644 --- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletNuaTilda/adjointOutletNuaTildaFvPatchScalarField.H +++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletNuaTilda/adjointOutletNuaTildaFvPatchScalarField.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -40,7 +40,7 @@ SourceFiles #define adjointOutletNuaTildaFvPatchScalarField_H #include "fixedValueFvPatchFields.H" -#include "adjointBoundaryCondition.H" +#include "adjointBoundaryConditions.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -54,7 +54,7 @@ namespace Foam class adjointOutletNuaTildaFvPatchScalarField : public fixedValueFvPatchScalarField, - public adjointBoundaryCondition + public adjointScalarBoundaryCondition { public: diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletNuaTildaFlux/adjointOutletNuaTildaFluxFvPatchScalarField.C b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletNuaTildaFlux/adjointOutletNuaTildaFluxFvPatchScalarField.C index b78448441a2df209ba3d62e6071f33ec04d62543..f66e1972e79e8d9e1a70d9c77719a179f7c0a3ec 100644 --- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletNuaTildaFlux/adjointOutletNuaTildaFluxFvPatchScalarField.C +++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletNuaTildaFlux/adjointOutletNuaTildaFluxFvPatchScalarField.C @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -47,7 +47,7 @@ adjointOutletNuaTildaFluxFvPatchScalarField ) : fixedValueFvPatchScalarField(p, iF), - adjointBoundaryCondition(p, iF, word::null) + adjointScalarBoundaryCondition(p, iF, word::null) {} @@ -61,7 +61,7 @@ adjointOutletNuaTildaFluxFvPatchScalarField ) : fixedValueFvPatchScalarField(ptf, p, iF, mapper), - adjointBoundaryCondition(p, iF, ptf.adjointSolverName_) + adjointScalarBoundaryCondition(p, iF, ptf.adjointSolverName_) {} @@ -74,7 +74,7 @@ adjointOutletNuaTildaFluxFvPatchScalarField ) : fixedValueFvPatchScalarField(p, iF), - adjointBoundaryCondition(p, iF, dict.get<word>("solverName")) + adjointScalarBoundaryCondition(p, iF, dict.get<word>("solverName")) { fvPatchField<scalar>::operator= ( @@ -91,7 +91,7 @@ adjointOutletNuaTildaFluxFvPatchScalarField ) : fixedValueFvPatchScalarField(tppsf, iF), - adjointBoundaryCondition(tppsf) + adjointScalarBoundaryCondition(tppsf) {} diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletNuaTildaFlux/adjointOutletNuaTildaFluxFvPatchScalarField.H b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletNuaTildaFlux/adjointOutletNuaTildaFluxFvPatchScalarField.H index cdea8dea95f7023edb68fac10ec6e83c21a6c804..246a33a557bb6635bf0ebf55924fa7c19778f460 100644 --- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletNuaTildaFlux/adjointOutletNuaTildaFluxFvPatchScalarField.H +++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/derivedFvPatchFields/adjointOutletNuaTildaFlux/adjointOutletNuaTildaFluxFvPatchScalarField.H @@ -5,8 +5,8 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2007-2019 PCOpt/NTUA - Copyright (C) 2013-2019 FOSS GP + Copyright (C) 2007-2020 PCOpt/NTUA + Copyright (C) 2013-2020 FOSS GP Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -40,7 +40,7 @@ SourceFiles #define adjointOutletNuaTildaFluxFvPatchScalarField_H #include "fixedValueFvPatchFields.H" -#include "adjointBoundaryCondition.H" +#include "adjointBoundaryConditions.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -54,7 +54,7 @@ namespace Foam class adjointOutletNuaTildaFluxFvPatchScalarField : public fixedValueFvPatchScalarField, - public adjointBoundaryCondition + public adjointScalarBoundaryCondition { public: diff --git a/tutorials/incompressible/adjointOptimisationFoam/sensitivityMaps/sbend/turbulent/highRe/constant/dynamicMeshDict b/tutorials/incompressible/adjointOptimisationFoam/sensitivityMaps/sbend/turbulent/highRe/constant/dynamicMeshDict deleted file mode 100644 index a82e4e41baef91a7b1e183d76471fb35b5a3327a..0000000000000000000000000000000000000000 --- a/tutorials/incompressible/adjointOptimisationFoam/sensitivityMaps/sbend/turbulent/highRe/constant/dynamicMeshDict +++ /dev/null @@ -1,49 +0,0 @@ -/*--------------------------------*- 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 -{ - controlBoxes (duct); - duct - { - name 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) ); - } -} - -// ************************************************************************* // diff --git a/tutorials/incompressible/adjointOptimisationFoam/sensitivityMaps/sbend/turbulent/lowRe/multiPoint/constant/dynamicMeshDict b/tutorials/incompressible/adjointOptimisationFoam/sensitivityMaps/sbend/turbulent/lowRe/multiPoint/constant/dynamicMeshDict deleted file mode 100644 index a82e4e41baef91a7b1e183d76471fb35b5a3327a..0000000000000000000000000000000000000000 --- a/tutorials/incompressible/adjointOptimisationFoam/sensitivityMaps/sbend/turbulent/lowRe/multiPoint/constant/dynamicMeshDict +++ /dev/null @@ -1,49 +0,0 @@ -/*--------------------------------*- 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 -{ - controlBoxes (duct); - duct - { - name 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) ); - } -} - -// ************************************************************************* // diff --git a/tutorials/incompressible/adjointOptimisationFoam/sensitivityMaps/sbend/turbulent/lowRe/singlePoint/constant/dynamicMeshDict b/tutorials/incompressible/adjointOptimisationFoam/sensitivityMaps/sbend/turbulent/lowRe/singlePoint/constant/dynamicMeshDict deleted file mode 100644 index a82e4e41baef91a7b1e183d76471fb35b5a3327a..0000000000000000000000000000000000000000 --- a/tutorials/incompressible/adjointOptimisationFoam/sensitivityMaps/sbend/turbulent/lowRe/singlePoint/constant/dynamicMeshDict +++ /dev/null @@ -1,49 +0,0 @@ -/*--------------------------------*- 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 -{ - controlBoxes (duct); - duct - { - name 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) ); - } -} - -// ************************************************************************* // diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/motorBike/Allrun b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/motorBike/Allrun index a8c290b238f0d07bba0837b6906e97b2e16a5e52..8ebaeb27956bd8713b8b0def6b25f6640b86f865 100755 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/motorBike/Allrun +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/motorBike/Allrun @@ -39,7 +39,6 @@ runParallel $decompDict patchSummary runParallel $decompDict potentialFoam runParallel $decompDict checkMesh -writeFields '(nonOrthoAngle)' -constant -runParallel $decompDict writeActiveDesignVariables runParallel $decompDict $(getApplication) runParallel $decompDict cumulativeDisplacement diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/motorBike/constant/dynamicMeshDict b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/motorBike/constant/dynamicMeshDict index c78d98c798094c3ab6b786efeb9802baf68ed9c5..c04def7f36bac3f181039a0882932ba643b665f1 100644 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/motorBike/constant/dynamicMeshDict +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/motorBike/constant/dynamicMeshDict @@ -30,17 +30,17 @@ volumetricBSplinesMotionSolverCoeffs controlPointsDefinition fromFile; - confineX1movement false; - confineX2movement false; - confineX3movement false; + confineUMovement false; + confineVMovement false; + confineWMovement false; confineBoundaryControlPoints false; - boundUMinCPs ( (true true true) (true true true) ); - boundUMaxCPs ( (true true true) ); - boundVMinCPs ( (true true true) (true true true) ); - boundVMaxCPs ( (true true true) (true true true) ); - boundWMinCPs ( (true true true) ); - boundWMaxCPs ( (true true true) (true true true) ); + confineUMinCPs ( (true true true) (true true true) ); + confineUMaxCPs ( (true true true) ); + confineVMinCPs ( (true true true) (true true true) ); + confineVMaxCPs ( (true true true) (true true true) ); + confineWMinCPs ( (true true true) ); + confineWMaxCPs ( (true true true) (true true true) ); } } diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/naca0012/lift/opt/constraintProjection/constant/dynamicMeshDict b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/naca0012/lift/opt/constraintProjection/constant/dynamicMeshDict index bccb4d7660b821a4db20a18c5f08d2f676a8f68c..39447ce1c85a8416a15269977949eb4f63534de1 100644 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/naca0012/lift/opt/constraintProjection/constant/dynamicMeshDict +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/naca0012/lift/opt/constraintProjection/constant/dynamicMeshDict @@ -32,15 +32,15 @@ volumetricBSplinesMotionSolverCoeffs lowerCpBounds ( 0.1 -0.25 -0.1); upperCpBounds ( 0.9 0.25 1.1); - confineX1movement false; - confineX2movement false; - confineX3movement true; + confineUMovement false; + confineVMovement false; + confineWMovement true; confineBoundaryControlPoints true; - boundUMinCPs ( (true true true) (true true true) ); - boundUMaxCPs ( (true true true) (true true true) ); - boundVMinCPs ( (true true true) ); - boundVMaxCPs ( (true true true) ); + confineUMinCPs ( (true true true) (true true true) ); + confineUMaxCPs ( (true true true) (true true true) ); + confineVMinCPs ( (true true true) ); + confineVMaxCPs ( (true true true) ); } } diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/constrained/SQP/Allrun b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/constrained/SQP/Allrun index 1c5e7996bd44d365917196c26aeb1394a7e6175d..6a63e36ffb520f7090d4d0a6f7e1ec1b82a00c56 100755 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/constrained/SQP/Allrun +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/constrained/SQP/Allrun @@ -7,7 +7,6 @@ resourcesDir=$FOAM_TUTORIALS/incompressible/adjointOptimisationFoam/resources \cp -r $resourcesDir/meshes/sbend/polyMesh constant runApplication decomposePar -runParallel writeActiveDesignVariables runParallel $(getApplication) runParallel cumulativeDisplacement diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/constrained/SQP/constant/dynamicMeshDict b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/constrained/SQP/constant/dynamicMeshDict index 97e98a99d3cab48d412fa079065e3554a9d49d4a..1d2bc04f8ffb8d23dfd52902f6cdce10d03e97a6 100644 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/constrained/SQP/constant/dynamicMeshDict +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/constrained/SQP/constant/dynamicMeshDict @@ -32,15 +32,15 @@ volumetricBSplinesMotionSolverCoeffs lowerCpBounds (-1.1 -0.21 -0.05); upperCpBounds ( 1.1 0.39 0.15); - confineX1movement false; - confineX2movement false; - confineX3movement true; + confineUMovement false; + confineVMovement false; + confineWMovement 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) ); + confineUMinCPs ( (true true true) (true true true) ); + confineUMaxCPs ( (true true true) (true true true) ); + confineWMinCPs ( (true true true) ); + confineWMaxCPs ( (true true true) ); } } diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/unconstrained/BFGS/Allrun b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/unconstrained/BFGS/Allrun index 1c5e7996bd44d365917196c26aeb1394a7e6175d..6a63e36ffb520f7090d4d0a6f7e1ec1b82a00c56 100755 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/unconstrained/BFGS/Allrun +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/unconstrained/BFGS/Allrun @@ -7,7 +7,6 @@ resourcesDir=$FOAM_TUTORIALS/incompressible/adjointOptimisationFoam/resources \cp -r $resourcesDir/meshes/sbend/polyMesh constant runApplication decomposePar -runParallel writeActiveDesignVariables runParallel $(getApplication) runParallel cumulativeDisplacement diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/unconstrained/BFGS/constant/dynamicMeshDict b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/unconstrained/BFGS/constant/dynamicMeshDict index 97e98a99d3cab48d412fa079065e3554a9d49d4a..1d2bc04f8ffb8d23dfd52902f6cdce10d03e97a6 100644 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/unconstrained/BFGS/constant/dynamicMeshDict +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/unconstrained/BFGS/constant/dynamicMeshDict @@ -32,15 +32,15 @@ volumetricBSplinesMotionSolverCoeffs lowerCpBounds (-1.1 -0.21 -0.05); upperCpBounds ( 1.1 0.39 0.15); - confineX1movement false; - confineX2movement false; - confineX3movement true; + confineUMovement false; + confineVMovement false; + confineWMovement 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) ); + confineUMinCPs ( (true true true) (true true true) ); + confineUMaxCPs ( (true true true) (true true true) ); + confineWMinCPs ( (true true true) ); + confineWMaxCPs ( (true true true) ); } } diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/unconstrained/SD/constant/dynamicMeshDict b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/unconstrained/SD/constant/dynamicMeshDict index 97e98a99d3cab48d412fa079065e3554a9d49d4a..1d2bc04f8ffb8d23dfd52902f6cdce10d03e97a6 100644 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/unconstrained/SD/constant/dynamicMeshDict +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/unconstrained/SD/constant/dynamicMeshDict @@ -32,15 +32,15 @@ volumetricBSplinesMotionSolverCoeffs lowerCpBounds (-1.1 -0.21 -0.05); upperCpBounds ( 1.1 0.39 0.15); - confineX1movement false; - confineX2movement false; - confineX3movement true; + confineUMovement false; + confineVMovement false; + confineWMovement 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) ); + confineUMinCPs ( (true true true) (true true true) ); + confineUMaxCPs ( (true true true) (true true true) ); + confineWMinCPs ( (true true true) ); + confineWMaxCPs ( (true true true) ); } } diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/primalAdjoint/constant/dynamicMeshDict b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/primalAdjoint/constant/dynamicMeshDict index 97e98a99d3cab48d412fa079065e3554a9d49d4a..1d2bc04f8ffb8d23dfd52902f6cdce10d03e97a6 100644 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/primalAdjoint/constant/dynamicMeshDict +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/primalAdjoint/constant/dynamicMeshDict @@ -32,15 +32,15 @@ volumetricBSplinesMotionSolverCoeffs lowerCpBounds (-1.1 -0.21 -0.05); upperCpBounds ( 1.1 0.39 0.15); - confineX1movement false; - confineX2movement false; - confineX3movement true; + confineUMovement false; + confineVMovement false; + confineWMovement 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) ); + confineUMinCPs ( (true true true) (true true true) ); + confineUMaxCPs ( (true true true) (true true true) ); + confineWMinCPs ( (true true true) ); + confineWMaxCPs ( (true true true) ); } } diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS-continuation/constant/dynamicMeshDict b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS-continuation/constant/dynamicMeshDict index 97e98a99d3cab48d412fa079065e3554a9d49d4a..1d2bc04f8ffb8d23dfd52902f6cdce10d03e97a6 100644 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS-continuation/constant/dynamicMeshDict +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS-continuation/constant/dynamicMeshDict @@ -32,15 +32,15 @@ volumetricBSplinesMotionSolverCoeffs lowerCpBounds (-1.1 -0.21 -0.05); upperCpBounds ( 1.1 0.39 0.15); - confineX1movement false; - confineX2movement false; - confineX3movement true; + confineUMovement false; + confineVMovement false; + confineWMovement 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) ); + confineUMinCPs ( (true true true) (true true true) ); + confineUMaxCPs ( (true true true) (true true true) ); + confineWMinCPs ( (true true true) ); + confineWMaxCPs ( (true true true) ); } } diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/multiPoint/Allrun b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/multiPoint/Allrun index 1c5e7996bd44d365917196c26aeb1394a7e6175d..6a63e36ffb520f7090d4d0a6f7e1ec1b82a00c56 100755 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/multiPoint/Allrun +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/multiPoint/Allrun @@ -7,7 +7,6 @@ resourcesDir=$FOAM_TUTORIALS/incompressible/adjointOptimisationFoam/resources \cp -r $resourcesDir/meshes/sbend/polyMesh constant runApplication decomposePar -runParallel writeActiveDesignVariables runParallel $(getApplication) runParallel cumulativeDisplacement diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/multiPoint/constant/dynamicMeshDict b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/multiPoint/constant/dynamicMeshDict index 97e98a99d3cab48d412fa079065e3554a9d49d4a..1d2bc04f8ffb8d23dfd52902f6cdce10d03e97a6 100644 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/multiPoint/constant/dynamicMeshDict +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/multiPoint/constant/dynamicMeshDict @@ -32,15 +32,15 @@ volumetricBSplinesMotionSolverCoeffs lowerCpBounds (-1.1 -0.21 -0.05); upperCpBounds ( 1.1 0.39 0.15); - confineX1movement false; - confineX2movement false; - confineX3movement true; + confineUMovement false; + confineVMovement false; + confineWMovement 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) ); + confineUMinCPs ( (true true true) (true true true) ); + confineUMaxCPs ( (true true true) (true true true) ); + confineWMinCPs ( (true true true) ); + confineWMaxCPs ( (true true true) ); } } diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/op1/Allrun b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/op1/Allrun index 1c5e7996bd44d365917196c26aeb1394a7e6175d..6a63e36ffb520f7090d4d0a6f7e1ec1b82a00c56 100755 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/op1/Allrun +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/op1/Allrun @@ -7,7 +7,6 @@ resourcesDir=$FOAM_TUTORIALS/incompressible/adjointOptimisationFoam/resources \cp -r $resourcesDir/meshes/sbend/polyMesh constant runApplication decomposePar -runParallel writeActiveDesignVariables runParallel $(getApplication) runParallel cumulativeDisplacement diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/op1/constant/dynamicMeshDict b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/op1/constant/dynamicMeshDict index 97e98a99d3cab48d412fa079065e3554a9d49d4a..1d2bc04f8ffb8d23dfd52902f6cdce10d03e97a6 100644 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/op1/constant/dynamicMeshDict +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/op1/constant/dynamicMeshDict @@ -32,15 +32,15 @@ volumetricBSplinesMotionSolverCoeffs lowerCpBounds (-1.1 -0.21 -0.05); upperCpBounds ( 1.1 0.39 0.15); - confineX1movement false; - confineX2movement false; - confineX3movement true; + confineUMovement false; + confineVMovement false; + confineWMovement 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) ); + confineUMinCPs ( (true true true) (true true true) ); + confineUMaxCPs ( (true true true) (true true true) ); + confineWMinCPs ( (true true true) ); + confineWMaxCPs ( (true true true) ); } } diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/op2/Allrun b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/op2/Allrun index 1c5e7996bd44d365917196c26aeb1394a7e6175d..6a63e36ffb520f7090d4d0a6f7e1ec1b82a00c56 100755 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/op2/Allrun +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/op2/Allrun @@ -7,7 +7,6 @@ resourcesDir=$FOAM_TUTORIALS/incompressible/adjointOptimisationFoam/resources \cp -r $resourcesDir/meshes/sbend/polyMesh constant runApplication decomposePar -runParallel writeActiveDesignVariables runParallel $(getApplication) runParallel cumulativeDisplacement diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/op2/constant/dynamicMeshDict b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/op2/constant/dynamicMeshDict index 97e98a99d3cab48d412fa079065e3554a9d49d4a..1d2bc04f8ffb8d23dfd52902f6cdce10d03e97a6 100644 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/op2/constant/dynamicMeshDict +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/opt/BFGS/op2/constant/dynamicMeshDict @@ -32,15 +32,15 @@ volumetricBSplinesMotionSolverCoeffs lowerCpBounds (-1.1 -0.21 -0.05); upperCpBounds ( 1.1 0.39 0.15); - confineX1movement false; - confineX2movement false; - confineX3movement true; + confineUMovement false; + confineVMovement false; + confineWMovement 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) ); + confineUMinCPs ( (true true true) (true true true) ); + confineUMaxCPs ( (true true true) (true true true) ); + confineWMinCPs ( (true true true) ); + confineWMaxCPs ( (true true true) ); } } diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/primalAdjoint/constant/dynamicMeshDict b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/primalAdjoint/constant/dynamicMeshDict index 97e98a99d3cab48d412fa079065e3554a9d49d4a..1d2bc04f8ffb8d23dfd52902f6cdce10d03e97a6 100644 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/primalAdjoint/constant/dynamicMeshDict +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/primalAdjoint/constant/dynamicMeshDict @@ -32,15 +32,15 @@ volumetricBSplinesMotionSolverCoeffs lowerCpBounds (-1.1 -0.21 -0.05); upperCpBounds ( 1.1 0.39 0.15); - confineX1movement false; - confineX2movement false; - confineX3movement true; + confineUMovement false; + confineVMovement false; + confineWMovement 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) ); + confineUMinCPs ( (true true true) (true true true) ); + confineUMaxCPs ( (true true true) (true true true) ); + confineWMinCPs ( (true true true) ); + confineWMaxCPs ( (true true true) ); } } diff --git a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/primalAdjointFullSetup/constant/dynamicMeshDict b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/primalAdjointFullSetup/constant/dynamicMeshDict index 97e98a99d3cab48d412fa079065e3554a9d49d4a..1d2bc04f8ffb8d23dfd52902f6cdce10d03e97a6 100644 --- a/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/primalAdjointFullSetup/constant/dynamicMeshDict +++ b/tutorials/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/primalAdjointFullSetup/constant/dynamicMeshDict @@ -32,15 +32,15 @@ volumetricBSplinesMotionSolverCoeffs lowerCpBounds (-1.1 -0.21 -0.05); upperCpBounds ( 1.1 0.39 0.15); - confineX1movement false; - confineX2movement false; - confineX3movement true; + confineUMovement false; + confineVMovement false; + confineWMovement 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) ); + confineUMinCPs ( (true true true) (true true true) ); + confineUMaxCPs ( (true true true) (true true true) ); + confineWMinCPs ( (true true true) ); + confineWMaxCPs ( (true true true) ); } }