【浅水流方程式】ダム崩壊問題の解析解全パターン!動画付き!
【浅水流方程式】サイトマップ(ここから関連記事が探せます)
前に作った、浅水流方程式におけるダム崩壊問題(dam break problem)の解析解を計算するコードを用いて、水深と流速がどうなるか動画にしていきたいと思います!こういうのは動画のほうがわかりやすいです。Toroの"Shock-Capturing Methods for Free-Surface Shallow Flows"が非常に参考になります。
Shock-Capturing Methods for Free-Surface Shallow Flows
- 作者: Eleuterio F. Toro
- 出版社/メーカー: Wiley
- 発売日: 2001/03/23
- メディア: ハードカバー
- この商品を含むブログを見る
ダム崩壊問題(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になることがある場合のことを言います。
問題設定は「領域の真ん中 にダムがあり、時刻 に取り去られる」となっています。
わかりやすくなるように、以下では水深は青のグラフ、流速は赤のグラフで表示します。
Wet bed
1. 左側衝撃波、右側衝撃波
・初期条件
、、、
・時間
まで
・結果
"hstar 0.882855
ustar 0
left shock with shock speed -1.95896
right shock with shock speed 1.95896"
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"
3. 左側衝撃波、右側膨張波
・初期条件
、、、
・時間
まで
・結果
"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"
4. 左側膨張波、右側膨張波
・初期条件
、、、
・時間
まで
・結果
"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"
Dry bed
5. 右側dry bed
・初期条件
、、、
・時間
まで
・結果
"left rarefaction dry bed with head speed -3.1305 and tail speed 6.26099"
6. 左側dry bed
・初期条件
、、、
・時間
まで
・結果
"right rarefaction dry bed with head speed 3.1305 and tail speed -6.26099"
7. dry bedが後から出現
・初期条件
、、、
・時間
まで
・結果
"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"
こちらもどうぞ
おまけ
使用したスクリプト
//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