数学とか語学とか楽しいよね

フランス語、ドイツ語、ロシア語、アラビア語、オランダ語、英語、スペイン語、ラテン語とか数学とか数値計算(有限要素法、有限体積法、差分法、格子ボルツマン法、数理最適化、C++コード付き)とか勉強したことをまとめます。右のカテゴリーから興味のある記事を探してください。最近はクラシックの名演も紹介しています。Amazonアソシエイトを使用しています。

【浅水流方程式】ダム崩壊問題におけるDry bedとWet bedの違い 三次元図付き

【浅水流方程式】サイトマップ(ここから関連記事が探せます)


今回は、前に作った浅水流方程式におけるダム崩壊問題(dam break problem)の解析解を計算するコードを用いて、Dry bedの場合とWet bedの場合それぞれの水深の時間変化の三次元図を作りました。

Shock-Capturing Methods for Free-Surface Shallow Flows

Shock-Capturing Methods for Free-Surface Shallow Flows


z軸が水深、x軸(手前に伸びている軸)が空間方向、y軸(右に伸びている軸)が時間方向です。

まず、Dry bedです。Dry bedの場合は膨張波のみが形成されることがわかります。


f:id:mutsumunemitsutan:20190408212011p:plain:w500
Dry bedの水深


次にWet bedです。一方、Wet bedの場合は、膨張波と衝撃波がそれぞれ逆向きに形成されることがわかります。


f:id:mutsumunemitsutan:20190408212052p:plain:w500
Wet bedの水深


Dry bedとWet bedにおけるダム崩壊問題は、このように定性的にまったく異なる解を持っていることがわかります。特に、波の先端の波速も異なります。気を付けて下さい!

こちらもどうぞ

【浅水流方程式】ダム崩壊問題の解析解全パターン!動画付き!

【浅水流方程式】サイトマップ(ここから関連記事が探せます)


前に作った、浅水流方程式におけるダム崩壊問題(dam break problem)の解析解を計算するコードを用いて、水深と流速がどうなるか動画にしていきたいと思います!こういうのは動画のほうがわかりやすいです。Toroの"Shock-Capturing Methods for Free-Surface Shallow Flows"が非常に参考になります。

Shock-Capturing Methods for Free-Surface Shallow Flows

Shock-Capturing Methods for Free-Surface Shallow Flows


ダム崩壊問題(dam break problem)には7パターンの解があります。すなわち、

1. 左側衝撃波、右側衝撃波
2. 左側膨張波、右側衝撃波
3. 左側衝撃波、右側膨張波
4. 左側膨張波、右側膨張波
5. 右側dry bed
6. 左側dry bed
7. dry bedが後から出現

です。さらに、これらはWet bedとDry bedに分けられます。1~4はWet bedで、5~7がDry bedです。Wet bedとは、水深が常に0より大きい場合のことを、Dry bedとは、水深が0になることがある場合のことを言います。

問題設定は「領域の真ん中  x=0 にダムがあり、時刻  t=0 に取り去られる」となっています。

わかりやすくなるように、以下では水深は青のグラフ、流速は赤のグラフで表示します。

Wet bed

1. 左側衝撃波、右側衝撃波

・初期条件
 h_l = 0.5 h_r = 0.5 u_l = 1.5 u_r = -1.5
・時間
 t = 1.2 まで
・結果
"hstar 0.882855
ustar 0
left shock with shock speed -1.95896
right shock with shock speed 1.95896"


f:id:mutsumunemitsutan:20190404215411g:plain:w400
水深

f:id:mutsumunemitsutan:20190404215453g:plain:w400
流速

2. 左側膨張波、右側衝撃波

・初期条件
 h_l = 1.0 h_r = 0.1 u_l = 0.0 u_r = 0.0
・時間
 t = 1.2 まで
・結果
"hstar 0.396175
ustar 2.32017
left rarefaction with head speed -3.1305 and tail speed 0.349762
right shock with shock speed 3.10355"


f:id:mutsumunemitsutan:20190404212248g:plain:w400
水深

f:id:mutsumunemitsutan:20190404212332g:plain:w400
流速

3. 左側衝撃波、右側膨張波

・初期条件
 h_l = 0.1 h_r = 1.0 u_l = 0.0 u_r = 0.0
・時間
 t = 1.2 まで
・結果
"hstar 0.396175
ustar -2.32017
left shock with shock speed -3.10355
right rarefaction with head speed 3.1305 and tail speed -0.349762"


f:id:mutsumunemitsutan:20190404213053g:plain:w400
水深

f:id:mutsumunemitsutan:20190404213148g:plain:w400
流速

4. 左側膨張波、右側膨張波

・初期条件
 h_l = 0.1 h_r = 0.1 u_l = -1.5 u_r = 1.5
・時間
 t = 1.2 まで
・結果
"hstar 0.00587508
ustar 0
left rarefaction with head speed -2.48995 and tail speed -0.239949
right rarefaction with head speed 2.48995 and tail speed 0.239949"


f:id:mutsumunemitsutan:20190404214548g:plain:w400
水深

f:id:mutsumunemitsutan:20190404214631g:plain:w400
流速

Dry bed

5. 右側dry bed

・初期条件
 h_l = 1.0 h_r = 0 u_l = 0 u_r = 0
・時間
 t = 0.8 まで
