OHyMoS.NET Class Library

OhSubSystem メンバ

OhSubSystem 概要

パブリック コンストラクタ

OhSubSystem オーバーロード。 OhSubSystem クラスの新しいインスタンスを初期化します。

パブリック メソッド

areYouReady 計算開始前の確認 このメソッドの戻り値が true ならば OhSubSystem は計算を開始 できます。 まず OhElement.areYouReady() を用いて所有受信側中継端子、所 有送信側中継端子に対して計算前の確認作業を行います。この戻 り値が false の場合、エラーメッセージを表示後 false を返し ます。 次に、全構成オブジェクトに areYouReady() を用いて計算前の確 認作業を行ないます。ここで、戻り値が false のオブジェクトが 存在する場合、全構成オブジェクトをareYouRedy() で確認後エラー メッセージを表示して false を返します。
 [RETURN] ・true --> 計算開始可。 ・false -> 計算開始不可。 
calculate Calculation for 1 step. 1ステップ分の計算
calculateIterationStepオーバーロード。 このメソッドは、_iteratorArray[aNum] の calculateIterationStep() の戻り値のうち、最小の値を返します。 This returns the minimum value among the return values of "calculateIterationStep()" of "_iteratorArray[aNum]".
calculateTimeStep Calculation of the time step. タイムステップの計算
canYouCalculate The check before calculation. 計算前の確認
clearDataString Deletion of the string of components. 構成オブジェクトのデータ文字列の消去
connectオーバーロード。 各構成要素・中継端子間の接続 部分系モデル内部の端子間の接続を行ないます。 受信側中継端子または全体系の入力端子と、 構成オブジェクトの受信端子との接続を行ないます。 構成オブジェクトの受信端子は、_className, _objectName, _objectNumber から判別します。 所有中継端子と部分系モデル外部の受信端子との接続は _owner が行ないます。
connectComponents 部分系モデル内の構成オブジェクトの接続 部分系モデル内部の直接通信接続を (Ref "OhElement#register(Object, int)") を用いて定義します。 例えば、次のように定義します。
 public void connectComponents() { a.register(b, 0); b.register(a, 0); a.register(c, 1); c.register(a, 0); } 
ここで、a, b, c はこの部分系のメンバ変数です。 これにより、要素 a の _objectArray[0] に要素 b が格納され、 要素 a の _objectArray[1] に要素 c が格納されることになります。 要素 b の _objectArray[0] に要素 a が格納されます。 要素 c の _objectArray[0] に要素 a が格納されます。 抽象メソッドなので派生クラスで必ず定義して下さい。
connectPorts Abstract method which is used for connecting ports of elements within this subsystem. The programmer who provides a new OhSubSystem class or OhTotalSystem must define this method. He can use various (Ref "OhSubSystem#connect()") methods to write the connectPort() method. 部分系モデル内部の端子を接続するために使用される抽象メソッ ドです。新しい OhSubSystem クラスや OhTotalSystem クラスを 提供しようとするプログラマは、このメソッドを定義しなければ なりません。このメソッドを書くために、(Ref "OhSubSystem") で定義されている様々な (Ref "OhSubSystem#connect()") メソッ ドを使用できます。 実装例: (Ref "OhScfSubSystem#connectPorts()")
construct _receivePortArray, _sendPortArray, _objectArray を作成し、 接続関係の定義に従って部分系内部の接続を行なう。 この部分系モデル、構成オブジェクトの構造を設定します。 具体的には、以下の手続きを行ないます。
  1. OhLinkedList 型オブジェクトをヒープに作成して _objectList に設定する。
  2. Element.registerReceivePorts(), OhElement.makeObjectArray() により _receivePortArray を作成する。
  3. OhLinkedList.clear() により _objectList を空にする。
  4. OhElement.registerSendPorts(), OhElement.makeObjectArray() により _sendPortArray を作成する。
  5. OhLinkedList.clear() により _objectList を空にする。
  6. OhSubSystem.registerComponents(), OhElement.makeObjectArray により _componentArray を作成する。
  7. OhSubSystem.initializeIteratorArray() により _iteratorArray の第一次配列を確保する。
  8. OhSubSystem.registerIterators() により _iteratorArray を作成する。
  9. _objectList を null に設定する。
  10. OhElement.construct() により、構成オブジェクトの構造を設定する。
  11. OhSubSystem.connectComponents() により、部分系モデル内部の接続を行う。
 [RETURN] ・true --> 部分系モデル内部の構造が正常に設定された場合。 ・false -> このオブジェクトの構造設定に異常が生じた場合。 構成オブジェクトの構造設定に異常が生じた場合。 部分系モデル内部の接続に異常が生じた場合。 
