Content provided under a Creative Commons Attribution license CC-BY 4.0; code under BSD 3-Clause license. (c)2015 L.A. Barba, Pi-Yueh Chuang.

Exercise: Derivation of the vortex-source panel method

The potential at location $(x, y)$ induced by an uniform flow, a source sheet, and a vortex sheet can be represented as

$$ \begin{equation} \begin{split} \phi(x, y) &= \phi_{uniform\ flow}(x, y) \\ &+ \phi_{source\ sheet}(x, y) + \phi_{vortex\ sheet}(x, y) \end{split} \end{equation} $$

That is

$$ \begin{equation} \begin{split} \phi(x, y) &= xU_{\infty}\cos(\alpha) + yU_{\infty}\sin(\alpha) \\ &+ \frac{1}{2\pi} \int_{sheet} \sigma(s)\ln\left[(x-\xi(s))^2+(y-\eta(s))^2\right]^{\frac{1}{2}}ds \\ &- \frac{1}{2\pi} \int_{sheet} \gamma(s)\tan^{-1} \frac{y-\eta(s)}{x-\xi(s)}ds \end{split} \end{equation} $$

where $s$ is local coordinate on the sheet, and $\xi(s)$ and $\eta(s)$ are coordinate of the infinite source and vortex on the sheet. In the above equation, we assume the source sheet and the vortex sheet overlap.


If we discretize the sheet into $N$ panels, re-write the above equation using discretized integral. Assume $l_j$ represents the length of the panel $j$. And so that

