@@ -1108,16 +1108,19 @@ bool CNEMOEulerSolver::CheckNonPhys(const su2double *V) const {
11081108
11091109void CNEMOEulerSolver::Source_Residual (CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) {
11101110
1111- unsigned short iVar;
1111+ unsigned short iVar, jVar ;
11121112 unsigned long iPoint;
11131113 unsigned long eAxi_local, eChm_local, eVib_local;
11141114 unsigned long eAxi_global, eChm_global, eVib_global;
11151115
11161116 /* --- Assign booleans ---*/
11171117 bool err = false ;
1118- // bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT);
1118+ bool implicit = (config->GetKind_TimeIntScheme_Flow () == EULER_IMPLICIT);
11191119 bool frozen = config->GetFrozen ();
11201120 bool monoatomic = config->GetMonoatomic ();
1121+ bool viscous = config->GetViscous ();
1122+ bool ideal_gas = (config->GetKind_FluidModel () == STANDARD_AIR) || (config->GetKind_FluidModel () == IDEAL_GAS);
1123+ bool rans = (config->GetKind_Turb_Model () != NONE);
11211124
11221125 CNumerics* numerics = numerics_container[SOURCE_FIRST_TERM];
11231126
@@ -1137,11 +1140,11 @@ void CNEMOEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_con
11371140 numerics->SetPrimitive (nodes->GetPrimitive (iPoint), nodes->GetPrimitive (iPoint) );
11381141
11391142 /* --- Pass supplementary information to CNumerics ---*/
1140- numerics->SetdPdU (nodes->GetdPdU (iPoint), nodes->GetdPdU (iPoint));
1141- numerics->SetdTdU (nodes->GetdTdU (iPoint), nodes->GetdTdU (iPoint));
1143+ numerics->SetdPdU (nodes->GetdPdU (iPoint), nodes->GetdPdU (iPoint));
1144+ numerics->SetdTdU (nodes->GetdTdU (iPoint), nodes->GetdTdU (iPoint));
11421145 numerics->SetdTvedU (nodes->GetdTvedU (iPoint), nodes->GetdTvedU (iPoint));
1143- numerics->SetEve (nodes->GetEve (iPoint), nodes->GetEve (iPoint));
1144- numerics->SetCvve (nodes->GetCvve (iPoint), nodes->GetCvve (iPoint));
1146+ numerics->SetEve (nodes->GetEve (iPoint), nodes->GetEve (iPoint));
1147+ numerics->SetCvve (nodes->GetCvve (iPoint), nodes->GetCvve (iPoint));
11451148
11461149 /* --- Set volume of the dual grid cell ---*/
11471150 numerics->SetVolume (geometry->nodes ->GetVolume (iPoint));
@@ -1150,49 +1153,103 @@ void CNEMOEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_con
11501153
11511154 /* --- Compute axisymmetric source terms (if needed) ---*/
11521155 if (config->GetAxisymmetric ()) {
1153- auto residual = numerics->ComputeAxisymmetric (config);
11541156
1155- /* --- Check for errors before applying source to the linear system ---*/
1156- err = false ;
1157- for (iVar = 0 ; iVar < nVar; iVar++)
1158- if (residual[iVar] != residual[iVar]) err = true ;
1159- // if (implicit)
1160- // for (iVar = 0; iVar < nVar; iVar++)
1161- // for (jVar = 0; jVar < nVar; jVar++)
1162- // if (Jacobian_i[iVar][jVar] != Jacobian_i[iVar][jVar]) err = true;
1157+ if (viscous) {
11631158
1164- /* --- Apply the update to the linear system ---*/
1165- if (!err) {
1166- LinSysRes.AddBlock (iPoint, residual);
1167- // if (implicit)
1168- // Jacobian.AddBlock(iPoint, iPoint, Jacobian_i);
1159+ for (iPoint = 0 ; iPoint < nPoint; iPoint++) {
1160+
1161+ su2double yCoord = geometry->nodes ->GetCoord (iPoint, 1 );
1162+ su2double yVelocity = nodes->GetVelocity (iPoint,1 );
1163+ su2double xVelocity = nodes->GetVelocity (iPoint,0 );
1164+ su2double Total_Viscosity = nodes->GetLaminarViscosity (iPoint) + nodes->GetEddyViscosity (iPoint);
1165+
1166+ if (yCoord > EPS){
1167+ su2double nu_v_on_y = Total_Viscosity*yVelocity/yCoord;
1168+ nodes->SetAuxVar (iPoint, 0 , nu_v_on_y);
1169+ nodes->SetAuxVar (iPoint, 1 , nu_v_on_y*yVelocity);
1170+ nodes->SetAuxVar (iPoint, 2 , nu_v_on_y*xVelocity);
1171+ }
1172+ }
1173+
1174+ /* --- Compute the auxiliary variable gradient with GG or WLS. ---*/
1175+ if (config->GetKind_Gradient_Method () == GREEN_GAUSS) {
1176+ SetAuxVar_Gradient_GG (geometry, config);
1177+ }
1178+ if (config->GetKind_Gradient_Method () == WEIGHTED_LEAST_SQUARES) {
1179+ SetAuxVar_Gradient_LS (geometry, config);
1180+ }
11691181 }
1170- else
1171- eAxi_local++;
1172- }
11731182
1174- if (!monoatomic){
1175- if (!frozen){
1176- /* --- Compute the non-equilibrium chemistry ---*/
1177- auto residual = numerics->ComputeChemistry (config);
1183+ /* --- loop over points ---*/
1184+ SU2_OMP_FOR_DYN (omp_chunk_size)
1185+ for (iPoint = 0 ; iPoint < nPointDomain; iPoint++) {
11781186
1179- /* --- Check for errors before applying source to the linear system ---*/
1180- err = false ;
1181- for (iVar = 0 ; iVar < nVar; iVar++)
1182- if (residual[iVar] != residual[iVar]) err = true ;
1183- // if (implicit)
1184- // for (iVar = 0; iVar < nVar; iVar++)
1185- // for (jVar = 0; jVar < nVar; jVar++)
1186- // if (Jacobian_i[iVar][jVar] != Jacobian_i[iVar][jVar]) err = true;
1187-
1188- /* --- Apply the chemical sources to the linear system ---*/
1189- if (!err) {
1190- LinSysRes.SubtractBlock (iPoint, residual);
1191- // if (implicit)
1192- // Jacobian.SubtractBlock(iPoint, iPoint, Jacobian_i);
1193- } else
1194- eChm_local++;
1187+ /* --- Set solution ---*/
1188+ numerics->SetConservative (nodes->GetSolution (iPoint), nodes->GetSolution (iPoint));
1189+
1190+ /* --- Set control volume ---*/
1191+ numerics->SetVolume (geometry->nodes ->GetVolume (iPoint));
1192+
1193+ /* --- Set y coordinate ---*/
1194+ numerics->SetCoord (geometry->nodes ->GetCoord (iPoint), geometry->nodes ->GetCoord (iPoint));
1195+
1196+ /* --- Set primitive variables for viscous terms and/or generalised source ---*/
1197+ numerics->SetPrimitive (nodes->GetPrimitive (iPoint), nodes->GetPrimitive (iPoint));
1198+
1199+ if (viscous) {
1200+
1201+ /* --- Set gradient of primitive variables ---*/
1202+ numerics->SetPrimVarGradient (nodes->GetGradient_Primitive (iPoint), nodes->GetGradient_Primitive (iPoint));
1203+
1204+ /* --- Set gradient of auxillary variables ---*/
1205+ numerics->SetAuxVarGrad (nodes->GetAuxVarGradient (iPoint), nullptr );
1206+
1207+ /* --- Set diffusion coefficient ---*/
1208+ numerics->SetDiffusionCoeff (nodes->GetDiffusionCoeff (iPoint), nodes->GetDiffusionCoeff (iPoint));
1209+
1210+ /* --- Laminar viscosity ---*/
1211+ numerics->SetLaminarViscosity (nodes->GetLaminarViscosity (iPoint), nodes->GetLaminarViscosity (iPoint));
1212+
1213+ /* --- Eddy viscosity ---*/
1214+ numerics->SetEddyViscosity (nodes->GetEddyViscosity (iPoint), nodes->GetEddyViscosity (iPoint));
1215+
1216+ /* --- Thermal conductivity ---*/
1217+ numerics->SetThermalConductivity (nodes->GetThermalConductivity (iPoint), nodes->GetThermalConductivity (iPoint));
1218+
1219+ /* --- Vib-el. thermal conductivity ---*/
1220+ numerics->SetThermalConductivity_ve (nodes->GetThermalConductivity_ve (iPoint), nodes->GetThermalConductivity_ve (iPoint));
1221+
1222+ /* --- Vib-el energy ---*/
1223+ numerics->SetEve (nodes->GetEve (iPoint), nodes->GetEve (iPoint));
1224+
1225+ /* --- Set turbulence kinetic energy ---*/
1226+ if (rans){
1227+ CVariable* turbNodes = solver_container[TURB_SOL]->GetNodes ();
1228+ numerics->SetTurbKineticEnergy (turbNodes->GetSolution (iPoint,0 ), turbNodes->GetSolution (iPoint,0 ));
1229+ }
1230+ }
1231+
1232+ auto residual = numerics->ComputeAxisymmetric (config);
1233+
1234+ /* --- Check for errors before applying source to the linear system ---*/
1235+ err = false ;
1236+ for (iVar = 0 ; iVar < nVar; iVar++)
1237+ if (residual[iVar] != residual[iVar]) err = true ;
1238+ if (implicit)
1239+ for (iVar = 0 ; iVar < nVar; iVar++)
1240+ for (jVar = 0 ; jVar < nVar; jVar++)
1241+ if (Jacobian_i[iVar][jVar] != Jacobian_i[iVar][jVar]) err = true ;
1242+
1243+ /* --- Apply the update to the linear system ---*/
1244+ if (!err) {
1245+ LinSysRes.AddBlock (iPoint, residual);
1246+ if (implicit)
1247+ Jacobian.AddBlock (iPoint, iPoint, Jacobian_i);
1248+ }
1249+ else
1250+ eAxi_local++;
11951251 }
1252+
11961253 }
11971254
11981255 /* --- Compute vibrational energy relaxation ---*/
0 commit comments