doInitialWork A first-time output. 初回の出力
doShareInfo このメソッドは、まず自分自身に対して doShareInfo() を実行し、 さらに自分の構成要素に対して doShareInfo() を実行させます。 自分も含めて一つでも doShareInfo() を実行した要素がいたら OperationFlag.E_DONE を返します。 全ての要素がすでに doShareInfo を実行していたら OperationFlag.E_ALREADY を返します。 どちらの場合でもないときは OperationFlag.E_UNDONE を返します。
doSwitch 送受信接続作業が終了した後にこのメソッドが呼び出され、 送受信開始のための準備作業をします。 まず OhElement.doSwitch() を実行し、この戻り値が false の場合、エラーメッセージを表示後、false を返します。 次に、構成オブジェクトに canYouSwitch () を実行させます。 ここで、戻り値が false の構成オブジェクトが存在する場合は、 全構成オブジェクトに canYouSwitch() を実行させた後、 エラーメッセージを表示して false を返します。 部分系モデル内部に存在する全端子に canYouSwitch() を実行さ せます。 送信端子では、_receiverArray を作成し、データパック収録の準 備をします。具体的に言えば、_dataPackArray のメモリを確保し、_ numberOfDataPacks の値を -1 から 0 にします。中継端子では _receiverArray を作成するだけです。 まとめると、以下を行なうことになります。
  1. _receiverArray を作成する。
  2. _numberOfDataPacks の値を -1 から 0 に変更する。
 [RETURN] ・true --> 部分系モデル内部の全端子を正常に転換できた場合。 ・false -> 部分系モデル内部の端子の内, 正常に転換できないものが存在する場合。 
flushDataオーバーロード。 全ての反復要素の反復目標時刻までのデータの出力と、 データパックの処理を行います。
getComponentオーバーロード。 クラス名、オブジェクト名、オブジェクト番号を指定して、_ componentArray から構成オブジェクト(OhObject 型)を取得し ます。 指定されたオブジェクトが登録されていない場合は、null を返し ます。 _numberOfComponents が負の場合、_componentArray が作成され ていないと判断し、OhError を throw します。
getInitialState Sets the the initial state of sub systems itself and components. 部分系自身の初期状態量と構成オブジェクトの初期状態量の設定
getNecessaryTimeFrom 要素が次回の計算に必要なデータのうち、aRp (arg) から受け取るべきデータのデータ記録時刻を返します。 getNecessaryTimeFrom() から getNecessaryTimeTo() までのデータパックが 受信端子 aRp から受信されていなければ、要素は計算を開始することができません。
getNecessaryTimeTo 要素が次回の計算に必要なデータのうち、aRp (arg) から受け取るべきデータのデータ記録時刻を返します。 getNecessaryTimeFrom() から getNecessaryTimeTo() までのデータパックが 受信端子 aRp から受信されていなければ、要素は計算を開始することができません。
getParameter このメソッドは、部分系自身のパラメタと、部分系の構成要素のパラメタを読み取ります。
hasConvergedオーバーロード。 反復計算する要素群が収束したかをチェックする。 このクラスでは、『管理者』としての OhSubSystem の立場から定義されています。 すなわち、自分の内部に反復計算を行なう要素群がいるということを前提としており、 自分自身が反復計算を行なう場合に対応して定義されているわけではありません。 したがって、自分自身が反復計算を行なう場合は、それが可能であるように再定義して下さい。
hasReachedTargetTimeオーバーロード。 反復計算する要素群が反復計算目標時刻に到達したかどうかをチェックする。 このクラスでは、『管理者』としての OhSubSystem の立場から定義されています。 すなわち、自分の内部に反復計算を行なう要素群がいるということを前提としており、 自分自身が反復計算を行なう場合に対応して定義されているわけではありません。 したがって、自分自身が反復計算を行なう場合は、それが可能であるように再定義して下さい。
initオーバーロード。 初期化子です。
initializeIteratorArray _iteratorArray を要素数が _numberOfIteratorAets 個の配列にする。
initializeTargetTime 全ての反復要素の反復計算目標時刻 _targetTime を更新します。
initialOutput 初期の出力 初期状態量を決めた直後に、_currentTime での出力を定義します。 送信端子に時刻と出力値を書き込みます。 _currnet_time での出力が計算できた場合は true を返します。 必要な入力データが得られていないなどして、 _currentTime の出力が計算できなかった場合は false を返します。 しかしながら、大抵の場合は部分系からの初期の出力はないと思われるので、 ここでは常に true を返すように定義しています。
initialTime Initialization of the time of constituent objects. "_currentTime" is read. If it is 0, "_currentTime" will not be changed. 自分自身の _currentTime と構成オブジェクトの _currentTime を指定した時刻に初期化します。 通常、計算を開始するときの初期時刻は、同一のことが多いので、 サブシステムの初期時刻をそのサブシステムを構成する要素の初 期時刻とする操作も加えてあります。 (Ref "OhElement#initialTime()") も参照してください。
initialWork 初期作業 初期時刻において、全データを取得します。
printComponentsオーバーロード。 Prints out the information on a constituent objects. 構成オブジェクトの情報を出力します。
registerオーバーロード。 端子の登録、直接通信する要素の登録
registerComponents 反復計算を行なわない構成オブジェクトを _componentArray に登 録する。 全構成要素のうち、反復計算を行なわない構成オブジェクトを _componentArray に登録します。 登録されていない構成オブジェクトには計算実行命令が送れませ ん。 例えば、派生クラスで構成オブジェクト abc をメンバ変数として 定義した場合、次のように abc を登録します。
 public void registerComponents() { Register((Object) abc); } 