$$ \begin{equation} \left\{ \begin{array}{l} \xi_j(s)=x_j-s\sin\beta_j \\ \eta_j(s)=y_j+s\cos\beta_j \end{array} ,\ \ \ 0\le s \le l_j \right. \end{equation} $$

The following figure shows the panel $j$:

HINT: for example, consider the integral $\int_0^L f(x) dx$, if we discretize the domain $0\sim L$ into 3 panels, the integral can be writen as:

$$ \int_0^L f(x) dx = \int_0^{L/3} f(x)dx+\int_{L/3}^{2L/3} f(x)dx+\int_{2L/3}^{L} f(x)dx \\ = \sum_{j=1}^3 \int_{l_j}f(x)dx $$

Now let's assume

  1. $\sigma_j(s) = constant = \sigma_j$
  2. $\gamma_1(s) = \gamma_2(s) = ... = \gamma_N(s) = \gamma$


Apply the above assumption into the equation of $\phi(x, y)$ you derived in Q1.

The normal velocity $U_n$ can be derived from the chain rule:

$$ \begin{equation} \begin{split} U_n &= \frac{\partial \phi}{\partial \vec{n}} \\ &= \frac{\partial \phi}{\partial x}\frac{\partial x}{\partial \vec{n}} + \frac{\partial \phi}{\partial y}\frac{\partial y}{\partial \vec{n}} \\ &= \frac{\partial \phi}{\partial x}\nabla x\cdot \vec{n} + \frac{\partial \phi}{\partial y}\nabla y\cdot \vec{n} \\ &= \frac{\partial \phi}{\partial x}n_x + \frac{\partial \phi}{\partial y}n_y \end{split} \end{equation} $$

The tangential velocity can also be obtained using the same technique. So we can have the normal and tangential velocity at the point $(x, y)$ using:

$$ \begin{equation} \left\{ \begin{array}{l} U_n(x, y)=\frac{\partial \phi}{\partial x}(x, y) n_x(x, y)+\frac{\partial \phi}{\partial y}(x, y) n_y(x, y) \\ U_t(x, y)=\frac{\partial \phi}{\partial x}(x, y) t_x(x, y)+\frac{\partial \phi}{\partial y}(x, y) t_y(x, y) \end{array} \right. \end{equation} $$


Using the above equation, derive the $U_n(x,y)$ and $U_t(x,y)$ from the equation you obtained in Q2.


Consider the normal velocity at the center of $i$-th panel, i.e., $(x_{c,i}, y_{c,i})$, after replacing $(x_{c,i}, y_{c,i})$ with $(x, y)$ in the equation you derived in the Q3, we can re-write the equation in matrix form:

$$ \begin{equation} \begin{split} U_n(x_{c,i}, y_{c,i}) &= U_{n,i} \\ &= b^n_i + \left[\begin{matrix} A^n_{i1} && A^n_{i2} && ... && A^n_{iN}\end{matrix}\right]\left[\begin{matrix} \sigma_1 \\ \sigma_2 \\ \vdots \\ \sigma_N \end{matrix}\right] + \left(\sum_{j=1}^N B^n_{ij}\right)\gamma \\ &= b^n_i + \left[\begin{matrix} A^n_{i1} && A^n_{i2} && ... && A^n_{iN} && \left(\sum_{j=1}^N B^n_{ij}\right) \end{matrix}\right]\left[\begin{matrix} \sigma_1 \\ \sigma_2 \\ \vdots \\ \sigma_N \\ \gamma \end{matrix}\right] \end{split} \end{equation} $$
$$ \begin{equation} \begin{split} U_t(x_{c,i}, y_{c,i}) &= U_{t,i} \\ &= b^t_i + \left[\begin{matrix} A^t_{i1} && A^t_{i2} && ... && A^t_{iN}\end{matrix}\right]\left[\begin{matrix} \sigma_1 \\ \sigma_2 \\ \vdots \\ \sigma_N \end{matrix}\right] + \left(\sum_{j=1}^N B^t_{ij}\right)\gamma \\ &= b^t_i + \left[\begin{matrix} A^t_{i1} && A^t_{i2} && ... && A^t_{iN} && \left(\sum_{j=1}^N B^t_{ij}\right) \end{matrix}\right]\left[\begin{matrix} \sigma_1 \\ \sigma_2 \\ \vdots \\ \sigma_N \\ \gamma \end{matrix}\right] \end{split} \end{equation} $$

What are the $b^n_i$, $A^n_{ij}$, $B^n_{ij}$, $b^t_i$, $A^t_{ij}$, and $B^t_{ij}$?

Given the fact that (from the Fig. 1)

$$ \begin{equation} \left\{\begin{matrix} \vec{n}_i=n_{x,i}\vec{i}+n_{y,i}\vec{j} = \cos(\beta_i)\vec{i}+\sin(\beta_i)\vec{j} \\ \vec{t}_i=t_{x,i}\vec{i}+t_{y,i}\vec{j} = -\sin(\beta_i)\vec{i}+\cos(\beta_i)\vec{j} \end{matrix}\right. \end{equation} $$

we have

$$ \begin{equation} \left\{ \begin{matrix} n_{x,i}=t_{y,i} \\ n_{y,i}=-t_{x,i} \end{matrix} \right. ,\ or\ \left\{ \begin{matrix} t_{x,i}=-n_{y,i} \\ t_{y,i}=n_{x,i} \end{matrix} \right. \end{equation} $$


Applying the above relationship between $\vec{n}_i$ and $\vec{t}_i$ to your answer of the Q4, you should find that relationships exist between $B^n_{ij}$ and $A^t_{ij}$ and between $B^t_{ij}$ and $A^n_{ij}$. This means, in your codes, you don't have to actually calculate the $B^n_{ij}$ and $B^t_{ij}$. What are the relationship?

Now, note that when $i=j$, there is a singular point in the integration domain when calculating $A^n_{ii}$ and $A^t_{ii}$. This singular point occurs when $s=l_i/2$, i.e., $\xi_i(l_i/2)=x_{c,i}$ and $\eta_i(l_i/2)=y_{c,i}$. This means we need to calculate $A^n_{ii}$ and $A^t_{ii}$ analytically.


What is the exact values of $A^n_{ii}$ and $A^t_{ii}$?

In our problem, there are $N+1$ unknowns, that is, $\sigma_1, \sigma_2, ..., \sigma_N, \gamma$. We'll need $N+1$ linear equations to solve the unknowns. The first $N$ linear equations can be obtained from the non-penetration condition on the center of each panel. That is

$$ \begin{equation} \begin{split} U_{n,i} &= 0 \\ &= b^n_i + \left[\begin{matrix} A^n_{i1} && A^n_{i2} && ... && A^n_{iN} && \left(\sum_{j=1}^N B^n_{ij}\right) \end{matrix}\right]\left[\begin{matrix} \sigma_1 \\ \sigma_2 \\ \vdots \\ \sigma_N \\ \gamma \end{matrix}\right] \\ &,\ \ for\ i=1\sim N \end{split} \end{equation} $$


$$ \begin{equation} \begin{split} &\left[\begin{matrix} A^n_{i1} && A^n_{i2} && ... && A^n_{iN} && \left(\sum_{j=1}^N B^n_{ij}\right) \end{matrix}\right]\left[\begin{matrix} \sigma_1 \\ \sigma_2 \\ \vdots \\ \sigma_N \\ \gamma \end{matrix}\right] =-b^n_i \\ &,\ \ for\ i=1\sim N \end{split} \end{equation} $$

For the last equation, we use Kutta-condition to obtain that.

$$ \begin{equation} U_{t,1} = - U_{t,N} \end{equation} $$


Apply the matrix form of the $U_{t,i}$ and $U_{t,N}$ to the Kutta-condition and obtain the last linear equation. Re-arrange the equation so that unknowns are always on the LHS while the knowns on RHS.


Now you have $N+1$ linear equations and can solve the $N+1$ unknowns. Try to combine the first $N$ linear equations and the last one (i.e. the Kutta-condition) in the Q7 and obtain the matrix form of the whole system of linear equations.

The equations can be solved now! This is the vortex-source panel method.

Please ignore the cell below. It just loads our style for the notebook.
In [1]:
from IPython.core.display import HTML
def css_styling(filepath):
    styles = open(filepath, 'r').read()
    return HTML(styles)