LaxCG: ONERA wing
This example uses LaxCG in Inciter to compute a stationary flow field around a wing in transconic and in low-Mach-number flows.
Problem configuration
This is the popular and well-documented aerodynamic flow over the ONERA M6 wing, see [1,3]. First, the problem is configured with the free-stream Mach number of 0.84 and an angle of attack of 3.06 degrees, which yields a transonic flow. Then the flow is computed at a speed of approximately 1 m/s which yields a near-incompressible (constant-density) flow. Both configurations are computed using RieCG and LaxCG. Since the solution converges to steady state, the most efficient ways to compute this problem are to use implicit time marching or local time stepping [2] of which the latter is implemented in both solvers allowing taking larger time steps for larger cells.
Problem setup
The computational mesh used consists of 710,971 tetrahedra connecting 131,068 points, whose surface mesh is depicted below. The initial conditions prescribe the Mach numbers of 0.84 or 0.003 and the velocity with an angle of attack of 3.06 degrees. At the outer surface of the domain, characteristic far-field boundary conditions are applied, while along the wing surface symmetry (free-slip) conditions are set.
Code revision to reproduce
To reproduce the results below, use code revision 43ba64a and the control file below.
Control file
-- vim: filetype=lua: print "Onera M6 wing" --nstep = 10 ttyi = 100 cfl = 0.5 --solver = "riecg" solver = "laxcg" flux = "hllc" steady = true residual = 1.0e-14 rescomp = 1 part = "phg" mat = { spec_heat_ratio = 1.4 } rho = 1.225 -- density of air at STP, kg/m3 pre = 1.0e+5 -- free-stream pressure, N/m^2 alpha = 3.06 -- angle of attack, degrees --mach = 0.84 mach = 0.003 c = math.sqrt(mat.spec_heat_ratio * pre / rho) print("Free-stream Mach number = ",mach) ic = { density = rho, pressure = pre, velocity = { mach * c * math.cos( alpha*math.pi/180.0 ), mach * c * math.sin( alpha*math.pi/180.0 ), 0.0 } } velinf = ic.velocity turkel = 3.0 bc_sym = { sideset = { 3 } } bc_far = { pressure = ic.pressure, density = ic.density, velocity = ic.velocity, sideset = { 4 } } fieldout = { iter = 10000, sideset = { 3 }, } diag = { iter = 10, format = "scientific", precision = 12 }
Run using 30 CPUs
./charmrun +p30 Main/inciter -i onera_710K.exo -c onera.q
Convergence to steady state
The figures below depict the convergence history of the L2-norms of the residuals of the conserved quantities for the high-Ma case running RieCG and LaxCG, showing that both solvers converge for the high-speed flow.
The next two figures show that computing the low-Ma case RieCG fails to converge, while the time-derivative preconditioning technique implemented in LaxCG successfully converges even in such nearly constant-density flow.
Visualization
ParaView can be used for interactive visualization of the numerically computed 3D fields as
paraview out.e-s.0.30.0
Results only on the wing surface can be visualized by first stitching the partitioned surface output files into a single surface output file followed by invoking paraview on the stitched surface exo file:
Main/meshconv -i out-surf.3.e-s.0.30.% -o out-surf.3.exo paraview out-surf.3.exo
Results
The converged Mach number distribution with superimposed density contours on the wing surface and symmetry plane is depicted below, computed by the LaxCG solver for both Mach number configurations.
The numerical pressure coefficient
distribution is compared to experimental data [3] at various semi-spans in the following figures computed by LaxCG at using two different meshes whose properties are given in the table below. Here the subscript denotes the far-field conditions, is the length of the velocity vector, and is the half-wing span.
Mesh | Points | Tetrahedra |
---|---|---|
coarse | 131,068 | 710,971 |
fine | 514,350 | 2,860,298 |