この時、必ず abc を Object 型にキャストして下さい。 これにより abc は、一時的に _objectList に収録された後、 最終的に Object 型配列 _componentArray 中に記憶されます。 (OhSubconstruct() 参照)
registerIterators 反復計算する要素を _iteratorArray に登録する。
registerReceivePorts 受信側中継端子の登録 受信側中継端子を登録します。 派生クラスで定義します。 (Ref "OhElement#construct()") から呼ばれます。 登録されていない受信側中継端子は接続できません。
registerSendPorts 送信側中継端子の登録 送信側中継端子を登録します。 派生クラスで定義します。 construct() から呼ばれます。 登録されていない送信側中継端子は接続できません。
renewCurrentTime Renewal of the current time. 現在時刻の更新 _componentArray に登録されている要素の _currentTime および _iteratorArray に登録されている要素の _fixedTime のうち、 最も遅れている方を自分の _currentTime とする。
renewFixedTimeオーバーロード。 全ての反復要素の_fixedTime を _currentTime に進めます。
renewTargetTimeオーバーロード。 全ての反復要素の反復計算目標時刻 _targetTime を更新します。 引数に反復計算時間間隔をとります。
rewindCurrentTimeオーバーロード。 This orders to perform "rewindCurrentTime()" to the element group which repeated calculation did not converge. 反復計算が収束しなかった要素群(_iteratorArray[aNum])に対して rewindCurrentTime() を実行するよう命令する。
saveSendPortStock 部分系の構成要素のそれぞれに指令を送り、 ストリーム aPw(引数)で指定されているファイルに書き出させます。
saveTerminalState Save to the file of the own last state of the subsystems. 部分系自身の最終状態のファイルへの保存
setInitialState Sets the the initial state of sub systems itself. 部分系自身の初期状態量の設定 部分系自身のクラス名、オブジェクト名、オブジェクト番号を読み取った後、 初期状態量が書いてある行の先頭に読み取り位置がある状態でこのメソッドが呼ばれます。 初期状態量を読みとった後、ファイルポインタは初期状態を読み取った行に置いておきます。 このメソッドは、getInitialState() から呼ばれます。
setParameter このメソッドは、(Ref "OhElement") クラスの抽象メソッドです。 標準的な部分系モデルは、数理的処理を構成オブジェクトにより 行なうので、パラメータ、状態量を持たないものと考えられます。 そこで、このクラスでは何もしないように定義しました。必要な らば派生クラスで変更して下さい。
terminalState Save the last state of the own subsystems and the components. 部分系自身の最終状態と構成要素の最終状態の保存 このメソッドは、構成要素に最終状態を書き出すように指令を送ります。
work Operation function. 演算機能 各構成要素に順次計算実行命令を送る。

内部 フィールド

_componentArray Array for memorizing constituent elements. 構成要素記憶用配列
_iteratorArray Array for memorizing the costituent elements which carry out repeated calculation. 反復計算を行なう構成要素記憶用配列
_numberOfComponents Number of constituent elements. 構成要素の数
_numberOfIterators The number of the elements which constitute an element group. それぞれの要素群を構成する要素の数
_numberOfIteratorSets The number of the element groups which carry out repeated calculation. 反復計算を行なう要素群の数

参照

OhSubSystem クラス | OhymosNet 名前空間