• 締切済み

物理数値シミュレーションの結合と通信

 数値シミュレーションの技法に関する質問です。(以下、長文ですみません)  2つの数値計算プログラムがあり、それぞれ単独で、まあ正常に動作しています。その2つのプログラムは別の例えで言うと、プログラムAは空、プログラムBは海というものに対応しており、海面という境界では通信する必要がある、というようなものです。プログラムA,Bを何とか結合して全体を含んだプログラムCを作りあげるのが一般的なのかもしれませんが、プログラムA、Bについてそれぞれにあまり手を加えず、通信ができる仕組み(ファイル入出力で対応など)を少しだけ付加してプロセスとしては別々に実行できないかなと考えています。A,Bともに時間的に変化していくので、境界面での通信もそのつど計算する必要があるのです。  まず、Aを実行して、あるところで一旦休止して、Bが動き始め、あるところで休止し、またAが動く...というようなことなのかなと思いますが。この場合、A,Bが交互に動くという意味で同時性がないように思われますが、Aが終わったあと、Bが後ろから追いかけてくるというイメージです。1つのアイディアですが、AからBを呼び出すことができれば、AがBを呼び出し、実行している間、Aは待っており、Bが終わったらまたAが動き出す(そのあとまたBが呼び出される)という方法です。  2つのプログラムは変数名が同じだったりするので変数管理が大変で間違いそうなのでできればソースを編集して結合するのはやりたくないと思っています。  Linuxのシェルスクリプトだったら何でもできるというのかもしれませんが、私は主にWindowsユーザで言語はFortran, シェルというよりバッチ(バッシュよりバッチ)という環境で使っています。(Fortran90以降はモジュールという考え方も出ているようですが、どんなものかなと思いますが。) 何かアイディアがあれば教えて頂きたいのですが。よろしくお願いします。 ※今回の質問はプログラム2つでしたが、うまくいったら3つ4つとなっていく可能性ありです。 ※適当なカテゴリが見つからず、Cのユーザだったらシステムのキモの部分から何でも知っているはずなので、このカテゴリにアップしました。

みんなの回答

  • f272
  • ベストアンサー率46% (8653/18507)
回答No.1

Aを起動して,1タイムステップ実行しその結果をファイルに出力して,Bを起動してAの結果ファイルを読み,1タイムステップ実行しその結果をファイルに出力して,Aを起動して,Aの結果ファイルを読み,1タイムステップ実行しその結果をファイルに出力して... という形でいいのであれば簡単ですね。 そういう動作をするドライバプログラムを作成しましょう。ドライバでは,Aの入力ファイルの設定,Aの実行,Bのの入力ファイルの設定,Bの実行を必要な回数だけ繰り返すようにしておけば良いです。

skmsk1941093
質問者

お礼

回答ありがとうございます。 ドライバプログラムとは、プログラムの起動をコントロールするものだと思います。シェルスクリプト、バッチ、プログラム言語本体などあるかなと思いますが、ループを回すということを考えるとどれがよい、と言えるでしょうか。バッチでできるかなと思いますが。バッチもシェルスクリプトも文法もよく知らないのですが。 (別件ですが、2つのプロセスを起動するようなことはシェルスクリプトじゃないとできないですね。) また、やはりファイルによるデータ共有ですからその分のロスタイムが大きいかなと思いますが、どのような感じでしょうか。

すると、全ての回答が全文表示されます。

関連するQ&A