sf によるコリオリの力と回転運動の数値実験

地球表面での運動をコリオリの力によって説明することが多くあります。でも、実際の説明には好い加減な物が多くあります。計算をしてみれば誤りであることが直ぐ分かるにもかかわらず、誤った説明がまかり通っています。回転運動が絡んでくるため、普通の人は計算する気にならないからです。

sf を使えば、実際に働くコリオリの力を簡単に計算できます。地球表面での三次元ベクトルの計算も一次元のときと同様な操作で計算できます。運動方程式を数値的に解くことも可能です。この説明を読んでいく時には、御自分でも sf を使って計算をしながら読んでいってください。書いてある以外の数値例を計算してみることで、より深く理解できはずです。左上に「sf block」「sf expression」と書いてある式は全て sf で計算可能な式です。

前準備 -- 道具作り

実際の理論や計算の説明に入る前に、sf で回転と外積を計算するための道具を作って起きます。地球表面での回転による変換の計算を行う sf サブ バリアブル Rotate.var と、外積を計算する op.sf を作ります。

回転行列 Rotate.var

地球の中心を原点とする、地球と一緒に回転している座標系を考えます。、南北に通る z 軸の周りを角速度 ω で回転している三次元回転座標系 S_earth を考えます。もうひとつ原点を共有する静止座標系 S_space を考えます。時刻 0 で、座標系 S_earth と S_space は重ね合っているものとします。

S_earth で計った位置ベクトルを S_space での座標系でのベクトル座標値に変換するには、下の回転を表す sf サブ バリアブル変数による行列変換が使えます。

//@@
@@subVar Rotate 3,3             # θ がグローバル変数
< !cos(θ), - !sin(θ), 0>
< !sin(θ),   !cos(θ), 0>
<        0,          0, 1>
@@endSubVar
//@@@
角度 θ を sf 変数として与えてやることで、Rotate.var S_earth ベクトル値を S_space ベクトル値に変換する行列になります。

ここで、後から何度も使う地球の回転角速度 ω を sf 変数として定義して起きます。

ω=2`π/(24`hour)
< 7.27221e-005 > `radian/`sec

この ω と Rotate.var を使えば、次のように「12 時間で、x,y 平面のベクトルの向きが反転すること」、「z 軸方向のヘクトルが変化しないこと」を数値計算によって示せます。

θ = ω 12`hour, Rotate.var<1,0,0>  # 12 時間で、<1,0,0>ベクトルの向きが反転します
<           -1, 1.22461e-016,            0 >
θ = ω 12`hour, Rotate.var<0,1,0>  # 12 時間で、<0,1,0>ベクトルの向きが反転します
< -1.22461e-016,            -1,             0 >
θ = ω 12`hour, Rotate.var<1,2,0>  # 12 時間で、<1,2,0>ベクトルの向きが反転します
< -1, -2,  0 >
θ = ω 12`hour, Rotate.var<0,0,1>  # <0,0,1>ベクトルfは時間が経過しても不変です
< 0, 0, 1 >

すこし大掛かりですが下の sf ブロック式の計算によって、地球の北緯 45 度と 75 度にある立方体の 3 時間毎の変化の様子を計算させられます。三次元グラフ表示できます。

//@@
r = < 7.07107, 0, 7.07107 >     # 北緯 45 度の位置にある直方体
r{0} = r
r{1} = r + <1,0,0>
r{2} = r + <1,1,0>
r{3} = r + <0,1,0>
r{4} = r + <0,1,1>
r{5} = r + <1,1,1>
r{6} = r + <1,0,1>
r{7} = r + <0,0,1>

r = < 2.58819, 0, 9.65926 >     # 北緯 75 度の位置にある直方体
r{8} = r
r{9} = r + <1,0,0>
r{10} = r + <1,1,0>
r{11} = r + <0,1,0>
r{12} = r + <0,1,1>
r{13} = r + <1,1,1>
r{14} = r + <1,0,1>
r{15} = r + <0,0,1>

/s
#N@=8, M@=6     # 6 時間毎のプロット
N@=8, M@=8      # 8 時間毎のプロット
temp = [[2*N*M+1, 3]]      # temp[0,*]== <0,0,0> を入れてやらないと、縦長の立方体の図になってしまう
<<0, M, 1 @j| 
    <<0,N,1@k| θ @= ω j 24/M `hour
         temp[N j + k+1,*]= Rotate.var r{k}
    >>
>>

<<0, M, 1 @j| 
    <<0,N,1@k| θ @= ω j 24/M `hour
         temp[N*M+N j + k+1,*]= Rotate.var r{k+8}
    >>
>>

//@@@
gdsp temp

--------------------------- 図 1 ------------------------

地球の表面に固定されている立方体は 24 時間で一回転していることが解ります。家庭のお風呂にある水も、静止しているように見えても 24 時間で一回転しています。角運動量を持っています。このことを、後で風呂の排水口にできる渦を考えるときに使います。

地球上の立方体の回転の様子を Word を使って作図するのに手間がかかりすぎるので、sf Block 式を使って作図しました。手抜きではありますが、sf の威力を例示しているとも考えます。

外積サブルーチン ファイル op.sf

角速度ベクトルとの外積によってもベクトルの回転を記述できます。三次元ベクトルどうしの外積を下の sf サブルーチンを使って計算できます。

