{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "raw", "metadata": {}, "source": [ "Content provided under a Creative Commons Attribution license, CC-BY 4.0; code under MIT license. (c)2014 Lorena A. Barba, Olivier Mesnard. Thanks: NSF for support via CAREER award #1149784." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[@LorenaABarba](https://twitter.com/LorenaABarba)" ] }, { "cell_type": "heading", "level": 5, "metadata": {}, "source": [ "Version 0.3 -- April 2014" ] }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Source panel method" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We are now getting close to the finish line with *AeroPython*! Our first few lessons introduced the fundamental flow solutions of potential flow, and we quickly learned that using our superposition powers we could get some useful results in aerodynamics. \n", "\n", "The superposition of a [doublet](http://nbviewer.ipython.org/urls/github.com/barbagroup/AeroPython/blob/master/lessons/03_Lesson03_doublet.ipynb) and a free stream gave the flow around a circular cylinder, and we learned about the *D'Alembert paradox*: the result of zero drag for potential flow around a cylinder. Adding a [vortex](http://nbviewer.ipython.org/urls/github.com/barbagroup/AeroPython/blob/master/lessons/06_Lesson06_vortexLift.ipynb) at the center of the cylinder, we learned about lift and the *Kutta-Joukowski theorem* stating that lift is proporional to circulation: $L=\\rho U \\Gamma$. A most important result!\n", "\n", "Adding together fundamental solutions of potential flow and seeing what we get when interpreting a dividing streamline as a solid body is often called an *indirect method*. This method goes all the way back to Rankine in 1871! But its applicability is limited because we can't stipulate a geometry and find the flow associated to it.\n", "\n", "In [Lesson 9](http://nbviewer.ipython.org/urls/github.com/barbagroup/AeroPython/blob/master/lessons/09_Lesson09_flowOverCylinder.ipynb), we learned that it is possible to stipulate first the geometry, and then solve for the source strengths on a panel discretization of the body that makes the flow tangent at the boundary. This is called a *direct method* and it took off in the 1960s with the work of Hess and Smith at Douglas Aircraft Company.\n", "\n", "A set of panels (line segments in 2D) can represent the surface of any solid body immersed in a potential flow by making the source-sheet strengths such that the normal velocity at each panel is equal to zero. This is a very powerful idea! But you should realize that all the panel strengths are coupled to each other, which is why we end up with a linear system of equations.\n", "\n", "For an arbitrary geometry, we need to build a set of panels according to some points that define the geometry. In this lesson, we will read from a file a geometry definition corresponding to a **NACA0012 airfoil**, create a set of panels, and solve for the source-sheet strengths to get flow around the airfoil.\n", "\n", "*Make sure you have studied [Lesson 9](http://nbviewer.ipython.org/github/barbagroup/AeroPython/blob/master/lessons/09_Lesson09_flowOverCylinder.ipynb) carefully before proceeding!* We will not repeat the full mathematical formulation in this notebook, so refer back as needed.\n", "\n", "First, load our favorite Python libraries, and the `integrate` module from SciPy:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from math import *\n", "import numpy as np\n", "from scipy import integrate\n", "import matplotlib.pyplot as plt" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we read the body geometry from a file using the NumPy function [`loadtxt()`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html). The file comes from the [Airfoil Tools](http://airfoiltools.com/airfoil/details?airfoil=n0012-il) website and it contains a set of coordinates for the standard NACA0012 symmetric profile. We saved the file in the `resources` folder and load it from our local copy.\n", "\n", "The geometry points get loaded into one NumPy array, so we separate the data into two arrays: `x,y` (for better code readability). The subsequent code will plot the geometry of the airfoil." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# reads of the geometry from a data file\n", "with open ('./resources/naca0012.dat') as file_name:\n", " x, y = np.loadtxt(file_name, dtype=float, delimiter='\\t', unpack=True)\n", "\n", "# plots the geometry\n", "%matplotlib inline\n", "\n", "val_x, val_y = 0.1, 0.2\n", "x_min, x_max = x.min(), x.max()\n", "y_min, y_max = y.min(), y.max()\n", "x_start, x_end = x_min-val_x*(x_max-x_min), x_max+val_x*(x_max-x_min)\n", "y_start, y_end = y_min-val_y*(y_max-y_min), y_max+val_y*(y_max-y_min)\n", "\n", "size = 10\n", "plt.figure(figsize=(size, (y_end-y_start)/(x_end-x_start)*size))\n", "plt.grid(True)\n", "plt.xlabel('x', fontsize=16)\n", "plt.ylabel('y', fontsize=16)\n", "plt.xlim(x_start, x_end)\n", "plt.ylim(y_start, y_end)\n", "plt.plot(x, y, color='k', linestyle='-', linewidth=2);" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n/v5+AP77/cnHbhERERHJEK9OJSIiIpIhJnFEREREMsQkjoiIiEiGmMQRERERyRCTOCIiIiIZYhJH\nREREJENM4oiIiIhkiEkcERERkQwxiSMiIiKSISZxRERjYLVakZGRgZkzZ8Jut4vrv/zySwQEBODv\nf/+7F1tHROMBH7tFRDRGFRUVmDVrFlauXIkXXngBZrMZ2dnZmD17Nv797397u3lE5OeYxBERXYDX\nX38df/zjH/HFF1/g5ZdfRmVlJb799ls+yJyILjkmcUREF+imm27Cnj17YLfb8Z///Ad5eXnebhIR\njQOcE0dEdIEWLlyIvr4+ZGdnM4EjIskwiSMiugBNTU149NFHcfnll6OiogJ/+9vfvN0kIhonmMQR\nEY2RIAh44IEHEBoait27d2PFihVYs2YNvv/+e283jYjGAc6JIyIao1deeQWPPfYY9u7dizlz5qC/\nvx+zZs1Cb28vDh06hJCQEG83kYj8GHviiIjG4PDhw/jLX/6Cxx9/HHPmzAEABAYGYvPmzaiursaq\nVau83EIi8nfsiSMiIiKSIfbEEREREckQkzgiIiIiGWISR0RERCRDTOKIiIiIZIhJHBEREZEMMYkj\nIiIikiEmcUREREQyxCSOiIiISIaYxBERERHJ0P8DTXjYHxEkAyYAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 2 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Discretization into panels" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Like in [Lesson 9](http://nbviewer.ipython.org/urls/github.com/barbagroup/AeroPython/blob/master/lessons/09_Lesson09_flowOverCylinder.ipynb), we will create a discretization of the body geometry into panels (line segments in 2D). A panel's attributes are a starting point, an end point, a mid-point, its length and its orientation. See the following figure for the nomenclature used in the code and equations below.\n", "\n", "
![image](files/resources/panelSketch.png)
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can modify the `Panel` class from our previous notebook slightly, to work better for our study of flow over an airfoil. The only difference is that we identify points on the top or bottom surfaces with the keywords `extrados` and `intrados`, which is only used later for plotting results with different colors for the top and bottom surfaces of the profile." ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Panel:\n", " \"\"\"Contains information related to a panel.\"\"\"\n", " def __init__(self, xa, ya, xb, yb):\n", " \"\"\"Creates a panel.\n", " \n", " Arguments\n", " ---------\n", " xa, ya -- Cartesian coordinates of the first end-point.\n", " xb, yb -- Cartesian coordinates of the second end-point.\n", " \"\"\"\n", " self.xa, self.ya = xa, ya\n", " self.xb, self.yb = xb, yb\n", " \n", " self.xc, self.yc = (xa+xb)/2, (ya+yb)/2 # control-point (center-point)\n", " self.length = sqrt((xb-xa)**2+(yb-ya)**2) # length of the panel\n", " \n", " # orientation of the panel (angle between x-axis and panel's normal)\n", " if xb-xa <= 0.:\n", " self.beta = acos((yb-ya)/self.length)\n", " elif xb-xa > 0.:\n", " self.beta = pi + acos(-(yb-ya)/self.length)\n", " \n", " # location of the panel\n", " if self.beta <= pi:\n", " self.loc = 'extrados'\n", " else:\n", " self.loc = 'intrados'\n", " \n", " self.sigma = 0. # source strength\n", " self.vt = 0. # tangential velocity\n", " self.cp = 0. # pressure coefficient" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the circular cylinder, the discretization into panels was really easy. This is the part that gets more complicated when you want to compute the flow around a general geometry, while the solution part is effectively the same as in [Lesson 9](http://nbviewer.ipython.org/urls/github.com/barbagroup/AeroPython/blob/master/lessons/09_Lesson09_flowOverCylinder.ipynb).\n", "\n", "The function below will create the panels from the geometry data that was read from a file. It is better to have small panels near the leading-edge and the trailing edge, where the curvature is large. One method to get a non uniform distribution around the airfoil is to first discretize a circle with diameter equal to the airfoil's chord, with the leading edge and trailing edge touching the circle at a node.\n", "\n", "
![image](files/resources/naca0012_in_circle.png)
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then, we store the $x$-coordinate of the circle points, `x_circle`, to be the $x$-coordinate of the panel nodes, `x`, and project the $y$-coordinate of the circle points onto the airfoil by interpolation. We end up with a node distribution on the airfoil that is refined near the leading edge and the trailing edge. It will look like this:\n", "\n", "
![image](files/resources/naca0012_discretized_in_circle.png)
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With the discretization method just described, the function `definePanels()` returns an array of objects, each one being an instance of the class `Panel` and containing all information about a panel, given the desired number of panels and the set of body coordinates.\n", "\n", "A few remarks about the implementation of the function `definePanels()`:\n", "\n", "* we just need to compute the $x$-coordinates of the circle (`x_circle`) since the $y$-coordinates of the panel nodes will be computed by interpolation;\n", "* we create a circle with `N+1` points, but the first and last points coincide;\n", "* we extend our NumPy arrays by adding an extra value that is equal to the first one; thus we wont have to worry with the value `x[i+1]` in the different loops;\n", "* the *while*-loop is used to find two consecutive points, (`x[I]`,`y[I]`) and (`x[I+1]`,`y[I+1]`), on the foil such that the interval [`x[I]`,`x[I+1]`] contains the value `x_ends[i]`; we use the keyword `break` to get out of the loop;\n", "* once the two points have been identified, the value `y_ends[i]` is computed by interpolation." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def define_panels(x, y, N=40):\n", " \"\"\"Discretizes the geometry into panels using 'cosine' method.\n", " \n", " Arguments\n", " ---------\n", " x, y -- Cartesian coordinates of the geometry (1D arrays).\n", " N - number of panels (default 40).\n", " \n", " Returns\n", " -------\n", " panels -- Numpy array of panels.\n", " \"\"\"\n", " R = (x.max()-x.min())/2 # radius of the circle\n", " x_center = (x.max()+x.min())/2 # x-coord of the center\n", " x_circle = x_center + R*np.cos(np.linspace(0, 2*pi, N+1)) # x-coord of the circle points\n", " \n", " x_ends = np.copy(x_circle) # projection of the x-coord on the surface\n", " y_ends = np.empty_like(x_ends) # initialization of the y-coord Numpy array\n", "\n", " x, y = np.append(x, x[0]), np.append(y, y[0]) # extend arrays using np.append\n", " \n", " # computes the y-coordinate of end-points\n", " I = 0\n", " for i in range(N):\n", " while I < len(x)-1:\n", " if (x[I] <= x_ends[i] <= x[I+1]) or (x[I+1] <= x_ends[i] <= x[I]):\n", " break\n", " else:\n", " I += 1\n", " a = (y[I+1]-y[I])/(x[I+1]-x[I])\n", " b = y[I+1] - a*x[I+1]\n", " y_ends[i] = a*x_ends[i] + b\n", " y_ends[N] = y_ends[0]\n", " \n", " panels = np.empty(N, dtype=object)\n", " for i in range(N):\n", " panels[i] = Panel(x_ends[i], y_ends[i], x_ends[i+1], y_ends[i+1])\n", " \n", " return panels" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can use this function, calling it with a desired number of panels whenever we execute the cell below. We also plot the resulting geometry." ] }, { "cell_type": "code", "collapsed": false, "input": [ "N = 40 # number of panels\n", "panels = define_panels(x, y, N) # discretizes of the geometry into panels\n", "\n", "# plots the geometry and the panels\n", "val_x, val_y = 0.1, 0.2\n", "x_min, x_max = min(panel.xa for panel in panels), max(panel.xa for panel in panels)\n", "y_min, y_max = min(panel.ya for panel in panels), max(panel.ya for panel in panels)\n", "x_start, x_end = x_min-val_x*(x_max-x_min), x_max+val_x*(x_max-x_min)\n", "y_start, y_end = y_min-val_y*(y_max-y_min), y_max+val_y*(y_max-y_min)\n", "\n", "size = 10\n", "plt.figure(figsize=(size, (y_end-y_start)/(x_end-x_start)*size))\n", "plt.grid(True)\n", "plt.xlabel('x', fontsize=16)\n", "plt.ylabel('y', fontsize=16)\n", "plt.xlim(x_start, x_end)\n", "plt.ylim(y_start, y_end)\n", "plt.plot(x, y, color='k', linestyle='-', linewidth=2)\n", "plt.plot(np.append([panel.xa for panel in panels], panels[0].xa), \n", " np.append([panel.ya for panel in panels], panels[0].ya), \n", " linestyle='-', linewidth=1, marker='o', markersize=6, color='#CD2305');" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 5 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Freestream conditions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The NACA0012 airfoil will be immersed in a uniform flow with velocity $U_\\infty$ and an angle of attack $\\alpha=0$. Even though it may seem like overkill to create a class for the freestream, we'll do it anyway. When creating a class, one is expecting to also create several intances of its objects. Here, we just have one freestream, so why define a class? Well, it makes the code more readable and does not block the programer from using the variable names `u_inf` and `alpha` for something else outside of the class.\n", "Also, every time we need the freestream condition into a function, we will just have to pass the object as an argument and not all the attributes of the freestream." ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Freestream:\n", " \"\"\"Freestream conditions.\"\"\"\n", " def __init__(self, u_inf=1.0, alpha=0.0):\n", " \"\"\"Sets the freestream conditions.\n", " \n", " Arguments\n", " ---------\n", " u_inf -- Farfield speed (default 1.0).\n", " alpha -- Angle of attack in degrees (default 0.0).\n", " \"\"\"\n", " self.u_inf = u_inf\n", " self.alpha = alpha*pi/180 # degrees --> radians" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "# defines and creates the object freestream\n", "u_inf = 1.0 # freestream spee\n", "alpha = 0.0 # angle of attack (in degrees)\n", "freestream = Freestream(u_inf, alpha) # instantiation of the object freestream" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Flow tangency boundary condition" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Enforcing the flow-tangency condition on each *control point* approximately makes the body geometry correspond to a dividing streamline (and the approximation improves if we represented the body with more and more panels). So, for each panel $i$, we make $u_n=0$ at $(x_{c_i},y_{c_i})$, which leads to the equation derived in the previous lesson:\n", "\n", "$$u_{n_i} = \\frac{\\partial}{\\partial n_i}\\left\\lbrace \\phi\\left(x_{c_i},y_{c_i}\\right) \\right\\rbrace = 0$$\n", "\n", "i.e.\n", "\n", "$$0 = U_\\infty \\cos\\beta_i + \\frac{\\sigma_i}{2} + \\sum_{j=1,j\\neq i}^{N_p} \\frac{\\sigma_j}{2\\pi} \\int \\frac{\n", "\\left(x_{c_i}-x_j(s_j)\\right) \\cos\\beta_i\n", "+ \\left(y_{c_i}-y_j(s_j)\\right) \\sin\\beta_i\n", "}\n", "{\\left(x_{c_i}-x_j(s)\\right)^2 + \\left(y_{c_i}-y_j(s)\\right)^2} {\\rm d}s_j$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the equation above, we calculate the derivative in the normal direction to enforce the flow tangency condition on each panel. But later, we will have to calculate the derivative in the tangential direction to compute the surface pressure coefficient. And, when we are interested in plotting the velocity field onto a mesh, we will have to calculate the derivative in the $x$- and $y$-direction.\n", "\n", "Therefore the function below is similar to the one implemented in [Lesson 9](http://nbviewer.ipython.org/github/barbagroup/AeroPython/blob/master/lessons/09_Lesson09_flowOverCylinder.ipynb) to obtain the integrals along each panel, but we've generalized it to adapt to the direction of derivation (by means of two new arguments, `dxdz` and `dydz`, which respectively represent the value of $\\frac{\\partial x_{c_i}}{\\partial z_i}$ and $\\frac{\\partial y_{c_i}}{\\partial z_i}$, $z_i$ being the desired direction).\n", "\n", "Moreover, the function is also more general in the sense of allowing any evaluation point, not just a control point on a panel (the argument `p_i` has been replaced by the coordinates `x` and `y` of the control-point, and `p_j` has been replaced with `panel`)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def integral(x, y, panel, dxdz, dydz):\n", " \"\"\"Evaluates the contribution of a panel at one point.\n", " \n", " Arguments\n", " ---------\n", " x, y -- Cartesian coordinates of the point.\n", " panel -- panel which contribution is evaluated.\n", " dxdz -- derivative of x in the z-direction.\n", " dydz -- derivative of y in the z-direction.\n", " \n", " Returns\n", " -------\n", " Integral over the panel of the influence at one point.\n", " \"\"\"\n", " def func(s):\n", " return ( ((x - (panel.xa - sin(panel.beta)*s))*dxdz\n", " +(y - (panel.ya + cos(panel.beta)*s))*dydz)\n", " / ((x - (panel.xa - sin(panel.beta)*s))**2\n", " +(y - (panel.ya + cos(panel.beta)*s))**2) )\n", " return integrate.quad(lambda s:func(s), 0., panel.length)[0]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Building the linear system" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, we build and solve the linear system of equations of the form\n", "\n", "$$[A][\\sigma] = [b]$$\n", "\n", "In building the matrix, below, we call the `integral()` function with the correct values for the last parameters: $\\cos \\beta_i$ and $\\sin\\beta_i$, corresponding to a derivative in the normal direction.\n", "\n", "Finally, we use `linalg.solve()` from NumPy to solve the system and find the strength of each panel." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def build_matrix(panels):\n", " \"\"\"Builds the source matrix.\n", " \n", " Arguments\n", " ---------\n", " panels -- array of panels.\n", " \n", " Returns\n", " -------\n", " A -- NxN matrix (N is the number of panels).\n", " \"\"\"\n", " N = len(panels)\n", " A = np.empty((N, N), dtype=float)\n", " np.fill_diagonal(A, 0.5)\n", " \n", " for i, p_i in enumerate(panels):\n", " for j, p_j in enumerate(panels):\n", " if i != j:\n", " A[i,j] = 0.5/pi*integral(p_i.xc, p_i.yc, p_j, cos(p_i.beta), sin(p_i.beta))\n", " \n", " return A\n", "\n", "def build_rhs(panels, freestream):\n", " \"\"\"Builds the RHS of the linear system.\n", " \n", " Arguments\n", " ---------\n", " panels -- array of panels.\n", " freestream -- farfield conditions.\n", " \n", " Returns\n", " -------\n", " b -- 1D array ((N+1)x1, N is the number of panels).\n", " \"\"\"\n", " b = np.empty(len(panels), dtype=float)\n", " \n", " for i, panel in enumerate(panels):\n", " b[i] = -freestream.u_inf * cos(freestream.alpha - panel.beta)\n", " \n", " return b" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "A = build_matrix(panels)\t # computes the singularity matrix\n", "b = build_rhs(panels, freestream) # computes the freestream RHS" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "# solves the linear system\n", "sigma = np.linalg.solve(A, b)\n", "\n", "for i, panel in enumerate(panels):\n", "\tpanel.sigma = sigma[i]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Surface pressure coefficient" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From Bernoulli's equation, the pressure coefficient on the $i$-th panel is\n", "\n", "$$C_{p_i} = 1-\\left(\\frac{u_{t_i}}{U_\\infty}\\right)^2$$\n", "\n", "where $u_{t_i}$ is the tangential component of the velocity at the center point of the $i$-th panel,\n", "\n", "$$u_{t_i} = -U_\\infty \\sin\\beta_i + \\sum_{j=1}^{N_p} \\frac{\\sigma_j}{2\\pi} \\int \\frac{\n", "\\left(x_{c_i}-x_j(s_j)\\right) \\frac{\\partial x_{c_i}}{\\partial t_i}\n", "+ \\left(y_{c_i}-y_j(s_j)\\right) \\frac{\\partial y_{c_i}}{\\partial t_i}\n", "}\n", "{\\left(x_{c_i}-x_j(s)\\right)^2 + \\left(y_{c_i}-y_j(s)\\right)^2} {\\rm d}s_j$$\n", "\n", "with\n", "\n", "$$\\frac{\\partial x_{c_i}}{\\partial t_i} = -\\sin\\beta_i \\quad\\text{and} \\quad \\frac{\\partial y_{c_i}}{\\partial t_i} = \\cos\\beta_i$$\n", "\n", "Notice that below we call the function `integral()` with different arguments: $-\\sin\\beta_i$ and $\\cos\\beta_i$ to get the derivation in the tangential direction." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def get_tangential_velocity(panels, freestream):\n", " \"\"\"Computes the tangential velocity on the surface.\n", " \n", " Arguments\n", " ---------\n", " panels -- array of panels.\n", " freestream -- farfield conditions.\n", " \"\"\"\n", " N = len(panels)\n", " A = np.empty((N, N), dtype=float)\n", " np.fill_diagonal(A, 0.0)\n", " \n", " for i, p_i in enumerate(panels):\n", " for j, p_j in enumerate(panels):\n", " if i != j:\n", " A[i,j] = 0.5/pi*integral(p_i.xc, p_i.yc, p_j, -sin(p_i.beta), cos(p_i.beta))\n", " \n", " b = freestream.u_inf * np.sin([freestream.alpha - panel.beta for panel in panels])\n", " \n", " sigma = np.array([panel.sigma for panel in panels])\n", " \n", " vt = np.dot(A, sigma) + b\n", " \n", " for i, panel in enumerate(panels):\n", " panel.vt = vt[i]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "# computes the tangential velocity at the center-point of each panel\n", "get_tangential_velocity(panels, freestream)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "def get_pressure_coefficient(panels, freestream):\n", " \"\"\"Computes the surface pressure coefficients.\n", " \n", " Arguments\n", " ---------\n", " panels -- array of panels.\n", " freestream -- farfield conditions.\n", " \"\"\"\n", " for panel in panels:\n", " panel.cp = 1.0 - (panel.vt/freestream.u_inf)**2" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "# computes the surface pressure coefficients\n", "get_pressure_coefficient(panels, freestream)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "# plots the surface pressure coefficient\n", "val_x, val_y = 0.1, 0.2\n", "x_min, x_max = min( panel.xa for panel in panels ), max( panel.xa for panel in panels )\n", "cp_min, cp_max = min( panel.cp for panel in panels ), max( panel.cp for panel in panels )\n", "x_start, x_end = x_min-val_x*(x_max-x_min), x_max+val_x*(x_max-x_min)\n", "y_start, y_end = cp_min-val_y*(cp_max-cp_min), cp_max+val_y*(cp_max-cp_min)\n", "\n", "plt.figure(figsize=(10, 6))\n", "plt.grid(True)\n", "plt.xlabel('x', fontsize=16)\n", "plt.ylabel('$C_p$', fontsize=16)\n", "plt.plot([panel.xc for panel in panels if panel.loc == 'extrados'], \n", " [panel.cp for panel in panels if panel.loc == 'extrados'], \n", " color='r', linestyle='-', linewidth=2, marker='o', markersize=6)\n", "plt.plot([panel.xc for panel in panels if panel.loc == 'intrados'], \n", " [panel.cp for panel in panels if panel.loc == 'intrados'], \n", " color='b', linestyle='-', linewidth=1, marker='o', markersize=6)\n", "plt.legend(['extrados', 'intrados'], loc='best', prop={'size':14})\n", "plt.xlim(x_start, x_end)\n", "plt.ylim(y_start, y_end)\n", "plt.gca().invert_yaxis()\n", "plt.title('Number of panels : %d' % N);" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n6RY6YQAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 16 }, { "cell_type": "heading", "level": 5, "metadata": {}, "source": [ "Accuracy check" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For a closed body, the sum of all the source strengths must be zero. If not, it means the body would be adding or absorbing mass from the flow! Therfore, we should have\n", "\n", "$$\\sum_{j=1}^{N} \\sigma_j l_j = 0$$\n", "\n", "where $l_j$ is the length of the $j^{\\text{th}}$ panel.\n", "\n", "With this, we can get a measure of the accuracy of the source panel method." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# calculates the accuracy\n", "accuracy = sum([panel.sigma*panel.length for panel in panels])\n", "print '--> sum of source/sink strengths:', accuracy" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "--> sum of source/sink strengths: 0.00461703117528\n" ] } ], "prompt_number": 17 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Streamlines onto a mesh grid" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To get a streamline plot, we have to create a mesh (like we've done in all *AeroPython* lessons!) and compute the velocity field onto it. Knowing the strength of every panel, we find the $x$-component of the velocity by taking derivative of the velocity potential in the $x$-direction, and the $y$-component by taking derivative in the $y$-direction:\n", "\n", "$$u\\left(x,y\\right) = \\frac{\\partial}{\\partial x}\\left\\lbrace \\phi\\left(x,y\\right) \\right\\rbrace$$\n", "\n", "$$v\\left(x,y\\right) = \\frac{\\partial}{\\partial y}\\left\\lbrace \\phi\\left(x,y\\right) \\right\\rbrace$$\n", "\n", "Notice that here we call the funcion `integral()` with $1,0$ as the final arguments when calculating the derivatives in the $x$-direction, and $0,1$ for the derivatives in th $y$-direction." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def get_velocity_field(panels, freestream, X, Y):\n", " \"\"\"Returns the velocity field.\n", " \n", " Arguments\n", " ---------\n", " panels -- array of panels.\n", " freestream -- farfield conditions.\n", " X, Y -- mesh grid.\n", " \"\"\"\n", " Nx, Ny = X.shape\n", " u, v = np.empty((Nx, Ny), dtype=float), np.empty((Nx, Ny), dtype=float)\n", " \n", " for i in xrange(Nx):\n", " for j in xrange(Ny):\n", " u[i,j] = freestream.u_inf*cos(freestream.alpha)\\\n", " + 0.5/pi*sum([p.sigma*integral(X[i,j], Y[i,j], p, 1, 0) for p in panels])\n", " v[i,j] = freestream.u_inf*sin(freestream.alpha)\\\n", " + 0.5/pi*sum([p.sigma*integral(X[i,j], Y[i,j], p, 0, 1) for p in panels])\n", " \n", " return u, v" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "# defines a mesh grid\n", "Nx, Ny = 20, 20 # number of points in the x and y directions\n", "val_x, val_y = 1.0, 2.0\n", "x_min, x_max = min( panel.xa for panel in panels ), max( panel.xa for panel in panels )\n", "y_min, y_max = min( panel.ya for panel in panels ), max( panel.ya for panel in panels )\n", "x_start, x_end = x_min-val_x*(x_max-x_min), x_max+val_x*(x_max-x_min)\n", "y_start, y_end = y_min-val_y*(y_max-y_min), y_max+val_y*(y_max-y_min)\n", "\n", "X, Y = np.meshgrid(np.linspace(x_start, x_end, Nx), np.linspace(y_start, y_end, Ny))\n", "\n", "# computes the velicity field on the mesh grid\n", "u, v = get_velocity_field(panels, freestream, X, Y)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "# plots the velocity field\n", "size=10\n", "plt.figure(figsize=(size, (y_end-y_start)/(x_end-x_start)*size))\n", "plt.xlabel('x', fontsize=16)\n", "plt.ylabel('y', fontsize=16)\n", "plt.streamplot(X, Y, u, v, density=1, linewidth=1, arrowsize=1, arrowstyle='->')\n", "plt.fill([panel.xc for panel in panels], \n", " [panel.yc for panel in panels], \n", " color='k', linestyle='solid', linewidth=2, zorder=2)\n", "plt.xlim(x_start, x_end)\n", "plt.ylim(y_start, y_end)\n", "plt.title('Streamlines around a NACA 0012 airfoil, AoA = %.1f' % alpha);" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAACuCAYAAACyTeDoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsfXl8FOX9/3s2u7l2N3ey2VwkEEgIt8qpKB6toGK9AKsW\nUTlK64H2V/BCDkutB7a11srXVoUiaC1aVARbUFBUQKtyyA0CSbhJyH3t7vz++PTZmZ08c+xmQzZh\n3q/X83rOmZ2ZnZnnPZ/rEURRFGHChAkTJkyYMGGi08HS0QdgwoQJEyZMmDBhIjSYRM6ECRMmTJgw\nYaKTwiRyJkyYMGHChAkTnRQmkTNhwoQJEyZMmOikMImcCRMmTJgwYcJEJ4VJ5EyYMGHChAkTJjop\nTCJnwkQHYv369cjNzfXX+/bti08//bQDjyhyoLw2JjoGb7zxBq6++mrNMZ9//jl69uwJp9OJ9957\nT3PsU089hSlTpgAADh06BIvFAp/PF7bjNWHifINJ5Ex0OWzcuBEjRoxAUlISUlNTcckll+Drr78G\nALz++usYOXJkBx+hOnbs2IFLL720ow+jy2HSpEmwWCz46quv/G379++HxdL6FThp0iTYbDYcP368\nVd9HH32ESy+9FAkJCcjIyMCoUaPw/vvvB4xZv349LBYLnnnmGd3jWrduHYqLi2G323HFFVfgyJEj\nAf2zZs1CWloa0tLS8PDDDwf0zZ49G/369YPNZsO8efMC+latWoVLLrkEycnJcLvdmDJlCmpra3WP\nh4fbb78dH330keaYJ554Avfffz9qampw/fXXa4595JFH8Morr4R0LABQW1sLh8OBa665JqTtR40a\nhZSUFDQ3N4d8DFqoqKjAjTfeCIfDgfz8fCxfvlxz/O9//3u43W4kJibinnvuabfjMtF1YRI5E10K\n1dXVuO666/DAAw+gsrIS5eXlmDNnDmJiYgzvw5QO8CGKIjpz/PCUlBQ8/vjjmmPq6uqwYsUKlJSU\nYOnSpQF9//znPzF+/HhMmjQJ5eXlOHnyJObPn9+KyC1evBh9+/bFkiVLNH/r9OnTuPnmm7FgwQJU\nVlbioosuwoQJE/z9ixYtwsqVK7Ft2zZs27YN77//PhYtWuTv79mzJ5599llce+21EAQhYN/V1dV4\n4okncOzYMezatQvl5eX49a9/rXk8ocDj8QAAjhw5gpKSkrDvn4cVK1YgLy8P69evx4kTJ4La9tCh\nQ9iyZQsyMjJ0JYeh4pe//CViY2Nx8uRJvPHGG5g+fTp27tzJHfvRRx/h6aefxscff4zDhw/j4MGD\nmDNnTrscl4kuDNGEiS6Er776SkxKSuL27dy5U4yNjRWjoqJEh8MhJicni6Ioinfeeaf485//XBwz\nZoxot9vFdevWieXl5eJNN90kpqeniwUFBeILL7zg38/mzZvFYcOGiUlJSaLb7Rbvvfdesbm52d8v\nCIL40ksviYWFhaLT6RRnz54t7t+/Xxw2bJiYmJgoTpgwwT/+k08+EXNycvzbduvWTVy3bp0oiqI4\nZ84ccdy4ceLEiRNFp9Mp9unTR/z666/9Y/WO8cILLxQTEhJEl8slPvTQQ9xrUllZKV577bVienq6\nmJycLF533XViWVmZv/+yyy4TH3vsMXHEiBFiXFyceODAAfHzzz8XL7roIjExMVEcPHiw+MUXXwQc\n/9q1a/31OXPmiHfccYcoiqL4ww8/iIIgiIsXLxbz8vLEtLQ0ccGCBf6x9fX14p133ikmJyeLJSUl\n4jPPPBNwbZS4//77xdzcXDEhIUG88MILxc8++0x17KRJk8SHHnpIzMzMFDds2CCKoiju27dPFAQh\nYNzixYvFfv36iUuXLhX79u3rb/f5fGJubq743HPPqf6GKIpibW2t6HQ6xc8//1x0Op0B/5cSixYt\nEi+++GJ/va6uToyLixP37NkjiqIoDh8+XHzllVf8/a+++qo4bNiwVvu54447xLlz52oe1zvvvCP2\n69dPtf+pp54Se/ToITqdTrGkpER89913/X2vvfaaeMkll/jrgiCIf/7zn8WePXuKBQUFYo8ePUSL\nxSLGxcWJTqdTbG5uFsvLy8WxY8eKKSkpYmFhYcB58O4Jr9erefxyXH755eLChQvFq666qtX/sXLl\nSrGkpERMSkoSR40aJe7atSugf968eeLYsWPF3/zmN+J1111n+DeNora2VoyOjhb37dvnb5s4caL4\n8MMPc8f/9Kc/FR977DF//eOPPxYzMzPDflwmujZMiZyJLoWioiJERUVh0qRJWLNmDSorK/19vXv3\nxssvv4zhw4ejpqYGFRUV/r7ly5dj9uzZqK2txfDhwzF27FgMGjQIR48exbp16/CHP/wB//73vwEA\nVqsVf/zjH3HmzBl8+eWXWLduHV566aWA4/j3v/+Nb7/9Fps2bcLTTz+NKVOmYPny5Thy5Ai2b9+u\nqm5RSlbef/99/PSnP0VVVRWuv/563HvvvQBIaqh1jA888AAefPBBVFVV4eDBgxg/fjz393w+H+65\n5x4cOXIER44cQVxcnP83GJYuXYq//vWvqK2thd1ux7XXXosZM2agoqICDz30EK699lr/dRYEIeAc\nlOcDkD3V3r17sW7dOsyfPx979uwBAMybNw8//PADDh48iI8++giLFy/mbs8wZMgQbN26FZWVlbjt\nttswbtw4TbVUfHw8Hn30UTz22GOqYxYvXowJEybg+uuvx/79+/HNN98AAPbs2YOysjLccsstqtsC\nwDvvvAOXy4URI0Zg7NixWLx4serY77//HgMGDAg4vsLCQnz//fcAgJ07dwb09+/f398XLDZs2IC+\nffuq9hcWFmLjxo2orq7GnDlzcMcdd2hKu1auXIktW7Zg165d2L9/P/Ly8vDBBx+guroaNpsNt956\nK/Ly8nDs2DH885//xKOPPopPPvkEAP+eMIrDhw/j008/xfjx4zF+/PgAqefevXtx22234YUXXsDp\n06dxzTXXYOzYsWhpafGPWbJkCSZMmIDx48fjo48+wsmTJ1V/6xe/+AWSk5O5aeDAgdxt9u7dC6vV\nisLCQn/bgAEDVP833n984sSJgPeWCRN6MImciS4Fp9OJjRs3QhAETJkyBRkZGfjJT37if2GLHNWg\nIAi44YYbMHz4cADAtm3bcPr0aTz++OOwWq0oKCjA5MmT8eabbwIALrjgAgwZMgQWiwXdunXD1KlT\nsWHDhoB9zpw5Ew6HAyUlJejXrx/GjBmD/Px8JCQkYMyYMfj2228Nnc/IkSMxevRoCIKAO+64A1u3\nbgUAfPXVV5rHGB0djX379uH06dOIj4/H0KFDuftPSUnBjTfeiNjYWDgcDjz66KMB5yIIAiZNmoTe\nvXvDYrHg3//+N4qKinD77bfDYrHg1ltvRXFxcSv1IgPvejNVd//+/TFgwAD/Ob399tt47LHHkJSU\nhJycHDzwwAOaqtzbb78dycnJsFgseOihh9DU1OQnhTwIgoBp06bhyJEjWLNmTav+I0eOYP369Rg3\nbhycTieuvvpqP1E4c+YMAMDtdqvuHyAiOG7cOADAuHHj8Oabb/rVj0rU1dUhISEhoC0hIQE1NTUA\nyBYsMTExoC8UO7f//Oc/WLJkCebPn6865pZbbkFmZiYAYPz48ejZsyc2b96sOv6RRx5BUlIS12Sh\n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\n", "text": [ "" ] } ], "prompt_number": 20 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now calculate the pressure coefficient. In Lesson 9, we computed the pressure coefficient on the surface of the circular cylinder. That was useful because we have an analytical solution for the surface pressure on a cylinder in potential flow. For an airfoil, we are interested to see how the pressure looks all around it, and we make a contour plot in the flow domain." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# computes the pressure field\n", "cp = 1.0 - (u**2+v**2)/freestream.u_inf**2\n", "\n", "# plots the pressure field\n", "size=12\n", "plt.figure(figsize=(1.1*size, (y_end-y_start)/(x_end-x_start)*size))\n", "plt.xlabel('x', fontsize=16)\n", "plt.ylabel('y', fontsize=16)\n", "contf = plt.contourf(X, Y, cp, levels=np.linspace(-2.0, 1.0, 100), extend='both')\n", "cbar = plt.colorbar(contf)\n", "cbar.set_label('$C_p$', fontsize=16)\n", "cbar.set_ticks([-2.0, -1.0, 0.0, 1.0])\n", "plt.fill([panel.xc for panel in panels], \n", " [panel.yc for panel in panels], \n", " color='k', linestyle='solid', linewidth=2, zorder=2)\n", "plt.xlim(x_start, x_end)\n", "plt.ylim(y_start, y_end)\n", "plt.title('Contour of pressure field');" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Final words\n", "\n", "We've learned to use a source-sheet to represent any solid body: first a [circular cylinder](http://nbviewer.ipython.org/github/barbagroup/AeroPython/blob/master/lessons/09_Lesson09_flowOverCylinder.ipynb) (which we knew we could get by superposing a doublet and a freestream), and now an airfoil.\n", "\n", "But what is the feature of airfoils that makes them interesting? Well, the fact that we can use them to generate lift and make things that fly, of course! But what do we need to generate lift? Think, think ... what is it?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "Please ignore the cell below. It just loads our style for the notebook." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.core.display import HTML\n", "def css_styling():\n", " styles = open('../styles/custom.css', 'r').read()\n", " return HTML(styles)\n", "css_styling()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", "\n", "\n" ], "metadata": {}, "output_type": "pyout", "prompt_number": 22, "text": [ "" ] } ], "prompt_number": 22 } ], "metadata": {} } ] }