Integración en el tiempo de campos 2D (I)

En este artículo se presenta una solución sencilla (aunque limitada) para integrar sistemas de ecuaciones diferenciales con variables definidas en un campo 1D o 2D y un código en Matlab.

No hay cosa más satisfactoria que ver una animación resultado de la simulación de un sistema y comprobar que “tiene buena pinta”, es decir, los resultados son lógicos y verosímiles. Los que nos dedicamos a la ingeniería de sistemas tenemos asociada la idea de simulación a la de integración a lo largo del tiempo y, aunque no necesariamente es así, la gran mayoría de las simulaciones que hacemos incluyen integraciones de sistemas cuyo comportamiento viene descrito por un sistema de ecuaciones diferenciales. Para nosotros no hay mucha diferencia entre simular e integrar usando la famosa “ode45” de Matlab o entre el sistema a simular y la función “odefun” que se le pasa a la ode.

Sin embargo, en algunos de los estudios más apasionantes que existen (problemas de elasticidad, ecuaciones de ondas, ecuación del calor, dinámica de fluídos, …)  se manejan variables definidas en el espacio mediante campos escalares¹. Según el tipo de problema y las simplificaciones que se hagan, dichos campos suelen ser de 1, 2 o 3 dimensiones.  En estos casos, es necesaria toda una lista de valores para definir cada una de las variables y cada una de sus derivadas, lo que hace inviable el uso de las funciones ode tradicionales que integran vectores de variables escalares (donde cada variable es un número con dimensión cero).

En un caso general, cada campo estará definido con una serie de valores en los nodos de una malla 2D o 3D formada generalmente por triángulos o tetraedros. Puesto que en las ecuaciones diferenciales de estos problemas suelen aparecer las derivadas espaciales (derivadas parciales respecto de x, y o z)  se recurre al método de elementos finitos, conocido por sus siglas en inglés FEM, que minimiza los errores cometidos por el cálculo numérico de dichas derivadas. Los resultados obtenidos con el método de elementos finitos pueden llegar a ser muy precisos para un tiempo de cálculo mínimo (sin olvidar que a pesar de todo, los tiempos de cálculo en estos problemas son muy muy grandes a poco que aumente su complejidad). Existen numerosos programas que implementan el FEM como ANSYS, Fluent, Nastan, etc, que nos permiten resolver estos problemas.

No obstante, siempre es bueno tener recursos para saber hacer alguna pequeña simulación casera. Si tenemos un problema sencillo y fácil de modelar a cuya solución no le vamos a exigir una gran precisión y, especialmente, si os gusta tener el “know how” de vuestra simulación, puede merecer la pena implementar uno mismo el código para integraciones de campos escalares. Una solución sencilla y viable es definir el problema en una malla cuadriculada y adaptar el método de integración que utilicemos (ode45 en Matlab, lsode en Octave, ode en SciLab) para que trabaje con variables matriciales.

Efectivamente, los casos más fáciles de tratar desde un punto de vista informático (aunque no siempre los mejores) son aquéllos en los que la malla forma una cuadrícula definida por una lista de M valores de x y N valores de y (caso 2D) y L valores de Z (caso 3D). Para este caso sencillo, cada variable queda definida por una matriz de N x M o de N x M x L si el problema es en problemas en 3D. Por su parte, el problema de las derivadas espaciales se puede resolver aproximando en cada punto de la malla por una cónica:

y = x’Ax + x’b + c

Donde A, b y c serían una matriz, un vector y un escalar a determinar para hacer el ajuste. Si esto se hace para incrementos del valor de la variable y sobre el valor en el puto estudiado, se tiene que c = O y se mejora la estabilidad numérica. Imponiendo que la matriz A sea simétrica se tienen 5 coeficientes a determinar en cada punto de la malla en los problemas 2D y y 8 en los problemas 3D. Centrándonos en los problemas 2D, los cinco coeficientes: a11, a22, a12, b1, b2 corresponden con las cinco derivadas espaciales posibles en dicho punto de la malla: tres derivadas segundas (respecto de x, de y y la derivada cruzada) y dos derivadas simples (respecto de x y respecto de y).

Al final de este artículo se presenta una función en Maltab (gredderiv) que realiza el cálculo de las derivadas parciales del modo que arriba se propone. Así mismo, se incluye la función ode2D que permite integrar sistemas de ecuaciones diferenciales definidos con variables 2D mediante cuadrícula de puntos. Con estas dos funciones es posible resolver y simular problemas de dinámica de fluídos, ecuación de ondas en superficies, la ecuación del calor 2D … Y en el próximo artículo presentaremos algunos de estos ejemplos.

Antes de presentar el código aviso que la función gridderiv tiene un funcionamiento diseñado en dos etapas. Es decir, hay que llamar dos veces a la función para realizar el cálculo de las derivadas parciales. Esto tiene una serie de ventajas que permiten reducir enormemente el tiempo de la simulación (no so imagináis cuanto). En el próximo artículo, junto con los ejemplos de uso, se explicarán los motivos y algunos detalles.

Aquí vienen las funciones (los comentarios están en ingles. Nunca se sabe con quién tendrá uno que compartir su código):

¹ Los campos vectoriales, a efectos de cómputo, se tratan como un conjunto de campos escalares.

Anuncios
Explore posts in the same categories: código, fluidos, matlab, simulación

2 comentarios en “Integración en el tiempo de campos 2D (I)”


  1. […] 9, 2009 En este artículo vamos a presentar un ejemplo de simulaciones hechas con el código del artículo anterior. (Con animaciones […]

  2. Luis Says:

    Impresionante el artículo y muy interesante. A la altura de lo que esperábamos 🙂


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: