J'espère que le titre lui-même était assez clair, je résous le problème de la cavité entraînée par le couvercle 2D (domaine carré) en utilisant la méthode des étapes fractionnaires, la formulation des différences finies (forme variable primitive Navier-Stokes), j'ai des composantes u et v de la vitesse sur la domaine entier, sans calculer manuellement les rationalisations, existe-t-il une commande ou un outil de traçage qui fait le travail pour moi?

J'espère que cette question est suffisamment pertinente pour la programmation, car j'ai besoin d'un outil pour tracer les lignes de flux sans les calculer explicitement.

J'ai résolu le même problème sous la forme NS de tourbillon de flux, je viens de prendre un tracé de contour de la fonction de flux pour obtenir les lignes de courant.

J'espère que l'outil ou le traceur est une bibliothèque python, et d'ailleurs installable dans fedora (je peux compromettre et utiliser menthe) sans trop de tracas !!

Je serais reconnaissant si quelqu'un signale la bibliothèque et la commande pertinente (économiserait beaucoup de temps)

17
fedvasu 28 nov. 2011 à 17:39

3 réponses

Meilleure réponse

Jetez un œil à la fonction streamplot de Tom Flannaghan . Le sujet pertinent de la liste des utilisateurs est ici, et il existe également un autre extrait de code similaire par Ray Speth qui fait les choses légèrement différemment.

Si vous avez des problèmes de vitesse, il pourrait être plus efficace d'utiliser certaines des fonctionnalités d'intégration de scipy au lieu des fonctions d'intégration pure - numpy utilisées dans ces deux exemples. Je ne l'ai pas essayé, cependant, et ceux-ci évitent délibérément une dépendance à scipy. (scipy est une dépendance assez lourde par rapport à numpy)

De son exemple d'intrigue:

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()

enter image description here

Une autre option consiste à utiliser VTK. C'est un tracé 3D accéléré, donc faire un tracé 2D nécessitera de régler correctement la caméra (ce qui n'est pas trop difficile), et vous ne pourrez pas obtenir de sortie vectorielle.

Mayavi, tvtk et mlab fournissent des wrappers pythoniques pour VTK. Il a beaucoup de fonctionnalités dans ce sens.

La manière la plus simple d'utiliser VTK pour tracer des lignes de flux à partir de tableaux numpy est d'utiliser mayavi.mlab.flow. Je vais sauter un exemple pour le moment, mais si vous voulez explorer l'utilisation de VTK pour ce faire, je peux en ajouter un.

23
Joe Kington 29 nov. 2011 à 16:07

Jetez un œil aux matplotlib de quiver: http://matplotlib.sourceforge.net/examples/pylab_examples/quiver_demo.html

3
ev-br 28 nov. 2011 à 14:39

Dans la version 1.2 de Matplotlib, il existe désormais une fonction streamplot.

4
Charles Brunet 19 févr. 2013 à 19:21
8296617