@@ -301,9 +301,45 @@ void CTurbSASolver::Viscous_Residual(const unsigned long iEdge, const CGeometry*
301301 };
302302
303303 /* --- Now instantiate the generic implementation with the functor above. ---*/
304+ const bool implicit = (config->GetKind_TimeIntScheme () == EULER_IMPLICIT);
305+ CFlowVariable* flowNodes = solver_container[FLOW_SOL] ?
306+ su2staticcast_p<CFlowVariable*>(solver_container[FLOW_SOL]->GetNodes ()) : nullptr ;
304307
305- Viscous_Residual_impl (SolverSpecificNumerics, iEdge, geometry, solver_container, numerics, config);
306- }
308+ /* --- Points in edge ---*/
309+ auto iPoint = geometry->edges ->GetNode (iEdge, 0 );
310+ auto jPoint = geometry->edges ->GetNode (iEdge, 1 );
311+
312+ /* --- Points coordinates, and normal vector ---*/
313+ numerics->SetCoord (geometry->nodes ->GetCoord (iPoint), geometry->nodes ->GetCoord (jPoint));
314+ numerics->SetNormal (geometry->edges ->GetNormal (iEdge));
315+
316+ /* --- Conservative variables w/o reconstruction ---*/
317+ if (flowNodes) {
318+ numerics->SetPrimitive (flowNodes->GetPrimitive (iPoint), flowNodes->GetPrimitive (jPoint));
319+ }
320+
321+ /* --- Turbulent variables w/o reconstruction, and its gradients ---*/
322+ numerics->SetScalarVar (nodes->GetSolution (iPoint), nodes->GetSolution (jPoint));
323+ numerics->SetScalarVarGradient (nodes->GetGradient (iPoint), nodes->GetGradient (jPoint));
324+
325+ /* --- Call Numerics contribution which are Solver-Specifc. Implemented in the caller: Viscous_Residual. ---*/
326+ SolverSpecificNumerics (iPoint, jPoint);
327+
328+ /* --- Compute residual, and Jacobians ---*/
329+ numerics->ComputeResidual (Residual_i, Residual_j, Jacobian_ii, Jacobian_ij, Jacobian_ji, Jacobian_jj, const_cast <CConfig*>(config));
330+
331+ /* --- Accumulate residuals ---*/
332+ LinSysRes.AddBlock (iPoint, Residual_i);
333+ LinSysRes.AddBlock (jPoint, Residual_j);
334+
335+ /* --- Implicit Jacobian contributions ---*/
336+ if (implicit) {
337+ Jacobian.AddBlock2Diag (iPoint, Jacobian_ii);
338+ Jacobian.AddBlock (iPoint, jPoint, Jacobian_ij);
339+ Jacobian.AddBlock (jPoint, iPoint, Jacobian_ji);
340+ Jacobian.AddBlock2Diag (jPoint, Jacobian_jj);
341+ }
342+ };
307343
308344void CTurbSASolver::Source_Residual (CGeometry *geometry, CSolver **solver_container,
309345 CNumerics **numerics_container, CConfig *config, unsigned short iMesh) {
0 commit comments