From 46bb5001d990b6def98deea758eedb027d6c62b7 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Wed, 24 Feb 2021 19:05:06 +0000 Subject: [PATCH] Fix skin friction coefficient --- .../include/solvers/CFVMFlowSolverBase.hpp | 2 +- .../include/solvers/CFVMFlowSolverBase.inl | 11 +++-- SU2_CFD/src/solvers/CNSSolver.cpp | 40 +++++++------------ 3 files changed, 21 insertions(+), 32 deletions(-) diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp index 393cf0ed2ca0..e1673fb1fedc 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp @@ -2413,7 +2413,7 @@ class CFVMFlowSolverBase : public CSolver { */ inline su2double GetCSkinFriction(unsigned short val_marker, unsigned long val_vertex, unsigned short val_dim) const final { - return CSkinFriction[val_marker][val_dim][val_vertex]; + return CSkinFriction[val_marker](val_vertex,val_dim); } /*! diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl index 4b4ed6ce4ede..598d38ff636c 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl @@ -197,9 +197,7 @@ void CFVMFlowSolverBase::Allocate(const CConfig& config) { /*--- Skin friction in all the markers ---*/ - CSkinFriction.resize(nMarker); - for (iMarker = 0; iMarker < nMarker; iMarker++) - CSkinFriction[iMarker].resize(nDim, nVertex[iMarker]) = su2double(0.0); + Alloc3D(nMarker, nVertex, nDim, CSkinFriction); /*--- Wall Shear Stress in all the markers ---*/ @@ -2412,8 +2410,8 @@ void CFVMFlowSolverBase::Friction_Forces(const CGeometry* geometr unsigned long iVertex, iPoint, iPointNormal; unsigned short iMarker, iMarker_Monitoring, iDim, jDim; unsigned short T_INDEX = 0, TVE_INDEX = 0, VEL_INDEX = 0; - su2double Viscosity = 0.0, WallDist[3] = {0.0}, Area, TauNormal, RefVel2 = 0.0, dTn, dTven, - RefDensity = 0.0, GradTemperature, Density = 0.0, WallDistMod, FrictionVel, + su2double Viscosity = 0.0, WallDist[3] = {0.0}, Area, TauNormal, dTn, dTven, + GradTemperature, Density = 0.0, WallDistMod, FrictionVel, UnitNormal[3] = {0.0}, TauElem[3] = {0.0}, TauTangent[3] = {0.0}, Tau[3][3] = {{0.0}}, Cp, thermal_conductivity, MaxNorm = 8.0, Grad_Vel[3][3] = {{0.0}}, Grad_Temp[3] = {0.0}, AxiFactor; const su2double *Coord = nullptr, *Coord_Normal = nullptr, *Normal = nullptr; @@ -2443,6 +2441,7 @@ void CFVMFlowSolverBase::Friction_Forces(const CGeometry* geometr } const su2double factor = 1.0 / AeroCoeffForceRef; + const su2double factorFric = config->GetRefArea() * factor; /*--- Variables initialization ---*/ @@ -2546,7 +2545,7 @@ void CFVMFlowSolverBase::Friction_Forces(const CGeometry* geometr WallShearStress[iMarker][iVertex] = 0.0; for (iDim = 0; iDim < nDim; iDim++) { TauTangent[iDim] = TauElem[iDim] - TauNormal * UnitNormal[iDim]; - CSkinFriction[iMarker][iDim][iVertex] = TauTangent[iDim] / (0.5 * RefDensity * RefVel2); + CSkinFriction[iMarker](iVertex,iDim) = TauTangent[iDim] * factorFric; WallShearStress[iMarker][iVertex] += TauTangent[iDim] * TauTangent[iDim]; } WallShearStress[iMarker][iVertex] = sqrt(WallShearStress[iMarker][iVertex]); diff --git a/SU2_CFD/src/solvers/CNSSolver.cpp b/SU2_CFD/src/solvers/CNSSolver.cpp index 4ac75e2874d7..915e296c0399 100644 --- a/SU2_CFD/src/solvers/CNSSolver.cpp +++ b/SU2_CFD/src/solvers/CNSSolver.cpp @@ -184,16 +184,11 @@ void CNSSolver::Viscous_Residual(unsigned long iEdge, CGeometry *geometry, CSolv void CNSSolver::Buffet_Monitoring(const CGeometry *geometry, const CConfig *config) { unsigned long iVertex; - unsigned short Boundary, Monitoring, iMarker, iMarker_Monitoring, iDim; + unsigned short iMarker, iMarker_Monitoring; const su2double* Vel_FS = Velocity_Inf; - su2double VelMag_FS = 0.0, SkinFrictionMag = 0.0, SkinFrictionDot = 0.0, *Normal, Area, Sref = config->GetRefArea(); - su2double k = config->GetBuffet_k(), lam = config->GetBuffet_lambda(); - string Marker_Tag, Monitoring_Tag; + const su2double k = config->GetBuffet_k(), lam = config->GetBuffet_lambda(), Sref = config->GetRefArea(); - for (iDim = 0; iDim < nDim; iDim++){ - VelMag_FS += Vel_FS[iDim]*Vel_FS[iDim]; - } - VelMag_FS = sqrt(VelMag_FS); + const su2double VelMag_FS = GeometryToolbox::Norm(nDim, Vel_FS); /*-- Variables initialization ---*/ @@ -209,10 +204,9 @@ void CNSSolver::Buffet_Monitoring(const CGeometry *geometry, const CConfig *conf Buffet_Metric[iMarker] = 0.0; - Boundary = config->GetMarker_All_KindBC(iMarker); - Monitoring = config->GetMarker_All_Monitoring(iMarker); + const auto Monitoring = config->GetMarker_All_Monitoring(iMarker); - if ((Boundary == HEAT_FLUX) || (Boundary == ISOTHERMAL) || (Boundary == HEAT_FLUX) || (Boundary == CHT_WALL_INTERFACE)) { + if (config->GetViscous_Wall(iMarker)) { /*--- Loop over the vertices to compute the buffet sensor ---*/ @@ -220,13 +214,8 @@ void CNSSolver::Buffet_Monitoring(const CGeometry *geometry, const CConfig *conf /*--- Perform dot product of skin friction with freestream velocity ---*/ - SkinFrictionMag = 0.0; - SkinFrictionDot = 0.0; - for(iDim = 0; iDim < nDim; iDim++){ - SkinFrictionMag += pow(CSkinFriction[iMarker][iDim][iVertex], 2); - SkinFrictionDot += CSkinFriction[iMarker][iDim][iVertex]*Vel_FS[iDim]; - } - SkinFrictionMag = sqrt(SkinFrictionMag); + const su2double SkinFrictionMag = GeometryToolbox::Norm(nDim, CSkinFriction[iMarker][iVertex]); + su2double SkinFrictionDot = GeometryToolbox::DotProduct(nDim, CSkinFriction[iMarker][iVertex], Vel_FS); /*--- Normalize the dot product ---*/ @@ -238,10 +227,10 @@ void CNSSolver::Buffet_Monitoring(const CGeometry *geometry, const CConfig *conf /*--- Integrate buffet sensor ---*/ - if(Monitoring == YES){ + if (Monitoring == YES){ - Normal = geometry->vertex[iMarker][iVertex]->GetNormal(); - Area = GeometryToolbox::Norm(nDim, Normal); + auto Normal = geometry->vertex[iMarker][iVertex]->GetNormal(); + su2double Area = GeometryToolbox::Norm(nDim, Normal); Buffet_Metric[iMarker] += Buffet_Sensor[iMarker][iVertex]*Area/Sref; @@ -249,16 +238,17 @@ void CNSSolver::Buffet_Monitoring(const CGeometry *geometry, const CConfig *conf } - if(Monitoring == YES){ + if (Monitoring == YES){ Total_Buffet_Metric += Buffet_Metric[iMarker]; /*--- Per surface buffet metric ---*/ for (iMarker_Monitoring = 0; iMarker_Monitoring < config->GetnMarker_Monitoring(); iMarker_Monitoring++) { - Monitoring_Tag = config->GetMarker_Monitoring_TagBound(iMarker_Monitoring); - Marker_Tag = config->GetMarker_All_TagBound(iMarker); - if (Marker_Tag == Monitoring_Tag) Surface_Buffet_Metric[iMarker_Monitoring] = Buffet_Metric[iMarker]; + auto Monitoring_Tag = config->GetMarker_Monitoring_TagBound(iMarker_Monitoring); + auto Marker_Tag = config->GetMarker_All_TagBound(iMarker); + if (Marker_Tag == Monitoring_Tag) + Surface_Buffet_Metric[iMarker_Monitoring] = Buffet_Metric[iMarker]; } }