@@ -335,7 +335,14 @@ void CTurbSASolver::Viscous_Residual(const unsigned long iEdge, const CGeometry*
335335 EdgeFluxes.SubtractBlock (iEdge, residual_ij);
336336 EdgeFluxes_Diff.SetBlock (iEdge, residual_ij);
337337 if (implicit) {
338- Jacobian.UpdateBlocksSub (iEdge, residual_ij.jacobian_i , residual_ij.jacobian_j );
338+ auto * Block_ij = Jacobian.GetBlock (iPoint, jPoint);
339+ auto * Block_ji = Jacobian.GetBlock (jPoint, iPoint);
340+
341+ for (int iVar=0 ; iVar<nVar; iVar++)
342+ for (int jVar=0 ; jVar<nVar; jVar++) {
343+ Block_ij[iVar*nVar + jVar] -= 0.5 *SU2_TYPE::GetValue (residual_ij.jacobian_j [iVar][jVar]);
344+ Block_ji[iVar*nVar + jVar] += 0.5 *SU2_TYPE::GetValue (residual_ij.jacobian_i [iVar][jVar]);
345+ }
339346 }
340347 }
341348 else {
@@ -361,8 +368,15 @@ void CTurbSASolver::Viscous_Residual(const unsigned long iEdge, const CGeometry*
361368 if (ReducerStrategy) {
362369 EdgeFluxes_Diff.AddBlock (iEdge, residual_ji);
363370 if (implicit) {
364- Jacobian.UpdateBlocks (iEdge, residual_ji.jacobian_j , residual_ji.jacobian_i );
365- }
371+ auto * Block_ij = Jacobian.GetBlock (iPoint, jPoint);
372+ auto * Block_ji = Jacobian.GetBlock (jPoint, iPoint);
373+
374+ for (int iVar=0 ; iVar<nVar; iVar++)
375+ for (int jVar=0 ; jVar<nVar; jVar++) {
376+ Block_ij[iVar*nVar + jVar] += 0.5 *SU2_TYPE::GetValue (residual_ji.jacobian_i [iVar][jVar]);
377+ Block_ji[iVar*nVar + jVar] -= 0.5 *SU2_TYPE::GetValue (residual_ji.jacobian_j [iVar][jVar]);
378+ }
379+ }
366380 }
367381 else {
368382 LinSysRes.SubtractBlock (jPoint, residual_ji);
0 commit comments