シミュレイト趣味
=数値計算による物理的なシミュレーション・その趣味的な展開=
<<このホームページの趣旨について>>
素粒子の極微スケールから宇宙的スケールまでの物理法則や、
物質(個体・液体・気体・プラズマ)とエネルギー(力学的・電気的・化学的・熱的)、
および情報を扱う科学技術、地震・火山・気象・水象などの自然現象、
あるいは生命現象や社会現象の法則などに興味のある方は多いことでしょう。
それらのうち、シミュレイト(模擬)によってシンプルな具体例を示しやすい
現象および法則は限られ、私のような単なる科学好きに挑戦できる範囲はさらに
限られてて当然ですが、分かりやすい事象については積極的に公開することで
理解者の裾野を広げていけるのではと信じて、このHPを造ってみた次第です。
当面のテーマは、自力と半自力のプログラム2題だけです。
全面的な他力本願でも良ければ、シミュレイトまたはシミュレーションの
類型に合う同様のHPにリンクを追加していくことも有り得ます。
1.水路に発生した孤立波の運動
2.レイトレーシングによる3次元グラフィック
このHPが皆さんの科学的な興味を少しでも満たせることを願っています。
【謝辞】
北上川上流の洪水シミュレーションを40年以上前に創始された方々に感謝します。
レイトレーシングプログラムと解説を約20年前に著作された守川先生に感謝します。
非定常不等流条件での水流と波動 「水路に発生した孤立波」 (準動画的)
レイトレーシング・サンプル 「溝を転がる球体3種」 (動画には非ず)
ご意見、ご感想、ご質問などは、
こちらにメール願います。
(頭脳の休憩に、コーラスはいかが。)
????????????
<<水路に発生した孤立波の運動>>
三角関数のような連続した波ではなく、ひと山づつ独立した安定な波が孤立波です。
下記のプログラムで、水路の中の孤立波を体験してみて下さい。
プログラム名: USFlow.exe
プログラム倉庫へ
(注)「Microsoft Visual Basic 2005」による実行
形式での配布のため、「.NET FRAMEWORK」が機能している環境以外で
は実行できません。
<<1.現象模擬空間の構成>>
水路といっても、幅は200mにしてあるので河川に近い想定です。
底の勾配は1万分の1、定常状態での水深と流量は2mと285立方m/秒です。
距離200mを単位区間として、20区間で4kmの模擬演算を行います。
空間表現は、分布を扱う次元で言えば、水路の流れに沿う距離方向の1次元です。
水路幅方向には流れの一様性が仮定されていますし、高さ方向も水面の水位や水深
に纏めて扱うことで水圧の垂直方向分布などの取り扱いは避けられています。
演算上の時間刻みは1回30秒にしてあり、60回分=30分間の模擬となります。
ただし、画面のグラフ更新は1秒単位ごとなので実現象の30倍早い上映です。
<<2.模擬された孤立波の波速と波長>>
掲載のプログラム実行によって画面に現れる孤立波は、波速で約4.5m/秒、波長
は1200mくらいになるでしょうか。
定常状態の流速である0.8m/秒をはるかに上回る「長波」の波速になっています
ので、この模擬演算は検証の関門をひとつクリアしています。
なお、波形が徐々に低くなるのは、水路底面での摩擦により運動エネルギーが損失を
受けることによるものです。
<<3.滑らかな現象表現と、それを可能とする背景>>
ここで注目を頂きたいのが、たかだか6区間程度で孤立波1個を滑らかな流量分布と
して表現している点です。
じつは、この点が独創的な手法であり、距離方向の微分演算を単純な差分ではなく
自然スプラインを応用することにより近似曲線次数の高い(誤差の少ない)ものとし、
波動現象を扱ううえで大切な、計算の安定性も獲得しています。
(差分の誤差が無意味な波動を生み、収拾がつかなくなる傾向が回避されています。)
このことを直感いただくために、流量分布曲線は自然スプラインが与える各区間ごと
の3次曲線で描き、近似曲線が滑らかにつながることも示しています。
なお、水面の高さである水位の分布グラフは、位置のエネルギーに流速のエネルギー
も加えた一括のエネルギー分布しか扱っていないため、水位だけを分離して近似曲線で
描くことが難しく、折れ線グラフでの表示となっています。
<<4.実現象との対比による意味づけ>>
ところで、実際にこのような現象が起こりうるでしょうか。
答えはYESです。
大きな川では、河口部から数km〜数十km程度上流に潮止め堰が設けられることが
ありますが、その堰のゲートを故意に急に動かして一定時間放流を増やし、再び急に戻
すと、こんなふうな津波とも呼べそうな孤立波が発生してしまいます。
もちろん、ダムや堰の管理を預かる方々は、こんな現象を生じないよう厳重に注意を
していますので、通常は心配する必要はありません。
そのほかでは、狭い運河などで何かの拍子にできた孤立波が、かなり遠くまで伝わる
現象が知られています。
孤立波は、英語でsoliton(ソリトン)という物質的な名前が与えられていま
すが、光ファイバーの中を伝わる赤外線のごく短いパルスもソリトンと呼べる場合があ
るそうです。
光と水面の波とでは細かい性質は色々違いますが、波動の形式を持つエネルギーの
固まりが遠くまで伝わる点で、ソリトンとしての共通性があると言えそうです。
<<5.端部での反射波について>>
最後に、流れの最下端で波動エネルギーを綺麗に全部消滅させられない関係で、若干
の反射波が上流に戻っていく様子まで模擬されています。 これはご愛嬌です。
現実には、最下端に何か障害物が無い限りこんな反射波は起きないと思います。
<<レイトレーシングによる3次元グラフィック>>
20年ほど前の月刊アスキーに掲載され、下記のとおり単行本にもなったプログラム
(N88BASIC版)のうち、特にレイトレーシングの部分に惚れ込み、Quick
Basic時代も引き続き楽しんで来ましたが、最新のVisualBasic文法の
習得を兼ねて、移植と若干の機能追加をしたので実行形式プログラムを紹介します。
[2007年5月上旬 追加]
半ば本業に関連する「ダム湖の荒廃湖岸に緑を〜」という
論文に連動した3D画像を
作成する機会がごく最近あり、自己の将来活動への種まきとしてPRします。
追加配布するのは、RayTracing5.exeと関連データファイルで、RayTracing3との相違
は次のとおりです。
プログラム:
1)図形データ数の増大に対応したデータ配列サイズの倍増
2)水面下など透明体内部の透過において距離減衰(距離6.0ごと半減)を追加
3)上記距離減衰分の補填として、その4割を透明体自身の色で補う処理を追加
4)透過や反射による枝分かれ判定処理における打切り光強度を精密化
5)画像表示枠サイズが宣言値より縦・横4ドットずつ削られていた分を補正
データファイル: (22種から23種に増加)
1)巨大プランター(PLANTER.txt)を1番目に追加し、その他を繰り下げ
2)正12面体の2種のデータにおいて、一部の自発光強度が強過ぎたのを修正

