So this question is essentially the same question as here where Alex Trounev gave a fantastic answer.
Alex starts by saying that "There is no simple method to display streamlines using the Zhukovsky function." but this is not too accurate.
For reference, I have started using Elementary Fluid Mechanics by D.J. Acheson. The Joukovsky (Zhukovsky) transformation is given by $Z=z+\frac{c^2}{z}$. If we look at irrotational flow past a circular cylinder, and include a superimposed line vortex flow, we can get the complex potential to be $$w(z)=U\left(z+\frac{a^2}{z}\right)-\frac{\mathrm{i}\Gamma}{2\pi}\log(z)$$ where $U$ is a uniform speed, $a$ is the radius of the cylinder and $\Gamma$ is the strength of the superimposed line vortex. The streamlines here can be visualised as follows
a = 0.75; U = 1; Gamma1 = 5; w[z_] := U (z + a^2/z) - (I Gamma1)/(2 \[Pi]) Log[z]; streamFunction[x_, y_] := If[Sqrt[x^2 + y^2] >= a, Im[w[x + I y]], Indeterminate]; plt4 = ContourPlot[Evaluate[streamFunction[x, y]], {x, -2, 2}, {y, -2, 2}, Contours -> Range[-2, 2, 0.1],ContourStyle -> Directive[Black, Thick], FrameLabel -> {"Re[z]", "Im[z]"}, PlotRange -> All, AspectRatio -> 1, Epilog -> {Red, Circle[{0, 0}, a]} , ContourShading -> False] We can also visualise the pressure using Bernoulli
pressureFunction[x_, y_] := If[Sqrt[x^2 + y^2] >= a, 1/2 U^2 - 1/2 Abs[w'[x + I y]]^2, Indeterminate]; plt3 = ContourPlot[ Evaluate[pressureFunction[x, y]], {x, -2, 2}, {y, -2, 2}, Contours -> Range[-2, 2, 0.1],ContourStyle -> Directive[Red, Thick], FrameLabel -> {"Re[z]", "Im[z]"}, PlotRange -> All, AspectRatio -> 1, Epilog -> {Red, Circle[{0, 0}, a]} , ColorFunction -> Function[f, Opacity[.5, ColorData["TemperatureMap"][f]]]] I added opacity so that I could visualise the pressure and streamlines
Show[plt3,plt4] Now! Hear comes the hard part where I need some assistance. For flow past a symmetric aerofoil, Acheson has a "z-plane" for the cylinder case above and a "$Z$-plane" for the aerofoil where $Z = -\lambda + (a+\lambda)e^{\mathrm{i}\gamma} + \frac{a^2}{-\lambda + (a+\lambda)e^{\mathrm{i}\gamma}}$. The complex potential function $W(Z)$ requires taking the complex potential flow in the z-plane $$w(z)=U\left[(z+\lambda)e^{-\mathrm{i}\alpha}+\frac{(a+\lambda)^2}{z+\lambda}e^{\mathrm{i}\alpha}\right]-\frac{\mathrm{i}\Gamma}{2 \pi}\log(z+\lambda)$$ and then substituting $z=\frac{1}{2}Z+\sqrt{\frac{1}{4}Z^2-a^2}$. For the aerofoil, $\Gamma = -4 \pi U (a+\lambda)\sin(\alpha)$.
I tried a few things but nothing is giving quite what I expect. The image that is closest was made avoiding the $z(Z)$ substitution and plotting the output simply in the $Z-plane$ which I think I did semi-correctly using InverseFunction
a = 1; U = 1; \[Lambda] = 0.2; \[Alpha] = 0.2; \[CapitalGamma] = -4 Pi U (a + \[Lambda]) Sin[\[Alpha]]; joukovskyTransform[\[Zeta]_] := \[Zeta] + a^2/\[Zeta]; zTransform[Z_] = 0.5 Z + Sqrt[0.25 Z^2 - a^2] ; w[z_] := U ((z + \[Lambda]) Exp[-I \[Alpha]] + (a + \[Lambda])^2/(z + \ \[Lambda]) Exp[I \[Alpha]]) - (I \[CapitalGamma])/(2 Pi) Log[ z + \[Lambda]]; W[Z_] := w[zTransform[Z]] streamFunction[\[Zeta]_] := Im[W[\[Zeta]]]; streamFunction2[\[Zeta]_] := Im[w[\[Zeta]]]; \[Zeta]Streamlines = ContourPlot[ Evaluate[streamFunction[x + I y]], {x, -3, 3}, {y, -3, 3}, Contours -> Range[-4, 4, 0.1], ContourStyle -> Blue, FrameLabel -> {"Re[\[Zeta]]", "Im[\[Zeta]]"}, PlotRange -> All, AspectRatio -> 1] \[Zeta]Streamlines2 = ContourPlot[ Evaluate[streamFunction2[x + I y]], {x, -3, 3}, {y, -3, 3}, Contours -> Range[-4, 4, 0.1], ContourStyle -> Blue, FrameLabel -> {"Re[\[Zeta]]", "Im[\[Zeta]]"}, PlotRange -> All, AspectRatio -> 1] zStreamlines = ContourPlot[ Evaluate[ streamFunction[ InverseFunction[joukovskyTransform][x + I y]]], {x, -3, 3}, {y, -3, 3}, Contours -> Range[-4, 4, 0.1], ContourStyle -> Blue, FrameLabel -> {"Re[z]", "Im[z]"}, PlotRange -> All, AspectRatio -> 1] zStreamlines2 = ContourPlot[ Evaluate[ streamFunction2[ InverseFunction[joukovskyTransform][x + I y]]], {x, -3, 3}, {y, -3, 3}, Contours -> Range[-4, 4, 0.1], ContourStyle -> Blue, FrameLabel -> {"Re[z]", "Im[z]"}, PlotRange -> All, AspectRatio -> 1] It's clear, that not including the z substitution and rather trying to plot in the $Z$-plane produces something that appears to be an aerofoil. In the $z$-plane it's a cylinder in appearance which means I was heading in a correct-ish direction. The major issues here are
- No matter how I approach this problem, I cannot seem to avoid branch cuts.
- The aerofoil never appears to line up correctly (probably due to the branch cuts)
- The method using the substitution for $z$ doesn't produce anything like an aerofoil and I have to rely on just using the $Z$-plane.
Note: I completely left out the $Z$ substitution because that produced a blank output. Perhaps I was implementing it incorrectly.
Ideally, I'd like to aim for results that resemble Alex's answer while still staying true to using the Joukovsky Transform.
Edit: I just realised that I left incorrect axis labels in my code from earlier versions where I was working completely in the complex plane in order to visualise the transformations and conformal mappings. Please ignore.











Exclusions -> None? $\endgroup$