diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp
index d46efb245478..a4626eb319fc 100644
--- a/Common/include/CConfig.hpp
+++ b/Common/include/CConfig.hpp
@@ -117,6 +117,7 @@ class CConfig {
InvDesign_Cp, /*!< \brief Flag to know if the code is going to compute and plot the inverse design. */
InvDesign_HeatFlux, /*!< \brief Flag to know if the code is going to compute and plot the inverse design. */
Wind_Gust, /*!< \brief Flag to know if there is a wind gust. */
+ Turb_Fixed_Values, /*!< \brief Flag to know if there are fixed values for turbulence quantities in one half-plane. */
Aeroelastic_Simulation, /*!< \brief Flag to know if there is an aeroelastic simulation. */
Weakly_Coupled_Heat, /*!< \brief Flag to know if a heat equation should be weakly coupled to the incompressible solver. */
Rotating_Frame, /*!< \brief Flag to know if there is a rotating frame. */
@@ -921,6 +922,8 @@ class CConfig {
Gust_Ampl, /*!< \brief Gust amplitude. */
Gust_Begin_Time, /*!< \brief Time at which to begin the gust. */
Gust_Begin_Loc; /*!< \brief Location at which the gust begins. */
+ /*! \brief Maximal scalar product of the normed far-field velocity vector and a space coordinate where fixed turbulence quantities are set. */
+ su2double Turb_Fixed_Values_MaxScalarProd;
long Visualize_CV; /*!< \brief Node number for the CV to be visualized */
bool ExtraOutput; /*!< \brief Check if extra output need. */
bool Wall_Functions; /*!< \brief Use wall functions with the turbulence model */
@@ -8051,6 +8054,20 @@ class CConfig {
*/
su2double GetGust_Begin_Loc(void) const { return Gust_Begin_Loc; }
+ /*!
+ * \brief Get whether fixed values for turbulence quantities are applied.
+ * \return TRUE if fixed values are applied; otherwise FALSE.
+ */
+ bool GetTurb_Fixed_Values(void) const { return Turb_Fixed_Values; }
+
+ /*!
+ * \brief Get shift of the upstream half-plane where fixed values for turbulence quantities are applied.
+ * \details This half-plane is given by the condition that the dot product between the
+ * coordinate vector and the normalized far-field velocity vector is less than what this
+ * function returns.
+ */
+ su2double GetTurb_Fixed_Values_MaxScalarProd(void) const { return Turb_Fixed_Values_MaxScalarProd; }
+
/*!
* \brief Get the number of iterations to evaluate the parametric coordinates.
* \return Number of iterations to evaluate the parametric coordinates.
diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp
index c693a48338dd..f98d0a6b7f21 100644
--- a/Common/src/CConfig.cpp
+++ b/Common/src/CConfig.cpp
@@ -2105,6 +2105,12 @@ void CConfig::SetConfig_Options() {
/* DESCRIPTION: Direction of the gust X or Y dir */
addEnumOption("GUST_DIR", Gust_Dir, Gust_Dir_Map, Y_DIR);
+ /* Fixed values for turbulence quantities to keep them at inflow conditions. */
+ /* DESCRIPTION: Fix turbulence quantities to far-field values inside an upstream half-space. */
+ addBoolOption("TURB_FIXED_VALUES", Turb_Fixed_Values, false);
+ /* DESCRIPTION: Shift of the fixed values half-space, in space units in the direction of far-field velocity. */
+ addDoubleOption("TURB_FIXED_VALUES_DOMAIN", Turb_Fixed_Values_MaxScalarProd, numeric_limits::lowest());
+
/* Harmonic Balance config */
/* DESCRIPTION: Omega_HB = 2*PI*frequency - frequencies for Harmonic Balance method */
addDoubleListOption("OMEGA_HB", nOmega_HB, Omega_HB);
@@ -4364,6 +4370,10 @@ void CConfig::SetPostprocessing(unsigned short val_software, unsigned short val_
SU2_MPI::Error("The LM transition model is under maintenance.", CURRENT_FUNCTION);
}
+ if(Turb_Fixed_Values && Turb_Fixed_Values_MaxScalarProd==numeric_limits::lowest()){
+ SU2_MPI::Error("TURB_FIXED_VALUES activated, but no domain set with TURB_FIXED_VALUES_DOMAIN.", CURRENT_FUNCTION);
+ }
+
/*--- Check for constant lift mode. Initialize the update flag for
the AoA with each iteration to false ---*/
diff --git a/SU2_CFD/include/solvers/CSolver.hpp b/SU2_CFD/include/solvers/CSolver.hpp
index 908acc39ec97..547463fd77c9 100644
--- a/SU2_CFD/include/solvers/CSolver.hpp
+++ b/SU2_CFD/include/solvers/CSolver.hpp
@@ -1363,6 +1363,14 @@ class CSolver {
CNumerics *visc_numerics,
CConfig *config,
unsigned short val_marker) { }
+ /*!
+ * \brief Virtual function to apply something like a strong BC to the whole domain.
+ * \details Overridden in CTurbSolver to impose fixed values to turbulence quantities
+ * in a specified upstream half-plane.
+ * \param[in] geometry - Geometrical definition of the problem.
+ * \param[in] config - Definition of the particular problem.
+ */
+ virtual void Impose_Fixed_Values(const CGeometry *geometry, const CConfig *config) { }
/*!
* \brief Get the outer state for fluid interface nodes.
diff --git a/SU2_CFD/include/solvers/CTurbSASolver.hpp b/SU2_CFD/include/solvers/CTurbSASolver.hpp
index 320cc5557153..bb17927d7a1f 100644
--- a/SU2_CFD/include/solvers/CTurbSASolver.hpp
+++ b/SU2_CFD/include/solvers/CTurbSASolver.hpp
@@ -39,7 +39,7 @@
class CTurbSASolver final : public CTurbSolver {
private:
- su2double nu_tilde_Inf, nu_tilde_Engine, nu_tilde_ActDisk;
+ su2double nu_tilde_Engine, nu_tilde_ActDisk;
/*!
* \brief A virtual member.
@@ -365,16 +365,6 @@ class CTurbSASolver final : public CTurbSolver {
unsigned short val_marker,
bool val_inlet_surface) override;
- /*!
- * \brief Set the solution using the Freestream values.
- * \param[in] config - Definition of the particular problem.
- */
- inline void SetFreeStream_Solution(const CConfig *config) override {
- SU2_OMP_FOR_STAT(omp_chunk_size)
- for (unsigned long iPoint = 0; iPoint < nPoint; iPoint++)
- nodes->SetSolution(iPoint, 0, nu_tilde_Inf);
- }
-
/*!
* \brief Store of a set of provided inlet profile values at a vertex.
* \param[in] val_inlet - vector containing the inlet values for the current vertex.
@@ -416,6 +406,6 @@ class CTurbSASolver final : public CTurbSolver {
* \brief Get the value of nu tilde at the far-field.
* \return Value of nu tilde at the far-field.
*/
- inline su2double GetNuTilde_Inf(void) const override { return nu_tilde_Inf; }
+ inline su2double GetNuTilde_Inf(void) const override { return Solution_Inf[0]; }
};
diff --git a/SU2_CFD/include/solvers/CTurbSSTSolver.hpp b/SU2_CFD/include/solvers/CTurbSSTSolver.hpp
index 7d38a8050aa3..b33832d44d68 100644
--- a/SU2_CFD/include/solvers/CTurbSSTSolver.hpp
+++ b/SU2_CFD/include/solvers/CTurbSSTSolver.hpp
@@ -38,9 +38,7 @@
class CTurbSSTSolver final : public CTurbSolver {
private:
su2double
- constants[10] = {0.0}, /*!< \brief Constants for the model. */
- kine_Inf, /*!< \brief Free-stream turbulent kinetic energy. */
- omega_Inf; /*!< \brief Free-stream specific dissipation. */
+ constants[10] = {0.0}; /*!< \brief Constants for the model. */
public:
/*!
@@ -235,18 +233,6 @@ class CTurbSSTSolver final : public CTurbSolver {
*/
inline const su2double* GetConstants() const override { return constants; }
- /*!
- * \brief Set the solution using the Freestream values.
- * \param[in] config - Definition of the particular problem.
- */
- inline void SetFreeStream_Solution(const CConfig *config) override {
- SU2_OMP_FOR_STAT(omp_chunk_size)
- for (unsigned long iPoint = 0; iPoint < nPoint; iPoint++){
- nodes->SetSolution(iPoint, 0, kine_Inf);
- nodes->SetSolution(iPoint, 1, omega_Inf);
- }
- }
-
/*!
* \brief Store of a set of provided inlet profile values at a vertex.
* \param[in] val_inlet - vector containing the inlet values for the current vertex.
@@ -287,12 +273,12 @@ class CTurbSSTSolver final : public CTurbSolver {
* \brief Get the value of the turbulent kinetic energy.
* \return Value of the turbulent kinetic energy.
*/
- inline su2double GetTke_Inf(void) const override { return kine_Inf; }
+ inline su2double GetTke_Inf(void) const override { return Solution_Inf[0]; }
/*!
* \brief Get the value of the turbulent frequency.
* \return Value of the turbulent frequency.
*/
- inline su2double GetOmega_Inf(void) const override { return omega_Inf; }
+ inline su2double GetOmega_Inf(void) const override { return Solution_Inf[1]; }
};
diff --git a/SU2_CFD/include/solvers/CTurbSolver.hpp b/SU2_CFD/include/solvers/CTurbSolver.hpp
index 31882562bcd3..3d51ff1cdce1 100644
--- a/SU2_CFD/include/solvers/CTurbSolver.hpp
+++ b/SU2_CFD/include/solvers/CTurbSolver.hpp
@@ -55,6 +55,8 @@ class CTurbSolver : public CSolver {
Gamma_Minus_One; /*!< \brief Fluids's Gamma - 1.0 . */
vector Inlet_TurbVars; /*!< \brief Turbulence variables at inlet profiles */
+ su2double Solution_Inf[MAXNVAR] = {0.0}; /*!< \brief Far-field solution. */
+
/*--- Sliding meshes variables. ---*/
vector > SlidingState; // vector of matrix of pointers... inner dim alloc'd elsewhere (welcome, to the twilight zone)
@@ -249,6 +251,24 @@ class CTurbSolver : public CSolver {
CNumerics *visc_numerics,
CConfig *config) final;
+ /*!
+ * \brief Set the solution using the Freestream values.
+ * \param[in] config - Definition of the particular problem.
+ */
+ inline void SetFreeStream_Solution(const CConfig *config) final {
+ SU2_OMP_FOR_STAT(omp_chunk_size)
+ for (unsigned long iPoint = 0; iPoint < nPoint; iPoint++){
+ nodes->SetSolution(iPoint, Solution_Inf);
+ }
+ }
+
+ /*!
+ * \brief Impose fixed values to turbulence quantities.
+ * \details Turbulence quantities are set to far-field values in an upstream half-plane
+ * in order to keep them from decaying.
+ */
+ void Impose_Fixed_Values(const CGeometry *geometry, const CConfig *config) final;
+
/*!
* \brief Prepare an implicit iteration.
* \param[in] geometry - Geometrical definition of the problem.
diff --git a/SU2_CFD/src/integration/CIntegration.cpp b/SU2_CFD/src/integration/CIntegration.cpp
index b75163c1af17..84fcb8f2a5a4 100644
--- a/SU2_CFD/src/integration/CIntegration.cpp
+++ b/SU2_CFD/src/integration/CIntegration.cpp
@@ -146,6 +146,9 @@ void CIntegration::Space_Integration(CGeometry *geometry,
}
}
+ /*--- Modification of the system on the whole domain, like for a strong BC. ---*/
+ solver_container[MainSolver]->Impose_Fixed_Values(geometry, config);
+
/*--- Strong boundary conditions (Navier-Stokes and Dirichlet type BCs) ---*/
for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++)
diff --git a/SU2_CFD/src/solvers/CTurbSASolver.cpp b/SU2_CFD/src/solvers/CTurbSASolver.cpp
index a4444824e191..e28cd8269e34 100644
--- a/SU2_CFD/src/solvers/CTurbSASolver.cpp
+++ b/SU2_CFD/src/solvers/CTurbSASolver.cpp
@@ -113,11 +113,13 @@ CTurbSASolver::CTurbSASolver(CGeometry *geometry, CConfig *config, unsigned shor
/*--- Factor_nu_Inf in [3.0, 5.0] ---*/
Factor_nu_Inf = config->GetNuFactor_FreeStream();
- nu_tilde_Inf = Factor_nu_Inf*Viscosity_Inf/Density_Inf;
+ su2double nu_tilde_Inf = Factor_nu_Inf*Viscosity_Inf/Density_Inf;
if (config->GetKind_Trans_Model() == BC) {
nu_tilde_Inf = 0.005*Factor_nu_Inf*Viscosity_Inf/Density_Inf;
}
+ Solution_Inf[0] = nu_tilde_Inf;
+
/*--- Factor_nu_Engine ---*/
Factor_nu_Engine = config->GetNuFactor_Engine();
nu_tilde_Engine = Factor_nu_Engine*Viscosity_Inf/Density_Inf;
@@ -513,7 +515,7 @@ void CTurbSASolver::BC_Far_Field(CGeometry *geometry, CSolver **solver_container
/*--- Set turbulent variable at the wall, and at infinity ---*/
- conv_numerics->SetTurbVar(nodes->GetSolution(iPoint), &nu_tilde_Inf);
+ conv_numerics->SetTurbVar(nodes->GetSolution(iPoint), Solution_Inf);
/*--- Set Normal (it is necessary to change the sign) ---*/
@@ -1957,7 +1959,7 @@ su2double CTurbSASolver::GetInletAtVertex(su2double *val_inlet,
void CTurbSASolver::SetUniformInlet(const CConfig* config, unsigned short iMarker) {
for(unsigned long iVertex=0; iVertex < nVertex[iMarker]; iVertex++){
- Inlet_TurbVars[iMarker][iVertex][0] = nu_tilde_Inf;
+ Inlet_TurbVars[iMarker][iVertex][0] = GetNuTilde_Inf();
}
}
diff --git a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp
index 757fc0043c9f..834e2f9bfe2c 100644
--- a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp
+++ b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp
@@ -130,8 +130,11 @@ CTurbSSTSolver::CTurbSSTSolver(CGeometry *geometry, CConfig *config, unsigned sh
su2double VelMag2 = GeometryToolbox::SquaredNorm(nDim, VelInf);
- kine_Inf = 3.0/2.0*(VelMag2*Intensity*Intensity);
- omega_Inf = rhoInf*kine_Inf/(muLamInf*viscRatio);
+ su2double kine_Inf = 3.0/2.0*(VelMag2*Intensity*Intensity);
+ su2double omega_Inf = rhoInf*kine_Inf/(muLamInf*viscRatio);
+
+ Solution_Inf[0] = kine_Inf;
+ Solution_Inf[1] = omega_Inf;
/*--- Eddy viscosity, initialized without stress limiter at the infinity ---*/
muT_Inf = rhoInf*kine_Inf/omega_Inf;
@@ -473,9 +476,7 @@ void CTurbSSTSolver::BC_Far_Field(CGeometry *geometry, CSolver **solver_containe
/*--- Set turbulent variable at the wall, and at infinity ---*/
- su2double solution_j[] = {kine_Inf, omega_Inf};
-
- conv_numerics->SetTurbVar(nodes->GetSolution(iPoint), solution_j);
+ conv_numerics->SetTurbVar(nodes->GetSolution(iPoint), Solution_Inf);
/*--- Set Normal (it is necessary to change the sign) ---*/
@@ -959,8 +960,8 @@ su2double CTurbSSTSolver::GetInletAtVertex(su2double *val_inlet,
void CTurbSSTSolver::SetUniformInlet(const CConfig* config, unsigned short iMarker) {
for(unsigned long iVertex=0; iVertex < nVertex[iMarker]; iVertex++){
- Inlet_TurbVars[iMarker][iVertex][0] = kine_Inf;
- Inlet_TurbVars[iMarker][iVertex][1] = omega_Inf;
+ Inlet_TurbVars[iMarker][iVertex][0] = GetTke_Inf();
+ Inlet_TurbVars[iMarker][iVertex][1] = GetOmega_Inf();
}
}
diff --git a/SU2_CFD/src/solvers/CTurbSolver.cpp b/SU2_CFD/src/solvers/CTurbSolver.cpp
index 5aa0e8ae2a8a..0c0859c5272a 100644
--- a/SU2_CFD/src/solvers/CTurbSolver.cpp
+++ b/SU2_CFD/src/solvers/CTurbSolver.cpp
@@ -80,6 +80,7 @@ CTurbSolver::~CTurbSolver(void) {
}
delete nodes;
+
}
void CTurbSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_container,
@@ -508,6 +509,41 @@ void CTurbSolver::BC_Fluid_Interface(CGeometry *geometry, CSolver **solver_conta
}
+void CTurbSolver::Impose_Fixed_Values(const CGeometry *geometry, const CConfig *config){
+
+ /*--- Check whether turbulence quantities are fixed to far-field values on a half-plane. ---*/
+ if(config->GetTurb_Fixed_Values()){
+
+ const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT);
+
+ /*--- Form normalized far-field velocity ---*/
+ const su2double* velocity_inf = config->GetVelocity_FreeStreamND();
+ su2double velmag_inf = GeometryToolbox::Norm(nDim, velocity_inf);
+ if(velmag_inf==0)
+ SU2_MPI::Error("Far-field velocity is zero, cannot fix turbulence quantities to inflow values.", CURRENT_FUNCTION);
+ su2double unit_velocity_inf[MAXNDIM];
+ for(unsigned short iDim=0; iDimnodes->GetCoord(iPoint), unit_velocity_inf)
+ < config->GetTurb_Fixed_Values_MaxScalarProd() ) {
+ /*--- Set the solution values and zero the residual ---*/
+ nodes->SetSolution_Old(iPoint, Solution_Inf);
+ nodes->SetSolution(iPoint, Solution_Inf);
+ LinSysRes.SetBlock_Zero(iPoint);
+ if (implicit) {
+ /*--- Change rows of the Jacobian (includes 1 in the diagonal) ---*/
+ for(unsigned long iVar=0; iVarGetNodes();
diff --git a/TestCases/rans/naca0012/turb_NACA0012_sst_fixedvalues.cfg b/TestCases/rans/naca0012/turb_NACA0012_sst_fixedvalues.cfg
new file mode 100644
index 000000000000..cc9fca832b5f
--- /dev/null
+++ b/TestCases/rans/naca0012/turb_NACA0012_sst_fixedvalues.cfg
@@ -0,0 +1,260 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: upstream turbulence quantities fixed to far-field value %
+% Date: Mar 17th, 2021 %
+% File Version 7.1.1 "Blackbird" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
+%
+% Physical governing equations (EULER, NAVIER_STOKES,
+% WAVE_EQUATION, HEAT_EQUATION, FEM_ELASTICITY,
+% POISSON_EQUATION)
+SOLVER= RANS
+%
+% Specify turbulent model (NONE, SA, SA_NEG, SST)
+KIND_TURB_MODEL= SST
+%
+% Mathematical problem (DIRECT, CONTINUOUS_ADJOINT)
+MATH_PROBLEM= DIRECT
+%
+% Restart solution (NO, YES)
+RESTART_SOL= NO
+%
+% Read binary restart files (YES, NO)
+READ_BINARY_RESTART= NO
+%
+
+% -------------------- COMPRESSIBLE FREE-STREAM DEFINITION --------------------%
+%
+% Mach number (non-dimensional, based on the free-stream values)
+MACH_NUMBER= 0.15
+%
+% Angle of attack (degrees, only for compressible flows)
+AOA= 10.0
+%
+% Free-stream temperature (288.15 K by default)
+FREESTREAM_TEMPERATURE= 300.0
+%
+% Reynolds number (non-dimensional, based on the free-stream values)
+REYNOLDS_NUMBER= 6.0E6
+%
+% Reynolds length (1 m by default)
+REYNOLDS_LENGTH= 1.0
+%
+% Free-stream turbulence intensity
+FREESTREAM_TURBULENCEINTENSITY= 0.0008165
+%
+% Free-stream ratio between turbulent and laminar viscosity
+FREESTREAM_TURB2LAMVISCRATIO= 1.2
+%
+% Fix turbulence quantities to far-field values at some upstream half-space
+TURB_FIXED_VALUES= YES
+%
+% Shift of the fixed values half-space in unit far-field velocity vectors
+TURB_FIXED_VALUES_DOMAIN= -1.0
+
+% ---------------------- REFERENCE VALUE DEFINITION ---------------------------%
+%
+% Reference origin for moment computation
+REF_ORIGIN_MOMENT_X = 0.25
+REF_ORIGIN_MOMENT_Y = 0.00
+REF_ORIGIN_MOMENT_Z = 0.00
+%
+% Reference length for pitching, rolling, and yawing non-dimensional moment
+REF_LENGTH= 1.0
+%
+% Reference area for force coefficients (0 implies automatic calculation)
+REF_AREA= 1.0
+%
+% Flow non-dimensionalization (DIMENSIONAL, FREESTREAM_PRESS_EQ_ONE,
+% FREESTREAM_VEL_EQ_MACH, FREESTREAM_VEL_EQ_ONE)
+REF_DIMENSIONALIZATION= FREESTREAM_PRESS_EQ_ONE
+
+% -------------------- BOUNDARY CONDITION DEFINITION --------------------------%
+%
+% Navier-Stokes wall boundary marker(s) (NONE = no marker)
+MARKER_HEATFLUX= ( airfoil, 0.0 )
+%
+% Farfield boundary marker(s) (NONE = no marker)
+MARKER_FAR= ( farfield )
+%
+% Marker(s) of the surface to be plotted or designed
+MARKER_PLOTTING= ( airfoil )
+%
+% Marker(s) of the surface where the functional (Cd, Cl, etc.) will be evaluated
+MARKER_MONITORING= ( airfoil )
+
+% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
+%
+% Numerical method for spatial gradients (GREEN_GAUSS, WEIGHTED_LEAST_SQUARES)
+NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES
+NUM_METHOD_GRAD_RECON= LEAST_SQUARES
+%
+% Courant-Friedrichs-Lewy condition of the finest grid
+CFL_NUMBER= 1000.0
+%
+% Max Delta time
+MAX_DELTA_TIME= 1E10
+%
+% Adaptive CFL number (NO, YES)
+CFL_ADAPT= NO
+%
+% Parameters of the adaptive CFL number (factor down, factor up, CFL min value,
+% CFL max value )
+CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 )
+%
+% Number of total iterations
+ITER= 99999
+
+% ----------------------- SLOPE LIMITER DEFINITION ----------------------------%
+%
+% Coefficient for the limiter
+VENKAT_LIMITER_COEFF= 0.03
+%
+% Freeze the value of the limiter after a number of iterations
+LIMITER_ITER= 99999
+
+% ------------------------ LINEAR SOLVER DEFINITION ---------------------------%
+%
+% Linear solver or smoother for implicit formulations (BCGSTAB, FGMRES, SMOOTHER)
+LINEAR_SOLVER= FGMRES
+%
+% Preconditioner of the Krylov linear solver (ILU, LU_SGS, LINELET, JACOBI)
+LINEAR_SOLVER_PREC= ILU
+%
+% Minimum error of the linear solver for implicit formulations
+LINEAR_SOLVER_ERROR= 1E-10
+%
+% Max number of iterations of the linear solver for the implicit formulation
+LINEAR_SOLVER_ITER= 20
+
+% -------------------------- MULTIGRID PARAMETERS -----------------------------%
+%
+% Multi-Grid Levels (0 = no multi-grid)
+MGLEVEL= 0
+%
+% Multigrid pre-smoothing level
+MG_PRE_SMOOTH= ( 1, 1, 1, 1, 1, 1 )
+%
+% Multigrid post-smoothing level
+MG_POST_SMOOTH= ( 0, 0, 0, 0, 0, 0 )
+%
+% Jacobi implicit smoothing of the correction
+MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0, 0, 0 )
+%
+% Damping factor for the residual restriction
+MG_DAMP_RESTRICTION= 0.75
+%
+% Damping factor for the correction prolongation
+MG_DAMP_PROLONGATION= 0.75
+
+% -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------%
+%
+% Convective numerical method (JST, LAX-FRIEDRICH, CUSP, ROE, AUSM, HLLC,
+% TURKEL_PREC, MSW)
+CONV_NUM_METHOD_FLOW= ROE
+USE_VECTORIZATION= YES
+%
+% Spatial numerical order integration (1ST_ORDER, 2ND_ORDER, 2ND_ORDER_LIMITER)
+MUSCL_FLOW= YES
+%
+% Slope limiter (VENKATAKRISHNAN, MINMOD)
+SLOPE_LIMITER_FLOW= NONE
+%
+% 2nd and 4th order artificial dissipation coefficients
+JST_SENSOR_COEFF= ( 0.5, 0.02 )
+%
+% Time discretization (RUNGE-KUTTA_EXPLICIT, EULER_IMPLICIT, EULER_EXPLICIT)
+TIME_DISCRE_FLOW= EULER_IMPLICIT
+
+% -------------------- TURBULENT NUMERICAL METHOD DEFINITION ------------------%
+%
+% Convective numerical method (SCALAR_UPWIND)
+CONV_NUM_METHOD_TURB= SCALAR_UPWIND
+%
+% Monotonic Upwind Scheme for Conservation Laws (TVD) in the turbulence equations.
+% Required for 2nd order upwind schemes (NO, YES)
+MUSCL_TURB= NO
+%
+% Slope limiter (VENKATAKRISHNAN, MINMOD)
+SLOPE_LIMITER_TURB= NONE
+%
+% Time discretization (EULER_IMPLICIT)
+TIME_DISCRE_TURB= EULER_IMPLICIT
+%
+% Reduction factor of the CFL coefficient in the turbulence problem
+CFL_REDUCTION_TURB= 1.0
+
+% --------------------------- CONVERGENCE PARAMETERS --------------------------%
+%
+% Convergence criteria (CAUCHY, RESIDUAL)
+%
+CONV_CRITERIA= RESIDUAL
+%
+% Min value of the residual (log10 of the residual)
+CONV_RESIDUAL_MINVAL= -12
+%
+% Start convergence criteria at iteration number
+CONV_STARTITER= 10
+%
+% Number of elements to apply the criteria
+CONV_CAUCHY_ELEMS= 100
+%
+% Epsilon to control the series convergence
+CONV_CAUCHY_EPS= 1E-6
+%
+
+% ------------------------- INPUT/OUTPUT INFORMATION --------------------------%
+%
+% Mesh input file
+MESH_FILENAME= n0012_113-33.su2
+%
+% Mesh input file format (SU2, CGNS, NETCDF_ASCII)
+MESH_FORMAT= SU2
+%
+% Mesh output file
+MESH_OUT_FILENAME= mesh_out.su2
+%
+% Restart flow input file
+SOLUTION_FILENAME= solution_flow_sst.dat
+%
+% Restart adjoint input file
+SOLUTION_ADJ_FILENAME= solution_adj.dat
+%
+% Output file format (PARAVIEW, TECPLOT, STL)
+TABULAR_FORMAT= CSV
+%
+% Output file convergence history (w/o extension)
+CONV_FILENAME= history
+%
+% Output file restart flow
+RESTART_FILENAME= restart_flow.dat
+%
+% Output file restart adjoint
+RESTART_ADJ_FILENAME= restart_adj.dat
+%
+% Output file flow (w/o extension) variables
+VOLUME_FILENAME= flow
+%
+% Output file adjoint (w/o extension) variables
+VOLUME_ADJ_FILENAME= adjoint
+%
+% Output objective function gradient (using continuous adjoint)
+GRAD_OBJFUNC_FILENAME= of_grad.dat
+%
+% Output file surface flow coefficient (w/o extension)
+SURFACE_FILENAME= surface_flow
+%
+% Output file surface adjoint coefficient (w/o extension)
+SURFACE_ADJ_FILENAME= surface_adjoint
+%
+% Writing solution file frequency
+OUTPUT_WRT_FREQ= 10000
+%
+%
+% Screen output fields
+SCREEN_OUTPUT= (INNER_ITER, RMS_DENSITY, RMS_TKE, RMS_DISSIPATION, LIFT, DRAG)
+OUTPUT_FILES= (RESTART_ASCII, PARAVIEW, SURFACE_PARAVIEW)
diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py
index 0b0a36e31b9d..badce6488e1d 100644
--- a/TestCases/serial_regression.py
+++ b/TestCases/serial_regression.py
@@ -363,6 +363,17 @@ def main():
turb_naca0012_sst_sust.tol = 0.00001
test_list.append(turb_naca0012_sst_sust)
+ # NACA0012 (SST, fixed values for turbulence quantities)
+ turb_naca0012_sst_fixedvalues = TestCase('turb_naca0012_sst_fixedvalues')
+ turb_naca0012_sst_fixedvalues.cfg_dir = "rans/naca0012"
+ turb_naca0012_sst_fixedvalues.cfg_file = "turb_NACA0012_sst_fixedvalues.cfg"
+ turb_naca0012_sst_fixedvalues.test_iter = 10
+ turb_naca0012_sst_fixedvalues.test_vals = [-9.562435, -1.566603, 1.022029, 0.040549]
+ turb_naca0012_sst_fixedvalues.su2_exec = "SU2_CFD"
+ turb_naca0012_sst_fixedvalues.timeout = 3200
+ turb_naca0012_sst_fixedvalues.tol = 0.00001
+ test_list.append(turb_naca0012_sst_fixedvalues)
+
# PROPELLER
propeller = TestCase('propeller')
propeller.cfg_dir = "rans/propeller"
diff --git a/config_template.cfg b/config_template.cfg
index 949004c7d4e6..245c78c05414 100644
--- a/config_template.cfg
+++ b/config_template.cfg
@@ -192,6 +192,12 @@ FREESTREAM_VISCOSITY= 1.853E-5
% Free-stream turbulence intensity
FREESTREAM_TURBULENCEINTENSITY= 0.05
%
+% Fix turbulence quantities to far-field values inside an upstream half-space
+TURB_FIXED_VALUES= NO
+%
+% Shift of the fixed values half-space, in space units in the direction of far-field velocity
+TURB_FIXED_VALUES_DOMAIN= -1.0
+%
% Free-stream ratio between turbulent and laminar viscosity
FREESTREAM_TURB2LAMVISCRATIO= 10.0
%