0% found this document useful (0 votes)
198 views

Using Python To Solve The Navier-Stokes Equations - Applications

This document discusses using Python to solve the Navier-Stokes equations through preconditioned iterative methods. The authors created discretized matrices from the Navier-Stokes equations using finite difference methods in Python. They focus on applying preconditioned Krylov subspace iterative solvers to the linearized systems. Numerical results demonstrating the performance of the preconditioned iterative methods are presented. The paper also compares Python and MATLAB for solving these types of problems.

Uploaded by

Wilfrid
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
198 views

Using Python To Solve The Navier-Stokes Equations - Applications

This document discusses using Python to solve the Navier-Stokes equations through preconditioned iterative methods. The authors created discretized matrices from the Navier-Stokes equations using finite difference methods in Python. They focus on applying preconditioned Krylov subspace iterative solvers to the linearized systems. Numerical results demonstrating the performance of the preconditioned iterative methods are presented. The paper also compares Python and MATLAB for solving these types of problems.

Uploaded by

Wilfrid
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 12

City University of New York (CUNY)

CUNY Academic Works

Publications and Research Borough of Manhattan Community College

2015

Using Python to Solve the Navier-Stokes Equations - Applications


in the Preconditioned Iterative Methods
Jia Liu
University of West Florida

Lina Wu
CUNY Borough of Manhattan Community College

Xingang Fang
University of West Florida

How does access to this work benefit you? Let us know!


More information about this work at: https://academicworks.cuny.edu/bm_pubs/108
Discover additional works at: https://academicworks.cuny.edu

This work is made publicly available by the City University of New York (CUNY).
Contact: [email protected]
Journal of Scientific Research & Reports
7(3): 207-217, 2015, Article no.JSRR.2015.202
ISSN: 2320-0227

SCIENCEDOMAIN international
www.sciencedomain.org

Using Python to Solve the Navier-Stokes Equations


- Applications in the Preconditioned Iterative Methods
Jia Liu1∗ , Lina Wu2 and Xingang Fang3
1 Department of Mathematics and Statistics, University of West Flroida, Pensacola, Florida, 32514,

USA.
2 Department of Mathematics, Borough of Manhattan Community College, The City University of

New York, New York, NY 10007, USA.


3 Department of Computer Science, University of West Flroida, Pensacola, Florida, 32514, USA.

Article Information
DOI: 10.9734/JSRR/2015/17346
Editor(s):
(1) Narcisa C. Apreutesei, Technical University of Iasi, Romania.
Reviewers:
(1) Anonymous, China.
(2)Ette Harrison Etuk, Department of Mathematics Computer Science, Rivers State University of
Science and Technology, Nigeria.
Complete Peer review History:
http://www.sciencedomain.org/review-history.php?iid=1127&id=22&aid=9129

Original Research Article

Received: 9th March 2015


Accepted: 3rd April 2015
Published: 5th May 2015

Abstract
This article describes a new numerical solver for the Navier-Stokes equations. The proposed solver
is written in Python which is a newly developed language. The Python packages are built to solve
the Navier-Stokes equations with existing libraries. We have created discretized coefficient matrices
from systems of the Navier-Stokes equations by the finite difference method. In addition we focus on
the preconditioned Krylov subspace iterative methods in the linearized systems. Numerical results
of performances for the Preconditioned iterative methods are demonstrated. The comparison
between Python and Matlab is discussed at the end of the paper.

Keywords: Python; Navier-Stokes equations; Iterative methods; Preconditioner.


2010 Mathematics Subject Classification: 65Y15; 65F10; 68N15

*Corresponding author: E-mail: [email protected];


Liu et al.; JSRR, 7(3), 207-217, 2015; Article no.JSRR.2015.202

1 Introduction • Portability: Python is a free and open


