diff --git a/blast/src/blAdjoint.cpp b/blast/src/blAdjoint.cpp index 64a592cb6a97768eaf7a3e27c9121aefe8004f5d..3ca118bf7afe7cb9756e258916d79ba8cc11fcf6 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 82a39b6cb8e43fc903aef97d0d91ca4bba6dee1e..92283294730aecfa3406956dd1ef72ecc6bbb824 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());