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 %