From 7ceaa92bcc31a00d0e3a983406d54f294d628cd1 Mon Sep 17 00:00:00 2001
From: Thomas Toulorge <thomas.toulorge@mines-paristech.fr>
Date: Mon, 29 Sep 2014 08:32:18 +0000
Subject: [PATCH] Fixed min. metric contribution in new HO optimizer

---
 contrib/HighOrderMeshOptimizer/OptHomObjContribMetricMin.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/contrib/HighOrderMeshOptimizer/OptHomObjContribMetricMin.h b/contrib/HighOrderMeshOptimizer/OptHomObjContribMetricMin.h
index b3b7bb3975..251fbe6c9e 100644
--- a/contrib/HighOrderMeshOptimizer/OptHomObjContribMetricMin.h
+++ b/contrib/HighOrderMeshOptimizer/OptHomObjContribMetricMin.h
@@ -65,9 +65,9 @@ bool ObjContribMetricMin<FuncType>::addContrib(double &Obj, alglib::real_1d_arra
     _mesh->metricMinAndGradients(iEl, mM, gMM);
     for (int l = 0; l < _mesh->nBezEl(iEl); l++) {                                  // Add contribution for each Bezier coeff.
       Obj += _weight * FuncType::compute(mM[l]);
+      const double dfact = _weight * FuncType::computeDiff(mM[l]);
       for (int iPC = 0; iPC < _mesh->nPCEl(iEl); iPC++)
-        gradObj[_mesh->indPCEl(iEl,iPC)] +=
-            _weight * FuncType::computeDiff(mM[l], gMM[_mesh->indGSJ(iEl, l, iPC)]);
+        gradObj[_mesh->indPCEl(iEl,iPC)] += dfact *  gMM[_mesh->indGSJ(iEl, l, iPC)];
       _min = std::min(_min, mM[l]);
       _max = std::max(_max, mM[l]);
     }
-- 
GitLab