「物理シミュレーション・フレームワーク」とは言いつつ、あまり大風呂敷を広げても途中で挫折してしまいそうなので、シミュレーションのタイプをある程度限定することにします。対象とするタイプのシミュレーションは、ある物理系に対して「状態の更新」と「観測量の出力」を交互に繰り返すようなものです。反復シミュレーションと言えばいいでしょうか。まぁ、大抵のシミュレーションはこういったタイプのものなので、大して窮屈な制限にはならないでしょう。
以下、シミュレーションと言えばこのタイプのシミュレーションを指すことにします。では、シミュレーション・プログラムとはどんなものか、もう少し具体的に考えてみましょう。
まず必要なのは、シミュレーション実行中に値を保持しておくための変数(フィールド)*1です。物理的に言えば、これは考えている系の状態を指定するものとなります。よってこれらの変数をまとめて状態と呼ぶことしましょう。
次に、シミュレーション・プログラム内で行われる手順(基本フロー)を定めたメソッド*2が必要です。メソッド内で行われる手続きは以下の通り:
- 状態を初期化する。
- (初期)状態を出力する。
- 反復条件が満たされている間、以下を繰り返す:
- 状態を更新する。
- 状態から観測量を計算する。
- 観測量を出力する。
- (終)状態を出力する。
状態の出力はすべてのタイミングでする必要はありません。
シミュレーション・プログラムの大まかな全体像はこんな感じでしょう。「メソッド内で行われる手続き」と書いた通り、これは手続き型の“ベタに書いた”プログラムです。次回以降で、ドメイン分析(っぽいこと)をして、これをもう少し「オブジェクト指向」っぽくしてやろうと思います。