next up previous
Next: 4.5 (3), (4) を基本解の方法で解く Up: 4 Laplace 方程式の境界値問題を数値計算で解く Previous: 4.3 Poisson 方程式の境界値問題に対する弱形式

4.4 (1), (2) を解くための FreeFem++ のプログラム

速度ポテンシャルを求める境界値問題

(再1)   $\displaystyle \Laplacian\phi=0$   (in $ \Omega $ )
(再2)   $\displaystyle \frac{\rd\phi}{\rd\bm{n}}=\bm{v}\cdot\bm{n}$   (on $ \rd\Omega$ )

の場合は、 $ \Gamma_1=\emptyset$ , $ \Gamma_2=\rd\Omega$ , $ f=0$ , $ g_2=\bm{v}\cdot\bm{n}$ .

特に $ \Omega=\left\{(x,y)\in\mathbb{R}^2\mid x^2+y^2<1\right\}$ , $ \bm{v}\equiv \begin{pmatrix}
1  2
\end{pmatrix}$ のときは、 $ (x,y)\in\rd\Omega$ において $ \bm{n}=\begin{pmatrix}x  y \end{pmatrix}$ であるから、

$\displaystyle g_2=\bm{v}\cdot\bm{n}=
\begin{pmatrix}
1  2
\end{pmatrix} \cdot
\begin{pmatrix}
x  y
\end{pmatrix} =x+2y.
$

速度ポテンシャルを求める solveLaplace.edp
// solveLaplace.edp
border Gamma2(t=0,2*pi) { x=cos(t); y=sin(t); }
int m=40;
mesh Th = buildmesh(Gamma2(m));
plot(Th, wait=1, ps="Th.eps");
savemesh(Th,"Th.msh"); // optional
fespace Vh(Th,P1);
Vh u,v;
func f=0;
func g1=0; // no use
func g2=x+2*y;
solve Poisson(u,v) =
   int2d(Th)(dx(u)*dx(v)+dy(u)*dy(v))
  -int2d(Th)(f*v)
  -int1d(Th,Gamma2)(g2*v) // +on(Gamma1,u=g1) 
    ;
plot(u,ps="equipotential.eps");

プログラムはテキスト・エディター (テキスト・エディット, mi, emacs など) で作成し、ターミナルから、
こんなふうにして実行
FreeFem++ solveLapalce.edp
とタイプして実行できる。

図 6: $ \Omega $ の三角形分割
\includegraphics[width=6cm]{image/Th.eps}

図 7: 一様流の等ポテンシャル線と流線
\includegraphics[width=6cm]{image/equipotential.eps} \includegraphics[width=6cm]{image/streamline.eps}

(実は、上の弱形式は解の一意性がないので、 このプログラムは少し危ういところがある。)


next up previous
Next: 4.5 (3), (4) を基本解の方法で解く Up: 4 Laplace 方程式の境界値問題を数値計算で解く Previous: 4.3 Poisson 方程式の境界値問題に対する弱形式
桂田 祐史
2015-07-22