source on all platforms. The run time
The numerical solvers for Partial Differential environment is light-weighted (239M
Equations (PDEs) are developed greatly in EPD Python full scientific computing
recent years. Most of them are based on distribution) compared to the multi-
the traditional languages such as C, C++, or gigabyte Matlab. It can be easily deployed
Fortran etc. However, those languages are high anywhere while the installation of Matlab
performances but lower level languages. In is limited by the license.
general Languages like C, C++ require relative • Flexibility: Python is a perfect glue
strong programming backgrounds. Therefore language. It is not hard to find
more scientists start to develop the numerical or write Python wrapper to provide
applications for PDEs in Python due to its API (application programming interface)
huge potential advantages in the computational of existing high performance software
mathematics areas. packages written in C, C++, FORTRAN
or even Matlab. Thus, it provides a way
1.1 Why Python? to quickly develop applications by reusing
existing code. In the case of Matlab’s
Python is an interpreted, high-level, object- closed ecosystem, scientists have to rely
oriented, dynamic general-purpose programming on the packages only from MathWorks,
language. Since python 1.0 was published in the company which developed Matlab.
1994, it has been one of the most popular Unfortunately, the underlying algorithms
programming languages (3rd place on PYPL are proprietary and expensive.
index, Feb 2014). The advantages of the • Performance: Though performance
Python programming language include rapid is a major concern of Python given
development, excellent readability, fast learning its interpreted, dynamic nature. This
curves, huge community support and great problem can be usually circumvent by
cross-platform capability. It is extensively delegating most computational tasks to
used in desktop application developments, web high performance packages written in
application developments, scriptings, system C, FORTRAN. Cython, the variation of
managements as well as scientific computations. standard Python (CPython), provided a
In the scientific computation area, Python has way to take the advantages of both the
the following important features compared with rapid development capability of Python
Matlab: and the high performance of C language
• Code quality: Compared with the by translating a superset of Python
Matlab scripting language, Python is a syntax to C code. In many scenarios, it
full stack language supporting multiple will provide comparable performance to
programming paradigms including scientific packages.
object-oriented, imperative, functional • Availability of packages: Python and
programming, etc. It is capable of the huge number of extension packages
more computational tasks. With the are freely available (41311 on PyPI,
unique indent block, Python code is more a Python package repository on Mar.
readable. The Python module system is a 2014). There are also high quality
sophisticated way to organize source code packages for all aspects of scientific
files compared to Matlab which lacks the computing. Numpy/Scipy are popular
support on namespace. The zero-based Python numerical packages that provide
bracket array indexing is much more similar functionality and performance to
compatible with most other programming Matlab. Matplotlib is a very useful package
languages. In addition Python is a for plotting. Numpy/Scipy and Matplotlib
signal processing system compared to the together can cover most of the tasks done
Matlab which is a one-based parenthesis on Matlab. Moreover, there are many
system. other very useful Python packages for

208
Liu et al.; JSRR, 7(3), 207-217, 2015; Article no.JSRR.2015.202

scientific computing including the scientific are more interested in the applications of
notebook iPython, the statistic package the preconditioned Krylov subspace iterative
panda, the cross-platform GUI toolkits methods. We will compare the performances
pyQt, wxPython and GTK, the all-in-one between Python and Matlab.
scientific Python distribution Pythonxy and
canopy express (former EPD Python), the
test framework unittest and nose. 1.2 The Naviver-Stokes Equations
• Cost: Matlab is very expensive for The Navier-Stokes equations, which are
the researchers while Python and named after Claude-Louis Navier and George
corresponding packages are totally free. It Gabriel Stokes, come from the motion of fluid
is more favorable for students who would substances. The equations are important with
like to learn the numerical analysis with no both academic and economic interests. The
cost. Navier-Stokes equations model the movement
of the fluid from various types, such as the
With the advanced features of Python, we are weather, ocean currents, water flows in a pipe
able to develop some efficient and easy-to- and air flows around a wing. They are also
use softwares to solve PDEs. In this paper, used as the models to study the blood flow, the
we focus on using Python to solve the PDEs design of power stations, the analysis of pollution.
arising from the incompressible flow problems, The incompressible Navier-Stokes equations are
especially the Navier-Stokes equations. We given by the following PDEs:

∂u
− ν∆u + (u · ∇) u + ∇p = f in Ω × (0, T ] (1.1)
∂t
∇·u=0 in Ω × [0, T ] (1.2)
Bu = g on Ω × [0, T ] (1.3)
u(x, 0) = u0 in Ω (1.4)

Here the variable u = u(x, t) ∈ Rd , where d = 2, or d = 3 is a vector-valued function representing the


velocity of the fluid, and the scalar function p = p(x, t) ∈ R represents the pressure. Ω ⊂ Rd ,where
d = 2, or d = 3. For an example, Ω is defined as [0, 1] × [0, 1] ⊂ R2 . T > 0 is a constant. Here B is
the boundary condition operator such as the Dirichlet Boundary condition or the Neumann’s boundary
condition.

