Flows of incompressible irrotational fluids are often encountered early in courses on fluid mechanics and PDEs. These flows involve a velocity potential which satisfies Laplace's equation. There is a rich literature associated with the use of conformal transformations to solve these problems by mapping a simple domain, in which it is easy to solve Laplace's equation, into a more complex domain. The velocity potential is then interpreted in the new coordinates, thus giving the solution for irrotational flow in the complex geometry.
From the standpoint of CFD, irrotational flow has interesting features. Firstly, Laplace's equation is very much easier to solve than the Navier-Stokes equations. Also, irrotational flow often represents a good approximation to high Reynolds number flows outside boundary layers, provided that the boundary layers have not separated from the boundaries. Another use of irrotational flow solutions is as a starting point for in-depth CFD computations, be they for laminar or turbulent flow.
A key variable used in irrotational flows is the complex potential
![]()
![]()
![]()
The transformation defined by
![]()
![]()
To describe irrotational flow around the Joukowski airfoil, we first use
Fastflo to describe a circle in the
-plane. This is a
straightforward application for Fastflo's triangular mesh generator.
We then use mapmesh to transform from the
-plane to the
-plane, and then evaluate contour lines for the streamfunction in the
-plane.
The files for this problems are airfoil.msh and airfoil.prb .
The mesh file gives a circle of unit radius (boundary segment 2) located inside a rectangular duct (boundary segment 1). A fictitious segment with tag 0, which has to be crossed twice, forms a bridge between the circle and the duct.
The parameters in this file are circ, which is the circulation
of the flow around the airfoil, c1 and c2, which
give the
and
coordinates of the re-positioned circle, and
ellr and elli, which are the real and imaginary parts
of
.
You will find that the airfoil shape is sensitive to small changes to the parameters. In particular, elli is related to the angle of attack and c2 affects the bend. Two other properties susceptible to small changes are the fore-aft asymmetry and the thickness of the airfoil.
The macro run is straightforward. It calls macro conform, assembles problem strf and then displays the streamfunction on the graphics screen. conform and strf are examined in more detail below.
Under the Joukowski transformation, the unit circle in the
-plane is first positioned with respect to the origin in the
-plane. This requires two parameters, c1 and c2.
The first two lines of conform re-position the mesh and calculate
as mentioned earlier. The next two lines calculate
the parameters
and
. Then
V101=X1+(ell1*V401+ell2*V402)/V201
V102=X2-(ell1*V402-ell2*V401)/V201
complete the calculation of the Joukowski-transformed variable
mapm
black
prim
The mapmesh command exchanges the contents of vectors V101
and V102 with the
A strf
e -D_jD_jU1=0
b 2 curvature=-0.2071
b 2 U1={0.0}
b 1 U1={V102-V102/(V100@V100)+circ*log(V100@V100)}
The PDE problem strf for the streamfunction
See for example Section 13.3, in which it
should be noted however that Poisson's equation rather than Laplace's
equation needs to be solved. This is because the flow in Section 13.3
possesses vorticity.] The boundary segments with tag 1 (the
surrounding duct) represent the streamfunction for streaming flow at
speed
A favourable feature of the boundary conditions
needs to be pointed out. Because the command mapmesh in
conform exchanges V100 with the mesh data, V100 in strf is based
on the original mesh data. This means that the boundary condition at
tag 1 (the walls of the duct) is evaluated exactly, and there is no
need to allow for perturbations to this boundary condition caused by
the airfoil.]
That completes the description of the Joukowski airfoil problem. On
loading the files in the usual way, you will find that the problem runs
quickly and gives results as shown below. It is instructive to
experiment with the parameters, particularly the circulation
.
![]()
|
![]()
|
![]()
|