-
Notifications
You must be signed in to change notification settings - Fork 866
Implementation of DDES and SAS formulations for SST #2150
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Conversation
…ons based on k and w - Added computation of k and w starting from SA variables - Added first implementation of SAS (Scale Adaptive Simulation) model
- Changed previous SAS model to SAS_SIMPLE
- Fixed DataType for Periodic Comms
…lified IDDES (SIDDES)
switch(kind_hybridRANSLES){ | ||
case SST_DDES: { | ||
|
||
const su2double r_d = (eddyVisc + lamVisc) / max((KolmConst2*wallDist2 * sqrt(0.5 * (StrainMag*StrainMag + VortMag*VortMag))), 1e-10); | ||
const su2double C_d1 = 20.0; | ||
const su2double C_d2 = 3.0; | ||
|
||
const su2double f_d = 1 - tanh(pow(C_d1 * r_d, C_d2)); | ||
|
||
const su2double l_LES = C_DES * h_max; | ||
|
||
DES_lengthScale = l_RANS - f_d * max(0.0, l_RANS - l_LES); | ||
|
||
nodes->SetDebug_Quantities(config, iPoint, f_d, l_RANS, l_LES, r_d); | ||
|
||
break; | ||
} | ||
case SST_IDDES: { | ||
|
||
// Constants | ||
const su2double C_w = 0.15; | ||
const su2double C_dt1 = 20.0; | ||
const su2double C_dt2 = 3.0; | ||
const su2double C_l = 5.0; | ||
const su2double C_t = 1.87; | ||
|
||
const su2double alpha = 0.25 - sqrt(wallDist2) / h_max; | ||
const su2double f_b = min(2.0 * exp(-9.0 * alpha*alpha), 1.0); | ||
const su2double r_dt = eddyVisc / max((KolmConst2*wallDist2 * sqrt(0.5 * (StrainMag*StrainMag + VortMag*VortMag))), 1e-10); | ||
const su2double f_dt = 1 - tanh(pow(C_dt1 * r_dt, C_dt2)); | ||
const su2double ftilda_d = max(1.0 - f_dt, f_b); | ||
|
||
const su2double r_dl = lamVisc / max((KolmConst2*wallDist2 * sqrt(0.5 * (StrainMag*StrainMag + VortMag*VortMag))), 1e-10); | ||
const su2double f_l = tanh(pow(C_l*C_l*r_dl, 10.0)); | ||
const su2double f_t = tanh(pow(C_t*C_t*r_dt, 3.0)); | ||
const su2double f_e2 = 1.0 - max(f_t, f_l); | ||
const su2double f_e1 = alpha >= 0.0 ? 2.0 * exp(-11.09*alpha*alpha) : 2.0 * exp(-9.0*alpha*alpha); | ||
const su2double f_e = f_e2 * max((f_e1 - 1.0), 0.0); | ||
|
||
|
||
const su2double Delta = min(C_w * max(sqrt(wallDist2), h_max), h_max); | ||
const su2double l_LES = C_DES * Delta; | ||
|
||
nodes->SetDebug_Quantities(config, iPoint, ftilda_d, l_RANS, l_LES, r_dl, r_dt); | ||
|
||
DES_lengthScale = ftilda_d *(1.0+f_e)*l_RANS + (1.0 - ftilda_d) * l_LES; | ||
|
||
break; | ||
} | ||
case SST_SIDDES: { | ||
|
||
// Constants | ||
const su2double C_w = 0.15; | ||
const su2double C_dt1 = 20.0; | ||
const su2double C_dt2 = 3.0; | ||
const su2double C_l = 5.0; | ||
const su2double C_t = 1.87; | ||
|
||
const su2double alpha = 0.25 - sqrt(wallDist2) / h_max; | ||
const su2double f_b = min(2.0 * exp(-9.0 * alpha*alpha), 1.0); | ||
const su2double r_dt = eddyVisc / max((KolmConst2*wallDist2 * sqrt(0.5 * (StrainMag*StrainMag + VortMag*VortMag))), 1e-10); | ||
const su2double f_dt = 1 - tanh(pow(C_dt1 * r_dt, C_dt2)); | ||
const su2double ftilda_d = max(1.0 - f_dt, f_b); | ||
|
||
const su2double Delta = min(C_w * max(sqrt(wallDist2), h_max), h_max); | ||
const su2double l_LES = C_DES * Delta; | ||
|
||
nodes->SetDebug_Quantities(config, iPoint, ftilda_d, l_RANS, l_LES, r_dt); | ||
|
||
DES_lengthScale = ftilda_d*l_RANS + (1.0 - ftilda_d) * l_LES; | ||
|
||
break; | ||
} | ||
} |
Check notice
Code scanning / CodeQL
Long switch case Note
SST_IDDES (31 lines)
Switch has at least one case that is too long:
SST_EDDES (60 lines)
Common/include/option_structure.hpp
Outdated
SAS_SIMPLE, /*!< \brief Menter k-w SST model with Scale Adaptive Simulations modifications. */ | ||
SAS_COMPLICATED, /*!< \brief Menter k-w SST model with Scale Adaptive Simulations modifications. */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are these the names in the literature?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, these are just placeholders. There are no names in literature, that is why I named them according to the complexity of the model
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe something after the authors since the models come from different papers.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure, why not
Common/include/option_structure.hpp
Outdated
SST_OPTIONS sasModel = SST_OPTIONS::SAS_SIMPLE; /*!< \brief Enum SST base model. */ | ||
bool sust = false; /*!< \brief Bool for SST model with sustaining terms. */ | ||
bool uq = false; /*!< \brief Bool for using uncertainty quantification. */ | ||
bool sas = false; /*!< \brief Bool for using Scale Adaptive Simulations. */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Probably the type is enough and "none" indicates no sas.
SST_OPTIONS sasModel = SST_OPTIONS::SAS_SIMPLE; /*!< \brief Enum SST base model. */ | |
bool sust = false; /*!< \brief Bool for SST model with sustaining terms. */ | |
bool uq = false; /*!< \brief Bool for using uncertainty quantification. */ | |
bool sas = false; /*!< \brief Bool for using Scale Adaptive Simulations. */ | |
SST_OPTIONS sasModel = SST_OPTIONS::NONE; /*!< \brief Enum SST base model. */ | |
bool sust = false; /*!< \brief Bool for SST model with sustaining terms. */ | |
bool uq = false; /*!< \brief Bool for using uncertainty quantification. */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure, I'll modify it.
Common/src/CConfig.cpp
Outdated
case SST_DDES: cout << "Delayed Detached Eddy Simulation (DDES) with Shear-layer Adapted SGS" << endl; break; | ||
case SST_IDDES: cout << "Delayed Detached Eddy Simulation (DDES) with Shear-layer Adapted SGS" << endl; break; | ||
case SST_SIDDES: cout << "Delayed Detached Eddy Simulation (DDES) with Shear-layer Adapted SGS" << endl; break; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The description is slightly different right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I planned to modify the details on the final implementation. I'll do it now
@@ -190,6 +190,10 @@ class CNumerics { | |||
|
|||
bool bounded_scalar = false; /*!< \brief Flag for bounded scalar problem */ | |||
|
|||
su2double lengthScale_i, lengthScale_j; | |||
su2double FTrans; /*!< \brief SAS function */ | |||
su2double VelLapl_X, VelLapl_Y, VelLapl_Z; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use a matrix type for the laplacian in CVariable and here you can have a pointer instead.
Put these variables close to other turbulence variables please.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the main problem with my implementation is that the norm of the velocity laplacian stated in the paper is
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That looks like the norm of the Laplacian of the velocity components, the way you are computing it is not very accurate but maybe it is good enough. You could do it the finite volume way by reusing the numerics classes we use for scalar viscous fluxes.
su2double VelLaplMag = VelLapl_X*VelLapl_X + VelLapl_Y*VelLapl_Y; | ||
if (nDim == 3) VelLaplMag += VelLapl_Z*VelLapl_Z; | ||
const su2double L_vK_1 = KolmConst * StrainMag_i / sqrt(VelLaplMag); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the velocity laplacian only used for the source term? Or will you have changes to the convection or diffusion fluxes?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is just for the source term
/*! | ||
* \brief Get the value of the turbulence kinetic energy. | ||
* \return the value of the turbulence kinetic energy. | ||
*/ | ||
inline su2double GetSSTVariables_k(unsigned long iPoint) const { return k(iPoint); } | ||
|
||
/*! | ||
* \brief Get the value of the turbulence frequency Omega. | ||
* \return the value of the turbulence frequency Omega. | ||
*/ | ||
inline su2double GetSSTVariables_omega(unsigned long iPoint) const { return Omega(iPoint); } | ||
|
||
/*! | ||
* \brief Set the value of the SST variables computed with SA solution. | ||
* \param[in] val_k | ||
* \param[in] val_Omega | ||
*/ | ||
void SetSSTVariables(unsigned long iPoint, su2double val_k, su2double val_Omega) { | ||
k(iPoint) = val_k; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are these changes related to the main theme? or were just debugging? If they can be separated to another PR let's do that please.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These are for computing the grid size for scale resolving simulations from an SA solution. Probably it has to be revised a little bit, since I found out that the formulation for the TKE is different if the QCR mod is used, thus I think I'll remove them for now.
externals/codi
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You need to undo this change to the codi version.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure, I'll do it
} | ||
const su2double mut = Node_Flow->GetEddyViscosity(iPoint); | ||
const su2double mu = Node_Flow->GetLaminarViscosity(iPoint); | ||
const su2double LESIQ = 1.0/(1.0+0.05*pow((mut+mu)/mu, 0.53)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are the constant here also used somewhere else? It would be good to avoid repeating hard-coded constants
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
They are used just here
inline virtual su2double GetVelLapl_X(unsigned long iPoint) const { return 0.0; } | ||
/*! | ||
* \brief Get the value of the value of FTrans. | ||
*/ | ||
inline virtual su2double GetVelLapl_Y(unsigned long iPoint) const { return 0.0; } | ||
/*! | ||
* \brief Get the value of the value of FTrans. | ||
*/ | ||
inline virtual su2double GetVelLapl_Z(unsigned long iPoint) const { return 0.0; } | ||
|
||
/*! | ||
* \brief Set the value of the value of FTrans. | ||
*/ | ||
inline virtual void AddVelLapl(unsigned long iPoint, su2double val_VelLapl_X, su2double val_VelLapl_Y) {} | ||
/*! | ||
* \brief Set the value of the value of FTrans. | ||
*/ | ||
inline virtual void AddVelLapl_Z(unsigned long iPoint, su2double val_VelLapl_Z) {} | ||
/*! | ||
* \brief Set the value of the value of FTrans. | ||
*/ | ||
inline virtual void SetVelLapl(unsigned long iPoint, su2double val_VelLapl_X, su2double val_VelLapl_Y) {} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use a pointer for velocity and then you only need one of each function instead of handling xyz separately.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, I'll try using the matrix type
- Changed names of SAS models - Added descriptions of functions - Clean up of output functions - Removed SA functions or SST variables
/*--- If iPoint is boundary it only takes contributions from other boundary points. ---*/ | ||
if (boundary_i && !boundary_j) continue; | ||
|
||
/*--- Add solution differences, with correction for compressible flows which use the enthalpy. ---*/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Check if comments need updates please
Hi @rois1995 any progress? Would be very interesting to add this to develop, looking forward to using it actually. |
Hi @bigfooted, unfortunately I do not have enough time/computational power to perform a proper validation. I only tried something with a NACA0021 at 17 deg and 60 deg and they were promising, at least for the DDES implementation. The SAS ones are not that good. I'll upload some post-processing as soon as I have the time to do so. |
I find your work really interesting. I've been studying the internal flow field in compressors and have had good results using SU2's SA_EDDES for calculating the cantilevered stator with a tip clearance. If you need help with code verification, I'd be glad to assist. |
Hi @Linnnnnn23, every help on the validation/verification is gladly accepted! Let me know if you need anything by my side. |
|
Hi @rois1995 , I'd like to help with validation/verification if I can. Let me know if you are interested. You can contact me at [email protected]. |
Hi @rois1995, I believe there is an error or a typo in the Babu's paper in the Q_SAS source term and in turn in your implementation, which may be the reason for the poor performance in SAS results. This term changes units depending on the output of the max function, which doesn't make any sense. I believe the terms in the max function should be divided by omega^2 and k^2 instead of omega and k, respectively. Which is exactly how it is done in https://resolver.tudelft.nl/uuid:5d23e2a6-5675-450d-bf3d-1dd40d736cae I will try some of the benchmark cases in these papers when I have the time. Let me know what you think. [edit: fixed the link to the tudelft repository] |
Ok but why should I do that? I have periodic boundaries here. |
You mentioned problems at the periodic boundaries
|
I am actually quite unsure of the implementation of the EDDES for SA. I think that the correct implementation is the one that I have used in the SST model (they are equivalent). SA Implementation
SST Implementation
Proposed here |
Backward Facing StepThe test case is the one in the NASA TMR page.
The grid is taken from the Level 3 among the 2D CGNS grids given here. Then it has been extended in the spanwise direction for 4H and with 40 points. The timestep is Velocity profiles in the channelThe SST-DDES model is lacking accuracy across all the velocity profiles, not really clear why since the results for the NACA0021 airfoil were satisfactory. The SST-EDDES and SA-EDDES solutions are similar, but the SST implementation is even better when the velocity fluctuations are considered. Reynolds stresses in the channelReference from here: The Reynolds stresses are consistent between the SA-EDDES and SST-EDDES formulations and are quite in line with the reference solutions (although they have used a finer grid). The SST-DDES results are the ones that deviates a lot, as also seen in the velocity profiles above. |
BFS UpdateI have done the simulations with the SST-IDDES and SST-SIDDES also for the coarse mesh of the BFS case. Results are quite good compared to SST-EDDES simulations. Only the SST-DDES case seems to have the worst results among all of them. Velocity Profiles in the channelReynolds StressesI am currently running the Medium grid only for the SST-EDDES case, but it will take a long time before having meaningful results. Up to know I haven't found a way of making the SAS model to work. There is something wrong with the computation of the Von-Karman length scale, which can be directly related to a wrong computation of the laplacian of the velocity. If anyone is interested in investigating this I think it will be material for another PR. I will remove the WIP from this PR. |
const su2double r_d = (kinematicViscosityTurb+kinematicViscosity)/(uijuij*k2*pow(wallDistance, 2.0)); | ||
const su2double f_d = 1.0-tanh(pow(8.0*r_d,3.0)); | ||
|
||
const su2double distDES = constDES * maxDelta; | ||
lengthScale = wallDistance-f_d*max(0.0,(wallDistance-distDES)); | ||
|
||
break; | ||
} | ||
case SA_ZDES: { | ||
/*--- Recent improvements in the Zonal Detached Eddy Simulation (ZDES) formulation. | ||
Deck | ||
Theoretical and Computational Fluid Dynamics - 2012 | ||
---*/ | ||
|
||
const su2double deltaDDES = geometry->nodes->GetMaxLength(iPoint); | ||
|
||
su2double delta[MAXNDIM] = {}, ratioOmega[MAXNDIM] = {}; | ||
|
||
for (const auto jPoint : geometry->nodes->GetPoints(iPoint)) { | ||
const auto coord_j = geometry->nodes->GetCoord(jPoint); | ||
for (auto iDim = 0u; iDim < nDim; iDim++){ | ||
const su2double deltaAux = abs(coord_j[iDim] - coord_i[iDim]); | ||
delta[iDim] = max(delta[iDim], deltaAux); | ||
} | ||
} | ||
|
||
const su2double omega = GeometryToolbox::Norm(3, vorticity); | ||
|
||
for (auto iDim = 0u; iDim < 3; iDim++){ | ||
ratioOmega[iDim] = vorticity[iDim]/omega; | ||
} | ||
|
||
su2double maxDelta = sqrt(pow(ratioOmega[0], 2)*delta[1]*delta[2] + | ||
pow(ratioOmega[1], 2)*delta[0]*delta[2] + | ||
pow(ratioOmega[2], 2)*delta[0]*delta[1]); | ||
|
||
const su2double r_d = (kinematicViscosityTurb+kinematicViscosity)/(uijuij*k2*pow(wallDistance, 2.0)); | ||
const su2double f_d = 1.0-tanh(pow(8.0*r_d,3.0)); | ||
|
||
if (f_d < 0.99){ | ||
maxDelta = deltaDDES; | ||
} | ||
|
||
const su2double distDES = constDES * maxDelta; | ||
lengthScale = wallDistance-f_d*max(0.0,(wallDistance-distDES)); | ||
|
||
break; | ||
} | ||
case SA_EDDES: { | ||
/*--- An Enhanced Version of DES with Rapid Transition from RANS to LES in Separated Flows. | ||
Shur et al. | ||
Flow Turbulence Combust - 2015 | ||
---*/ | ||
|
||
su2double vortexTiltingMeasure = nodes->GetVortex_Tilting(iPoint); | ||
|
||
const su2double omega = GeometryToolbox::Norm(3, vorticity); | ||
|
||
su2double ratioOmega[MAXNDIM] = {}; | ||
|
||
for (auto iDim = 0; iDim < 3; iDim++){ | ||
ratioOmega[iDim] = vorticity[iDim]/omega; | ||
} | ||
|
||
const su2double deltaDDES = geometry->nodes->GetMaxLength(iPoint); | ||
|
||
su2double ln_max = 0.0; | ||
for (const auto jPoint : geometry->nodes->GetPoints(iPoint)) { | ||
const auto coord_j = geometry->nodes->GetCoord(jPoint); | ||
su2double delta[MAXNDIM] = {}; | ||
for (auto iDim = 0u; iDim < nDim; iDim++){ | ||
delta[iDim] = fabs(coord_j[iDim] - coord_i[iDim]); | ||
} | ||
su2double ln[3]; | ||
ln[0] = delta[1]*ratioOmega[2] - delta[2]*ratioOmega[1]; | ||
ln[1] = delta[2]*ratioOmega[0] - delta[0]*ratioOmega[2]; | ||
ln[2] = delta[0]*ratioOmega[1] - delta[1]*ratioOmega[0]; | ||
const su2double aux_ln = sqrt(ln[0]*ln[0] + ln[1]*ln[1] + ln[2]*ln[2]); | ||
ln_max = max(ln_max, aux_ln); | ||
vortexTiltingMeasure += nodes->GetVortex_Tilting(jPoint); | ||
} | ||
vortexTiltingMeasure /= (nNeigh + 1); | ||
|
||
const su2double f_kh = max(f_min, | ||
min(f_max, | ||
f_min + ((f_max - f_min)/(a2 - a1)) * (vortexTiltingMeasure - a1))); | ||
|
||
const su2double r_d = (kinematicViscosityTurb+kinematicViscosity)/(uijuij*k2*pow(wallDistance, 2.0)); | ||
const su2double f_d = 1.0-tanh(pow(8.0*r_d,3.0)); | ||
|
||
su2double maxDelta = (ln_max/sqrt(3.0)) * f_kh; | ||
if (f_d < 0.999){ | ||
maxDelta = deltaDDES; | ||
} | ||
|
||
const su2double distDES = constDES * maxDelta; | ||
lengthScale = wallDistance-f_d*max(0.0,(wallDistance-distDES)); | ||
|
||
break; | ||
} |
Check notice
Code scanning / CodeQL
Long switch case Note
SA_ZDES (39 lines)
Switch has at least one case that is too long:
SA_EDDES (51 lines)
Copilot Autofix
AI about 2 months ago
Copilot could not generate an autofix suggestion
Copilot could not generate an autofix suggestion for this alert. Try pushing a new commit or if the problem persists contact support.
I've found a bug in SST-EDDES formulation, solved it but for some reason every simulation is now diverging, even the ones with SST-DDES. I will look into it. EDIT: It seems to be related to #2484 EDIT: It was related to the restart file being computed without the fix, thus values of Omega near wall were wrong. |
Backward Facing StepI have re-run the SST-DDES and SST-EDDES simulations with the bug fixed from #2484 and a minor bug solved for SST-EDDES. The fix seems to be slightly improving results for SST-DDES and worsening the results for SST-EDDES. However, what is happening for the EDDES model is that it is much more aligned with the SA-EDDES results with the fix included, which I think is desired as the LES formulation is essentially the same. I have also tried changing the computation of the vorticity-aligned cell surface for the SA-EDDES model as it is supposed to be implemented (formulation shown in previous comments). The results are not much different for the BFS case but I think that the new (correct) formulation should be preferred. I will try some more with the SAS formulation, if nothing works then I'll remove it from this PR. |
are there simulation results from other codes for this case available for comparison? So we know if the current performance is as good as it gets or not? |
The same case have been simulated by Molina et al. in the reference paper for the implementation of DDES in SU2. However, when I try to run the SA-EDDES model with Roe and FD as low dissipation it diverges (I am using the same grid as in the paper). I cannot find the specific config file that was used, thus I don't know if I am doing something wrong with the setup. The JST results are somewhat comparable with their, although I have a much larger simulation time (300H/U instead of 30). I will try making the Roe simulation work. EDIT: I have oscillations at the periodic boundaries when I use the FD low-dissipation method. |
It seems that the problem is encountered on skew elements on periodic boundaries. I have tried running the SA-EDDES simulation for 30 timesteps with only one inner iteration (the problem remains when running for one temporal iteration with 30 inner iterations). The same problem remains with SA-URANS simulation. The problem does not appear if Symmetry BCs are used instead of Periodic BCs. EDIT: I have tried with the SA-EDDES model and the problem still persists even with symmetry BCs, although it appears a little bit later. |
Proposed Changes
Hi everyone,
I have been working on the implementation of the DDES formulations for the SST model, following the work in "Development of DDES and IDDES Formulations for the k-ω Shear Stress Transport Model" (DOI:10.1007/s10494-011-9378-4). The implementation is easy, whereas the validation may take some time. I am currently working on the backward facing step and I will work on the flatplate too. The choice of the validation test cases is key since the computational cost is quite large, thus if you have any suggestions that may speed up this part then feel free to write them down.
Implemented versions:
I am also working on the Scale Adaptive Simulations (SAS) implementations for SST, following the work in "ON URANS SOLUTIONS WITH LES-LIKE BEHAVIOUR", Travis et al., and "[Evaluation of scale-adaptive simulation for transonic cavity flows", Babu et al., (https://www.inderscienceonline.com/doi/abs/10.1504/IJESMS.2016.075510). The last one, especially, is quite tricky due to the computation of the velocity laplacian. I tried computing it in Paraview as the divergence of the gradient field and it seems quite similar, but it is the first time that I've touched that section of the code, thus some work might still be needed.
Implemented versions:
PR Checklist
Put an X by all that apply. You can fill this out after submitting the PR. If you have any questions, don't hesitate to ask! We want to help. These are a guide for you to know what the reviewers will be looking for in your contribution.
pre-commit run --all
to format old commits.