web-dev-qa-db-ja.com

Pythonのプロットプログラムを使用して、velocity(numpy 2d配列)のuおよびvコンポーネントを知っている場合、流線をプロットする方法は?

タイトル自体が非常に明確であることを願っています。分数ステップ法、有限差分定式化(Navier-Stokesプリミティブ変数形式)を使用して2Dリッド駆動キャビティ(正方形ドメイン)問題を解決しています。速度のu成分とv成分があります。ドメイン全体、手動で流線を計算せずに、私のために仕事をするコマンドまたはプロットツールはありますか?

ストリームラインを明示的に計算せずにプロットするためのツールが必要なので、この質問がプログラミングに十分に関連していることを願っています。

流れ渦度NS形式で同じ問題を解決しました。流れ関数の等高線図を作成して、流線を取得する必要がありました。

ツールまたはプロッターがpythonライブラリであり、Fedoraにインストール可能(妥協してミントを使用できます)で、大騒ぎしないことを願っています!!

誰かがライブラリと関連するコマンドを指摘してくれたらありがたいです(多くの時間を節約できます)

17
fedvasu

TomFlannaghanのstreamplot関数 を見てください。 ユーザーのリストにある関連スレッドはここにあります そして別の Ray Spethによる同様のコードスニペット は少し異なることをします。

速度に問題がある場合は、これらの両方の例で使用されている純粋な-numpy統合関数の代わりに、scipyの統合機能の一部を使用する方が効率的かもしれません。ただし、試したことはありません。これらは、scipyへの依存を意図的に回避しています。 (scipynumpyと比較してかなり重い依存関係です)

プロットの例から:

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

別のオプションは、VTKを使用することです。これは加速された3Dプロットであるため、2Dプロットを作成するには、カメラを適切に設定する必要があり(それほど難しくはありません)、ベクトル出力を取得できません。

Mayavi、tvtk、およびmlabは、VTKのPythonicラッパーを提供します。これらの方針に沿って多くの機能があります。

VTKを使用してnumpy配列から流線をプロットする最も簡単な方法は、 mayavi.mlab.flow を使用することです。とりあえず例をスキップしますが、VTKを使ってこれを行うことを検討したい場合は、例を追加できます。

23
Joe Kington

Matplotlibのバージョン1.2には、 streamplot 関数があります。

4
Charles Brunet
3
ev-br