Von Karman vortex street
\[\renewcommand{\DdQq}[2]{{\mathrm D}_{#1}{\mathrm Q}_{#2}}
\renewcommand{\drondt}{\partial_t}
\renewcommand{\drondx}{\partial_x}
\renewcommand{\drondy}{\partial_y}
\renewcommand{\drondtt}{\partial_{tt}}
\renewcommand{\drondxx}{\partial_{xx}}
\renewcommand{\drondyy}{\partial_{yy}}
\renewcommand{\dx}{\Delta x}
\renewcommand{\dt}{\Delta t}
\renewcommand{\grandO}{{\mathcal O}}
\renewcommand{\density}[2]{\,f_{#1}^{#2}}
\renewcommand{\fk}[1]{\density{#1}{\vphantom{\star}}}
\renewcommand{\fks}[1]{\density{#1}{\star}}
\renewcommand{\moment}[2]{\,m_{#1}^{#2}}
\renewcommand{\mk}[1]{\moment{#1}{\vphantom{\star}}}
\renewcommand{\mke}[1]{\moment{#1}{e}}
\renewcommand{\mks}[1]{\moment{#1}{\star}}\]
In this tutorial, we consider the classical \(\DdQq{2}{9}\) to
simulate the Von Karman vortex street modeling by the Navier-Stokes
equations.
In fluid dynamics, a Von Karman vortex street is a repeating pattern of
swirling vortices caused by the unsteady separation of flow of a fluid
around blunt bodies. It is named after the engineer and fluid dynamicist
Theodore von Karman. For the simulation, we propose to simulate the
Navier-Stokes equation into a rectangular domain with a circular hole of
diameter \(d\).
The \(\DdQq{2}{9}\) is defined by:
- a space step \(\dx\) and a time step \(\dt\) related to the
scheme velocity \(\lambda\) by the relation
\(\lambda=\dx/\dt\),
- nine velocities \(\{(0,0), (\pm1,0), (0,\pm1), (\pm1, \pm1)\}\),
identified in pyLBM by the numbers \(0\) to \(8\),
- nine polynomials used to build the moments
\[\{1, \lambda X, \lambda Y, 3E-4, (9E^2-21E+8)/2, 3XE-5X, 3YE-5Y,X^2-Y^2, XY\},\]
where \(E = X^2+Y^2\).
- three conserved moments \(\rho\), \(q_x\), and \(q_y\),
- nine relaxation parameters (three are \(0\) corresponding to
conserved moments):
\(\{0,0,0,s_\mu,s_\mu,s_\eta,s_\eta,s_\eta,s_\eta\}\), where
\(s_\mu\) and \(s_\eta\) are in \((0,2)\),
- equilibrium value of the non conserved moments
\[\begin{split}\begin{aligned}\mke{3} &= -2\rho + 3(q_x^2+q_y^2)/(\rho_0\lambda^2), \\ \mke{4} &= \rho-3(q_x^2+q_y^2)/(\rho_0\lambda^2), \\ \mke{5} &= -q_x/\lambda, \\ \mke{6} &= -q_y/\lambda, \\ \mke{7} &= (q_x^2-q_y^2)/(\rho_0\lambda^2), \\ \mke{8} &= q_xq_y/(\rho_0\lambda^2),\end{aligned}\end{split}\]
where \(\rho_0\) is a given scalar.
This scheme is consistant at second order with the following equations
(taken \(\rho_0=1\))
\[\begin{split}\begin{gathered} \drondt\rho + \drondx q_x + \drondy q_y = 0,\\ \drondt q_x + \drondx (q_x^2+p) + \drondy (q_xq_y) = \mu \drondx (\drondx q_x + \drondy q_y ) + \eta (\drondxx+\drondyy)q_x, \\ \drondt q_y + \drondx (q_xq_y) + \drondy (q_y^2+p) = \mu \drondy (\drondx q_x + \drondy q_y ) + \eta (\drondxx+\drondyy)q_y,\end{gathered}\end{split}\]
with \(p=\rho\lambda^2/3\).
We write a dictionary for a simulation of the Navier-Stokes equations on
\((0,1)^2\).
In order to impose the boundary conditions, we use the bounce-back
conditions to fix \(q_x=q_y=\rho v_0\) at south, east, and north
where the velocity \(v_0\) could be \(v_0=\lambda/20\). At west,
we impose the simple output condition of Neumann by repeating the second
to last cells into the last cells.
The solution is governed by the Reynolds number
\(Re = \rho_0v_0d / \eta\), where \(d\) is the diameter of the
circle. Fix the relaxation parameters to have \(Re=500\). The
relaxation parameters related to the bulk viscosity \(\mu\) should
be large enough to ensure the stability (for instance
\(\mu=10^{-3}\)).
We compute the stationary solution of the problem obtained for large
enough final time. We plot the vorticity of the solution with the
function imshow of matplotlib.
Reynolds number: 5.000e+02
Bulk viscosity : 1.000e-03
Shear viscosity: 1.000e-05
relaxation parameters: [0.0, 0.0, 0.0, 1.4450867052023122, 1.4450867052023122, 1.9923493783869939, 1.9923493783869939, 1.9923493783869939, 1.9923493783869939]