結果的に、巨大プランターでは60余りの立体図形を扱うことになり、処理時間が
他のデータよりも長く掛かりますので、その点はご理解を願います。
また全般的に透明体を透過した色は以前よりも若干ですが、くすみがちとなります。
透過での距離減衰を追加した目的は、水深による見え方の差を現実に近づけるため
であり、一定の効果が得られていることは右の画像でも判断頂けるかと思います。
[追加終わり]
プログラム名: RayTracing3.exe 又は RayTracing5.exe
プログラム倉庫へ
(注)「Microsoft Visual Basic 2005」による実行
形式での配布のため、「.NET FRAMEWORK」が機能している環境以外で
は実行できません。
データファイルを多数含むZIP形式の圧縮ファイルですので、全て同じフォルダに
復元してからご使用下さい。
図形入力が簡略化されていなかったり、ピクチャーマッピング機能も無いなど、最新
のレイトレーシング技法とは比べようもありませんが、基本的な機能の把握には十分に
役立つと思いますし、何よりも手作り的な懐かしさがここにはあります。
◇書籍名:PC‐9801 3次元グラフィックス入門 アスキーブックス
著者 守川 穣(元 福井高等専門学校 教官)
Amazonなどに掲載されており、入手は可能と思われます。
図形データや計算方法などの詳細解説は、本書を利用下さい。
なおプログラムの移植や機能追加などの改変については、著者の守川先生からご了承
を頂いています。
ソースプログラムは、初めてのVisualBasic挑戦で、改変部分はお見せでき
るような代物でないですし、アスキー社さんへの配慮もあって掲載しない方針です。
ただ、どんなめちゃくちゃソースでも気にしないという方は、ご相談下さい。
<<改変の概要>>
以下にオリジナルプログラムからの変更点を記載しておきます。
1)N88BASICから(QuickBasic経由で)VisualBasicへ
言語仕様に合わせた変更。(型宣言、IFなどの構文、関数、描画コマンドなど)
2)イベント駆動型の新しい大枠構成を造り、ボタンクリック等のイベント検出により
元のプログラム全体をグラフィック画面の再描画サブルーチンとして呼び出す形式に
組み替え。
3)最初のクラス宣言のところで、大部分の変数を前もって定義しておく形式とした。
(旧Basicでは、宣言なしでサブルーチン枠を越えていたことへの補償。)
4)フルカラー化の試験を兼ねてグラディエーションのあるタイトル画面を追加。
5)初期のPC−9801が8色どまりだったため、縦2×横2計4ドットで1画素を
表していたが、フルカラー化に合わせて1画素1ドットに精細化を図った。
6)プログラム内のDATA文や、それを読むREAD文が使えなくなったことに対応
して、立体図形データを複数のテキストデータファイルに独立させ、リストボックス
で選択されたデータファイルを対象として処理する形式に変更。
(実行形式プログラムのユーザーは、自己作成の図形データを読ませたい場合には、
データファイルのどれかを名前を変えずに書き換える方法が採用可能。)
7)視点を変える機能として、視野参照点を通る垂直軸回りの回転と、垂直方向の移動
をテキストボックスに入力したうえで再実行できるように追加した。
<<移植での苦労話>>
イベント駆動型ということで、グラフィック画面のリフレッシュサブルーチンを抜け
出さないと画面が表示されず、旧来のように順次表示ドットが書き変わる課程が見られ
なくなったことが一番のダメージでした。
その違和感に悩まされ、遠回りの苦労を強いられました。
<<データファイルについて>>
データファイルで紹介する立体図形の組み合わせ中には、著者の守川先生がお造りに
なられたデータもありますが、それを大きく翻案したものや新たにデータを作ったもの
も加えています。
とくに正12面体は、根拠資料は既に無くしましたがデータを作るのに難儀した思い
出深い立体です・・・。