・結果
"left rarefaction dry bed with head speed -3.1305 and tail speed 6.26099"


f:id:mutsumunemitsutan:20190404182944g:plain:w400
水深

f:id:mutsumunemitsutan:20190404203523g:plain:w400
流速

6. 左側dry bed

・初期条件
 h_l = 0 h_r = 1.0 u_l = 0 u_r = 0
・時間
 t = 0.8 まで
・結果
"right rarefaction dry bed with head speed 3.1305 and tail speed -6.26099"


f:id:mutsumunemitsutan:20190404204942g:plain:w400
水深

f:id:mutsumunemitsutan:20190404205539g:plain:w400
流速

7. dry bedが後から出現

・初期条件
 h_l = 0.1 h_r = 0.1 u_l = -3.0 u_r = 3.0
・時間
 t = 0.8 まで
・結果
"generation of dry bed
left rarefaction dry bed with head speed -3.98995 and tail speed -1.0201
right rarefaction dry bed with head speed 3.98995 and tail speed 1.0201"


f:id:mutsumunemitsutan:20190404210605g:plain:w400
水深

f:id:mutsumunemitsutan:20190404211115g:plain:w400
流速

こちらもどうぞ


おまけ

使用したスクリプト

//left and right dry bed h//
set terminal gif animate delay 5 optimize size 640,480
set output 'h.gif'
do for [j = 0:79 ] {
   plot [-5.5:5.5][-0.05:1.05] sprintf("gnuplot_h_%d.txt", j) using 2:3 with lines lw 1.5 lc rgb "blue"
}
set out
set terminal wxt enhanced


//right dry bed u//
set terminal gif animate delay 5 optimize size 640,480
set output 'u.gif'
do for [j = 0:79 ] {
   plot [-5.5:5.5][-0.05:6.5] sprintf("gnuplot_u_%d.txt", j) using 2:3 with lines lw 1.5 lc rgb "red"
}
set out
set terminal wxt enhanced


//left dry bed u//
set terminal gif animate delay 5 optimize size 640,480
set output 'u.gif'
do for [j = 0:79 ] {
   plot [-5.5:5.5][-6.5:0.05] sprintf("gnuplot_u_%d.txt", j) using 2:3 with lines lw 1.5 lc rgb "red"
}
set out
set terminal wxt enhanced


//generation of dry bed h//
set terminal gif animate delay 5 optimize size 640,480
set output 'h.gif'
do for [j = 0:79 ] {
   plot [-5.5:5.5][-0.01:0.11] sprintf("gnuplot_h_%d.txt", j) using 2:3 with lines lw 1.5 lc rgb "blue"
}
set out
set terminal wxt enhanced


//generation of dry bed u//
set terminal gif animate delay 5 optimize size 640,480
set output 'u.gif'
do for [j = 0:79 ] {
   plot [-5.5:5.5][-3.2:3.2] sprintf("gnuplot_u_%d.txt", j) using 2:3 with lines lw 1.5 lc rgb "red"
}
set out
set terminal wxt enhanced

【浅水流方程式】リーマン不変量と一般化リーマン不変量の違い(数式なしで)

【浅水流方程式】サイトマップ(ここから関連記事が探せます)


今回は数式なしで説明します。

リーマン不変量(Riemann Invariants)は、特性曲線に沿って一定の値をとります。一方、一般化リーマン不変量(Generalized Riemann Invariants)は、単純波をまたぐ際に使えるもので、m個の保存則に対してm-1個の常微分方程式が成り立つことを言います。

似ているので気を付けてください。特に、一般化リーマン不変量は、ダムブレイク問題の解析解の導出などで使う便利な式です。Vincent Guinot, "Wave Propagation in Fluids: Models and Numerical Techniques"にわかりやすく載っていました。是非一読下さい。

参考
Vincent Guinot, "Wave Propagation in Fluids: Models and Numerical Techniques", 2.1.3 Characteristic form – Riemann invariants, pp.57-59, 3.3.2 Generalized Riemann invariants, pp.143-144.

Wave Propagation in Fluids: Models and Numerical Techniques

Wave Propagation in Fluids: Models and Numerical Techniques

【語学学習】立ち止まらずにどんどん読もう

読んでいてわからなくても、どんどん読んでいきましょう。そのうちわかります。

以下引用です。

ライプニッツが12歳で教師も辞書もなしにリウィウスが書いた『ローマ建国史』を、分かるところだけ拾い読みするのを繰り返し、ラテン語が読めるようになった

少女:でも分からないところを飛ばすって、なんか罪悪感ない?
少年:分かるけど、難しいって悩んだり無力感に苛まれたりするのって、そもそも脳のパフォーマンスを下げることなんだ。短期的には余計に理解しづらくなるし、覚えられなくなるし、学習効率は下がる。長期的には、学ぼうとする度に繰り返し不快な感情を浴び続けたら、誰だって学習意欲は下がるし、学ぶことをやめちゃうよ。

【フランス語】子供向けフランス語ニュースサイト

子供向けフランス語ニュースサイトのリンクです。文体はかなり明快ですが、語彙の点や多読の観点から勉強におすすめです。大人が読んでも興味深い記事がたくさんあります。

下に点々が出ている単語にカーソルを合わせると、フランス語でその単語の意味を見ることができます。