Skip to content

Commit 0674539

Browse files
authored
Merge pull request #1208 from su2code/fix_cskin_friction
Fix skin friction coefficient
2 parents a4894ed + 2614ef2 commit 0674539

3 files changed

Lines changed: 21 additions & 32 deletions

File tree

SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2413,7 +2413,7 @@ class CFVMFlowSolverBase : public CSolver {
24132413
*/
24142414
inline su2double GetCSkinFriction(unsigned short val_marker, unsigned long val_vertex,
24152415
unsigned short val_dim) const final {
2416-
return CSkinFriction[val_marker][val_dim][val_vertex];
2416+
return CSkinFriction[val_marker](val_vertex,val_dim);
24172417
}
24182418

24192419
/*!

SU2_CFD/include/solvers/CFVMFlowSolverBase.inl

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -197,9 +197,7 @@ void CFVMFlowSolverBase<V, R>::Allocate(const CConfig& config) {
197197

198198
/*--- Skin friction in all the markers ---*/
199199

200-
CSkinFriction.resize(nMarker);
201-
for (iMarker = 0; iMarker < nMarker; iMarker++)
202-
CSkinFriction[iMarker].resize(nDim, nVertex[iMarker]) = su2double(0.0);
200+
Alloc3D(nMarker, nVertex, nDim, CSkinFriction);
203201

204202
/*--- Wall Shear Stress in all the markers ---*/
205203

@@ -2412,8 +2410,8 @@ void CFVMFlowSolverBase<V, FlowRegime>::Friction_Forces(const CGeometry* geometr
24122410
unsigned long iVertex, iPoint, iPointNormal;
24132411
unsigned short iMarker, iMarker_Monitoring, iDim, jDim;
24142412
unsigned short T_INDEX = 0, TVE_INDEX = 0, VEL_INDEX = 0;
2415-
su2double Viscosity = 0.0, WallDist[3] = {0.0}, Area, TauNormal, RefVel2 = 0.0, dTn, dTven,
2416-
RefDensity = 0.0, GradTemperature, Density = 0.0, WallDistMod, FrictionVel,
2413+
su2double Viscosity = 0.0, WallDist[3] = {0.0}, Area, TauNormal, dTn, dTven,
2414+
GradTemperature, Density = 0.0, WallDistMod, FrictionVel,
24172415
UnitNormal[3] = {0.0}, TauElem[3] = {0.0}, TauTangent[3] = {0.0}, Tau[3][3] = {{0.0}}, Cp,
24182416
thermal_conductivity, MaxNorm = 8.0, Grad_Vel[3][3] = {{0.0}}, Grad_Temp[3] = {0.0}, AxiFactor;
24192417
const su2double *Coord = nullptr, *Coord_Normal = nullptr, *Normal = nullptr;
@@ -2443,6 +2441,7 @@ void CFVMFlowSolverBase<V, FlowRegime>::Friction_Forces(const CGeometry* geometr
24432441
}
24442442

24452443
const su2double factor = 1.0 / AeroCoeffForceRef;
2444+
const su2double factorFric = config->GetRefArea() * factor;
24462445

24472446
/*--- Variables initialization ---*/
24482447

@@ -2546,7 +2545,7 @@ void CFVMFlowSolverBase<V, FlowRegime>::Friction_Forces(const CGeometry* geometr
25462545
WallShearStress[iMarker][iVertex] = 0.0;
25472546
for (iDim = 0; iDim < nDim; iDim++) {
25482547
TauTangent[iDim] = TauElem[iDim] - TauNormal * UnitNormal[iDim];
2549-
CSkinFriction[iMarker][iDim][iVertex] = TauTangent[iDim] / (0.5 * RefDensity * RefVel2);
2548+
CSkinFriction[iMarker](iVertex,iDim) = TauTangent[iDim] * factorFric;
25502549
WallShearStress[iMarker][iVertex] += TauTangent[iDim] * TauTangent[iDim];
25512550
}
25522551
WallShearStress[iMarker][iVertex] = sqrt(WallShearStress[iMarker][iVertex]);

SU2_CFD/src/solvers/CNSSolver.cpp

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -184,16 +184,11 @@ void CNSSolver::Viscous_Residual(unsigned long iEdge, CGeometry *geometry, CSolv
184184
void CNSSolver::Buffet_Monitoring(const CGeometry *geometry, const CConfig *config) {
185185

186186
unsigned long iVertex;
187-
unsigned short Boundary, Monitoring, iMarker, iMarker_Monitoring, iDim;
187+
unsigned short iMarker, iMarker_Monitoring;
188188
const su2double* Vel_FS = Velocity_Inf;
189-
su2double VelMag_FS = 0.0, SkinFrictionMag = 0.0, SkinFrictionDot = 0.0, *Normal, Area, Sref = config->GetRefArea();
190-
su2double k = config->GetBuffet_k(), lam = config->GetBuffet_lambda();
191-
string Marker_Tag, Monitoring_Tag;
189+
const su2double k = config->GetBuffet_k(), lam = config->GetBuffet_lambda(), Sref = config->GetRefArea();
192190

193-
for (iDim = 0; iDim < nDim; iDim++){
194-
VelMag_FS += Vel_FS[iDim]*Vel_FS[iDim];
195-
}
196-
VelMag_FS = sqrt(VelMag_FS);
191+
const su2double VelMag_FS = GeometryToolbox::Norm(nDim, Vel_FS);
197192

198193
/*-- Variables initialization ---*/
199194

@@ -209,24 +204,18 @@ void CNSSolver::Buffet_Monitoring(const CGeometry *geometry, const CConfig *conf
209204

210205
Buffet_Metric[iMarker] = 0.0;
211206

212-
Boundary = config->GetMarker_All_KindBC(iMarker);
213-
Monitoring = config->GetMarker_All_Monitoring(iMarker);
207+
const auto Monitoring = config->GetMarker_All_Monitoring(iMarker);
214208

215-
if ((Boundary == HEAT_FLUX) || (Boundary == ISOTHERMAL) || (Boundary == HEAT_FLUX) || (Boundary == CHT_WALL_INTERFACE)) {
209+
if (config->GetViscous_Wall(iMarker)) {
216210

217211
/*--- Loop over the vertices to compute the buffet sensor ---*/
218212

219213
for (iVertex = 0; iVertex < geometry->nVertex[iMarker]; iVertex++) {
220214

221215
/*--- Perform dot product of skin friction with freestream velocity ---*/
222216

223-
SkinFrictionMag = 0.0;
224-
SkinFrictionDot = 0.0;
225-
for(iDim = 0; iDim < nDim; iDim++){
226-
SkinFrictionMag += pow(CSkinFriction[iMarker][iDim][iVertex], 2);
227-
SkinFrictionDot += CSkinFriction[iMarker][iDim][iVertex]*Vel_FS[iDim];
228-
}
229-
SkinFrictionMag = sqrt(SkinFrictionMag);
217+
const su2double SkinFrictionMag = GeometryToolbox::Norm(nDim, CSkinFriction[iMarker][iVertex]);
218+
su2double SkinFrictionDot = GeometryToolbox::DotProduct(nDim, CSkinFriction[iMarker][iVertex], Vel_FS);
230219

231220
/*--- Normalize the dot product ---*/
232221

@@ -238,27 +227,28 @@ void CNSSolver::Buffet_Monitoring(const CGeometry *geometry, const CConfig *conf
238227

239228
/*--- Integrate buffet sensor ---*/
240229

241-
if(Monitoring == YES){
230+
if (Monitoring == YES){
242231

243-
Normal = geometry->vertex[iMarker][iVertex]->GetNormal();
244-
Area = GeometryToolbox::Norm(nDim, Normal);
232+
auto Normal = geometry->vertex[iMarker][iVertex]->GetNormal();
233+
su2double Area = GeometryToolbox::Norm(nDim, Normal);
245234

246235
Buffet_Metric[iMarker] += Buffet_Sensor[iMarker][iVertex]*Area/Sref;
247236

248237
}
249238

250239
}
251240

252-
if(Monitoring == YES){
241+
if (Monitoring == YES){
253242

254243
Total_Buffet_Metric += Buffet_Metric[iMarker];
255244

256245
/*--- Per surface buffet metric ---*/
257246

258247
for (iMarker_Monitoring = 0; iMarker_Monitoring < config->GetnMarker_Monitoring(); iMarker_Monitoring++) {
259-
Monitoring_Tag = config->GetMarker_Monitoring_TagBound(iMarker_Monitoring);
260-
Marker_Tag = config->GetMarker_All_TagBound(iMarker);
261-
if (Marker_Tag == Monitoring_Tag) Surface_Buffet_Metric[iMarker_Monitoring] = Buffet_Metric[iMarker];
248+
auto Monitoring_Tag = config->GetMarker_Monitoring_TagBound(iMarker_Monitoring);
249+
auto Marker_Tag = config->GetMarker_All_TagBound(iMarker);
250+
if (Marker_Tag == Monitoring_Tag)
251+
Surface_Buffet_Metric[iMarker_Monitoring] = Buffet_Metric[iMarker];
262252
}
263253

264254
}

0 commit comments

Comments
 (0)