//@@
@@subFile op    # op(a,b) : a x b operation at 3 dimension
_rt = <_prm{1}[1]_prm{2}[2] -  _prm{1}[2]_prm{2}[1]
       _prm{1}[2]_prm{2}[0] -  _prm{1}[0]_prm{2}[2]
       _prm{1}[0]_prm{2}[1] -  _prm{1}[1]_prm{2}[0]>
@@endSubFile
//@@@
下のように、外積計算が簡単に行えます。
@op(<1,0,0>, <0,1,0>)    # ex x ey == ez
< 0, 0, 1 >
@op(<1,0,0>, <5,1,0>)    # ex x (ey + 5ex) == ez
< 0, 0, 1 >
@op(<1,0,0>, <0,0,1>)    # ex x ez == -ey
<  0, -1,  0 >
@op(<1,2,3>, <4,5,6>)
< -3,  6, -3 >
ここで、後から何度も使う地球の回転角速度ベクタ ω_vct を sf 変数として定義して起きます。
ω_vct = <0,0,ω>
<            0,            0, 7.27221e-005 > `radian/`sec
これで、多くの教科書で使っている、コリオリ力を 角速度ベクタ ω_vct との外積によって表現する公式を sf によって計算できる式として記述できるようになりました。

コリオリ力の理論

地球上での運動など、回転する座標系での粒子の運動には、コリオリ力と言われる見かけの力が働いたように見えます。また遠心力が働いたように見えます。この理論を追ってみます。

回転座標系での運動記述に伴う補正

地球に固定した座標系などの回転し続ける座標系でベクトルの時間変化を記述するとき、静止座標系度の時間変化とは、回転運動の分だけ違ってきます。時間 dt の間に回転座標系は回転してしまうからです。その違いは角速度ベクトルとの外積で表せます。

地球と一緒に回る回転座標系 S_earth での点粒子の運動を考えます。S_earth 上で dt 時間の間に、 dr_earth の変移があったとき、それを S_space から見たときの変移を dr_space とします。ただし、変移が起きる前の点粒子の位置を r とします。すると、地球の角運動量ベクトル ω_vct の影響分が下の式で表されます。

dr_space == dr_earth + ω_vct dt x r ----------------------- (1) 式
dr_space/dt == dr_earth/dt  + ω_vct x r
            == v_earth  + ω_vct x r ----------------------- (2) 式
            == v_space
(2) 式を下のように書いている教科書もあります。
   dr                 dr
( ---- )       ==  ( ---- )      +  ω_vct x r ------------- (3) 式
   dt   space         dt   earth

(1),(2),(3) 式は見かけ以上に物理的意味が解りにくい式です。(dr/dt)space は宇宙空間:静止座標系からみた速度です。, (dr/dt)earth は地球上:回転座標系での速度です。静止座標系 S_space での変分と回転座標系 S_earth での変分を dr_space, dr_earth などと区別して書きながら、ω_vct や r には space, earth の区別を付けていません。どういうことでしょうか。

(1),(2),(3) 式を眺めているだけでは、これらの式の物理的な意味は分かりません。これらの式の意味を理解するには、実際の様子に近い条件での数値計算をしてみることが有効です。 sf ならば、数式のまま計算可能です。( (1),(2),(3) 式の意味は言葉だけでは説明しにくいものです。教科書でも上手い説明ができていません。ベクトル形式での説明を諦めて、ベクトル成分の式で説明している教科書も多くあります。多数の式を並べるため汚い説明になってしまいます。でも sf を使えばベクトル形式のままで理解できます。ベクトル形式のほうが解ってしまえば綺麗です。)

地球の半径を表す sf 変数 rEarthRadius を下のように定義しておきます。

rEarthRadius = 12741.9 `K `meter/2
< 6.37095e+006 > `meter

時刻 0 では S_space と S_earth は重なっているとします。一時間後に S_earth の x 軸上 <rEarthRadius,0,0> にある粒子が 1`meter/`sec の速度で北に運動しているものとし、dt = 1`sec の間の運動について (1),(2),(3) 式を適用してみます。

dr_earth = <1,0,0> `meter ----------------------------------- (4) 式
< 1, 0, 0 > `meter
dt = 1`sec
< 1 > `sec

この運動を S_space から見たとき dr_space は次のようになります。

dr_space= (θ@=ω(1`hour+dt), Rotate.var < rEarthRadius,0,1>) -  (θ@=ω 1`hour, Rotate.var< rEarthRadius,0,0>)
< -119.929,  447.517,        1 > `meter

すなわち dr_earth == <1,0,0> `meter と小さく動いたにすぎないのが、S_earth が一秒間の間にも回転しているため、一秒後には dr_space == < -119.929, 447.517,1 > `meter と大きく移動しています。(θ@=ω 1`hour), Rotate.var <rEarthRadius,0,1>) で変換してやるだけでは済みません。

dt が 0 であれば、下のように回転の座標変換があっても、S_space での変化は <0,0,1> にすぎません。dr_earth を (θ@=ω 1`hour), Rotate.var <rEarthRadius,0,1>) で変換したにすぎません。

(θ@=ω(1`hour+0`sec), Rotate.var < rEarthRadius,0,1>) -  (θ@=ω 1`hour, Rotate.var< rEarthRadius,0,0>)
< 0, 0, 1 >

(1)(2)(3) 式で ω_vct や r ベクトルに space や earth の区別を付けていなのは、それぞれを S_space, S_earth から表しても、 (θ@=ω 1`hour), Rotate.var で回転変換した関係にあり、ベクトルとして同じ物だからです。dr_space, dr_earth は dt の間に S_earth が回転してしまうために (θ@=ω 1`hour), Rotate.var で回転させるだけでは済まない変分のため space/earth の判別記号を追加する必要があったわけです。

