Backflow stabilization#
Here we demonstrate simulation divergence due to backflow, and how we can stabilize the flow to prevent this in OasisMove, based on the first backflow stabilization method tested by Moghadam et al. [EMBH+11]. To demonstrate this we will be investigating parabolic flow through an eccentric stenosis model in two-dimensions. The setup is inspired by the three-dimensional study of stenotic flow by Varghese et al. [VFF07], who consider a longer stenosis model than presented here. Note that this is not a moving domain simulation, but the implementation of backflow stabilization is general, and works for both rigid and moving domains.
Problem description#
The problem consists of a two-dimensional stenosis, which is constructed based on its (dimensionless) diameter \(D\). In this example we set \(D=6.35\), and let the length of the stenosis be \(L=2D\), as shown Fig. 9, while the domain \(\Omega\) is defined as \(\Omega = [x_0D, x_1D]\times[-D/2, D/2]\), where \(x_0\) and \(x_1\) are scalar factors, which adjust the length of the domain. At the inlet a constant parabolic velocity profile is prescribed with maximum velocity \(U_0\), while the outlet is considered an open boundary with a zero pressure boundary condition. A visualization of the triangulated mesh, and a zoomed in view on the stenosis is shown in Fig. 10.
Furthermore, the simulation with default parameters is run for a Reynolds number equal to \(Re=2540\), which is adjustable in the problem file Stenosis.py, either by changing the kinematic viscosity \(\nu\), the cylinder diameter \(D\), or the maximum velocity \(U_0\).
Backflow stabilization in OasisMove#
This problem is intended to demonstrate how to prevent backflow divergence. Simulation divergence due to backflow is a rather common in cardiovascular flows, particularly in blood flow in large vessels or at the mitral valve orifice in the left atrium. Because backflow is a naturally occurring physiologic phenomenon, careful treatment is necessary to realistically model backflow without artificially altering the local flow dynamics. To achieve this we consider the first backflow stabilization method first proposed by Bazilevs et al. [BGH+09] and rigorously tested by Moghadam et al. In short, the method modifies the weak formulation of the Navier-Stokes equations by adding a backflow stabilization term for the Neumann boundaries, in this case the outlet. Specifically, the following convective traction term is added to the weak form on each Neumann boundary to be stabilized:
where \(\beta\) is a positive coefficient between 0.0 and 1.0, \(\mathbf u\) is the velocity vector, \(\mathbf v\) is the velocity test function, \(\partial \Omega\) denotes the boundary, and \((\mathbf u \cdot \mathbf n)\_\) is defined as:
In OasisMove, the backflow stabilization method is applied by supplying the
backflow_facets
argument, in addition to the backflow_beta
parameter. The backflow_beta
parameter determines the
strength of the stabilization term and can be any float value between 0.0 and 1.0, while backflow_facets
represents a
list of IDs corresponding to the boundary IDs of the Neumann boundaries. For the stenosis problem, where the outlet
boundary ID is 3, backflow stabilization can be added to the outlet with a strength of 0.2 by running the following
command:
$ oasismove NSfracStep solver=IPCS_ABCN problem=Stenosis backflow_facets="[3]" backflow_beta=0.2
Note that the list of boundaries has to be encapsulated by quotation marks, or the IDs can be manually set
inside Stenosis.py. Note
also that backflow stabilization in OasisMove is currently only implemented for the IPCS_ABCN
and IPCS_ABCN_Move
solvers.
Simulation in OasisMove#
To run the stenosis problem for \(T=15\) with default parameters in OasisMove, which by defaut includes backflow stabilization at the outlet, you can run the following command:
$ oasismove NSfracStep solver=IPCS_ABCN problem=Stenosis
where we specify the NSfracStep
module and IPCS_ABCN
solver because the problem is not moving. Alternatively we can
pass the dynamic_mesh=False
flag for rigid domain problems, telling the default solver (IPCS_ABCN_Move
) to skip
solving the mesh equations:
$ oasismove NSfracStepMove problem=Stenosis dynamic_mesh=False
The default time step is set to \(T=15\) and might take some minutes to complete, depending on your hardware. Alternatively, you can solve the problem in parallel to speed up the simulation time:
$ mpirun -np 8 oasismove NSfracStepMove problem=Stenosis dynamic_mesh=False
Results#
When the simulation is finished, there will be a folder named results_stenosis
, which contains the velocity and
pressure solution in .xdmf
format. In Fig. 11 we display the resulting velocity field without (top) and
with (bottom) backflow stabilization, where we have added vectors scaled by the velocity magnitude. Note that the
simulation without stabilization diverges at approximately \(T=14\), while the stabilized simulation keeps running until
\(T=50\).
- BGH+09
Y Bazilevs, JR Gohean, TJR Hughes, RD Moser, and Y25718211229 Zhang. Patient-specific isogeometric fluid–structure interaction analysis of thoracic aortic blood flow due to implantation of the jarvik 2000 left ventricular assist device. Computer Methods in Applied Mechanics and Engineering, 198(45-46):3534–3550, 2009.
- EMBH+11
Mahdi Esmaily Moghadam, Yuri Bazilevs, Tain-Yen Hsia, Irene E Vignon-Clementel, Alison L Marsden, and Modeling of Congenital Hearts Alliance (MOCHA). A comparison of outlet boundary treatments for prevention of backflow divergence with relevance to blood flow simulations. Computational Mechanics, 48:277–291, 2011.
- VFF07
Sonu S Varghese, Steven H Frankel, and Paul F Fischer. Direct numerical simulation of stenotic flows. part 1. steady flow. Journal of Fluid Mechanics, 582:253–280, 2007.