速度ポテンシャルを求める境界値問題
特に
,
のときは、
において
であるから、
| 速度ポテンシャルを求める potential2d-v0.edp ← これを保存する |
// potential2d-v0.edp
// http://nalab.mind.meiji.ac.jp/~mk/complex2/potential2d-v0.edp
// 2次元非圧縮ポテンシャル流
// 速度ポテンシャル、流れ関数、速度を求め
// 等ポテンシャル線, 流線, 速度場を描く
border Gamma(t=0,2*pi) { x = cos(t); y = sin(t); } // 円盤領域
int m=40;
mesh Th=buildmesh(Gamma(m));
plot(Th, wait=1, ps="Th.eps");
fespace Vh(Th,P1);
Vh u, v, phi, psi;
func Vn=x+2*y; // Ωが単位円で, V=(1,2) のとき V・n=x+2y
// 速度ポテンシャルφを求め、その等高線 (等ポテンシャル線) を描く
solve Laplace(phi,v) =
int2d(Th)(dx(phi)*dx(v)+dy(phi)*dy(v))
-int1d(Th,Gamma)(Vn*v);
plot(phi,ps="contourpotential.eps",wait=1);
// ベクトル場 (u,v)=∇φ を描く (ちょっと雑なやり方)
u=dx(phi);
v=dy(phi);
plot([u,v],ps="vectorfield.eps",wait=1);
// 等ポテンシャル線とベクトル場を同時に描く
plot([u,v],phi,ps="both.eps", wait=1);
|
プログラムはテキスト・エディター (mi, emacs, Xcode, テキスト・エディット2など) で作成し、ターミナルから、
| こんなふうにして実行 |
FreeFem++ potential2d.edp |
このプログラムは、 図の PostScript データ ``counterpotential.eps'', ``vectorfield.eps'', ``both.eps'' を出力している。
(実は、上の弱形式は解の一意性がないので、 このプログラムは少し危ういところがある。)
FreeFem++ はポテンシャル問題に限らず、色々な問題を解くことが出来る。 時間が余った時の脇道用: Navier-Stokes 方程式による、 有名な円柱の周りの水の流れのシミュレーション・プログラム NS-cylinder.edp (鈴木 厚先生の Finite element programming by FreeFem++ - intermediate course から)
桂田 祐史