@@ -301,78 +301,85 @@ void CIncNSSolver::Compute_Streamwise_Periodic_Recovered_Values(CConfig *config,
301301void CIncNSSolver::Viscous_Residual (unsigned long iEdge, CGeometry *geometry, CSolver **solver_container,
302302 CNumerics *numerics, CConfig *config) {
303303 const bool energy_multicomponent = ((config->GetKind_FluidModel () == FLUID_MIXTURE) && config->GetEnergy_Equation ());
304- const bool implicit = (config->GetKind_TimeIntScheme () == EULER_IMPLICIT);
305304
306305 /* --- Contribution to heat flux due to enthalpy diffusion for multicomponent and reacting flows ---*/
307306 if (energy_multicomponent) {
308- CVariable* speciesNodes = solver_container[SPECIES_SOL]->GetNodes ();
309- /* --- Points in edge ---*/
310-
311- auto iPoint = geometry->edges ->GetNode (iEdge, 0 );
312- auto jPoint = geometry->edges ->GetNode (iEdge, 1 );
313-
314- /* --- Points coordinates, and normal vector ---*/
315-
316- const su2double* Normal = geometry->edges ->GetNormal (iEdge);
317- const su2double* Coord_i = geometry->nodes ->GetCoord (iPoint);
318- const su2double* Coord_j = geometry->nodes ->GetCoord (jPoint);
319-
320- /* --- Obtain fluid model for computing the enthalpy diffusion terms. ---*/
321-
322- CFluidModel* FluidModel = solver_container[FLOW_SOL]->GetFluidModel ();
323-
324- /* --- retrieve number of species that are solved and set maximum static array ---*/
325-
326- int n_species = config->GetnSpecies ();
327- static constexpr size_t MAXNVAR_SPECIES = 20UL ;
328-
329- /* --- Species variables, and its gradients ---*/
330- const su2double* Species_i = speciesNodes->GetSolution (iPoint);
331- const su2double* Species_j = speciesNodes->GetSolution (jPoint);
332- CMatrixView<const su2double> Species_Grad_i = speciesNodes->GetGradient (iPoint);
333- CMatrixView<const su2double> Species_Grad_j = speciesNodes->GetGradient (jPoint);
334-
335- /* --- Compute Projected gradient for species variables ---*/
336- su2double ProjGradScalarVarNoCorr[MAXNVAR_SPECIES]{0.0 };
337- su2double Proj_Mean_GradScalarVar[MAXNVAR_SPECIES]{0.0 };
338- su2double proj_vector_ij = numerics->ComputeProjectedGradient (
339- nDim, n_species, Normal, Coord_i, Coord_j, Species_Grad_i, Species_Grad_j, true , Species_i, Species_j,
340- ProjGradScalarVarNoCorr, Proj_Mean_GradScalarVar);
341- (void )proj_vector_ij;
342-
343- /* --- Get enthalpy diffusion terms and its gradient(for implicit) for each species at point i. ---*/
344-
345- su2double EnthalpyDiffusion_i[MAXNVAR_SPECIES]{0.0 };
346- su2double GradEnthalpyDiffusion_i[MAXNVAR_SPECIES]{0.0 };
347- FluidModel->SetTDState_T (nodes->GetPrimitive (iPoint)[prim_idx.Temperature ()], Species_i);
348- FluidModel->GetEnthalpyDiffusivity (EnthalpyDiffusion_i);
349- if (implicit) FluidModel->GetGradEnthalpyDiffusivity (GradEnthalpyDiffusion_i);
350-
351- /* --- Repeat the above computations for jPoint. ---*/
352-
353- su2double EnthalpyDiffusion_j[MAXNVAR_SPECIES]{0.0 };
354- su2double GradEnthalpyDiffusion_j[MAXNVAR_SPECIES]{0.0 };
355- FluidModel->SetTDState_T (nodes->GetPrimitive (jPoint)[prim_idx.Temperature ()], Species_j);
356- FluidModel->GetEnthalpyDiffusivity (EnthalpyDiffusion_j);
357- if (implicit) FluidModel->GetGradEnthalpyDiffusivity (GradEnthalpyDiffusion_j);
358-
359- /* --- Compute Enthalpy diffusion flux and its jacobian (for implicit iterations) ---*/
360- su2double flux_enthalpy_diffusion = 0.0 ;
361- su2double jac_flux_enthalpy_diffusion = 0.0 ;
362- for (int i_species = 0 ; i_species < n_species; i_species++) {
363- flux_enthalpy_diffusion +=
364- 0.5 * (EnthalpyDiffusion_i[i_species] + EnthalpyDiffusion_j[i_species]) * Proj_Mean_GradScalarVar[i_species];
365- if (implicit)
366- jac_flux_enthalpy_diffusion += 0.5 * (GradEnthalpyDiffusion_i[i_species] + GradEnthalpyDiffusion_j[i_species]) *
367- Proj_Mean_GradScalarVar[i_species];
368- }
307+ const bool implicit = (config->GetKind_TimeIntScheme () == EULER_IMPLICIT);
308+ const int n_species = config->GetnSpecies ();
309+ ComputeEnthalpyDiffusion (iEdge, geometry, solver_container, numerics, n_species, implicit);
310+ }
311+
312+ Viscous_Residual_impl (iEdge, geometry, solver_container, numerics, config);
313+ }
314+
315+ void CIncNSSolver::ComputeEnthalpyDiffusion (unsigned long iEdge, CGeometry* geometry, CSolver** solver_container,
316+ CNumerics* numerics, const int n_species, const bool implicit) {
317+
318+ CVariable* speciesNodes = solver_container[SPECIES_SOL]->GetNodes ();
319+ /* --- Points in edge ---*/
320+
321+ auto iPoint = geometry->edges ->GetNode (iEdge, 0 );
322+ auto jPoint = geometry->edges ->GetNode (iEdge, 1 );
323+
324+ /* --- Points coordinates, and normal vector ---*/
325+
326+ const su2double* Normal = geometry->edges ->GetNormal (iEdge);
327+ const su2double* Coord_i = geometry->nodes ->GetCoord (iPoint);
328+ const su2double* Coord_j = geometry->nodes ->GetCoord (jPoint);
329+
330+ /* --- Obtain fluid model for computing the enthalpy diffusion terms. ---*/
369331
370- /* --- Set heat flux and jacobian (for implicit) due to enthalpy diffusion --- */
332+ CFluidModel* FluidModel = solver_container[FLOW_SOL]-> GetFluidModel ();
371333
372- numerics->SetHeatFluxDiffusion (flux_enthalpy_diffusion);
373- if (implicit) numerics->SetJacHeatFluxDiffusion (jac_flux_enthalpy_diffusion);
334+ /* --- set maximum static array ---*/
335+
336+ static constexpr size_t MAXNVAR_SPECIES = 20UL ;
337+
338+ /* --- Species variables, and its gradients ---*/
339+ const su2double* Species_i = speciesNodes->GetSolution (iPoint);
340+ const su2double* Species_j = speciesNodes->GetSolution (jPoint);
341+ CMatrixView<const su2double> Species_Grad_i = speciesNodes->GetGradient (iPoint);
342+ CMatrixView<const su2double> Species_Grad_j = speciesNodes->GetGradient (jPoint);
343+
344+ /* --- Compute Projected gradient for species variables ---*/
345+ su2double ProjGradScalarVarNoCorr[MAXNVAR_SPECIES]{0.0 };
346+ su2double Proj_Mean_GradScalarVar[MAXNVAR_SPECIES]{0.0 };
347+ su2double proj_vector_ij =
348+ numerics->ComputeProjectedGradient (nDim, n_species, Normal, Coord_i, Coord_j, Species_Grad_i, Species_Grad_j,
349+ true , Species_i, Species_j, ProjGradScalarVarNoCorr, Proj_Mean_GradScalarVar);
350+ (void )proj_vector_ij;
351+
352+ /* --- Get enthalpy diffusion terms and its gradient(for implicit) for each species at point i. ---*/
353+
354+ su2double EnthalpyDiffusion_i[MAXNVAR_SPECIES]{0.0 };
355+ su2double GradEnthalpyDiffusion_i[MAXNVAR_SPECIES]{0.0 };
356+ FluidModel->SetTDState_T (nodes->GetPrimitive (iPoint)[prim_idx.Temperature ()], Species_i);
357+ FluidModel->GetEnthalpyDiffusivity (EnthalpyDiffusion_i);
358+ if (implicit) FluidModel->GetGradEnthalpyDiffusivity (GradEnthalpyDiffusion_i);
359+
360+ /* --- Repeat the above computations for jPoint. ---*/
361+
362+ su2double EnthalpyDiffusion_j[MAXNVAR_SPECIES]{0.0 };
363+ su2double GradEnthalpyDiffusion_j[MAXNVAR_SPECIES]{0.0 };
364+ FluidModel->SetTDState_T (nodes->GetPrimitive (jPoint)[prim_idx.Temperature ()], Species_j);
365+ FluidModel->GetEnthalpyDiffusivity (EnthalpyDiffusion_j);
366+ if (implicit) FluidModel->GetGradEnthalpyDiffusivity (GradEnthalpyDiffusion_j);
367+
368+ /* --- Compute Enthalpy diffusion flux and its jacobian (for implicit iterations) ---*/
369+ su2double flux_enthalpy_diffusion = 0.0 ;
370+ su2double jac_flux_enthalpy_diffusion = 0.0 ;
371+ for (int i_species = 0 ; i_species < n_species; i_species++) {
372+ flux_enthalpy_diffusion +=
373+ 0.5 * (EnthalpyDiffusion_i[i_species] + EnthalpyDiffusion_j[i_species]) * Proj_Mean_GradScalarVar[i_species];
374+ if (implicit)
375+ jac_flux_enthalpy_diffusion += 0.5 * (GradEnthalpyDiffusion_i[i_species] + GradEnthalpyDiffusion_j[i_species]) *
376+ Proj_Mean_GradScalarVar[i_species];
374377 }
375- Viscous_Residual_impl (iEdge, geometry, solver_container, numerics, config);
378+
379+ /* --- Set heat flux and jacobian (for implicit) due to enthalpy diffusion ---*/
380+
381+ numerics->SetHeatFluxDiffusion (flux_enthalpy_diffusion);
382+ if (implicit) numerics->SetJacHeatFluxDiffusion (jac_flux_enthalpy_diffusion);
376383}
377384
378385unsigned long CIncNSSolver::SetPrimitive_Variables (CSolver **solver_container, const CConfig *config) {
0 commit comments