image accueil du logo de la rubrique
You are here : EPSILON: Exergy Analysis Tool » Open Data » 2D Potential Flow Generator

2D Potential Flow Generator

The code

The plugin was developed by ISAE in 2018 in order to compute some specific 2D potential flow fields [1,2] on a structured mesh in Paraview.


• Cilinder (with/without circulation)
• Joukowsky airfoils
• Karman-Trefftz airfoils
• Van Der Vooren airfoils


The potential flow data generated with this code can be analyzed with Epsilon Aero Data.


[1] E.Houghton, P.Carpenter, « Aerodynamics for Engineering Students», Fifth Edition, Butterworth-Heinemann, 1993.
[2] J.Katz, A.Plotkin, « Low-Speed Aerodynamics: from wing theory to panel methods», First Edition, McGraw-Hill, 1991.



• Download files:
See installation and use instructions in the video tutorials section

Potential Flow Modelling: 2D cylinder

• Complex functions:

In order to obtain the potential flow around a cylinder with vorticity, an addition of several basic flows must be made based on the superposition principle. In order to simplify this task, a complex-variable approach is used. This requires to treat the elemental flows as complex functions “F(z)” on the complex plane z=x+iy. These functions are called complex potentials and they are given by:



Where, “U0” is the upstream speed, “α” the angle of attack, “R” the radius of the cylinder, “z0” the center of the cylinder on the complex plane (z0=x0+iy0) and “Γ” the strength of the vortex singularity. Then, the flow around a cylinder is obtained by summing-up these functions as it is done classically on the text books. However, we have added a new term related to a physical phenomenon called “starting vortex”:


It is a vortex having the same intensity as the cylinder vortex, but it is placed well downstream (z1=x1+iy1 with x1—>∞). This term was added in order to properly implement some far-field methods. So, the flow around a cylinder is given by:


F(z)cylinder = F(z)uniform + F(z)doublet + F(z)vortex + F(z)starting_vortex


Once the complex potential is stablished, it can be derived in order to obtain the so-called “Complex Velocity”:


W(z) = dF(z)/dz


For the elementary flows mentioned earlier, this becomes:


Again, by applying the superposition principle, we obtain the total complex velocity:


W(z)cylinder = W(z)uniform + W(z)doublet + W(z)vortex + W(z)starting_vortex


• Aerodynamic field data:

Our main goal is to obtain as much as possible of aerodynamic data for this case study. The complex velocity theory allows to obtain the velocity field in a straightforward fashion:


• X-component velocity: Vx = Re(W(z)cylinder)
• Y-component velocity: Vy = -Im (W(z)cylinder)


Moreover, the streamlines and equipotential lines can be obtained directly by evaluation the following functions at constant values:


• Streamline function: ψ = im(F(z)cylinder)
• Equipotential function: Φ = Re(F(z)cylinder)


The remaining aerodynamic parameters may be obtained by considering an isentropic-isoenergetic flow with known upstream values:


• Upstream total pressure: Pt0
• Upstream total temperature: Tt0
• Upstream speed: U0


These are the only imposed upstream data. The remaining upstream parameter may be obtained directly:


• Specific heats ratio: γ=1.4
• Gas constant: R=287.1 J/Kg.K
• Specific heat capacity at constant pressure: Cp= γ*R/( γ-1)
Then, the field parameters are given by:


The equations discussed above can be easily coded in Python in order to obtain a complete aerodynamic flow field data around the cylinder.

Potential Flow Modelling: 2D airfoil

• Joukowsky transformation:

This was the very first transformation allowing to obtain the potential flow around a family of airfoils: flat plate, cambered plate, symmetric airfoil or cambered airfoil. It just maps the domain around a circle onto a domain around the selected airfoil. Note that only the region lying outside the circle must be mapped. The region lying inside the circle must not be subjected to the mapping. Also, here it is remarked that Joukowsky transformation only allows to create airfoils with null trailing edge angle.
For a circle centered at the origin of the reference axes, this transformation is given by:




Where Z = X+iY is the transformed (mapped) complex plane. In a more generic case, the circle will not be centered. Instead, an eccentric position may be studied. In this case the transformation must be slightly modified:


Z=z + (Ix^2)/z


Where “Ix” represents the x-coordinate of the intersection of the circle with the positive x-axis. On the other hand, according to the theory, its derivative is necessary in order to obtain the transformed complex speed “W*”:






dZ/dz=1 - Ix^2/z^2


The airfoil geometry depends on the position of the circle center on the original complex map:

• Flat plate: circle centered at the origin (x0=0, y0=0)
• Cambered plate: circle slightly displaced upwards (y0>0)
• Symmetric airfoil: circle slightly displaced towards the left (x0<0)
• Cambered airfoil: circle center placed on the 2nd quadrant (x<0, y>0)


• Karman-Trefftz transformation:

It is a general case of the Joukowsky transformation, which takes into account the possibility of creating non-null trailing edge angle airfoils:


Where “k” is a factor related to the trailing edge angle “θ” in [radians]:


k = 2-θ/π


Please, note that if θ=0 —> k=2 and the Karman-Trefftz transformation turns out to be identical to the Joukowsky transformation. On the other hand, the family of airfoils obtainable by this transformation is identical to Joukowsky family. The same considerations must be made concerning the circle position in the original complex plane. Finally, its related derivative is given by:



• Van Der Vooren transformation:

The Van Der Vooren transformation has been widely used for panel method validation purposes, and that’s why we have decided to implement this transformation in the plugin. It just creates a symmetrical airfoil from a circle centered at the origin. No other airfoil geometry is possible. However it allows to change the airfoil thickness and the trailing edge angle:



Where “R” is the circle radius on the original complex plane, “k” same as Karman-Trefftz parameter and “ε” is a thickness parameter.


• Kutta condition:

So far, we have discussed about the creation of potential flow and how to transform this flow field to obtain the flow field around an airfoil. However, the vorticity magnitude contained within the circle will impact the flow field significantly and may lead to non-physical solutions if it is not properly imposed. In order to obtain a realistic flow pattern, vorticity should be settled-up so that que rear stagnation point lies on the airfoil trailing edge. This is achieved by imposing the so-called “Kutta condition”:


ΓKutta=- 4 π U0 R sin⁡(α+β)


Where “α” is the angle of attack and “β” the angle between the horizontal line and the line joining circle center with the intersection point “Ix”:



• Forces acting upon the body:

Theoretical considerations lead to the fact that no drag is present on a body submerged in potential flow. However, a lift may be present depending on the existence of vorticity:


L Theoretical=-ρ0 U0 Γ


Nevertheless, this expression is valid only when the air density around the body is constant. This is not exactly true, even when the upstream Mach number lies within the “incompressible” regime (M0<0.3). In fact, density actually varies around the body and this variation respect to upstream value increases with Mach number. That’s why we prefer to calculate lift by a close-field approach: a surface integral of the pressure distribution.


Where “Phi” is the angle between the tangent to the surface and the Y-axis. We will verify later that the theoretical value matches the pressure integration lift when M—>0. Lift force is also displayed in a dimensionless fashion by using the lift coefficient:



Where “Sref” is a reference surface: the airfoil chord.