Consistent Results with Various Shock Capturing Options
The shock capturing schemes in Nektar++ have recently been updated. However, the solver still produces inconsistent results, and it is not clear if the shock capturing always works as intended. This issue tracks all the known inconsistencies, and the progress to fix them.
In Nektar++, there are two shock capturing options, the `NonSmooth` and the `Physical` option. The first option adds a Laplacian diffusion term to the RHS of the equations, whereas the second one adds some artificial viscosity to the physical viscosity. In both cases, the artificial viscosity is calculated based on a sensor, which is designed to detect shocks and/or under-resolved features.
At the moment, the focus is to make sure that the `NonSmooth` and the `Physical` option works as intended, regardless of sensor type. This implies that we want both options to invoke the right operators (Laplacian or added viscosity) and work consistently with the explicit and the implicit solver. Below is a checklist of options that we would like to verify (using the `Modal` sensor):
- [x] `NonSmooth` works correctly with:
- [x] `EulerCFE` [tests exist, AV invoked correctly]
- [x] `NavierStokesCFE` [update in separate branch, verify by comparing to `EulerCFE`]
- [x] `NonSmooth` is not invoked and a warning is raised with:
- [x] `EulerImplicitCFE`
- [x] `NavierStokesImplicitCFE` [currently used if LDG Diffusion is used, remove?]
- [x] `Physical` works correctly with:
- [x] `NavierStokesCFE` [tests exist, AV invoked correctly]
- [x] `NavierStokesImplicitCFE`
- [x] `Physical` is not invoked and a warning is raised with:
- [x] `EulerCFE`
- [x] `EulerImplicitCFE`
We have also noted that the values for the `Sensor` and the `ArtificialViscosity` which are exported to the solution file are different if we run the implicit or the explicit solver. Therefore, we want to ensure that the following options give the same results:
- [ ] Value of `Sensor` is the same in the output file for:
- [x] `NavierStokesCFE` and `NavierStokesImplicitCFE` (both using `Physical` + `Modal`)
- [ ] Value of `Sensor` is the same during time integration for:
- [x] `NavierStokesCFE` and `NavierStokesImplicitCFE` (both using `Physical` + `Modal`)
- [ ] Value of `ArtificialViscosity` is the same in the output file for:
- [x] `NavierStokesCFE` and `NavierStokesImplicitCFE` (both using `Physical` + `Modal`)
Remaining things that we want to address:
- [ ] Add option to specify Laplacian AV with the keyword "`Laplacian`"
- [x] Investigate bug when `Physical` + `Modal` + `NavierStokesImplicitCFE` is used (`Fatal: Level 1 assertion violation: m_muAv not set`) [fixed by updating AV in `NavierStokesImplicitCFE::v_DoDiffusionCoeff()`]
- [x] Fix so that we can freeze the update of the AV in the implicit solve
- [x] Fix so that the option `<I PROPERTY="Smoothing" VALUE="C0"/>` works (currently it segfaults on 3D Tets)
issue