Quick Start: Compressible Flow

This notebook demonstrates a minimal transient compressible flow setup: inviscid flow around a cylinder at Mach 0.3 using HDG with implicit Euler time integration.

[1]:
import ngsolve as ngs
ngs.ngsglobals.msg_level = 0
from dream.mesh import get_cylinder_omesh
from dream.compressible_flow import CompressibleFlowSolver, FarField, InviscidWall, Initial

ngs.SetNumThreads(12)
[2]:
# Structured O-mesh around cylinder: inner radius 0.5, outer radius 15
mesh = get_cylinder_omesh(ri=0.5, ro=15, n_polar=16, n_radial=8, geom=1.5)
[3]:
solver = CompressibleFlowSolver(mesh)

# Physical parameters
solver.mach_number = 0.3
solver.scaling     = 'aerodynamic'

# Discretisation
solver.fem            = 'conservative_hdg'
solver.fem.order      = 2
solver.riemann_solver = 'roe'

# Time integration
solver.time                = 'transient'
solver.fem.scheme          = 'implicit_euler'
solver.time.timer.interval = (0, 0.5)
solver.time.timer.step     = 5e-3

# Boundary and initial conditions
Uinf = solver.get_farfield_fields((1, 0))
solver.bcs['left|right'] = FarField(fields=Uinf)
solver.bcs['cylinder']   = InviscidWall()
solver.dcs['default']    = Initial(fields=Uinf)

# with ngs.TaskManager():
#     # Sets up finite element spaces, assembles bilinear forms and applies boundary conditions
#     solver.initialize()
#     # Runs the time-stepping loop defined by solver.time
#     solver.solve()