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.


Q1:

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$

Q2:

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} $$

Q3:

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


Q4:

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} $$

Q5:

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.


Q6:

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} $$

or

$$ \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} $$

Q7:

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.


Q8:

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)
css_styling('../styles/custom.css')
Out[1]: