From f471eace993f1d46e9cbc2a70c4a8c18aac67c60 Mon Sep 17 00:00:00 2001
From: Paul Dechamps <paul.dechamps@uliege.be>
Date: Tue, 25 Mar 2025 18:41:35 +0100
Subject: [PATCH] (fix) Small fix in adjoint

grad Cdf wrt x contributions need to be added
---
 blast/src/blAdjoint.cpp        |  2 +-
 blast/src/blCoupledAdjoint.cpp | 34 ++++++++++++++++------------------
 2 files changed, 17 insertions(+), 19 deletions(-)

diff --git a/blast/src/blAdjoint.cpp b/blast/src/blAdjoint.cpp
index 64a592c..3ca118b 100644
--- a/blast/src/blAdjoint.cpp
+++ b/blast/src/blAdjoint.cpp
@@ -301,7 +301,7 @@ void blAdjoint::evaluate(std::map<std::string, Eigen::SparseMatrix<double, Eigen
                     for (int idim = 0; idim < ndim; idim++)
                     {
                         double gradx = region->nodes[inode]->pos[idim].getGradient();
-                        vectorMap["dCdf_x"]->coeffRef(rowj * ndim + idim) = gradx;
+                        vectorMap["dCdf_x"]->coeffRef(rowj * ndim + idim) += gradx;
                     }
                     kk++;
                 }
diff --git a/blast/src/blCoupledAdjoint.cpp b/blast/src/blCoupledAdjoint.cpp
index 82a39b6..9228329 100644
--- a/blast/src/blCoupledAdjoint.cpp
+++ b/blast/src/blCoupledAdjoint.cpp
@@ -414,24 +414,22 @@ void CoupledAdjoint::run()
                      Eigen::Map<Eigen::VectorXd>(rhsCl_x.data(), rhsCl_x.size()),
                      lambdaCl_x_);
 
-    Eigen::VectorXd rhsCd_x = dCdp_x; // Pressure drag coefficient contribution
-    rhsCd_x += dCdf_x;                // Friction drag coefficient contribution
-    rhsCd_x -=
-        dRphi_x.transpose() *
-        lambdaCd.segment(phiIdx, dRphi_phi.cols()); // Potential contribution
-    rhsCd_x -=
-        dRM_x.transpose() *
-        lambdaCd.segment(machIdx, dRM_M.cols()); // Mach number contribution
-    rhsCd_x -= dRrho_x.transpose() *
-               lambdaCd.segment(rhoIdx, dRrho_rho.cols()); // Density contribution
-    rhsCd_x -= dRv_x.transpose() *
-               lambdaCd.segment(vIdx, dRv_v.cols()); // Velocity contribution
-    rhsCd_x -= dRdStar_x.transpose() *
-               lambdaCd.segment(
-                   dStarIdx,
-                   dRdStar_dStar.cols()); // Displacement thickness contribution
-    rhsCd_x -= dRblw_x.transpose() *
-               lambdaCd.segment(blwIdx, dRblw_blw.cols()); // Blowing contribution
+    // Pressure drag coefficient contribution (cd partial)
+    Eigen::VectorXd rhsCd_x = dCdp_x;
+    // Friction drag coefficient contribution (cd partial)
+    rhsCd_x += dCdf_x;
+    // Potential contribution
+    rhsCd_x -= dRphi_x.transpose() * lambdaCd.segment(phiIdx, dRphi_phi.cols());
+    // Mach number contribution
+    rhsCd_x -= dRM_x.transpose() * lambdaCd.segment(machIdx, dRM_M.cols());
+    // Density contribution
+    rhsCd_x -= dRrho_x.transpose() * lambdaCd.segment(rhoIdx, dRrho_rho.cols());
+    // Velocity contribution
+    rhsCd_x -= dRv_x.transpose() * lambdaCd.segment(vIdx, dRv_v.cols());
+    // Displacement thickness contribution
+    rhsCd_x -= dRdStar_x.transpose() * lambdaCd.segment(dStarIdx, dRdStar_dStar.cols());
+    // Blowing contribution
+    rhsCd_x -= dRblw_x.transpose() * lambdaCd.segment(blwIdx, dRblw_blw.cols());
 
     Eigen::VectorXd lambdaCd_x =
         Eigen::VectorXd::Zero(isol->pbl->nDim * isol->pbl->msh->nodes.size());
-- 
GitLab