コリオリの力の導出

(1)(2)(3) 式は速度だけでなく、S_earth と S_space 上の Rotate.var で変換されるベクトル一般に付いて成り立ちます。(2) 式を加速度についても適用できます。そして、加速度に適用した時の式の変形が解りにくいので、くどいと思われるほどに (1)(2)(3) 式の数値計算例を丁寧に示しました。

(2) 式を加速度に適用すると次の式になります。 == a_earth + ω_vct x v_space

dv_space/dt == dv_earth/dt  + ω_vct x v_space --------------- (5) 式
            == a_space
(5) 式を (2) 式を組み合わせて次のように変形します。
a_sapce == dv_space/dt --------------------------------------- (6) 式
        == (dv_earth/dt)earth          + ω_vct x v_space 
        == (dv_earth/dt)earth          + ω_vct x (v_earth + ω_vct x r)
        == a_earth + ω_vct x v_earth   + ω_vct x v_earth + ω_vct x ω_vct x r
        == a_earth + 2 ω_vct x v_earth + ω_vct x ω_vct x r

(6) 式の最後から二つ目の変形が解りにくいと思います。dv_earth/dt は r_earth の二回微分。回転座標に対して二回時間で微分する操作が微分が入らねばならないのです。このために (6) 式で 2 ω_vct x v_earth と係数 2 が出てきています。これを解って欲しくて (2) 式の数値例を丁寧に行いました。(6) 式の変形が納得できない方は、(2) 式で行ったような数値例を作って数値実験してみて下さい。言葉や数式での説明を読むだけとのときよりも、より深くコリオリの力を理解できるはずです。

(6) 式の両辺に質量を掛けてから移行した次の式が、教科書に出てくるコリオリの力です。

f_earth  == m dv_earth/dt ------------------------------------ (7) 式
         == f_spce - 2 m ω_vct x v_earth  -  m ω_vct x ω_vct x r

回転座標系 S_earth での力は、本来の力(静止座標系 S_space での力) にコリオリの力:-2 m ω_vct x v_earth と遠心力:-m ω_vct x ω_vct x r の補正を加えたものだとする法則です。

でも質量と速度の積に比例するコリオリの力というより、速度に比例するコリオリの加速度と言った方が、質量を考えなくても済む分だけ簡単になります。

Coriolis の力の具体例

コリオリの加速度を具体的に計算してみましょう。地球上で x 方向に 1 `meter/`sec で運動する粒子は y 方向に -0.000145444 `meter/`sec^2 の加速度のバイアスがかかります。

-2@op(ω_vct, <1,0,0>`meter/`sec )
<            0, -0.000145444,            0 >
-2@op(ω_vct, <0,1,0>`meter/`sec )
< 0.000145444,           0,           0 >

この x 方向として、地球表面で様々の方向を想定できます。赤道上でボールを 1`meter/sec の速度で真上に投げたら東向きに 0.000145444 `meter/`sec の加速度が加わります。 赤道上でボールを 1`meter/sec の速度で東に投げたら地表に向かって 0.000145444 `meter/`sec の加速度が余分に加わります。でも北に投げたらコリオリの加速度は 0 です。

もっと遊んでみましょう。東京で野球のピッチャーが投げるボールが、どれぐらいコリオリの力で曲がるか計算してみましょう。東京は東経 140 度、北緯 35 度に位置します。
--------------------------- 図 2 ------------------------

東京の座標ベクトル r_tokyo は下のように計算できます

r@= rEarthRadius, θ@=35`degree, φ@=140`degree, r_tokyo = < r !cos(θ) !cos(φ), r !cos(θ) !sin(φ), r !sin(θ)>
< -3.99781e+006,  3.35457e+006,  3.65423e+006 >`meter

また、東京における地面の局所座標系 ex_tokyo, ey_tokyo, ez_tokyo を下のように計算します。ez_tokyo は真上方向を向いている、S_earth を座標系で表した単位ベクトルです。ey_tokyo は北を向いている単位ベクトルです。ex_tokyo は、外積:ey_tokyo x ez_tokyo より計算します。

ez_tokyo = r_tokyo/!norm(r_tokyo)
< -0.627507,  0.526541,  0.573576 > `meter
r@= rEarthRadius,θ@=35`degree+ `π/2, φ@=140`degree, temp@ = < r !cos(θ) !cos(φ), r !cos(θ) !sin(φ), r !sin(θ)>, ey_tokyo = temp/!norm(temp)
<  0.439385, -0.368688,  0.819152 > `meter
ex_tokyo = @op(ey_tokyo, ez_tokyo)
<      0.642788,      0.766044, -5.55112e-017 >

