Skip to content

Commit

Permalink
Fix SA and SST wall functions (#1204)
Browse files Browse the repository at this point in the history
* fixed wall functions for SA and SST

* fix unused variables update

* fix wall model constant config option

* computing skinfriction when y+ < 5

* fix OMP command

* update to enum class

* Apply suggestions from code review

* a little more refactoring

* apply fix from #1120 (do not consider tau wall for edges along wall), vectorized implementation

* some fixes and better warnings

Co-authored-by: TobiKattmann <31306376+TobiKattmann@users.noreply.github.com>
Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com>
Co-authored-by: Pedro Gomes <pcarruscag@gmail.com>
  • Loading branch information
4 people authored Jun 22, 2021
1 parent 295485c commit 350fee9
Show file tree
Hide file tree
Showing 40 changed files with 929 additions and 415 deletions.
50 changes: 32 additions & 18 deletions Common/include/CConfig.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -676,7 +676,7 @@ class CConfig {

unsigned short nConfig_Files; /*!< \brief Number of config files for multiphysics problems. */
string *Config_Filenames; /*!< \brief List of names for configuration files. */
unsigned short *Kind_WallFunctions; /*!< \brief The kind of wall function to use for the corresponding markers. */
WALL_FUNCTIONS *Kind_WallFunctions; /*!< \brief The kind of wall function to use for the corresponding markers. */
unsigned short **IntInfo_WallFunctions; /*!< \brief Additional integer information for the wall function markers. */
su2double **DoubleInfo_WallFunctions; /*!< \brief Additional double information for the wall function markers. */
unsigned short *Marker_All_Monitoring, /*!< \brief Global index for monitoring using the grid information. */
Expand Down Expand Up @@ -816,21 +816,23 @@ class CConfig {
Turb2LamViscRatio_FreeStream, /*!< \brief Ratio of turbulent to laminar viscosity. */
NuFactor_FreeStream, /*!< \brief Ratio of turbulent to laminar viscosity. */
NuFactor_Engine, /*!< \brief Ratio of turbulent to laminar viscosity at the engine. */
SecondaryFlow_ActDisk, /*!< \brief Ratio of turbulent to laminar viscosity at the actuator disk. */
Initial_BCThrust, /*!< \brief Ratio of turbulent to laminar viscosity at the actuator disk. */
Pressure_FreeStream, /*!< \brief Total pressure of the fluid. */
Pressure_Thermodynamic, /*!< \brief Thermodynamic pressure of the fluid. */
Temperature_FreeStream, /*!< \brief Total temperature of the fluid. */
Temperature_ve_FreeStream; /*!< \brief Total vibrational-electronic temperature of the fluid. */
su2double Prandtl_Lam, /*!< \brief Laminar Prandtl number for the gas. */
Prandtl_Turb, /*!< \brief Turbulent Prandtl number for the gas. */
Length_Ref, /*!< \brief Reference length for non-dimensionalization. */
Pressure_Ref, /*!< \brief Reference pressure for non-dimensionalization. */
Temperature_Ref, /*!< \brief Reference temperature for non-dimensionalization.*/
Temperature_ve_Ref, /*!< \brief Reference vibrational-electronic temperature for non-dimensionalization.*/
Density_Ref, /*!< \brief Reference density for non-dimensionalization.*/
Velocity_Ref, /*!< \brief Reference velocity for non-dimensionalization.*/
Time_Ref, /*!< \brief Reference time for non-dimensionalization. */
SecondaryFlow_ActDisk, /*!< \brief Ratio of turbulent to laminar viscosity at the actuator disk. */
Initial_BCThrust, /*!< \brief Ratio of turbulent to laminar viscosity at the actuator disk. */
Pressure_FreeStream, /*!< \brief Total pressure of the fluid. */
Pressure_Thermodynamic, /*!< \brief Thermodynamic pressure of the fluid. */
Temperature_FreeStream, /*!< \brief Total temperature of the fluid. */
Temperature_ve_FreeStream; /*!< \brief Total vibrational-electronic temperature of the fluid. */
su2double Prandtl_Lam, /*!< \brief Laminar Prandtl number for the gas. */
Prandtl_Turb, /*!< \brief Turbulent Prandtl number for the gas. */
wallModelKappa, /*!< \brief von Karman constant kappa for turbulence wall modeling */
wallModelB, /*!< \brief constant B for turbulence wall modeling */
Length_Ref, /*!< \brief Reference length for non-dimensionalization. */
Pressure_Ref, /*!< \brief Reference pressure for non-dimensionalization. */
Temperature_Ref, /*!< \brief Reference temperature for non-dimensionalization.*/
Temperature_ve_Ref, /*!< \brief Reference vibrational-electronic temperature for non-dimensionalization.*/
Density_Ref, /*!< \brief Reference density for non-dimensionalization.*/
Velocity_Ref, /*!< \brief Reference velocity for non-dimensionalization.*/
Time_Ref, /*!< \brief Reference time for non-dimensionalization. */
Viscosity_Ref, /*!< \brief Reference viscosity for non-dimensionalization. */
Conductivity_Ref, /*!< \brief Reference conductivity for non-dimensionalization. */
Energy_Ref, /*!< \brief Reference viscosity for non-dimensionalization. */
Expand Down Expand Up @@ -1255,7 +1257,7 @@ class CConfig {
su2double** & ActDisk_PressJump, su2double** & ActDisk_TempJump, su2double** & ActDisk_Omega);

void addWallFunctionOption(const string &name, unsigned short &list_size,
string* &string_field, unsigned short* &val_Kind_WF,
string* &string_field, WALL_FUNCTIONS* &val_Kind_WF,
unsigned short** &val_IntInfo_WF, su2double** &val_DoubleInfo_WF);

void addPythonOption(const string name);
Expand Down Expand Up @@ -1664,6 +1666,18 @@ class CConfig {
*/
su2double GetPrandtl_Turb(void) const { return Prandtl_Turb; }

/*!
* \brief Get the value of the von Karman constant kappa for turbulence wall modeling.
* \return von Karman constant.
*/
su2double GetwallModelKappa(void) const { return wallModelKappa; }

/*!
* \brief Get the value of the von Karman constant kappa for turbulence wall modeling.
* \return von Karman constant.
*/
su2double GetwallModelB(void) const { return wallModelB; }

/*!
* \brief Get the value of the thermal conductivity for solids.
* \return Thermal conductivity (solid).
Expand Down Expand Up @@ -6618,7 +6632,7 @@ class CConfig {
* \param[in] val_marker - String of the viscous wall marker.
* \return The type of wall function treatment.
*/
unsigned short GetWallFunction_Treatment(string val_marker) const;
WALL_FUNCTIONS GetWallFunction_Treatment(string val_marker) const;

/*!
* \brief Get the additional integer info for the wall function treatment
Expand Down
2 changes: 0 additions & 2 deletions Common/include/linear_algebra/CSysMatrix.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,6 @@
#include <vector>
#include <cassert>

using namespace std;

/*--- In forward mode the matrix is not of a built-in type. ---*/
#if defined(HAVE_MKL) && !defined(CODI_FORWARD_TYPE)
#include "mkl.h"
Expand Down
34 changes: 17 additions & 17 deletions Common/include/option_structure.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -935,23 +935,23 @@ static const MapType<string, ENUM_ROELOWDISS> RoeLowDiss_Map = {
/*!
* \brief Types of wall functions.
*/
enum ENUM_WALL_FUNCTIONS {
NO_WALL_FUNCTION = 0, /*!< \brief No wall function treatment, integration to the wall. Default behavior. */
STANDARD_WALL_FUNCTION = 1, /*!< \brief Standard wall function. */
ADAPTIVE_WALL_FUNCTION = 2, /*!< \brief Adaptive wall function. Formulation depends on y+. */
SCALABLE_WALL_FUNCTION = 3, /*!< \brief Scalable wall function. */
EQUILIBRIUM_WALL_MODEL = 4, /*!< \brief Equilibrium wall model for LES. */
NONEQUILIBRIUM_WALL_MODEL = 5, /*!< \brief Non-equilibrium wall model for LES. */
LOGARITHMIC_WALL_MODEL = 6 /*!< \brief Logarithmic law-of-the-wall model for LES. */
};
static const MapType<string, ENUM_WALL_FUNCTIONS> Wall_Functions_Map = {
MakePair("NO_WALL_FUNCTION", NO_WALL_FUNCTION)
MakePair("STANDARD_WALL_FUNCTION", STANDARD_WALL_FUNCTION)
MakePair("ADAPTIVE_WALL_FUNCTION", ADAPTIVE_WALL_FUNCTION)
MakePair("SCALABLE_WALL_FUNCTION", SCALABLE_WALL_FUNCTION)
MakePair("EQUILIBRIUM_WALL_MODEL", EQUILIBRIUM_WALL_MODEL)
MakePair("NONEQUILIBRIUM_WALL_MODEL", NONEQUILIBRIUM_WALL_MODEL)
MakePair("LOGARITHMIC_WALL_MODEL", LOGARITHMIC_WALL_MODEL)
enum class WALL_FUNCTIONS {
NONE , /*!< \brief No wall function treatment, integration to the wall. Default behavior. */
STANDARD_FUNCTION , /*!< \brief Standard wall function. */
ADAPTIVE_FUNCTION , /*!< \brief Adaptive wall function. Formulation depends on y+. */
SCALABLE_FUNCTION , /*!< \brief Scalable wall function. */
EQUILIBRIUM_MODEL , /*!< \brief Equilibrium wall model for LES. */
NONEQUILIBRIUM_MODEL , /*!< \brief Non-equilibrium wall model for LES. */
LOGARITHMIC_MODEL /*!< \brief Logarithmic law-of-the-wall model for LES. */
};
static const MapType<string, WALL_FUNCTIONS> Wall_Functions_Map = {
MakePair("NO_WALL_FUNCTION", WALL_FUNCTIONS::NONE)
MakePair("STANDARD_WALL_FUNCTION", WALL_FUNCTIONS::STANDARD_FUNCTION)
MakePair("ADAPTIVE_WALL_FUNCTION", WALL_FUNCTIONS::ADAPTIVE_FUNCTION)
MakePair("SCALABLE_WALL_FUNCTION", WALL_FUNCTIONS::SCALABLE_FUNCTION)
MakePair("EQUILIBRIUM_WALL_MODEL", WALL_FUNCTIONS::EQUILIBRIUM_MODEL)
MakePair("NONEQUILIBRIUM_WALL_MODEL", WALL_FUNCTIONS::NONEQUILIBRIUM_MODEL)
MakePair("LOGARITHMIC_WALL_MODEL", WALL_FUNCTIONS::LOGARITHMIC_MODEL)
};

/*!
Expand Down
30 changes: 16 additions & 14 deletions Common/include/option_structure.inl
Original file line number Diff line number Diff line change
Expand Up @@ -1736,13 +1736,13 @@ class COptionWallFunction : public COptionBase {
string name; // identifier for the option
unsigned short &nMarkers;
string* &markers;
unsigned short* &walltype;
WALL_FUNCTIONS* &walltype;
unsigned short** &intInfo;
su2double** &doubleInfo;

public:
COptionWallFunction(const string name, unsigned short &nMarker_WF,
string* &Marker_WF, unsigned short* &type_WF,
string* &Marker_WF, WALL_FUNCTIONS* &type_WF,
unsigned short** &intInfo_WF, su2double** &doubleInfo_WF) :
nMarkers(nMarker_WF), markers(Marker_WF), walltype(type_WF),
intInfo(intInfo_WF), doubleInfo(doubleInfo_WF) {
Expand Down Expand Up @@ -1774,14 +1774,16 @@ public:
If not, create an error message and return. */
++counter;
const unsigned short indWallType = counter;
unsigned short typeWF = NO_WALL_FUNCTION;
auto typeWF = WALL_FUNCTIONS::NONE;
bool validWF = true;
if (counter == totalSize) validWF = false;
else {
map<string, ENUM_WALL_FUNCTIONS>::const_iterator it;
map<string, WALL_FUNCTIONS>::const_iterator it;
it = Wall_Functions_Map.find(option_value[counter]);
if(it == Wall_Functions_Map.end()) validWF = false;
else typeWF = it->second;
if(it == Wall_Functions_Map.end())
validWF = false;
else
typeWF = it->second;
}

if (!validWF ) {
Expand All @@ -1801,9 +1803,9 @@ public:
must be specified. Hence the counter must be updated
accordingly. ---*/
switch( typeWF ) {
case EQUILIBRIUM_WALL_MODEL: counter += 3; break;
case NONEQUILIBRIUM_WALL_MODEL: counter += 2; break;
case LOGARITHMIC_WALL_MODEL: counter += 3; break;
case WALL_FUNCTIONS::EQUILIBRIUM_MODEL: counter += 3; break;
case WALL_FUNCTIONS::NONEQUILIBRIUM_MODEL: counter += 2; break;
case WALL_FUNCTIONS::LOGARITHMIC_MODEL: counter += 3; break;
default: break;
}

Expand All @@ -1824,7 +1826,7 @@ public:
/* Allocate the memory to store the data for the wall function markers. */
this->nMarkers = nVals;
this->markers = new string[nVals];
this->walltype = new unsigned short[nVals];
this->walltype = new WALL_FUNCTIONS[nVals];
this->intInfo = new unsigned short*[nVals];
this->doubleInfo = new su2double*[nVals];

Expand All @@ -1843,7 +1845,7 @@ public:

/* Determine the wall function type. As their validaties have
already been tested, there is no need to do so again. */
map<string, ENUM_WALL_FUNCTIONS>::const_iterator it;
map<string, WALL_FUNCTIONS>::const_iterator it;
it = Wall_Functions_Map.find(option_value[counter++]);

this->walltype[i] = it->second;
Expand All @@ -1852,7 +1854,7 @@ public:
is needed, which is extracted from option_value. ---*/
switch( this->walltype[i] ) {

case EQUILIBRIUM_WALL_MODEL: {
case WALL_FUNCTIONS::EQUILIBRIUM_MODEL: {

/* LES equilibrium wall model. The exchange distance, stretching
factor and number of points in the wall model must be specified. */
Expand All @@ -1877,7 +1879,7 @@ public:
break;
}

case NONEQUILIBRIUM_WALL_MODEL: {
case WALL_FUNCTIONS::NONEQUILIBRIUM_MODEL: {

/* LES non-equilibrium model. The RANS turbulence model and
the exchange distance need to be specified. */
Expand Down Expand Up @@ -1910,7 +1912,7 @@ public:

break;
}
case LOGARITHMIC_WALL_MODEL: {
case WALL_FUNCTIONS::LOGARITHMIC_MODEL: {

/* LES Logarithmic law-of-the-wall model. The exchange distance, stretching
factor and number of points in the wall model must be specified. */
Expand Down
13 changes: 13 additions & 0 deletions Common/include/toolboxes/geometry_toolbox.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -192,4 +192,17 @@ inline void Rotate(const Scalar R[][nDim], const Scalar* O, const Scalar* d, Sca
}
}

/*! \brief Tangent projection */
template<class Mat, class Scalar, class Int>
inline void TangentProjection(Int nDim, const Mat& tensor, const Scalar* vector, Scalar* proj) {

for (Int iDim = 0; iDim < nDim; iDim++)
proj[iDim] = DotProduct(nDim, tensor[iDim], vector);

auto normalProj = DotProduct(nDim, proj, vector);

for (Int iDim = 0; iDim < nDim; iDim++)
proj[iDim] -= normalProj * vector[iDim];
}

}
18 changes: 11 additions & 7 deletions Common/src/CConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -531,7 +531,7 @@ void CConfig::addActDiskOption(const string & name, unsigned short & nMarker_Act
}

void CConfig::addWallFunctionOption(const string &name, unsigned short &list_size, string* &string_field,
unsigned short* &val_Kind_WF, unsigned short** &val_IntInfo_WF,
WALL_FUNCTIONS* &val_Kind_WF, unsigned short** &val_IntInfo_WF,
su2double** &val_DoubleInfo_WF) {
assert(option_map.find(name) == option_map.end());
all_options.insert(pair<string, bool>(name, true));
Expand Down Expand Up @@ -1223,6 +1223,10 @@ void CConfig::SetConfig_Options() {
addDoubleOption("PRANDTL_LAM", Prandtl_Lam, 0.72);
/*!\brief PRANDTL_TURB \n DESCRIPTION: Turbulent Prandtl number (0.9 (air), only for compressible flows) \n DEFAULT 0.90 \ingroup Config*/
addDoubleOption("PRANDTL_TURB", Prandtl_Turb, 0.90);
/*!\brief WALLMODELKAPPA \n DESCRIPTION: von Karman constant used for the wall model \n DEFAULT 0.41 \ingroup Config*/
addDoubleOption("WALLMODELKAPPA", wallModelKappa, 0.41);
/*!\brief WALLMODELB \n DESCRIPTION: constant B used for the wall model \n DEFAULT 5.0 \ingroup Config*/
addDoubleOption("WALLMODELB", wallModelB, 5.5);
/*!\brief BULK_MODULUS \n DESCRIPTION: Value of the Bulk Modulus \n DEFAULT 1.42E5 \ingroup Config*/
addDoubleOption("BULK_MODULUS", Bulk_Modulus, 1.42E5);
/* DESCRIPTION: Epsilon^2 multipier in Beta calculation for incompressible preconditioner. */
Expand Down Expand Up @@ -3258,13 +3262,13 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i
Wall_Functions = false;
if (nMarker_WallFunctions > 0) {
for (iMarker = 0; iMarker < nMarker_WallFunctions; iMarker++) {
if (Kind_WallFunctions[iMarker] != NO_WALL_FUNCTION)
if (Kind_WallFunctions[iMarker] != WALL_FUNCTIONS::NONE)
Wall_Functions = true;

if ((Kind_WallFunctions[iMarker] == ADAPTIVE_WALL_FUNCTION) || (Kind_WallFunctions[iMarker] == SCALABLE_WALL_FUNCTION)
|| (Kind_WallFunctions[iMarker] == NONEQUILIBRIUM_WALL_MODEL))
if ((Kind_WallFunctions[iMarker] == WALL_FUNCTIONS::ADAPTIVE_FUNCTION) || (Kind_WallFunctions[iMarker] == WALL_FUNCTIONS::SCALABLE_FUNCTION)
|| (Kind_WallFunctions[iMarker] == WALL_FUNCTIONS::NONEQUILIBRIUM_MODEL))

SU2_MPI::Error(string("For RANS problems, use NO_WALL_FUNCTION, STANDARD_WALL_FUNCTION or EQUILIBRIUM_WALL_MODEL.\n"), CURRENT_FUNCTION);
SU2_MPI::Error(string("For RANS problems, use NONE, STANDARD_WALL_FUNCTION or EQUILIBRIUM_WALL_MODEL.\n"), CURRENT_FUNCTION);

}
}
Expand Down Expand Up @@ -8871,9 +8875,9 @@ pair<WALL_TYPE, su2double> CConfig::GetWallRoughnessProperties(string val_marker
return WallProp;
}

unsigned short CConfig::GetWallFunction_Treatment(string val_marker) const {
WALL_FUNCTIONS CConfig::GetWallFunction_Treatment(string val_marker) const {

unsigned short WallFunction = NO_WALL_FUNCTION;
WALL_FUNCTIONS WallFunction = WALL_FUNCTIONS::NONE;

for(unsigned short iMarker=0; iMarker<nMarker_WallFunctions; iMarker++) {
if(Marker_WallFunctions[iMarker] == val_marker) {
Expand Down
8 changes: 4 additions & 4 deletions Common/src/fem/fem_geometry_structure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6128,7 +6128,7 @@ void CMeshFEM_DG::WallFunctionPreprocessing(CConfig *config) {
case ISOTHERMAL:
case HEAT_FLUX: {
const string Marker_Tag = config->GetMarker_All_TagBound(iMarker);
if(config->GetWallFunction_Treatment(Marker_Tag) != NO_WALL_FUNCTION)
if(config->GetWallFunction_Treatment(Marker_Tag) != WALL_FUNCTIONS::NONE)
wallFunctions = true;
break;
}
Expand Down Expand Up @@ -6235,19 +6235,19 @@ void CMeshFEM_DG::WallFunctionPreprocessing(CConfig *config) {
case ISOTHERMAL:
case HEAT_FLUX: {
const string Marker_Tag = config->GetMarker_All_TagBound(iMarker);
if(config->GetWallFunction_Treatment(Marker_Tag) != NO_WALL_FUNCTION) {
if(config->GetWallFunction_Treatment(Marker_Tag) != WALL_FUNCTIONS::NONE) {

/* An LES wall model is used for this boundary marker. Determine
which wall model and allocate the memory for the member variable. */
switch (config->GetWallFunction_Treatment(Marker_Tag) ) {
case EQUILIBRIUM_WALL_MODEL: {
case WALL_FUNCTIONS::EQUILIBRIUM_MODEL: {
if(rank == MASTER_NODE)
cout << "Marker " << Marker_Tag << " uses an Equilibrium Wall Model." << endl;

boundaries[iMarker].wallModel = new CWallModel1DEQ(config, Marker_Tag);
break;
}
case LOGARITHMIC_WALL_MODEL: {
case WALL_FUNCTIONS::LOGARITHMIC_MODEL: {
if(rank == MASTER_NODE)
cout << "Marker " << Marker_Tag << " uses the Reichardt and Kader analytical laws for the Wall Model." << endl;

Expand Down
8 changes: 4 additions & 4 deletions Common/src/fem/geometry_structure_fem_part.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3355,7 +3355,7 @@ void CPhysicalGeometry::DetermineDonorElementsWallFunctions(CConfig *config) {
case ISOTHERMAL:
case HEAT_FLUX: {
const string Marker_Tag = config->GetMarker_All_TagBound(iMarker);
if(config->GetWallFunction_Treatment(Marker_Tag) != NO_WALL_FUNCTION)
if(config->GetWallFunction_Treatment(Marker_Tag) != WALL_FUNCTIONS::NONE)
wallFunctions = true;
break;
}
Expand Down Expand Up @@ -3500,7 +3500,7 @@ void CPhysicalGeometry::DetermineDonorElementsWallFunctions(CConfig *config) {
case ISOTHERMAL:
case HEAT_FLUX: {
const string Marker_Tag = config->GetMarker_All_TagBound(iMarker);
if(config->GetWallFunction_Treatment(Marker_Tag) != NO_WALL_FUNCTION) {
if(config->GetWallFunction_Treatment(Marker_Tag) != WALL_FUNCTIONS::NONE) {

/* Retrieve the floating point information for this boundary marker.
The exchange location is the first element of this array. */
Expand Down Expand Up @@ -3952,7 +3952,7 @@ void CPhysicalGeometry::DetermineDonorElementsWallFunctions(CConfig *config) {
case ISOTHERMAL:
case HEAT_FLUX: {
const string Marker_Tag = config->GetMarker_All_TagBound(iMarker);
if(config->GetWallFunction_Treatment(Marker_Tag) != NO_WALL_FUNCTION) {
if(config->GetWallFunction_Treatment(Marker_Tag) != WALL_FUNCTIONS::NONE) {

for(unsigned long l=0; l<nElem_Bound[iMarker]; ++l)
bound[iMarker][l]->RemoveMultipleDonorsWallFunctions();
Expand Down Expand Up @@ -4825,7 +4825,7 @@ void CPhysicalGeometry::ComputeFEMGraphWeights(
case ISOTHERMAL:
case HEAT_FLUX: {
const string Marker_Tag = config->GetMarker_All_TagBound(iMarker);
if(config->GetWallFunction_Treatment(Marker_Tag) != NO_WALL_FUNCTION) {
if(config->GetWallFunction_Treatment(Marker_Tag) != WALL_FUNCTIONS::NONE) {

/* Retrieve the integer information for this boundary marker.
The number of points in normal direction for the wall function
Expand Down
2 changes: 1 addition & 1 deletion Common/src/wall_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ CWallModel::CWallModel(CConfig *config) {
Pr_lam = config->GetPrandtl_Lam();
Pr_turb = config->GetPrandtl_Turb();

karman = 0.41; // von Karman constant -> k = 0.41; or 0.38;
karman = config->GetwallModelKappa(); // von Karman constant -> k = 0.41; or 0.38;
}

void CWallModel::WallShearStressAndHeatFlux(const su2double rhoExchange,
Expand Down
Loading

0 comments on commit 350fee9

Please sign in to comment.