diff --git a/clementi/.ipynb_checkpoints/Linear_vortex_Panel_Method-checkpoint.ipynb b/clementi/.ipynb_checkpoints/Linear_vortex_Panel_Method-checkpoint.ipynb new file mode 100644 index 0000000..1f10b63 --- /dev/null +++ b/clementi/.ipynb_checkpoints/Linear_vortex_Panel_Method-checkpoint.ipynb @@ -0,0 +1,1874 @@ +{ + "metadata": { + "hide_input": false, + "name": "", + "signature": "sha256:e4c84416c816dd77864dc50cef246ba32ce52d7cb5903fc802363c9858db5c33" + }, + "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)2015 Natalia C. Clementi\n", + "\n", + "Some pieces of code are based on the Aeropython course provided Lorena A. Barba " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#Linear vortex panel method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the last lessons of _AeroPython_, we have been learning (we hope so!) how to apply panel methods to represent a cylinder and different airfoils.\n", + "\n", + "We started with a simple source panel method ([Lesson 10](http://nbviewer.ipython.org/urls/github.com/barbagroup/AeroPython/blob/master/lessons/10_Lesson10_sourcePanelMethod.ipynb)) but we realized that if we want to generate lift this method was not able to provide it. Do you remember why?...**The source panel method gives as a solution with no circulation** and we need *circulation* so we can have lift. \n", + "\n", + "Then, to get a solution with circulation, we add vortices to the constant-source panel method, allowing us to obtain an lift force.([Lesson 11](http://nbviewer.ipython.org/github/barbagroup/AeroPython/blob/master/lessons/11_Lesson11_vortexSourcePanelMethod.ipynb))\n", + "\n", + "There are other ways to generate a solution with circulation. One of them is to use linearly varying strength vortices." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##What does \"linearly varying strength\" mean?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So far, we were treating our singularity distribution with constant strength along the panels. Now we allow the strength to vary linearly.\n", + "\n", + "\\begin{equation}\n", + " \\gamma(x)= \\gamma_0 + \\gamma_1 (x-x_1) \n", + "\\end{equation}\n", + "\n", + "where $\\gamma_0$ is constant and $\\gamma_1$ is the slope. Using the principle of superposition we can separate our problem into a constant-strength part and other where the strength varies linearly, to finally add these two solutions. \n", + "\n", + "\n", + "
\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Derivation of the linear vortex panel method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the powers of superposition, and remembering that the potential at a location $(x,y)$ in this case is,\n", + "\n", + "\\begin{equation}\n", + " \\phi(x, y) = \\phi_{\\text{free-stream}}(x, y)+ \\phi_{\\text{vortex-sheet}}(x, y)\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we explicitly write the potentitial function as," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\\begin{equation}\n", + " \\phi(x, y) = xU_{\\infty}\\cos(\\alpha) + yU_{\\infty}\\sin(\\alpha) -\n", + " \\frac{1}{2\\pi} \\int_{sheet} \\gamma(s)\\tan^{-1} \\frac{y-\\eta(s)}{x-\\xi(s)}ds\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we discretize the geometry into $N$ panels, as we were doing in the previous lessons, then we can write the potential at a point $(x,y)$ as,\n", + "\n", + "\\begin{equation}\n", + " \\phi\\left(x,y\\right) = xU_\\infty \\cos \\alpha + yU_\\infty \\sin \\alpha \\\\-\\sum_{j=1}^N \\frac{1}{2\\pi} \\int_j \\gamma_j (s) \\tan^{-1} \\left(\\frac{y-\\eta_j(s)}{x-\\xi_j(s)}\\right) {\\rm d}s_j\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where, \n", + "\n", + "\\begin{equation}\n", + "\\left\\{\n", + "\\begin{array}{l}\n", + "\\xi_j(s)=x_j-s\\sin\\beta_j \\\\\n", + "\\eta_j(s)=y_j+s\\cos\\beta_j\n", + "\\end{array}\n", + ",\\ \\ \\ \n", + "0\\le s \\le l_j\n", + "\\right.\n", + "\\end{equation}\n", + "\n", + "and $\\gamma_j (s)$ can be written as,\n", + "\n", + "\\begin{equation}\n", + " \\gamma_j (s) = \\gamma_j + \\left(\\frac{\\gamma_{j+1}-\\gamma_j}{l_j} \\right)\\; s\n", + "\\end{equation}\n", + "\n", + "with $l_j$ the length of panel $j$ and $\\beta_j$ the angle between the panel's normal and the $x$-axis. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then, replacing what we know for $\\gamma_j (s)$ we can write the potential as:\n", + "\n", + "\\begin{equation}\n", + " \\phi\\left(x,y\\right) = xU_\\infty \\cos \\alpha + yU_\\infty \\sin \\alpha - \\sum_{j=1}^N \\frac{\\gamma_j}{2\\pi} \\int_j \\tan^{-1} \\left(\\frac{y-\\eta_j(s)}{x-\\xi_j(s)}\\right) {\\rm d}s_j \\\\ \n", + " -\\sum_{j=1}^N \\frac{1}{2\\pi} \\left(\\frac{\\gamma_{j+1}-\\gamma_j}{l_j} \\right) \\int_j s\\; \\tan^{-1} \\left(\\frac{y-\\eta_j(s)}{x-\\xi_j(s)}\\right) {\\rm d}s_j\n", + "\\end{equation}\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first three terms of the potential should be familiar, we already had to fight with the math that those terms involve in the previous lessons. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Normal and tangential velocity\n", + "\n", + "We know that we can write the normal and tangential components of the velocity using:\n", + "\n", + "\\begin{equation}\n", + " \\left\\{\n", + " \\begin{array}{l}\n", + " U_{\\text{n}}(x, y)=\\frac{\\partial \\phi}{\\partial x}(x, y) \\,n_x+\\frac{\\partial \\phi}{\\partial y}(x, y) \\,n_y \\\\\n", + " U_{\\text{t}}(x, y)=\\frac{\\partial \\phi}{\\partial x}(x, y) \\,t_x+\\frac{\\partial \\phi}{\\partial y}(x, y) \\,t_y\n", + " \\end{array}\n", + " \\right.\n", + "\\end{equation}\n", + "\n", + "where $n_x=\\cos (\\beta_i)$ , $n_y=\\sin (\\beta_i)$ , $t_x=-\\sin (\\beta_i)$ and $t_y=\\cos (\\beta_i)$. In order to get the different components of the velocity we need to take some derivatives. We know that you don't like to do a lot of math, but if you completed the exercise of lesson 11 ([11_Lesson11_Exercise](http://nbviewer.ipython.org/github/barbagroup/AeroPython/blob/master/lessons/11_Lesson11_Exercise.ipynb)) then you have all the derivatives done!!! " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The components of the gradient should look like this:\n", + "\n", + "\\begin{align}\n", + " \\frac{\\partial \\phi}{\\partial x}(x,y) &= U_\\infty \\cos \\alpha \\\\\n", + " &+ \\frac{1}{{2\\pi}} \\sum_{j=1}^N \\gamma_j \\int_j \\frac{(y-\\eta_j(s))}{(x-\\xi_j(s))^2 + (y-\\eta_j(s))^2} {\\rm d}s_j \\\\ \n", + " &+ \\frac{1}{2\\pi}\\sum_{j=1}^N \\left(\\frac{\\gamma_{j+1}-\\gamma_j}{l_j} \\right) \\int_j \\frac{s\\;(y-\\eta_j(s))}{(x-\\xi_j(s))^2 + (y-\\eta_j(s))^2} {\\rm d}s_j\n", + "\\end{align}\n", + "\n", + "\\begin{align}\n", + " \\frac{\\partial \\phi}{\\partial y}(x,y) &= U_\\infty \\sin \\alpha \\\\\n", + " &- \\frac{1}{{2\\pi}} \\sum_{j=1}^N \\gamma_j \\int_j \\frac{(x-\\xi_j(s))}{(x-\\xi_j(s))^2 + (y-\\eta_j(s))^2} {\\rm d}s_j \\\\ \n", + " &- \\frac{1}{2\\pi}\\sum_{j=1}^N \\left(\\frac{\\gamma_{j+1}-\\gamma_j}{l_j} \\right) \\int_j \\frac{s\\;(x-\\xi_j(s))}{(x-\\xi_j(s))^2 + (y-\\eta_j(s))^2} {\\rm d}s_j\n", + "\\end{align}\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then, rearranging some terms we can write $U_{\\text{n}}(x, y)$ and $U_{\\text{t}}(x, y)$ as:\n", + "\n", + "\\begin{align}\n", + " U_{\\text{n}}(x, y) & = U_\\infty \\cos(\\alpha - \\beta_i) \\\\\n", + " &+\\frac{1}{{2\\pi}}\\sum_{j=1}^N \\gamma_j \\left[ \\int_j f_j(s) {\\rm d}s \\cos(\\beta_i) - \\int_j g_j(s) {\\rm d}s \\sin(\\beta_i) \\right] \\\\\n", + " &-\\frac{1}{{2\\pi}}\\sum_{j=1}^N \\frac{\\gamma_j}{l_j} \\left[ \\int_j s\\,f_j(s) {\\rm d}s \\cos(\\beta_i) - \\int_j s\\,g_j(s) {\\rm d}s \\sin(\\beta_i) \\right] \\\\\n", + " &+ \\frac{1}{{2\\pi}}\\sum_{j=1}^N \\frac{\\gamma_{j+1}}{l_j} \\left[ \\int_j s\\,f_j(s) {\\rm d}s \\cos(\\beta_i) - \\int_j s\\,g_j(s) {\\rm d}s \\sin(\\beta_i) \\right] \n", + "\\end{align}\n", + "\n", + "\\begin{align}\n", + " U_{\\text{t}}(x, y) & = U_\\infty \\sin(\\alpha - \\beta_i) \\\\\n", + " &+\\frac{1}{{2\\pi}}\\sum_{j=1}^N \\gamma_j \\left[ \\int_j f_j(s) {\\rm d}s (-\\sin(\\beta_i)) - \\int_j g_j(s) {\\rm d}s (\\cos(\\beta_i)) \\right] \\\\\n", + " &-\\frac{1}{{2\\pi}}\\sum_{j=1}^N \\frac{\\gamma_j}{l_j} \\left[ \\int_j s\\,f_j(s) {\\rm d}s (-\\sin(\\beta_i)) - \\int_j s\\,g_j(s) {\\rm d}s (\\cos(\\beta_i)) \\right] \\\\\n", + " &+ \\frac{1}{{2\\pi}}\\sum_{j=1}^N \\frac{\\gamma_{j+1}}{l_j} \\left[ \\int_j s\\,f_j(s) {\\rm d}s (-\\sin(\\beta_i)) - \\int_j s\\,g_j(s) {\\rm d}s (\\cos(\\beta_i)) \\right] \n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $f_j(s)$ and $g_j(s)$ are:\n", + "\n", + "\\begin{equation}\n", + " f_j(s) = \\frac{(y-\\eta_j(s))}{(x-\\xi_j(s))^2 + (y-\\eta_j(s))^2}\n", + "\\end{equation}\n", + "\n", + "\\begin{equation}\n", + " g_j(s) = \\frac{(x-\\xi_j(s))}{(x-\\xi_j(s))^2 + (y-\\eta_j(s))^2}\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we have all the expressions that we need to solve our problem, so let's start coding!!!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Discretization into panels" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#Importing the libraries and modules we need.\n", + "import numpy\n", + "from scipy import integrate, linalg\n", + "from matplotlib import pyplot\n", + "#The next line allows as to plot directly in the notebook.\n", + "%matplotlib inline" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We are going to work with the airfoil _NACA0012_, so we are going to load the same data that we were using in previous lessons. We will use the cosine method to get the `x_ends` and we are going to generate the `y_ends` using the [equation for a symmetrical 4-digit _NACA_ airfoil](http://en.wikipedia.org/wiki/NACA_airfoil) with the correction for zero-thickness trailing edge. We need this because now the strength of the singularities are going to be at the beginning and end of each panel.\n", + "\n", + "The data we are loading is just to plot the airfoil and to ensure that panels follow the shape of the airfoil. However, we are not going to use this data to build the panels, instead we will use the equation we mentioned before." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#Loading the geometry from a data file\n", + "\n", + "x, y = numpy.loadtxt('./resources/naca0012.dat', dtype=float, delimiter='\\t', unpack=True)\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `Panel` class is going to be similar to the one that we were using in the previous lessons. " + ] + }, + { + "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 = numpy.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 = numpy.arccos((yb-ya)/self.length)\n", + " elif xb-xa > 0.:\n", + " self.beta = numpy.pi + numpy.arccos(-(yb-ya)/self.length)\n", + " \n", + " # location of the panel\n", + " if self.beta <= numpy.pi:\n", + " self.loc = 'upper face' #upper face\n", + " else:\n", + " self.loc = 'lower face' #lower face\n", + " \n", + " self.vt = 0. # tangential velocity\n", + " self.cp = 0. # pressure coefficient" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def define_panels(N):\n", + " \"\"\"Discretizes the geometry into panels using 'cosine' method.\n", + " \n", + " Arguments\n", + " ---------\n", + " N: number of panels \n", + " \n", + " Returns\n", + " -------\n", + " panels: Numpy array of panels\n", + " \"\"\"\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 of the circle\n", + " \n", + " theta = numpy.linspace(0, 2*numpy.pi, N+1) #array of angles\n", + " x_circle = x_center + R*numpy.cos(theta) #x_coord of the circle\n", + " \n", + " x_ends = numpy.copy(x_circle) #x_ends of the geometry panels (idem circle)\n", + " y_ends = numpy.empty_like(x_ends) #initializing the y_ends array\n", + " y_t = numpy.empty_like(x_ends) #half thickness at a given value of x (centerline to surface)\n", + " \n", + " x_ends = numpy.append(x_ends, x_ends[0]) # extend array with the last element using numpy.append \n", + " \n", + " t=0.12 #the maximum thickness as a fraction of the chord \n", + " #(so 100 t gives the last two digits in the NACA 4-digit denomination).\n", + " c=1. #coord length\n", + " \n", + " y_t = 5.*t*c*(0.2969*numpy.sqrt(x_ends/c) + (-0.1260)*(x_ends/c)+\\\n", + " (-0.3516)*(x_ends/c)**2 + (0.2843)*(x_ends/c)**3 +\\\n", + " (-0.1036)*(x_ends/c)**4)\n", + " \n", + " # computes the y_end\n", + " \n", + " y_ends[0:N/2] = y_t[0:N/2]\n", + " y_ends[N/2:N+1] = -y_t[N/2:N+1]\n", + " \n", + " \n", + " panels = numpy.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": "code", + "collapsed": false, + "input": [ + "##Create the panels\n", + "N = 100 # number of panels\n", + "panels = define_panels(N)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#Plotting the geometry\n", + "\n", + "#First we'll set some parameters to have a nice plot\n", + "val_x, val_y = 0.1, 0.2 \n", + "\n", + "xp_min, xp_max = min(panel.xa for panel in panels) , max(panel.xa for panel in panels) \n", + "yp_min, yp_max = min(panel.ya for panel in panels) , max(panel.ya for panel in panels) \n", + "\n", + "#limits of the plot\n", + "xp_start, xp_end = xp_min-val_x*(xp_max-xp_min), xp_max+val_x*(xp_max-xp_min)\n", + "yp_start, yp_end = yp_min-val_y*(yp_max-yp_min), yp_max+val_y*(yp_max-yp_min)\n", + "\n", + "#Plot\n", + "size = 10\n", + "pyplot.figure(figsize=(size, (yp_end-yp_start)/(xp_end-xp_start)*size))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('x', fontsize=15)\n", + "pyplot.ylabel('y', fontsize=15)\n", + "pyplot.xlim(xp_start, xp_end)\n", + "pyplot.ylim(yp_start, yp_end)\n", + "\n", + "pyplot.plot(x, y, color='deeppink', linestyle='-', linewidth=2);\n", + "\n", + "pyplot.plot(numpy.append([panel.xa for panel in panels], panels[0].xa), \n", + " numpy.append([panel.ya for panel in panels], panels[0].ya), \n", + " linestyle='-', linewidth=1, marker='o', markersize=6, color='#483D8B');" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Free stream conditions\n", + "\n", + "The airfoil is immersed in a free-stream ($U_\\infty$,$\\alpha$) where $U_\\infty$ and $\\alpha$ are the velocity magnitude and angle of attack, respectively." + ] + }, + { + "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*numpy.pi/180 # degrees to radians" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 7 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# defines and creates the object freestream\n", + "U_inf = 1.0 # freestream speed\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": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Flow-tangency boundary condition\n", + "\n", + "As we already know, to solve our problem, we need to require $U_{\\text{n}}(x, y)=0$ at the center (collocation point) of each panel. However we have to be careful, because at $(x_{c_i}, y_{c_i})$ all our integrals have a singularity. To skip that singularity, for $i=j$ we have to solve them analytically in the local coordinates of the panel.\n", + "\n", + "For the flow-tangency boundary condition, the integrals (in local coordinates) that we have to solve analytically are:\n", + "\n", + "\\begin{equation}\n", + " I_1=\\frac{1}{2\\pi} \\int^l_0 \\frac{(x^*_{i}-s)}{(x^*_{i}-s)^2 + (y^*_{i})^2} {\\rm d}s\n", + "\\end{equation}\n", + "\n", + "\\begin{equation}\n", + " I_2=\\frac{1}{2\\pi l} \\int^l_0 \\frac{s\\,(x^*_{i}-s)}{(x^*_{i}-s)^2 + (y^*_{i})^2} {\\rm d}s\n", + "\\end{equation}\n", + "\n", + "After we integrate, using that at the center point $r_{i,j}=r_{i,j+1}$ and $\\theta_{i,j+1}-\\theta_{i,j}=\\pi$ we get that:\n", + "\n", + "\n", + "\\begin{equation}\n", + " I_1=0 \\qquad ; \\qquad I_2=-\\frac{1}{2\\pi}\n", + "\\end{equation}\n", + "\n", + "Tip:\n", + "\\begin{equation}\n", + " \\tan^{-1} \\left(\\frac{s-x}{y}\\right)=\\tan^{-1} \\left(\\frac{y}{x-s}\\right) \\;-\\; \\frac{\\pi}{2}\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For all the integrals that appear in our equations, we use the function `integrate.quad()` from SciPy. Following the same idea we use in the previous lessons, we define two integrate functions to compute the terms of the form:\n", + "\n", + "`integral`:\n", + "\n", + "\\begin{equation}\n", + " \\int_j f_j(s) {\\rm d}s\\;a - \\int_j g_j(s) {\\rm d}s\\;b\n", + "\\end{equation}\n", + "\n", + "`integral_s`:\n", + "\n", + "\\begin{equation}\n", + " \\int_j s\\,f_j(s) {\\rm d}s\\;a - \\int_j s\\,g_j(s) {\\rm d}s\\;b\n", + "\\end{equation}\n", + "\n", + "where $a$ and $b$ can be $n_x=\\cos (\\beta_i)$ , $n_y=\\sin (\\beta_i)$ , $t_x=-\\sin (\\beta_i)$ and $t_y=\\cos (\\beta_i)$ depending on the case. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def integral(x, y, panel, dxdk, dydk):\n", + " \"\"\"\n", + " Arguments\n", + " ---------\n", + " x, y: Cartesian coordinates of the point.\n", + " panel: panel which contribution is evaluated.\n", + " dxdk: derivative of x in the z-direction.\n", + " dydk: 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 - numpy.sin(panel.beta)*s))*dxdk\n", + " +(y - (panel.ya + numpy.cos(panel.beta)*s))*dydk)\n", + " / ((x - (panel.xa - numpy.sin(panel.beta)*s))**2\n", + " +(y - (panel.ya + numpy.cos(panel.beta)*s))**2) )\n", + " return integrate.quad(lambda s:func(s), 0., panel.length)[0]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 9 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def integral_s(x, y, panel, dxdk, dydk):\n", + " \"\"\"\n", + " Arguments\n", + " ---------\n", + " x, y: Cartesian coordinates of the point.\n", + " panel: panel which contribution is evaluated.\n", + " dxdk: derivative of x in the z-direction.\n", + " dydk: 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 ( s*((x - (panel.xa - numpy.sin(panel.beta)*s))*dxdk\n", + " +(y - (panel.ya + numpy.cos(panel.beta)*s))*dydk)\n", + " / ((x - (panel.xa - numpy.sin(panel.beta)*s))**2\n", + " +(y - (panel.ya + numpy.cos(panel.beta)*s))**2) )\n", + " return integrate.quad(lambda s:func(s), 0., panel.length)[0]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 10 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use these functions to calculate the coefficients of the matrices corresponding to each term in the equation for $U_{\\text{n}}(x, y)$ to finally solve the linear system $$[A][\\gamma] = [b]$$\n", + "\n", + "We will call $A_1$ the term related to the first integral,\n", + "\n", + "\\begin{equation}\n", + " \\int_j f_j(s) {\\rm d}s\\;\\cos(\\beta_i) - \\int_j g_j(s) {\\rm d}s\\;\\sin(\\beta_i)\n", + "\\end{equation}\n", + "\n", + "$A_2$ the term related to the second integral,\n", + "\n", + "\\begin{equation}\n", + " \\int_j s\\,f_j(s) {\\rm d}s\\;\\cos(\\beta_i) - \\int_j s\\,g_j(s) {\\rm d}s\\;\\sin(\\beta_i)\n", + "\\end{equation}\n", + "\n", + "and $A_3=A_2$ the term related to the third integral. We want to keep the three terms to avoid confusions. $A_2$ corresponds to $\\gamma_j$ and $A_3$ corresponds to $\\gamma_{j+1}$.\n", + "\n", + "Then, using the information from the analytical solutions when $i=j$ and our integral functions, we can build three different functions that return these coefficients." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def coeff_1_normal(panels):\n", + " \"\"\"\n", + " Build matrix coefficients associated with the first\n", + " integral in U_n ---> (A_1)\n", + " \"\"\"\n", + " N = len(panels)\n", + " A1 = numpy.empty((N, N), dtype=float) \n", + " numpy.fill_diagonal(A1, 0.) #value of I_1\n", + "\n", + " for i, p_i in enumerate(panels):\n", + " for j, p_j in enumerate(panels): \n", + " if i != j:\n", + " A1[i,j] = 0.5/numpy.pi*(integral(p_i.xc, p_i.yc, p_j, -numpy.sin(p_i.beta),numpy.cos(p_i.beta)))\n", + " \n", + " return A1\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 11 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def coeff_2_normal(panels):\n", + " \"\"\"\n", + " Build matrix coefficients associated with the second\n", + " integral in U_n ---> (A_2)\n", + " \"\"\"\n", + " N = len(panels)\n", + " A2 = numpy.empty((N, N), dtype=float) \n", + " numpy.fill_diagonal(A2, -0.5/numpy.pi) #value of I_2\n", + " for i, p_i in enumerate(panels):\n", + " for j, p_j in enumerate(panels): \n", + " if i != j:\n", + " A2[i,j] = (0.5/numpy.pi)*(1./p_j.length)*(integral_s(p_i.xc, p_i.yc, p_j, -numpy.sin(p_i.beta),numpy.cos(p_i.beta)))\n", + " \n", + " return A2\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 12 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def coeff_3_normal(panels, A2):\n", + " \"\"\"\n", + " Build matrix coefficients associated with the third\n", + " integral in U_n ---> (A_3)\n", + " \"\"\"\n", + " N = len(panels)\n", + " A3 = A2\n", + " \n", + " return A3" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 13 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#Let's call this functions to get A1,A2,A3.\n", + "\n", + "A1 = coeff_1_normal(panels)\n", + "A2 = coeff_2_normal(panels)\n", + "A3 = coeff_3_normal(panels,A2)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 14 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We got our coefficients, but how are these guys related with the matrix $A$ that we need to build in order to solve our system?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##How to build the A matrix\n", + "\n", + "This is the moment when you should grab a piece of paper and write some terms of the $U_n$ for a panel $i$. After writing a couple of $j$-terms, you should notice that. (tip: write the terms counting from zero, so then you match this with the code)\n", + "\n", + "* For $j=0$ you only have contribution from the first and second integral ($A_1$ and $A_2$), which are the coefficients related with $\\gamma_j$. \n", + "\n", + "\n", + "* For $j=N$ (last panel) you only have contribution from the third integral ($A_3$), which is the coefficient related with $\\gamma_{j+1}$. \n", + "\n", + "\n", + "* For $0<$ $j$ $<$ $N$ (all the panels in the middle) we have contribution from the three integrals.\n", + "\n", + "Our matrix will have $N+1$ columns. We will need an extra row \n", + "but we will talk about that later. If you are impatient, remember _the Kutta condition_.\n", + "\n", + "The final matrix $A$ will have this contributions:\n", + "\n", + "
\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#In code, except for the kutta condition (in cell after)...\n", + "\n", + "def A_normal(panels,A1,A2,A3):\n", + " \"\"\"Builds the normal matrix\n", + " \n", + " Arguments\n", + " ---------\n", + " panels: panels of the geometry\n", + " A1: term related to the first integral in U_n\n", + " A2: term related to the second integral in U_n\n", + " A3: term related to the third integral in U_n\n", + " \n", + " Returns\n", + " -------\n", + " A_n: Nx(N+1) matrix, where N is number of panels. \n", + " \n", + " \"\"\"\n", + " N = len(panels)\n", + " A_n = numpy.zeros((N, N+1), dtype=float) \n", + " \n", + " for i in range(N):\n", + " \n", + " A_n[i,0] = A1[i,0] - A2[i,0]\n", + " A_n[i,-1] = A3[i,-1]\n", + " \n", + " for j in range(N-1):\n", + " \n", + " A_n[i,j+1] = A1[i,j+1] - A2[i,j+1] + A3[i,j]\n", + " \n", + " return A_n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 15 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Kutta condition\n", + "\n", + "In this case the _kutta condition_ is easy, we just need to ask $\\gamma_0 + \\gamma_{N}=0$ then:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#Kutta array\n", + "\n", + "def kutta_array(N):\n", + " \"\"\"Builds the kutta array.\n", + " \n", + " Arguments\n", + " ---------\n", + " N: number of panels\n", + " \n", + " Returns\n", + " -------\n", + " k_a -- 1D array ((N+1)x1, N is the number of panels). kutta array\n", + " \"\"\"\n", + " k_a = numpy.zeros(N+1,dtype=float)\n", + "\n", + " k_a[0] = 1.\n", + " k_a[-1] = 1.\n", + " \n", + " return k_a" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 16 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Building the A matrix and the RHS" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def build_matrix(A_n, k_a, N):\n", + " \"\"\"Builds the A matrix to solve the linear system.\n", + " \n", + " Arguments\n", + " ---------\n", + " panels: array of panels.\n", + " A_n: Nx(N+1) matrix (N is the number of panels).\n", + " k_a -- 1D array ((N+1)x1, N is the number of panels).\n", + " Returns\n", + " -------\n", + " A_solve: (N+1)x(N+1) matrix (N is the number of panels).\n", + " \"\"\"\n", + "\n", + " #Matrix A_solve (N+1)x(N+1)\n", + "\n", + " A_solve = numpy.empty((N+1, N+1), dtype=float)\n", + " \n", + " A_solve[0:N,:] = A_n[:,:]\n", + " A_solve[-1,:] = k_a[:]\n", + "\n", + " return A_solve" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 17 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "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", + " N = len(panels)\n", + " b = numpy.empty(N+1,dtype=float)\n", + " \n", + " for i, panel in enumerate(panels):\n", + " b[i] = -freestream.U_inf * numpy.cos(freestream.alpha - panel.beta)\n", + " b[-1] = 0.\n", + " \n", + " return b" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 18 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's call all the functions we need to solve the system" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "N=len(panels)\n", + "#To build A\n", + "A_n =A_normal(panels,A1,A2,A3)\n", + "k_a = kutta_array(N)\n", + "\n", + "#Putting all together to get A\n", + "A = build_matrix(A_n, k_a, N)\n", + "\n", + "#RHS\n", + "b = build_rhs(panels, freestream)\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 19 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To solve the linear system we use `linalg.solve` from SciPy. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# solves the linear system\n", + "gammas = linalg.solve(A, b)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 20 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we have the solution of our system, we can get the surface pressure coefficient by calculating the tangential velocity. So let's keep coding (and doing a little bit more of math)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Surface pressure coefficient" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The pressure coefficient at the center of the $i$-th panel is:\n", + "\n", + "$$C_{p_i} = 1 - \\left(\\frac{U_{t_i}}{U_\\infty}\\right)^2$$\n", + "\n", + "We have to compute the tangential velocity. However, we can not escape from the math. To calculate $U_t$, we have to do some integrals, do you remember? Guess what, yes! we have the singularities issue again. In this case, the integrals we have to solve analytically are:\n", + "\n", + "\\begin{equation}\n", + " I_3=\\frac{1}{2\\pi} \\int^l_0 \\frac{y^*_{i}}{(x^*_{i}-s)^2 + (y^*_{i})^2} {\\rm d}s\n", + "\\end{equation}\n", + "\n", + "\\begin{equation}\n", + " I_4=\\frac{1}{2\\pi l} \\int^l_0 \\frac{s\\,y^*_{i}}{(x^*_{i}-s)^2 + (y^*_{i})^2} {\\rm d}s\n", + "\\end{equation}\n", + "\n", + "After we integrate, using that at the center point $r_{i,j}=r_{i,j+1}$ and $\\theta_{i,j+1}-\\theta_{i,j}=\\pi$ we get that:\n", + "\n", + "\n", + "\\begin{equation}\n", + " I_3=-\\frac{1}{2} \\qquad ; \\qquad I_4=-\\frac{1}{4}\n", + "\\end{equation}\n", + "\n", + "Tip:\n", + "\\begin{equation}\n", + " \\tan^{-1} \\left(\\frac{s-x}{y}\\right)=\\tan^{-1} \\left(\\frac{y}{x-s}\\right) \\;-\\; \\frac{\\pi}{2}\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Following the same idea that we use to build the **A** matrix, we define:\n", + "\n", + "$B_1$, the term related to the first integral:\n", + "\n", + "\\begin{equation}\n", + " \\int_j f_j(s) {\\rm d}s\\;(-\\sin(\\beta_i)) + \\int_j g_j(s) {\\rm d}s\\;\\cos(\\beta_i)\n", + "\\end{equation}\n", + "\n", + "$B_2$ the term related to the second integral:\n", + "\n", + "\\begin{equation}\n", + " \\int_j s\\,f_j(s) {\\rm d}s\\;(-\\sin(\\beta_i)) + \\int_j s\\,g_j(s) {\\rm d}s\\;\\cos(\\beta_i)\n", + "\\end{equation}\n", + "\n", + "and $B_3=B_2$, the term related to the third integral. We want to keep the three terms to avoid confusions. $B_2$ correspond to $\\gamma_j$ and $B_3$ correspond to $\\gamma_{j+1}$.\n", + "\n", + "Then, using the information from the analytical solutions when $i=j$ and our integral functions, we can build three different functions that return these coefficients." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def coeff_1_tangential(panels):\n", + " \n", + " \"\"\"\n", + " Build matrix coefficients associated with the first\n", + " integral in U_t ---> (B_1)\n", + " \"\"\"\n", + "\n", + " N = len(panels)\n", + " B1 = numpy.empty((N, N), dtype=float) \n", + " numpy.fill_diagonal(B1, -0.5)\n", + "\n", + " for i, p_i in enumerate(panels):\n", + " for j, p_j in enumerate(panels): \n", + " if i != j:\n", + " B1[i,j] = 0.5/numpy.pi*(integral(p_i.xc, p_i.yc, p_j,-numpy.cos(p_i.beta), -numpy.sin(p_i.beta)))\n", + " \n", + " return B1\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 21 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def coeff_2_tangential(panels):\n", + " \"\"\"\n", + " Build matrix coefficients associated with the first\n", + " integral in U_t ---> (B_2)\n", + " \"\"\"\n", + " N = len(panels)\n", + " B2 = numpy.empty((N, N), dtype=float) \n", + " numpy.fill_diagonal(B2, -0.25)\n", + "\n", + " for i, p_i in enumerate(panels):\n", + " for j, p_j in enumerate(panels): \n", + " if i != j:\n", + " B2[i,j] = 0.5/numpy.pi*(1./p_j.length)*(integral_s(p_i.xc, p_i.yc, p_j,-numpy.cos(p_i.beta), -numpy.sin(p_i.beta)))\n", + " \n", + " return B2" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 22 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def coeff_3_tangential(panels, B2):\n", + " \"\"\"\n", + " Build matrix coefficients associated with the first\n", + " integral in U_t ---> (B_3)\n", + " \"\"\"\n", + " N = len(panels)\n", + " B3 = B2\n", + " \n", + " return B3" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 23 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#Let's call this functions to get B1,B2,B3.\n", + "B1 = coeff_1_tangential(panels)\n", + "B2 = coeff_2_tangential(panels)\n", + "B3 = coeff_3_tangential(panels,B2)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 24 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the same logic we used to build the **A** matrix, excepting that now we don't need the kutta condition, we can get the **A_tangential**." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def A_tangential(panels,B1,B2,B3):\n", + " \"\"\"Builds the tangential matrix\n", + " \n", + " Arguments\n", + " ---------\n", + " panels: panels of the geometry\n", + " B1: term related to the first integral in U_t\n", + " B2: term related to the second integral in U_t\n", + " B3: term related to the third integral in U_t\n", + " \n", + " Returns\n", + " -------\n", + " A_t: Nx(N+1) matrix, where N is number of panels. \n", + " \"\"\"\n", + " N = len(panels)\n", + " A_t = numpy.zeros((N, N+1), dtype=float) \n", + " \n", + " for i in range(N):\n", + " \n", + " A_t[i,0] = B1[i,0] - B2[i,0]\n", + " A_t[i,-1] = B3[i,-1]\n", + " \n", + " for j in range(N-1):\n", + " \n", + " A_t[i,j+1] = B1[i,j+1] - B2[i,j+1] + B3[i,j]\n", + " \n", + " return A_t" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 25 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "A_t = A_tangential(panels,B1,B2,B3)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 26 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#The vector associated with the free-stream for U_t\n", + "\n", + "b_t = freestream.U_inf * numpy.sin([freestream.alpha - panel.beta for panel in panels])\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 27 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###The tangential velocity:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + " U_t = numpy.dot(A_t, gammas) + b_t" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 28 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for i, panel in enumerate(panels):\n", + " panel.vt = U_t[i]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 29 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###Pressure coefficient:" + ] + }, + { + "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": 30 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "get_pressure_coefficient(panels, freestream)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 31 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From [Lesson 10](http://nbviewer.ipython.org/github/barbagroup/AeroPython/blob/master/lessons/10_Lesson10_sourcePanelMethod.ipynb) we know the exact solution for zero angle of attack, so let's copy that solution, to compare with our result." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "voverVsquared=numpy.array([0, 0.64, 1.01, 1.241, 1.378, 1.402, 1.411, 1.411, 1.399, 1.378, 1.35, 1.288, 1.228, 1.166, 1.109, 1.044, 0.956, 0.906, 0])\n", + "print voverVsquared" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[ 0. 0.64 1.01 1.241 1.378 1.402 1.411 1.411 1.399 1.378\n", + " 1.35 1.288 1.228 1.166 1.109 1.044 0.956 0.906 0. ]\n" + ] + } + ], + "prompt_number": 32 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "xtheo=numpy.array([0, 0.5, 1.25, 2.5, 5.0, 7.5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 95, 100])\n", + "xtheo = xtheo/100\n", + "print xtheo" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[ 0. 0.005 0.0125 0.025 0.05 0.075 0.1 0.15 0.2 0.25\n", + " 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 1. ]\n" + ] + } + ], + "prompt_number": 33 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# plots the surface pressure coefficient\n", + "\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", + "pyplot.figure(figsize=(10, 6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('x', fontsize=16)\n", + "pyplot.ylabel('$C_p$', fontsize=16)\n", + "pyplot.plot([panel.xc for panel in panels if panel.loc == 'upper face'], \n", + " [panel.cp for panel in panels if panel.loc == 'upper face'], \n", + " color='r', linewidth=1, marker='x', markersize=8)\n", + "pyplot.plot([panel.xc for panel in panels if panel.loc == 'lower face'], \n", + " [panel.cp for panel in panels if panel.loc == 'lower face'], \n", + " color='b', linewidth=0, marker='d', markersize=6)\n", + "pyplot.plot(xtheo, 1-voverVsquared, color='k', linestyle='--',linewidth=2)\n", + "pyplot.legend(['upper face', 'lower face', 'analytical'], loc='best', prop={'size':14})\n", + "pyplot.xlim(x_start, x_end)\n", + "pyplot.ylim(-0.65, 1.)\n", + "pyplot.gca().invert_yaxis()\n", + "pyplot.title('Number of panels : %d' % N)\n", + "#pyplot.savefig('CP_0.pdf'); add this line to save fig;" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nffr0MZ6zbds22rVrx9ChQ6lRowb9+/cnODiYChUqmFwnI1Ke1717d9577z18fX2pV68ee/bsYcaM\nGSbnde3alZ9//pnt27fTsGFDPD098ff3x8FBS6lWrlzJoEGDeP/996lZsyY9evTgwIEDuLu7P1VM\nM9T+bL9i7qeyOiYvhBBC5BR7XXarbdu21KlTh88///yJ51SpUoVRo0YxduxYC7bM+mTZLSGEEELk\nWkopu0xOrUmSOBshdSuWJzG3PIm55UnMLS+vxtzc5L8ia+TuVCGEEELkuL1796Z7zqVLlyzQEvuR\nF1NiqYkTQgiRa9lrTZx4MqmJE0IIIYTIQySJsxF5tYbCmiTmlicxtzyJueVJzEV2kSROCCGEEMIG\nSU2cEEIIkYtITVzeIzVxQgghhBB5iCRxNkJqKCxPYm55EnPLk5hbnj3G3MvLix49eli7GRly//59\nXn75ZVxdXXFwcCAsLMzaTco0mSdOCCGEEFliSxP5rlixgv379xMYGEipUqUoWbKktZuUadITZyM8\nPT2t3YQ8R2JueRJzy5OYW15WYx4XF0f//iOIi4vLlvZkx/Vy45Jajx49Mrs/JCSEmjVr8txzz1G6\ndGnjwvW2yHZbLoQQQuRBQ4fOxs+vL8OGfZwrrwdaYujr60vZsmVxdnamefPmBAYGGo83a9aMuXPn\nGrffeOMNHBwcuHnzJqANeTo5OfHHH38AWpI4b948qlWrRqFChahbty7ff/+98fmhoaE4ODiwbt06\n2rVrR6FChVi2bFmqdnl6evL555+zb98+HBwcaNeuHQBr1qyhSZMmFC1alDJlytCvXz+uXbtm8txz\n587Rs2dPXF1dKVKkCC1atODUqVPG4ytXrqRWrVo4OztTvXp1Fi5cmOsSW3ugbNHevXut3YQ8R2Ju\neRJzy5OYW156MU/r99Q332xUev3PCpTS6zeqb77ZmKW2ZNf1Bg4cqLp3727cHj16tCpXrpzatm2b\nOnfunBo6dKhycXFR169fV0opNWHCBNWlSxfj+RUrVlSlS5dW69atU0optXv3blW4cGEVHx+vlFJq\n4sSJqkaNGmrnzp0qNDRUrV27VhUuXFht3bpVKaXUpUuXlE6nU+7u7srPz0+FhoaqK1eupGpneHi4\n8vb2Vi1btlQ3b95UERERSimlVqxYobZv364uXbqkDh8+rNq2batat25tfN7Vq1dViRIl1EsvvaSO\n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\nRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERExNf+D05IkATutdAN\nAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 34 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Nice!! Our solution matches with the theoretical one. However, the purpouse of using vortices as our singularities is to get some lift and see how our model behaves. Let's calculate solve the problem for an angle of attack $\\alpha=10$ degrees. We pick $10\u00b0$ because we have some experimental data for the coefficient of pressure of the upper face, to compare. See [Gregory & O'Reilly pressure data.](http://turbmodels.larc.nasa.gov/naca0012_val.html)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Let's solve for $\\alpha=10\u00b0$" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# defines and creates the object freestream\n", + "U_inf = 1.0 # freestream speed\n", + "alpha = 10.0 # angle of attack (in degrees)\n", + "freestream_10 = Freestream(U_inf, alpha) # instantiation of the object freestream" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 35 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#We need to recalculate the RHS\n", + "\n", + "b_10 = build_rhs(panels, freestream_10)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 36 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# solves the linear system\n", + "gammas_10 = linalg.solve(A, b_10)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 37 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#The vector associated with the free-stream for U_t\n", + "\n", + "b_t_10 = freestream.U_inf * numpy.sin([freestream_10.alpha - panel.beta for panel in panels])\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 38 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#Getting the tangential velocity\n", + "U_t_10 = numpy.dot(A_t, gammas_10) + b_t_10" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 39 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for i, panel in enumerate(panels):\n", + " panel.vt = U_t_10[i]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 40 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "get_pressure_coefficient(panels, freestream_10)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 41 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we mentioned before, we have some experimental data for the upper face, so let's import that data to compare with our results. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "x_exp , Cp_exp = numpy.loadtxt('./resources/CP_Gregory_expdata_alpha_10.dat', dtype=float, delimiter=' ', unpack=True)\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 42 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# plots the surface pressure coefficient\n", + "\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", + "pyplot.figure(figsize=(10, 6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('x', fontsize=16)\n", + "pyplot.ylabel('$C_p$', fontsize=16)\n", + "pyplot.plot([panel.xc for panel in panels if panel.loc == 'upper face'], \n", + " [panel.cp for panel in panels if panel.loc == 'upper face'], \n", + " color='r', linewidth=1, marker='d', markersize=6)\n", + "pyplot.plot([panel.xc for panel in panels if panel.loc == 'lower face'], \n", + " [panel.cp for panel in panels if panel.loc == 'lower face'], \n", + " color='b', linewidth=1, marker='d', markersize=6)\n", + "\n", + "pyplot.plot(x_exp,Cp_exp,color='g', linewidth=0, marker='D', markersize=8, markeredgecolor='g',\n", + "markerfacecolor='None', markeredgewidth=1.5)\n", + "\n", + "pyplot.legend(['upper face', 'lower face', 'Gregory exp_data (upper face)'], loc='best', prop={'size':14})\n", + "pyplot.xlim(x_start, x_end)\n", + "pyplot.ylim(y_start, y_end)\n", + "pyplot.gca().invert_yaxis()\n", + "pyplot.title('Angle of attack 10 deg, Number of panels : %d' % N, fontsize=20)\n", + "#pyplot.savefig('CP_10.pdf'); add this line to save fig;" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n9pm1trFTp04qIyOj0BhaTJo0SdWsWVNFRkaqxx57TI0dO9au5uz7779XXbp0UdWqVVPR0dGqffv2\nauPGjdb5DRo0UCaTyfrXsGFDpZRS6enpqmfPnqpWrVqqUqVKqmXLlurzzz8vtDw1a9YsUOvToEED\n62e26NixoxoyZIjdMsnJyeqRRx5RkZGRqlatWgXeYzKZ1KxZs9S9996rKlasqBo0aKAWL15st8zx\n48fVww8/rKpUqaKqVKmi7rvvPnXw4EHrfGff/8WLF+3WcfjwYbuYmEwmtXDhQpWbm6sGDhyoGjZs\nqCpUqKCaNGmiJk+eXOA3smDBAnXTTTepiIgIVbNmTdWvXz/rPHf7jMX+/fuVyWRSJ0+edBpjd7kJ\nbmrOgonLAPi1CxdUXoXy1gNs897l1ZDPh0iCJkQAsBx3fJl0FTVB+/XXX1VISIiaNGmSR5/RZDKp\nGjVqqLlz56rDhw+rw4cPq5UrV6ro6Gi1YMEClZGRodasWaOaNm2qRowYYX1ft27dVHx8vNq0aZPa\nuXOnuuuuu1RUVJQaN26cUkqp3NxcFR8fr9q1a6e2bdumtm7dqtq0aaNuvfVW6zrGjh2rKlWqpLp1\n66Z27NihfvrpJ3X+/HlVpUoVu6Ti7NmzqmLFimr58uUuY9SuXTt1//33qy1btqhDhw6p0aNHq+jo\naHXq1CmllFI//PCDKl++vPrkk09UXl6euuuuu9Tdd99tXcf8+fNVWFiYuu2229SGDRvUjh071J13\n3qni4+M9iuOSJUtUeHi4euedd9TBgwfVa6+9pqKioqwJllJKffPNN2rx4sVq3759av/+/WrIkCGq\nSpUq6rffflNKKXXmzBllMpnU3Llz1enTp9Wvv/6qlFJq165d6u2331a7d+9Whw4dUq+99poKDw9X\n+/btc1mevXv3KpPJpA4fPmw3PTY2Vk2dOtVuWkJCgho6dKj1dYMGDVR0dLQaP368OnjwoHr77bdV\neHi4+vTTT63LmEwmVbVqVbvPGxISYk1uLl68qJo0aaIGDBigfvzxR7V//371xBNPqAYNGlgvGpx9\n/1evXrUrW25urvr5559VpUqV1IwZM9Tp06fV5cuXVU5OjhozZozaunWrOnLkiPr4449V5cqV1dy5\nc63vfeutt1T58uXVtGnT1MGDB9WOHTvU66+/rpTybJ+xLFelShX14YcfOo2zu9wESc78V96vv6rE\nXhH6wPpRf5XXoL5X+pMIIUofAZicbdq0SZlMJvXf//7Xbvq1116rIiMjVWRkpPrnP/9pnW4ymdSw\nYcPslu3QoYN69dVX7aalpqaqyMhIpZTuy2QymdTmzZut848dO6ZCQ0OtydlXX32lQkND1ZEjR6zL\nZGRkqJCQEPX1118rpfTJOSwsTP3yyy922xoyZIjq3r279fWbb76pateurXJzc51+5q+//lpFRkaq\ny5cv202Pj49XkydPtr6ePn26uuaaa1RSUpKqVq2aXW3I/PnzlclkUhs2bLBOO3LkiAoNDVWrV692\nul1bbdu2VYMHD7abdvfdd9slZ47y8vJU7dq17WqcPO1z1qZNmwLfka3ly5crk8lUIGaeJmddu3a1\nW+aJJ55Q7du3tyuns8/76KOPKqWUmjt3rmrSpInd/KtXr6qqVataE29X378zkZGRauHChW6XGTly\npF3Cfe2116oXXnjB6bKe7jNK6X5nL7/8stP1uMtNkD5n/kkpRVLaSFIqZ+v+JAkTMf09GvLyStSf\nRBSuLPR/8jfBHHOTyeTRb1a56UNWmuvzxPr167l69SqDBw8mOzvbbt6tt95q93rbtm1s2bKFiRMn\nWqfl5eWRlZXF6dOn2bdvHyEhIXbvq1u3LnXq1LG+3rt3L3Xq1KF+/frWaQ0bNqROnTrs2bPHesdd\n3bp1qV69ut32Bw0aRMuWLTl58iR16tRh3rx59OvXj5AQ5wMQbNu2jUuXLhVYT3Z2NhkZGdbXiYmJ\nLFu2jOnTp/PJJ59Qu3Ztu+VDQkK4/fbbra/r169PnTp12Lt3L3fddZfTbVvs27ePwQ4DjLdp04b0\n9HTr619++YXRo0eTlpbG6dOnyc3N5fLlyxw7dsztui9evMi4ceP44osvOHXqFDk5OWRlZXHLLbe4\nfM+ff/5JRESEy5i5YzKZaNu2bYHP8umnn9pNc7bMl19+Cejv5PDhw0RFRdktc/nyZbvvxNn376m3\n3nqLd999l6NHj3L58mVycnKIjY0FdKxPnjzp8nvzdJ8BiI6O5ty5c8UqoyuSnPmI9aC6ey59jlTI\nP6hWqwanTmGqW1cSNCECSGEJVVETKW+vzyIuLg6TycTevXvp1auXdXqDBg0AqFixYoH3VKpUye61\nUork5GSnnaCrVatWaBkKY/s5HLcN0Lx5c1q2bMn8+fPp1asX27Zt44MPPnC5vry8PGrWrMm6desK\n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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 43 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Great!! Our results seem to match the experimental data. What we can do is calculate the lift coefficient and compare it with the experimental value. Morover, we can see how the error behaves for different number of panels. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's define a function to calculate the lift for different angles of attack:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def get_lift(freestream, Np):\n", + " \"\"\"\n", + " Get the lift coefficient for a number of panels Np\n", + " \"\"\"\n", + " #define panels\n", + " panels = define_panels(Np)\n", + " \n", + " #coefficients to build A\n", + " A1 = coeff_1_normal(panels)\n", + " A2 = coeff_2_normal(panels)\n", + " A3 = coeff_3_normal(panels,A2)\n", + " \n", + " #To build A\n", + " A_n =A_normal(panels,A1,A2,A3)\n", + " k_a = kutta_array(Np)\n", + "\n", + " #Putting all together to get A\n", + " A = build_matrix(A_n, k_a, Np)\n", + "\n", + " #RHS\n", + " b = build_rhs(panels, freestream)\n", + "\n", + " # solves the linear system\n", + " gammas = linalg.solve(A, b)\n", + " \n", + " #Coefficients to get A_tangential.\n", + " B1 = coeff_1_tangential(panels)\n", + " B2 = coeff_2_tangential(panels)\n", + " B3 = coeff_3_tangential(panels,B2)\n", + " \n", + " #A_tangential\n", + " A_t = A_tangential(panels,B1,B2,B3)\n", + " \n", + " #The vector associated with the free-stream for U_t\n", + " b_t = freestream.U_inf * numpy.sin([freestream.alpha - panel.beta for panel in panels])\n", + "\n", + " #Get tangential velocity\n", + " U_t = numpy.dot(A_t, gammas) + b_t\n", + " \n", + " for i, panel in enumerate(panels):\n", + " panel.vt = U_t[i]\n", + " \n", + " #Get Cp\n", + " get_pressure_coefficient(panels, freestream)\n", + " \n", + " L = 0.\n", + " for panel in panels:\n", + " L -= panel.cp*panel.length*numpy.sin(panel.beta)\n", + " \n", + " return L" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 44 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can calculate the value of the lift coefficients for different number of panels and compare it with the value of the experimental data.\n", + "\n", + "The value of the experimental lift for $\\alpha = 10\u00b0$ was obtained from reference [4](https://confluence.cornell.edu/display/SIMULATION/Flow+over+an+Airfoil+-+Exercises),\n", + "\n", + "$$ L_{exp} = 1.2219 $$\n", + "\n", + "With this value as a reference, we can plot de relative error as a function of the number of panels $N_p$ and see how our model behaves." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "L_np=[]\n", + "Np_list=[20,40,60,80,100,120,140,160,180,200, 400]\n", + "for i in Np_list:\n", + " L_np.append(get_lift(freestream_10, i))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 45 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "L_exp = 1.2219\n", + "\n", + "#Relative error\n", + "\n", + "rel_err = []\n", + "for i in L_np:\n", + " rel_err.append(numpy.abs(L_exp - i)/L_exp)\n", + "\n", + "#Percentage error\n", + "\n", + "per_err = []\n", + "for i in rel_err:\n", + " per_err.append(100.*i)\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 46 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#Plotting\n", + "pyplot.figure(figsize=(10, 6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('Np', fontsize=16)\n", + "pyplot.ylabel('error $\\%$', fontsize=16)\n", + "pyplot.xlim(10, 210)\n", + "pyplot.ylim(3, 8)\n", + "pyplot.xticks(numpy.linspace(10, 210, 21)) \n", + "pyplot.yticks(numpy.linspace(2, 8, 17))\n", + "\n", + "pyplot.title('Percentage error vs number of panels', fontsize=20)\n", + "\n", + "pyplot.plot(Np_list, per_err,color='r', linewidth=0, marker='o', markersize=6);\n", + "#pyplot.savefig('error.pdf'); add this line to save fig;" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 47 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#For Np=400 the precentage error is:\n", + "L_400_err = per_err[-1]\n", + "\n", + "print ('L_400_err = %.4f' %L_400_err)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "L_400_err = 3.3855\n" + ] + } + ], + "prompt_number": 48 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we expected, when the number of panels increases, the percentage error decreases. For $Np >60$ the percentage error is less than $5\\%$ which may be an acceptable value. As $Np$ keeps increasing, the error continues decreasing but slowly. For $Np=400$ the error is around $3.4\\%$, which is close to the value for $Np=200$ ($\\approx 3.5\\%$). Then, it is not worthwhile to solve for all these panels if we can get a similar result with smaller $Np$." + ] + }, + { + "cell_type": "heading", + "level": 5, + "metadata": {}, + "source": [ + "Challange task" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Try to do the same analysis we did in the last section, for the vortex-source panel method from [Lesson 11](http://nbviewer.ipython.org/github/barbagroup/AeroPython/blob/master/lessons/11_Lesson11_vortexSourcePanelMethod.ipynb) and compare the results." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##References" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Katz, J. & Plotkin, A. _Low speed aerodynamics. 1947-Second Edition \n", + "2. http://en.wikipedia.org/wiki/NACA_airfoil\n", + "3. http://turbmodels.larc.nasa.gov/naca0012_val.html\n", + "4. https://confluence.cornell.edu/display/SIMULATION/Flow+over+an+Airfoil+-+Exercises\n" + ] + }, + { + "cell_type": "heading", + "level": 6, + "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": 49, + "text": [ + "" + ] + } + ], + "prompt_number": 49 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/clementi/Linear_vortex_Panel_Method.ipynb b/clementi/Linear_vortex_Panel_Method.ipynb new file mode 100644 index 0000000..1f10b63 --- /dev/null +++ b/clementi/Linear_vortex_Panel_Method.ipynb @@ -0,0 +1,1874 @@ +{ + "metadata": { + "hide_input": false, + "name": "", + "signature": "sha256:e4c84416c816dd77864dc50cef246ba32ce52d7cb5903fc802363c9858db5c33" + }, + "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)2015 Natalia C. Clementi\n", + "\n", + "Some pieces of code are based on the Aeropython course provided Lorena A. Barba " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#Linear vortex panel method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the last lessons of _AeroPython_, we have been learning (we hope so!) how to apply panel methods to represent a cylinder and different airfoils.\n", + "\n", + "We started with a simple source panel method ([Lesson 10](http://nbviewer.ipython.org/urls/github.com/barbagroup/AeroPython/blob/master/lessons/10_Lesson10_sourcePanelMethod.ipynb)) but we realized that if we want to generate lift this method was not able to provide it. Do you remember why?...**The source panel method gives as a solution with no circulation** and we need *circulation* so we can have lift. \n", + "\n", + "Then, to get a solution with circulation, we add vortices to the constant-source panel method, allowing us to obtain an lift force.([Lesson 11](http://nbviewer.ipython.org/github/barbagroup/AeroPython/blob/master/lessons/11_Lesson11_vortexSourcePanelMethod.ipynb))\n", + "\n", + "There are other ways to generate a solution with circulation. One of them is to use linearly varying strength vortices." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##What does \"linearly varying strength\" mean?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So far, we were treating our singularity distribution with constant strength along the panels. Now we allow the strength to vary linearly.\n", + "\n", + "\\begin{equation}\n", + " \\gamma(x)= \\gamma_0 + \\gamma_1 (x-x_1) \n", + "\\end{equation}\n", + "\n", + "where $\\gamma_0$ is constant and $\\gamma_1$ is the slope. Using the principle of superposition we can separate our problem into a constant-strength part and other where the strength varies linearly, to finally add these two solutions. \n", + "\n", + "\n", + "
\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Derivation of the linear vortex panel method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the powers of superposition, and remembering that the potential at a location $(x,y)$ in this case is,\n", + "\n", + "\\begin{equation}\n", + " \\phi(x, y) = \\phi_{\\text{free-stream}}(x, y)+ \\phi_{\\text{vortex-sheet}}(x, y)\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we explicitly write the potentitial function as," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\\begin{equation}\n", + " \\phi(x, y) = xU_{\\infty}\\cos(\\alpha) + yU_{\\infty}\\sin(\\alpha) -\n", + " \\frac{1}{2\\pi} \\int_{sheet} \\gamma(s)\\tan^{-1} \\frac{y-\\eta(s)}{x-\\xi(s)}ds\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we discretize the geometry into $N$ panels, as we were doing in the previous lessons, then we can write the potential at a point $(x,y)$ as,\n", + "\n", + "\\begin{equation}\n", + " \\phi\\left(x,y\\right) = xU_\\infty \\cos \\alpha + yU_\\infty \\sin \\alpha \\\\-\\sum_{j=1}^N \\frac{1}{2\\pi} \\int_j \\gamma_j (s) \\tan^{-1} \\left(\\frac{y-\\eta_j(s)}{x-\\xi_j(s)}\\right) {\\rm d}s_j\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where, \n", + "\n", + "\\begin{equation}\n", + "\\left\\{\n", + "\\begin{array}{l}\n", + "\\xi_j(s)=x_j-s\\sin\\beta_j \\\\\n", + "\\eta_j(s)=y_j+s\\cos\\beta_j\n", + "\\end{array}\n", + ",\\ \\ \\ \n", + "0\\le s \\le l_j\n", + "\\right.\n", + "\\end{equation}\n", + "\n", + "and $\\gamma_j (s)$ can be written as,\n", + "\n", + "\\begin{equation}\n", + " \\gamma_j (s) = \\gamma_j + \\left(\\frac{\\gamma_{j+1}-\\gamma_j}{l_j} \\right)\\; s\n", + "\\end{equation}\n", + "\n", + "with $l_j$ the length of panel $j$ and $\\beta_j$ the angle between the panel's normal and the $x$-axis. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then, replacing what we know for $\\gamma_j (s)$ we can write the potential as:\n", + "\n", + "\\begin{equation}\n", + " \\phi\\left(x,y\\right) = xU_\\infty \\cos \\alpha + yU_\\infty \\sin \\alpha - \\sum_{j=1}^N \\frac{\\gamma_j}{2\\pi} \\int_j \\tan^{-1} \\left(\\frac{y-\\eta_j(s)}{x-\\xi_j(s)}\\right) {\\rm d}s_j \\\\ \n", + " -\\sum_{j=1}^N \\frac{1}{2\\pi} \\left(\\frac{\\gamma_{j+1}-\\gamma_j}{l_j} \\right) \\int_j s\\; \\tan^{-1} \\left(\\frac{y-\\eta_j(s)}{x-\\xi_j(s)}\\right) {\\rm d}s_j\n", + "\\end{equation}\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first three terms of the potential should be familiar, we already had to fight with the math that those terms involve in the previous lessons. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Normal and tangential velocity\n", + "\n", + "We know that we can write the normal and tangential components of the velocity using:\n", + "\n", + "\\begin{equation}\n", + " \\left\\{\n", + " \\begin{array}{l}\n", + " U_{\\text{n}}(x, y)=\\frac{\\partial \\phi}{\\partial x}(x, y) \\,n_x+\\frac{\\partial \\phi}{\\partial y}(x, y) \\,n_y \\\\\n", + " U_{\\text{t}}(x, y)=\\frac{\\partial \\phi}{\\partial x}(x, y) \\,t_x+\\frac{\\partial \\phi}{\\partial y}(x, y) \\,t_y\n", + " \\end{array}\n", + " \\right.\n", + "\\end{equation}\n", + "\n", + "where $n_x=\\cos (\\beta_i)$ , $n_y=\\sin (\\beta_i)$ , $t_x=-\\sin (\\beta_i)$ and $t_y=\\cos (\\beta_i)$. In order to get the different components of the velocity we need to take some derivatives. We know that you don't like to do a lot of math, but if you completed the exercise of lesson 11 ([11_Lesson11_Exercise](http://nbviewer.ipython.org/github/barbagroup/AeroPython/blob/master/lessons/11_Lesson11_Exercise.ipynb)) then you have all the derivatives done!!! " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The components of the gradient should look like this:\n", + "\n", + "\\begin{align}\n", + " \\frac{\\partial \\phi}{\\partial x}(x,y) &= U_\\infty \\cos \\alpha \\\\\n", + " &+ \\frac{1}{{2\\pi}} \\sum_{j=1}^N \\gamma_j \\int_j \\frac{(y-\\eta_j(s))}{(x-\\xi_j(s))^2 + (y-\\eta_j(s))^2} {\\rm d}s_j \\\\ \n", + " &+ \\frac{1}{2\\pi}\\sum_{j=1}^N \\left(\\frac{\\gamma_{j+1}-\\gamma_j}{l_j} \\right) \\int_j \\frac{s\\;(y-\\eta_j(s))}{(x-\\xi_j(s))^2 + (y-\\eta_j(s))^2} {\\rm d}s_j\n", + "\\end{align}\n", + "\n", + "\\begin{align}\n", + " \\frac{\\partial \\phi}{\\partial y}(x,y) &= U_\\infty \\sin \\alpha \\\\\n", + " &- \\frac{1}{{2\\pi}} \\sum_{j=1}^N \\gamma_j \\int_j \\frac{(x-\\xi_j(s))}{(x-\\xi_j(s))^2 + (y-\\eta_j(s))^2} {\\rm d}s_j \\\\ \n", + " &- \\frac{1}{2\\pi}\\sum_{j=1}^N \\left(\\frac{\\gamma_{j+1}-\\gamma_j}{l_j} \\right) \\int_j \\frac{s\\;(x-\\xi_j(s))}{(x-\\xi_j(s))^2 + (y-\\eta_j(s))^2} {\\rm d}s_j\n", + "\\end{align}\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then, rearranging some terms we can write $U_{\\text{n}}(x, y)$ and $U_{\\text{t}}(x, y)$ as:\n", + "\n", + "\\begin{align}\n", + " U_{\\text{n}}(x, y) & = U_\\infty \\cos(\\alpha - \\beta_i) \\\\\n", + " &+\\frac{1}{{2\\pi}}\\sum_{j=1}^N \\gamma_j \\left[ \\int_j f_j(s) {\\rm d}s \\cos(\\beta_i) - \\int_j g_j(s) {\\rm d}s \\sin(\\beta_i) \\right] \\\\\n", + " &-\\frac{1}{{2\\pi}}\\sum_{j=1}^N \\frac{\\gamma_j}{l_j} \\left[ \\int_j s\\,f_j(s) {\\rm d}s \\cos(\\beta_i) - \\int_j s\\,g_j(s) {\\rm d}s \\sin(\\beta_i) \\right] \\\\\n", + " &+ \\frac{1}{{2\\pi}}\\sum_{j=1}^N \\frac{\\gamma_{j+1}}{l_j} \\left[ \\int_j s\\,f_j(s) {\\rm d}s \\cos(\\beta_i) - \\int_j s\\,g_j(s) {\\rm d}s \\sin(\\beta_i) \\right] \n", + "\\end{align}\n", + "\n", + "\\begin{align}\n", + " U_{\\text{t}}(x, y) & = U_\\infty \\sin(\\alpha - \\beta_i) \\\\\n", + " &+\\frac{1}{{2\\pi}}\\sum_{j=1}^N \\gamma_j \\left[ \\int_j f_j(s) {\\rm d}s (-\\sin(\\beta_i)) - \\int_j g_j(s) {\\rm d}s (\\cos(\\beta_i)) \\right] \\\\\n", + " &-\\frac{1}{{2\\pi}}\\sum_{j=1}^N \\frac{\\gamma_j}{l_j} \\left[ \\int_j s\\,f_j(s) {\\rm d}s (-\\sin(\\beta_i)) - \\int_j s\\,g_j(s) {\\rm d}s (\\cos(\\beta_i)) \\right] \\\\\n", + " &+ \\frac{1}{{2\\pi}}\\sum_{j=1}^N \\frac{\\gamma_{j+1}}{l_j} \\left[ \\int_j s\\,f_j(s) {\\rm d}s (-\\sin(\\beta_i)) - \\int_j s\\,g_j(s) {\\rm d}s (\\cos(\\beta_i)) \\right] \n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $f_j(s)$ and $g_j(s)$ are:\n", + "\n", + "\\begin{equation}\n", + " f_j(s) = \\frac{(y-\\eta_j(s))}{(x-\\xi_j(s))^2 + (y-\\eta_j(s))^2}\n", + "\\end{equation}\n", + "\n", + "\\begin{equation}\n", + " g_j(s) = \\frac{(x-\\xi_j(s))}{(x-\\xi_j(s))^2 + (y-\\eta_j(s))^2}\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we have all the expressions that we need to solve our problem, so let's start coding!!!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Discretization into panels" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#Importing the libraries and modules we need.\n", + "import numpy\n", + "from scipy import integrate, linalg\n", + "from matplotlib import pyplot\n", + "#The next line allows as to plot directly in the notebook.\n", + "%matplotlib inline" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We are going to work with the airfoil _NACA0012_, so we are going to load the same data that we were using in previous lessons. We will use the cosine method to get the `x_ends` and we are going to generate the `y_ends` using the [equation for a symmetrical 4-digit _NACA_ airfoil](http://en.wikipedia.org/wiki/NACA_airfoil) with the correction for zero-thickness trailing edge. We need this because now the strength of the singularities are going to be at the beginning and end of each panel.\n", + "\n", + "The data we are loading is just to plot the airfoil and to ensure that panels follow the shape of the airfoil. However, we are not going to use this data to build the panels, instead we will use the equation we mentioned before." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#Loading the geometry from a data file\n", + "\n", + "x, y = numpy.loadtxt('./resources/naca0012.dat', dtype=float, delimiter='\\t', unpack=True)\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `Panel` class is going to be similar to the one that we were using in the previous lessons. " + ] + }, + { + "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 = numpy.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 = numpy.arccos((yb-ya)/self.length)\n", + " elif xb-xa > 0.:\n", + " self.beta = numpy.pi + numpy.arccos(-(yb-ya)/self.length)\n", + " \n", + " # location of the panel\n", + " if self.beta <= numpy.pi:\n", + " self.loc = 'upper face' #upper face\n", + " else:\n", + " self.loc = 'lower face' #lower face\n", + " \n", + " self.vt = 0. # tangential velocity\n", + " self.cp = 0. # pressure coefficient" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def define_panels(N):\n", + " \"\"\"Discretizes the geometry into panels using 'cosine' method.\n", + " \n", + " Arguments\n", + " ---------\n", + " N: number of panels \n", + " \n", + " Returns\n", + " -------\n", + " panels: Numpy array of panels\n", + " \"\"\"\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 of the circle\n", + " \n", + " theta = numpy.linspace(0, 2*numpy.pi, N+1) #array of angles\n", + " x_circle = x_center + R*numpy.cos(theta) #x_coord of the circle\n", + " \n", + " x_ends = numpy.copy(x_circle) #x_ends of the geometry panels (idem circle)\n", + " y_ends = numpy.empty_like(x_ends) #initializing the y_ends array\n", + " y_t = numpy.empty_like(x_ends) #half thickness at a given value of x (centerline to surface)\n", + " \n", + " x_ends = numpy.append(x_ends, x_ends[0]) # extend array with the last element using numpy.append \n", + " \n", + " t=0.12 #the maximum thickness as a fraction of the chord \n", + " #(so 100 t gives the last two digits in the NACA 4-digit denomination).\n", + " c=1. #coord length\n", + " \n", + " y_t = 5.*t*c*(0.2969*numpy.sqrt(x_ends/c) + (-0.1260)*(x_ends/c)+\\\n", + " (-0.3516)*(x_ends/c)**2 + (0.2843)*(x_ends/c)**3 +\\\n", + " (-0.1036)*(x_ends/c)**4)\n", + " \n", + " # computes the y_end\n", + " \n", + " y_ends[0:N/2] = y_t[0:N/2]\n", + " y_ends[N/2:N+1] = -y_t[N/2:N+1]\n", + " \n", + " \n", + " panels = numpy.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": "code", + "collapsed": false, + "input": [ + "##Create the panels\n", + "N = 100 # number of panels\n", + "panels = define_panels(N)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#Plotting the geometry\n", + "\n", + "#First we'll set some parameters to have a nice plot\n", + "val_x, val_y = 0.1, 0.2 \n", + "\n", + "xp_min, xp_max = min(panel.xa for panel in panels) , max(panel.xa for panel in panels) \n", + "yp_min, yp_max = min(panel.ya for panel in panels) , max(panel.ya for panel in panels) \n", + "\n", + "#limits of the plot\n", + "xp_start, xp_end = xp_min-val_x*(xp_max-xp_min), xp_max+val_x*(xp_max-xp_min)\n", + "yp_start, yp_end = yp_min-val_y*(yp_max-yp_min), yp_max+val_y*(yp_max-yp_min)\n", + "\n", + "#Plot\n", + "size = 10\n", + "pyplot.figure(figsize=(size, (yp_end-yp_start)/(xp_end-xp_start)*size))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('x', fontsize=15)\n", + "pyplot.ylabel('y', fontsize=15)\n", + "pyplot.xlim(xp_start, xp_end)\n", + "pyplot.ylim(yp_start, yp_end)\n", + "\n", + "pyplot.plot(x, y, color='deeppink', linestyle='-', linewidth=2);\n", + "\n", + "pyplot.plot(numpy.append([panel.xa for panel in panels], panels[0].xa), \n", + " numpy.append([panel.ya for panel in panels], panels[0].ya), \n", + " linestyle='-', linewidth=1, marker='o', markersize=6, color='#483D8B');" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Free stream conditions\n", + "\n", + "The airfoil is immersed in a free-stream ($U_\\infty$,$\\alpha$) where $U_\\infty$ and $\\alpha$ are the velocity magnitude and angle of attack, respectively." + ] + }, + { + "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*numpy.pi/180 # degrees to radians" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 7 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# defines and creates the object freestream\n", + "U_inf = 1.0 # freestream speed\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": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Flow-tangency boundary condition\n", + "\n", + "As we already know, to solve our problem, we need to require $U_{\\text{n}}(x, y)=0$ at the center (collocation point) of each panel. However we have to be careful, because at $(x_{c_i}, y_{c_i})$ all our integrals have a singularity. To skip that singularity, for $i=j$ we have to solve them analytically in the local coordinates of the panel.\n", + "\n", + "For the flow-tangency boundary condition, the integrals (in local coordinates) that we have to solve analytically are:\n", + "\n", + "\\begin{equation}\n", + " I_1=\\frac{1}{2\\pi} \\int^l_0 \\frac{(x^*_{i}-s)}{(x^*_{i}-s)^2 + (y^*_{i})^2} {\\rm d}s\n", + "\\end{equation}\n", + "\n", + "\\begin{equation}\n", + " I_2=\\frac{1}{2\\pi l} \\int^l_0 \\frac{s\\,(x^*_{i}-s)}{(x^*_{i}-s)^2 + (y^*_{i})^2} {\\rm d}s\n", + "\\end{equation}\n", + "\n", + "After we integrate, using that at the center point $r_{i,j}=r_{i,j+1}$ and $\\theta_{i,j+1}-\\theta_{i,j}=\\pi$ we get that:\n", + "\n", + "\n", + "\\begin{equation}\n", + " I_1=0 \\qquad ; \\qquad I_2=-\\frac{1}{2\\pi}\n", + "\\end{equation}\n", + "\n", + "Tip:\n", + "\\begin{equation}\n", + " \\tan^{-1} \\left(\\frac{s-x}{y}\\right)=\\tan^{-1} \\left(\\frac{y}{x-s}\\right) \\;-\\; \\frac{\\pi}{2}\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For all the integrals that appear in our equations, we use the function `integrate.quad()` from SciPy. Following the same idea we use in the previous lessons, we define two integrate functions to compute the terms of the form:\n", + "\n", + "`integral`:\n", + "\n", + "\\begin{equation}\n", + " \\int_j f_j(s) {\\rm d}s\\;a - \\int_j g_j(s) {\\rm d}s\\;b\n", + "\\end{equation}\n", + "\n", + "`integral_s`:\n", + "\n", + "\\begin{equation}\n", + " \\int_j s\\,f_j(s) {\\rm d}s\\;a - \\int_j s\\,g_j(s) {\\rm d}s\\;b\n", + "\\end{equation}\n", + "\n", + "where $a$ and $b$ can be $n_x=\\cos (\\beta_i)$ , $n_y=\\sin (\\beta_i)$ , $t_x=-\\sin (\\beta_i)$ and $t_y=\\cos (\\beta_i)$ depending on the case. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def integral(x, y, panel, dxdk, dydk):\n", + " \"\"\"\n", + " Arguments\n", + " ---------\n", + " x, y: Cartesian coordinates of the point.\n", + " panel: panel which contribution is evaluated.\n", + " dxdk: derivative of x in the z-direction.\n", + " dydk: 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 - numpy.sin(panel.beta)*s))*dxdk\n", + " +(y - (panel.ya + numpy.cos(panel.beta)*s))*dydk)\n", + " / ((x - (panel.xa - numpy.sin(panel.beta)*s))**2\n", + " +(y - (panel.ya + numpy.cos(panel.beta)*s))**2) )\n", + " return integrate.quad(lambda s:func(s), 0., panel.length)[0]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 9 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def integral_s(x, y, panel, dxdk, dydk):\n", + " \"\"\"\n", + " Arguments\n", + " ---------\n", + " x, y: Cartesian coordinates of the point.\n", + " panel: panel which contribution is evaluated.\n", + " dxdk: derivative of x in the z-direction.\n", + " dydk: 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 ( s*((x - (panel.xa - numpy.sin(panel.beta)*s))*dxdk\n", + " +(y - (panel.ya + numpy.cos(panel.beta)*s))*dydk)\n", + " / ((x - (panel.xa - numpy.sin(panel.beta)*s))**2\n", + " +(y - (panel.ya + numpy.cos(panel.beta)*s))**2) )\n", + " return integrate.quad(lambda s:func(s), 0., panel.length)[0]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 10 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use these functions to calculate the coefficients of the matrices corresponding to each term in the equation for $U_{\\text{n}}(x, y)$ to finally solve the linear system $$[A][\\gamma] = [b]$$\n", + "\n", + "We will call $A_1$ the term related to the first integral,\n", + "\n", + "\\begin{equation}\n", + " \\int_j f_j(s) {\\rm d}s\\;\\cos(\\beta_i) - \\int_j g_j(s) {\\rm d}s\\;\\sin(\\beta_i)\n", + "\\end{equation}\n", + "\n", + "$A_2$ the term related to the second integral,\n", + "\n", + "\\begin{equation}\n", + " \\int_j s\\,f_j(s) {\\rm d}s\\;\\cos(\\beta_i) - \\int_j s\\,g_j(s) {\\rm d}s\\;\\sin(\\beta_i)\n", + "\\end{equation}\n", + "\n", + "and $A_3=A_2$ the term related to the third integral. We want to keep the three terms to avoid confusions. $A_2$ corresponds to $\\gamma_j$ and $A_3$ corresponds to $\\gamma_{j+1}$.\n", + "\n", + "Then, using the information from the analytical solutions when $i=j$ and our integral functions, we can build three different functions that return these coefficients." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def coeff_1_normal(panels):\n", + " \"\"\"\n", + " Build matrix coefficients associated with the first\n", + " integral in U_n ---> (A_1)\n", + " \"\"\"\n", + " N = len(panels)\n", + " A1 = numpy.empty((N, N), dtype=float) \n", + " numpy.fill_diagonal(A1, 0.) #value of I_1\n", + "\n", + " for i, p_i in enumerate(panels):\n", + " for j, p_j in enumerate(panels): \n", + " if i != j:\n", + " A1[i,j] = 0.5/numpy.pi*(integral(p_i.xc, p_i.yc, p_j, -numpy.sin(p_i.beta),numpy.cos(p_i.beta)))\n", + " \n", + " return A1\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 11 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def coeff_2_normal(panels):\n", + " \"\"\"\n", + " Build matrix coefficients associated with the second\n", + " integral in U_n ---> (A_2)\n", + " \"\"\"\n", + " N = len(panels)\n", + " A2 = numpy.empty((N, N), dtype=float) \n", + " numpy.fill_diagonal(A2, -0.5/numpy.pi) #value of I_2\n", + " for i, p_i in enumerate(panels):\n", + " for j, p_j in enumerate(panels): \n", + " if i != j:\n", + " A2[i,j] = (0.5/numpy.pi)*(1./p_j.length)*(integral_s(p_i.xc, p_i.yc, p_j, -numpy.sin(p_i.beta),numpy.cos(p_i.beta)))\n", + " \n", + " return A2\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 12 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def coeff_3_normal(panels, A2):\n", + " \"\"\"\n", + " Build matrix coefficients associated with the third\n", + " integral in U_n ---> (A_3)\n", + " \"\"\"\n", + " N = len(panels)\n", + " A3 = A2\n", + " \n", + " return A3" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 13 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#Let's call this functions to get A1,A2,A3.\n", + "\n", + "A1 = coeff_1_normal(panels)\n", + "A2 = coeff_2_normal(panels)\n", + "A3 = coeff_3_normal(panels,A2)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 14 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We got our coefficients, but how are these guys related with the matrix $A$ that we need to build in order to solve our system?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##How to build the A matrix\n", + "\n", + "This is the moment when you should grab a piece of paper and write some terms of the $U_n$ for a panel $i$. After writing a couple of $j$-terms, you should notice that. (tip: write the terms counting from zero, so then you match this with the code)\n", + "\n", + "* For $j=0$ you only have contribution from the first and second integral ($A_1$ and $A_2$), which are the coefficients related with $\\gamma_j$. \n", + "\n", + "\n", + "* For $j=N$ (last panel) you only have contribution from the third integral ($A_3$), which is the coefficient related with $\\gamma_{j+1}$. \n", + "\n", + "\n", + "* For $0<$ $j$ $<$ $N$ (all the panels in the middle) we have contribution from the three integrals.\n", + "\n", + "Our matrix will have $N+1$ columns. We will need an extra row \n", + "but we will talk about that later. If you are impatient, remember _the Kutta condition_.\n", + "\n", + "The final matrix $A$ will have this contributions:\n", + "\n", + "
\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#In code, except for the kutta condition (in cell after)...\n", + "\n", + "def A_normal(panels,A1,A2,A3):\n", + " \"\"\"Builds the normal matrix\n", + " \n", + " Arguments\n", + " ---------\n", + " panels: panels of the geometry\n", + " A1: term related to the first integral in U_n\n", + " A2: term related to the second integral in U_n\n", + " A3: term related to the third integral in U_n\n", + " \n", + " Returns\n", + " -------\n", + " A_n: Nx(N+1) matrix, where N is number of panels. \n", + " \n", + " \"\"\"\n", + " N = len(panels)\n", + " A_n = numpy.zeros((N, N+1), dtype=float) \n", + " \n", + " for i in range(N):\n", + " \n", + " A_n[i,0] = A1[i,0] - A2[i,0]\n", + " A_n[i,-1] = A3[i,-1]\n", + " \n", + " for j in range(N-1):\n", + " \n", + " A_n[i,j+1] = A1[i,j+1] - A2[i,j+1] + A3[i,j]\n", + " \n", + " return A_n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 15 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Kutta condition\n", + "\n", + "In this case the _kutta condition_ is easy, we just need to ask $\\gamma_0 + \\gamma_{N}=0$ then:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#Kutta array\n", + "\n", + "def kutta_array(N):\n", + " \"\"\"Builds the kutta array.\n", + " \n", + " Arguments\n", + " ---------\n", + " N: number of panels\n", + " \n", + " Returns\n", + " -------\n", + " k_a -- 1D array ((N+1)x1, N is the number of panels). kutta array\n", + " \"\"\"\n", + " k_a = numpy.zeros(N+1,dtype=float)\n", + "\n", + " k_a[0] = 1.\n", + " k_a[-1] = 1.\n", + " \n", + " return k_a" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 16 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Building the A matrix and the RHS" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def build_matrix(A_n, k_a, N):\n", + " \"\"\"Builds the A matrix to solve the linear system.\n", + " \n", + " Arguments\n", + " ---------\n", + " panels: array of panels.\n", + " A_n: Nx(N+1) matrix (N is the number of panels).\n", + " k_a -- 1D array ((N+1)x1, N is the number of panels).\n", + " Returns\n", + " -------\n", + " A_solve: (N+1)x(N+1) matrix (N is the number of panels).\n", + " \"\"\"\n", + "\n", + " #Matrix A_solve (N+1)x(N+1)\n", + "\n", + " A_solve = numpy.empty((N+1, N+1), dtype=float)\n", + " \n", + " A_solve[0:N,:] = A_n[:,:]\n", + " A_solve[-1,:] = k_a[:]\n", + "\n", + " return A_solve" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 17 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "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", + " N = len(panels)\n", + " b = numpy.empty(N+1,dtype=float)\n", + " \n", + " for i, panel in enumerate(panels):\n", + " b[i] = -freestream.U_inf * numpy.cos(freestream.alpha - panel.beta)\n", + " b[-1] = 0.\n", + " \n", + " return b" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 18 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's call all the functions we need to solve the system" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "N=len(panels)\n", + "#To build A\n", + "A_n =A_normal(panels,A1,A2,A3)\n", + "k_a = kutta_array(N)\n", + "\n", + "#Putting all together to get A\n", + "A = build_matrix(A_n, k_a, N)\n", + "\n", + "#RHS\n", + "b = build_rhs(panels, freestream)\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 19 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To solve the linear system we use `linalg.solve` from SciPy. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# solves the linear system\n", + "gammas = linalg.solve(A, b)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 20 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we have the solution of our system, we can get the surface pressure coefficient by calculating the tangential velocity. So let's keep coding (and doing a little bit more of math)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Surface pressure coefficient" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The pressure coefficient at the center of the $i$-th panel is:\n", + "\n", + "$$C_{p_i} = 1 - \\left(\\frac{U_{t_i}}{U_\\infty}\\right)^2$$\n", + "\n", + "We have to compute the tangential velocity. However, we can not escape from the math. To calculate $U_t$, we have to do some integrals, do you remember? Guess what, yes! we have the singularities issue again. In this case, the integrals we have to solve analytically are:\n", + "\n", + "\\begin{equation}\n", + " I_3=\\frac{1}{2\\pi} \\int^l_0 \\frac{y^*_{i}}{(x^*_{i}-s)^2 + (y^*_{i})^2} {\\rm d}s\n", + "\\end{equation}\n", + "\n", + "\\begin{equation}\n", + " I_4=\\frac{1}{2\\pi l} \\int^l_0 \\frac{s\\,y^*_{i}}{(x^*_{i}-s)^2 + (y^*_{i})^2} {\\rm d}s\n", + "\\end{equation}\n", + "\n", + "After we integrate, using that at the center point $r_{i,j}=r_{i,j+1}$ and $\\theta_{i,j+1}-\\theta_{i,j}=\\pi$ we get that:\n", + "\n", + "\n", + "\\begin{equation}\n", + " I_3=-\\frac{1}{2} \\qquad ; \\qquad I_4=-\\frac{1}{4}\n", + "\\end{equation}\n", + "\n", + "Tip:\n", + "\\begin{equation}\n", + " \\tan^{-1} \\left(\\frac{s-x}{y}\\right)=\\tan^{-1} \\left(\\frac{y}{x-s}\\right) \\;-\\; \\frac{\\pi}{2}\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Following the same idea that we use to build the **A** matrix, we define:\n", + "\n", + "$B_1$, the term related to the first integral:\n", + "\n", + "\\begin{equation}\n", + " \\int_j f_j(s) {\\rm d}s\\;(-\\sin(\\beta_i)) + \\int_j g_j(s) {\\rm d}s\\;\\cos(\\beta_i)\n", + "\\end{equation}\n", + "\n", + "$B_2$ the term related to the second integral:\n", + "\n", + "\\begin{equation}\n", + " \\int_j s\\,f_j(s) {\\rm d}s\\;(-\\sin(\\beta_i)) + \\int_j s\\,g_j(s) {\\rm d}s\\;\\cos(\\beta_i)\n", + "\\end{equation}\n", + "\n", + "and $B_3=B_2$, the term related to the third integral. We want to keep the three terms to avoid confusions. $B_2$ correspond to $\\gamma_j$ and $B_3$ correspond to $\\gamma_{j+1}$.\n", + "\n", + "Then, using the information from the analytical solutions when $i=j$ and our integral functions, we can build three different functions that return these coefficients." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def coeff_1_tangential(panels):\n", + " \n", + " \"\"\"\n", + " Build matrix coefficients associated with the first\n", + " integral in U_t ---> (B_1)\n", + " \"\"\"\n", + "\n", + " N = len(panels)\n", + " B1 = numpy.empty((N, N), dtype=float) \n", + " numpy.fill_diagonal(B1, -0.5)\n", + "\n", + " for i, p_i in enumerate(panels):\n", + " for j, p_j in enumerate(panels): \n", + " if i != j:\n", + " B1[i,j] = 0.5/numpy.pi*(integral(p_i.xc, p_i.yc, p_j,-numpy.cos(p_i.beta), -numpy.sin(p_i.beta)))\n", + " \n", + " return B1\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 21 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def coeff_2_tangential(panels):\n", + " \"\"\"\n", + " Build matrix coefficients associated with the first\n", + " integral in U_t ---> (B_2)\n", + " \"\"\"\n", + " N = len(panels)\n", + " B2 = numpy.empty((N, N), dtype=float) \n", + " numpy.fill_diagonal(B2, -0.25)\n", + "\n", + " for i, p_i in enumerate(panels):\n", + " for j, p_j in enumerate(panels): \n", + " if i != j:\n", + " B2[i,j] = 0.5/numpy.pi*(1./p_j.length)*(integral_s(p_i.xc, p_i.yc, p_j,-numpy.cos(p_i.beta), -numpy.sin(p_i.beta)))\n", + " \n", + " return B2" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 22 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def coeff_3_tangential(panels, B2):\n", + " \"\"\"\n", + " Build matrix coefficients associated with the first\n", + " integral in U_t ---> (B_3)\n", + " \"\"\"\n", + " N = len(panels)\n", + " B3 = B2\n", + " \n", + " return B3" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 23 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#Let's call this functions to get B1,B2,B3.\n", + "B1 = coeff_1_tangential(panels)\n", + "B2 = coeff_2_tangential(panels)\n", + "B3 = coeff_3_tangential(panels,B2)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 24 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the same logic we used to build the **A** matrix, excepting that now we don't need the kutta condition, we can get the **A_tangential**." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def A_tangential(panels,B1,B2,B3):\n", + " \"\"\"Builds the tangential matrix\n", + " \n", + " Arguments\n", + " ---------\n", + " panels: panels of the geometry\n", + " B1: term related to the first integral in U_t\n", + " B2: term related to the second integral in U_t\n", + " B3: term related to the third integral in U_t\n", + " \n", + " Returns\n", + " -------\n", + " A_t: Nx(N+1) matrix, where N is number of panels. \n", + " \"\"\"\n", + " N = len(panels)\n", + " A_t = numpy.zeros((N, N+1), dtype=float) \n", + " \n", + " for i in range(N):\n", + " \n", + " A_t[i,0] = B1[i,0] - B2[i,0]\n", + " A_t[i,-1] = B3[i,-1]\n", + " \n", + " for j in range(N-1):\n", + " \n", + " A_t[i,j+1] = B1[i,j+1] - B2[i,j+1] + B3[i,j]\n", + " \n", + " return A_t" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 25 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "A_t = A_tangential(panels,B1,B2,B3)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 26 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#The vector associated with the free-stream for U_t\n", + "\n", + "b_t = freestream.U_inf * numpy.sin([freestream.alpha - panel.beta for panel in panels])\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 27 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###The tangential velocity:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + " U_t = numpy.dot(A_t, gammas) + b_t" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 28 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for i, panel in enumerate(panels):\n", + " panel.vt = U_t[i]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 29 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###Pressure coefficient:" + ] + }, + { + "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": 30 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "get_pressure_coefficient(panels, freestream)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 31 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From [Lesson 10](http://nbviewer.ipython.org/github/barbagroup/AeroPython/blob/master/lessons/10_Lesson10_sourcePanelMethod.ipynb) we know the exact solution for zero angle of attack, so let's copy that solution, to compare with our result." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "voverVsquared=numpy.array([0, 0.64, 1.01, 1.241, 1.378, 1.402, 1.411, 1.411, 1.399, 1.378, 1.35, 1.288, 1.228, 1.166, 1.109, 1.044, 0.956, 0.906, 0])\n", + "print voverVsquared" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[ 0. 0.64 1.01 1.241 1.378 1.402 1.411 1.411 1.399 1.378\n", + " 1.35 1.288 1.228 1.166 1.109 1.044 0.956 0.906 0. ]\n" + ] + } + ], + "prompt_number": 32 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "xtheo=numpy.array([0, 0.5, 1.25, 2.5, 5.0, 7.5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 95, 100])\n", + "xtheo = xtheo/100\n", + "print xtheo" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[ 0. 0.005 0.0125 0.025 0.05 0.075 0.1 0.15 0.2 0.25\n", + " 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 1. ]\n" + ] + } + ], + "prompt_number": 33 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# plots the surface pressure coefficient\n", + "\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", + "pyplot.figure(figsize=(10, 6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('x', fontsize=16)\n", + "pyplot.ylabel('$C_p$', fontsize=16)\n", + "pyplot.plot([panel.xc for panel in panels if panel.loc == 'upper face'], \n", + " [panel.cp for panel in panels if panel.loc == 'upper face'], \n", + " color='r', linewidth=1, marker='x', markersize=8)\n", + "pyplot.plot([panel.xc for panel in panels if panel.loc == 'lower face'], \n", + " [panel.cp for panel in panels if panel.loc == 'lower face'], \n", + " color='b', linewidth=0, marker='d', markersize=6)\n", + "pyplot.plot(xtheo, 1-voverVsquared, color='k', linestyle='--',linewidth=2)\n", + "pyplot.legend(['upper face', 'lower face', 'analytical'], loc='best', prop={'size':14})\n", + "pyplot.xlim(x_start, x_end)\n", + "pyplot.ylim(-0.65, 1.)\n", + "pyplot.gca().invert_yaxis()\n", + "pyplot.title('Number of panels : %d' % N)\n", + "#pyplot.savefig('CP_0.pdf'); add this line to save fig;" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nffr0MZ6zbds22rVrx9ChQ6lRowb9+/cnODiYChUqmFwnI1Ke1717d9577z18fX2pV68ee/bsYcaM\nGSbnde3alZ9//pnt27fTsGFDPD098ff3x8FBS6lWrlzJoEGDeP/996lZsyY9evTgwIEDuLu7P1VM\nM9T+bL9i7qeyOiYvhBBC5BR7XXarbdu21KlTh88///yJ51SpUoVRo0YxduxYC7bM+mTZLSGEEELk\nWkopu0xOrUmSOBshdSuWJzG3PIm55UnMLS+vxtzc5L8ia+TuVCGEEELkuL1796Z7zqVLlyzQEvuR\nF1NiqYkTQgiRa9lrTZx4MqmJE0IIIYTIQySJsxF5tYbCmiTmlicxtzyJueVJzEV2kSROCCGEEMIG\nSU2cEEIIkYtITVzeIzVxQgghhBB5iCRxNkJqKCxPYm55EnPLk5hbnj3G3MvLix49eli7GRly//59\nXn75ZVxdXXFwcCAsLMzaTco0mSdOCCGEEFliSxP5rlixgv379xMYGEipUqUoWbKktZuUadITZyM8\nPT2t3YQ8R2JueRJzy5OYW15WYx4XF0f//iOIi4vLlvZkx/Vy45Jajx49Mrs/JCSEmjVr8txzz1G6\ndGnjwvW2yHZbLoQQQuRBQ4fOxs+vL8OGfZwrrwdaYujr60vZsmVxdnamefPmBAYGGo83a9aMuXPn\nGrffeOMNHBwcuHnzJqANeTo5OfHHH38AWpI4b948qlWrRqFChahbty7ff/+98fmhoaE4ODiwbt06\n2rVrR6FChVi2bFmqdnl6evL555+zb98+HBwcaNeuHQBr1qyhSZMmFC1alDJlytCvXz+uXbtm8txz\n587Rs2dPXF1dKVKkCC1atODUqVPG4ytXrqRWrVo4OztTvXp1Fi5cmOsSW3ugbNHevXut3YQ8R2Ju\neRJzy5OYW156MU/r99Q332xUev3PCpTS6zeqb77ZmKW2ZNf1Bg4cqLp3727cHj16tCpXrpzatm2b\nOnfunBo6dKhycXFR169fV0opNWHCBNWlSxfj+RUrVlSlS5dW69atU0optXv3blW4cGEVHx+vlFJq\n4sSJqkaNGmrnzp0qNDRUrV27VhUuXFht3bpVKaXUpUuXlE6nU+7u7srPz0+FhoaqK1eupGpneHi4\n8vb2Vi1btlQ3b95UERERSimlVqxYobZv364uXbqkDh8+rNq2batat25tfN7Vq1dViRIl1EsvvaSO\n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\nRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERExNf+D05IkATutdAN\nAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 34 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Nice!! Our solution matches with the theoretical one. However, the purpouse of using vortices as our singularities is to get some lift and see how our model behaves. Let's calculate solve the problem for an angle of attack $\\alpha=10$ degrees. We pick $10\u00b0$ because we have some experimental data for the coefficient of pressure of the upper face, to compare. See [Gregory & O'Reilly pressure data.](http://turbmodels.larc.nasa.gov/naca0012_val.html)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Let's solve for $\\alpha=10\u00b0$" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# defines and creates the object freestream\n", + "U_inf = 1.0 # freestream speed\n", + "alpha = 10.0 # angle of attack (in degrees)\n", + "freestream_10 = Freestream(U_inf, alpha) # instantiation of the object freestream" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 35 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#We need to recalculate the RHS\n", + "\n", + "b_10 = build_rhs(panels, freestream_10)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 36 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# solves the linear system\n", + "gammas_10 = linalg.solve(A, b_10)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 37 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#The vector associated with the free-stream for U_t\n", + "\n", + "b_t_10 = freestream.U_inf * numpy.sin([freestream_10.alpha - panel.beta for panel in panels])\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 38 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#Getting the tangential velocity\n", + "U_t_10 = numpy.dot(A_t, gammas_10) + b_t_10" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 39 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for i, panel in enumerate(panels):\n", + " panel.vt = U_t_10[i]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 40 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "get_pressure_coefficient(panels, freestream_10)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 41 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we mentioned before, we have some experimental data for the upper face, so let's import that data to compare with our results. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "x_exp , Cp_exp = numpy.loadtxt('./resources/CP_Gregory_expdata_alpha_10.dat', dtype=float, delimiter=' ', unpack=True)\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 42 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# plots the surface pressure coefficient\n", + "\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", + "pyplot.figure(figsize=(10, 6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('x', fontsize=16)\n", + "pyplot.ylabel('$C_p$', fontsize=16)\n", + "pyplot.plot([panel.xc for panel in panels if panel.loc == 'upper face'], \n", + " [panel.cp for panel in panels if panel.loc == 'upper face'], \n", + " color='r', linewidth=1, marker='d', markersize=6)\n", + "pyplot.plot([panel.xc for panel in panels if panel.loc == 'lower face'], \n", + " [panel.cp for panel in panels if panel.loc == 'lower face'], \n", + " color='b', linewidth=1, marker='d', markersize=6)\n", + "\n", + "pyplot.plot(x_exp,Cp_exp,color='g', linewidth=0, marker='D', markersize=8, markeredgecolor='g',\n", + "markerfacecolor='None', markeredgewidth=1.5)\n", + "\n", + "pyplot.legend(['upper face', 'lower face', 'Gregory exp_data (upper face)'], loc='best', prop={'size':14})\n", + "pyplot.xlim(x_start, x_end)\n", + "pyplot.ylim(y_start, y_end)\n", + "pyplot.gca().invert_yaxis()\n", + "pyplot.title('Angle of attack 10 deg, Number of panels : %d' % N, fontsize=20)\n", + "#pyplot.savefig('CP_10.pdf'); add this line to save fig;" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n9pm1trFTp04qIyOj0BhaTJo0SdWsWVNFRkaqxx57TI0dO9au5uz7779XXbp0UdWqVVPR0dGqffv2\nauPGjdb5DRo0UCaTyfrXsGFDpZRS6enpqmfPnqpWrVqqUqVKqmXLlurzzz8vtDw1a9YsUOvToEED\n62e26NixoxoyZIjdMsnJyeqRRx5RkZGRqlatWgXeYzKZ1KxZs9S9996rKlasqBo0aKAWL15st8zx\n48fVww8/rKpUqaKqVKmi7rvvPnXw4EHrfGff/8WLF+3WcfjwYbuYmEwmtXDhQpWbm6sGDhyoGjZs\nqCpUqKCaNGmiJk+eXOA3smDBAnXTTTepiIgIVbNmTdWvXz/rPHf7jMX+/fuVyWRSJ0+edBpjd7kJ\nbmrOgonLAPi1CxdUXoXy1gNs897l1ZDPh0iCJkQAsBx3fJl0FTVB+/XXX1VISIiaNGmSR5/RZDKp\nGjVqqLlz56rDhw+rw4cPq5UrV6ro6Gi1YMEClZGRodasWaOaNm2qRowYYX1ft27dVHx8vNq0aZPa\nuXOnuuuuu1RUVJQaN26cUkqp3NxcFR8fr9q1a6e2bdumtm7dqtq0aaNuvfVW6zrGjh2rKlWqpLp1\n66Z27NihfvrpJ3X+/HlVpUoVu6Ti7NmzqmLFimr58uUuY9SuXTt1//33qy1btqhDhw6p0aNHq+jo\naHXq1CmllFI//PCDKl++vPrkk09UXl6euuuuu9Tdd99tXcf8+fNVWFiYuu2229SGDRvUjh071J13\n3qni4+M9iuOSJUtUeHi4euedd9TBgwfVa6+9pqKioqwJllJKffPNN2rx4sVq3759av/+/WrIkCGq\nSpUq6rffflNKKXXmzBllMpnU3Llz1enTp9Wvv/6qlFJq165d6u2331a7d+9Whw4dUq+99poKDw9X\n+/btc1mevXv3KpPJpA4fPmw3PTY2Vk2dOtVuWkJCgho6dKj1dYMGDVR0dLQaP368OnjwoHr77bdV\neHi4+vTTT63LmEwmVbVqVbvPGxISYk1uLl68qJo0aaIGDBigfvzxR7V//371xBNPqAYNGlgvGpx9\n/1evXrUrW25urvr5559VpUqV1IwZM9Tp06fV5cuXVU5OjhozZozaunWrOnLkiPr4449V5cqV1dy5\nc63vfeutt1T58uXVtGnT1MGDB9WOHTvU66+/rpTybJ+xLFelShX14YcfOo2zu9wESc78V96vv6rE\nXhH6wPpRf5XXoL5X+pMIIUofAZicbdq0SZlMJvXf//7Xbvq1116rIiMjVWRkpPrnP/9pnW4ymdSw\nYcPslu3QoYN69dVX7aalpqaqyMhIpZTuy2QymdTmzZut848dO6ZCQ0OtydlXX32lQkND1ZEjR6zL\nZGRkqJCQEPX1118rpfTJOSwsTP3yyy922xoyZIjq3r279fWbb76pateurXJzc51+5q+//lpFRkaq\ny5cv202Pj49XkydPtr6ePn26uuaaa1RSUpKqVq2aXW3I/PnzlclkUhs2bLBOO3LkiAoNDVWrV692\nul1bbdu2VYMHD7abdvfdd9slZ47y8vJU7dq17WqcPO1z1qZNmwLfka3ly5crk8lUIGaeJmddu3a1\nW+aJJ55Q7du3tyuns8/76KOPKqWUmjt3rmrSpInd/KtXr6qqVataE29X378zkZGRauHChW6XGTly\npF3Cfe2116oXXnjB6bKe7jNK6X5nL7/8stP1uMtNkD5n/kkpRVLaSFIqZ+v+JAkTMf09GvLyStSf\nRBSuLPR/8jfBHHOTyeTRb1a56UNWmuvzxPr167l69SqDBw8mOzvbbt6tt95q93rbtm1s2bKFiRMn\nWqfl5eWRlZXF6dOn2bdvHyEhIXbvq1u3LnXq1LG+3rt3L3Xq1KF+/frWaQ0bNqROnTrs2bPHesdd\n3bp1qV69ut32Bw0aRMuWLTl58iR16tRh3rx59OvXj5AQ5wMQbNu2jUuXLhVYT3Z2NhkZGdbXiYmJ\nLFu2jOnTp/PJJ59Qu3Ztu+VDQkK4/fbbra/r169PnTp12Lt3L3fddZfTbVvs27ePwQ4DjLdp04b0\n9HTr619++YXRo0eTlpbG6dOnyc3N5fLlyxw7dsztui9evMi4ceP44osvOHXqFDk5OWRlZXHLLbe4\nfM+ff/5JRESEy5i5YzKZaNu2bYHP8umnn9pNc7bMl19+Cejv5PDhw0RFRdktc/nyZbvvxNn376m3\n3nqLd999l6NHj3L58mVycnKIjY0FdKxPnjzp8nvzdJ8BiI6O5ty5c8UqoyuSnPmI9aC6ey59jlTI\nP6hWqwanTmGqW1cSNCECSGEJVVETKW+vzyIuLg6TycTevXvp1auXdXqDBg0AqFixYoH3VKpUye61\nUork5GSnnaCrVatWaBkKY/s5HLcN0Lx5c1q2bMn8+fPp1asX27Zt44MPPnC5vry8PGrWrMm6desK\n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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 43 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Great!! Our results seem to match the experimental data. What we can do is calculate the lift coefficient and compare it with the experimental value. Morover, we can see how the error behaves for different number of panels. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's define a function to calculate the lift for different angles of attack:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def get_lift(freestream, Np):\n", + " \"\"\"\n", + " Get the lift coefficient for a number of panels Np\n", + " \"\"\"\n", + " #define panels\n", + " panels = define_panels(Np)\n", + " \n", + " #coefficients to build A\n", + " A1 = coeff_1_normal(panels)\n", + " A2 = coeff_2_normal(panels)\n", + " A3 = coeff_3_normal(panels,A2)\n", + " \n", + " #To build A\n", + " A_n =A_normal(panels,A1,A2,A3)\n", + " k_a = kutta_array(Np)\n", + "\n", + " #Putting all together to get A\n", + " A = build_matrix(A_n, k_a, Np)\n", + "\n", + " #RHS\n", + " b = build_rhs(panels, freestream)\n", + "\n", + " # solves the linear system\n", + " gammas = linalg.solve(A, b)\n", + " \n", + " #Coefficients to get A_tangential.\n", + " B1 = coeff_1_tangential(panels)\n", + " B2 = coeff_2_tangential(panels)\n", + " B3 = coeff_3_tangential(panels,B2)\n", + " \n", + " #A_tangential\n", + " A_t = A_tangential(panels,B1,B2,B3)\n", + " \n", + " #The vector associated with the free-stream for U_t\n", + " b_t = freestream.U_inf * numpy.sin([freestream.alpha - panel.beta for panel in panels])\n", + "\n", + " #Get tangential velocity\n", + " U_t = numpy.dot(A_t, gammas) + b_t\n", + " \n", + " for i, panel in enumerate(panels):\n", + " panel.vt = U_t[i]\n", + " \n", + " #Get Cp\n", + " get_pressure_coefficient(panels, freestream)\n", + " \n", + " L = 0.\n", + " for panel in panels:\n", + " L -= panel.cp*panel.length*numpy.sin(panel.beta)\n", + " \n", + " return L" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 44 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can calculate the value of the lift coefficients for different number of panels and compare it with the value of the experimental data.\n", + "\n", + "The value of the experimental lift for $\\alpha = 10\u00b0$ was obtained from reference [4](https://confluence.cornell.edu/display/SIMULATION/Flow+over+an+Airfoil+-+Exercises),\n", + "\n", + "$$ L_{exp} = 1.2219 $$\n", + "\n", + "With this value as a reference, we can plot de relative error as a function of the number of panels $N_p$ and see how our model behaves." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "L_np=[]\n", + "Np_list=[20,40,60,80,100,120,140,160,180,200, 400]\n", + "for i in Np_list:\n", + " L_np.append(get_lift(freestream_10, i))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 45 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "L_exp = 1.2219\n", + "\n", + "#Relative error\n", + "\n", + "rel_err = []\n", + "for i in L_np:\n", + " rel_err.append(numpy.abs(L_exp - i)/L_exp)\n", + "\n", + "#Percentage error\n", + "\n", + "per_err = []\n", + "for i in rel_err:\n", + " per_err.append(100.*i)\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 46 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#Plotting\n", + "pyplot.figure(figsize=(10, 6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('Np', fontsize=16)\n", + "pyplot.ylabel('error $\\%$', fontsize=16)\n", + "pyplot.xlim(10, 210)\n", + "pyplot.ylim(3, 8)\n", + "pyplot.xticks(numpy.linspace(10, 210, 21)) \n", + "pyplot.yticks(numpy.linspace(2, 8, 17))\n", + "\n", + "pyplot.title('Percentage error vs number of panels', fontsize=20)\n", + "\n", + "pyplot.plot(Np_list, per_err,color='r', linewidth=0, marker='o', markersize=6);\n", + "#pyplot.savefig('error.pdf'); add this line to save fig;" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 47 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#For Np=400 the precentage error is:\n", + "L_400_err = per_err[-1]\n", + "\n", + "print ('L_400_err = %.4f' %L_400_err)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "L_400_err = 3.3855\n" + ] + } + ], + "prompt_number": 48 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we expected, when the number of panels increases, the percentage error decreases. For $Np >60$ the percentage error is less than $5\\%$ which may be an acceptable value. As $Np$ keeps increasing, the error continues decreasing but slowly. For $Np=400$ the error is around $3.4\\%$, which is close to the value for $Np=200$ ($\\approx 3.5\\%$). Then, it is not worthwhile to solve for all these panels if we can get a similar result with smaller $Np$." + ] + }, + { + "cell_type": "heading", + "level": 5, + "metadata": {}, + "source": [ + "Challange task" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Try to do the same analysis we did in the last section, for the vortex-source panel method from [Lesson 11](http://nbviewer.ipython.org/github/barbagroup/AeroPython/blob/master/lessons/11_Lesson11_vortexSourcePanelMethod.ipynb) and compare the results." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##References" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Katz, J. & Plotkin, A. _Low speed aerodynamics. 1947-Second Edition \n", + "2. http://en.wikipedia.org/wiki/NACA_airfoil\n", + "3. http://turbmodels.larc.nasa.gov/naca0012_val.html\n", + "4. https://confluence.cornell.edu/display/SIMULATION/Flow+over+an+Airfoil+-+Exercises\n" + ] + }, + { + "cell_type": "heading", + "level": 6, + "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": 49, + "text": [ + "" + ] + } + ], + "prompt_number": 49 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/clementi/resources/A_matrix.png b/clementi/resources/A_matrix.png new file mode 100644 index 0000000..cf67912 Binary files /dev/null and b/clementi/resources/A_matrix.png differ diff --git a/clementi/resources/CP_Gregory_expdata_alpha_10.dat b/clementi/resources/CP_Gregory_expdata_alpha_10.dat new file mode 100644 index 0000000..53887eb --- /dev/null +++ b/clementi/resources/CP_Gregory_expdata_alpha_10.dat @@ -0,0 +1,32 @@ +# Data from Gregory & O'Reilly, NASA R&M 3726, Jan 1970 +# Re=2.88 million +# Data was digitized from a photocopy - hence is only approximate +# Data for upper airfoil surface only +# variables="x/c","cp" +#alpha=10 + + +0 -3.66423 +0.00218341 -5.04375 +0.00873362 -5.24068 +0.0131004 -4.67125 +0.0174672 -4.32079 +0.0480349 -2.74347 +0.0742358 -2.26115 +0.0982533 -1.95405 +0.124454 -1.7345 +0.146288 -1.55884 +0.176856 -1.36109 +0.28821 -1.00829 +0.320961 -0.941877 +0.384279 -0.787206 +0.447598 -0.654432 +0.515284 -0.543461 +0.576419 -0.432633 +0.637555 -0.343703 +0.700873 -0.254725 +0.766376 -0.1657 +0.831878 -0.098572 +0.893013 -0.00964205 +0.958515 0.0793835 +1 0.124088 diff --git a/clementi/resources/linear_el.svg b/clementi/resources/linear_el.svg new file mode 100644 index 0000000..6e6b48c --- /dev/null +++ b/clementi/resources/linear_el.svg @@ -0,0 +1,1083 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/clementi/resources/naca0012.dat b/clementi/resources/naca0012.dat new file mode 100644 index 0000000..fca6bce --- /dev/null +++ b/clementi/resources/naca0012.dat @@ -0,0 +1,130 @@ +1.0 0.0 +0.9994161 0.0013419 +0.9976658 0.001587 +0.9947532 0.0019938 +0.990685 0.0025595 +0.9854709 0.0032804 +0.9791229 0.0041519 +0.9716559 0.0051685 +0.9630873 0.0063238 +0.9534372 0.0076108 +0.942728 0.0090217 +0.9309849 0.0105485 +0.9182351 0.0121823 +0.9045085 0.0139143 +0.8898372 0.0157351 +0.8742554 0.0176353 +0.8577995 0.0196051 +0.8405079 0.0216347 +0.8224211 0.0237142 +0.8035813 0.0258337 +0.7840324 0.0279828 +0.7638202 0.0301515 +0.7429917 0.0323294 +0.7215958 0.0345058 +0.6996823 0.03667 +0.6773025 0.0388109 +0.6545085 0.0409174 +0.6313537 0.0429778 +0.6078921 0.0449802 +0.5841786 0.0469124 +0.5602683 0.0487619 +0.5362174 0.0505161 +0.5120819 0.052162 +0.4879181 0.0536866 +0.4637826 0.0550769 +0.4397317 0.05632 +0.4158215 0.0574033 +0.3921079 0.0583145 +0.3686463 0.0590419 +0.3454915 0.0595747 +0.3226976 0.0599028 +0.3003177 0.0600172 +0.2784042 0.0599102 +0.2570083 0.0595755 +0.2361799 0.0590081 +0.2159676 0.0582048 +0.1964187 0.057164 +0.1775789 0.0558856 +0.1594921 0.0543715 +0.1422005 0.0526251 +0.1257446 0.0506513 +0.1101628 0.0484567 +0.0954915 0.0460489 +0.0817649 0.0434371 +0.0690152 0.040631 +0.057272 0.0376414 +0.0465628 0.0344792 +0.0369127 0.0311559 +0.0283441 0.0276827 +0.0208771 0.0240706 +0.0145291 0.02033 +0.0093149 0.0164706 +0.0052468 0.0125011 +0.0023342 0.0084289 +0.0005839 0.0042603 +0.0 0.0 +0.0005839 -0.0042603 +0.0023342 -0.0084289 +0.0052468 -0.0125011 +0.0093149 -0.0164706 +0.0145291 -0.02033 +0.0208771 -0.0240706 +0.0283441 -0.0276827 +0.0369127 -0.0311559 +0.0465628 -0.0344792 +0.057272 -0.0376414 +0.0690152 -0.040631 +0.0817649 -0.0434371 +0.0954915 -0.0460489 +0.1101628 -0.0484567 +0.1257446 -0.0506513 +0.1422005 -0.0526251 +0.1594921 -0.0543715 +0.1775789 -0.0558856 +0.1964187 -0.057164 +0.2159676 -0.0582048 +0.2361799 -0.0590081 +0.2570083 -0.0595755 +0.2784042 -0.0599102 +0.3003177 -0.0600172 +0.3226976 -0.0599028 +0.3454915 -0.0595747 +0.3686463 -0.0590419 +0.3921079 -0.0583145 +0.4158215 -0.0574033 +0.4397317 -0.05632 +0.4637826 -0.0550769 +0.4879181 -0.0536866 +0.5120819 -0.052162 +0.5362174 -0.0505161 +0.5602683 -0.0487619 +0.5841786 -0.0469124 +0.6078921 -0.0449802 +0.6313537 -0.0429778 +0.6545085 -0.0409174 +0.6773025 -0.0388109 +0.6996823 -0.03667 +0.7215958 -0.0345058 +0.7429917 -0.0323294 +0.7638202 -0.0301515 +0.7840324 -0.0279828 +0.8035813 -0.0258337 +0.8224211 -0.0237142 +0.8405079 -0.0216347 +0.8577995 -0.0196051 +0.8742554 -0.0176353 +0.8898372 -0.0157351 +0.9045085 -0.0139143 +0.9182351 -0.0121823 +0.9309849 -0.0105485 +0.942728 -0.0090217 +0.9534372 -0.0076108 +0.9630873 -0.0063238 +0.9716559 -0.0051685 +0.9791229 -0.0041519 +0.9854709 -0.0032804 +0.990685 -0.0025595 +0.9947532 -0.0019938 +0.9976658 -0.001587 +0.9994161 -0.0013419 diff --git a/clementi/styles/custom.css b/clementi/styles/custom.css new file mode 100755 index 0000000..e47f2d9 --- /dev/null +++ b/clementi/styles/custom.css @@ -0,0 +1,143 @@ + + + + +