diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index 084fc3e487c1..96d5fbd3d9ea 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -591,6 +591,7 @@ class CConfig { MUSCL_AdjTurb; /*!< \brief MUSCL scheme for the adj turbulence equations.*/ bool MUSCL_Species; /*!< \brief MUSCL scheme for the species equations.*/ bool Use_Accurate_Jacobians; /*!< \brief Use numerically computed Jacobians for AUSM+up(2) and SLAU(2). */ + bool Use_Accurate_Turb_Jacobians; /*!< \brief Use numerically computed Jacobians for standard SA turbulence model. */ bool EulerPersson; /*!< \brief Boolean to determine whether this is an Euler simulation with Persson shock capturing. */ bool FSI_Problem = false,/*!< \brief Boolean to determine whether the simulation is FSI or not. */ Multizone_Problem; /*!< \brief Boolean to determine whether we are solving a multizone problem. */ @@ -4516,6 +4517,12 @@ class CConfig { */ bool GetUse_Accurate_Jacobians(void) const { return Use_Accurate_Jacobians; } + /*! + * \brief Get whether to "Use Accurate Jacobians" for Standard SA turbulence model. + * \return yes/no. + */ + bool GetUse_Accurate_Turb_Jacobians(void) const { return Use_Accurate_Turb_Jacobians; } + /*! * \brief Get the kind of integration scheme (explicit or implicit) * for the flow equations. diff --git a/Common/include/linear_algebra/CSysMatrix.hpp b/Common/include/linear_algebra/CSysMatrix.hpp index 7d0e87b92e35..d3212e7a9f5f 100644 --- a/Common/include/linear_algebra/CSysMatrix.hpp +++ b/Common/include/linear_algebra/CSysMatrix.hpp @@ -553,6 +553,22 @@ class CSysMatrix { SetBlock(block_i, block_j, val_block, alpha); } + /*! + * \brief Returns the 4 blocks ii, ij, ji, jj used by "UpdateBlocks". + * \note This method assumes an FVM-type sparse pattern. + * \param[in] edge - Index of edge that connects iPoint and jPoint. + * \param[in] iPoint - Row to which we add the blocks. + * \param[in] jPoint - Row from which we subtract the blocks. + * \param[out] bii, bij, bji, bjj - Blocks of the matrix. + */ + inline void GetBlocks(unsigned long iEdge, unsigned long iPoint, unsigned long jPoint, ScalarType*& bii, + ScalarType*& bij, ScalarType*& bji, ScalarType*& bjj) { + bii = &matrix[dia_ptr[iPoint] * nVar * nEqn]; + bjj = &matrix[dia_ptr[jPoint] * nVar * nEqn]; + bij = &matrix[edge_ptr(iEdge, 0) * nVar * nEqn]; + bji = &matrix[edge_ptr(iEdge, 1) * nVar * nEqn]; + } + /*! * \brief Update 4 blocks ii, ij, ji, jj (add to i* sub from j*). * \note This method assumes an FVM-type sparse pattern. @@ -566,10 +582,8 @@ class CSysMatrix { template inline void UpdateBlocks(unsigned long iEdge, unsigned long iPoint, unsigned long jPoint, const MatrixType& block_i, const MatrixType& block_j, OtherType scale = 1) { - ScalarType* bii = &matrix[dia_ptr[iPoint] * nVar * nEqn]; - ScalarType* bjj = &matrix[dia_ptr[jPoint] * nVar * nEqn]; - ScalarType* bij = &matrix[edge_ptr(iEdge, 0) * nVar * nEqn]; - ScalarType* bji = &matrix[edge_ptr(iEdge, 1) * nVar * nEqn]; + ScalarType *bii, *bij, *bji, *bjj; + GetBlocks(iEdge, iPoint, jPoint, bii, bij, bji, bjj); unsigned long iVar, jVar, offset = 0; diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index 0d9e4a1fdd60..f70eae2bcbfa 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -2006,6 +2006,8 @@ void CConfig::SetConfig_Options() { /*!\brief CONV_NUM_METHOD_TURB * \n DESCRIPTION: Convective numerical method \ingroup Config*/ addConvectOption("CONV_NUM_METHOD_TURB", Kind_ConvNumScheme_Turb, Kind_Centered_Turb, Kind_Upwind_Turb); + /*!\brief USE_ACCURATE_TURB_JACOBIANS \n DESCRIPTION: Use numerically computed Jacobians for Standard SA model \ingroup Config*/ + addBoolOption("USE_ACCURATE_TURB_JACOBIANS", Use_Accurate_Turb_Jacobians, false); /*!\brief MUSCL_ADJTURB \n DESCRIPTION: Check if the MUSCL scheme should be used \ingroup Config*/ addBoolOption("MUSCL_ADJTURB", MUSCL_AdjTurb, false); diff --git a/SU2_CFD/include/numerics/turbulent/turb_diffusion.hpp b/SU2_CFD/include/numerics/turbulent/turb_diffusion.hpp index b8edcd9007a7..2977b0343c88 100644 --- a/SU2_CFD/include/numerics/turbulent/turb_diffusion.hpp +++ b/SU2_CFD/include/numerics/turbulent/turb_diffusion.hpp @@ -52,6 +52,9 @@ class CAvgGrad_TurbSA final : public CAvgGrad_Scalar { using Base::Jacobian_j; const su2double sigma = 2.0/3.0; + const su2double cb2 = 0.622; + + const bool use_accurate_jacobians; /*! * \brief Adds any extra variables to AD @@ -67,17 +70,39 @@ class CAvgGrad_TurbSA final : public CAvgGrad_Scalar { /*--- Compute mean effective viscosity ---*/ + /*--- First Term. Normal diffusion, and conservative part of the quadratic diffusion. + * ||grad nu_t||^2 = div(nu_t grad nu_t) - nu_t div grad nu_t ---*/ const su2double nu_i = Laminar_Viscosity_i/Density_i; const su2double nu_j = Laminar_Viscosity_j/Density_j; - const su2double nu_e = 0.5*(nu_i+nu_j+ScalarVar_i[0]+ScalarVar_j[0]); + const su2double nu_e = 0.5 * (nu_i + nu_j + (1 + cb2) * (ScalarVar_i[0] + ScalarVar_j[0])); + const su2double term_1 = nu_e; - Flux[0] = nu_e*Proj_Mean_GradScalarVar[0]/sigma; + /* Second Term (quadratic diffusion, non conservative). */ + const su2double nu_tilde_i = ScalarVar_i[0]; + const su2double term_2 = cb2 * nu_tilde_i; - /*--- For Jacobians -> Use of TSL approx. to compute derivatives of the gradients ---*/ + const su2double diffusion_coefficient = term_1 - term_2; + Flux[0] = diffusion_coefficient * Proj_Mean_GradScalarVar[0] / sigma; if (implicit) { - Jacobian_i[0][0] = (0.5*Proj_Mean_GradScalarVar[0]-nu_e*proj_vector_ij)/sigma; - Jacobian_j[0][0] = (0.5*Proj_Mean_GradScalarVar[0]+nu_e*proj_vector_ij)/sigma; + /*--- For Jacobians -> Use of TSL approx. to compute derivatives of the gradients ---*/ + Jacobian_i[0][0] = -diffusion_coefficient * proj_vector_ij / sigma; + Jacobian_j[0][0] = diffusion_coefficient * proj_vector_ij / sigma; + + if (use_accurate_jacobians) { + /*--- The diffusion coefficient is also a function of nu_t. ---*/ + const su2double dTerm1_dnut_i = (1 + cb2) * 0.5; + const su2double dTerm1_dnut_j = (1 + cb2) * 0.5; + + const su2double dTerm2_dnut_i = cb2; + const su2double dTerm2_dnut_j = 0.0; + + const su2double dDC_dnut_i = dTerm1_dnut_i - dTerm2_dnut_i; + const su2double dDC_dnut_j = dTerm1_dnut_j - dTerm2_dnut_j; + + Jacobian_i[0][0] += dDC_dnut_i * Proj_Mean_GradScalarVar[0] / sigma; + Jacobian_j[0][0] += dDC_dnut_j * Proj_Mean_GradScalarVar[0] / sigma; + } } } @@ -91,7 +116,8 @@ class CAvgGrad_TurbSA final : public CAvgGrad_Scalar { */ CAvgGrad_TurbSA(unsigned short val_nDim, unsigned short val_nVar, bool correct_grad, const CConfig* config) - : CAvgGrad_Scalar(val_nDim, val_nVar, correct_grad, config) {} + : CAvgGrad_Scalar(val_nDim, val_nVar, correct_grad, config), + use_accurate_jacobians(config->GetUse_Accurate_Turb_Jacobians()) {} }; /*! @@ -118,6 +144,7 @@ class CAvgGrad_TurbSA_Neg final : public CAvgGrad_Scalar { const su2double sigma = 2.0/3.0; const su2double cn1 = 16.0; + const su2double cb2 = 0.622; /*! * \brief Adds any extra variables to AD @@ -136,27 +163,39 @@ class CAvgGrad_TurbSA_Neg final : public CAvgGrad_Scalar { const su2double nu_i = Laminar_Viscosity_i/Density_i; const su2double nu_j = Laminar_Viscosity_j/Density_j; - const su2double nu_ij = 0.5*(nu_i+nu_j); - const su2double nu_tilde_ij = 0.5*(ScalarVar_i[0] + ScalarVar_j[0]); - - su2double nu_e; - - if (nu_tilde_ij > 0.0) { - nu_e = nu_ij + nu_tilde_ij; - } - else { - const su2double Xi = nu_tilde_ij/nu_ij; - const su2double fn = (cn1 + Xi*Xi*Xi)/(cn1 - Xi*Xi*Xi); - nu_e = nu_ij + fn*nu_tilde_ij; + const su2double nu_ij = 0.5 * (nu_i + nu_j); + const su2double nu_tilde_i = ScalarVar_i[0]; + const su2double nu_tilde_j = ScalarVar_j[0]; + const su2double nu_tilde_ij = 0.5 * (nu_tilde_i + nu_tilde_j); + + /*--- Following Diskin's implementation from 10.2514/1.J064629, they propose a new fn function + * to be evaluated at the cell to maintain positivity in the diffusion coefficient, which is + * used in both terms. The new fn term averaged across the face reverts to the original fn + * function. ---*/ + + /*--- Second Term (LHS) ---*/ + const su2double zeta_i = ((1 + cb2) * nu_tilde_ij - cb2 * nu_tilde_i) / nu_ij; + su2double fn_i = 1.0; + if (zeta_i < 0.0) { + fn_i = (cn1 + pow(zeta_i,3)) / (cn1 - pow(zeta_i,3)); } - Flux[0] = nu_e*Proj_Mean_GradScalarVar[0]/sigma; + const su2double term_1 = (nu_ij + (1 + cb2) * nu_tilde_ij * fn_i); + const su2double term_2 = cb2 * nu_tilde_i * fn_i; + Flux[0] = (term_1 - term_2) * Proj_Mean_GradScalarVar[0] / sigma; - /*--- For Jacobians -> Use of TSL approx. to compute derivatives of the gradients ---*/ + /*--- For Jacobians -> Use of TSL approx. to compute derivatives of the gradients + * Exact Jacobians were tested on multiple cases but resulted in divergence of all + * simulations, hence only frozen diffusion coefficient (approximate) Jacobians are used. ---*/ if (implicit) { - Jacobian_i[0][0] = (0.5*Proj_Mean_GradScalarVar[0]-nu_e*proj_vector_ij)/sigma; - Jacobian_j[0][0] = (0.5*Proj_Mean_GradScalarVar[0]+nu_e*proj_vector_ij)/sigma; + const su2double diffusion_coefficient = (term_1 - term_2); + + const su2double dGrad_dnut_i = -proj_vector_ij; + const su2double dGrad_dnut_j = proj_vector_ij; + + Jacobian_i[0][0] = diffusion_coefficient * dGrad_dnut_i / sigma; + Jacobian_j[0][0] = diffusion_coefficient * dGrad_dnut_j / sigma; } } diff --git a/SU2_CFD/include/numerics/turbulent/turb_sources.hpp b/SU2_CFD/include/numerics/turbulent/turb_sources.hpp index 4fa9080e1ad5..1ab24ac6fae4 100644 --- a/SU2_CFD/include/numerics/turbulent/turb_sources.hpp +++ b/SU2_CFD/include/numerics/turbulent/turb_sources.hpp @@ -86,7 +86,7 @@ class CSourceBase_TurbSA : public CNumerics { */ inline void ResidualAxisymmetricDiffusion(su2double sigma) { if (Coord_i[1] < EPS) return; - + const su2double yinv = 1.0 / Coord_i[1]; const su2double& nue = ScalarVar_i[0]; @@ -243,14 +243,14 @@ class CSourceBase_TurbSA : public CNumerics { var.interDestrFactor = 1.0; } - /*--- Compute production, destruction and cross production and jacobian ---*/ - su2double Production = 0.0, Destruction = 0.0, CrossProduction = 0.0; - SourceTerms::get(ScalarVar_i[0], var, Production, Destruction, CrossProduction, Jacobian_i[0]); + /*--- Compute production, destruction and jacobian ---*/ + su2double Production = 0.0, Destruction = 0.0; + SourceTerms::get(ScalarVar_i[0], var, Production, Destruction, Jacobian_i[0]); - Residual = (Production - Destruction + CrossProduction) * Volume; + Residual = (Production - Destruction) * Volume; if (axisymmetric) ResidualAxisymmetricDiffusion(var.sigma); - + Jacobian_i[0] *= Volume; } @@ -423,13 +423,13 @@ struct Edw { }; /*! - * \brief SA source terms classes: production, destruction and cross-productions term and their derivative. + * \brief SA source terms classes: production and destruction term and their derivative. + * \note Quadratic diffusion is included in the viscous fluxes. * \ingroup SourceDiscr * \param[in] nue: SA variable. * \param[in] var: Common SA variables struct. * \param[out] production: Production term. * \param[out] destruction: Destruction term. - * \param[out] cross_production: CrossProduction term. * \param[out] jacobian: Derivative of the combined source term wrt nue. */ struct SourceTerms { @@ -437,10 +437,9 @@ struct SourceTerms { /*! \brief Baseline (Original SA model). */ struct Bsl { static void get(const su2double& nue, const CSAVariables& var, su2double& production, su2double& destruction, - su2double& cross_production, su2double& jacobian) { + su2double& jacobian) { ComputeProduction(nue, var, production, jacobian); ComputeDestruction(nue, var, destruction, jacobian); - ComputeCrossProduction(nue, var, cross_production, jacobian); } static void ComputeProduction(const su2double& nue, const CSAVariables& var, su2double& production, @@ -458,23 +457,17 @@ struct Bsl { jacobian -= var.interDestrFactor * ((var.cw1 * var.d_fw - cb1_k2 * var.d_ft2) * pow(nue, 2) + factor * 2 * nue) / var.dist_i_2; } - static void ComputeCrossProduction(const su2double& nue, const CSAVariables& var, su2double& cross_production, - su2double&) { - cross_production = var.cb2_sigma * var.norm2_Grad; - /*--- No contribution to the jacobian. ---*/ - } }; /*! \brief Negative. */ struct Neg { static void get(const su2double& nue, const CSAVariables& var, su2double& production, su2double& destruction, - su2double& cross_production, su2double& jacobian) { + su2double& jacobian) { if (nue > 0.0) { - Bsl::get(nue, var, production, destruction, cross_production, jacobian); + Bsl::get(nue, var, production, destruction, jacobian); } else { ComputeProduction(nue, var, production, jacobian); ComputeDestruction(nue, var, destruction, jacobian); - ComputeCrossProduction(nue, var, cross_production, jacobian); } } @@ -493,10 +486,6 @@ struct Neg { jacobian -= 2 * dD_dnu * var.interDestrFactor; } - static void ComputeCrossProduction(const su2double& nue, const CSAVariables& var, su2double& cross_production, - su2double& jacobian) { - Bsl::ComputeCrossProduction(nue, var, cross_production, jacobian); - } }; }; @@ -562,7 +551,7 @@ class CCompressibilityCorrection final : public ParentClass { const su2double v = V_i[idx.Velocity() + 1]; const su2double d_axiCorrection = 2.0 * c5 * nue * pow(v * yinv / sound_speed, 2) * Volume; - const su2double axiCorrection = 0.5 * nue * d_axiCorrection; + const su2double axiCorrection = 0.5 * nue * d_axiCorrection; this->Residual -= axiCorrection; this->Jacobian_i[0] -= d_axiCorrection; diff --git a/SU2_CFD/include/solvers/CScalarSolver.hpp b/SU2_CFD/include/solvers/CScalarSolver.hpp index 0fc61aa7ab25..363226ebd8c3 100644 --- a/SU2_CFD/include/solvers/CScalarSolver.hpp +++ b/SU2_CFD/include/solvers/CScalarSolver.hpp @@ -77,6 +77,7 @@ class CScalarSolver : public CSolver { /*--- Edge fluxes for reducer strategy (see the notes in CEulerSolver.hpp). ---*/ CSysVector EdgeFluxes; /*!< \brief Flux across each edge. */ + CSysVector EdgeFluxesDiff; /*!< \brief Flux difference between ij and ji for non-conservative discretisation. */ /*! * \brief The highest level in the variable hierarchy this solver can safely use. diff --git a/SU2_CFD/include/solvers/CScalarSolver.inl b/SU2_CFD/include/solvers/CScalarSolver.inl index 314354116ff1..bffe6f49dd0d 100644 --- a/SU2_CFD/include/solvers/CScalarSolver.inl +++ b/SU2_CFD/include/solvers/CScalarSolver.inl @@ -341,15 +341,21 @@ void CScalarSolver::Upwind_Residual(CGeometry* geometry, CSolver** template void CScalarSolver::SumEdgeFluxes(CGeometry* geometry) { + const bool nonConservative = EdgeFluxesDiff.GetLocSize() > 0; + SU2_OMP_FOR_STAT(omp_chunk_size) for (unsigned long iPoint = 0; iPoint < nPoint; ++iPoint) { LinSysRes.SetBlock_Zero(iPoint); for (auto iEdge : geometry->nodes->GetEdges(iPoint)) { - if (iPoint == geometry->edges->GetNode(iEdge, 0)) + if (iPoint == geometry->edges->GetNode(iEdge, 0)) { LinSysRes.AddBlock(iPoint, EdgeFluxes.GetBlock(iEdge)); - else + } else { LinSysRes.SubtractBlock(iPoint, EdgeFluxes.GetBlock(iEdge)); + if (nonConservative) { + LinSysRes.SubtractBlock(iPoint, EdgeFluxesDiff.GetBlock(iEdge)); + } + } } } END_SU2_OMP_FOR diff --git a/SU2_CFD/include/solvers/CSolver.hpp b/SU2_CFD/include/solvers/CSolver.hpp index 417e57d08178..1e744e1c4db7 100644 --- a/SU2_CFD/include/solvers/CSolver.hpp +++ b/SU2_CFD/include/solvers/CSolver.hpp @@ -191,12 +191,12 @@ class CSolver { CSysVector LinSysSol; /*!< \brief vector to store iterative solution of implicit linear system. */ CSysVector LinSysRes; /*!< \brief vector to store iterative residual of implicit linear system. */ #ifndef CODI_FORWARD_TYPE - CSysMatrix Jacobian; /*!< \brief Complete sparse Jacobian structure for implicit computations. */ - CSysSolve System; /*!< \brief Linear solver/smoother. */ + using JacobianScalarType = su2mixedfloat; #else - CSysMatrix Jacobian; - CSysSolve System; + using JacobianScalarType = su2double; #endif + CSysMatrix Jacobian; /*!< \brief Complete sparse Jacobian structure for implicit computations. */ + CSysSolve System; /*!< \brief Linear solver/smoother. */ CSysVector OutputVariables; /*!< \brief vector to store the extra variables to be written. */ string* OutputHeadingNames; /*!< \brief vector of strings to store the headings for the exra variables */ diff --git a/SU2_CFD/src/solvers/CTurbSASolver.cpp b/SU2_CFD/src/solvers/CTurbSASolver.cpp index 4a0d54a95176..18eff14832e2 100644 --- a/SU2_CFD/src/solvers/CTurbSASolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSASolver.cpp @@ -73,8 +73,10 @@ CTurbSASolver::CTurbSASolver(CGeometry *geometry, CConfig *config, unsigned shor LinSysRes.Initialize(nPoint, nPointDomain, nVar, 0.0); System.SetxIsZero(true); - if (ReducerStrategy) + if (ReducerStrategy) { EdgeFluxes.Initialize(geometry->GetnEdge(), geometry->GetnEdge(), nVar, nullptr); + EdgeFluxesDiff.Initialize(geometry->GetnEdge(), geometry->GetnEdge(), nVar, nullptr); + } if (config->GetExtraOutput()) { if (nDim == 2) { nOutputVariables = 13; } @@ -294,15 +296,77 @@ void CTurbSASolver::Postprocessing(CGeometry *geometry, CSolver **solver_contain void CTurbSASolver::Viscous_Residual(const unsigned long iEdge, const CGeometry* geometry, CSolver** solver_container, CNumerics* numerics, const CConfig* config) { - /*--- Define an object to set solver specific numerics contribution. ---*/ - auto SolverSpecificNumerics = [&](unsigned long iPoint, unsigned long jPoint) { + const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); + CFlowVariable* flowNodes = solver_container[FLOW_SOL] ? + su2staticcast_p(solver_container[FLOW_SOL]->GetNodes()) : nullptr; + + /*--- Points in edge. ---*/ + const auto iPoint = geometry->edges->GetNode(iEdge, 0); + const auto jPoint = geometry->edges->GetNode(iEdge, 1); + + /*--- Helper function to compute the flux ---*/ + auto ComputeFlux = [&](unsigned long iPoint, unsigned long jPoint, const su2double* normal) { + numerics->SetCoord(geometry->nodes->GetCoord(iPoint), geometry->nodes->GetCoord(jPoint)); + numerics->SetNormal(normal); + + if (flowNodes) { + numerics->SetPrimitive(flowNodes->GetPrimitive(iPoint), flowNodes->GetPrimitive(jPoint)); + } /*--- Roughness heights. ---*/ numerics->SetRoughness(geometry->nodes->GetRoughnessHeight(iPoint), geometry->nodes->GetRoughnessHeight(jPoint)); + + numerics->SetScalarVar(nodes->GetSolution(iPoint), nodes->GetSolution(jPoint)); + numerics->SetScalarVarGradient(nodes->GetGradient(iPoint), nodes->GetGradient(jPoint)); + + return numerics->ComputeResidual(config); }; - /*--- Now instantiate the generic implementation with the functor above. ---*/ + /*--- Compute fluxes and jacobians i->j ---*/ + const su2double* normal = geometry->edges->GetNormal(iEdge); + auto residual_ij = ComputeFlux(iPoint, jPoint, normal); - Viscous_Residual_impl(SolverSpecificNumerics, iEdge, geometry, solver_container, numerics, config); + JacobianScalarType *Block_ii = nullptr, *Block_ij = nullptr, *Block_ji = nullptr, *Block_jj = nullptr; + if (implicit) { + Jacobian.GetBlocks(iEdge, iPoint, jPoint, Block_ii, Block_ij, Block_ji, Block_jj); + } + if (ReducerStrategy) { + EdgeFluxes.SubtractBlock(iEdge, residual_ij); + EdgeFluxesDiff.SetBlock(iEdge, residual_ij); + if (implicit) { + /*--- For the reducer strategy the Jacobians are averaged for simplicity. ---*/ + assert(nVar == 1); + Block_ij[0] -= 0.5 * SU2_TYPE::GetValue(residual_ij.jacobian_j[0][0]); + Block_ji[0] += 0.5 * SU2_TYPE::GetValue(residual_ij.jacobian_i[0][0]); + } + } else { + LinSysRes.SubtractBlock(iPoint, residual_ij); + if (implicit) { + assert(nVar == 1); + Block_ii[0] -= SU2_TYPE::GetValue(residual_ij.jacobian_i[0][0]); + Block_ij[0] -= SU2_TYPE::GetValue(residual_ij.jacobian_j[0][0]); + } + } + + /*--- Compute fluxes and jacobians j->i ---*/ + su2double flipped_normal[MAXNDIM]; + for (auto iDim = 0u; iDim < nDim; iDim++) flipped_normal[iDim] = -normal[iDim]; + + auto residual_ji = ComputeFlux(jPoint, iPoint, flipped_normal); + if (ReducerStrategy) { + EdgeFluxesDiff.AddBlock(iEdge, residual_ji); + if (implicit) { + Block_ij[0] += 0.5 * SU2_TYPE::GetValue(residual_ji.jacobian_i[0][0]); + Block_ji[0] -= 0.5 * SU2_TYPE::GetValue(residual_ji.jacobian_j[0][0]); + } + } else { + LinSysRes.SubtractBlock(jPoint, residual_ji); + if (implicit) { + /*--- The order of arguments were flipped in the evaluation of residual_ji, the Jacobian + * associated with point i is stored in jacobian_j and point j in jacobian_i. ---*/ + Block_ji[0] -= SU2_TYPE::GetValue(residual_ji.jacobian_j[0][0]); + Block_jj[0] -= SU2_TYPE::GetValue(residual_ji.jacobian_i[0][0]); + } + } } void CTurbSASolver::Source_Residual(CGeometry *geometry, CSolver **solver_container, diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index 366589a7994f..e4a747f2c913 100644 --- a/TestCases/hybrid_regression.py +++ b/TestCases/hybrid_regression.py @@ -181,7 +181,7 @@ def main(): turb_flatplate.cfg_dir = "rans/flatplate" turb_flatplate.cfg_file = "turb_SA_flatplate.cfg" turb_flatplate.test_iter = 20 - turb_flatplate.test_vals = [-4.316134, -6.737979, -0.187461, 0.057468] + turb_flatplate.test_vals = [-4.316127, -6.738720, -0.187461, 0.057469] test_list.append(turb_flatplate) # ONERA M6 Wing @@ -189,7 +189,7 @@ def main(): turb_oneram6.cfg_dir = "rans/oneram6" turb_oneram6.cfg_file = "turb_ONERAM6.cfg" turb_oneram6.test_iter = 10 - turb_oneram6.test_vals = [-2.408675, -6.662904, 0.238578, 0.158968, 0.000000] + turb_oneram6.test_vals = [-2.408655, -6.628338, 0.238580, 0.158951, 0.000000] test_list.append(turb_oneram6) # NACA0012 (SA, FUN3D finest grid results: CL=1.0983, CD=0.01242) @@ -197,8 +197,8 @@ def main(): turb_naca0012_sa.cfg_dir = "rans/naca0012" turb_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" turb_naca0012_sa.test_iter = 5 - turb_naca0012_sa.test_vals = [-12.098325, -14.149988, 1.057665, 0.022971, 20.000000, -2.292707, 0.000000, -12.068169, 0] - turb_naca0012_sa.test_vals_aarch64 = [-12.098325, -14.149988, 1.057665, 0.022971, 20.000000, -2.292707, 0.000000, -12.068169, 0] + turb_naca0012_sa.test_vals = [-12.050637, -16.149098, 1.058588, 0.022984, 20.000000, -2.832819, 0.000000, -14.067279, 0] + turb_naca0012_sa.test_vals_aarch64 = [-12.050637, -16.149098, 1.058588, 0.022984, 20.000000, -2.832819, 0.000000, -14.067279, 0] test_list.append(turb_naca0012_sa) # NACA0012 (SST, FUN3D finest grid results: CL=1.0840, CD=0.01253) @@ -238,7 +238,7 @@ def main(): propeller.cfg_dir = "rans/propeller" propeller.cfg_file = "propeller.cfg" propeller.test_iter = 10 - propeller.test_vals = [-3.389724, -8.409502, 0.000048, 0.056344] + propeller.test_vals = [-3.389724, -8.410479, 0.000048, 0.056344] test_list.append(propeller) ####################################### @@ -332,7 +332,7 @@ def main(): hb_rans_preconditioning.cfg_dir = "harmonic_balance/hb_rans_preconditioning" hb_rans_preconditioning.cfg_file = "davis.cfg" hb_rans_preconditioning.test_iter = 25 - hb_rans_preconditioning.test_vals = [-1.902111, 0.484080, 0.601469, 3.608991, -5.949369] + hb_rans_preconditioning.test_vals = [-1.902098, 0.484244, 0.601482, 3.609005, -5.943887] test_list.append(hb_rans_preconditioning) ############################# @@ -403,7 +403,7 @@ def main(): inc_turb_naca0012.cfg_dir = "incomp_rans/naca0012" inc_turb_naca0012.cfg_file = "naca0012.cfg" inc_turb_naca0012.test_iter = 20 - inc_turb_naca0012.test_vals = [-4.788405, -11.040560, 0.000008, 0.309505] + inc_turb_naca0012.test_vals = [-4.788405, -11.040877, 0.000008, 0.309505] test_list.append(inc_turb_naca0012) # NACA0012, SST_SUST @@ -419,7 +419,7 @@ def main(): inc_weakly_coupled.cfg_dir = "disc_adj_heat" inc_weakly_coupled.cfg_file = "primal.cfg" inc_weakly_coupled.test_iter = 10 - inc_weakly_coupled.test_vals = [-18.894811, -17.879327, -18.412938, -17.855948, -18.343462, -15.659612, 5.545700] + inc_weakly_coupled.test_vals = [-18.095922, -16.331787, -16.514014, -13.703679, -18.203865, -14.053738, 5.545900] test_list.append(inc_weakly_coupled) ###################################### @@ -503,7 +503,7 @@ def main(): ddes_flatplate.cfg_dir = "ddes/flatplate" ddes_flatplate.cfg_file = "ddes_flatplate.cfg" ddes_flatplate.test_iter = 10 - ddes_flatplate.test_vals = [-2.714713, -5.788302, -0.214960, 0.023758, 0.000000] + ddes_flatplate.test_vals = [-2.714713, -5.763293, -0.214960, 0.023758, 0.000000] ddes_flatplate.unsteady = True test_list.append(ddes_flatplate) @@ -582,8 +582,8 @@ def main(): multi_interface.cfg_dir = "turbomachinery/multi_interface" multi_interface.cfg_file = "multi_interface_rst.cfg" multi_interface.test_iter = 5 - multi_interface.test_vals = [-8.632374, -8.895124, -9.350417] - multi_interface.test_vals_aarch64 = [-8.632374, -8.895124, -9.350417] + multi_interface.test_vals = [-8.632229, -8.894737, -9.348730] + multi_interface.test_vals_aarch64 = [-8.632229, -8.894737, -9.348730] test_list.append(multi_interface) ###################################### diff --git a/TestCases/hybrid_regression_AD.py b/TestCases/hybrid_regression_AD.py index 0727b5888735..9b4bdb23c52f 100644 --- a/TestCases/hybrid_regression_AD.py +++ b/TestCases/hybrid_regression_AD.py @@ -78,7 +78,7 @@ def main(): discadj_rans_naca0012_sa.cfg_dir = "disc_adj_rans/naca0012" discadj_rans_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" discadj_rans_naca0012_sa.test_iter = 10 - discadj_rans_naca0012_sa.test_vals = [-2.997064, -0.196172, 0.000003, -0.000000, 5.000000, -2.919675, 5.000000, -7.323218] + discadj_rans_naca0012_sa.test_vals = [-2.997050, -0.199287, 0.000003, -0.000000, 5.000000, -2.919668, 5.000000, -7.320138] test_list.append(discadj_rans_naca0012_sa) # Adjoint turbulent NACA0012 SST @@ -123,7 +123,7 @@ def main(): discadj_incomp_turb_NACA0012_sa.cfg_dir = "disc_adj_incomp_rans/naca0012" discadj_incomp_turb_NACA0012_sa.cfg_file = "turb_naca0012_sa.cfg" discadj_incomp_turb_NACA0012_sa.test_iter = 10 - discadj_incomp_turb_NACA0012_sa.test_vals = [10.000000, -3.845995, -1.031096, 0.000000] + discadj_incomp_turb_NACA0012_sa.test_vals = [10.000000, -3.845995, -1.023534, 0.000000] test_list.append(discadj_incomp_turb_NACA0012_sa) # Adjoint Incompressible Turbulent NACA 0012 SST diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index e43c625be38f..fe18c70ed446 100644 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -357,7 +357,7 @@ def main(): rae2822_sa.cfg_dir = "rans/rae2822" rae2822_sa.cfg_file = "turb_SA_RAE2822.cfg" rae2822_sa.test_iter = 20 - rae2822_sa.test_vals = [-2.004689, -5.265797, 0.809463, 0.062016, 0] + rae2822_sa.test_vals = [-2.004689, -5.265730, 0.809462, 0.062011, 0.000000] test_list.append(rae2822_sa) # RAE2822 SST @@ -381,7 +381,7 @@ def main(): turb_flatplate.cfg_dir = "rans/flatplate" turb_flatplate.cfg_file = "turb_SA_flatplate.cfg" turb_flatplate.test_iter = 20 - turb_flatplate.test_vals = [-4.297198, -6.730442, -0.187632, 0.057700] + turb_flatplate.test_vals = [-4.297192, -6.731227, -0.187632, 0.057700] test_list.append(turb_flatplate) # Flat plate (compressible) with species inlet @@ -389,7 +389,7 @@ def main(): turb_flatplate_species.cfg_dir = "rans/flatplate" turb_flatplate_species.cfg_file = "turb_SA_flatplate_species.cfg" turb_flatplate_species.test_iter = 20 - turb_flatplate_species.test_vals = [-4.249479, -0.634915, -1.716291, 1.223196, -3.307930, 9.000000, -6.634088, 5.000000, -6.985954, 10.000000, -6.255640, 0.999903, 0.999903] + turb_flatplate_species.test_vals = [-4.249474, -0.634908, -1.716288, 1.223201, -3.307930, 9.000000, -6.634095, 5.000000, -6.986784, 10.000000, -6.255641, 0.999903, 0.999903] test_list.append(turb_flatplate_species) # Flat plate SST compressibility correction Wilcox @@ -413,7 +413,7 @@ def main(): turb_oneram6.cfg_dir = "rans/oneram6" turb_oneram6.cfg_file = "turb_ONERAM6.cfg" turb_oneram6.test_iter = 10 - turb_oneram6.test_vals = [-2.408685, -6.662907, 0.238579, 0.158968, 0.000000] + turb_oneram6.test_vals = [-2.408664, -6.628340, 0.238581, 0.158952, 0.000000] turb_oneram6.timeout = 3200 test_list.append(turb_oneram6) @@ -422,7 +422,7 @@ def main(): turb_oneram6_vc.cfg_dir = "rans/oneram6" turb_oneram6_vc.cfg_file = "turb_ONERAM6_vc.cfg" turb_oneram6_vc.test_iter = 15 - turb_oneram6_vc.test_vals = [-2.282318, -6.614780, 0.234330, 0.143024, 0.000000] + turb_oneram6_vc.test_vals = [-2.282278, -6.568458, 0.234350, 0.142989, 0.000000] turb_oneram6_vc.timeout = 3200 test_list.append(turb_oneram6_vc) @@ -431,7 +431,7 @@ def main(): turb_oneram6_nk.cfg_dir = "rans/oneram6" turb_oneram6_nk.cfg_file = "turb_ONERAM6_nk.cfg" turb_oneram6_nk.test_iter = 20 - turb_oneram6_nk.test_vals = [-4.828066, -4.426250, -11.417591, 0.224679, 0.044309, 1.000000, -0.642977, 31.384000] + turb_oneram6_nk.test_vals = [-4.827571, -4.425650, -11.379658, 0.224787, 0.044208, 1.000000, -0.642711, 31.384000] turb_oneram6_nk.timeout = 600 turb_oneram6_nk.tol = 0.0001 test_list.append(turb_oneram6_nk) @@ -441,7 +441,7 @@ def main(): turb_naca0012_sa.cfg_dir = "rans/naca0012" turb_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" turb_naca0012_sa.test_iter = 5 - turb_naca0012_sa.test_vals = [-12.094695, -14.685268, 1.057665, 0.022971, 20.000000, -1.692967, 20.000000, -4.037673, 0] + turb_naca0012_sa.test_vals = [-12.050143, -16.185204, 1.058588, 0.022984, 20.000000, -1.562786, 20.000000, -3.900124, 0.000000] turb_naca0012_sa.timeout = 3200 test_list.append(turb_naca0012_sa) @@ -507,7 +507,7 @@ def main(): propeller.cfg_dir = "rans/propeller" propeller.cfg_file = "propeller.cfg" propeller.test_iter = 10 - propeller.test_vals = [-3.389724, -8.409502, 0.000048, 0.056344] + propeller.test_vals = [-3.389724, -8.410479, 0.000048, 0.056344] propeller.timeout = 3200 test_list.append(propeller) @@ -646,7 +646,7 @@ def main(): inc_turb_naca0012.cfg_dir = "incomp_rans/naca0012" inc_turb_naca0012.cfg_file = "naca0012.cfg" inc_turb_naca0012.test_iter = 20 - inc_turb_naca0012.test_vals = [-4.788595, -11.040625, -0.000002, 0.309519] + inc_turb_naca0012.test_vals = [-4.788595, -11.040942, -0.000002, 0.309519] test_list.append(inc_turb_naca0012) # NACA0012, SST_SUST @@ -732,7 +732,7 @@ def main(): turbmod_sa_bsl_rae2822.cfg_dir = "turbulence_models/sa/rae2822" turbmod_sa_bsl_rae2822.cfg_file = "turb_SA_BSL_RAE2822.cfg" turbmod_sa_bsl_rae2822.test_iter = 20 - turbmod_sa_bsl_rae2822.test_vals = [-2.004689, 0.742306, 0.497308, -5.265797, 0.809463, 0.062016] + turbmod_sa_bsl_rae2822.test_vals = [-2.004689, 0.742307, 0.497308, -5.265730, 0.809462, 0.062011] test_list.append(turbmod_sa_bsl_rae2822) # SA Negative @@ -740,7 +740,7 @@ def main(): turbmod_sa_neg_rae2822.cfg_dir = "turbulence_models/sa/rae2822" turbmod_sa_neg_rae2822.cfg_file = "turb_SA_NEG_RAE2822.cfg" turbmod_sa_neg_rae2822.test_iter = 10 - turbmod_sa_neg_rae2822.test_vals = [-1.204800, 1.611685, 1.349330, 1.489602, 1.263603, 0.466487, 0] + turbmod_sa_neg_rae2822.test_vals = [-1.345491, 1.448526, 1.208572, -0.846542, 1.263765, 0.494751, 0.000000] turbmod_sa_neg_rae2822.test_vals_aarch64 = [-1.359612, 1.493629, 1.218367, -1.441703, 1.248499, 0.457987, 0] test_list.append(turbmod_sa_neg_rae2822) @@ -749,7 +749,7 @@ def main(): turbmod_sa_comp_rae2822.cfg_dir = "turbulence_models/sa/rae2822" turbmod_sa_comp_rae2822.cfg_file = "turb_SA_COMP_RAE2822.cfg" turbmod_sa_comp_rae2822.test_iter = 20 - turbmod_sa_comp_rae2822.test_vals = [-2.004687, 0.742304, 0.497309, -5.266084, 0.809467, 0.062029] + turbmod_sa_comp_rae2822.test_vals = [-2.004688, 0.742305, 0.497309, -5.266066, 0.809466, 0.062026] test_list.append(turbmod_sa_comp_rae2822) # SA Edwards @@ -757,7 +757,7 @@ def main(): turbmod_sa_edw_rae2822.cfg_dir = "turbulence_models/sa/rae2822" turbmod_sa_edw_rae2822.cfg_file = "turb_SA_EDW_RAE2822.cfg" turbmod_sa_edw_rae2822.test_iter = 20 - turbmod_sa_edw_rae2822.test_vals = [-2.004687, 0.742306, 0.497310, -5.290769, 0.809485, 0.062036] + turbmod_sa_edw_rae2822.test_vals = [-2.004687, 0.742306, 0.497310, -5.290787, 0.809485, 0.062034] test_list.append(turbmod_sa_edw_rae2822) # SA Compressibility and Edwards @@ -765,7 +765,7 @@ def main(): turbmod_sa_comp_edw_rae2822.cfg_dir = "turbulence_models/sa/rae2822" turbmod_sa_comp_edw_rae2822.cfg_file = "turb_SA_COMP_EDW_RAE2822.cfg" turbmod_sa_comp_edw_rae2822.test_iter = 20 - turbmod_sa_comp_edw_rae2822.test_vals = [-2.004685, 0.742307, 0.497311, -5.290750, 0.809487, 0.062045] + turbmod_sa_comp_edw_rae2822.test_vals = [-2.004686, 0.742307, 0.497311, -5.290776, 0.809487, 0.062044] test_list.append(turbmod_sa_comp_edw_rae2822) # SA QCR @@ -773,7 +773,7 @@ def main(): turbmod_sa_qcr_rae2822.cfg_dir = "turbulence_models/sa/rae2822" turbmod_sa_qcr_rae2822.cfg_file = "turb_SA_QCR_RAE2822.cfg" turbmod_sa_qcr_rae2822.test_iter = 20 - turbmod_sa_qcr_rae2822.test_vals = [-2.004793, 0.742353, 0.497315, -5.265977, 0.807841, 0.062027] + turbmod_sa_qcr_rae2822.test_vals = [-2.004794, 0.742354, 0.497315, -5.265910, 0.807835, 0.062022] test_list.append(turbmod_sa_qcr_rae2822) ############################ @@ -785,7 +785,7 @@ def main(): schubauer_klebanoff_transition.cfg_dir = "transition/Schubauer_Klebanoff" schubauer_klebanoff_transition.cfg_file = "transitional_BC_model_ConfigFile.cfg" schubauer_klebanoff_transition.test_iter = 10 - schubauer_klebanoff_transition.test_vals = [-8.215651, -13.240283, 0.000048, 0.007983] + schubauer_klebanoff_transition.test_vals = [-8.215651, -13.239431, 0.000048, 0.007983] test_list.append(schubauer_klebanoff_transition) ##################################### @@ -942,7 +942,7 @@ def main(): hb_rans_preconditioning.cfg_file = "davis.cfg" hb_rans_preconditioning.test_iter = 25 hb_rans_preconditioning.tol = 0.00001 - hb_rans_preconditioning.test_vals = [-1.902098, 0.484070, 0.601481, 3.609002, -5.949356] + hb_rans_preconditioning.test_vals = [-1.902085, 0.484234, 0.601494, 3.609016, -5.943874] test_list.append(hb_rans_preconditioning) ###################################### @@ -1009,7 +1009,7 @@ def main(): ddes_flatplate.cfg_dir = "ddes/flatplate" ddes_flatplate.cfg_file = "ddes_flatplate.cfg" ddes_flatplate.test_iter = 10 - ddes_flatplate.test_vals = [-2.714713, -5.788290, -0.214960, 0.023758, 0.000000] + ddes_flatplate.test_vals = [-2.714713, -5.763284, -0.214960, 0.023758, 0.000000] ddes_flatplate.unsteady = True test_list.append(ddes_flatplate) @@ -1086,7 +1086,7 @@ def main(): Aachen_3D_restart.cfg_dir = "turbomachinery/Aachen_turbine" Aachen_3D_restart.cfg_file = "aachen_3D_MP_restart.cfg" Aachen_3D_restart.test_iter = 5 - Aachen_3D_restart.test_vals = [-7.701448, -8.512241, -6.014939, -6.468738, -5.801759, -4.607179, -5.551037, -5.300771, -3.804188, -5.256055, -5.765160, -3.609605, -2.229276, -2.883962, -0.563469] + Aachen_3D_restart.test_vals = [-7.701447, -8.512235, -6.014939, -6.468414, -5.801735, -4.607179, -5.550688, -5.300764, -3.804188, -5.256009, -5.764984, -3.609605, -2.229276, -2.883960, -0.563469] test_list.append(Aachen_3D_restart) # Jones APU Turbocharger restart @@ -1119,8 +1119,8 @@ def main(): multi_interface.cfg_dir = "turbomachinery/multi_interface" multi_interface.cfg_file = "multi_interface_rst.cfg" multi_interface.test_iter = 5 - multi_interface.test_vals = [-8.632374, -8.895124, -9.350417] - multi_interface.test_vals_aarch64 = [-8.632374, -8.895124, -9.350417] + multi_interface.test_vals = [-8.632229, -8.894737, -9.348730] + multi_interface.test_vals_aarch64 = [-8.632229, -8.894737, -9.348730] test_list.append(multi_interface) ###################################### @@ -1567,7 +1567,7 @@ def main(): species2_primitiveVenturi_mixingmodel_viscosity.cfg_dir = "species_transport/venturi_primitive_3species" species2_primitiveVenturi_mixingmodel_viscosity.cfg_file = "species2_primitiveVenturi_mixingmodel_viscosity.cfg" species2_primitiveVenturi_mixingmodel_viscosity.test_iter = 50 - species2_primitiveVenturi_mixingmodel_viscosity.test_vals = [-5.232339, -3.617118, -3.857221, -7.533847, -5.126646, 5.000000, -1.682962, 5.000000, -3.474078, 5.000000, -2.086859, 2.495548, 0.985490, 0.600234, 0.909824] + species2_primitiveVenturi_mixingmodel_viscosity.test_vals = [-5.236181, -3.624224, -3.871405, -7.533947, -5.128207, 5.000000, -1.678081, 5.000000, -3.489246, 5.000000, -2.086184, 2.495408, 0.985469, 0.600247, 0.909691] test_list.append(species2_primitiveVenturi_mixingmodel_viscosity) # 2 species (1 eq) primitive venturi mixing using mixing model including heat capacity and mass diffusivity diff --git a/TestCases/parallel_regression_AD.py b/TestCases/parallel_regression_AD.py index 21ec615f9ff4..ce5ed630cc01 100644 --- a/TestCases/parallel_regression_AD.py +++ b/TestCases/parallel_regression_AD.py @@ -83,7 +83,7 @@ def main(): discadj_rans_naca0012_sa.cfg_dir = "disc_adj_rans/naca0012" discadj_rans_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" discadj_rans_naca0012_sa.test_iter = 10 - discadj_rans_naca0012_sa.test_vals = [-2.996963, -0.196020, 0.000004, -0.000000, 5.000000, -3.430615, 5.000000, -7.411381] + discadj_rans_naca0012_sa.test_vals = [-2.996948, -0.199135, 0.000004, -0.000000, 5.000000, -3.430662, 5.000000, -7.402623] test_list.append(discadj_rans_naca0012_sa) # Adjoint turbulent NACA0012 SST @@ -128,8 +128,8 @@ def main(): discadj_incomp_turb_NACA0012_sa.cfg_dir = "disc_adj_incomp_rans/naca0012" discadj_incomp_turb_NACA0012_sa.cfg_file = "turb_naca0012_sa.cfg" discadj_incomp_turb_NACA0012_sa.test_iter = 10 - discadj_incomp_turb_NACA0012_sa.test_vals = [10.000000, -3.846020, -1.031079, 0.000000] - discadj_incomp_turb_NACA0012_sa.test_vals_aarch64 = [10.000000, -3.846020, -1.031078, 0.000000] + discadj_incomp_turb_NACA0012_sa.test_vals = [10.000000, -3.846020, -1.023517, 0.000000] + discadj_incomp_turb_NACA0012_sa.test_vals_aarch64 = [10.000000, -3.846020, -1.023517, 0.000000] test_list.append(discadj_incomp_turb_NACA0012_sa) # Adjoint Incompressible Turbulent NACA 0012 SST @@ -256,7 +256,7 @@ def main(): discadj_heat.cfg_dir = "disc_adj_heat" discadj_heat.cfg_file = "disc_adj_heat.cfg" discadj_heat.test_iter = 10 - discadj_heat.test_vals = [-1.999668, 0.670563, 0.000000, 0.006210] + discadj_heat.test_vals = [-1.999669, 0.657451, 0.000000, 0.006210] discadj_heat.test_vals_aarch64 = [-2.226539, 0.605868, 0.000000, -6.256400] test_list.append(discadj_heat) diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index 24ab6e72f07b..aba223dcefde 100644 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -218,7 +218,7 @@ def main(): rae2822_sa.cfg_dir = "rans/rae2822" rae2822_sa.cfg_file = "turb_SA_RAE2822.cfg" rae2822_sa.test_iter = 20 - rae2822_sa.test_vals = [-2.020123, -5.269339, 0.807147, 0.060499, 0] + rae2822_sa.test_vals = [-2.020123, -5.269264, 0.807147, 0.060494, 0.000000] test_list.append(rae2822_sa) # RAE2822 SST @@ -242,7 +242,7 @@ def main(): turb_flatplate.cfg_dir = "rans/flatplate" turb_flatplate.cfg_file = "turb_SA_flatplate.cfg" turb_flatplate.test_iter = 20 - turb_flatplate.test_vals = [-4.316135, -6.737979, -0.187461, 0.057468] + turb_flatplate.test_vals = [-4.316128, -6.738720, -0.187461, 0.057469] test_list.append(turb_flatplate) # FLAT PLATE, WALL FUNCTIONS, COMPRESSIBLE SST @@ -258,7 +258,7 @@ def main(): turb_wallfunction_flatplate_sa.cfg_dir = "wallfunctions/flatplate/compressible_SA" turb_wallfunction_flatplate_sa.cfg_file = "turb_SA_flatplate.cfg" turb_wallfunction_flatplate_sa.test_iter = 10 - turb_wallfunction_flatplate_sa.test_vals = [-4.487562, -2.016144, -2.169439, 0.834724, -5.382532, 10.000000, -1.508186, 0.034484, 0.002639] + turb_wallfunction_flatplate_sa.test_vals = [-4.456430, -1.959113, -2.105871, 0.883035, -5.248648, 10.000000, -1.537437, 0.034538, 0.002637] test_list.append(turb_wallfunction_flatplate_sa) # ONERA M6 Wing @@ -266,7 +266,7 @@ def main(): turb_oneram6.cfg_dir = "rans/oneram6" turb_oneram6.cfg_file = "turb_ONERAM6.cfg" turb_oneram6.test_iter = 10 - turb_oneram6.test_vals = [-2.408685, -6.662908, 0.238580, 0.158968, 0.000000] + turb_oneram6.test_vals = [-2.408665, -6.628342, 0.238581, 0.158951, 0.000000] turb_oneram6.timeout = 3200 test_list.append(turb_oneram6) @@ -275,7 +275,7 @@ def main(): turb_naca0012_sa.cfg_dir = "rans/naca0012" turb_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" turb_naca0012_sa.test_iter = 5 - turb_naca0012_sa.test_vals = [-12.091778, -14.685322, 1.057665, 0.022971, 20.000000, -2.686203, 20.000000, -4.459916, 0] + turb_naca0012_sa.test_vals = [-12.049550, -16.193702, 1.058588, 0.022984, 20.000000, -3.437275, 20.000000, -4.705227, 0.000000] turb_naca0012_sa.timeout = 3200 test_list.append(turb_naca0012_sa) @@ -322,7 +322,7 @@ def main(): propeller.cfg_dir = "rans/propeller" propeller.cfg_file = "propeller.cfg" propeller.test_iter = 10 - propeller.test_vals = [-3.389724, -8.409502, 0.000048, 0.056344] + propeller.test_vals = [-3.389724, -8.410479, 0.000048, 0.056344] propeller.timeout = 3200 test_list.append(propeller) @@ -441,7 +441,7 @@ def main(): inc_turb_naca0012.cfg_dir = "incomp_rans/naca0012" inc_turb_naca0012.cfg_file = "naca0012.cfg" inc_turb_naca0012.test_iter = 20 - inc_turb_naca0012.test_vals = [-4.788495, -11.040578, 0.000023, 0.309503] + inc_turb_naca0012.test_vals = [-4.788495, -11.040895, 0.000023, 0.309502] test_list.append(inc_turb_naca0012) # NACA0012, SST_SUST @@ -465,7 +465,7 @@ def main(): inc_turb_wallfunction_flatplate_sa.cfg_dir = "wallfunctions/flatplate/incompressible_SA" inc_turb_wallfunction_flatplate_sa.cfg_file = "turb_SA_flatplate.cfg" inc_turb_wallfunction_flatplate_sa.test_iter = 10 - inc_turb_wallfunction_flatplate_sa.test_vals = [-6.894429, -5.717193, -6.743475, -4.242550, -9.587276, 10.000000, -2.879802, 0.001021, 0.003759] + inc_turb_wallfunction_flatplate_sa.test_vals = [-6.894206, -5.715970, -6.743740, -4.242551, -9.550272, 10.000000, -2.879370, 0.001021, 0.003759] test_list.append(inc_turb_wallfunction_flatplate_sa) #################### @@ -558,7 +558,7 @@ def main(): schubauer_klebanoff_transition.cfg_dir = "transition/Schubauer_Klebanoff" schubauer_klebanoff_transition.cfg_file = "transitional_BC_model_ConfigFile.cfg" schubauer_klebanoff_transition.test_iter = 10 - schubauer_klebanoff_transition.test_vals = [-8.284308, -13.240273, 0.000057, 0.007982] + schubauer_klebanoff_transition.test_vals = [-8.284308, -13.239421, 0.000057, 0.007982] test_list.append(schubauer_klebanoff_transition) ##################################### @@ -729,7 +729,7 @@ def main(): hb_rans_preconditioning.cfg_dir = "harmonic_balance/hb_rans_preconditioning" hb_rans_preconditioning.cfg_file = "davis.cfg" hb_rans_preconditioning.test_iter = 25 - hb_rans_preconditioning.test_vals = [-1.902097, 0.484069, 0.601483, 3.609005, -5.949355] + hb_rans_preconditioning.test_vals = [-1.902084, 0.484233, 0.601496, 3.609018, -5.943873] test_list.append(hb_rans_preconditioning) ###################################### @@ -796,7 +796,7 @@ def main(): ddes_flatplate.cfg_dir = "ddes/flatplate" ddes_flatplate.cfg_file = "ddes_flatplate.cfg" ddes_flatplate.test_iter = 10 - ddes_flatplate.test_vals = [-2.714713, -5.788301, -0.214960, 0.023758, 0.000000] + ddes_flatplate.test_vals = [-2.714713, -5.763293, -0.214960, 0.023758, 0.000000] ddes_flatplate.unsteady = True test_list.append(ddes_flatplate) @@ -856,7 +856,7 @@ def main(): Aachen_3D_restart.cfg_dir = "turbomachinery/Aachen_turbine" Aachen_3D_restart.cfg_file = "aachen_3D_MP_restart.cfg" Aachen_3D_restart.test_iter = 5 - Aachen_3D_restart.test_vals = [-7.701448, -8.512359, -6.014939, -6.468741, -5.801762, -4.607173, -5.551041, -5.300777, -3.804188, -5.256055, -5.765225, -3.609601, -2.229277, -2.883896, -0.563470] + Aachen_3D_restart.test_vals = [-7.701448, -8.512353, -6.014939, -6.468417, -5.801739, -4.607173, -5.550692, -5.300771, -3.804187, -5.256008, -5.765048, -3.609601, -2.229277, -2.883894, -0.563470] test_list.append(Aachen_3D_restart) # Jones APU Turbocharger restart @@ -889,8 +889,8 @@ def main(): multi_interface.cfg_dir = "turbomachinery/multi_interface" multi_interface.cfg_file = "multi_interface_rst.cfg" multi_interface.test_iter = 5 - multi_interface.test_vals = [-8.632374, -8.895124, -9.350417] - multi_interface.test_vals_aarch64 = [-8.632374, -8.895124, -9.350417] + multi_interface.test_vals = [-8.632229, -8.894737, -9.348730] + multi_interface.test_vals_aarch64 = [-8.632229, -8.894737, -9.348730] test_list.append(multi_interface) diff --git a/TestCases/serial_regression_AD.py b/TestCases/serial_regression_AD.py index 687a459cb870..9cfb3177caa1 100644 --- a/TestCases/serial_regression_AD.py +++ b/TestCases/serial_regression_AD.py @@ -88,7 +88,7 @@ def main(): discadj_rans_naca0012_sa.cfg_dir = "disc_adj_rans/naca0012" discadj_rans_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" discadj_rans_naca0012_sa.test_iter = 10 - discadj_rans_naca0012_sa.test_vals = [-2.996976, -0.196055, 0.000004, -0.000000, 5.000000, -3.971736, 5.000000, -10.464319] + discadj_rans_naca0012_sa.test_vals = [-2.996961, -0.199169, 0.000004, -0.000000, 5.000000, -3.971752, 5.000000, -10.457920] test_list.append(discadj_rans_naca0012_sa) # Adjoint turbulent NACA0012 SST @@ -193,7 +193,7 @@ def main(): discadj_heat.cfg_dir = "disc_adj_heat" discadj_heat.cfg_file = "disc_adj_heat.cfg" discadj_heat.test_iter = 10 - discadj_heat.test_vals = [-2.174678, 0.591525, 0.000000, 0.008748] + discadj_heat.test_vals = [-2.174674, 0.581857, 0.000000, 0.008748] test_list.append(discadj_heat) ################################### diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index 457d5697a0e0..4fcc604b40ac 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -291,7 +291,7 @@ def main(): tutorial_nicfd_nozzle_pinn.cfg_dir = "../Tutorials/compressible_flow/NICFD_nozzle/PhysicsInformed" tutorial_nicfd_nozzle_pinn.cfg_file = "config_NICFD_PINN.cfg" tutorial_nicfd_nozzle_pinn.test_iter = 20 - tutorial_nicfd_nozzle_pinn.test_vals = [-3.181747, -1.638856, -1.277037, 2.445964, -11.769570] + tutorial_nicfd_nozzle_pinn.test_vals = [-3.181747, -1.638856, -1.277037, 2.445964, -11.759632] tutorial_nicfd_nozzle_pinn.no_restart = True test_list.append(tutorial_nicfd_nozzle_pinn) @@ -301,7 +301,7 @@ def main(): tutorial_unst_naca0012.cfg_dir = "../Tutorials/compressible_flow/Unsteady_NACA0012" tutorial_unst_naca0012.cfg_file = "unsteady_naca0012.cfg" tutorial_unst_naca0012.test_iter = 520 - tutorial_unst_naca0012.test_vals = [520.000000, 0.000000, -5.290694, 0.000000, 0.317272, 0.820972, 0.002144, 0.012805] + tutorial_unst_naca0012.test_vals = [520.000000, 0.000000, -5.292632, 0.000000, 0.300303, 0.770888, 0.002399, 0.014070] tutorial_unst_naca0012.test_vals_aarch64 = [520.000000, 0.000000, -5.298777, 0.000000, 0.288956, 0.736706, 0.002419, 0.007134] tutorial_unst_naca0012.unsteady = True test_list.append(tutorial_unst_naca0012) @@ -311,7 +311,7 @@ def main(): propeller_var_load.cfg_dir = "../Tutorials/compressible_flow/ActuatorDisk_VariableLoad" propeller_var_load.cfg_file = "propeller_variable_load.cfg" propeller_var_load.test_iter = 20 - propeller_var_load.test_vals = [-1.830257, -4.535041, -0.000323, 0.171647] + propeller_var_load.test_vals = [-1.830257, -4.534990, -0.000323, 0.171646] propeller_var_load.timeout = 3200 test_list.append(propeller_var_load) diff --git a/TestCases/vandv.py b/TestCases/vandv.py index d563cc653de0..8c942e27b631 100644 --- a/TestCases/vandv.py +++ b/TestCases/vandv.py @@ -44,9 +44,9 @@ def main(): p30n30 = TestCase('30P30N') p30n30.cfg_dir = "vandv/rans/30p30n" p30n30.cfg_file = "config.cfg" - p30n30.test_iter = 20 - p30n30.test_vals = [-10.582183, -10.106601, -10.474910, -10.182549, -12.679336, 0.052181, 2.829820, 1.318613, -0.221374] - p30n30.test_vals_aarch64 = [-10.582183, -10.106601, -10.474910, -10.182549, -12.679336, 0.052181, 2.829820, 1.318613, -0.221374] + p30n30.test_iter = 5 + p30n30.test_vals = [-11.502310, -11.511459, -11.981995, -11.704990, -14.235571, 0.052235, 2.830394, 1.318894, -0.291726] + p30n30.test_vals_aarch64 = [-11.502310, -11.511459, -11.981995, -11.704990, -14.235571, 0.052235, 2.830394, 1.318894, -0.291726] test_list.append(p30n30) # flat plate - sst-v1994m @@ -72,8 +72,8 @@ def main(): swbli_sa.cfg_dir = "vandv/rans/swbli" swbli_sa.cfg_file = "config_sa.cfg" swbli_sa.test_iter = 5 - swbli_sa.test_vals = [-11.511182, -10.750503, -11.853919, -10.320019, -14.316261, 0.002238, -1.585259, 1.276300] - swbli_sa.test_vals_aarch64 = [-11.511278, -10.750583, -11.854073, -10.320108, -14.316261, 0.002238, -1.585354, 1.276300] + swbli_sa.test_vals = [-11.504424, -10.941741, -12.049925, -10.586263, -16.090385, 0.002242, -1.614365, 1.340100] + swbli_sa.test_vals_aarch64 = [-11.504424, -10.941741, -12.049925, -10.586263, -16.090385, 0.002242, -1.614365, 1.340100] test_list.append(swbli_sa) @@ -90,7 +90,7 @@ def main(): dsma661_sa.cfg_dir = "vandv/rans/dsma661" dsma661_sa.cfg_file = "dsma661_sa_config.cfg" dsma661_sa.test_iter = 5 - dsma661_sa.test_vals = [-11.013046, -8.140606, -8.989695, -5.978550, -10.593381, 0.155689, 0.024173] + dsma661_sa.test_vals = [-11.270155, -8.240208, -9.000574, -5.954878, -10.737828, 0.155687, 0.024232] test_list.append(dsma661_sa) # DSMA661 - SST-V2003m diff --git a/config_template.cfg b/config_template.cfg index 4e2d456170fe..3cb991342235 100644 --- a/config_template.cfg +++ b/config_template.cfg @@ -1852,6 +1852,10 @@ CFL_REDUCTION_TURB= 1.0 LOWER_LIMIT_K_FACTOR= 1e-15 LOWER_LIMIT_OMEGA_FACTOR= 1e-5 +% Use numerically computed exact Jacobians for standard SA turbulence model +% Slower per iteration but potentialy more stable and capable of higher CFL +USE_ACCURATE_TURB_JACOBIANS= NO +% % --------------------- HEAT NUMERICAL METHOD DEFINITION ----------------------% % % Value of the thermal diffusivity