From 3b949b66ffc32f307168135da13056ba98217ac8 Mon Sep 17 00:00:00 2001 From: Vaggelis Papoutsis Date: Thu, 10 Sep 2020 19:25:44 +0300 Subject: [PATCH 1/3] BUG: collated format and writing of NURBS3DVolume CPs - see #1947 The if(Pstream::master()) clause in NURBS3DVolume::writeCpsInDict() was causing the fileName of the regIOobject not to be allocated in all processors, giving problems when masterUncollatedFileOperation::masterOp was called by collatedFileOperation::writeObject for the mkDirOp. --- .../NURBS3DVolume/NURBS3DVolume.C | 41 +++++++++---------- 1 file changed, 19 insertions(+), 22 deletions(-) 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 f8396174de..4d5f80d64e 100644 --- a/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolume.C +++ b/src/optimisation/adjointOptimisation/adjoint/parameterization/NURBS/NURBS3DVolume/NURBS3DVolume/NURBS3DVolume.C @@ -1912,31 +1912,28 @@ void Foam::NURBS3DVolume::writeCps(const fileName& baseName) const void Foam::NURBS3DVolume::writeCpsInDict() const { - if (Pstream::master()) - { - IOdictionary cpsDict + IOdictionary cpsDict + ( + IOobject ( - IOobject - ( - name_ + "cpsBsplines" + mesh_.time().timeName(), - mesh_.time().caseConstant(), - cpsFolder_, - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE, - false - ) - ); + name_ + "cpsBsplines" + mesh_.time().timeName(), + mesh_.time().caseConstant(), + cpsFolder_, + mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ) + ); - cpsDict.add("controlPoints", cps_); + cpsDict.add("controlPoints", cps_); - // Always write in ASCII, but allow compression - cpsDict.regIOobject::writeObject - ( - IOstreamOption(IOstream::ASCII, mesh_.time().writeCompression()), - true - ); - } + // Always write in ASCII, but allow compression + cpsDict.regIOobject::writeObject + ( + IOstreamOption(IOstream::ASCII, mesh_.time().writeCompression()), + true + ); } From 2eae536a70b8308ab81f467cdb2b10d59f822af9 Mon Sep 17 00:00:00 2001 From: Vaggelis Papoutsis Date: Fri, 16 Oct 2020 13:50:01 +0300 Subject: [PATCH 2/3] BUG: Wrong First extrapolated value of the merit function (fixes #1948) Affected only the first optimisation cycle, if line search was enabled If eta was not set explicitly, it was computed after evaluating the directional derivative of the merit function, which was computed wrongly, leading to an erroneous value of the extrapolated merit function value. --- .../optimisationType/optimisationTypeIncompressible.C | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 06b2de5394..6d0e54aa75 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/optimisationType/optimisationTypeIncompressible.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/optimisationType/incompressible/optimisationType/optimisationTypeIncompressible.C @@ -175,9 +175,6 @@ void optimisationType::update() void optimisationType::update(scalarField& direction) { - // Compute eta if needed - computeEta(direction); - // Multiply with line search step, if necessary scalarField correction(direction); if (lineSearch_.valid()) @@ -218,6 +215,9 @@ tmp optimisationType::computeDirection() scalarField& correction = tcorrection.ref(); correction = updateMethod_->returnCorrection(); + // Compute eta if needed + computeEta(correction); + return tcorrection; } From 7ffa36dfa9df45353fc71786f41df87663135d78 Mon Sep 17 00:00:00 2001 From: Vaggelis Papoutsis Date: Fri, 16 Oct 2020 14:09:03 +0300 Subject: [PATCH 3/3] BUG: globalSum needed in the merit functions' directional derivative (fixes #1949) Does not affect the current functionality of shape optimisation. --- .../optimisation/updateMethod/updateMethod/updateMethod.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/optimisation/adjointOptimisation/adjoint/optimisation/updateMethod/updateMethod/updateMethod.C b/src/optimisation/adjointOptimisation/adjoint/optimisation/updateMethod/updateMethod/updateMethod.C index 2b9b085119..5c3fef24a9 100644 --- a/src/optimisation/adjointOptimisation/adjoint/optimisation/updateMethod/updateMethod/updateMethod.C +++ b/src/optimisation/adjointOptimisation/adjoint/optimisation/updateMethod/updateMethod/updateMethod.C @@ -376,7 +376,7 @@ Foam::scalar Foam::updateMethod::computeMeritFunction() Foam::scalar Foam::updateMethod::meritFunctionDirectionalDerivative() { - return sum(objectiveDerivatives_*correction_); + return globalSum(objectiveDerivatives_*correction_); }