Skip to content

Commit 3148c3a

Browse files
adding function for computing enthalpy due to species diffusion
1 parent ae3ab31 commit 3148c3a

File tree

3 files changed

+89
-69
lines changed

3 files changed

+89
-69
lines changed

SU2_CFD/include/solvers/CIncNSSolver.hpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,19 @@ class CIncNSSolver final : public CIncEulerSolver {
9494
*/
9595
void Compute_Streamwise_Periodic_Recovered_Values(CConfig *config, const CGeometry *geometry,
9696
const unsigned short iMesh);
97+
/*!
98+
* \brief Compute the enthalpy due to species diffusion contribution for multicomponent and reacting flows.
99+
* \param[in] iEdge - Edge for which the flux and Jacobians are to be computed.
100+
* \param[in] geometry - Geometrical definition of the problem.
101+
* \param[in] solver_container - Container vector with all the solutions.
102+
* \param[in] numerics - Description of the numerical method.
103+
* \param[in] n_species - Number of species in the mixture that a transport equation is solved.
104+
* \param[in] implicit - Boolean for implicit iterations.
105+
*/
106+
void ComputeEnthalpyDiffusion(unsigned long iEdge, CGeometry* geometry, CSolver** solver_container, CNumerics* numerics,
107+
const int n_species, const bool implicit) ;
97108

98-
public:
109+
public:
99110
/*!
100111
* \brief Constructor of the class.
101112
* \param[in] geometry - Geometrical definition of the problem.

SU2_CFD/src/solvers/CIncEulerSolver.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1332,8 +1332,10 @@ void CIncEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_cont
13321332
lim_i = LimiterHelpers<>::vanAlbadaFunction(Project_Grad_Enthalpy_i, V_ij, EPS);
13331333
lim_j = LimiterHelpers<>::vanAlbadaFunction(-Project_Grad_Enthalpy_j, V_ij, EPS);
13341334
} else if (limiter) {
1335-
lim_i = 1.0; // nodes->GetLimiter_Primitive(iPoint, iVar);
1336-
lim_j = 1.0; // nodes->GetLimiter_Primitive(jPoint, iVar);
1335+
/*--- For solving enthalpy instead of temperature, computation of limiters must be added
1336+
in future implementation, for now it is limited to van Albada limiter or default value 1.0. ---*/
1337+
lim_i = 1.0;
1338+
lim_j = 1.0;
13371339
}
13381340
Primitive_i[nDim + 9] = V_i[nDim + 9] + lim_i * Project_Grad_Enthalpy_i;
13391341
Primitive_j[nDim + 9] = V_j[nDim + 9] + lim_j * Project_Grad_Enthalpy_j;

SU2_CFD/src/solvers/CIncNSSolver.cpp

Lines changed: 73 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -301,78 +301,85 @@ void CIncNSSolver::Compute_Streamwise_Periodic_Recovered_Values(CConfig *config,
301301
void 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

378385
unsigned long CIncNSSolver::SetPrimitive_Variables(CSolver **solver_container, const CConfig *config) {

0 commit comments

Comments
 (0)