東京で北向きに velBall:150 `Km/`hour の速度で直球を投げたとします。ピッチャーズ マウンドからホーム ベースまでの距離 LenP_H は 60 `feet です。

velBall = ex_tokyo 150`Km/`hour
< 18.3077, -15.362, 34.1313 > `meter/`sec
!norm(velBall)  # 秒速で表した球速
< 41.6667 > `meter/`sec
LenP_H = 60`feet
< 18.288 > `meter

そのときのコリオリの加速度 accBall と、ボールがホームに到達する時間 Δt は次のように計算されます

accBall = - 2 @op(ω_vct, velBall)
< -0.00223431, -0.00266275,           0 > `meter/`sec^2
Δt = LenP_H/!norm(velBall)
< 0.438912 > `sec
ですから、コリオリの力によるボールの変移は下のように 56 ミクロンと計算されます。無視できます。1`Km の距離でやっと 1`meter のずれです。コリオリの力は大砲の弾の軌跡などでしか考える必要のない力です。
1/2 accBall Δt^2
< -0.000215213, -0.000256481,            0 >
<1/2 accBall Δt^2| ey_tokyo>
< -5.63107e-005 > `meter
!norm(1/2 accBall Δt^2)
< 5.63107e-005 >`meter
#参考 1`Km 先でのずれ
!norm(1/2 accBall (1`Km/!norm(velBall))^2)
< 1.00108 >`meter
下の計算より 1Kg のボールだったら、それに加わるコリオリ力は 0.003 newton と計算されます。1 トンの車が時速 150Km/hour で走って、やっと 3 newton です。地球上で 354 グラムを持ったときに感ずる力です。意外と小さな値です。
!norm(1`Kg accBall)
< 0.00347597 > `newton

ex_tokyo, ey_tokyo, ez_tokyo それぞれの向きの変移成分は次のようになります。ey_toky 方向に 150`Km/`hour で ey_tokyo 方向:北側に投げたボールは、キャッチャーの位置では ex_tokyo 方向:東側に 0.33 um だけ、コリオリの加速度でずれることになります。

< 1/2 accBall Δt^2 |ey_tokyo>
< 0 > `meter
< 1/2 accBall Δt^2 |ex_tokyo>
< 0.000334812 > `meter
< 1/2 accBall Δt^2 |ez_tokyo>
< -2.71051e-020 > `meter

比較のために 1`meter/`sec, 1`mm/`secの 速度のボールのときの ex_tokyo 方向への変移を計算してみます。遅いほうが、変移が大きくなることが分かります。1`mm/`sec のとき 14 `meter の変移が発生するのは意外ですが、正しい計算だと思います。

//@@
velBall @= ex_tokyo 1 `meter/`sec
Δt @= LenP_H/!norm(velBall)
accBall @= - 2 @op(ω_vct, velBall)
< 1/2 accBall Δt^2 |ex_tokyo>
//@@@
< 0.0139505 > `meter
//@@
velBall @= ex_tokyo 1 `mm/`sec
Δt @= LenP_H/!norm(velBall)
accBall @= - 2 @op(ω_vct, velBall)
< 1/2 accBall Δt^2 |ex_tokyo>
//@@@
< 13.9505 > `meter

コリオリの力では風呂の排水口には渦ができない

上の東京での野球のボールを 1`meter/`sec の速度で 1`meter の距離を投げたときのコリオリの力による変移は下のように計算されます。40 um の変移です。

//@@
velBall @= ey_tokyo 1 `meter/`sec
LenP_H @= 1 `meter
Δt @= LenP_H/!norm(velBall)
accBall @= - 2 @op(ω_vct, velBall)
< 1/2 accBall Δt^2 |ex_tokyo>
< 4.17117e-005 > `meter
//@@@

風呂の水が排水口に出るまでの変移は、この程度のオーダーだと思われます。しかも変移が発生した水は排水されてしまいます。これでは目視で判るような渦は発生しません。コリオリの力によって、風呂の排水口に渦ができるというのは俗説です。

それでも風呂の排水口に渦ができる

風呂の排水口にコリオリの力によって渦ができるというのは俗説だという話も広まっており、風呂の排水口にできる渦は北半球、南半球には無関係だとする方も多くなりました。しかし、これも俗説だと主張します。

図1 からも解るように、風呂の水は静止しているように見えても、24 時間に一回転しています。角運動量を持っています。これが意外と大きな値です。一方で風呂桶の真中部分は角運動量を少ししか持ちません。風呂桶の中央から排水してやると、角運動量は風呂の水に残されたまま、水の量が少なくなっていきます。少ない水に元々あった角運動量が凝縮されることにより渦ができます。最後の 1 リットルの水には目視で判る渦ができます。

ドラム缶風呂の角運動量と排水口にできる渦

東京で、直径 1 `meter(半径:rBath)のドラム缶風呂に V=1`meter^3 の水を入れて静止させます。排水口の半径:rInner を 15`mm とし、そこから水を流し出したときの水量:V、角運動量:angMmtm、水の高さ:h, 角速度:ωBath の変化の様子を計算します。

ただし、流体力学を使っての計算は厄介なので、中央の半径 15 `mm の円筒状の水を何回も取り去る事で排水の様子を近似します。

東京のドラム缶風呂の角運動量

北緯 35 度に位置する東京で南北に 1 `meter の差があるとき、自転速度の差 Δv、風呂の水の角速度 ωBath, 角運動量 angMmtm は次のように計算されます。

r@= rEarthRadius, Δv = r ( !cos(35`degree) - !cos(35`degree + 1`meter/ r ) )2`π/(24`hour)
< 4.17117e-005 >`meter/`sec
ωBath = Δv/1`meter
< 4.17117e-005 >`radian/`sec
angMmtm = 1000`Kg rBath^2 1/2 ωBath
< 0.00521396 > `Kg `meter^2/`sec
ここで、質量 m 半径 rBath の円筒のイナーシャが m rBat^2 1/2 である公式を使いました。

北極のドラム缶風呂の角運動量

東京の風呂桶の水には角運動量などないと主張される方もいるかと思います。そのような方は北極にある風呂の水を考えてください。

r@= rEarthRadius, Δv = r ( !cos(90`degree) - !cos(90`degree + 1`meter/ r ) )2`π/(24`hour)
< 7.27221e-005 >`meter/`sec
ωBath = Δv/1`meter
< 7.27221e-005 >`radian/`sec
angMmtm = 1000`Kg rBath^2 1/2 ωBath
< 0.00909026 > `Kg `meter^2/`sec

ドラム缶風呂から排水を続けたときの角運動量の変化

この初期状態から、中央に仮想した rInner == 15`mm の円筒状の水を何度も取り去る操作をしたときの <V,angMmtm,h,ωBath> の変化の様子は下の sf ブロック式で計算できます。

//@@
# 初期値
V = 1`meter^3
h = V/(  `π rBath^2) #∵  `π rBath h^2 = 1 `meter^3
angMmtm = < 0.00521375 > `Kg `meter^2/`sec
ωBath = angMmtm / (1000`Kg V h rBath^2 ) # ∵ 1000`Kg rBath^2 ωBath == angMmtm
rInner = 15 `mm

#N@=100
N@=6000
drumAngl= <<0,N,1 @k|  VInner @= `π rInner^2 h
    V = V - VInner
    angMmtm = angMmtm - 1000`Kg VInner h rInner^2 1/2 ωBath
    h = V/(  `π rBath^2) #∵  `π rBath h^2 = 1 `meter^3
    ωBath = angMmtm / (1000`Kg V rBath^2 1/2) # ∵ 1000`Kg h rBath^2 ωBath == angMmtm
    
>>
//@@@

          
<       0.9991,   0.00521375,      1.27209, 4.17476e-005 >
<     0.998201,   0.00521374,      1.27095, 4.17851e-005 >
<     0.997302,   0.00521374,       1.2698, 4.18227e-005 >
          ・           ・              ・          ・
          ・           ・              ・          ・
<    0.0157224,   0.00520788,    0.0200184,   0.00264991 >
<    0.0157082,   0.00520788,    0.0200004,    0.0026523 >
<    0.0156941,   0.00520788,    0.0199824,   0.00265469 >
          ・           ・              ・          ・
          ・           ・              ・          ・
<    0.0157224,   0.00520788,    0.0200184,   0.00264991 >
<    0.0157082,   0.00520788,    0.0200004,    0.0026523 >
<    0.0156941,   0.00520788,    0.0199824,   0.00265469 >
水が 16リットル: 1.6% まで減っても角運動量は 0.00520788/0.00521375 * 100 == 99.9% 残っています。

わざわざ上のような大げさな計算をしなくても、角運動量は保存されているとして水が減ったときの角速度を求めても、二桁程度は正しい角速度が求められます。

最初 1.7`meter だったドラム缶風呂の水深が 2`cm になることで、最初 4.17117e-005 radian/`sec だった角速度が 0.00354535 `radian/sec まで拡大されます

Δv/1`meter  1.27209`meter/(2`cm)
< 0.00265305 > `radian/sec

この回転速度では、水に何かを浮かべるなどして注意深く観察してやっと解るかどうかだと思います。

でも現実の風呂では排水を良くするために、底面にテーバーを付けます。これにより排 水の最後には、水が中心部分に集中します。1 meter の直径が 10 cm にまで縮めば、上 の角速度は二桁大きくなります。 0.265305 `radian/sec ならば、目視でも充分に分かる渦の回転速度になります。

sf "2`cm `π 0.5^2 1000"
< 15.708 > # リットル

さて 2 cm の厚さでも、上の計算のように 15 リットルの水が残っています。最後の 1 リットルでは、角速度はさらに、一桁以上大きくなります。 2.6530554535 `radian/sec 以上となります。結構早い角速度の渦だと言えます。このような渦が、風呂の排水時に見られることも多いと思います。排水口にできる渦は、最後の数秒間だけ高速回転になることが実際に観察されます。

以上のような計算により「コリオリの力は小さい。だから北半球では風呂の排水口に右回りの渦ができるのは俗説だ」との説も俗説だと主張します。前半の「コリオリの力は小さくて、その力では渦ができない」の部分だけが合っています。風呂よりも大きな、プールや溜池などでは、もっと明確に排水溝での右回りの渦(北半球)を観察できるはずです。

ただし、ここで説明した以外の要因による渦の発生もあると思います。洗面台のような少ない水ででも明確に渦が観測できることがあるのは、角運動量だけでは説明できません。流体力学で説明すべき何かがあるのだと思います。残念ですが、私の能力では説明できません。御存知の方がいらしたら御教えください。

台風の渦は本当にコリオリの力によるもの?

上に述べたようなことを検討しているうちに「コリオリの力によって台風の渦ができる」という話も「本当かしら?」と思うようになりました。風呂の水で渦ができるのは角運動量によるものでした。コリオリの力は無視できるオーダーでした。同様に台風でも、コリオリの力の影響は小さいようにも思えます。

でも実際に台風の場合について計算して見ると、角運動量の保存による渦と、コリオリの力による渦が同じオーダーで利いてくることが解りました。以下に、その計算過程を示します。

台風の渦は角運動量保存の法則によっても作られる

まず、話が単純な角運動量保存の法則による渦の生成を見てみましょう。

上昇気流によって、半径 100 `Km の範囲から半径 10 `Km の中心部分に空気を吸い寄せれば、角運動量は保存されるので角速度が大きくなります。半径が 1/10 になれば、角運動量は 100 倍になります。24 時間で一回転の角速度から、その 100 倍に増えます。北緯 35 度では下の角運動量になります。

ωtyphoon = 100 2 `π/(24`hour) !sin(35`degree)
< 0.00417117 >`radian/sec
この角速度は小さい値に思えますが、半径 10`Km の中心部分では、下のように 41`meter/`sec の速度になります。
10`Km ωtyphoon 
< 41.7117 >`meter/sec

この風速は実際の台風の風速と似た値ですが、だからといって角運動量保存則のみで台風の渦ができるとは主張できません。コリオリの力(加速度)によってどのような渦ができるかも調べて比較・検討する必要があります。。

圧力勾配による台風の風

台風の渦のでき方を厳密に調べるには、角運動量保存の効果とコリオリの力の両方を考慮した流体運動を調べる必要があります。でも、流体の運動を計算すること自体が大仕事です。さらに地表面との摩擦など、簡単には数式に組み込めない要因も考えると、流体の運動方程式を解くことは止めておくべきです。

その代わりに、台風の中心までの圧力勾配を仮定して、1 `meter^3 の空気の塊の運動を計算してみます。台風の中心までの圧力分布は pressure(r) = pc + Δp!exp(-r0/r) で近似できます。pc 台風の中心気圧です。Δp は周囲の気圧から中心気圧との差分です。r0 は 風速が最大になる半径です。台風の目の半径より少し外側です。詳細はこちらを参照ください。

この圧力勾配をポテンシャルと考え、外側から r0 まで 1`meter^3 の空気の塊が移動した時の速度の変化を、コリオリの力も角運動量保存則も働かないときについて計算して見ましょう。流体力学とは細かい結果はことなりますが、固定したポテンシャルによる運動のようなラフなモデルでも、渦のでき方の大まかな概要は解ります。

圧力勾配のみによる台風の風

後々の計算を見やすくするためにヘクト・パスカルの MKSA 単位値を示す hPascal sf 変数を作って起きます。

hPascal = 100 `newton/`meter^2

中心部分の気圧が遠方での気圧より 100 hPascal だけ低いときの圧力勾配は下のように計算できます。

//@@
r0 @= 10`Km     
Δp @= 100 hPascal      # 10000 `Newton/`meter^2

pc @= 1013 hPascal - Δp
N@=128
<<100`Km, N, -(100`Km)/N @r|
    pc + Δp!exp(-r0/r)
>>
//@@@
gdsp

この気圧勾配だけで、角速度の影響もなく、コリオリ力もないときに発生する風速を求めてみます。

空気 1`meter^3 の比重は 1.171`Kg です。(25 度の 飽和湿り空気です。)。この 1`meter^3 の空気が上の圧力勾配で加速されつづけたときの半径 10`Km の位置での速度を計算します。

mass = 1.171`Kg
単位長さあたりの圧力差は d presser(r)/dr であり、この力が 1`meter^3 の空気を下のように加速します。
     d pressure(r)
α = ------------ /mass = Δp 1/r0 !exp(-r/r0)/mass
          dr 

速度 v の空気が加速度 α で L `meter 移動した後の速度は下のようになります。

    v = !sqrt(v^2+ 2 α L)

この二つより、100`Km が r0=10`Km まで、100 hPascal の気圧差の先の圧力勾配により、下のように速度が位置によって変わって行きます。

//@@
/s
r0 @= 10`Km
N@=128
v@=0
L @= (100-10)`Km/N
#L @= (100)`Km/N
<<100`Km,N, -L @ r|
    α@= Δp r0/r^2 !exp(-r0/r)/mass
    v = !sqrt(v^2+ 2 α L)
    v
>>
//@@@
gdsp

摩擦が 0 と仮定したとき、圧力勾配のみよる台風の風の最終速度は 94.28`meter/`sec です。以外と大きな風速です。先に求めた角運動量保存による風速よりも、倍近い風速が 100hPascal の圧力差によって作られます。

本当は速度の変化求めるためには、上のように数値積分する必要はありません。圧力分布はポテンシャルと見なせます。圧力差が 1/2 m v^2 です。圧力差から v を直接計算できます。でも、後でコリオリの力による速度を計算するには数値積分が必要です。そのために数値積分を使って風速を計算しました。

圧力勾配にコリオリの力を追加した時の軌跡

先の圧力勾配にコリオリの力が付け加わったと仮定して、 1`meter^3 の空気の塊の軌跡を求めてみましょう。コリオリの力は、進行方向に直角に働くので、一直線に中心に向かう軌跡から右方向へのずれが加わります。中心からの距離の関数として与えられる風速の絶対値の関数は、コリオリの力が付け加わっても同じ値ですが、軌跡は中心方向に向かう運動からずれてきます。

Δt = 60`sec のサンプリング周期で flog leap 法で計算します。単位速度あたりに加わるコリオリの加速度 cEffct は東京での値とします。cEffct は先のボールに加わるコリオリ加速度から下のように計算できます。

cEffct @= !abs(/!norm(velBall))
< 8.34233e-005 > # (`meter/`sec^2)/(`meter/`sec)

中心から 100`Km の位置にある空気の塊に、圧力勾配とコリオリの力のみが付け加わったときの軌跡は下のように計算できます。

//@@
/s
rFirst @= 100`Km
Δt @= 60, v@=<<2>>, point @=<<2>>, r @=, r0 @= 10`Km, N@=400

α@= Δp r0/!norm(r)^2 !exp(-r0/!norm(r))/mass
#α = Δp 1/r0 !exp(-!norm(r)/r0)/mass
v[0] = α Δt/2
<<0, N, Δt @t|\
    point = point + v Δt|
    r = - point
    temp = cEffct < v[1], -v[0]>
    α = Δp r0/!norm(r)^2 !exp(-r0/!norm(r))/mass
    v = v + (α r/!norm(r) + temp) Δt
>>
//@@@
gdsp

コリオリの力で曲がるより、台風の中心に向かって吸い込む力が強いため、100`Km を動く間のずれは 5.4`Km と小さな値です。本当の台風ならば、台風の目の周りの上昇気流に移ってしまうのですが、中心力場ポテンシャルでの空気の塊の運動では、中心を掠めて再度引き戻される運動になります。この中心力場での空気の塊の運動より、中心から半径 100`Km より内側ではコリオリの力による軌跡の歪みは小さい事が分かります。

でも、ボテンシャル力が弱くて空気の塊の移動時間が長いときは、もっと大きく曲がる軌跡となります。中心から 400`Km の位置にある空気の塊に、圧力勾配にコリオリの力が付け加わったときの軌跡は下のように計算できます。

//@@
/s
rFirst @= 400`Km
Δt @= 60*10, v@=<<2>>, point @=<<2>>, r @=, r0 @= 10`Km, N@=400

α@= Δp r0/!norm(r)^2 !exp(-r0/!norm(r))/mass
#α = Δp 1/r0 !exp(-!norm(r)/r0)/mass
v[0] = α Δt/2
<<0, N, Δt @t|\
    point = point + v Δt|
    r = - point
    temp = cEffct < v[1], -v[0]>
    α = Δp r0/!norm(r)^2 !exp(-r0/!norm(r))/mass
    v = v + (α r/!norm(r) + temp) Δt
>>
//@@@
gdsp

上の軌跡の図で四つの辺が相似にならないのは、数値計算誤差の累積によるものです。でも、おおまかには、コリオリの力のように、進行速度に直角の力が加わり続けるとき、中心から遠い部分の空気の固まりは中心に向かうのではなく、中心に向かう運動がブーメランのように戻されながら、周囲を回りつづける運動となります。

さらに角運動量を付け加えます

コリオリの力と同時に角運動量保存の効果も付け加えたときの 1`meter^3 の空気の塊の軌跡を計算してみます。

//@@
/s
rFirst @= 100`Km
Δt @= 60, v@=<<2>>, point @=<<2>>, r @=< rFirst,0>, r0 @=10`Km, N@=110
ω @= 2`π/(24`hour)
Δp @= 100(100 `newton/`meter^2)  # 100 ヘクト パスカルの気圧差
α@= Δp r0/!norm(r)^2 !exp(-r0/!norm(r))/mass

rFirst= 100`Km, Δt=60, v=<<2>>, point=<<2>>, r=< rFirst,0>, r0=10`Km, N=400,ω=2`π/(24`hour),α= Δp r0/!norm(r)^2 !exp(-r0/!norm(r))/mass

v[0] = α Δt/2
r = < -rFirst, 0>
<<0, N, Δt @t|\
    point = point + (v + <-r[1],r[0]> ((rFirst/!norm(r) )^2 ω-2`π/(24`hour)))Δt
    r = point - < rFirst, 0>
    temp = cEffct (< v[1], -v[0]> + <-r[1],r[0]> ((rFirst/!norm(r) )^2 ω-2`π/(24`hour)) )
    α = Δp r0/!norm(r)^2 !exp(-r0/!norm(r))/mass
    v = v + (-α r/!norm(r) + temp) Δt
    point
>>
//@@@
gdsp

先の 100`Km の位置から軌跡で、角運動量が利いていないときの図と比較してみてください。100`Km 進んで中心に近づいたときのずれは -39.6`Km と 7 倍になっています。(縦軸と横軸のスケールを同じにしてあります。)

この計算では 1`meter^3 の空気の塊の軌跡が中心を通り越したあと 100`Km 程度の位置で終わらせています。 N = 110 にしてあります。角運動量が軌跡に与える影響の計算として、これより遠くの計算をさせることは無意味だからです。(N = 400 などとして、中心から 100`Km を超えた後の軌跡を計算させることもできますが、その軌跡は無意味です。)実際の台風での流体としての運動は、空気が回転運動をする状態で釣合うように圧力勾配が即ちポテンシャル関数が変わります。

もともと、角速度が半径の比の自乗 (rFrist/r)^2 で大きくなるとするのは、地球の表面に固定された回転座標系では近似式にすぎません。rFrist > r となったときには無意味です。

python コード化

上の sf コードは、下の python コードで計算させたほうが計算時間を二桁早くできます。既に sf を使って計算アルゴリズムは計算結果データまで含めて出来上がっていますから、 python コードに置き換えるのは容易です。

//@@
# -*- encoding: cp932 -*-
from sfVal import *
from scipy import *
Km = 1000.0
hour = 60*60.0
mass = 1.18     # Kg/m^3
cEffct = 8.342331105151207e-005
delta_t = 60.0
#rFirst = 80 * Km; N=3000
#rFirst = 60 * Km; N=2000
rFirst = 100 * Km; N=800
delta_t = 60.0  ;rFirst = 100 * Km; N=110
#delta_t = 60.0/4;rFirst = 100 * Km; N=800*8
delta_t = 60.0  ;rFirst = 400 * Km; N=600
delta_t = 60/10.;rFirst = 400 * Km; N=600*10
delta_t = 60/20.;rFirst = 400 * Km; N=600*10*2
#rFirst = 400 * Km; N=400*10*3
#rFirst = 500 * Km; N=20000
#rFirst = 200 * Km; N=2000
delta_p = 100 *100 #hect pascal
v =zeros(2,Float64); point =zeros(2,Float64); r =array([ -rFirst,0]); r0 =10*Km
omega = 2*pi/(24*hour)
alpha = delta_p * r0/dot(r,r) * exp(-r0/sqrt(dot(r,r)) )/mass

v[0] = alpha * delta_t/2
r = array([ -rFirst, 0])
resultMatrix = zeros([N,2],Float64)

# 下で x 変数は使っていません。sf のコードでの dummy 変数 t に合わせました
for ix, x in enumerate(arange(0,N*delta_t, delta_t)):
    if ( rFirst >= sqrt(dot(r,r)) ):
        point = point + (v + array([-r[1],r[0]]) *((rFirst/sqrt(dot(r,r)))**2*omega-2*pi/(24*hour)))*delta_t
        r =point - array([rFirst, 0])
        temp = cEffct*(array([ v[1], -v[0]]) + array([-r[1],r[0]]) *((rFirst/sqrt(dot(r,r)))**2*omega-2*pi/(24*hour)) )
    else:
        point = point + v*delta_t
        r =array([rFirst, 0]) - point
        temp = cEffct*(array([ v[1], -v[0]]))

    alpha = delta_p * r0/(dot(r,r))* exp(-r0/sqrt(dot(r,r)))/mass
    v = v + (-alpha* r/sqrt(dot(r,r)) + temp)* delta_t
    resultMatrix[ix,:] = point

putSf(resultMatrix, 'result')
//@@@
//copy \#####.### temp.py /y

ただし rFrist > r となったときに角運動量の保存則による影響がなくなるように場合分けしたコードを追加しています。

gdsp result

先の 400`Km の位置からの軌跡で、角運動量が利いていないときの図と比較してみてください。コリオリ力だけのときより軌跡が右方向にずれます。中心方向に20`Km 進んだだけで(約半分です)、元の半径にの位置に戻ってきます。(gnuplot 図のスケール表示が潰れていますが、縦軸と横軸のスケールを同じにしてあります。)

実際の台風の空気の固まりでは、これらのような直線的に跳ね返される運動ではなく、円運動となります。円運動となるような気圧勾配に少しだけ変わってきます。pc + Δp!exp(-r0/r) の気圧勾配は所詮近似式です。

実際の台風では、海面と接触する場所で摩擦によって風速が弱まります。コリオリの力や、角運動量保存の効果が少なくなります。これらの力が釣合った空気の回転運動が崩れ、中心に向かう空気の流れが出てきます。海面と接触していない台風の中間の高さでは、空気は中心に流れずに回転運動を続けます。これにより、海面の高い温度の空気と上空の低い温度の空気の不均衡を効率的に掻き混ぜる台風の構造が出来上がります。

さらなる計算の勧め

台風の空気の運動を流体力学を使ってシミュレーションすることは大変です。現在のコンピュータ パワーを使っても簡単ではありません。

でも、ポテンシャルとコリオリ力と角運動量保存の効果を仮定して 1`meter^3 の空気の塊の運動を計算してみるだけでも多くのことが見えてきます。

  1. 台風の渦ができる要因として、はコリオリ力よりも角運度量保存の効果の方が数倍程度利いてくる。台風の中心に近づくほど角運動量保存効果が利いてくる。
  2. 地表面との摩擦により台風の中心への空気の流れができる
  3. 台風が北側に進む傾向があることも分かります。北半球では、風の向きが地球の回転と反対方向になる北側でより風速が落ちます。北側からより多くの空気が中心へ流れこみます。結果として台風は北に向かう。
  4. スマトラ諸島など、島が多くあるため島を中心に恒常的・局地的な上昇気流が発生しやすい海域では台風が発生しない。

竜巻は砂漠など熱い地表面と上空の寒気の不平衡状態が発生したときに、それを平衡状態にもどす空気の運動として発生します。台風の時より、地表面と上空の温度差がずっと大きくなります。竜巻の半径、中心の目とも台風よりずっと小さくなります。次のことが言えるはずです。

  1. 竜巻の渦には角運動量保存則の効果によってできる。コリオリの力は殆ど利かない。
  2. 竜巻は台風とは異なり、北に向かう傾向は殆どない。周囲の気圧配置の影響を受けながらランダムに動く。
  3. 大気についての角運動量保存効果がない赤道上では竜巻は発生しない。
  4. 海上では竜巻は発生しない。
これらのことが計算実験で解ってきます。sf を使えば簡単に計算実験できます。ぜひともお試し下さい。

天気予報でのシミュレーション計算

天気予報では、専用のコンピュータを使った大気の流体運動のシミュレーション計算を行っています。ここで論じたようなコリオリの力も当然計算しています。

でもシミュレーション計算するときは、コリオリの力と角運動量保存の効果の両方をひっくるめてコリオリ効果として扱うそうです。

実際の web page や教科書ではコリオリの力しか書いてないものが多く有ります。御注ください。


ホーム ページに戻る