Compressible flows can be characterised by abrupt changes in flow variables within the flow domain often referred to as shocks. These discontinuities can lead to numerical instabilities (Gibbs phenomena). This problem is prevented by locally adding a diffusion term to the equations to damp the numerical oscillations.
For the non-smooth artificial viscosity model the added artificial viscosity is constant in each element and discontinuous between the elements. The Euler system is augmented by an added Laplacian term on right hand side of equation 9.1 . The diffusivity of the system is controlled by a variable viscosity coefficient ε. For consistency ε is proportional to the element size and inversely proportional to the polynomial order. Finally, from physical considerations ε needs to be proportional to the maximum characteristic speed of the problem. The final form of the artificial viscosity is
where S is a sensor.
To enable the non-smooth viscosity model, the following line has to be added to the
As shock sensor, a modal resolution-based indicator is used
where ⟨⋅,⋅⟩ represents a L2 inner product, q and are the full and truncated expansions of a state variable (in our case density)
then the constant element-wise sensor is computed as follows
where s0 = sκ - 4.25 log10(p).
The modal sensor is enabled by default and it can be explicilty set adding the following line to
The diffusivity and the sensor can be controlled by the following parameters:
A sensor based p-adaptive algorithm is implemented to optimise the computational cost and
accuracy. The DG scheme allows one to use different polynomial orders since the coupling
between different elements are determined by common numerical fluxes and there is no further
coupling between the elements. Furthermore, the initial p-adaptive algorithm uses the same
sensor as the shock capturing algorithm to identify the smoothness of the local
solution so it rather straightforward to implement both algorithms at the same
The polynomial order in each element can be adjusted based on the sensor value that is obtained. Initially, a converged solution is obtained after which the sensor in each element is calculated. Based on the determined sensor value and the pre-defined sensor thresholds, it is decided to increase, decrease or maintain the degree of the polynomial approximation in each element and a new converged solution is obtained.
For now, the threshold values se, sds, ssm and sfl are determined empirically by looking at the sensor distribution in the domain. Once these values are set, two .txt files are outputted, one that has the composites called VariablePComposites.txt and one with the expansions called VariablePExpansions.txt. These values have to copied into a new .xml file to create the adapted mesh.
Aliasing effects, arising as a consequence of the nonlinearity of the underlying problem, need to be address to stabilise the simulations. Aliasing appears when nonlinear quantities are calculated at an insufficient number of quadrature points. We can identify two types of nonlinearities:
We consider two de-aliasing strategies based on the concept of consistent integration:
Since Nektar++ tackles separately the PDE and geometric aliasing during the projection and solution of the equations, to consistently integrate all the nonlinearities in the compressible NavierStokes equations, the quadrature points should be selected based on the maximum order of the nonlinearities:
where Qmin is the minimum required number of quadrature points to exactly integrate the highest-degree of nonlinearity, Pexp being the order of the polynomial expansion and Pgeom being the geometric order of the mesh. Bear in mind that we are using a discontinuous discretisation, meaning that aliasing effect are not fully controlled, since the boundary terms introduce non-polynomial functions into the problem.
To enable the global de-aliasing technique, modify the number of quadrature points by:
NUMMODES corresponds to P+1, where P is the order of the polynomial used to
approximate the solution.
NUMPOINTS specifies the number of quadrature points.
In this example, we solve a compressible flow past a circular cylinder using an implicit
discontinuous Galerkin compressible flow solver as shown in figure 9.2. For the implicit
CFL can be adopted to control the time step. For the
case of using
CFL, the CFL number can grow from
CFLEnd by a ratio of
adjust the time step at different stages of the simulation.
The CFL number, growing CFL number and the maximum value of the CFL number are controlled by the following parameters as also described in section 9.3
In this case, the numerical simulation starts from a CFL number of 0.1 and grows by a ratio of
1.1 up to a maximum value of CFL number of 2.0. Note that the
CFLEnd parameter may
assume higher values, depending on the strategy adopted. In addition, there is no need to
TimeStep parameter, since the time step size is calculated based on the CFL
number in each time step.
Since we are solving an implicit time-integration scheme, we must specify to the solver
EQType which corresponds to an implicit solver. It should be noted that
currently the CFS solver only supports
There are some other parameters controlling the performance of the implicit solver.
NonlinIterTolRelativeL2 determines the convergence tolerance of the nonlinear system
solver relative to the initial nonlinear system residual.
NekNonlinSysMaxIterations is the
maximum iteration number of the nonlinear system solver.
determines the convergence tolerance of linear system solver in each nonlinear iteration.
NekLinSysMaxIterations is the maximum iteration number of the linear system solver in
each nonlinear iteration.
LinSysMaxStorage determines the maximum number of variable
vector allowed to store in the linear system solver. Specifically for GMRES solver, the GMRES
solver will be restarted if
NekLinSysMaxIterations is larger than
LinSysMaxStorage determines the storage consumption of the GMRES solver. Regarding
the parameters to control the preconditioners in GMRES,
the number of time steps to freeze the preconditioning matrices, in other words,
the preconditioning matrices will be updated based on the number of time steps
provided by the user.
PreconItsStep determines the number of preconditioning
iterations to calculate the preconditioned vector. The default parameters are listed
Here, we choose to solve the compressible Navier-Stokes equations and use the 2nd order Singly Diagonally Implicit Runge–Kutta (SDIRK) method.