@@ -57,19 +57,79 @@ template <class T>
5757CSourceAxisymmetric_Species<T>::CSourceAxisymmetric_Species(unsigned short val_nDim, unsigned short val_nVar,
5858 const CConfig* config)
5959 : CSourceBase_Species(val_nDim, val_nVar, config),
60- idx (val_nDim, config->GetnSpecies ()) {
61- implicit = (config->GetKind_TimeIntScheme_Flow () == EULER_IMPLICIT);
60+ idx (val_nDim, config->GetnSpecies ()),
61+ implicit(config->GetKind_TimeIntScheme_Species () == EULER_IMPLICIT),
62+ viscous(config->GetViscous ()),
63+ turbulence(config->GetKind_Turb_Model () != TURB_MODEL::NONE),
64+ incompressible(config->GetKind_Regime () == ENUM_REGIME::INCOMPRESSIBLE),
65+ Sc_t(config->GetSchmidt_Number_Turbulent ()) {
6266}
6367
6468template <class T >
6569CNumerics::ResidualType<> CSourceAxisymmetric_Species<T>::ComputeResidual(const CConfig* config) {
66- for ( unsigned short iVar = 0 ; iVar < nVar; iVar++) residual[iVar] = 0.0 ;
70+
6771
68- if (implicit) {
69- for (unsigned short iVar = 0 ; iVar < nVar; iVar++) {
70- for (unsigned short jVar = 0 ; jVar < nVar; jVar++) jacobian[iVar][jVar] = 0.0 ;
72+ /* --- Preaccumulation ---*/
73+ AD::StartPreacc ();
74+ AD::SetPreaccIn (ScalarVar_i, nVar);
75+ AD::SetPreaccIn (Volume);
76+
77+ if (incompressible) {
78+ AD::SetPreaccIn (V_i, nDim+6 );
79+ }
80+ else {
81+ AD::SetPreaccIn (V_i, nDim+7 );
82+ }
83+
84+ /* --- Initialization. ---*/
85+ for (auto iVar = 0u ; iVar < nVar; iVar++) {
86+ residual[iVar] = 0.0 ;
87+ for (auto jVar = 0 ; jVar < nVar; jVar++) {
88+ jacobian[iVar][jVar] = 0.0 ;
89+ }
90+ }
91+
92+ /* --- Contribution due to 2D axisymmetric formulation ---*/
93+ if (Coord_i[1 ] > EPS) {
94+
95+ AD::SetPreaccIn (Coord_i[1 ]);
96+ AD::SetPreaccIn (Diffusion_Coeff_i, nVar);
97+ AD::SetPreaccIn (ScalarVar_Grad_i, nVar, nDim);
98+
99+ const su2double yinv = 1.0 / Coord_i[1 ];
100+
101+ const su2double Density_i = V_i[idx.Density ()];
102+
103+ su2double Velocity_i[3 ];
104+ for (auto iDim = 0u ; iDim < nDim; iDim++)
105+ Velocity_i[iDim] = V_i[idx.Velocity () + iDim];
106+
107+ /* --- Inviscid component of the source term. ---*/
108+
109+ for (auto iVar = 0u ; iVar < nVar; iVar++)
110+ residual[iVar] -= yinv * Volume * Density_i * ScalarVar_i[iVar] * Velocity_i[1 ];
111+
112+ if (implicit) {
113+ for (auto iVar = 0u ; iVar < nVar; iVar++) {
114+ jacobian[iVar][iVar] -= yinv * Volume * Velocity_i[1 ];
115+ }
116+ }
117+
118+ /* --- Add the viscous terms if necessary. ---*/
119+
120+ if (config->GetViscous ()) {
121+ su2double Mass_Diffusivity_Tur = 0.0 ;
122+ if (turbulence)
123+ Mass_Diffusivity_Tur = V_i[idx.EddyViscosity ()] / Sc_t;
124+
125+ for (auto iVar=0u ; iVar < nVar; iVar++){
126+ residual[iVar] += yinv * Volume * (Density_i * Diffusion_Coeff_i[iVar] + Mass_Diffusivity_Tur) * ScalarVar_Grad_i[iVar][1 ];
127+ }
71128 }
72129 }
130+
131+ AD::SetPreaccOut (residual, nVar);
132+ AD::EndPreacc ();
73133
74134 return ResidualType<>(residual, jacobian, nullptr );
75135}
0 commit comments