008_FluidFlowCylinder.mw

円筒を通る流量

イントロダクション

このワークシートでは、流体力学の分野での Maple の使用例を示します。

半径 1 のシリンダーを過ぎる様々な流れを解析、例証します。まず初めに、Maple のプロット構造を使用し簡素化した入力によって半径 1 のシリンダーを表示するプロシージャを作成します。

> restart;
with(plottools): with(plots):

Warning, the name changecoords has been redefined

Warning, the previous binding of the name arrow has been removed and it now has an assigned value

シリンダーを過ぎる流れのグラフを作成するプロシージャ

プロシージャ streams には 4 つの入力 (引数) が必要になり、それぞれのパラメータは以下の様になります:

 n - 表示する流線の数
 fcn - プロットする流れ関数

 pts - プロットを作成する為のポイント数

 name - グラフのタイトル

> streams:=proc(n,fcn,pts,name)
      local f,k,DISK,p;
      f:=transform((r,th) -> [r*cos(th),r*sin(th)]):
      DISK:=disk([0,0],1,color=red);
      for k from -n by 2 to n do
            p[k]:=implicitplot(fcn=2*k/n,x=-n/2..n/2,y=-Pi..Pi,numpoints=pts):
      end do:
      display(seq(f(p[2*i]), i=-n/2..n/2), DISK, view=[-n/2..n/2,-n/2..n/2], scaling=constrained, axes=boxed, title=name);
end proc:

非粘性の流れ、ディスクの非回転流動体の流れ場

まず初めに、円の定理 (Milne-Thompson の定理) を使用し、半径 1 のディスクを過ぎる流れの複合電位を見つけます。

そして、流れの速度ポテンシャルと流れ関数の項を分けます。最終的に、プロシージャ streams を使用し、ディスクを過ぎる流れ場のプロットします。

一様な流れは以下の様に与えられます。

> f:=z->U*z:

ここで U が流体の流れの速度である場合、円の定理から以下が与えられます。

> W:=z->evalc(f(z)+f(a^2/z)):

複合電位 W(z) の流れは以下の様になります。

> W(z);

U*z+U*a^2/z

以下の様に、変数 x と y に関して正であると仮定し、変数 U と a に値を割り当てます。

> assume(x,real,y,real,z,real);
U:=1: a:=1:

> W(z);

z+1/z

> complex_potential:=W(x*exp(I*y));

complex_potential := x*cos(y)+cos(y)/(x*(cos(y)^2+sin(y)^2))+I*(x*sin(y)-sin(y)/(x*(cos(y)^2+sin(y)^2)))

> vel_pot:=simplify(Re(complex_potential));

vel_pot := (1+x^2)*cos(y)/x

> strm_fcn:=expand(simplify(Im(complex_potential)));

strm_fcn := -sin(y)/x+x*sin(y)

> title1:="Flow Past a Sphere of Radius 1":

> streams(10,strm_fcn,1000,title1);

[Plot]

例2

半径 1 のディスクに、x 軸に Pi/6 ラジアン (30 度) の方向からの流れを計算します。

> title2:=`Flow Past a Sphere of Radius 1 with Angle of Attack Pi/6`:

> fcn2:=(x-1/x)*sin(y-Pi/6):

> streams(10,fcn2,1000,title2);

[Plot]

例3

この場合、半径 1 のディスクに流れる流線数 8、角度 -Pi/6 (-30 度) で流れてきます。

これは、単にグラフィックスで例証を行い別の例を提供するための物です。

> title3:=`Flow Past a Disk of Radius 1 with Circulation=8 and Angle of Attack Pi/6`:

> fcn3:=(x-1/x)*sin(y+Pi/32*Pi)+8/(2*Pi)*ln(x):

> streams(8,fcn3,300,title3);

[Plot]

例4

半径 1 のディスクについて、角度が -Pi/4 で流れの関数を -8 から 8 まで変更させたときのアニメーションを作成します。
アニメーションを確認するには、作成されたプロットの上で右クリックし、表示されたコンテクストメニューから操作できます。

> fcn:=(circ)->(x-1/x)*sin(y+Pi/4)+circ/(2*Pi)*ln(x):

> A:=[seq(streams(10,fcn(2.5*(i-9)),300,``),i=1..15)]:

> display(A,seq(A[15-i],i=1..14),insequence=true,scaling=constrained);

[Plot]