30#include "../CNumerics.hpp"
31#include "../../fluid/CNEMOGas.hpp"
32#include "../../fluid/CMutationTCLib.hpp"
33#include "../../fluid/CSU2TCLib.hpp"
34#include "../../../../Common/include/toolboxes/geometry_toolbox.hpp"
80 CNEMONumerics(
unsigned short val_nDim,
unsigned short val_nVar,
81 unsigned short val_nPrimVar,
82 unsigned short val_nPrimVarGrad,
168 template <
unsigned short NVAR,
unsigned short NSPECIES>
186 constexpr unsigned short nSpeciesDummy = (NSPECIES == 1) ? 2 : NSPECIES;
196 const auto nDim =
nVar - nSpecies - 2;
221 su2double ktr = val_thermal_conductivity;
222 su2double kve = val_thermal_conductivity_ve;
225 const auto& Ds = val_diffusion_coeff;
235 for (
auto iSpecies = 0; iSpecies <
nSpecies; iSpecies++) {
236 Ys[iSpecies] = val_Mean_PrimVar[
RHOS_INDEX+iSpecies];
240 sumY_i += Ds[iSpecies]*theta/dij*Ys_i[iSpecies];
241 sumY_j += Ds[iSpecies]*theta/dij*Ys_j[iSpecies];
242 sumY += Ds[iSpecies]*theta/dij*(Ys_j[iSpecies]-Ys_i[iSpecies]);
246 for (
auto iDim = 0; iDim <
nDim; iDim++)
247 vel[iDim] = val_Mean_PrimVar[
VEL_INDEX+iDim];
249 for (
auto iSpecies = 0; iSpecies <
nSpecies; iSpecies++) {
250 for (
auto jSpecies = 0; jSpecies <
nSpecies; jSpecies++) {
253 dJdr_j[iSpecies][jSpecies] += 0.5*(Ds[iSpecies]*theta/dij *
254 (Ys_j[iSpecies]*rho_i/rho_j +
256 dJdr_i[iSpecies][jSpecies] += -0.5*(Ds[iSpecies]*theta/dij *
258 Ys_i[iSpecies]*rho_j/rho_i));
261 dJdr_j[iSpecies][jSpecies] +=
262 0.25*(Ys_i[iSpecies] - rho_i/rho_j*Ys_j[iSpecies])*sumY
263 + 0.25*(Ys_i[iSpecies]+Ys_j[iSpecies])*(rho_i+rho_j)*Ds[jSpecies]*theta/(dij*rho_j)
264 - 0.25*(Ys_i[iSpecies]+Ys_j[iSpecies])*(rho_i+rho_j)*sumY_j/rho_j;
266 dJdr_i[iSpecies][jSpecies] +=
267 0.25*(-rho_j/rho_i*Ys_i[iSpecies]+Ys_j[iSpecies])*sumY
268 - 0.25*(Ys_i[iSpecies]+Ys_j[iSpecies])*(rho_i+rho_j)*Ds[jSpecies]*theta/(dij*rho_i)
269 + 0.25*(Ys_i[iSpecies]+Ys_j[iSpecies])*(rho_i+rho_j)*sumY_i/rho_i;
273 dJdr_j[iSpecies][iSpecies] += -0.5*Ds[iSpecies]*theta/dij*(1+rho_i/rho_j);
274 dJdr_i[iSpecies][iSpecies] += 0.5*Ds[iSpecies]*theta/dij*(1+rho_j/rho_i);
277 dJdr_j[iSpecies][iSpecies] += 0.25*(1.0+rho_i/rho_j)*sumY;
278 dJdr_i[iSpecies][iSpecies] += 0.25*(1.0+rho_j/rho_i)*sumY;
282 for (
auto iSpecies = 0; iSpecies <
nSpecies; iSpecies++) {
283 dVdUi[iSpecies][iSpecies] = 1.0;
284 dVdUj[iSpecies][iSpecies] = 1.0;
286 for (
auto iDim = 0; iDim <
nDim; iDim++) {
287 for (
auto iSpecies = 0; iSpecies <
nSpecies; iSpecies++) {
294 for (
auto iVar = 0; iVar <
nVar; iVar++) {
304 su2double thetax = theta + val_normal[0]*val_normal[0]/3.0;
305 su2double thetay = theta + val_normal[1]*val_normal[1]/3.0;
306 su2double etaz = val_normal[0]*val_normal[1]/3.0;
307 su2double pix = mu/dij * (thetax*vel[0] + etaz*vel[1] );
308 su2double piy = mu/dij * (etaz*vel[0] + thetay*vel[1]);
329 for (
auto iVar = 0; iVar <
nVar; iVar++)
330 for (
auto jVar = 0; jVar <
nVar; jVar++)
331 dFdVi[iVar][jVar] = -dFdVj[iVar][jVar];
338 for (
auto iSpecies = 0; iSpecies <
nSpecies; iSpecies++) {
343 dFdVi[
nSpecies+2][
nSpecies+3] += 0.5*val_Fv[iSpecies]*val_Mean_Cvve[iSpecies];
344 dFdVj[
nSpecies+2][
nSpecies+3] += 0.5*val_Fv[iSpecies]*val_Mean_Cvve[iSpecies];
345 dFdVi[
nSpecies+3][
nSpecies+3] += 0.5*val_Fv[iSpecies]*val_Mean_Cvve[iSpecies];
346 dFdVj[
nSpecies+3][
nSpecies+3] += 0.5*val_Fv[iSpecies]*val_Mean_Cvve[iSpecies];
350 for (
auto iSpecies = 0; iSpecies <
nSpecies; iSpecies++) {
351 for (
auto jSpecies = 0; jSpecies <
nSpecies; jSpecies++) {
352 dFdVj[iSpecies][jSpecies] += -dJdr_j[iSpecies][jSpecies]*val_dS;
353 dFdVi[iSpecies][jSpecies] += -dJdr_i[iSpecies][jSpecies]*val_dS;
354 dFdVj[
nSpecies+2][iSpecies] += -dJdr_j[jSpecies][iSpecies]*hs[jSpecies]*val_dS;
355 dFdVi[
nSpecies+2][iSpecies] += -dJdr_i[jSpecies][iSpecies]*hs[jSpecies]*val_dS;
356 dFdVj[
nSpecies+3][iSpecies] += -dJdr_j[jSpecies][iSpecies]*val_Mean_Eve[jSpecies]*val_dS;
357 dFdVi[
nSpecies+3][iSpecies] += -dJdr_i[jSpecies][iSpecies]*val_Mean_Eve[jSpecies]*val_dS;
365 su2double thetax = theta + val_normal[0]*val_normal[0]/3.0;
366 su2double thetay = theta + val_normal[1]*val_normal[1]/3.0;
367 su2double thetaz = theta + val_normal[2]*val_normal[2]/3.0;
368 su2double etax = val_normal[1]*val_normal[2]/3.0;
369 su2double etay = val_normal[0]*val_normal[2]/3.0;
370 su2double etaz = val_normal[0]*val_normal[1]/3.0;
371 su2double pix = mu/dij * (thetax*vel[0] + etaz*vel[1] + etay*vel[2] );
372 su2double piy = mu/dij * (etaz*vel[0] + thetay*vel[1] + etax*vel[2] );
373 su2double piz = mu/dij * (etay*vel[0] + etax*vel[1] + thetaz*vel[2]);
402 for (
auto iVar = 0; iVar <
nVar; iVar++)
403 for (
auto jVar = 0; jVar <
nVar; jVar++)
404 dFdVi[iVar][jVar] = -dFdVj[iVar][jVar];
407 for (
auto iDim = 0; iDim <
nDim; iDim++) {
411 for (
auto iSpecies = 0; iSpecies <
nSpecies; iSpecies++) {
416 dFdVi[
nSpecies+3][
nSpecies+4] += 0.5*val_Fv[iSpecies]*val_Mean_Cvve[iSpecies];
417 dFdVj[
nSpecies+3][
nSpecies+4] += 0.5*val_Fv[iSpecies]*val_Mean_Cvve[iSpecies];
418 dFdVi[
nSpecies+4][
nSpecies+4] += 0.5*val_Fv[iSpecies]*val_Mean_Cvve[iSpecies];
419 dFdVj[
nSpecies+4][
nSpecies+4] += 0.5*val_Fv[iSpecies]*val_Mean_Cvve[iSpecies];
423 for (
auto iSpecies = 0; iSpecies <
nSpecies; iSpecies++) {
424 for (
auto jSpecies = 0; jSpecies <
nSpecies; jSpecies++) {
425 dFdVj[iSpecies][jSpecies] += -dJdr_j[iSpecies][jSpecies]*val_dS;
426 dFdVi[iSpecies][jSpecies] += -dJdr_i[iSpecies][jSpecies]*val_dS;
427 dFdVj[
nSpecies+3][iSpecies] += -dJdr_j[jSpecies][iSpecies]*hs[jSpecies]*val_dS;
428 dFdVi[
nSpecies+3][iSpecies] += -dJdr_i[jSpecies][iSpecies]*hs[jSpecies]*val_dS;
429 dFdVj[
nSpecies+4][iSpecies] += -dJdr_j[jSpecies][iSpecies]*val_Mean_Eve[jSpecies]*val_dS;
430 dFdVi[
nSpecies+4][iSpecies] += -dJdr_i[jSpecies][iSpecies]*val_Mean_Eve[jSpecies]*val_dS;
437 for (
auto iVar = 0; iVar <
nVar; iVar++)
438 for (
auto jVar = 0; jVar <
nVar; jVar++)
439 for (
auto kVar = 0; kVar <
nVar; kVar++) {
440 val_Jac_i[iVar][jVar] += dFdVi[iVar][kVar]*dVdUi[kVar][jVar];
441 val_Jac_j[iVar][jVar] += dFdVj[iVar][kVar]*dVdUj[kVar][jVar];
445 template <
int nRows,
int nCols>
A templated matrix/vector-like object.
Definition C2DContainer.hpp:374
C2DContainer & resize(const Index_t size1, const Index_t size2=1) noexcept
Request a change of size.
Definition C2DContainer.hpp:541
Main class for defining the problem; basically this class reads the configuration file,...
Definition CConfig.hpp:64
Class for defining the 2T (trans-rotational and vibro-electronic) nonequilibrium gas model.
Definition CNEMOGas.hpp:38
virtual vector< su2double > & ComputeSpeciesEnthalpy(su2double val_T, su2double val_Tve, su2double *val_eves)=0
Compute species enthalpies.
virtual const vector< su2double > & GetSpeciesCvTraRot()=0
Get species T-R specific heats at constant volume.
virtual const vector< su2double > & GetSpeciesMolarMass()=0
Get species molar mass.
Base class template NEMO numerics.
Definition CNEMONumerics.hpp:41
void GetInviscidProjFlux(const su2double *val_U, const su2double *val_V, const su2double *val_normal, su2double *val_Proj_Flux)
Compute the projected inviscid flux vector.
Definition CNEMONumerics.cpp:83
unsigned short P_INDEX
Definition CNEMONumerics.hpp:66
void SetdTdU(su2double *val_dTdU_i, su2double *val_dTdU_j) final
Set the temperature derivatives.
Definition CNEMONumerics.hpp:493
unsigned short A_INDEX
Definition CNEMONumerics.hpp:67
unsigned short H_INDEX
Definition CNEMONumerics.hpp:67
su2double rhoCvtr_i
Definition CNEMONumerics.hpp:47
su2double rhoCvve_j
Definition CNEMONumerics.hpp:48
su2double * eve_j
Definition CNEMONumerics.hpp:64
unsigned short LAM_VISC_INDEX
Definition CNEMONumerics.hpp:68
su2double * dTvedU_j
Definition CNEMONumerics.hpp:61
su2double Velocity_j[MAXNDIM]
Definition CNEMONumerics.hpp:45
su2double e_ve_i
Definition CNEMONumerics.hpp:46
su2double * Cvve_i
Definition CNEMONumerics.hpp:64
CNEMOGas * fluidmodel
Definition CNEMONumerics.hpp:70
su2double ** Jacobian_i
Definition CNEMONumerics.hpp:53
su2double ProjVelocity_i
Definition CNEMONumerics.hpp:49
unsigned short nPrimVarGrad
Definition CNEMONumerics.hpp:50
void GetPMatrix_inv(const su2double *U, const su2double *V, const su2double *val_dPdU, const su2double *val_normal, const su2double *l, const su2double *m, su2double **val_invp_tensor) const
Computation of the matrix P^{-1}, this matrix diagonalizes the conservative Jacobians in the form $P^...
Definition CNEMONumerics.cpp:451
unsigned short nSpecies
Definition CNEMONumerics.hpp:56
unsigned short RHOCVTR_INDEX
Definition CNEMONumerics.hpp:67
su2double * Flux
The flux / residual across the edge.
Definition CNEMONumerics.hpp:52
su2double * dTvedU_i
Definition CNEMONumerics.hpp:61
bool ionization
Definition CNEMONumerics.hpp:43
void SetGamma(su2double val_Gamma_i, su2double val_Gamma_j) final
Set the ratio of specific heats.
Definition CNEMONumerics.hpp:521
void GetViscousProjJacs(const su2double *val_Mean_PrimVar, su2double *val_Mean_Eve, const su2double *val_Mean_Cvve, const su2double *val_diffusion_coeff, su2double val_laminar_viscosity, su2double val_eddy_viscosity, su2double val_thermal_conductivity, su2double val_thermal_conductivity_ve, su2double val_dist_ij, const su2double *val_normal, su2double val_dS, const su2double *val_Fv, su2double **val_Jac_i, su2double **val_Jac_j, const CConfig *config)
Staging function to compute viscous Jacobians.
Definition CNEMONumerics.cpp:309
void ComputeViscousJacs_impl(const su2double *val_Mean_PrimVar, su2double *val_Mean_Eve, const su2double *val_Mean_Cvve, const su2double *val_diffusion_coeff, su2double val_laminar_viscosity, su2double val_eddy_viscosity, su2double val_thermal_conductivity, su2double val_thermal_conductivity_ve, su2double val_dist_ij, const su2double *val_normal, su2double val_dS, const su2double *val_Fv, su2double **val_Jac_i, su2double **val_Jac_j, const CConfig *config)
TSL-Approximation of Viscous NS Jacobians for arbitrary equations of state.
Definition CNEMONumerics.hpp:169
su2double ProjVelocity_j
Definition CNEMONumerics.hpp:49
su2double * dTdU_j
Definition CNEMONumerics.hpp:60
su2double rhoCvtr_j
Definition CNEMONumerics.hpp:47
unsigned short EDDY_VISC_INDEX
Definition CNEMONumerics.hpp:68
su2double * rhos_j
Definition CNEMONumerics.hpp:44
su2double * Cvve_j
Definition CNEMONumerics.hpp:64
void SetCvve(su2double *val_Cvve_i, su2double *val_Cvve_j) final
Set the Cvve.
Definition CNEMONumerics.hpp:514
su2double Gamma_i
Definition CNEMONumerics.hpp:62
unsigned short RHO_INDEX
Definition CNEMONumerics.hpp:67
void GetViscousProjFlux(const su2double *val_primvar, const su2double *const *val_gradprimvar, su2double *val_eve, const su2double *val_normal, const su2double *val_diffusioncoeff, su2double val_lam_viscosity, su2double val_eddy_viscosity, su2double val_therm_conductivity, su2double val_therm_conductivity_ve, const CConfig *config)
Compute the projection of the viscous fluxes into a direction.
Definition CNEMONumerics.cpp:218
su2double ** Jacobian_j
Definition CNEMONumerics.hpp:54
unsigned short RHOCVVE_INDEX
Definition CNEMONumerics.hpp:67
void GetInviscidProjJac(const su2double *val_U, const su2double *val_V, const su2double *val_dPdU, const su2double *val_normal, const su2double val_scale, su2double **val_Proj_Jac_Tensor)
Compute the projection of the inviscid Jacobian matrices for the two-temperature model.
Definition CNEMONumerics.cpp:153
unsigned short RHOS_INDEX
Definition CNEMONumerics.hpp:66
su2double rhoCvve_i
Definition CNEMONumerics.hpp:48
su2double * dPdU_i
Definition CNEMONumerics.hpp:59
su2double e_ve_j
Definition CNEMONumerics.hpp:46
void GetPMatrix(const su2double *U, const su2double *V, const su2double *val_dPdU, const su2double *val_normal, const su2double *l, const su2double *m, su2double **val_p_tensor) const
Computation of the matrix P, this matrix diagonalizes the conservative Jacobians in the form $P^{-1}(...
Definition CNEMONumerics.cpp:355
su2double Gamma_j
Definition CNEMONumerics.hpp:62
unsigned short nPrimVar
Definition CNEMONumerics.hpp:50
su2double Velocity_i[MAXNDIM]
Definition CNEMONumerics.hpp:45
su2double * eve_i
Definition CNEMONumerics.hpp:64
su2double * rhos_i
Definition CNEMONumerics.hpp:44
~CNEMONumerics(void)
Destructor of the class.
Definition CNEMONumerics.cpp:78
unsigned short TVE_INDEX
Definition CNEMONumerics.hpp:66
unsigned short T_INDEX
Definition CNEMONumerics.hpp:66
void SetEve(su2double *val_Eve_i, su2double *val_Eve_j) final
Set the vib-el energy.
Definition CNEMONumerics.hpp:507
void SetdTvedU(su2double *val_dTvedU_i, su2double *val_dTvedU_j) final
Set the vib-el temperature derivatives.
Definition CNEMONumerics.hpp:500
su2double * dTdU_i
Definition CNEMONumerics.hpp:60
bool implicit
Definition CNEMONumerics.hpp:43
unsigned short VEL_INDEX
Definition CNEMONumerics.hpp:66
su2double * dPdU_j
Definition CNEMONumerics.hpp:59
unsigned short nEl
Number of species present in plasma.
Definition CNEMONumerics.hpp:56
void SetdPdU(su2double *val_dPdU_i, su2double *val_dPdU_j) final
Set the pressure derivatives.
Definition CNEMONumerics.hpp:486
unsigned short nHeavy
Definition CNEMONumerics.hpp:56
Class for defining the numerical methods.
Definition CNumerics.hpp:48
unsigned short nVar
Number of dimensions and variables.
Definition CNumerics.hpp:52
static constexpr size_t MAXNDIM
Max number of space dimensions, used in some static arrays.
Definition CNumerics.hpp:50
const su2double * V_i
Vector of primitive variables at point i.
Definition CNumerics.hpp:122
unsigned short nDim
Definition CNumerics.hpp:52
const su2double * V_j
Vector of primitive variables at point j.
Definition CNumerics.hpp:123
passivedouble su2double
Definition code_config.hpp:181
@ DynamicSize
Definition C2DContainer.hpp:51
@ V
Menter k-w SST model with vorticity production terms.
constexpr passivedouble UNIVERSAL_GAS_CONSTANT
Universal gas constant in J/(mol*K)
Definition option_structure.hpp:95