{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "###### Code created by Christopher Bell for Professor Lorena Barba's Aerodynamics and Hydrodynamics course at GWU." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Vortex Lattice Method" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Basics of VLMs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have some experience with Panel Methods, let's look at another form of panel method-- the Vortex Lattice Method (VLM). VLMs were created as an extension of Prandtl's lifting line theory in order to more accurately resolve low aspect-ratio straight wings, swept wings, and delta wings. This is accomplished by allowing the vortices' strengths to vary in the chord wise and spanwise direction--instead of just spanwise. VLMs overlay horseshoe vortices over a planar wing. The Biot-Savard Law is then used to calculate the induced velocities. The general layout of these horseshoe vortices can be seen below\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###### Image Credit: Bertin and Smith, Aerodynamics for Engineers, page 292." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This process is repeated for each individual panel and control point. All the control points are then summed to yield linear equations for the horshoe vortices' strengths. $\\delta$ is used to indicate streamwise vortex strength and $\\gamma$ is used to indicate cross-stream vortex strength. This is all done while still enforcing the same boundary condition from Panel methods. Do you remember it? Yep, the flow tangency condition. These vortex strengths are then used to get the total circulation around the lifting body. Using the circulation we can then find the lift." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### How are these panels and horseshoe vortices oriented?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The horseshoe vortices are typically placed at the $\\frac{1}{4}$-chord point of each panel, while the control points should be placed at the $\\frac{3}{4}$-chord point of each panel. This condition arises because of the relationship between circulation, $\\Gamma$, and the freestream velocity, $U_\\infty$. This relationship is given below as the circulation induces a velocity at the control point, $c$, with $r$ being the control point's distance from the vortex filament making up the horseshoe vortex:\n", "\n", "\\begin{equation}\n", "U = \\frac{\\Gamma}{2\\pi r}\n", "%\\label{eq:inducedvel}\n", "\\end{equation}\n", "\n", "The orientation of a single panel with respect to the freestream can be seen in the image below.\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###### Image Credit: Bertin and Smith, Aerodynamics for Engineers, page 293." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, forcing the flow to be parallel to the surface at every control point we get:\n", "\n", "\\begin{equation}\n", "\\alpha \\approx \\sin \\alpha = \\frac{U}{U_\\infty} = \\frac{\\Gamma}{2\\pi r U_\\infty}\n", "%\\label{eq:inducedfreestream}\n", "\\end{equation}\n", "\n", "Now we can use the Kutta-Joukowski theorm, $L = \\rho_\\infty U_\\infty \\Gamma$, and the previous equation to obtain\n", "\n", "\\begin{equation}\n", "\\pi \\rho_\\infty {U_\\infty}^2 c \\frac{\\Gamma}{2\\pi r U_\\infty} = \\rho_\\infty U_\\infty \\Gamma\n", "%\\label{eq:kutta_induced}\n", "\\end{equation}\n", "\n", "Now, we solve for $r$ to find where the control point should be located relative to the horseshoe vortex for each panel. This yields $r = \\frac{c}{2}$ which since the vortex is located at the $\\frac{1}{4}$-chord means that the control point should be placed at the $\\frac{3}{4}$-chord point.\n", "\n", "The panel themselves are also typically aligned with the wing's sweep angle as seen in the previous figure.\n", "\n", "\n", " It is also important to decide how to treat the wake region with the tails of the horseshoe vortices going to infinity. In a fully 3D code, the panels would be located on the mean camber surface of the wing which would yield curved trailing vortices paths. For simplicitly, this code will not be treating the airfoil in this way because past work has demonstrated the ability for straight line trailing vortices to be accurate. We also need to decided which axis to align the trialing vortices with--the aircraft centerline or the freestream. We will be using the aircraft centerline." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Warning!! Lots of Math Ahead" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Induced Velocities" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we need to derive how we will calculate the induced velocities on the wing from the horseshoe vortices. The defining geometry for this derivation is below. Segment $\\overrightarrow{AB}$ is a vorticity vector and point $C$, is any point in space.\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###### Image Credit: Bertin and Smith, Aerodynamics for Engineers, page 294." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From undergraduate aerodynamics, we know that the induced velocity from a vortex is given by the Biot-Savart Law:\n", "\n", "\\begin{equation}\n", "\\overrightarrow{dV} = \\frac{\\Gamma_n \\left(\\overrightarrow{dl} \\times \\overrightarrow{r}\\right)}{4\\pi r^3}\n", "%\\label{eq:BiotSavart}\n", "\\end{equation}\n", "\n", "When applied to our specific geometry it simplifies to:\n", "\n", "\\begin{equation}\n", "dV = \\frac{\\Gamma_n \\sin \\theta dl}{4\\pi r^2}\n", "%\\label{eq:specificBSL}\n", "\\end{equation}\n", "\n", "Now, we can use this relation to calculate the induced velocites from the horseshoe vortices. Before we begin though, let's try and make our derivation a little easier. If we use the nomenclature in the image below, we can separate the horseshoe vortex into 3 separate vortices--one vortex stretching from $A$ to $\\infty$, one vortex stretching from $B$ to $\\infty$, and one vortex from $A$ to $B$.\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###### Image Credit: Bertin and Smith, Aerodynamics for Engineers, page 295." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Using the Biot-Savart Law, we can now calculate the induced velocity at some point $c$ whose distance from $\\overrightarrow{AB}$ is $r_p$.\n", "\n", "\\begin{equation}\n", "V = \\frac{\\Gamma_n}{4\\pi r_p}\\int_{\\theta_1}^{\\theta_2} \\sin \\theta d \\theta = \\frac{\\Gamma_n}{4\\pi r_p}\\left(\\cos \\theta_1 - \\cos \\theta_2\\right)\n", "%\\label{eq:BSL_genpoint}\n", "\\end{equation}\n", "\n", "This simplifies further when $r_p$ is extended to $\\infty$:\n", "\n", "\\begin{equation}\n", "V = \\frac{\\Gamma_n}{4\\pi r_p}\\left(\\cos\\left(0\\right) - \\cos\\left(\\pi\\right)\\right) = \\frac{\\Gamma_n}{2\\pi r_p}\n", "%\\label{eq:BSL_infty}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we want to apply this law more generally, so first we are going to define some more general variables and relationships according to the below figure:\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###### Image Credit: Bertin and Smith, Aerodynamics for Engineers, page 297." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\begin{equation}\n", "\\overrightarrow{r_0} = \\overrightarrow{AB}\n", "%\\label{eq:r0}\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "\\overrightarrow{r_1} = \\overrightarrow{AC}\n", "%\\label{eq:r1}\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "\\overrightarrow{r_2} = \\overrightarrow{BC}\n", "%\\label{eq:r2}\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "r_p = \\frac{\\left|\\overrightarrow{r_1} \\times \\overrightarrow{r_2}\\right|}{r_0}\n", "%\\label{eq:rp}\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "\\cos \\theta_1 = \\frac{\\overrightarrow{r_0} \\cdot \\overrightarrow{r_1}}{r_0 r_1}\n", "%\\label{eq:cos1}\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "\\cos \\theta_2 = \\frac{\\overrightarrow{r_0} \\cdot \\overrightarrow{r_2}}{r_0 r_2}\n", "%\\label{eq:cos2}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can use the above relations with Biot-Savard Law to obtain the induced velocity in terms of the distance vectors rather than angles:\n", "\n", "\\begin{equation}\n", "\\overrightarrow{V} = \\frac{\\Gamma_n}{4\\pi}\\frac{\\vec{r_1} \\times \\vec{r_2}}{\\left| \\vec{r_1} \\times \\vec{r_2} \\right|^2} \\left[ \\vec{r_0} \\cdot \\left(\\frac{\\vec{r_1}}{r_1} - \\frac{\\vec{r_2}}{r_2}\\right) \\right]\n", "%\\label{eq:vel_dist}\n", "\\end{equation}\n", "\n", "The direction of the induced velocity is given by:\n", "\n", "\\begin{equation}\n", "\\frac{\\vec{r_1} \\times \\vec{r_2}}{\\left| \\vec{r_1} \\times \\vec{r_2} \\right|}\n", "%\\label{eq:vel_dir}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can use velocity in terms of the distance vectors to calculate the induced velocity at some generalized panel, n! First, let's start with vortex segment $\\overrightarrow{AB}$ which was defined earlier. For this segment, $r_0$, $r_1$, and $r_2$ become:\n", "\n", "\\begin{equation}\n", "\\vec{r_0} = \\overrightarrow{AB} = \\left(x_{2n} - x_{1n} \\right)\\hat{i} + \\left(y_{2n} - y_{1n} \\right)\\hat{j} + \\left(z_{2n} - z_{1n} \\right)\\hat{k}\n", "%\\label{eq:r0_AB}\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "\\overrightarrow{r_1} = \\left(x - x_{1n} \\right)\\hat{i} + \\left(y - y_{1n} \\right)\\hat{j} + \\left(z - z_{1n} \\right)\\hat{k}\n", "%\\label{eq:r1_AB}\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "\\overrightarrow{r_2} = \\left(x -x_{2n} \\right)\\hat{i} + \\left(y -y_{2n} \\right)\\hat{j} + \\left(z - z_{2n} \\right)\\hat{k}\n", "%\\label{eq:r2_AB}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Applying these values to the velocity in terms of the distance vectors we get:\n", "\\begin{equation}\n", "\\overrightarrow{V_{AB}} = \\frac{\\Gamma_n}{4\\pi}\\left[Fac1_{AB} \\right] \\left[Fac2_{AB} \\right]\n", "%\\label{eq:AB_portion}\n", "\\end{equation}\n", "\n", "In the above equation the last two factors are just place holders for the last two factors from the equation it falls out of applied to $\\overrightarrow{AB}$. These two factors expand to:\n", "\n", "\\begin{equation}\n", "\\left[Fac1_{AB} \\right] = \\frac{\\vec{r_1} \\times \\vec{r_2}}{\\left|\\vec{r_1} \\times \\vec{r_2} \\right|^2} =\\\\ \\frac{\\left[\\left(y - y_{1n}\\right)\\left(z - z_{2n}\\right) - \\left(y -y_{2n}\\right)\\left(z - z_{1n}\\right)\\right]\\hat{i}\n", " - \\left[\\left(x - x_{1n}\\right)\\left(z - z_{2n}\\right) - \\left(x -x_{2n}\\right)\\left(z - z_{1n}\\right)\\right]\\hat{j}\n", " + \\left[\\left(x - x_{1n}\\right)\\left(y - y_{2n}\\right) - \\left(x -x_{2n}\\right)\\left(y - y_{1n}\\right)\\right]\\hat{k}}\n", " {\\left[\\left(y - y_{1n}\\right)\\left(z - z_{2n}\\right) - \\left(y -y_{2n}\\right)\\left(z - z_{1n}\\right)\\right]^2\n", " - \\left[\\left(x - x_{1n}\\right)\\left(z - z_{2n}\\right) - \\left(x -x_{2n}\\right)\\left(z - z_{1n}\\right)\\right]^2 +\n", " \\left[\\left(x - x_{1n}\\right)\\left(y - y_{2n}\\right) - \\left(x -x_{2n}\\right)\\left(y - y_{1n}\\right)\\right]^2}\n", "%\\label{eq:fac1AB}\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "\\left[Fac2_{AB} \\right] = \\left(\\vec{r_0} \\cdot \\frac{\\vec{r_1}}{r_1} - \\vec{r_0} \\cdot \\frac{\\vec{r_2}}{r_2} \\right) = \\frac{\\left[\\left(x_{2n} - x_{1n}\\right)\\left(x -x_{1n}\\right) \n", "+ \\left(y_{2n} - y_{1n}\\right)\\left(y - y_{1n}\\right) \n", "+ \\left(z_{2n} - z_{1n}\\right)\\left(z - z_{1n}\\right)\\right]}\n", "{\\sqrt{\\left(x - x_{1n}\\right)^2 + \\left(y - y_{1n}\\right)^2 + \\left(z - z_{1n}\\right)^2}} \n", "- \\frac{\\left[\\left(x_{2n} - x_{1n}\\right)\\left(x -x_{2n}\\right) \n", "+ \\left(y_{2n} - y_{1n}\\right)\\left(y - y_{2n}\\right) \n", "+ \\left(z_{2n} - z_{1n}\\right)\\left(z - z_{2n}\\right)\\right]}\n", "{\\sqrt{\\left(x - x_{2n}\\right)^2 + \\left(y - y_{2n}\\right)^2 + \\left(z - z_{2n}\\right)^2}}\n", "%\\label(eq:fac2AB}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we follow the same process for vortex segment $\\overrightarrow{AD}$:\n", "\n", "\\begin{equation}\n", "\\vec{r_0} = \\overrightarrow{DA} = \\left(x_{1n} - x_{3n} \\right)\\hat{i} + \n", "%\\label{eq:r0_DA}\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "\\overrightarrow{r_1} = \\left(x - x_{3n} \\right)\\hat{i} + \\left(y - y_{1n} \\right)\\hat{j} + \\left(z - z_{1n} \\right)\\hat{k}\n", "%\\label{eq:r1_DA}\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "\\overrightarrow{r_2} = \\left(x -x_{1n} \\right)\\hat{i} + \\left(y -y_{1n} \\right)\\hat{j} + \\left(z - z_{1n} \\right)\\hat{k}\n", "%\\label{eq:r2_DA}\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "\\overrightarrow{V_{AD}} = \\frac{\\Gamma_n}{4\\pi}\\left[Fac1_{AD} \\right] \\left[Fac2_{AD} \\right]\n", "%\\label{eq:AB_portion}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\begin{equation}\n", "\\left[ Fac1_{AD}\\right] = \\frac{\\left(z -z_{1n}\\right)\\hat{j} + \\left(y_{1n} - y\\right)\\hat{k}}{\\left[\\left(z - z_{1n}\\right)^2 + \\left(y_{1n} - y\\right)^2\\right] \\left(x_{3n} - x_{1n}\\right)}\n", "%\\label{eq:Fac1_AD}\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "\\left[Fac2_{AD}\\right] = \\left(x_{3n} - x_{1n}\\right)\\left[\\frac{x_{3n} - x}{\\sqrt{\\left(x - x_{3n}\\right)^2 + \\left(y -y_{1n}\\right)^2 + \\left(z - z_{1n}\\right)^2}} + \\frac{x - x_{1n}}{\\sqrt{\\left(x - x_{1n}\\right)^2 + \\left(y -y_{1n}\\right)^2 + \\left(z - z_{1n}\\right)^2}}\\right]\n", "%\\label{eq:Fac2_AD}\n", "\\end{equation}\n", "\n", "The two equations directly above are both formulated for a discrete location of $D$, but in VLMs we want $D$ to go to $\\infty$. So, we allow $D$ to go to $\\infty$ by setting $x_3 = \\infty$. This yields the final equation for the induced velocity from this vortex segment of:\n", "\n", "\\begin{equation}\n", "\\overrightarrow{V_{A\\infty}} = \\frac{\\Gamma_n}{4\\pi}\\left[\\frac{\\left(z -z_{1n}\\right)\\hat{j} + \\left(y_{1n} - y\\right)\\hat{k}}{\\left(z - z_{1n}\\right)^2 + \\left(y_{1n} - y\\right)^2}\\right]\\left[1.0 + \\frac{x - x_{1n}}{\\sqrt{\\left(x - x_{1n}\\right)^2 + \\left(y -y_{1n}\\right)^2 + \\left(z - z_{1n}\\right)^2}}\\right]\n", "%\\label{eq:Ainfty_portion}\n", "\\end{equation}\n", "\n", "Following the same process, we can find the induced velocity over the other infinite leg of the horshoe vortex.\n", "\n", "\\begin{equation}\n", "\\overrightarrow{V_{B\\infty}} = \\frac{-\\Gamma_n}{4\\pi}\\left[\\frac{\\left(z -z_{2n}\\right)\\hat{j} + \\left(y_{2n} - y\\right)\\hat{k}}{\\left(z - z_{2n}\\right)^2 + \\left(y_{2n} - y\\right)^2}\\right]\\left[1.0 + \\frac{x - x_{2n}}{\\sqrt{\\left(x - x_{2n}\\right)^2 + \\left(y -y_{2n}\\right)^2 + \\left(z - z_{2n}\\right)^2}}\\right]\n", "%\\label{eq:Binfty_portion}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some quick housekeeping of variables, $\\left(x_m,y_m,z_m\\right)$ will designate the coordinates of the mth-panel's control point and the induced velocity at the mth-panel's control point by panel n is $\\overrightarrow{V_{m,n}}$ \n", "\n", "Now we can find the induced velocity at any control point from any panel by summing the 3 individual vortex parts and solving the linear equation below for the total induced velocity. \n", "\n", "\\begin{equation}\n", "\\overrightarrow{V_{m,n}} = \\overrightarrow{C_{m,n}}\\Gamma_n\n", "%\\label{eq:lin_syst}\n", "\\end{equation}\n", "\n", "The benefit of this equation being linear is to find the total induced velocity at control point m simply requires us to sum the individual component from each panel. This reduces the last equation to:\n", "\n", "$$\\overrightarrow{V} = \\sum_{n=1}^{2N} \\overrightarrow{C_{m,n}} \\Gamma_n$$\n", "\n", "\n", "where we sum to $2N$ because we need to account for both the left (port) and right (starboard) wings." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Boundary Conditions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That takes care of the induced velocity calculations, but did you notice that we have a problem? We don't have the strengths of the vortices! However, we can find the strengths by using the same boundary condition we did in our basic panel method. We set the flow to be tangent to the wing at every control point. For an arbitraritly shaped wing this boundary condition is satisfied by the equation:\n", "\n", "\\begin{equation}\n", "\\begin{split}\n", "-u_m \\sin \\delta \\cos & \\phi - v_m \\cos \\delta sin \\phi + w_m \\cos \\phi \\cos \\delta\\\\ & + U_{\\infty}\\sin \\left(\\alpha - \\delta\\right) \\cos \\phi = 0\n", "\\end{split}\n", "%\\label{eq:gen_BCs}\n", "\\end{equation}\n", "\n", "Where $\\phi$ is the dihedral angle, $\\delta$ is the mean camber at the control\n", "point, and $\\alpha$ is the angle of attack of the airfoil. We can also calculate $\\delta$:\n", "\n", "\\begin{equation}\n", "\\delta = \\tan^{-1} \\left(\\frac{dz}{dx}\\right)_m\n", "%\\label{eq:delta}\n", "\\end{equation}\n", "\n", "If we assume that the mean camber line is small and the angle of attack is small the boundary condition equation simplifies to:\n", "\n", "\\begin{equation}\n", "w_m - v_m \\tan \\phi + U_{\\infty}\\left[\\alpha - \\left(\\frac{dz}{dx}\\right)_m\\right] = 0\n", "%\\label{eq:simp_BCs}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basic Validation Example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our validation example will be a simple 4 panel planar wing as found in Bertin and Smith's textbook. Following this example, will allow for a basic code to be create and checked before moving on to more complex examples which will be checked with experimental data. The main simplifying assumptions for the planar wing is that $z_{1n} = z_{2n} = 0$ and $z_m = 0$ for the control points.\n", "\n", "The wing will have an aspect ratio of 5, no taper, uncambered, and constant sweep of $45^{\\circ}$. The chord is $0.2b$ and spans $0.5b$. An image of the wing in this problem is below.\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###### Image Credit: Bertin and Smith, Aerodynamics for Engineers, page 301." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because we have a planar wing our main equations simplfy somewhat:\n", "\n", "\\begin{equation}\n", "\\overrightarrow{V_{AB}} = \\frac{\\Gamma_n}{4\\pi} \\frac{\\hat{k}}{\\left(x_m - x_{1n}\\right)\\left(y_m - y_{2n}\\right) - \\left(x_m - x_{2n}\\right) \\left(y_m - y_{1n}\\right)} \\left[ \\frac{\\left(x_{2n} - x_{1n}\\right) \\left(x_m - x_{1n}\\right) + \\left( y_{2n} - y_{1n}\\right)\\left(y_m - y_{1n}\\right)}{\\sqrt{\\left(x_m - x_{1n}\\right)^2 + \\left(y_m - y_{1n}\\right)^2}} - \\frac{\\left(x_{2n} - x_{1n}\\right) \\left(x_m - x_{2n}\\right) + \\left( y_{2n} - y_{1n}\\right)\\left(y_m - y_{2n}\\right)}{\\sqrt{\\left(x_m - x_{2n}\\right)^2 + \\left(y_m - y_{2n}\\right)^2}}\\right]\n", "%\\label{eq:Planar_AB}\n", "\\end{equation}\n", " \n", "\\begin{equation}\n", "\\overrightarrow{V_{A\\infty}} = \\frac{\\Gamma_n}{4\\pi} \\frac{\\hat{k}}{y_{1n} - y_m} \\left[1.0 + \\frac{x_m - x_{1n}}{\\sqrt{\\left(x_m - x_{1n}\\right)^2 + \\left(y_m - y_{1n}\\right)^2}} \\right]\n", "%\\label{eq:Planar_Ainfty}\n", "\\end{equation}\n", "\n", "\\begin{equation}\n", "\\overrightarrow{V_{B\\infty}} = \\frac{\\Gamma_n}{4\\pi} \\frac{\\hat{k}}{y_{2n} - y_m} \\left[1.0 + \\frac{x_m - x_{2n}}{\\sqrt{\\left(x_m - x_{2n}\\right)^2 + \\left(y_m - y_{2n}\\right)^2}} \\right]\n", "%\\label{eq:Planar_Binfty}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since all the induced velocities in the previous 3 equations are in the z-direction we can convert this to one equation. Also, because the induced velocity is in the z-direction we will call it the downwash, $w$.\n", "\n", "\\begin{equation}\n", "w_{m,n} = \\frac{\\Gamma_n}{4\\pi} \\left[\\frac{\\hat{1}}{\\left(x_m - x_{1n}\\right)\\left(y_m - y_{2n}\\right) - \\left(x_m - x_{2n}\\right) \\left(y_m - y_{1n}\\right)} \\left[ \\frac{\\left(x_{2n} - x_{1n}\\right) \\left(x_m - x_{1n}\\right) + \\left( y_{2n} - y_{1n}\\right)\\left(y_m - y_{1n}\\right)}{\\sqrt{\\left(x_m - x_{1n}\\right)^2 + \\left(y_m - y_{1n}\\right)^2}} - \\frac{\\left(x_{2n} - x_{1n}\\right) \\left(x_m - x_{2n}\\right) + \\left( y_{2n} - y_{1n}\\right)\\left(y_m - y_{2n}\\right)}{\\sqrt{\\left(x_m - x_{2n}\\right)^2 + \\left(y_m - y_{2n}\\right)^2}}\\right] + \\frac{\\hat{k}}{y_{1n} - y_m} \\left[1.0 + \\frac{x_m - x_{1n}}{\\sqrt{\\left(x_m - x_{1n}\\right)^2 + \\left(y_m - y_{1n}\\right)^2}} \\right] - \\frac{\\hat{k}}{y_{2n} - y_m} \\left[1.0 + \\frac{x_m - x_{2n}}{\\sqrt{\\left(x_m - x_{2n}\\right)^2 + \\left(y_m - y_{2n}\\right)^2}} \\right]\\right]\n", "%\\label{eq:downwash}\n", "\\end{equation}\n", "\n", "Now we just need to sum the last equation for all the panels to get the total effect. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Planar wing also has a minor effect on Boundary Conditions.\n", "\n", "\\begin{equation}\n", "w_m = -U_{\\infty} \\alpha\n", "%\\label{eq:downwash_BC}\n", "\\end{equation}\n", "\n", "Finally, let's get coding..." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import numpy as np\n", "import math\n", "import scipy as sp\n", "from matplotlib import pyplot as plt" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "chord = 1.0 #meters\n", "b = 5.0 #Span\n", "AR = b/chord\n", "val_x, val_y = 0.1, 0.2\n", "\n", "#Starboard Wing\n", "with open ('./VLM_resources/VLM_Example_Airfoil.txt') as file_name:\n", " num_star, x_star, y_star = np.loadtxt(file_name, dtype=float,\\\n", " delimiter='\\t', unpack=True)\n", "\n", "x_min_star, x_max_star = np.min(np.abs(x_star)), np.max(np.abs(x_star))\n", "y_min_star, y_max_star = np.min(np.abs(y_star)), np.max(np.abs(y_star))\n", "x_start_star, x_end_star = x_min_star-val_x*(x_max_star-x_min_star),\\\n", " x_max_star+val_x*(x_max_star-x_min_star)\n", "y_start_star, y_end_star = y_min_star-val_y*(y_max_star-y_min_star),\\\n", " y_max_star+val_y*(y_max_star-y_min_star)\n", "\n", "#Port Wing\n", "with open ('./VLM_resources/VLM_Example_Airfoil.txt') as file_name:\n", " num_port, x_port, y_port = np.loadtxt(file_name, dtype=float,\\\n", " delimiter='\\t', unpack=True)\n", "\n", "x_port = np.dot(x_port,-1)\n", "x_min_port, x_max_port = np.min(np.abs(x_port)), np.max(np.abs(x_port))\n", "y_min_port, y_max_port = np.min(np.abs(y_port)), np.max(np.abs(y_port))\n", "x_start_port, x_end_port = x_min_port-val_x*(x_max_port-x_min_port),\\\n", " x_max_port+val_x*(x_max_port-x_min_port)\n", "y_start_port, y_end_port = y_min_port-val_y*(y_max_port-y_min_port),\\\n", " y_max_port+val_y*(y_max_port-y_min_port)\n", "\n", "%matplotlib inline\n", "size = 6\n", "plt.figure(figsize=(size,size))\n", "plt.grid(True)\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "plt.xlim(-(x_max_port+1.0), x_max_star+1.0)\n", "plt.ylim(-(y_max_star+1.0), 1.0)\n", "plt.title('Example Airfoil Points')\n", "plt.plot(x_star, y_star, color='k', linestyle='-',linewidth=2)\n", "plt.plot(x_port, y_port, color='b', linestyle='-', linewidth=2);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have imported the entire wing we need to divide the Wing up into panels. To simplfy the code we will be calculating the circulation for each panel on the starboard wing due to the panels on both the starboard and port wings. instead of repeating this process on the port side we simply make the assumption that it produces equal amounts of lift as the starboard wing." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "class Panel:\n", " \"\"\"Contains information related to a panel\"\"\"\n", " def __init__(self, xa, ya, xb, yb, xc, yc, xd, yd, chord, i, N_panels):\n", " \"\"\"Initializes the panel\n", " \n", " Params:\n", " --------\n", " xa, ya float, coordinates of the left LE point of a panel\n", " xb, yb float, coordinates of the right LE point of a panel\n", " xc, yc float, coordinates of the right TE point of a panel\n", " xd, yd float, coordinates of the left TE point of a panel\n", " \"\"\"\n", " \n", " #panel corners\n", " self.xa, self.ya = xa, ya\n", " self.xb, self.yb = xb, yb\n", " self.xc, self.yc = xc, yc\n", " self.xd, self.yd = xd, yd\n", " self.chord = chord\n", " \n", " #placing control point at 3/4 chord\n", " self.x_control = (self.xa+self.xb)/2\n", " #self.y_control = ya - (chord*(3.0/4.0))\n", " self.y_control = ya - ((math.fabs(self.yb-self.ya)/2.0)+(3.0/4.0)\\\n", " *self.chord)\n", " \n", " #Left Front of Horseshoe points \n", " #front of horseshoe x coord\n", " self.x1n = xa\n", " #front of horseshoe y coord\n", " self.y1n = ya - (chord*(1.0/4.0))\n", " \n", " #Right Front of Horshoe points\n", " self.x2n = xb\n", " self.y2n = yb - (chord*(1.0/4.0))\n", " \n", " #arrays of panel corners\n", " self.x_square = [self.xa, self.xb, self.xc, self.xd]\n", " self.y_square = [self.ya, self.yb, self.yc, self.yd]\n", " \n", " self.Gamma = 0.0 #circulation" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "N_panels = 8 #Total Number of Panels\n", "#starboard Wing\n", "x_ends1_star = np.linspace(0, x_max_star, (N_panels/2) + 1)\n", "y_ends1_star = np.linspace(0, -(x_max_star-x_min_star), (N_panels/2) + 1)\n", "x_ends2_star = x_ends1_star.copy()\n", "y_ends2_star = y_ends1_star.copy() - 1\n", "\n", "panels_star = np.empty(N_panels/2, dtype=object)\n", "for i in xrange(N_panels/2):\n", " panels_star[i] = Panel(x_ends1_star[i], y_ends1_star[i], x_ends1_star[i+1],\\\n", " y_ends1_star[i+1], x_ends2_star[i], y_ends2_star[i], x_ends2_star[i+1],\\\n", " y_ends2_star[i+1], chord, i, N_panels/2)\n", "\n", "#Port Wing\n", "x_ends1_port = np.linspace(0, -x_max_port, (N_panels/2) + 1)\n", "y_ends1_port = np.linspace(0, -(x_max_port-x_min_port), (N_panels/2) + 1)\n", "x_ends2_port = x_ends1_port.copy()\n", "y_ends2_port = y_ends1_port.copy() - 1\n", "\n", "panels_port = np.empty(N_panels/2, dtype=object)\n", "for i in xrange(N_panels/2):\n", " panels_port[i] = Panel(x_ends1_port[i], y_ends1_port[i], x_ends1_port[i+1],\\\n", " y_ends1_port[i+1], x_ends2_port[i], y_ends2_port[i], x_ends2_port[i+1],\\\n", " y_ends2_port[i+1], chord, i, N_panels/2) \n", " \n", "%matplotlib inline\n", "size = 8\n", "plt.figure(figsize=(size,size))\n", "plt.grid(True)\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "#plt.xlim(x_min-0.5,x_max+0.5)\n", "#plt.ylim(y_min-0.5,y_max+0.5)\n", "plt.plot(x_star, y_star, color='k', linestyle='-', linewidth=1, label='Wing')\n", "plt.plot(x_port, y_port, color='b', linestyle='-', linewidth=1, label=\"\")\n", "plt.scatter([p.x_square for p in panels_star],[p.y_square for p in panels_star],\\\n", " color='r', s=120, label=\"End-Points\")\n", "plt.scatter([p.x_square for p in panels_port],[p.y_square for p in panels_port],\\\n", " color='r', s=120, label=\"\")\n", "plt.scatter([p.x_control for p in panels_star],[p.y_control for p in panels_star],\\\n", " color='k',s=60, label=\"Control-Points\")\n", "plt.scatter([p.x_control for p in panels_port],[p.y_control for p in panels_port],\\\n", " color='k',s=60, label=\"\")\n", "plt.scatter([p.x1n for p in panels_star],[p.y1n for p in panels_star],\\\n", " color='m', s=60, zorder=3, label=\"Left Horseshoe Points\")\n", "plt.scatter([p.x1n for p in panels_port],[p.y1n for p in panels_port],\\\n", " color='m', s=60, zorder=4, label=\"\")\n", "plt.scatter([p.x2n for p in panels_star],[p.y2n for p in panels_star],\\\n", " color='c', s=120, zorder=1, label=\"Right Horseshoe Points\")\n", "plt.scatter([p.x2n for p in panels_port],[p.y2n for p in panels_port],\\\n", " color='c', s=120, zorder=2, label=\"\")\n", "plt.legend(loc='best', prop={'size':16})\n", "plt.title('Wing with Panels');" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#Defining arrays of control and horseshoe points\n", "y1ns_star = [p.x1n for p in panels_star]\n", "x1ns_star = np.abs([p.y1n for p in panels_star])\n", "y2ns_star = [p.x2n for p in panels_star]\n", "x2ns_star = np.abs([p.y2n for p in panels_star])\n", "ym_star = [p.x_control for p in panels_star]\n", "xm_star = np.abs([p.y_control for p in panels_star])\n", "\n", "y1ns_port = [p.x1n for p in panels_port]\n", "x1ns_port = np.abs([p.y1n for p in panels_port])\n", "y2ns_port = [p.x2n for p in panels_port]\n", "x2ns_port = np.abs([p.y2n for p in panels_port])\n", "ym_port = [p.x_control for p in panels_port]\n", "xm_port = np.abs([p.y_control for p in panels_port])" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def downwash(x1n, x2n, y1n, y2n, xm, ym, b):\n", " \"\"\"Sets the Horseshoe Vortex Parameters\n", "\n", " Params:\n", " --------\n", " Gamma float, circulation strength\n", " N_panels float, number of panels\n", " x1n, y1n coordinates of left front of horseshoe\n", " x2n, y2n coordinates of right front of horseshoe\n", " x_m, y_m control point coordinates\n", " \"\"\"\n", "\n", " #m panel influence calculated on\n", " #n panel influence calculated from\n", "\n", " w = (((1.0/(((xm - x1n)*(ym - y2n)) - ((xm - x2n)*(ym - y1n)))) *\\\n", " (((((x2n - x1n)*(xm - x1n)) + ((y2n - y1n)*(ym - y1n)))/\\\n", " (math.sqrt((xm - x1n)**2 + (ym - y1n)**2)))\\\n", " - ((((x2n - x1n)*(xm - x2n) + (y2n - y1n)*(ym - y2n)))/\\\n", " (math.sqrt((xm - x2n)**2 + (ym - y2n)**2)))) +\\\n", " (((1.0)/(y1n - ym))*(1.0 + ((xm - x1n)/(math.sqrt((xm - x1n)**2\\\n", " + (ym - y1n)**2))))) - (((1.0)/(y2n - ym)) *(1.0 + ((xm -x2n)/\\\n", " (math.sqrt((xm - x2n)**2 + (ym - y2n)**2))))))) * b\n", " \n", " return w" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "w_star = np.empty((N_panels/2,N_panels/2), dtype=float)\n", "w_port = np.empty((N_panels/2,N_panels/2), dtype=float)\n", "for m in range(0,N_panels/2):\n", " for n in range(0,N_panels/2):\n", " w_star[m,n] = downwash(x1ns_star[n], x2ns_star[n], y1ns_star[n],\\\n", " y2ns_star[n], xm_star[m], ym_star[m], b)\n", " w_port[m,n] = -downwash(x1ns_port[n], x2ns_port[n], y1ns_port[n],\\\n", " y2ns_port[n], xm_port[m], ym_star[m], b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we add the two downwash terms as the circulation for each starboard panel and its mirror will be equal. So in this case, with only 4 panels we have 4 unknown circulations." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[-53.00368589 13.34368912 1.66435054 0.64336392]\n", " [ 23.8317548 -70.34449257 11.78361069 1.32593639]\n", " [ 5.42715647 20.94010013 -71.14109518 11.51112481]\n", " [ 2.49422268 4.36257137 20.50693616 -71.33508627]]\n" ] } ], "source": [ "w = w_star + w_port\n", "print w" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What makes this problem simpler is that we have a planar wing with no dihedral, so the downwash contributions from each panel must be equal." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#Build RHS matrix\n", "M = 0.6 #mach\n", "u_infty = 340.29 * M\n", "alpha = 5.0*(math.pi/180) #radians\n", "RHS = np.zeros(N_panels/2, dtype=float) \n", "for i in range(0,N_panels/2):\n", " RHS[i] = -4.0*math.pi*b*u_infty*alpha" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Gamma = np.linalg.solve(w,RHS)\n", "rho = .4135 #kg/m3\n", "q_infty = 0.5*rho*u_infty**2\n", "S = b*chord #wing area\n", "delta_y = y2ns_star[0]\n", "L_numerical = 2.0*rho*u_infty*sum(np.dot(Gamma,delta_y))\n", "L_book = rho*u_infty**2*b**2*math.pi*alpha*.1096\n", "C_L_numerical = L_numerical/(q_infty*S)\n", "C_L_book = 1.096*math.pi*alpha" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's print the values and compare to the book..." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Our Calculated Lift is 12952.547129, the books calculated L is 12948.641162\n", "Our Calculated C_L is 0.300565, the books calculated C_L is 0.300475\n" ] } ], "source": [ "print \"Our Calculated Lift is %f, the books calculated L is %f\" % (L_numerical, L_book)\n", "print \"Our Calculated C_L is %f, the books calculated C_L is %f\" % (C_L_numerical, C_L_book)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The values agree! It looks like our code is working now we can have some fun with it. First, let's turn our code into a function so it's easier to work with. Then, we can add some more panels and see what happens." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def VLM(N_Panels, x_star, y_star, x_port, y_port, M, AoA, b, chord):\n", " \"\"\"Uses the Vortex Lattice Method to Calculate the Lift over a flat\n", " constant sweep and zero taper wing\n", " \n", " Params:\n", " -------\n", " N_Panels float, total number of desired panels\n", " x_star, y_star 1D array of floats, x and y coordinates for starboard \n", " side of wing\n", " x_port, y_port 1D array of floats, x and y coordinates for port \n", " side of wing\n", " M float, mach number\n", " AoA float, angle of attack in degrees\n", " b float, span of the airfoil\n", " chord float, chord of the airfoil\n", " \n", " Returns:\n", " -------\n", " L float, Total lift for the airfoil\n", " C_L float, Coefficient of Lift for the airfoil\n", " \"\"\"\n", " \n", " #Defining special starboard points\n", " x_min_star = np.min(np.abs(x_star)) \n", " x_max_star = np.max(np.abs(x_star))\n", " y_min_star = np.min(np.abs(y_star))\n", " y_max_star = np.max(np.abs(y_star))\n", " x_start_star = x_min_star-val_x*(x_max_star-x_min_star)\n", " x_end_star = x_max_star+val_x*(x_max_star-x_min_star)\n", " y_start_star = y_min_star-val_y*(y_max_star-y_min_star)\n", " y_end_star = y_max_star+val_y*(y_max_star-y_min_star)\n", "\n", " #Defining Special Port Points\n", " x_min_port = np.min(np.abs(x_port))\n", " x_max_port = np.max(np.abs(x_port))\n", " y_min_port = np.min(np.abs(y_port))\n", " y_max_port = np.max(np.abs(y_port))\n", " x_start_port = x_min_port-val_x*(x_max_port-x_min_port)\n", " x_end_port = x_max_port+val_x*(x_max_port-x_min_port)\n", " y_start_port = y_min_port-val_y*(y_max_port-y_min_port)\n", " y_end_port = y_max_port+val_y*(y_max_port-y_min_port)\n", " \n", " #Starboard Wing Point Definitions\n", " x_ends1_star = np.linspace(0, x_max_star, (N_panels/2) + 1)\n", " y_ends1_star = np.linspace(0, -(x_max_star-x_min_star), (N_panels/2) + 1)\n", " x_ends2_star = x_ends1_star.copy()\n", " y_ends2_star = y_ends1_star.copy() - 1\n", "\n", " #Defining Starboard Panels\n", " panels_star = np.empty(N_panels/2, dtype=object)\n", " for i in xrange(N_panels/2):\n", " panels_star[i] = Panel(x_ends1_star[i], y_ends1_star[i],\\\n", " x_ends1_star[i+1], y_ends1_star[i+1], x_ends2_star[i],\\\n", " y_ends2_star[i], x_ends2_star[i+1], y_ends2_star[i+1],\\\n", " chord, i, N_panels/2)\n", "\n", " #Port Wing Point Definitions\n", " x_ends1_port = np.linspace(0, -x_max_port, (N_panels/2) + 1)\n", " y_ends1_port = np.linspace(0, -(x_max_port-x_min_port), (N_panels/2) + 1)\n", " x_ends2_port = x_ends1_port.copy()\n", " y_ends2_port = y_ends1_port.copy() - 1\n", "\n", " #Defining Port Panels\n", " panels_port = np.empty(N_panels/2, dtype=object)\n", " for i in xrange(N_panels/2):\n", " panels_port[i] = Panel(x_ends1_port[i], y_ends1_port[i],\\\n", " x_ends1_port[i+1], y_ends1_port[i+1],x_ends2_port[i],\\\n", " y_ends2_port[i], x_ends2_port[i+1], y_ends2_port[i+1],\\\n", " chord, i, N_panels/2) \n", " \n", " #Grabbing Horseshoe and Control Points\n", " y1ns_star = [p.x1n for p in panels_star]\n", " x1ns_star = np.abs([p.y1n for p in panels_star])\n", " y2ns_star = [p.x2n for p in panels_star]\n", " x2ns_star = np.abs([p.y2n for p in panels_star])\n", " ym_star = [p.x_control for p in panels_star]\n", " xm_star = np.abs([p.y_control for p in panels_star])\n", "\n", " y1ns_port = [p.x1n for p in panels_port]\n", " x1ns_port = np.abs([p.y1n for p in panels_port])\n", " y2ns_port = [p.x2n for p in panels_port]\n", " x2ns_port = np.abs([p.y2n for p in panels_port])\n", " ym_port = [p.x_control for p in panels_port]\n", " xm_port = np.abs([p.y_control for p in panels_port])\n", "\n", " #Solving for Downwash\n", " w_star = np.empty((N_panels/2,N_panels/2), dtype=float)\n", " w_port = np.empty((N_panels/2,N_panels/2), dtype=float)\n", " for m in range(0,N_panels/2):\n", " for n in range(0,N_panels/2):\n", " w_star[m,n] = downwash(x1ns_star[n], x2ns_star[n], y1ns_star[n],\\\n", " y2ns_star[n], xm_star[m], ym_star[m], b)\n", " w_port[m,n] = -downwash(x1ns_port[n], x2ns_port[n], y1ns_port[n],\\\n", " y2ns_port[n], xm_port[m], ym_star[m], b)\n", " \n", " w = w_star + w_port\n", "\n", " #Build RHS matrix\n", " u_infty = 340.29 * M\n", " alpha = AoA*(math.pi/180) #radians\n", " RHS = np.zeros(N_panels/2, dtype=float) \n", " for i in range(0,N_panels/2):\n", " RHS[i] = -4.0*math.pi*b*u_infty*alpha\n", " \n", " Gamma = np.linalg.solve(w,RHS)\n", " rho = .4135 #kg/m3 at 33,000 ft\n", " q_infty = 0.5*rho*u_infty**2\n", " S = b*chord #wing area\n", " delta_y = y2ns_star[0]\n", " L = 2.0*rho*u_infty*sum(np.dot(Gamma,delta_y))\n", " C_L = L/(q_infty*S)\n", " \n", " return L, C_L" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [], "source": [ "L8, C_L8 = VLM(8, x_star, y_star, x_port, y_port, 0.6, 5, b, chord)\n", "L16, C_L16 = VLM(16, x_star, y_star, x_port, y_port, 0.6, 5, b, chord)\n", "L32, C_L32 = VLM(32, x_star, y_star, x_port, y_port, 0.6, 5, b, chord)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "With 8 panels we calculate L as 12952.547129 and C_L as 0.300565\n", "With 16 panels we calculate L as 12952.547129 and C_L as 0.300565\n", "With 32 panels we calculate L as 12952.547129 and C_L as 0.300565\n" ] } ], "source": [ "print 'With 8 panels we calculate L as %f and C_L as %f' % (L8, C_L8)\n", "print 'With 16 panels we calculate L as %f and C_L as %f' % (L16, C_L16)\n", "print 'With 32 panels we calculate L as %f and C_L as %f' % (L32, C_L32)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It looks like for our relatively simple and small airfoil we don't need a particularly large number of panels to converge to a stable solution. Next, we can do an angle of attack study to see how our method handles varying angles of attack compared to other methods including an experimental study done by Weber and Brebner." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [], "source": [ "AoA = np.linspace(0,12,13)\n", "L = np.empty(len(AoA), dtype=float)\n", "C_L = np.empty(len(AoA), dtype=float)\n", "for i in range(0,len(AoA)):\n", " L[i], C_L[i] = VLM(16, x_star, y_star, x_port, y_port, 0.6, AoA[i], b, chord)\n", " \n", "#Textbook Relation\n", "C_L_Book = np.empty(len(AoA), dtype=float)\n", "for i in range(0,len(AoA)):\n", " C_L_Book[i] = 0.0601 * AoA[i]\n", " \n", "#Experimental Data\n", "AoA_exp = [2.1, 4.2, 6.3, 8.4, 10.5]\n", "C_L_exp = [0.121, 0.238, 0.350, 0.456, 0.559]" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "size = 8\n", "plt.figure(figsize=(size,size))\n", "plt.title('Angle of Attack Study', fontsize=20)\n", "plt.xlabel('Angle of Attack', fontsize='12')\n", "plt.ylabel('C_L', fontsize='12')\n", "plt.xlim(0, AoA[-1] + 1)\n", "plt.ylim(0.0, 0.8)\n", "plt.scatter(AoA_exp, C_L_exp, color='g', s=120, label='Experimental Values',\\\n", " zorder=3)\n", "plt.scatter(AoA, C_L_Book, color='m', s=120, label='Book Values for 4 panels',\\\n", " zorder=2)\n", "plt.plot(AoA, C_L, color='b', linestyle='-', linewidth=3,\\\n", " label='VLM 16 Panels', zorder=1)\n", "plt.legend(loc='best', prop={'size':16});" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see, overall the VLM method agrees very well with experimental data especially when considering the VLM solution is invisicid!!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Future Options" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's it for this notebook, but there is much more that you can do with VLM codes. Try to Plot the spanwise distribution of Lift. You could edit my Panel class so that it includes more than one panel in the chordwise direction, or add a boundary layer solution and see if the experimental and numerical data collapse. If you really like VLMs you could take this could and make it 3D." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### References:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Anderson, John D. Fundamentals of Aerodynamics. Boston: McGraw-Hill, 2001. Print.\n", " \n", "Bertin, John J., and Michael L. Smith. Aerodynamics for Engineers. Englewood Cliffs, NJ: Prentice-Hall, 1979. Print.\n", "\n", "Weber, J., and G. G. Brebner, \"Low-Speed Tests on 45-deg Swept-Back Wings, Part I: Pressur Measurements on Wings of Aspect Ratio 5,\" Reports and Memoranda 2882, Aeronautical Research Council, 1958.\n", "\n", "Special thanks to Bertin and Smith for their example problem on VLMs in their textbook as their mathematical derivation is extensively used." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###### Notebook Style (ignore below)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.core.display import HTML\n", "def css_styling():\n", " styles = open('./VLM_resources/numericalmoocstyle.css', 'r').read()\n", " return HTML(styles)\n", "css_styling()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 0 }