(57)【特許請求の範囲】
【請求項１】
ネットワーク間通信あるいはプロセス間通信を介して複数のモジュールが互いに連携しあうシミュレーション装置において、
前記モジュールはそれぞれ、
当該モジュールおいてモデルプログラムに基づくシミュレーションの計算を実行するシミュレーション機能部と、
前記モデルプログラムに対して入出力となる信号を送受信するインターフェイス部と、
前記シミュレーションの状態を復元するためのシミュレーションデータの保存及び読み込みを実行する状態保存・読込部と、
他の前記モジュールで実行される前記モデルプログラムとの同期を行う時間制御部と、から構成され、
前記インターフェイス部で送受信される信号は、それぞれの前記モジュールに同時に送られる共通のブロードキャスト信号と、個々の前記モジュールの間でのみ相互に送受信される連携信号とが含まれ、
前記ブロードキャスト信号は、前記シミュレーションの開始・停止命令、その休止・再開命令、個々の前記モジュールにおける前記シミュレーションデータの保存命令、あるいは保存された任意の前記シミュレーションの状態の復元命令、これら保存命令や復元命令を定期的に行うバックトラック命令、及び前記シミュレーションの速度を実時間に対して加速あるいは遅速させるための実時間倍速率のうち少なくとも一つが含まれ、
前記連携信号は、前記ブロードキャスト信号とは無関係に送受信され、
前記ブロードキャスト信号は前記シミュレーションの速度を実時間に対して加速あるいは遅速させるための実時間倍速率を含み、
前記時間制御部は、全体のシミュレーション周期を前記実時間倍速率で割った値を目標計算時間として設定し、個々の前記モジュールにおける前記モデルプログラムの実行に要する所要時間と前記目標計算時間との差から求まる待機時間を設定することで、全てのモジュールにおける前記同期を取ることを特徴とするシミュレーション装置。
【請求項２】
請求項１に記載のシミュレーション装置において、
前記時間制御部において、前記所要時間が前記目標計算時間を超えた場合は、前記待機時間を設定せずに前記モデルプログラムの次のサイクルを実行し、前記所要時間が前記目標計算時間を超えた差分を補正した待機時間を設定することにより、全ての前記モジュールにおける前記同期を取ることを特徴とするシミュレーション装置。
【請求項３】
ネットワーク間通信あるいはプロセス間通信を介して連携してシミュレーション装置の一部を構成するシミュレーション装置のモジュールであって、
モデルプログラムに基づくシミュレーションの計算を実行するシミュレーション機能部と、
前記モデルプログラムに対して入出力となる信号を前記ネットワーク間通信あるいは前記プロセス間通信を介して送受信するインターフェイス部と、
前記シミュレーションの状態を復元するためのシミュレーションデータの保存及び読み込みを実行する状態保存・読込部と、
前記シミュレーション装置の残部で実行される別のモデルプログラムとの同期を行う時間制御部と、から構成され、
前記インターフェイス部で送受信される信号は、それぞれの前記モジュールに同時に送られる共通のブロードキャスト信号と、個々の前記モジュールの間でのみ相互に送受信される連携信号とが含まれ、
前記ブロードキャスト信号は、前記シミュレーションの開始・停止命令、その休止・再開命令、個々の前記モジュールにおける前記シミュレーションデータの保存命令、あるいは保存された任意の前記シミュレーションの状態の復元命令、これら保存命令や復元命令を定期的に行うバックトラック命令、及び前記シミュレーションの速度を実時間に対して加速あるいは遅速させるための実時間倍速率のうち少なくとも一つが含まれ、
前記連携信号は、前記ブロードキャスト信号とは無関係に送受信され、
前記ブロードキャスト信号は前記シミュレーションの速度を実時間に対して加速あるいは遅速させるための実時間倍速率を含み、
前記時間制御部は、全体のシミュレーション周期を前記実時間倍速率で割った値を目標計算時間として設定し、個々の前記モジュールにおける前記モデルプログラムの実行に要する所要時間と前記目標計算時間との差から求まる待機時間を設定することで、全てのモジュールにおける前記同期を取ることを特徴とするシミュレーション装置のモジュール。
【請求項４】
ネットワーク間通信あるいはプロセス間通信を介して複数のモジュールが互いに連携しあうシミュレーション方法において、
前記モジュールはそれぞれ、
当該モジュールおいてモデルプログラムに基づくシミュレーションの計算を実行するシミュレーションステップと、
前記モデルプログラムに対して入出力となる信号を送受信する送受信ステップと、
前記シミュレーションの状態を復元するためのシミュレーションデータの保存及び読み込みを実行する保存・読込ステップと、
他の前記モジュールで実行される前記モデルプログラムとの同期を行う時間制御ステップと、を実行し、
前記送受信ステップで送受信される信号は、それぞれの前記モジュールに同時に送られる共通のブロードキャスト信号と、個々の前記モジュールの間でのみ相互に送受信される連携信号とが含まれ、
前記ブロードキャスト信号は、前記シミュレーションの開始・停止命令、その休止・再開命令、個々の前記モジュールにおける前記シミュレーションデータの保存命令、あるいは保存された任意の前記シミュレーションの状態の復元命令、これら保存命令や復元命令を定期的に行うバックトラック命令、及び前記シミュレーションの速度を実時間に対して加速あるいは遅速させるための実時間倍速率のうち少なくとも一つが含まれ、
前記連携信号は、前記ブロードキャスト信号とは無関係に送受信され、
前記ブロードキャスト信号は前記シミュレーションの速度を実時間に対して加速あるいは遅速させるための実時間倍速率を含み、
前記時間制御ステップでは、全体のシミュレーション周期を前記実時間倍速率で割った値を目標計算時間として設定し、個々の前記モジュールにおける前記モデルプログラムの実行に要する所要時間と前記目標計算時間との差から求まる待機時間を設定することで、全てのモジュールにおける前記同期を取ることを特徴とするシミュレーション方法。
【請求項５】
ネットワーク間通信あるいはプロセス間通信を介して複数のモジュールが互いに連携しあうシミュレーションプログラムにおいて、
前記モジュールに搭載されたそれぞれのコンピュータに、
当該モジュールおいてモデルプログラムに基づくシミュレーションの計算を実行するシミュレーションステップ、
前記モデルプログラムに対して入出力となる信号を送受信する送受信ステップ、
前記シミュレーションの状態を復元するためのシミュレーションデータの保存及び読み込みを実行する保存・読込ステップ、
他の前記モジュールで実行される前記モデルプログラムとの同期を行う時間制御ステップ、を実行させ、
前記送受信ステップで送受信される信号は、それぞれの前記モジュールに同時に送られる共通のブロードキャスト信号と、個々の前記モジュールの間でのみ相互に送受信される連携信号とが含まれ、
前記ブロードキャスト信号は、前記シミュレーションの開始・停止命令、その休止・再開命令、個々の前記モジュールにおける前記シミュレーションデータの保存命令、あるいは保存された任意の前記シミュレーションの状態の復元命令、これら保存命令や復元命令を定期的に行うバックトラック命令、及び前記シミュレーションの速度を実時間に対して加速あるいは遅速させるための実時間倍速率のうち少なくとも一つが含まれ、
前記連携信号は、前記ブロードキャスト信号とは無関係に送受信され、
前記ブロードキャスト信号は前記シミュレーションの速度を実時間に対して加速あるいは遅速させるための実時間倍速率を含み、
前記時間制御ステップでは、全体のシミュレーション周期を前記実時間倍速率で割った値を目標計算時間として設定し、個々の前記モジュールにおける前記モデルプログラムの実行に要する所要時間と前記目標計算時間との差から求まる待機時間を設定することで、全てのモジュールにおける前記同期を取ることを特徴とするシミュレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のモジュール型プログラムを統合して実行させるシミュレーション技術に関する。
【背景技術】
【０００２】
物理・化学モデルを利用した数値解析プログラムを用い、様々な実現象をコンピュータ上で仮想的に模擬するシミュレーション技術が広く利用されている。
このようなシミュレーションは、一つの専用プログラムで実行する場合のみならず、複数のプログラムを連携させて実行する場合がある。
【０００３】
このように、複数のプログラムを連携させてシミュレーションを実行する場合は、解析対象となる現象の時間スケールや空間スケールを適宜分割し、全体の整合がとれるように配慮する必要がある。
そのようなシミュレーションを開発するのに、オブジェクト指向技術や並列・分散処理技術が適用されている。このオブジェクト指向技術は主に開発や保守の効率化に寄与し、この並列・分散処理技術は処理速度の効率化に寄与する。
【０００４】
例えば、流動とそれに伴う構造材の変形・振動等といった、互いに異なる複数の素過程から構成される現象を、シミュレーションする場合は、複数の素過程のシミュレーションコードを互いに連携させフィードバックさせる。
また、時間・空間スケールが異なる対象、例えば沸騰をミクロな沸騰の開始点から大規模なプール沸騰状態までを、マルチフィジクス・マルチスケール現象として連続的にシミュレーションする場合もある。
【０００５】
これらとは別に、ネットワーク上から時間や空間を意識せず利用できるクラウド的なサービスを利用して、シミュレーションコードを連携させることも検討されている。
このようなサービスの典型例としては、シミュレーションによる仮想実現を利用した教育や訓練等が挙げられる。
【０００６】
教育の場合は、対象となる人材の多様な要求やレベルにあわせ、さらに時間や場所に拘束されずに、パソコンやネットワーク上のパソコンを利用して実施することができる。
一方、訓練の場合、教育で身に着けるナレッジスキルのみならず、訓練対象となるプラント等のオペレーションスキル、あるいは動作スキルを身に着けることが求められる。この場合、訓練の現場に、対象となる実際のプラントを模した監視・操作の環境を備える必要がある。
【０００７】
訓練用のシミュレータとして、フルモックアップシミュレータ、コンパクトシミュレータ及びパソコンシミュレータに分類されるものが活用されている。
フルモックアップシミュレータは、実プラント等の訓練対象の監視・操作環境をなるべく忠実に模擬している。
【０００８】
コンパクトシミュレータは、一部の重要な監視・操作環境を実機同様のハードワイアードで模擬し、それ以外を、例えばタッチスクリーン方式等でソフト的に模擬している。
パソコンシミュレータは、実プラント等の訓練対象における挙動のみをシミュレーションプログラムで模擬し、監視・操作環境を、簡易的にグラフィックユーザーインターフェイス（ＧＵＩ）で代用している。
【０００９】
これらシミュレータは、前者になるに従い、設備は大規模化し、設置場所も限定され、使用者も限定される。
ところで、訓練において模擬する対象となる現象が同じであれば、いずれのシミュレータにおいても、実行されるプログラムに大きな違いは無く、プログラムを共通化することも可能である。
またプログラムを共通化することで、プログラムあるいはシミュレータの開発・改造・保守が効率化され、さらにシミュレータ間で現象の模擬結果や解釈が異なるといった弊害も回避できる。
【００１０】
しかし、シミュレータのプログラムがモジュール化されていなかったり、監視・操作環境のインターフェイスが標準化されていなかったりする。そのような理由により、各種シミュレータごとに、プログラムの開発、改造及び保守が進められる場合が多く、非効率なのが現状である。
また、教育やナレッジスキルレベルの訓練等において、ネットワーク上のクラウドサービスを活用する場合、クラウドサービスで提供されるシミュレーションプログラムのモジュール化の重要性が高まるものと予想される。
【００１１】
例えば、原子力プラントを対象とすると、設計基準レベルにおける従来の対応訓練に加え、設計基準レベルの事故を超越した過酷な現象であるシビアアクシデントへの対応訓練が要求されている。このような要求に対して、さまざまな事故を対象とした複数のシミュレーションプログラムの各々を、適宜連携させたり連続させたりして機能を実現させる必要がある。このような機能の実現のためには、やはりプログラムのモジュール化が重要な技術になってくる。
【００１２】
また、訓練用のシミュレータは、任意の状態から所定の状態へ復元させたり、元の状態へ復帰させたり、対象とする現象の進展速度に応じたシミュレーション速度の調整（実時間に対する倍速や遅速）をしたり、任意の状態においてインストラクタが介入して特徴的な機能の要求を受けたりする。
このため訓練用のシミュレータでは、これらの機能の各々を司るプログラムのモジュール化の要請が特に高い。シミュレーションプログラムのモジュール化は、訓練用シミュレータの用途に限らず、また機能のレベルの如何に関わらず、効率的な開発・運用にとって有益である。
【００１３】
なお、シミュレーションプログラムのモジュール化に関しては、すでにいくつかの技術が公知となっている。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特許第３２７２９８７号公報
【特許文献２】特開２００６−３６００号公報
【特許文献３】特開２０１３−２００５３６号公報
【特許文献４】特開２０１３−２２８５１４号公報
【特許文献５】特開２０１４−６１７８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
しかし、従来において取り組まれてきたプログラムのモジュール化は、インターフェイスの標準化に力点が置かれていた。特に、教育や訓練を目的としたシミュレータでは、シミュレーション間の同期、シミュレーション周期の調整、及び任意の状態からの復元や割り込み等の処理が、それぞれ独自に開発されている。このため、従来のモジュール化されたプログラムは、必ずしも汎用的な構造になっておらず、個別に手入れをする必要があり効率的な開発が望めない。
【００１６】
シミュレータの開発、改造及び保守の効率化を目指すためには、インターフェイスのみでなく、同期、割り込み、状態の保存、復元、デバック等の処理も含めて汎用化したモジュール化が要求される。
さらに、複数のモジュール化したプログラムは、ネットワーク上又は計算機のプロセス間で連携させ、統合的なシミュレーションを行うことも視野にいれている。
この場合、既存のシミュレーションプログラムを、連携を標準化する観点からモジュール構造に変換することができれば、これらモジュール構造の有効活用による開発の効率化が期待できる。
【００１７】
本発明はこのような事情を考慮してなされたもので、シミュレータを有効に活用・運用することができるシミュレーション技術を提供する。
【課題を解決するための手段】
【００１８】
ネットワーク間通信あるいはプロセス間通信を介して複数のモジュールが互いに連携しあうシミュレーション装置において、前記モジュールはそれぞれ、当該モジュールおいてモデルプログラムに基づくシミュレーションの計算を実行するシミュレーション機能部と、前記モデルプログラムに対して入出力となる信号を送受信するインターフェイス部と、前記シミュレーションの状態を復元するためのシミュレーションデータの保存及び読み込みを実行する状態保存・読込部と、他の前記モジュールで実行される前記モデルプログラムとの同期を行う時間制御部と、から構成され、前記インターフェイス部で送受信される信号は、それぞれの前記モジュールに同時に送られる共通のブロードキャスト信号と、個々の前記モジュールの間でのみ相互に送受信される連携信号とが含まれ、前記ブロードキャスト信号は、前記シミュレーションの開始・停止命令、その休止・再開命令、個々の前記モジュールにおける前記シミュレーションデータの保存命令、あるいは保存された任意の前記シミュレーションの状態の復元命令、これら保存命令や復元命令を定期的に行うバックトラック命令、及び前記シミュレーションの速度を実時間に対して加速あるいは遅速させるための実時間倍速率のうち少なくとも一つが含まれ、前記連携信号は、前記ブロードキャスト信号とは無関係に送受信され、前記ブロードキャスト信号は前記シミュレーションの速度を実時間に対して加速あるいは遅速させるための実時間倍速率を含み、前記時間制御部は、全体のシミュレーション周期を前記実時間倍速率で割った値を目標計算時間として設定し、個々の前記モジュールにおける前記モデルプログラムの実行に要する所要時間と前記目標計算時間との差から求まる待機時間を設定することで、全てのモジュールにおける前記同期を取ることを特徴とする。
【００１９】
また、ネットワーク間通信あるいはプロセス間通信を介して連携してシミュレーション装置の一部を構成するシミュレーション装置のモジュールであって、モデルプログラムに基づくシミュレーションの計算を実行するシミュレーション機能部と、前記モデルプログラムに対して入出力となる信号を前記ネットワーク間通信あるいは前記プロセス間通信を介して送受信するインターフェイス部と、前記シミュレーションの状態を復元するためのシミュレーションデータの保存及び読み込みを実行する状態保存・読込部と、前記シミュレーション装置の残部で実行される別のモデルプログラムとの同期を行う時間制御部と、から構成され、前記インターフェイス部で送受信される信号は、それぞれの前記モジュールに同時に送られる共通のブロードキャスト信号と、個々の前記モジュールの間でのみ相互に送受信される連携信号とが含まれ、前記ブロードキャスト信号は、前記シミュレーションの開始・停止命令、その休止・再開命令、個々の前記モジュールにおける前記シミュレーションデータの保存命令、あるいは保存された任意の前記シミュレーションの状態の復元命令、これら保存命令や復元命令を定期的に行うバックトラック命令、及び前記シミュレーションの速度を実時間に対して加速あるいは遅速させるための実時間倍速率のうち少なくとも一つが含まれ、前記連携信号は、前記ブロードキャスト信号とは無関係に送受信され、前記ブロードキャスト信号は前記シミュレーションの速度を実時間に対して加速あるいは遅速させるための実時間倍速率を含み、前記時間制御部は、全体のシミュレーション周期を前記実時間倍速率で割った値を目標計算時間として設定し、個々の前記モジュールにおける前記モデルプログラムの実行に要する所要時間と前記目標計算時間との差から求まる待機時間を設定することで、全てのモジュールにおける前記同期を取ることを特徴とする。
【００２０】
さらに、ネットワーク間通信あるいはプロセス間通信を介して複数のモジュールが互いに連携しあうシミュレーション方法において、前記モジュールはそれぞれ、当該モジュールおいてモデルプログラムに基づくシミュレーションの計算を実行するシミュレーションステップと、前記モデルプログラムに対して入出力となる信号を送受信する送受信ステップと、前記シミュレーションの状態を復元するためのシミュレーションデータの保存及び読み込みを実行する保存・読込ステップと、他の前記モジュールで実行される前記モデルプログラムとの同期を行う時間制御ステップと、を実行し、前記送受信ステップで送受信される信号は、それぞれの前記モジュールに同時に送られる共通のブロードキャスト信号と、個々の前記モジュールの間でのみ相互に送受信される連携信号とが含まれ、前記ブロードキャスト信号は、前記シミュレーションの開始・停止命令、その休止・再開命令、個々の前記モジュールにおける前記シミュレーションデータの保存命令、あるいは保存された任意の前記シミュレーションの状態の復元命令、これら保存命令や復元命令を定期的に行うバックトラック命令、及び前記シミュレーションの速度を実時間に対して加速あるいは遅速させるための実時間倍速率のうち少なくとも一つが含まれ、前記連携信号は、前記ブロードキャスト信号とは無関係に送受信され、前記ブロードキャスト信号は前記シミュレーションの速度を実時間に対して加速あるいは遅速させるための実時間倍速率を含み、前記時間制御ステップでは、全体のシミュレーション周期を前記実時間倍速率で割った値を目標計算時間として設定し、個々の前記モジュールにおける前記モデルプログラムの実行に要する所要時間と前記目標計算時間との差から求まる待機時間を設定することで、全てのモジュールにおける前記同期を取ることを特徴とする。
【００２１】
また、ネットワーク間通信あるいはプロセス間通信を介してモジュールが互いに連携しあうシミュレーションプログラムにおいて、前記モジュールに搭載されたそれぞれのコンピュータに、当該モジュールおいてモデルプログラムに基づくシミュレーションの計算を実行するシミュレーションステップ、前記モデルプログラムに対して入出力となる信号を送受信する送受信ステップ、前記シミュレーションの状態を復元するためのシミュレーションデータの保存及び読み込みを実行する保存・読込ステップ、他の前記モジュールで実行される前記モデルプログラムとの同期を行う時間制御ステップ、を実行させ、前記送受信ステップで送受信される信号は、それぞれの前記モジュールに同時に送られる共通のブロードキャスト信号と、個々の前記モジュールの間でのみ相互に送受信される連携信号とが含まれ、前記ブロードキャスト信号は、前記シミュレーションの開始・停止命令、その休止・再開命令、個々の前記モジュールにおける前記シミュレーションデータの保存命令、あるいは保存された任意の前記シミュレーションの状態の復元命令、これら保存命令や復元命令を定期的に行うバックトラック命令、及び前記シミュレーションの速度を実時間に対して加速あるいは遅速させるための実時間倍速率のうち少なくとも一つが含まれ、前記連携信号は、前記ブロードキャスト信号とは無関係に送受信され、前記ブロードキャスト信号は前記シミュレーションの速度を実時間に対して加速あるいは遅速させるための実時間倍速率を含み、前記時間制御ステップでは、全体のシミュレーション周期を前記実時間倍速率で割った値を目標計算時間として設定し、個々の前記モジュールにおける前記モデルプログラムの実行に要する所要時間と前記目標計算時間との差から求まる待機時間を設定することで、全てのモジュールにおける前記同期を取ることを特徴とする。
【発明の効果】
【００２２】
シミュレータを有効に活用・運用することができるシミュレーション技術が提供される。
【図面の簡単な説明】
【００２３】
【図１】実施形態に係るシミュレーション装置及びシミュレーションプログラムを構成するモジュールの標準構成図。
【図２】各モジュールにおける処理ステップを示すフローチャート。
【図３】複数のモジュールが通信を介して連携している状態を示す図。
【図４】ブロードキャスト信号およびモジュール間の連携信号の構成を示す図。
【図５】通信エラーチェック処理の説明図。
【図６】モジュールとその状態復元用のデータ保存領域の関係を示す図。
【図７】モジュールの復元データとそのファイル番号の関係を示す図。
【図８】モジュール間での計算引継ぎ処理の流れを示す図。
【図９】モジュール間での計算引継ぎ判定基準を説明する図。
【図１０】デバッグ用出力とデバッグ処理の関係を示す図。
【図１１】送受信信号監視によるデバッグファイル出力機能を説明する図。
【図１２】モジュールと時間制御で参照する時計との関係を示す図。
【図１３】シミュレーションサイクルとモジュールにおけるプログラムの実行及び待機との関係を示す図。
【図１４】シミュレーションサイクルが異なるモジュール間の同期タイミングを示す図。
【図１５】２倍速計算で実行されるシミュレーションの待機時間の説明図。
【図１６】計算負荷の変動に伴う実行待機と同期との関係を示す図。
【図１７】２倍速計算における同期遅れを回復する手順の説明図。
【図１８】モジュール間での時計の進み方を補正する手順の説明図。
【図１９】モジュール間での時計の進み方を補正する手順の説明図。
【発明を実施するための形態】
【００２４】
以下、本発明の実施形態に係るシミュレーション装置、シミュレーション方法及びシミュレーションプログラムについて図面を参照して説明する。
シミュレーションの目的とするところは、対象とする現象やユーザーによりさまざまであるが、シミュレーションプログラムには、以下の機能が最低限要求される。
（１）対象とする現象をモデル化したシミュレーション機能、（２）入出力機能、（３）実行条件の設定（命令）機能、（４）時間制御機能、（５）状態保存・再現機能。
【００２５】
さらに、複数のプログラムを連携させる場合は、（２）入出力機能に加え、さらに（６）通信機能とのインターフェイス、（４）時間制御機能に加え、さらに（７）同期機能が必要になる。
通信機能は、既存の通信プロトコルであるＴＣＰ／ＩＰやＵＤＰ／ＩＰ等に準拠したものを標準として利用すれば良い。また、使い易さを考慮すれば、（８）グラフィックユーザーインターフェイス（ＧＵＩ）による入出力機能、（９）計算の状態を確認するデバッグ機能、等も必要になる。
【００２６】
ただし、以上の機能は適宜まとめて代用実現が可能であり、図１のようにモジュール機能としてまとめることが可能になる。図１は、実施形態に係るシミュレーション装置及びシミュレーションプログラムを構成するモジュール１の標準構成を示している。
外部信号とのインターフェイス２には、（２）入出力機能の一部、（３）実行条件の設定（命令）機能、（６）通信機能とのインターフェイス、及び（８）グラフィックユーザーインターフェイス（ＧＵＩ）による入出力機能の一部が組み込まれる。
【００２７】
状態保存・読込部３は、シミュレーション機能の任意の状態の復元（読み込み）・保存を行うもので、（２）入出力機能の一部と（５）状態保存・再現機能が組み込まれる。
シミュレーション機能部（モデルプログラム）４は、（１）対象とする現象をモデル化したシミュレーション機能そのものである。
【００２８】
時間制御部５は、他のモジュールと同期して全体として整合した処理を行うもので、（４）時間制御機能と（７）同期機能が組み込まれる。
デバッグ機能部６は、シミュレーションが正常に動作しない場合に、シミュレーション機能内の内部状態や、外部とやり取りする送受信信号を確認するもので、（２）入出力機能、（８）グラフィックユーザーインターフェイス（ＧＵＩ）による入出力機能の一部、及び（９）計算の状態を確認するデバッグ機能が組み込まれる。
すなわち、本実施形態におけるモジュール１は、シミュレーション装置全体が対象とする現象全体のうちの一部の現象をモデル化した部分的なシミュレーションを行なう機能を備える要素部分であると言える。
【００２９】
図２は、各モジュールにおける処理ステップを示すフローチャートである。
各モジュールのプログラムは、シミュレータが起動されると各々の計算機のメモリ上にロードされ、シミュレーションの開始に備える。
図２のステップ（Ｓ１）〜（Ｓ６）は、無限処理ループを構成し、後述するシミュレータの操作制御プログラムからの命令信号に従って、待機状態から必要な処理を行う。
【００３０】
まずステップ（Ｓ１）において外部から外部信号を受信する。この外部信号は、後述するように上記の命令信号と他のモジュール間との連携データとから構成されるものである。この命令信号が待機状態を示し、また状態変更を示す命令信号も受信しなければ、ステップ（Ｓ２）から（Ｓ５）までの処理は全て実行されることなく、内部信号を外部へ送信し（Ｓ６）、再び外部信号を読み込んで（Ｓ１）、命令信号に変更があるまで同様の処理ループを繰り返す。
【００３１】
ステップ（Ｓ１）で読み込まれた命令信号に、状態設定指令が含まれていれば、この状態設定指令にしたがって初期設定が行われる。この初期設定は、既に保存されている任意の初期状態を格納したファイルを読み込むか、又はモデルプログラムが初期計算するのに必要な入力データを読み込むことにより行われる。
前者のファイル読み込みによる場合であれば、既にモデルプログラムのメモリ領域は指定された状態のものになっている。後者の入力データを読み込みによる場合は、モデルプログラムの初期計算が実行・終了した時点で同様の状態になる。
【００３２】
状態設定の処理（Ｓ２）を経た後は、モデルプログラムを実行してシミュレーションを開始する（Ｓ３）。なお後述するが、個々のモデルプログラムの１回あたりの時間メッシュ幅とシミュレータ全体でのシミュレーション周期とは必ずしも同じではない。
そこで、モデルプログラムの時間メッシュ幅がシミュレーション周期のより小さければ、時間メッシュ幅はシミュレーション周期に達するまで複数回実行を継続し、逆の場合は、シミュレーション周期が時間メッシュ幅に達するまではシミュレーション周期の計算は実行されないことになる。
【００３３】
ステップ（Ｓ３’）におけるデバッグ処理の書き出しは、モデルプログラム側で実行されるものであり、他のプログラムから参照して別途デバッグ可能にする必要もある。
ステップ（Ｓ４）における時間制御は、モジュールにおける時間進展と、シミュレータ全体でのシミュレーション周期との同期をとるためのものであり、具体的な説明は後述する。ステップ（Ｓ４’）の待機実行は、ステップ（Ｓ４）における時間経過がシミュレータ全体の周期になるように、シミュレーションの実行・待機を調整する機能である。
ステップ（Ｓ４’）における時間調整が終了すると、命令信号に基づいて、必要に応じて状態保存を行う（Ｓ５）。
【００３４】
ステップ（Ｓ１）〜（Ｓ５）の処理が全て終われば、ステップ（Ｓ６）において、必要な情報、例えば他のモジュールで必要なパラメータ値等の内部信号を外部へ送信する。
以上がモジュール内での処理の１サイクルであり、このサイクルをシミュレータ装置制御信号の命令に従って繰り返すことになる。このサイクルは、シミュレータの待機状態、休止状態でも常に繰り返され、シミュレータ全体が停止するまで継続する。
【００３５】
図３は複数のモジュールが通信を介して連携している状態を示している。
この場合、モジュール間の連携は、異なる計算機上のネットワークを介した連携でも、同じ計算機上で異なるプロセス間での通信を介したものでも良い。
【００３６】
ここでモジュール１は、シミュレータ全体の制御モジュールであり、他のモジュール２，３，４に対して命令を送信する。
モジュール２とモジュール３は、それぞれ異なる現象を模擬したモデルプログラムを有するモジュールであり、モジュール１から命令を受け、またモジュール同士でデータの連携を行う。
【００３７】
モジュール４は、結果の表示等、処理がシミュレーションには影響を及ぼさない処理を行うモジュールであり、計算モジュールからそれぞれの結果を受信する。
ただし、モジュール４がユーザーインターフェイスプログラムであれば、ユーザーから受けた指示は、モジュール１のシミュレーション操作制御プログラムに送信され、さらに計算命令としてモジュール２やモジュール３に伝えられる。
したがって、シミュレーション操作制御プログラム、表示プログラム、及びユーザーインターフェイスプログラムは、個々のモジュールにおいて標準化した構造をとることができることを示している。
【００３８】
また、図３において、モジュール間で送受信される信号は、片方向のものと双方向のものがある。これは命令信号のような一般的な制御信号は、種類が少なく、整数値をとるため通信容量は小さいが同時に共通に送る必要がある。
これに対して、シミュレーション用の連携信号は、実数（アナログ）値をとり、またシミュレーション計算の連携に使われるために容量が大きい。このためシミュレーション用の連携信号は、経路を迂回する時間遅れを最小に抑えるために、互いに連携しあうモジュール間で直接やり取りされることが好ましい。このことから、信号は種類により分けて構成し、また送受信処理も分けて行うことが望まれる。
【００３９】
シミュレーション操作制御プログラムであるモジュール１からモデルプログラムであるモジュール２およびモジュール３に送信される信号１１は、これらのモジュールに共通にブロードキャストされる信号である。
この信号１１は、図４の符号１４で表される構成を有している。全てのモジュールに対して共通に出される指令信号としては、符号１５で示されるように、実行/停止（あるいは再開/休止）を表わすRUN/FREEZE、状態の読み込み（復元）と書き込み（保存）を表わすREAD/WRITE、読み込みファイル番号と書き込みファイル番号を表わすIDUMP/IREST、実時間倍速率を表わすXSPEED等がある。また、データの保存・復元にはバックトラックのような周期的なものも含まれる。これらの指令は全てのモジュールに共通に適用されるが、表示モジュールのように全ての指令を要求しないものは受信側で参照しなければ良い。
【００４０】
また、共通指令以外に個別モジュールに特有の指令信号がある場合は、図４の符号１６のように共通信号の後から参照するモジュールを順番に追加する。これら指令信号も全てのモジュールにブロードキャストされるが、不要なモジュールでは同様に参照する必要は無い。ブロードキャスト信号は、シミュレーション操作制御プログラムからすべてのモジュールに同時に出されるので、モジュール間の伝搬経路に依存した伝達遅れが最小に抑えられる。
【００４１】
また、図３の符号１３は、シミュレーション操作制御プログラムに対するGUIのような限られた機能のモジュールに必要な双方向の指令信号であり、構成としては後述する個別アナログ信号と同じである。
図３の符号１２は、モジュール間での連携データであり、基本的にはアナログ値に対応した実数データである。これはモジュール２とモジュール３の間だけといった特定のモジュール間で交換される信号であり、図２のステップ（Ｓ１）で受信(GET)、ステップ（Ｓ６）で送信(PUT)を毎サイクルごとに交換が繰り返される。
【００４２】
このような連携データ１２の構成例としては、図４の符号１７で表される受信信号、符号１８で表される送信信号のようになる。これらはすべてのモジュールにおいて共通の構成をとる。例えばモジュール２からモジュール３に対しては、ステップ（Ｓ１）においてモジュール２はモジュール３からAGSIG3のデータを、モジュール３はモジュール２からAGSIG2のデータを受信し、ステップ（Ｓ６）ではそれぞれAPSIG3およびAPSIG2のデータを送信することになる。
【００４３】
符号１７，１８において、それぞれのデータ配列のサイズがN1〜NNのように個別に記載されているが、特別に大きな配列が存在しなければ全て共通とした方が保守の観点からは好ましい。
必要量に対して余裕を持たせた容量を領域に共通に用意しておけば、追加分は後ろの空いている領域に対して順次追加することができる。そして、参照を共通領域に対して行うこととすれば、追加によるプログラム処理の修正を、最小限に抑えることができる。
【００４４】
そのような容量を領域に個別設定する場合は、それぞれの信号の先頭に参照すべき配列数のデータを加えておけば良い。これにより、モジュール間ではそれぞれのモジュールで必要とする信号のみを互いに直接送信するため、信号の送受信量および伝達遅れを最適化することができる。
【００４５】
また、受信信号は、一旦受信バッファに格納されるため、万が一通信エラー等で正常な受信ができなかった場合であっても、受信プログラムのエラーフラッグを参照して受信バッファからの参照を更新しないようにしておけば、そのサイクルの受信のみがスキップされる。そして、１サイクル前のデータにより、受信側モジュールのシミュレーションサイクルを更新することにより、異常データによるシミュレーション計算の破たんを回避することができる。
【００４６】
すなわち、図５において信号受信プログラム１９で送信データにアクセスすると、送信バッファ２０から送信されてきたデータは受信バッファ２１であるBUFの領域で受信される。受信プログラム１９は、通信プロトコル(TCP/IPあるいはUDP/IP等)にしたがって、受信処理を行い、符号２２の判定において正常に受信が終了すれば、エラーフラッグERRは0に、それ以外ではエラー状況に相当する非ゼロの値を返す。
【００４７】
エラーフラッグがゼロ（ＹＥＳ）であればモデルプログラム側で参照を行い（符号２３）、非ゼロであればこの参照を行わない。このため非ゼロの場合、モデルプログラム側での参照データSIMは１サイクル前の値がそのまま残っているので、モデルはその値で計算を行うことになる。
【００４８】
ただし、エラー状況によってはシミュレータ操作制御プログラムにその情報を送信した上で、シミュレーションを停止する、あるいは停止の上、バックトラックの最新状態まで遡りその時点から計算を再開する、あるいは信号受信プログラム側での受信のリカバリ処理を待機する等の方法などもあるが、どのような手段を採用するかはシミュレーションに要求される精度や信頼性、ネットワークの信頼性等の要因にも依存する。
【００４９】
図６はモジュールとその状態復元用のデータ保存領域の関係を示している。
シミュレーション計算を構成する個々のモデルプログラムごとにデータの保存領域が設定される。すなわち、モジュール２に対しては保存領域２４が、モジュール３に対しては保存領域２５が設定される。
モジュールごとに復元データを分けて保存しておくことで、あるモジュールの復元データの構成が変更しても、他のモジュールの復元データの構成には影響しないので、保存・復元が従来通りに可能になる。
【００５０】
基本的に、あるモジュールの復元ファイル構造が変更されるとそのファイルを作り直す必要がある。そして、このモジュールと連携したモジュールも、例え構造が同じであっても、そのファイルが同時に作り直しされることになる。
ただし、後述するが全てのモジュールが同時には連携していない場合もある。例えば事象の進展により、モジュール２からモジュール３に状態が引き継がれ、計算モデルも同時に引き継がれるような連携である。
【００５１】
このような場合、引継ぎ前は、モジュール２の復元ファイルしかなく、逆に引継ぎ後はモジュール３の復元ファイルしかないわけである。このような場合は、モジュール３の復元ファイル構造が変わった場合でも、モジュール２の復元ファイルはそのまま使えることになる。
いずれにしろ、復元ファイルをモジュール単位で持つことにより、個々のファイルの容量を小さくすることができ、他のモジュールのプログラムに影響をおよぼすこともなく、保守の観点から、より扱いやすくなる。
【００５２】
図７は、モジュールの復元データとそのファイル番号の関係を示している。この図７に基づいて復元ファイルの書き込み、読み込みの実施例を説明する。
ある計算状態を保存あるいは復元する場合は、シミュレータ操作制御プログラムから保存・復元指令２６が全モジュールにブロードキャストされる。
この保存・復元指令２６に基づき、図２のステップ（Ｓ２）で復元（読み込み）、ステップ（Ｓ６）で保存（書き込み）が行われる。
【００５３】
また、この保存・復元指令２６がブロードキャストされるのと同時に、一般的に１からシーケンシャルに番号が設定されている復元ファイル２７をファイルリスト２４から選択しモジュール２に入力する。なお、既に同じ番号の復元ファイル２７がこのモジュール２にある場合は、上書きが行われる。
なお復元ファイル２７のファイル名は、モジュールごとにルールに従って番号２８，２９及びモジュール名が設定される。ファイル保存場所は、モジュール単位で設けられているので、モジュール名を省略して番号だけでも良い。この場合、周期的に自動保存されるバックトラックファイルの番号と重複しないように、後者の番号は予約しておくなどの方策を行う。
【００５４】
後述するように、計算機の時計を参照して同期をとっているために、同じ番号の付けられたファイルは、同時期にブロードキャストされていることを示すので、モジュール間での同期がとれていることの証明となる。また、番号を参照するだけで全モジュールから時間的に整合した状態を復元することが可能になる。
なお復元・保存は、図２に示すそれぞれのモデル計算の前後で行われているので、図７でモジュール２からモジュール３への引継ぎが行われた場合、モジュール２が停止している場合でも、復元や保存の処理が行われるので、そのファイル番号に対応したファイルは全て存在することになる。
【００５５】
この場合、停止直前の状態が復元ファイルに保存されることになるので、復元した状態もやはり停止直前の状態になる。なお、引継ぎにより計算が停止している情報をモジュールプログラムの最上位にレポートしておけば、復元・保存の処理をスキップできるので、その場合にはファイルの生成は行われないようにすることもできる。
この場合は、ユーザーが参照するファイルリストでは欠番が生じるので、それにより当該ファイルの状態ではモジュール間の引継ぎが行われていることがわかる。
同様に引継ぎが終了した場合は、連携の必要は無くなるので引継ぎされたモジュール間での送受信処理もスキップしても良い。更に、ここから最上位のシミュレータ操作制御プラグラムに停止状態を引き継いだ時点で、引継ぎ前モジュールが引き渡し完了（停止）、引継ぎ後モジュールが引き受け完了（開始）の情報を送信しても良い。
【００５６】
図８は、モジュール間での計算引継ぎ処理の流れを示している。
引継ぎを行った場合には、引継ぎ側のモデルプログラムでは、その引き継いだ状態になるような初期計算を実行する。
モジュールＸからモジュールＹへの引継ぎがユーザーから指令されたり、あるいはモジュールＸの計算結果があらかじめ設定した引継ぎ条件に達したりした場合に、モジュールＸは引継ぎ情報３２をモジュールＹに送信して引き渡す。これは図２のステップ（Ｓ６）に対応する処理である。
【００５７】
引継ぎが終了するとモジュールＸは停止（待機状態）となり、モジュールＹは初期条件ファイル３３（これも復元データの一種である）を読み込み、更に引継ぎ情報３２をオーバーライトして引き継ぎ時の初期状態を計算する（符号３４）。そして、その後の通信、継続計算、通信のサイクル処理３５を繰り返す。なおこのサイクル処理３５は図２におけるステップ（Ｓ１）から（Ｓ６）に相当するものである。
【００５８】
これまで述べた形態では、引継ぎ前の待機状態でも、引き渡し後の待機状態でも、引き受け前の待機状態でも、常に引継ぎモジュール間において、通信経路は設定され送受信が行われている。
これによりシミュレータ操作制御プログラムおよび個々のモジュールプログラムの、特に引継ぎによる特殊処理は、図８の符号３４による初期計算を除けば、処理に関して標準化されており、シミュレータ全体での処理の流れの見通しはわかり易いというメリットがある。
【００５９】
その一方で、引き継ぎ時のみに必要な引継ぎモジュール間での送受信が常に行われている。この送受信の通信量が全体のネットワークトラフィックに影響を及ぼす程大きければ、引継ぎ処理手順は特殊処理として用意する必要がある。
ただし、ネットワーク上での送受信処理は、図２のステップ（Ｓ１）や（Ｓ６）とは異なっており、ネットワークトラフィックとは無関係であることに注意する必要がある。ステップ（Ｓ１）や（Ｓ６）は、信号の値が前と変わればそれにより処理が変化する。しかし、ネットワーク上での通信が行われていない場合は、指令に変更が無いので、モデルの実行や読み込み・書き込み処理、時間制御処理は行われず、淡々と信号の読み込み、書き込みが継続される。
【００６０】
ただし、ネットワーク上での通信経路が確保されていない状態では、図５の符号１９の受信プログラムは一般にエラーとなる。送信側も同様である。したがって、この場合は通信経路確保のための処理遅れが発生することで、引継ぎが滑らかに実施されない可能性がある。そこで、このような場合には、引継ぎ前にあらかじめ通信経路のための準備を行い、引継ぎ終了後には通信経路を解除するような処理が必要になってくる。
【００６１】
図９は、モジュール間での計算引継ぎ判定基準を説明する図である。
すなわち図９においてモジュールＸからモジュールＹにおいて、本来の引継ぎ条件は、引継ぎ判定パラメータにおける値３６がその判定基準である。モジュールＸの当該パラメータが値３６に達すると、モジュールＸからモジュールＹに、パラメータの値３７が引継がれる。この際にあらかじめ通信経路が設定されていないと、経路設定後のステップで受信が行われるため、引継ぎ開始時３８と引継ぎ完了時３９に時間遅れが発生し、他のモジュールと同期が行えなくなる。
【００６２】
そこで、図９における本来の引継ぎ条件の値３６よりも少し手前の条件値４０に達した時点４１で、その旨をシミュレータ操作制御プログラムに伝える。これによりシミュレータ操作制御プログラムは、必要な通信経路を予め確保する。
通信経路を確保するための時間は、通信プロトコルに依存するが、シミュレータの周期に比べれば十分短く、経路確認の余裕と引継ぎパラメータの変動の大きさに対する余裕を持たせて設定される。引継ぎが完了すれると、またその旨がシミュレータ操作制御プログラムに送信され、通信経路が切断される。
【００６３】
以上は自動引継ぎの場合であるが、ユーザーによる引継ぎ指令の場合には、引継ぎ指令に基づいて上記の通信経路の確保を行い、経路確保後にモデル引継ぎを行えば良い。
このように引継ぎ時の通信経路を確保する処理を行う場合は、図４では設定されていなかった個々のモジュールからシミュレータ操作制御プログラムへの指令信号のパスを追加しておく必要がある。
【００６４】
なお、図８の引継ぎ初期計算３４は、モデルプログラム内に用意されている機能であり、これはシミュレーション機能部４（図１）に含まれるものである。引継ぎ初期計算３４は、引継ぎ情報３２（図８）に基づいて引継ぎ時にのみ行なわれ、それ以外はサイクル処理３５の繰り返しが行われる。
【００６５】
図１０は、デバッグ用出力とデバッグ処理の関係を示す図である。
デバッグ機能は、計算時の内部状態、代表的なパラメータ及び通信信号などを、逐次、外部から参照可能な共有メモリ４２ａや外部ファイル４２ｂなどの特定のメモリ上に書き出し、適宜保存する機能である。
外部ファイルに大量の書き込をする場合は、計算機の処理効率に影響を及ぼすことがあるため、通常運用中の外部記憶装置への書き込みを最小限に留め、描画等の専用モジュールに表示パラメータを送信したり、あるいは限定されたパラメータを高速メモリ上へ書き込みしたりすることを制限する。
【００６６】
シミュレータ操作制御プログラムからの指令によりデバッグを行う場合、処理効率や出力量や出力先への最適処理を行うデバッグモジュールが起動される。なお、モジュール自体は待機状態にある。出力を行うのは、図１０に示されるモデルプログラムや通信（インターフェイス）プログラムであり、処理はあらかじめ決められたデバッグフラッグにより、デバッグモジュールで指示された出力先に出力する。
そして、デバッグモジュールに組み込まれた出力処理プログラム又は外部の出力処理プログラムにより、プリントアウト、プロットアウト、あるいはオンラインでのデバッグ処理（オンラインでの内部変数値への参照）が行われる。
【００６７】
特にモジュール連携上の問題による不具合に対しては、連携信号の送受信をデバッグすることが有効である。送受信処理時に、高速な共有メモリ上の保存バッファが逐次保存するように機能すれば、デバッグ機能を有効にしなくても、通常の使用時に外部参照が可能である。このことから、外部参照側で適宜パラメータ監視や保存を行っておけば、通常使用時に何らかのトラブルが発生した場合に、その原因の究明や現象の再現時に有効な手段となる。
【００６８】
図１１に基づいて送受信信号監視によるデバッグファイル出力機能を説明する。
２つのモジュールＸ，Ｙは、シミュレーションサイクルごとに互いに連携信号４３を送受信している。これらの連携信号４３はそれぞれ逐次共有メモリ４４に保存され、外部のデバッグツール４５などで参照可能になっている。
デバッグツール４５は、外部からその信号値を常時監視しておき、あらかじめ設定した閾値を通信パラメータが超えた場合には、デバッグ用のダンプファイル４６を書き込むか、もしくは事象再現用の復元ファイルを書き込む。なおデバッグツール４５は、各モジュールの通信インターフェイスプログラムに機能を持たせても良い。
【００６９】
事象再現用の復元ファイルを書き込む場合は、デバッグツール４５がシミュレータ操作制御プログラムに代わって、図２のステップ（Ｓ５）の処理を起動する指令を出す。
この場合、ファイル番号２７（図７）を、デバッグ情報用の特別な番号に設定しておき、デバッグ機能を起動した場合は、その状態を自動的に復元できるようにしても良い。
【００７０】
図１２は、モジュールと時間制御で参照する時計との関係を示す図である。この図１２に基づいて時間制御（同期）について説明する。
これまで述べてきたように各モジュール間では、制御用あるいは連携用のデータが送受信されているが、時間に関するパラメータが含まれている必要は特に無い。イベント発生時間等、連携に必要な情報は、適宜送受信信号に含めれば良い。
各モジュールは、時間情報を送受信する代わりに、参照できる時計、例えば計算機ごとに備えられているシステム時計やネットワーク上で参照できる共通時計等を備えている。
【００７１】
図１２に示されるモジュール１は時計４７を、モジュール２とモジュール４は時計４８を、モジュール３は時計４９を、それぞれ参照するとする。この参照は、各モジュールにおいて、時間制御部５（図１）で行われる。
あるいは図２のステップ（Ｓ４）において、システム時間参照用の関数を起動することにより時刻を得る。この場合、後述するが、これらの複数の時計４７，４８，４９は、絶対時刻が一致している必要は無く、時間の進み具合が基準内で一致していれば良い。
【００７２】
すなわち、各モジュールの同期はお互いに同期のタイミングを取り合うことで行うのではなく、参照した時計の進み具合が同じであることから間接的に同期していることを保証できることを利用している。すなわち、これは模擬する実現象は実時間、すなわち時計と同じに進むわけであるから、倍速等の時間制御を行うに際しても、計算の時間進展は時計の進み方を目標にすれば良く、絶対的な時刻自体は二義的な意味しか持っていないことによる。
【００７３】
図１３は、シミュレーションサイクルとモジュールプログラム実行待機との関係を示す図である。図１３に基づいて同期手段の基本的な考え方を示す。
シミュレータ全体は、Δｔcの周期で事象を進展させているとする。あるシミュレーション時間Ｔから次のサイクルＴ＋Δｔcまでの１サイクル計算時間５０において、前半の区間５１がモジュールのΔｔc分の時間進展の処理に実際に要した時間であり、残りの区間５２は何も実行をせずに待機していたとする。そうすれば、サイクル終了時の時間Ｔ＋Δｔcにおいて、シミュレータ全体の進展時間と、モジュールの進展時間とが一致する。
【００７４】
このシミュレータ全体の進展時間は、シミュレータ操作制御プログラムの時間である。この時間が、図１２の時計４７の計測時間に相当するとすれば、他のモジュールの時計４８，４９の時間の進み方が同じ１サイクルΔｔcであれば、他のモジュールもモジュール１に同期していることになる。
【００７５】
１サイクルの進展に要する時間５１は、モジュールごとに異なるので、待機時間で調整することになる。また、個々のモジュールの１サイクルあたりの時間ステップは、モジュールごとに異なっている。個々のモジュールにおけるΔｔcは、必ずしも一致してないし、またモジュールによっては固定ではなく可変になっている。すなわち変化の激しい状態では、時間ステップは細かく、変化の緩やかな状態では時間ステップは粗い、という時間制御を設けている場合も多い。
【００７６】
図１４は、モジュール間で異なるシミュレーションサイクルの関係と、その同期タイミングとを示す図である。
図１４に示すように、全体のサイクル時間ステップに対して時間ステップの細かいモジュールＸでは、符号５４のように細かい時間ステップで複数サイクル計算を行う。そして、全体のサイクル時間ステップ５５に到達するまで、モジュールＸは計算を繰り返し、同期をとれるように待機時間５２（図１３）の処理で調整を行う。
逆に時間ステップの粗いモジュールＹでは、そのモジュールのサイクル時間ステップ５７に到達するまでは、計算を開始しない。このサイクル時間ステップ５７に到達したら、そのシミュレーション時間を開始点とする解析を実行し、次の同期点５８に達するまで時間調整を行う。
【００７７】
実時間に対する倍速処理（１を超えれば加速、１未満であれば遅速）の考え方も同様である。図１３に戻って説明を続けると、実時間と同じ等倍速の場合は、全体の１サイクル計算時間５０は、実時間の経過時間と同じである。これに対して実時間以外の倍速処理を行った場合、その倍速率をXSPEEEDとすれば、実時間の経過時間Δｔcに対してシミュレーションの経過時間はそのXSPEED倍、すなわち(XSPEED×Δｔc)になっている。つまり、計算時間５０は、シミュレーション周期を実時間倍速率で割った値となる。
倍速処理では、１サイクル中に計算処理をXSPEED倍の速度で実行する必要があり、Δｔcの時間内で、１サイクル計算所要時間５１と待機時間５２を合わせた処理がXSPEED回、実施される必要がある。
【００７８】
図１５は、２倍速計算時のシミュレーション実行待機時間の説明図である。この図１５に基づいてXSPEED=2の場合の処理の流れを説明する。
２倍速の場合、実時間での間隔Δｔcに相当する区間５９では、２サイクル分のシミュレーション処理を行う必要がある。すなわち１サイクル分の処理の区間６０，６１を区間５９で実行する必要がある。
まずは区間６０の中で、１サイクル分の計算を区間６２で実行し、残りの区間６３を待機時間とすると、時点６４でＴ＋Δｔcまでの処理が終了する。ただし、この処理は、当該モジュールのみでの処理であり、全体の同期をとっているわけではない。
【００７９】
次に、この時点６４を起点として２サイクル目の処理を区間６１において区間６０と同様に行い、Ｔ＋Δｔcの時点６５で、２サイクル目の処理が終了し全体の同期がとられる。この場合、実時間の進展は相変わらずΔｔcであるが、シミュレーション上の時間進展はその２倍になっている。
すなわち、XSPEED倍速の場合は、実時間等倍速の場合に比べて、待機時間を算出するための目標値が１サイクルの計算所要時間のXSPEED分の１になり、その待機をXSPEED回行うことになる。
【００８０】
以上の処理で参照しているのは全て時間差であり、時刻そのものではないことがわかる。この時の時間差の基準は、（１）起動指令がモジュールで参照された際の時計の時刻、および（２）前サイクルの終了時刻、である。そして、それぞれのモジュール内でのシミュレーション時間は、時間差の積分値で算出されるため、個々の時計の絶対時刻は不要であり、また他のモジュールのシミュレーション時間の情報も特に必要としない。
すなわち、個々のモジュールは、他のモジュールの処理状況とは関係なく処理を進める。そして、処理回数による積分値がモジュール間で一致していることで、間接的に同期が保証される。
【００８１】
ところで、等倍速率XSPEEDを大きくして行くと、場合によっては１サイクル計算所要時間が目標時間を超えてしまう場合も考えられる。
この場合、待機時間は負となる。負の待機時間は現実にはありえないので、これをある区間内で積分した時間を目標待機時間と称することにする。ここである区間とは、待機時間が負となった時間を開始点として、目標待機時間が負であり続ける区間である。
【００８２】
後述するが、負の待機時間とは、実時間、すなわち同期すべき時間から遅れている時間を表すものであるので、同期するためには、目標待機時間に追い付くことすなわち目標待機時間がゼロになることが必要である。
なお、全てのシミュレーション時間を通じて待機時間が負になることは、根本的に計算機に求められる処理性能に対し十分な条件を与えることにならないことから、このような状況は考慮する必要は無い。
【００８３】
考慮すべきは、現象の時定数が速く、計算負荷の大きなシミュレーション対象区間が、全体を通じて一部の場合である。この場合、目標待機時間が負の間は、待機を行わずひたすら計算機の性能を最高に発揮させて計算を進める。そして、積分した負の待機時間に対し、次の実行サイクルにおける待機時間においても継続して積分が行なわれ、同期から通算して遅れた時間として目標待機時間が設定される。
現象の変化が次第に緩慢になり、１サイクルあたりに要する計算時間が低下してくれば、待機時間は再び正に転ずる。すると、目標待機時間は増加（負の絶対値は減少）し始め、同期からの遅れは徐々に解消されることになる。なおこの目標待機時間の値が負であるうちは、待機は行われない。
【００８４】
このような処理が行なわれることで、いずれの時点で目標待機時間が非負になる。ある時点で待機時間が正になれば、待機することで待機時間の積分値をゼロにすることができる。待機時間の積分値がゼロになれば、その時点でそのモジュールの遅れは解消され、全体のシミュレーション時間に追い付き、再び同期したことになる。
実際に待機した時間、これは正であるが、これを目標待機時間に対して、実待機時間と称することにする。すなわち、目標待機時間が負である場合には実待機時間はゼロになり、目標待機時間が非負になったら目標待機時間がゼロになるように実待機時間で調整することにより同期を行う。
【００８５】
図１６は、計算負荷の変動に伴う実行待機と同期の関係を示す図である。
図１６の計算負荷６６の時間変化において計算負荷が増してくると、ある倍速条件において計算機の性能が不足する。すると、倍速化された実時間進展（＝実時間進展×XSPEED）に対して、シミュレーション時間が遅れることになるので、図示するように目標待機時間６７が変化する。
【００８６】
目標待機時間が０となる区間６８では、計算機性能が足りているため実待機時間７０を図示するように調整し目標待機時間を０に維持して同期をとる。ところが計算機負荷がさらに増すと、計算機性能に不足が生じて目標待機時間が負になる区間６９が現れる。
すると、その区間６９では実待機時間は０となり、待機の必要はなくなり同期の遅れを回復する必要がでてくる。この回復処理により目標待機時間が増加して０になれば、シミュレーションの遅れが無くなり、再び同期状態が達成されることになる。
図１６の区間６９は同期が保証されない区間であり、この区間が長すぎるとシミュレータ全体の挙動の整合性が崩れるおそれがある。そのような整合性の崩れが生じない程度に、倍速の制限値が設けられる。
【００８７】
図１７は、２倍速計算を例に同期遅れを回復する手順を説明する図である。図１７は、２ステップ区間を対象にして簡単に示したものである。
１サイクル実行に要する所要時間７１が、目標同期点６４を超えたある時間７２で、計算完了したものとする。目標同期点６４の超過分７３を始点７２として待機なしで２サイクル目の計算を即開始する。
【００８８】
２サイクル目の計算所要時間は小さく、次の目標同期点６５より前に２サイクル目の計算が終了したとする。この場合、前サイクルで負になった待機時間をゼロにリセットするために待機時間７４だけ待機すれば、つまり超過分７３を引いて２サイクルの処理目標時間７５を補償すれば、２サイクル目の目標同期点６５で再び同期が得られる。
【００８９】
以上述べてきたように本実施形態においては、モジュール間での処理（シミュレーション時間）の同期を取るに際し、計算機の時計を参照するが、時刻そのものは参照しない。
参照するのは、対象とするイベントの発生時刻の差であるので、時計の絶対時刻そのものが計算機間で同期している必要は無く、時計の進み方が同じであれば良い。
したがって、同期を保証するためには参照する計算機の時計の進み方が同じになっている必要がある。全てのモジュールから同じ時計を参照する場合は当然問題ないが、複数の時計を参照する場合には、基準となる時計の進み方からのずれを確認し、それが基準以上であればずれを補正する必要がある。
【００９０】
図１８は、図１２と同様の図であって、モジュール間での時計の進み方を補正する手順の説明図である。図１８の３つの時計４７，４８，４９の進み方の確認と補正を以下のように行う。ここでモジュール１がシミュレータ操作制御モジュールであるので、時計４７がシミュレータ全体のシミュレーション時間の基準になる。
シミュレータ操作制御モジュールにおいて、時計の進み方の違いに差が出る程度に十分長い周期で、定期的に時計間での進み方のチェックを行う。
【００９１】
モジュール１の時計４７が時刻Ｔ1(ｎ−１)を示しているときに、他のモジュールに対し、各々の時計４８，４９の時刻Ｔ2(ｎ−１)，Ｔ3(ｎ−１)の測定を指令する。なお、基準時刻Ｔ1とそれ以外の時刻との間には、時計の差以外に指令の伝達遅れも含まれている。しかし、これは、それぞれの時計で２つの測定時間の時刻差を用いるのでキャンセルされるため考慮しなくても良い。
【００９２】
時刻Ｔ1(ｎ−１)、Ｔ2(ｎ−１)、Ｔ3(ｎ−１)を測定してから十分な一定時間の経過した後に、同様に時刻Ｔ1(ｎ)、Ｔ2(ｎ)、Ｔ3(ｎ)を測定する。すると、それぞれの時計４７，４８，４９で測定した時刻差ΔＴ1、ΔＴ2、ΔＴ3が求まる。上述したようにこの時刻差の中では時刻測定指令信号の伝達遅れはキャンセルされて残っていない。したがって、これらの時刻差がそれぞれの時計の進み方の違いを反映していることになる。
【００９３】
そこで、この確認のタイミングでモジュール１の基準時計４７で測定した時刻差ΔＴ1を個別に他のモジュール２，３に送信して、それぞれのモジュールに設けられている時間制御部５(図１）で補正を行う。すなわち、モジュールｍの補正係数ｆmは次式で表される。この補正係数ｆmの値は、時計４７，４８，４９の進み方が同じであれば１であり、遅れていれば１より小さく、進んでいれば１より大きな値になる。
ｆm=(ΔＴm)／(ΔＴ1)
【００９４】
図１９は、モジュール間での時計の進み方を補正する手順の説明図である。
通常は時計に何らかの支障が無い限りはこの補正係数はほとんど１に近い値なので、補正は不要と考えられる。逆にこの値が１に近い場合であっても、１．０００１等、１日に秒単位で遅れるような場合は時計そのものに問題がある。
補正が必要な基準は、シミュレータ側の運用と、モジュール連携への影響の度合いから判断すべきであるが、定期的に図１９で表される確認を実施し、長期的な傾向から補正の要否、使用している時計の妥当性確認等の参考にしても良い。
【００９５】
以上述べた少なくともひとつの実施形態のシミュレーション装置によれば、互いに同期をとりながらモデルプログラムを実行する複数のモジュールから構成されているため、シミュレーションの範囲や装置の規模に応じたシミュレーション機能の開発・提供が迅速化するとともに、提供・運用後の改造や保守の効率を改善することができる。
【００９６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更、組み合わせを行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００９７】
１…モジュール、２…インターフェイス、３…読込部、４…シミュレーション機能部、５…時間制御部、６…デバッグ機能部。
【図１】
0006615551.tif 000002
【図２】
0006615551.tif 000003
【図３】
0006615551.tif 000004
【図４】
0006615551.tif 000005
【図５】
0006615551.tif 000006
【図６】
0006615551.tif 000007
【図７】
0006615551.tif 000008
【図８】
0006615551.tif 000009
【図９】
0006615551.tif 000010
【図１０】
0006615551.tif 000011
【図１１】
0006615551.tif 000012
【図１２】
0006615551.tif 000013
【図１３】
0006615551.tif 000014
【図１４】
0006615551.tif 000015
【図１５】
0006615551.tif 000016
【図１６】
0006615551.tif 000017
【図１７】
0006615551.tif 000018
【図１８】
0006615551.tif 000019
【図１９】
0006615551.tif 000020