Assume Ω ⊂ R2 . Denoting u = (u, v), and f = (f1 , f2 ), we can write the equations (1.1)–(1.2) in
scalar form as follows:

∂u ∂u ∂u ∂p
− ν∆u + u +v + = f1 ,
∂t ∂x ∂y ∂x
∂v ∂v ∂v ∂p
− ν∆v + u +v + = f2 ,
∂t ∂x ∂y ∂y
∂u ∂v
+ = 0.
∂x ∂y

209
Liu et al.; JSRR, 7(3), 207-217, 2015; Article no.JSRR.2015.202

The pressure field, p, is determined up to an and Dolfin (www.f enics.org/dolf in).


additive constant. To uniquely determine p we
may impose some additional condition, such as
∫ 2 Materials and Methods
p dx = 0 . (1.5)

2.1 Creating Matrices for the
The source function f is given on a d-dimensional Navier-Stokes Equations
domain denoted by Ω ⊂ Rd , with ∂Ω the
boundary of Ω. Here ν > 0 is a given constant The unsteady (time-dependent) case leads to
called the kinematic viscosity, which is ν = sequences of saddle point systems when fully
O(Re−1 ). Here Re is the Reynolds number: implicit time-stepping schemes are used. For
Re = VνL , where V denotes the mean velocity example, we can discretize the time derivative
and L is the diameter of Ω (see [1]). term ∂u
∂t
using backward Euler or Crank-Nicolson
schemes; see [2]. For the space discretization,
Numerical algorithms for the computational either finite element methods or finite difference
solutions of the Navier-Stokes equations have methods will work. We first consider the Marker-
been discussed for several decades. This and-Cell (MAC) discretization, which is due to
field still remains active in the research area. Harlow and Welch (1965). See [3] for more
In this paper, we will implement the efficient details. The particularity of MAC scheme is the
solvers for the Navier-Stokes equations using location of the velocity and pressure unknowns.
Python. Though we already have some Pressures are defined at the center of each
numerical solvers or softwares for solving cell and the velocity components are defined at
PDEs on line, very few of them consider the the cell edges (or cell faces in 3D). Such an
preconditioned iterative solvers for the Navier- arrangement makes the grid suitable for a control
Stokes equations. We are the first to develop volume discretization. We also can use Dolfin
a Python package which enables us to solve to generate the matrices for the Navier-Stokes
the Navier-Stokes equations using different equations using the finite element method.
preconditioning techniques. We will compare
the performances of different precondtioners First we can use backward Euler’s method to
and the convergence rates of the iterative discretize (1.1)–(1.2) with respect to the time and
methods. During our numerical experiences, use the Picard’s iteration to linearize equations
we have used many mature libraries from the (1.1)–(1.2). We obtain the a sequence of
Web in the package, including NumPy (http : linear problems which are also called the Oseen
//numpy.scipy.org), Scipy (www.scipy.org), equations:

αu − ν∆u + (uk · ∇) u + ∇p = f in Ω × (0, T ]


∇·u=0 in Ω × [0, T ]

Here α is O(δt), where δt is the time step. And uk is the solution which is obtained from the previous
step. The initial guess u0 can be the solution from the Stokes equations which are

αu − ν∆u + ∇p = f in Ω × (0, T ]
∇·u=0 in Ω × [0, T ]

The following finite difference expressions are utilized (for the two dimensional case) when we
discretize the equations with respect to the space:

210
Liu et al.; JSRR, 7(3), 207-217, 2015; Article no.JSRR.2015.202

∂2u uj+3/2,k − 2uj+1/2,k + uj−1/2,k


|j+1/2;k = ,
∂x2 ∆x2
∂2u uj+1/2,k+1 − 2uj+1/2,k + uj+1/2,k−1
|j+1/2;k = ,
∂y 2 ∆y 2
∂2v vj+2,k−1/2 − 2vj+1,k−1/2 + vj,k−1/2
|j+1;k−1/2 = ,
∂x2 ∆x2
2
∂ v vj,k+1/2 − 2vj,k−1/2 + vj,k−3/2
|j;k−1/2 = ,
∂y 2 ∆y 2
∂u uj+3/2,k − uj−1/2,k
|j+1/2;k = ,
∂x ∆x
∂u uj+1/2,k+1 − uj+1/2,k−1
|j+1/2;k = ,
∂y ∆y
∂v vj+2,k−1/2 − vj,k−1/2
|j+1;k−1/2 = ,
∂x ∆x
∂v vj,k+1/2 − uj,k−3/2
|j;k−1/2 = ,
∂y ∆y
∂p pj+1,k − pj,k
|j+1/2;k = ,
∂x ∆x
∂p pj,k − pj,k−1
|j;k−1/2 = .
∂y ∆y

With the above scheme, we obtain the Notice here the linear system Ax = b is
following linear system Ax = b , where the linear system we need to solve at each
  Picard’s iteration. Therefore, at each k-iteration
A1 0 BT1 in the Picard’s iteration, we have the solution x.
A =  0 A 2 B2  , T
(2.1) Under certain conditions, the sequence xinfk=1 will
B1 B2 0 converge to the solution of the nonlinear problem
where A1 , A2 are discrete reaction-convection- (1.1) to (1.4).
diffusion operators. A1 is the approximation
of αu − ν∆u + u ∂u + v ∂u , and A2 is the
∂x ∂y 2.2 Numerical Solvers
approximation of αv − ν∆v + v ∂x ∂v ∂v
+ v ∂y . Here
B1 ≈ ∂x and B2 ≈ ∂y . We denote the matrix A
∂ ∂ Currently, our most important application is to
in the block form: play with the different numerical solvers for the
[ ] Saddle point system Ax = b with the coefficient
A BT matrix 2.1. We focus on Krylov subspace iterative
A= , (2.2)
B 0 methods: such as the General Minimum Residual
where Method (GMRES) [4] and the Biconjugate
[ ] gradient stabilized method (BICGSTAB) [5]. For
A1 0 both methods, the preconditioning techniques are
A= , (2.3)
0 A2 important for the Navier-Stokes equations. The
and B = [B1 B2 ]. preconditioner P is a matrix which approximates
A in some yet-undefined sense. It is obvious that
The right hand side b = [f1 , f2 , 0]T . The the linear system
discretized linear system Ax = b is the major
system we focus on. Notice here the matrix A is P −1 Ax = P −1 b (2.4)
a large sparse matrix. Therefore the computation has the same solution as
involving the matrix A should always consider the
sparsity and use sparse operations. Ax = b . (2.5)

211
Liu et al.; JSRR, 7(3), 207-217, 2015; Article no.JSRR.2015.202

However (2.4) may be easier to solve, where


which means GMRES or other Krylov subspace [ A+AT
] [ A−AT
]
O BT
iterative methods may converge faster. System H= 2 ,S = 2 .
O O B O
(2.4) is preconditioned from the left, and we can
also preconditioned from the right: Ĥ = H + rIn+m , Ŝ = S + rIn+m .
As we can see, H is the symmetric part of the
AP −1 y = b, x = P −1 y . (2.6)
coefficient matrix A, i.e.
A + AT
Many research work has been published in H= ,
2
the area of the preconditioning technique. and S is the skew-symmetric part of the
Unfortunately, there is no universal ”ideal” coefficient matrix A, i.e.
preconditioner for all linear systems. See
a thorough discussion of the precondtioning A − AT
S= .
techniques in [6,7], ect. The choice of the 2
preconditioner is strongly case dependent which In order to make H and S invertible, we shift both
is the most challenging topic in the iterative matrices by adding rIn+m , where r ̸= 0 is an
solvers. We implemented the GMRES iterative arbitrary parameter, and In+m is a identity matrix
solvers with no preconditioner, and with different of size n + m.
choices of preconditions. The performance of
the iterative solver and the preconditioners can The performances of the above three
be explored. At this stage, we have already preconditioners are discussed in both [6,8]. Here
tested the following different precondtioners with we focus on the application of Python in those
GMRES. numerical solvers and the outcomes from the
software package.

2.2.1 Block diagonal preconditioner


[ ] 3 Numerical Experiments
 O
P= .
O I In this section we report on several numerical
experiments meant to illustrate the behavior of
where  is the approximation of A (in most our the Python applications on the preconditioned
cases, Â is A or A + αI where α is time variable, GMRES in a wide range of model problems.
1
and α = O( δt )). We consider Navier-Stokes problems in the two
dimensional spaces.
2.2.2 Block triangular preconditioner
[ ] 3.1 Numerical Solutions
 O
P= . In this session, we will show the example using
B I
Python to solve the Navier-Stokes equations
Then the block LU factorization form of block and plot the solution. We use a few libraries:
triangular reconditioner is numpy and matplotlib. Here numpy is a library
[ ][ ][ ] that provides matrix operations and matplotlib
In O Â O In −Â−1 B
P= provides the 2D plotting library that we could
O Im O Im O Im use to plot the results. We consider the two-
(2.7) dimensional lid-driven cavity problem. This
is a classical problem from the Navier-Stokes
equations. We take a square cavity with sides of
2.2.3 Hermitian and Skew Hermitian unit length and kinematic viscosity ν = 0.05. The
(HSS) Preconditioner initial condition is u,v,p = 0 everywhere, and the
boundary conditions are:
1
P= ĤŜ
2r

212
Liu et al.; JSRR, 7(3), 207-217, 2015; Article no.JSRR.2015.202

Figure 1: Simulation Results for the Driven Cavity Problem t = 1

Table 1: Sample Output: Iteration counts for the 2D Cavity problem


64 × 64 128 × 128 256 × 256
Block Diagonal Preconditioner 31 33 34
Block triangular Preconditioner 16 17 18
HSS Preconditioner 49 52 55

• u = 1 at y = 2 ; 3.2 2D Equations with Different


• u,v = 0 on the other boundaries; Preconditioners
• To satisfy the continuity, we need to
correct the pressure term and here are the
∂p
boundary conditions for the pressure: ∂y = In this session, we explore the iteration properties
∂p of the 2D Navier-Stokes equations with different
0 at y = 0;p = 0 at y = 2; and ∂x = 0 at
preconditioners. We consider the Oseen
x = 0, 2
equation in this case. We apply the Krylov
Figure 1 - 4 show the solutions of the above subspace iterative methods: GMRES with three
driven cavity problems with viscosity ν = 0.1. different preconditioner we introduced in the
Figure 1 is the solution as t = 1, Figure 2 is the previous section. We use the library scipy, numpy
solution as t = 200, Figure 3 is the solution as and matplotlib. In Table 1 we present results for
t = 500, and Figure 4 is the solution as t = 2000. the iteration counts for 2D Oseen problem with
We can see as t goes to around 500, the system different precondtitioners. Here the exact solver
gradually to stabilize. is used in each preconditioning action. The mesh
size increases from 64 × 64 to 256 × 256.

213
Liu et al.; JSRR, 7(3), 207-217, 2015; Article no.JSRR.2015.202

Figure 2: Simulation Results for the Driven Cavity Problem t = 200

Figure 3: Simulation Results for the Driven Cavity Problem t = 500

Figure 5 shows the convergence curves for 1. The length of the codes are similar. Both
those three preconditioned GMRES methods. Matlab and Python are script languages.
They are easy to use and easy to
We did a few numerical experiments using Matlab implement.
and Python. The performance of both languages
2. Both Matlab and Python can obtain
are quite close.
the images of the solutions, plot the

214
Liu et al.; JSRR, 7(3), 207-217, 2015; Article no.JSRR.2015.202

Figure 4: Simulation Results for the Driven Cavity Problem t = 2000

Figure 5: Sample Output: GMRES iteration convergence for the Driven Cavity
Problem

eigenvalues, velocity streamlines etc. cpu time for both languages. The CPU
3. The speed are also similar. Here is time for Python is higher than the CPU
the comparison. We run the 2D Oseen time in Matlab. The reason is due to
problem with constant wind using Matlab the optimization of the sparsity operations
and Python on the same computer. We in Matlab. We currently are working
used HSS preconditioning technique with on improving the sparsity operations in
GMRES iterations. Table 2 shows the Python too.

215
Liu et al.; JSRR, 7(3), 207-217, 2015; Article no.JSRR.2015.202

Table 2: CPU time for the 2D Oseen problem with constant wind
Matrix Size Matlab CPU time Python CPU time
40 × 40 0.029 0.05
176 × 176 0.13 0.45
736 × 736 2.69 36.8
3008 × 3008 83 119

A good way to explore the capabilities of 4 Conclusions


this package in Python is to download the codes
at http : www.uwf.edu/jliu/research/P ython. In this article, we have developed a numerical
The Python codes are clean and simple but solver for the Navier-Stokes equations using
they are easy to learn. With the development Python. We use the preconditioned iterative
of our Python package, scientists and students methods to solve the problem and we explore
can explore the properties of the preconditioned the effectiveness and performances of the
Krylov subspace methods. The other software different preconditioners for the Krylov subspace
in the preconditioning technique area is the methods. The numerical solutions are analyzed
IFISS developed by David Silvester (School for their basic properties. We also compare the
of Mathematics, University of Manchester), performances between Python and Matlab. The
Howard Elman (Computer Science Department, major contribution of this project is to develop a
University of Maryland), and Alison Ramage free, efficient software and numerical algorithms
(Department of Mathematics and Statistics, for the Navier-Stokes equations. It is the first
University of Strathclyde). See [1]. This software time to study the preconditioning techniques in
is written in Matlab and it is a graphical package Python codes. The development of the Python
of the numerical study of the incompressible package may benefit both scientists and students
flows. This is a good way to study and explore to analyze the numerical solvers of the Navier-
the numerical methods of the Navier-Stokes Stokes equations, especially in observing and
equations. But you need to have Matlab installed developing the preconditioning techniques.
which costs around one thousand dollars. It
is expensive for the students who would like to
explore the numerical solutions for the Navier-
Acknowledgment
Stokes equations. On the other hand, Python The research from the first author was supported
is free. In addition, Python is very similar with by Faculty Scholarly and Creative Activity
Matlab in many features. Both of them are Award 2013-2014 at the University of West
script languages and easy to learn. In our Florida. Support for this project was provided
numerical experiments, we would like to show by the Research and Sponsored Program at the
that we can use this free high-level language University of West Florida. The research from
to develop a package. Our package will help the second author was partially supported by
to implement the Navier-Stokes equations of PSC-CUNY Grant. Support for her project was
finite difference methods, explore a range of provided by PSC-CUNY Award, jointly funded by
preconditioned Krylov subspace solvers, provide The Professional Staff Congress and The City
a visualization tool and etc. Notice that University of New York.
with Python alone, the calculation speed is
not competitive with the softwares based on
C/C++/Fortran, or even Matlab. But with the Competing Interests
combination of C/C++/Fortran, the Python script
Authors have declared that no competing
is able to run the meshes that have millions of
interests exist.
nodes on desktop computers, see [9].

216
Liu et al.; JSRR, 7(3), 207-217, 2015; Article no.JSRR.2015.202

References [5] Van der Vorst HA. Bi-CGSTAB: A fast


and smoothly converging variant of Bi-
[1] Elman HC, Silvester DJ, Wathen AJ, CG for the solution of nonsymmetric linear
Finite Elements and fast iterative solvers: systems. SIAM J. Sci. and Stat. Comput.
With applications in incompressible fluid 1992;13(2):631-644.
dynamics.Oxford University Press; 2005.
[6] Benzi M, Golub GH, Liesen J, Numerical
[2] Turek S. Efficient solvers for incompressible solution of saddle point problems. Acta
flow problems: An algorithmic and Numerica. 2005;14:1-137.
computational approach. Lecture Notes
[7] Elman HC, Silvester DJ, Wathen AJ.
in Computational Science and Engineering.
Performance and analysis of saddle point
1999;6. Springer, Berlin.
preconditioners for the discrete steady-state
Navier–Stokes equations. Numer. Math.
[3] Harlow FH, Welch JE. Numerical calculation
2002;90:665-688.
of time-dependent viscous incompressible
flow of fluid with free surface. Phys. Fluids. [8] Benzi M, Liu J. An efficient solver for the
1965;8:2182-2189. incompressible Navier-Stokes equations in
rotation form. SIAM J. Scientific Computing.
[4] Saad Y, Schultz MH, GMRES: A generalized 2007;29:1959-1981.
minimal residual algorithm for solving
nonsymmetric linear systems preconditioners [9] Logg A, Mardal A, Wells G, Automated
for the discrete steady-state Navier-Stokes solution of differential equations by the finite
equations. SIAM J. Sci. Stat. Comput. element method: The fenics book. Springer;
2002;7:856-869. 2012.

———————————————————————————————————————————————-
⃝2015
c Liu et al.; This is an Open Access article distributed under the terms of the Creative Commons Attribution
License http://creativecommons.org/licenses/by/4.0, which permits unrestricted use, distribution, and reproduction
in any medium, provided the original work is properly cited.

Peer-review history:
The peer review history for this paper can be accessed here (Please copy paste the total link in your browser
address bar)
www.sciencedomain.org/review-history.php?iid=1127&id=22&aid=9129

217

You might also like