{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "raw", "metadata": {}, "source": [ "Texto y c\u00f3digo sujeto bajo Creative Commons Attribution license, CC-BY-SA. (c) Original por Lorena A. Barba, 2013, traducido por F.J. Navarro-Brull para CAChemE.org \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[@LorenaABarba](https://twitter.com/LorenaABarba)\n", "[@CAChemEorg](https://twitter.com/cachemeorg)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "12 pasos para Navier-Stokes\n", "======\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Debes de haber completado los pasos [1](http://nbviewer.ipython.org/urls/bitbucket.org/franktoffel/cfd-python-class-es/raw/master/lecciones/01%2520-%2520Paso%25201.ipynb) y [2](http://nbviewer.ipython.org/urls/bitbucket.org/franktoffel/cfd-python-class-es/raw/master/lecciones/02%2520-%2520Paso%25202.ipynb) antes de continuar. Este notebook de IPython contin\u00faa la presentaci\u00f3n de los **12 pasos para Navier-Stokes**, el m\u00f3dulo pr\u00e1ctico se ense\u00f1a en la clase interactiva de CFD impartida por la [Prof. Lorena Barba](http://lorenabarba.com)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Paso 3: Ecuaci\u00f3n de difusi\u00f3n en 1-D\n", "-----\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La ecuaci\u00f3n de difusi\u00f3n unidimensional es:\n", "\n", "$$\\frac{\\partial u}{\\partial t}= \\nu \\frac{\\partial^2 u}{\\partial x^2}$$\n", "\n", "Lo primero que deber\u00edas notar es es que, a diferencia de las dos anteriores ecuaciones simples que hemos estudiado, esta ecuaci\u00f3n tiene una derivada de segundo orden. \u00a1Primero tenemos que aprender qu\u00e9 hacer con ella!" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Discretizando $\\frac{\\partial ^2 u}{\\partial x^2}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La derivada de segundo orden se puede representar geom\u00e9tricamente como la recta tangente a la curva dada por la primera derivada. Vamos a discretizar la derivada de segundo orden con un esquema de diferencias finitas centradas. Esto lo conseguimos mediante una combinaci\u00f3n de diferencias hacia delante y hacia atr\u00e1s de la primera derivada. Considera la expansi\u00f3n de Taylor de $u_{i+1}$ y $u_{i-1}$ en torno a $u_i$:\n", "\n", "$u_{i+1} = u_i + \\Delta x \\frac{\\partial u}{\\partial x}\\bigg|_i + \\frac{\\Delta x^2}{2} \\frac{\\partial ^2 u}{\\partial x^2}\\bigg|_i + \\frac{\\Delta x^3}{3} \\frac{\\partial ^3 u}{\\partial x^3}\\bigg|_i + O(\\Delta x^4)$\n", "\n", "$u_{i-1} = u_i - \\Delta x \\frac{\\partial u}{\\partial x}\\bigg|_i + \\frac{\\Delta x^2}{2} \\frac{\\partial ^2 u}{\\partial x^2}\\bigg|_i - \\frac{\\Delta x^3}{3} \\frac{\\partial ^3 u}{\\partial x^3}\\bigg|_i + O(\\Delta x^4)$\n", "\n", "Si sumamos estas dos expansiones, se puede ver que los t\u00e9rminos de derivadas impares se anulan entre s\u00ed. Despreciando los t\u00e9rminos de $O(\\Delta x^4)$ o superior (y en realidad, estos son muy peque\u00f1os), podemos reordenar la suma de estas dos expansiones para resolver nuestra segunda derivada." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$u_{i+1} + u_{i-1} = 2u_i+\\Delta x^2 \\frac{\\partial ^2 u}{\\partial x^2}\\bigg|_i + O(\\Delta x^4)$\n", "\n", "Reordenando para resolver $\\frac{\\partial ^2 u}{\\partial x^2}\\bigg|_i$ el resultado es:\n", "\n", "$$\\frac{\\partial ^2 u}{\\partial x^2}=\\frac{u_{i+1}-2u_{i}+u_{i-1}}{\\Delta x^2} + O(\\Delta x^2)$$\n" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Volviendo al paso 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ahora podemos escribir la versi\u00f3n discretizada de la ecuaci\u00f3n de difusi\u00f3n en 1D:\n", "\n", "$$\\frac{u_{i}^{n+1}-u_{i}^{n}}{\\Delta t}=\\nu\\frac{u_{i+1}^{n}-2u_{i}^{n}+u_{i-1}^{n}}{\\Delta x^2}$$\n", "\n", "Al igual que antes, nos damos cuenta de que una vez que tenemos una condici\u00f3n inicial, la \u00fanica inc\u00f3gnita es $u_{i}^{n+1}$, por lo que volvemos a reorganizar la ecuaci\u00f3n resolviendo para nuestra inc\u00f3gnita:\n", "\n", "$$u_{i}^{n+1}=u_{i}^{n}+\\frac{\\nu\\Delta t}{\\Delta x^2}(u_{i+1}^{n}-2u_{i}^{n}+u_{i-1}^{n})$$\n", "\n", "La ecuaci\u00f3n discreta anterior nos permite escribir un programa para avanzar en una soluci\u00f3n en el tiempo. Pero necesitamos una condici\u00f3n inicial. Vamos a continuar con nuestra favorita: la funci\u00f3n de sombrero. Por lo tanto, en $t=0$, $u=2$ en el intervalo $0.5\\le x\\le 1$ y $u=1$ para todo lo dem\u00e1s. Estamos listos para empezar a calcular n\u00fameros." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%pylab inline\n", "# El comando de arriba har\u00e1 que figuras de este notebook se representen junto al texto\n", "\n", "import numpy as np # importando nuestra librer\u00eda favorita\n", "import matplotlib.pyplot as plt # y la \u00fatil librer\u00eda para representar gr\u00e1ficas 2D\n", "\n", "\n", "nx = 41\n", "dx = 2./(nx-1)\n", "nt = 20 # n\u00famero de intervalos de tiempo que se desea calcular\n", "nu = 0.3 # valor de la viscosity\n", "sigma = .2 #sigma es un parametro, aprenderemos m\u00e1s sobre ello luego\n", "dt = sigma*dx**2/nu #d t es definido usando el valor sigma, aprenderemos m\u00e1s sobre ello enseguida!\n", "\n", "\n", "u = np.ones(nx) # un array de numpy con nx elementos iguales a 1\n", "u[.5/dx : 1/dx+1]=2 # estableciendo u = 2 entre 0.5 y 1 paras las condiciones iniciales (I.C.s)\n", "\n", "un = np.ones(nx) # nuestro array marcador de posici\u00f3n our placeholder array, un, to advance the solution in time\n", "\n", "for n in range(nt): # iteraci\u00f3n a trav\u00e9s del tiempo\n", " un[:] = u[:] ## copia los valores existentes de 'u' en 'un'\n", " for i in range(1,nx-1):\n", " u[i] = un[i] + nu*dt/dx**2*(un[i+1]-2*un[i]+un[i-1])\n", " \n", "plt.plot(np.linspace(0,2,nx), u)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 1, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 1 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Aprende m\u00e1s" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para una explicaci\u00f3n paso a paso de la discretizaci\u00f3n de la ecuaci\u00f3n de difusi\u00f3n y todos los Pasos del 1 al 4, puedes ver el **Video Lesson 4** de la profesora Barba en YouTube." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.display import YouTubeVideo\n", "YouTubeVideo('y2WaK7_iMRI')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", " \n", " " ], "output_type": "pyout", "prompt_number": 1, "text": [ "" ] } ], "prompt_number": 1 }, { "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", "" ], "output_type": "pyout", "prompt_number": 1, "text": [ "" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "> (La celda de arriba establece el formato de este notebook)" ] } ], "metadata": {} } ] }