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