empty array python numpy matplotlib scipy velocity

empty - ¿Cómo trazar líneas de corriente, cuando conozco los componentes u y v de la velocidad(numpy 2d arrays), usando un programa de trazado en python?



numpy array shape (3)

Eche un vistazo al matplotlib de matplotlib : http://matplotlib.sourceforge.net/examples/pylab_examples/quiver_demo.html

Espero que el título en sí fuera bastante claro, estoy resolviendo el problema de la cavidad 2D (dominio cuadrado) accionada por la tapa utilizando el método de pasos fraccionados, la fórmula de diferencias finitas (forma de variable primitiva de Navier-Stokes), tengo componentes de velocidad en v sobre la dominio completo, sin el cálculo manual de líneas de corriente, ¿hay un comando o una herramienta de trazado que haga el trabajo por mí?

Espero que esta pregunta sea lo suficientemente relevante para la programación, ya que necesito una herramienta para trazar líneas de corriente sin calcularlas explícitamente.

He resuelto el mismo problema en la forma NS de vorticidad de flujo, solo tuve que hacer un trazado de contorno de la función de flujo para obtener las líneas de flujo.

Espero que la herramienta o el trazador de gráficos sea una biblioteca de Python, y que se pueda instalar más fácilmente en fedora (puedo comprometerme y usar la menta) sin mucho problema.

Estaría agradecido si alguien señala la biblioteca y el comando relevante (ahorraría mucho tiempo)



Echa un vistazo a la función streamplot Tom Flannaghan . El hilo relevante en la lista de usuarios está aquí , y también hay otro fragmento de código similar de Ray Speth que hace las cosas de manera ligeramente diferente.

Si tiene problemas con la velocidad, podría ser más eficiente usar algunas de las funciones de integración de scipy en lugar de las funciones de integración de numpy puros utilizadas en estos dos ejemplos. Sin embargo, no lo he intentado, y estos evitan deliberadamente una dependencia de scipy . ( scipy es una dependencia bastante pesada en comparación con numpy )

De su trama de ejemplo:

import matplotlib.pyplot as plt import numpy as np from streamplot import streamplot x = np.linspace(-3,3,100) y = np.linspace(-3,3,100) u = -1-x**2+y[:,np.newaxis] v = 1+x-y[:,np.newaxis]**2 speed = np.sqrt(u*u + v*v) plt.figure() plt.subplot(121) streamplot(x, y, u, v, density=1, INTEGRATOR=''RK4'', color=''b'') plt.subplot(122) streamplot(x, y, u, v, density=(1,1), INTEGRATOR=''RK4'', color=u, linewidth=5*speed/speed.max()) plt.show()

Otra opción es usar VTK . Es un trazado 3D acelerado, por lo que hacer un trazado 2D requerirá configurar la cámara correctamente (lo que no es demasiado difícil), y no podrá obtener una salida vectorial.

Mayavi, tvtk y mlab proporcionan envoltorios de Pythonic para VTK. Tiene mucha funcionalidad en este sentido.

La forma más fácil de usar VTK para trazar líneas de corriente de matrices numpy es usar mayavi.mlab.flow . Me saltearé un ejemplo por el momento, pero si quieres explorar usando VTK para hacer esto, puedo agregar uno.