ohymosj
クラス OhElement

java.lang.Object
  拡張ohymosj.OhObject
      拡張ohymosj.OhElement
直系の既知のサブクラス:
OhSubSystem, PowerLawKinematicWave, SimpleDam

public abstract class OhElement
extends OhObject

基本型要素モデルを表すクラスです。

抽象クラスです。

要素モデルは、パラメタ, 状態量, 受信端子, 送信端子をデータメンバに記憶し、 パラメタ・状態量・受信端子からの入力データを用いて数理計算を行ない、状態量を更新し、 送信端子から出力データを送信します。 こうした計算作業のうち、各要素モデルに共通な作業と共通でない作業とを分離し、 共通部分のみ抽出・規格化したものが基本型要素モデルです。 このクラスは、基本型要素モデルを表すクラスを定義しています。

要素モデルが所有する全送信端子, 全受信端子は、 _receivePortArray, _sendPortArray に登録します。 基本型要素モデルでは、この登録手続きに関する規格化を行ない、 要素モデルの作成作業の簡素化を進めるとともに、 各要素モデルに登録手続きに関する同等の信頼性を与えています。 また、各要素の送受信端子の接続は部分系モデルが行ないますが、 この作業を容易にするため、要素モデルが所有する送受信端子に関する検索機能も定義しました。

通常は、要素モデルがその状態を更新するために必要なデータは受信端子を経て取得するように設計しますが、 やむを得ない場合は、「直接通信」によって必要なデータを取得する仕組みをユーザが定義できるように、 直接通信する要素の配列を記憶するためのメンバ変数 _objectArray が用意されています。

OhElement; Abstract class for element models.

An element model

In hydrolgic simulations, various element models are needed because various processes are involved.

Class OhElement expresses the common part of those hydrologic element models.

バージョン:
$Revision: 1.145 $ $Date: 2004/03/08 17:03:02 $
作成者:
satoh

フィールドの概要
protected  boolean _calReqP
           下流側が計算しようとしたのに計算できない原因がこの要素にあるときに、 _calReqP = true に設定されるようにします。
protected  OhTimePoint _currentTime
           現在時刻(計算済み時刻)です。
protected  java.lang.String _dataString
           データ文字列です。
protected  OhTimePoint _fixedTime
           反復計算において状態が確定している時刻です。
protected  boolean _initialWorkDoneP
           OhElement.initialWork() を 終えたか(true)否か(false)を表すフラグです。
protected  int _numberOfObjects
           _objectArray の要素数です。
protected  int _numberOfReceivePorts
           _receivePortArray の要素数です。
protected  int _numberOfSendPorts
           _sendPortArray の要素数です。
protected  java.lang.Object[] _objectArray
           直接通信する要素の配列です。
protected  OhLinkedList _objectList
           作業用の線形リストです。
protected  java.lang.Object[] _receivePortArray
           要素が所有する受信端子の配列です。
protected  java.lang.Object[] _sendPortArray
           要素が所有する送信端子の配列です。
protected  boolean _shareInfoDoneP
           OhElement.canYouShareInfo()Share_info を 終えたか(true)否か(false)を表すフラグです。
protected  OhTimePoint _targetTime
           反復計算目標時刻[sec]です。
protected  long _timeStep
           計算1ステップの時間(タイムステップ)[sec]です。
 
クラス ohymosj.OhObject から継承したフィールド
_className, _objectName, _objectNumber, _owner, NEWLINE
 
コンストラクタの概要
OhElement()
           デフォルトコンストラクタです。
OhElement(java.lang.String aObjName, int aObjNum, int aNumOfObjs, java.lang.String aStr)
           このコンストラクタはメンバ変数を以下のように設定します。
OhElement(java.lang.String aObjName, int aObjNum, java.lang.String aStr)
           このコンストラクタはメンバ変数を以下のように設定します。
 
メソッドの概要
 boolean areYouReady()
           計算作業前の確認を行ないます。
abstract  boolean calculate()
           1ステップ分の計算手続きを定義します。
 long calculateIterationStep()
           反復計算目標時刻を計算します。
abstract  long calculateTimeStep()
           タイムステップの計算を行ないます。
 void calReq()
           この要素が計算することになったら、 必要となるデータが受信できるかチェックするメソッド canYouCalculate() を実行することで、 この要素が依存している他の要素へ計算要請を伝達します。
abstract  boolean canYouCalculate()
           計算開始の可・不可の判断をします。
 boolean canYouCalculate0()
           canYouCalculate() の候補です。
 boolean canYouCalculate1()
           canYouCalculate() の候補です。
 boolean canYouGetDataString(java.lang.String aDataStr)
           データ文字列 _dataString を aDataStr に設定します。
 boolean canYouRenewCurrentTime()
           _currentTime を更新します。
 boolean canYouSetObjectArray(int aNumOfObjs)
           _objectArray を作成します。
 boolean canYouShareInfo()
           このメソッドは、直接通信を利用してパラメタなどの情報を共有するためのメソッドです。
 boolean canYouSwitch()
           全ての所有送信端子で OhSendPort.canYouSwitch() を実行します。
 void clearDataString()
           データ文字列 _dataString を null に設定します。
 boolean construct()
           Object 型オブジェクト記憶用配列を作成します。
static OhElement create(java.lang.String aClassName)
           水文モデルの要素を作成します。
 OperationFlag doInitialWork()
           初期作業 initialWork() を終えたかどうかを判断します。
 OperationFlag doShareInfo()
           このメソッドは canYouShareInfo() を呼び出すメソッドです。
 boolean doYouConverge()
           要素間の反復計算の収束を判定します。
 boolean doYouReachTargetTime()
           反復計算が _targetTime に到達したかどうかを判断します。
 void flushData()
           反復目標時刻までのデータの出力と、データパックの処理をするメソッドです。
 java.lang.Object getComponent(java.lang.String aObjName)
           構成オブジェクト(構成要素)を取得します。
 java.lang.Object getComponent(java.lang.String aObjName, int aObjNum)
           構成オブジェクト(構成要素)を取得します。
 java.lang.Object getComponent(java.lang.String aClassName, java.lang.String aObjName)
           構成オブジェクト(構成要素)を取得します。
 java.lang.Object getComponent(java.lang.String aClassName, java.lang.String aObjName, int aObjNum)
           構成オブジェクト(構成要素)を取得します。
 OhTimePoint getCurrentTime()
           現在時刻 _currentTime を返します。
 OhTimePoint getFixedTime()
           反復計算において状態が確定している時刻 _fixedTime を返します。
 java.lang.Object getFromArray(java.lang.String aObjName, int aObjNum, java.lang.Object[] aObjArray, int aNumOfObjs)
           Object 型オブジェクトを取得します。
 java.lang.Object getFromArray(java.lang.String aClassName, java.lang.String aObjName, int aObjNum, java.lang.Object[] aObjArray, int aNumOfObjs)
           Object 型オブジェクトを取得します。
 java.lang.Object getFromList(java.lang.String aObjName, int aObjNum)
           _objectList から Object 型オブジェクトを取得します。
 java.lang.Object getFromList(java.lang.String aClassName, java.lang.String aObjName, int aObjNum)
           _objectList から Object 型オブジェクトを取得します。
 void getInitialState(OhBufferedReader aBr)
           初期状態量を読み込むメソッドです。
 OhTimePoint getMediumTermTargetTime()
           中間目標時刻を_owner から取得します。
 OhTimePoint getNecessaryTimeFrom(OhReceivePort aRp)
           要素が次回の計算に必要なデータのうち、aRp (arg) から受け取るべきデータのデータ記録時刻を返します。
 OhTimePoint getNecessaryTimeTo(OhReceivePort aRp)
           要素が次回の計算に必要なデータのうち、aRp (arg) から受け取るべきデータのデータ記録時刻を返します。
 OhTimePoint getNextTime()
           次ステップの _currentTime を返します。
 java.lang.Object getObject(java.lang.String aClassName, java.lang.String aObjName)
           オブジェクトを取得します。
 java.lang.Object getObject(java.lang.String aClassName, java.lang.String aObjName, int aObjNum)
           オブジェクトを取得します。
 void getParameter(OhBufferedReader aBr)
           パラメタを読み込むメソッドです。
 java.lang.Object getReceivePort(java.lang.String aObjName)
           _receivePortArray から受信端子を取得します。
 java.lang.Object getReceivePort(java.lang.String aObjName, int aObjNum)
           _receivePortArray から受信端子を取得します。
 java.lang.Object getReceivePort(java.lang.String aClassName, java.lang.String aObjName)
           _receivePortArray から受信端子を取得します。
 java.lang.Object getReceivePort(java.lang.String aClassName, java.lang.String aObjName, int aObjNum)
           _receivePortArray から受信端子を取得します。
 java.lang.Object getSendPort(java.lang.String aObjName)
           _sendPortArray から送信端子を取得します。
 java.lang.Object getSendPort(java.lang.String aObjName, int aObjNum)
           _sendPortArray から送信端子を取得します。
 java.lang.Object getSendPort(java.lang.String aClassName, java.lang.String aObjName)
           _sendPortArray から送信端子を取得します。
 java.lang.Object getSendPort(java.lang.String aClassName, java.lang.String aObjName, int aObjNum)
           _sendPortArray から送信端子を取得します。
 OhTimePoint getTargetTime()
           反復計算目標時刻 _targetTime を返します。
 OhTimePoint getTerminalTime()
           計算終了時刻を返します。
 long getTimeStep()
           タイムステップ _timeStep を返します。
 boolean init(java.lang.String aObjName, int aObjNum)
           オブジェクト名、オブジェクト番号を初期化します。
 boolean init(java.lang.String aObjName, int aObjNum, int aNumOfObjs)
           オブジェクト名、オブジェクト番号、直接通信する要素の配列を初期化します。
 boolean init(java.lang.String aObjName, int aObjNum, int aNumOfObjs, java.lang.String aDataStr)
           オブジェクト名、オブジェクト番号、直接通信する要素の配列、データ文字列を初期化します。
 boolean init(java.lang.String aObjName, int aObjNum, OhBufferedReader aBr)
           構成要素のクラス名をファイルから読みとってつくりあげる部分系モデルで利用される コンストラクタの補助メソッドです。
 boolean init(java.lang.String aObjName, int aObjNum, java.lang.String aDataStr)
           オブジェクト名、オブジェクト番号、データ文字列を初期化します。
 void initializeTargetTime()
           このメソッドは OhElement では使わず、 OhSubSystem で再定義して使います。
abstract  boolean initialOutput()
           初期の出力を行ないます。
 boolean initialWork()
           初期作業を行ないます。
 boolean isInitialTime(OhTimePoint aTp)
           _currentTime, _timeStep を aTp (arg), 0 に初期化して true を返します。
 java.lang.Object[] makeObjectArray(int[] aNumOfObjs)
           配列化した _objectList を返し、 同時に、引数 aNumOfObjs (配列)の1番目に要素数 _numberOfObjects を格納します。
 void printConnection()
           接続情報を出力します。
 void printConnection(java.io.PrintWriter aPw)
           接続情報の出力 Information output on connection.
 void printConnection(java.io.PrintWriter aPw, java.lang.String aHead)
           接続情報を出力します。
 void printConnection(java.lang.String aHead)
           接続情報を出力します。
 void printObjects(java.io.PrintWriter aPw, java.lang.String aHead, java.lang.String aTitle, java.lang.Object[] aPortArray, int aNumOfObjs)
           所有オブジェクトの情報を出力します。
 void printReceivePorts()
           所有受信端子の情報を出力します。
 void printReceivePorts(java.io.PrintWriter aPw)
           所有受信端子の情報を出力します。
 void printReceivePorts(java.io.PrintWriter aPw, java.lang.String aHead)
           所有受信端子の情報を出力します。
 void printReceivePorts(java.lang.String aHead)
           所有受信端子の情報の出力 Information output on possession receiving ports.
 void printSendPorts()
           所有送信端子の情報を出力します。
 void printSendPorts(java.io.PrintWriter aPw)
           所有送信端子の情報を出力します。
 void printSendPorts(java.io.PrintWriter aPw, java.lang.String aHead)
           所有送信端子の情報を出力します。
 void printSendPorts(java.lang.String aHead)
           所有送信端子の情報を出力します。
 boolean printStatus()
          Returns true.
 boolean recordStatus()
          Records status.
 void reduceDataPackStock()
           不要データパックを消去します。
 boolean register(java.lang.Object aObj)
           Object 型オブジェクトの登録と _owner の設定を行ないます。
 boolean register(java.lang.Object aObj, int aNum)
           Object 型オブジェクトの登録と _owner の設定を行ないます。
abstract  void registerReceivePorts()
           派生クラスの全受信端子を登録します。
abstract  void registerSendPorts()
           派生クラスの全送信端子を登録します。
 void renewFixedTime()
           _fixedTime を _currentTime に進めます。
 void renewTargetTime(long aT)
           反復計算目標時刻 _targetTime を更新します。
 void restoreSendPortStock()
           データ文字列 _dataString を読みとり、要素に接続されている送信端子にデータを収録します。
 void rewindCurrentTime()
           _currentTime を _fixedTime に戻します。
 void saveSendPortStock(java.io.PrintWriter aPw)
           要素に接続されているすべての送信端子のデータに収録されているデータパックを、 ストリーム aPw(引数)で指定されているファイルに書き出します。
abstract  void saveTerminalState(java.io.PrintWriter aPr)
           要素の最終状態を出力ストリーム os で指定されるファイルに書き込む作業をするメソッドです。
 void sendStockedData()
           反復目標時刻までにたまったデータを出力するメソッドです。
 void setCur2Fix2Tar()
           _targetTime, _fixedTime を _currentTime に一致させるメソッドです。
 void setDataPackArray()
           データパック配列を更新します。
abstract  void setInitialState(OhBufferedReader aBr)
           初期状態量を設定するメソッドを、各派生クラスに応じて定義します。
abstract  void setParameter(OhBufferedReader aBr)
           パラメタを設定するメソッドを、各派生クラスに応じて定義します。
 void terminalState(java.io.PrintWriter aPw)
           最終状態を保存します。
abstract  boolean work()
           _currentime から OhTotalSystem.
 boolean work0()
           work() の例です。
 boolean work1()
           work() の例です。
 boolean work2()
           反復計算要素用 work() の例です。
 
クラス ohymosj.OhObject から継承したメソッド
cPrint, getAbsName, getClassName, getObjectName, getObjectNumber, getOwner, getTopOwner, objCompare, objCompare, objCompare, oPrint, setOwner
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

_initialWorkDoneP

protected boolean _initialWorkDoneP
OhElement.initialWork() を 終えたか(true)否か(false)を表すフラグです。

Whether the initial work has been completed or not.


_shareInfoDoneP

protected boolean _shareInfoDoneP
OhElement.canYouShareInfo()Share_info を 終えたか(true)否か(false)を表すフラグです。

Whether the "shareInfo" has been completed or not.


_objectList

protected OhLinkedList _objectList
作業用の線形リストです。 _receivePortArray, _sendPortArray の作成時に使用されます。

A list for storing Object. It is used as an object for work at the time of creation of "_receivePortArray" and "_sendPortArray".


_receivePortArray

protected java.lang.Object[] _receivePortArray
要素が所有する受信端子の配列です。

Array of "OhReceivePort".


_numberOfReceivePorts

protected int _numberOfReceivePorts
_receivePortArray の要素数です。

Number of receive ports.


_sendPortArray

protected java.lang.Object[] _sendPortArray
要素が所有する送信端子の配列です。

Array of "OhSendPort".


_numberOfSendPorts

protected int _numberOfSendPorts
_sendPortArray の要素数です。

Number of send ports.


_objectArray

protected java.lang.Object[] _objectArray
直接通信する要素の配列です。

Array of "OhObject".


_numberOfObjects

protected int _numberOfObjects
_objectArray の要素数です。

Number of objects.


_dataString

protected java.lang.String _dataString
データ文字列です。

Data string.


_currentTime

protected OhTimePoint _currentTime
現在時刻(計算済み時刻)です。

Current(Calculated time) time. "OhTimePoint" is defined in "OhTimePoint.java".


_timeStep

protected long _timeStep
計算1ステップの時間(タイムステップ)[sec]です。

Time step.[sec]


_fixedTime

protected OhTimePoint _fixedTime
反復計算において状態が確定している時刻です。

Time which the state has decided in repeated calculation.


_targetTime

protected OhTimePoint _targetTime
反復計算目標時刻[sec]です。

(※注意※) 反復計算する要素では、計算開始時に _fixedTime, _targetTime を _currentTime と一致させる必要があります。 OhElement.setInitialState(OhBufferedReader) で _currentTime が初期設定された後、 OhElement.setCur2Fix2Tar() を呼ぶか、 直接 _targetTime = _fixedTime = _currentTime; としてください。

Repeated calculation target time. [sec]

It is necessary to make "_fixedTime" and "_targetTime" in agreement with "_currentTime" with the element which carries out repeated calculation at the time of a calculation start.

After initial setting of the "_currentTime" is carried out by "setInitialState()", call "void cur2fix2tar()" which the bottom defines or give as direct "_targetTime = _fixedTime = _currentTime;".


_calReqP

protected boolean _calReqP
下流側が計算しようとしたのに計算できない原因がこの要素にあるときに、 _calReqP = true に設定されるようにします。 そして、OhElement は _calReqP = true のときは計算するように努力します。 _calReqP はこのクラスで始めて追加されたメンバ変数です。 このクラスのオブジェクトを作ったときには _calReqP は false に初期化されます。

Flag of request of calculation. Initial value is NO. When a cause incalculable although the lower-stream-of-a-river side tended to calculate is in this element, it is made to be set as "_calReqP = true". And, "OhElement" tries to calculate hard at the time of "_calReqP = true".

コンストラクタの詳細

OhElement

public OhElement()
デフォルトコンストラクタです。 デフォルトコンストラクタは

  • _className : "OhElement"
  • _objectName : null
  • _objectNumber : -1
  • に設定します。


    OhElement

    public OhElement(java.lang.String aObjName,
                     int aObjNum,
                     int aNumOfObjs,
                     java.lang.String aStr)
              throws OhError
    このコンストラクタはメンバ変数を以下のように設定します。

  • _className : "OhElement"
  • _objectName : aObjName
  • _objectNumber : aObjNum
  • _objectArray : メモリに確保(この配列の要素数は aNumOfObjs 個)
  • _dataString : aStr
  • パラメータ:
    aObjName - a String value
    aObjNum - an int value
    aNumOfObjs - an int value
    aStr - a String value
    例外:
    OhError - if an error occurs

    OhElement

    public OhElement(java.lang.String aObjName,
                     int aObjNum,
                     java.lang.String aStr)
              throws OhError
    このコンストラクタはメンバ変数を以下のように設定します。

  • _className : "OhElement"
  • _objectName : aObjName
  • _objectNumber : aObjNum
  • _dataString : aStr
  • パラメータ:
    aObjName - a String value
    aObjNum - an int value
    aStr - a String value
    例外:
    OhError - if an error occurs
    メソッドの詳細

    registerReceivePorts

    public abstract void registerReceivePorts()
                                       throws OhError
    派生クラスの全受信端子を登録します。

    このメソッドは、派生クラスの全受信端子を OhElement.register(Object) OhElement.register(Object, int) により登録します。

    登録されていない端子は接続できないので送受信に利用できません。

    例えば、派生クラスで受信端子 abc を定義した場合、

      public void registerReceivePort() {
        register((Object) abc);
      }
     
    とすれば、abc を受信端子として登録できます。

    Declares method registerReceivePorts() as abstract method. In classes derived from class Element, its definition should be given.

    "registerReceivePorts()" registers all the receiving ports of an inherited class, and all sending ports by OhElement.register(Object) OhElement.register(Object, int).

    The port which is not registered is not applicable to sending and receiving, since it is not connectable.
    For example, when an inherited class defines the receiving port "abc", if it is performed as follows, "abc" can be registered as a receiving terminal.

       void registerReceivePort() {
         register((Object)abc);
       }
     

    例外:
    OhError - if an error occurs

    registerSendPorts

    public abstract void registerSendPorts()
                                    throws OhError
    派生クラスの全送信端子を登録します。

    このメソッドは、派生クラスの全送信端子を OhElement.register(Object) OhElement.register(Object, int) により登録します。

    登録されていない端子は接続できないので送受信に利用できません。

    例えば、派生クラスで送信端子 abc を定義した場合、

      public void registerSendPort() {
        register((Object) abc);
      }
     
    とすれば、abc を送信端子として登録できます。

    Declares method "registerSendPorts() as abstract method. In classes derived from class Element, its definition should be given.

    "registerSendPorts()" registers all the receiving ports of an inherited class, and all sending ports by OhElement.register(Object) OhElement.register(Object, int).

    The port which is not registered is not applicable to sending and receiving, since it is not connectable. For example, when an inherited class defines the receiving port "abc", if it is performed as follows, "abc" can be registered as a receiving terminal.

       void registerSendPort() {
         register((Object)abc);
       }
     

    例外:
    OhError - if an error occurs

    setParameter

    public abstract void setParameter(OhBufferedReader aBr)
                               throws OhError
    パラメタを設定するメソッドを、各派生クラスに応じて定義します。 入力ストリーム aBr で指定されるファイルからデータを読みとってパラメタを設定します。

    Declares method "setParameter()" as abstract method. In classes derived from class Element, its definition should be given.

    Parameters are read in the input stream "aBr". It is necessary to create an element model according to each inherited class. Data is read in the file specified by the input stream "aBr", and the amount of initial states is set up.

    Please have the program and consistency which save the last state at a file.

    パラメータ:
    aBr - a OhBufferedReader value
    例外:
    OhError - if an error occurs

    setInitialState

    public abstract void setInitialState(OhBufferedReader aBr)
                                  throws OhError
    初期状態量を設定するメソッドを、各派生クラスに応じて定義します。 入力ストリーム aBr で指定されるファイルからデータを読みとって初期状態量を設定します。

    最終状態をファイルに保存するプログラムとつじつまがあうようにしてください。

    Declares method "setInitialState()" as abstract method. In classes derived from class Element, its definition should be given.

    The method which sets up the amount of initial states is defined according to each inherited class.

    パラメータ:
    aBr - a OhBufferedReader value
    例外:
    OhError - if an error occurs

    initialOutput

    public abstract boolean initialOutput()
                                   throws OhError
    初期の出力を行ないます。

    初期状態量を決めた直後に、_currentTime での出力を定義します。 送信端子に時刻と出力値を書き込みます。 _currnetTime での出力が計算できた場合は true を返します。 必要な入力データが得られていないなどして、 _currentTime の出力が計算できなかった場合は false を返します。

    要素によっては、setInitialState() の中で 初期の出力をするようにした方が都合がよいかも知れません。 たとえば、初期値設定のために与えられる文字列によって、 初期の出力のやり方を変えたりする場合などです。 そうした場合は、initialOutput() は何もしないように定義して、 setInitialState() で初期の出力をするように定義しても構いません。

    An initial output. In classes derived from class Element, its definition should be given.

    The output in "_currentTime" is defined immediately after deciding the amount of initial states. Time and an output value are written in a sending port. "true" is returned when the output in "_currentTime" is able to be calculated. "false" is returned when the output of "_currentTime" is not able to be calculated by required input data not being obtained.

    戻り値:
    a boolean value
    例外:
    OhError - if an error occurs

    calculateTimeStep

    public abstract long calculateTimeStep()
                                    throws OhError
    タイムステップの計算を行ないます。

    各派生クラスでモデルに応じて _timeStep [sec] を計算し、 戻り値として返すメソッドを定義して下さい。

    つまり、_timeStep をどのような条件下で、どのような値にするかを定義します。

    例えば、_timeStep を一定値 3600 [sec] に設定する場合、

      public long calculateTimeStep() {
        return 3600;
      }
     
    と定義して下さい。

    また、下記のようにメンバ変数 _k の値により _timeStep を変更することもできます。

      public long calculateTimeStep() {
        return (_k > 0) ? 360 : 60;
      }
    
      public long calculateTimeStep() {
        return 360 * pow(10, _k);
      }
     
    _timeStep は、work() の中で設定されるので、
      public long calculateTimeStep() {
        _timeStep = 1;
        return 1;
      }
     
    のように、このメソッドの中で変更しないでください。

    抽象メソッドなので、派生クラスで必ず定義して下さい。

    戻り値: 次回の計算のタイムステップ。[sec]

    Calculation of a time step. In classes derived from class Element, its definition should be given.

    Please calculate "_timeStep" according to a model in each inherited class, and define the method which returns it as a return value. That is, it defines under what conditions "_timeStep" is made into what value.

    戻り値:
    a long value
    例外:
    OhError - if an error occurs

    canYouCalculate

    public abstract boolean canYouCalculate()
                                     throws OhCannotGetDataError,
                                            OhError
    計算開始の可・不可の判断をします。

    まず、_currentTime が _terminalTime 以上の場合、計算済みと判断し false を返します。

    次に、全ての所有受信端子が getNecessaryTimeFrom(), getNecessaryTimeTo() 間の データパックを取得可能であることを確認します。 取得可能な場合、計算実行可能と判断して true を返します。 取得不可能な場合、計算実行不可と判断して false を返します。

    データが取得不可能であると返事をしてきた受信端子に対して計算要求を出します。 具体的には、受信端子に calReq() メッセージを送ります。

     [戻り値]
      ・true --> 計算実行可能の場合。
      ・false -> 計算実行不可能の場合、または計算済みの場合。
     

    Judgment whether calculation can be started or not. In classes derived from class Element, its definition should be given.

    First, when "_currentTime" is more than "_terminalTime", it is judged that calculation has finished, and "false" is returned.

    Next, it checks that all possession receiving ports can acquire the data pack between "getNecessaryTimeFrom" and "getNecessaryTimeTo". It is judged that calculation execution is possible the case of being acquirable, "true" is returned. It is judged that calculation execution is impossible the case of being unacquirable, "false" is returned.

    A calculation request is advanced to the receiving port which will have replied that data is unacquirable. In particular, a calculation request message is sent to a receiving port.

     [RETURN]
      ・true --> When calculation execution is possible.
      ・false -> When calculation execution is impossible.
                  When calculation has finished.
     

    戻り値:
    a boolean value
    例外:
    OhCannotGetDataError - if an error occurs
    OhError - if an error occurs

    calculate

    public abstract boolean calculate()
                               throws OhCannotGetDataError,
                                      OhError
    1ステップ分の計算手続きを定義します。

    各ユーザが独自の要素モデルを作成する際、1ステップ分の計算手続きを定義して下さい。 一般的な要素では、

    • 最初、各状態量には _currentTime における値が格納されている。
    • ここでは _currentTime + _timeStep における状態量, 出力値を計算する。
    • このメソッド終了後、状態量は _currentTime + _timeStep における値に更新されている。
    の3点を満足するように、下記の (1) から (4) を順に記述して下さい。
      (1) 受信端子からの入力。
      (2) 数理計算。
      (3) 送信端子への出力。
      (4) 状態量の更新。
     
    (2) では、パラメータ、_currentTime における状態量、受信端子からの入力を用い、 _currentTime + _timeStep における状態量、送信すべき出力値を計算する数理モデルの1ステップ分を 具体的に定義して下さい。

    このメソッドの中で _currentTime, _timeStep を変更しないで下さい。 必要ならば _timeStep を更に細かい時間区分に分割して計算できますが、 この時は作業用変数を用い、_currentTime, _timeStep を変更しないように注意して下さい。

    計算に必要な全ての数値は、データメンバ及び所有受信端子からの入力として取得できます。 従って引数は不要です。

    予定通り計算できた場合は、true を返します。 calculate() の内部で計算時間ステップを計算し、 その計算時間ステップ分のデータを取得できないなどして、 計算を進めることができなかった場合は、false を返します。

    抽象メソッドなので、派生クラスで必ず定義して下さい。

     [ACCIDENT]
      ・このメソッドの中で _currentTime, _timeStep が変更された場合。
     

    Calculation procedure for 1 step. In classes derived from class Element, its definition should be given.

    In a general element, Please describe following (1) to (4) in order to fulfill these 3 points.
      (1) the input from a receiving port.
      (2) numerical computation.
      (3) the output to a sending port.
      (4) updating of the amount of states.
     
    At (2), by using parameters, the amount of states in "_currentTime" , and the input from a receiving ports, please define concretely one step of a numerical model which calculate the amount of states and the output value which should be transmitted in "_currentTime + _timeStep".

    In this method, please do not change "_currentTime" and "_timeStep".

    All numerical values required for calculation are acquirable as instance variable and input from a possession receiving port. Therefore, arguments are unnecessary.

    The case where it is calculable as planned, "true" is returned. When a calculation time step is calculated inside "calculate()", the data for the calculation time step cannot be acquired and calculation is not able to be advanced, "false" is returned.

    戻り値:
    a boolean value
    例外:
    OhCannotGetDataError - if an error occurs
    OhError - if an error occurs

    work

    public abstract boolean work()
                          throws OhCannotGetDataError,
                                 OhError
    _currentime から OhTotalSystem._terminalTime 間の計算アルゴリズムを定義します。

    calculate(), calculateTimeStep() などを用いて、_terminalTime までの計算を実行します。

    まず、 OhElement.canYouCalculate() の戻り値が false ならば、計算開始不可と判断し、false を返します。

    戻り値が true の場合は、 true である限り、 OhElement.calculate(), _currentTime.add(_timeStep) を繰り返し実行します。

    最後に、 OhElement.setDataPackArray(), を実行し、true を返します。

     
     [戻り値]
      ・true --> 計算を実行した場合。
      ・false -> 計算不可能の場合、または計算済みの場合。
     

    Calculate between "_currentTime" and "_terminalTime". In classes derived from class Element, its definition should be given.

    Calculation by "_terminalTime" is performed using "calculate()", "calculateTimeStep()", etc.

    First, if return value of "canYouCalculate()" becomes "false", it will be judged that a calculation start is impossible, "false" is returned.

    When the return value is "true", "calculate()" and "_currentTime += _timeStep" are repeated and performed, as long as the return value of "canYouCalculate" is "true".

    Finally, "setDataPackArray()" and "reportToSender()" are performed and "true" is returned.

     [RETURN]
      ・true --> When calculation was performed.
      ・false -> When calculation is impossible.
                  When calculation has finished.
     

    戻り値:
    a boolean value
    例外:
    OhCannotGetDataError - if an error occurs
    OhError - if an error occurs

    saveTerminalState

    public abstract void saveTerminalState(java.io.PrintWriter aPr)
    要素の最終状態を出力ストリーム os で指定されるファイルに書き込む作業をするメソッドです。 ユーザが定義する要素モデルでは、このメソッドを必ず定義しなければなりません。

    最終状態を書き込む仕様は次のようにしてください。

     (data_string)
     

    This is the method which does the work which writes the last state of an element in the file specified by the output stream "aBr".

    In classes derived from class Element, its definition should be given.

    パラメータ:
    aPr - a PrintWriter value

    init

    public boolean init(java.lang.String aObjName,
                        int aObjNum,
                        OhBufferedReader aBr)
                 throws OhError
    構成要素のクラス名をファイルから読みとってつくりあげる部分系モデルで利用される コンストラクタの補助メソッドです。 引数無しのコンストラクタで作成したあとに呼ばれることを想定しています。 例えば、className, objectName, objectNumber がファイルから読み取られているとし、 対象とするファイルのストリームを br とするとき、
      (OhElement)elm = (OhElement)Class.forName("ohymosj." + className).newInstance();
      elm.init(objectName, objectNum, br);
     
    のようにして構成要素を割り当てます。

    構成要素のクラス名をファイルから読みとってつくりあげる部分系モデルで 利用されるようにするためには、 このメソッドを定義しておく必要があります。

    init(aObjName, aObjNum, aBr) が未定義の構成要素が呼ばれたときには、 例外 OhError が投げられます。

    Initialization with the information which is given through a file.

    パラメータ:
    aObjName - a String value
    aObjNum - an int value
    aBr - an OhBufferedReader value
    戻り値:
    a boolean value
    例外:
    OhError - if an error occurs

    init

    public boolean init(java.lang.String aObjName,
                        int aObjNum,
                        int aNumOfObjs,
                        java.lang.String aDataStr)
                 throws OhError
    オブジェクト名、オブジェクト番号、直接通信する要素の配列、データ文字列を初期化します。 直接通信する要素の配列に関しては、 aNumOfObjs 個の要素数を持つ配列をメモリに確保します。

    パラメータ:
    aObjName - a String value
    aObjNum - an int value
    aNumOfObjs - an int value
    aDataStr - a String value
    戻り値:
    a boolean value
    例外:
    OhError - if an error occurs

    init

    public boolean init(java.lang.String aObjName,
                        int aObjNum,
                        int aNumOfObjs)
                 throws OhError
    オブジェクト名、オブジェクト番号、直接通信する要素の配列を初期化します。 直接通信する要素の配列に関しては、 aNumOfObjs 個の要素数を持つ配列をメモリに確保します。

    パラメータ:
    aObjName - a String value
    aObjNum - an int value
    aNumOfObjs - an int value
    戻り値:
    a boolean value
    例外:
    OhError - if an error occurs

    init

    public boolean init(java.lang.String aObjName,
                        int aObjNum,
                        java.lang.String aDataStr)
                 throws OhError
    オブジェクト名、オブジェクト番号、データ文字列を初期化します。

    パラメータ:
    aObjName - a String value
    aObjNum - an int value
    aDataStr - a String value
    戻り値:
    a boolean value
    例外:
    OhError - if an error occurs

    init

    public boolean init(java.lang.String aObjName,
                        int aObjNum)
                 throws OhError
    オブジェクト名、オブジェクト番号を初期化します。

    オーバーライド:
    クラス OhObject 内の init
    パラメータ:
    aObjName - a String value
    aObjNum - an int value
    戻り値:
    a boolean value
    例外:
    OhError - if an error occurs

    getFromList

    public java.lang.Object getFromList(java.lang.String aClassName,
                                        java.lang.String aObjName,
                                        int aObjNum)
                                 throws OhError
    _objectList から Object 型オブジェクトを取得します。

    このメソッドは、クラス名, オブジェクト名, オブジェクト番号を指定して、 _objectList から Object 型オブジェクトを取得します。

    指定されたオブジェクトが登録されていない場合は null を返します。

    _objectList が null の場合は、エラーメッセージを表示し、null を返します。

     [ARGUMENT]
      ・aClassName - 取得するオブジェクトのクラス名
      ・aObjName --- 取得するオブジェクトのオブジェクト名
      ・aObjNum ---- 取得するオブジェクトのオブジェクト番号
     [RETURN]
      ・Object ----- Object 型にキャストされた指定オブジェクト
      ・null ------- 指定オブジェクトを発見できない場合
                     _objectList が存在しない場合
     [ACCIDENT]
      ・Object 型以外の変数が object_list に収録されている場合
     

    Finds an object with class name 'aClassName', object name 'aObjName', and object number 'aObjNum' from "_objectList" and returns the object. When such an object could not be found from "_objectList", "null" will be returned.

    パラメータ:
    aClassName - a String value
    aObjName - a String value
    aObjNum - an int value
    戻り値:
    an Object value
    例外:
    OhError - if an error occurs

    getFromList

    public java.lang.Object getFromList(java.lang.String aObjName,
                                        int aObjNum)
                                 throws OhError
    _objectList から Object 型オブジェクトを取得します。 Finds an object with object name 'aObjName', and object number 'aObjNum' from "_objectList" and returns the object. When such an object could not be found from "_objectList", "null" will be returned.

    パラメータ:
    aObjName - a String value
    aObjNum - an int value
    戻り値:
    an Object value
    例外:
    OhError - if an error occurs

    register

    public boolean register(java.lang.Object aObj)
                     throws OhError
    Object 型オブジェクトの登録と _owner の設定を行ないます。

    引数の Object 型オブジェクト "aObj" を _objectList に登録します。 同時に、このメソッドを呼び出したオブジェクト(this)が "aObj" の _owner となるように設定されます。

    登録にあたり、次の場合はエラーメッセージを出力後 false を返します。

    • aObj が null の場合。
    • object_list が NULL の場合。
    • クラス名、オブジェクト名、オブジェクト番号が全て aObj と一致するオブジェクトが _objectList に登録されている場合。
    • aObj の _owner が設定済みの場合。
    また、次の場合は異常を発生します。
    • aObj に OhObject 型以外の変数が格納されている場合。
    • _objectList に OhObject 型以外の変数が収録されている場合。
     [ARGUMENT]
      ・aObj --- Object 型にキャストされた登録オブジェクト。
     [RETURN]
      ・true --> 正常に登録された場合。
      ・false -> aObj が null の場合。
                 object_list が NULL の場合。(配列化済み?)
                 aObj と、 クラス名、 オブジェクト名、 オブジェクト番号が全て一致するオブジェクトが既に
                 _objectList に登録されている場合。
                 aObj の _owner が設定済みの場合。(OhObject.setOwner())
    
     [ACCIDENT]
      ・aObj に OhObject 型以外の変数が格納されている場合。
      ・_objectList に OhObject 型以外の変数が収録されている場合。
     

    Registers an object 'aObj' to the data member '_objectList'.

    パラメータ:
    aObj - an Object value
    戻り値:
    a boolean value
    例外:
    OhError - if an error occurs

    makeObjectArray

    public java.lang.Object[] makeObjectArray(int[] aNumOfObjs)
                                       throws OhError
    配列化した _objectList を返し、 同時に、引数 aNumOfObjs (配列)の1番目に要素数 _numberOfObjects を格納します。

    _objectList が null を指している場合、エラーメッセージを表示します。

    また、引数 aNumOfObjs[0] が 0 以上の場合は、既に配列を作成済みと判断し、 エラーメッセージを表示します。 配列化後、_numOfObjs[0] は 0 以上に設定されます。 従って、配列設定前には _numOfObjs[0] は 0 未満に初期化しておいて下さい。

    _numberOfReceivePort, _numberOfSendPort は、コンストラクタで -1 に初期化されます。

     [in] aNumOfObjs[0] - _objectList の要素数(_numberOfObjects)
    
     [RETURN] _objectList を配列化した Object 型配列
     

    Creates an array of objects which are included in '_objectList' and stores it in '_aObjArray' and the number of elements in 'aNumOfObjs'.

    パラメータ:
    aNumOfObjs - an int[] value
    戻り値:
    an Object[] value
    例外:
    OhError - if an error occurs

    canYouSetObjectArray

    public boolean canYouSetObjectArray(int aNumOfObjs)
                                 throws OhError
    _objectArray を作成します。 具体的には、 aNumOfObjs (arg) 個のオブジェクトを記憶するための領域をヒープに確保します。 _objectArray は直接通信をする相手を記憶するために使われます。

    また、

      ・aNumOfObjs (arg) が負の場合。
      ・_numberOfObjects が 0 以上の場合。(作成済み)
     
    の場合はエラーメッセージを出力後 false を返します。
     [ARGUMENT]
      ・aNumOfObjs -> _objectArray に記憶するオブジェクト数。
     [RETURN]
      ・true --> _objectArray が確保できた場合。
      ・false -> aNumOfObjs が負の場合、または _numberOfObjects が 0 以上の場合。(作成済み)
     

    Acquire the memory to store "aNumOfObjs" objects.

    パラメータ:
    aNumOfObjs - an int value
    戻り値:
    a boolean value
    例外:
    OhError - if an error occurs

    register

    public boolean register(java.lang.Object aObj,
                            int aNum)
                     throws OhError
    Object 型オブジェクトの登録と _owner の設定を行ないます。

    Registers the object "aObj" with which the current object communicates directly to object_array[num].

    パラメータ:
    aObj - an Object value
    aNum - an int value
    戻り値:
    a boolean value
    例外:
    OhError - if an error occurs

    construct

    public boolean construct()
                      throws OhError
    Object 型オブジェクト記憶用配列を作成します。 つまり、_receivePortArray, _sendPortArray, _objectArray を作成します。

    まず、_objectList が null であることを確認します。 null でない場合、_objectList が使用中と判断してエラーメッセージを表示し、return します。

    次に、以下の作業を実行します。

    1. OhLinkedList オブジェクトをヒープに作成して _objectList に設定する。
    2. OhElement.registerReceivePort(), OhElenment.makeObjectArray() を用いて _receivePortArray を作成する。
    3. OhLinkedList.clear() により _objectList を初期化する。
    4. OhElement.registerSendPort(), OhElement.makeObjectArray() を用いて _sendPortArray を作成する。
    最後に _objectList を null に設定します。

    Makes "_receivePortArray" and "_sendPortArray".

    戻り値:
    a boolean value
    例外:
    OhError - if an error occurs

    getFromArray

    public java.lang.Object getFromArray(java.lang.String aClassName,
                                         java.lang.String aObjName,
                                         int aObjNum,
                                         java.lang.Object[] aObjArray,
                                         int aNumOfObjs)
    Object 型オブジェクトを取得します。

    getReceivePort(), getSendPort(), getObject() で用いられる補助メソッドの役割を担う。

    Finds an object with class name 'aClassName', object name 'aObjName', and object number 'aObjNum' from 'aObjArray' and returns the object.

    パラメータ:
    aClassName - a String value
    aObjName - a String value
    aObjNum - an int value
    aObjArray - an Object[] value
    aNumOfObjs - an int value
    戻り値:
    an Object value

    getFromArray

    public java.lang.Object getFromArray(java.lang.String aObjName,
                                         int aObjNum,
                                         java.lang.Object[] aObjArray,
                                         int aNumOfObjs)
    Object 型オブジェクトを取得します。

    getReceivePort(), getSendPort(), getObject() で用いられる補助メソッドの役割を担う。

    Finds an object with object name 'aObjName', and object number 'aObjNum' from 'aObjArray' and returns the object.

    パラメータ:
    aObjName - a String value
    aObjNum - an int value
    aObjArray - an Object[] value
    aNumOfObjs - an int value
    戻り値:
    an Object value

    getReceivePort

    public java.lang.Object getReceivePort(java.lang.String aClassName,
                                           java.lang.String aObjName,
                                           int aObjNum)
                                    throws OhError
    _receivePortArray から受信端子を取得します。

    クラス名、オブジェクト名、オブジェクト番号を指定することにより、 _receivePortArray から受信端子を取得します。 指定されたオブジェクトが登録されていない場合は null を返します。

    By appointing class name, object name, and object number, acquires a receiving port from "_receivePortArray".

    When the appointed object is not registered, "null" is returned.

    パラメータ:
    aClassName - a String value
    aObjName - a String value
    aObjNum - an int value
    戻り値:
    an Object value
    例外:
    OhError - if an error occurs

    getReceivePort

    public java.lang.Object getReceivePort(java.lang.String aClassName,
                                           java.lang.String aObjName)
                                    throws OhError
    _receivePortArray から受信端子を取得します。

    クラス名、オブジェクト名を指定することにより、 _receivePortArray から受信端子を取得します。 指定されたオブジェクトが登録されていない場合は null を返します。

    By appointing class name and object name, acquires a receiving port from "_receivePortArray". At this time, the object number is set to 0.

    When the appointed object is not registered, "null" is returned.

    パラメータ:
    aClassName - a String value
    aObjName - a String value
    戻り値:
    an Object value
    例外:
    OhError - if an error occurs

    getSendPort

    public java.lang.Object getSendPort(java.lang.String aClassName,
                                        java.lang.String aObjName,
                                        int aObjNum)
                                 throws OhError
    _sendPortArray から送信端子を取得します。

    クラス名、オブジェクト名、オブジェクト番号を指定することにより、 _sendPortArray から送信端子を取得します。 指定されたオブジェクトが登録されていない場合は null を返します。

    By appointing class name, object name, and object number, acquires a sending port from "_sendPortArray".

    When the appointed object is not registered, "null" is returned.

    パラメータ:
    aClassName - a String value
    aObjName - a String value
    aObjNum - an int value
    戻り値:
    an Object value
    例外:
    OhError - if an error occurs

    getSendPort

    public java.lang.Object getSendPort(java.lang.String aClassName,
                                        java.lang.String aObjName)
                                 throws OhError
    _sendPortArray から送信端子を取得します。

    クラス名、オブジェクト名を指定することにより、 _sendPortArray から送信端子を取得します。 指定されたオブジェクトが登録されていない場合は null を返します。

    By appointing class name and object name, acquires a sending port from "_sendPortArray". At this time, the object number set to 0.

    When the appointed object is not registered, "null" is returned.

    パラメータ:
    aClassName - a String value
    aObjName - a String value
    戻り値:
    an Object value
    例外:
    OhError - if an error occurs

    getReceivePort

    public java.lang.Object getReceivePort(java.lang.String aObjName,
                                           int aObjNum)
                                    throws OhError
    _receivePortArray から受信端子を取得します。

    オブジェクト名、オブジェクト番号を指定することにより、 _receivePortArray から受信端子を取得します。 指定されたオブジェクトが登録されていない場合は null を返します。

    By appointing object name and object number, acquires a receiving port from "_receivePortArray".

    When the appointed object is not registered, "null" is returned.

    パラメータ:
    aObjName - a String value
    aObjNum - an int value
    戻り値:
    an Object value
    例外:
    OhError - if an error occurs

    getReceivePort

    public java.lang.Object getReceivePort(java.lang.String aObjName)
                                    throws OhError
    _receivePortArray から受信端子を取得します。

    オブジェクト名を指定することにより、 _receivePortArray から受信端子を取得します。 指定されたオブジェクトが登録されていない場合は null を返します。

    By appointing object name, acquires a receiving port from "_receivePortArray". At this time, the object number is set to 0.

    When the appointed object is not registered, "null" is returned.

    パラメータ:
    aObjName - a String value
    戻り値:
    an Object value
    例外:
    OhError - if an error occurs

    getSendPort

    public java.lang.Object getSendPort(java.lang.String aObjName,
                                        int aObjNum)
                                 throws OhError
    _sendPortArray から送信端子を取得します。

    オブジェクト名、オブジェクト番号を指定することにより、 _sendPortArray から送信端子を取得します。 指定されたオブジェクトが登録されていない場合は null を返します。

    By appointing object name and object number, acquires a sending port from "_sendPortArray".

    When the appointed object is not registered, "null" is returned.

    パラメータ:
    aObjName - a String value
    aObjNum - an int value
    戻り値:
    an Object value
    例外:
    OhError - if an error occurs

    getSendPort

    public java.lang.Object getSendPort(java.lang.String aObjName)
                                 throws OhError
    _sendPortArray から送信端子を取得します。

    オブジェクト名を指定することにより、 _sendPortArray から送信端子を取得します。 指定されたオブジェクトが登録されていない場合は null を返します。

    By appointing object name, acquires a sending port from "_sendPortArray". At this time, the object number is set to 0.

    When the appointed object is not registered, "null" is returned.

    パラメータ:
    aObjName - a String value
    戻り値:
    an Object value
    例外:
    OhError - if an error occurs

    getObject

    public java.lang.Object getObject(java.lang.String aClassName,
                                      java.lang.String aObjName,
                                      int aObjNum)
                               throws OhError
    オブジェクトを取得します。

    指定されたオブジェクトが登録されていない場合は null を返します。

    acquires a object.

    When the appointed object is not registered, "null" is returned.

    パラメータ:
    aClassName - a String value
    aObjName - a String value
    aObjNum - an int value
    戻り値:
    an Object value
    例外:
    OhError - if an error occurs

    getObject

    public java.lang.Object getObject(java.lang.String aClassName,
                                      java.lang.String aObjName)
                               throws OhError
    オブジェクトを取得します。

    指定されたオブジェクトが登録されていない場合は null を返します。

    acquires a object. At this time, the object number is set to 0.

    When the appointed object is not registered, "null" is returned.

    パラメータ:
    aClassName - a String value
    aObjName - a String value
    戻り値:
    an Object value
    例外:
    OhError - if an error occurs

    getComponent

    public java.lang.Object getComponent(java.lang.String aClassName,
                                         java.lang.String aObjName,
                                         int aObjNum)
                                  throws OhError
    構成オブジェクト(構成要素)を取得します。

    クラス名、オブジェクト名、オブジェクト番号を指定して、_objectArray から構成要素を取得します。 OhElement クラスは最小単位である要素なので、構成要素は持っていません。 ここでは必ずエラー処理を行なうようにしています。 派生クラスである OhSubSystem, OhTotalSystem でオーバーライドされます。 この OhElement クラスを継承して新たにクラスを作るユーザが実装しなくてもいいように、 抽象メソッドにしていません。

    Acquires a composition object.

    パラメータ:
    aClassName - a String value
    aObjName - a String value
    aObjNum - an int value
    戻り値:
    an Object value
    例外:
    OhError - if an error occurs
    OhError - if an error occurs

    getComponent

    public java.lang.Object getComponent(java.lang.String aClassName,
                                         java.lang.String aObjName)
                                  throws OhError
    構成オブジェクト(構成要素)を取得します。

    クラス名、オブジェクト名を指定して、_objectArray から構成要素を取得します。 オブジェクト番号は 0 になります。 OhElement クラスは最小単位である要素なので、構成要素は持っていません。 ここでは必ずエラー処理を行なうようにしています。 派生クラスである OhSubSystem, OhTotalSystem でオーバーライドされます。 この OhElement クラスを継承して新たにクラスを作るユーザが実装しなくてもいいように、 抽象メソッドにしていません。

    Acquires a composition object. At this time, the object number is set to 0.

    パラメータ:
    aClassName - a String value
    aObjName - a String value
    戻り値:
    an Object value
    例外:
    OhError - if an error occurs

    getComponent

    public java.lang.Object getComponent(java.lang.String aObjName,
                                         int aObjNum)
                                  throws OhError
    構成オブジェクト(構成要素)を取得します。

    オブジェクト名、オブジェクト番号を指定して、_objectArray から構成要素を取得します。 OhElement クラスは最小単位である要素なので、構成要素は持っていません。 ここでは必ずエラー処理を行なうようにしています。 派生クラスである OhSubSystem, OhTotalSystem でオーバーライドされます。 この OhElement クラスを継承して新たにクラスを作るユーザが実装しなくてもいいように、 抽象メソッドにしていません。

    Acquires a composition object.

    パラメータ:
    aObjName - a String value
    aObjNum - an int value
    戻り値:
    an Object value
    例外:
    OhError - if an error occurs

    getComponent

    public java.lang.Object getComponent(java.lang.String aObjName)
                                  throws OhError
    構成オブジェクト(構成要素)を取得します。

    オブジェクト名を指定して、_objectArray から構成要素を取得します。 OhElement クラスは最小単位である要素なので、構成要素は持っていません。 ここでは必ずエラー処理を行なうようにしています。 派生クラスである OhSubSystem, OhTotalSystem でオーバーライドされます。 この OhElement クラスを継承して新たにクラスを作るユーザが実装しなくてもいいように、 抽象メソッドにしていません。

    Acquires a composition object. At this time, the object number is set to 0.

    パラメータ:
    aObjName - a String value
    戻り値:
    an Object value
    例外:
    OhError - if an error occurs

    canYouSwitch

    public boolean canYouSwitch()
                         throws OhError
    全ての所有送信端子で OhSendPort.canYouSwitch() を実行します。

    具体的には、以下を実行します。

    1. 送信先受信端子配列 _dataPackArray を作成する。
    2. 送信先受信端子の数を _numberOfReceivers に設定する。
    3. _dataPackArray のメモリを確保する。
    4. _numberOfDataPacks の値を -1 から 0 に変更する。
        このメソッドの実行後は所有送信端子を接続、リンクできません。
         [RETURN]
          ・true --> 正常に実行できた場合。
          ・false -> OhSendPort.canYouSwitch() で
                     false を返す送信端子が存在する場合(既に OhSendPort.canYouSwitch() が実行されている場合)。
         

        OhSendPort.canYouSwitch() is performed with all possession sending ports.

        戻り値:
        a boolean value
        例外:
        OhError - if an error occurs

    areYouReady

    public boolean areYouReady()
                        throws OhError
    計算作業前の確認を行ないます。

    受信端子、送信端子がデータパックを送受信可能な状態であることを確認します。

    全受信端子の OhReceivePort.areYouReady の戻り値、及び全送信端子の OhSendPort.areYouReady の 戻り値が true であることを確認します。 戻り値が false の端子が存在する場合は false を返し、存在しない場合は true を返します。

    このメソッドの戻り値が true の場合、OhElement は計算を実行できます。

    false の場合は、データパックを受信できない受信端子、 またはデータパックを送信できない送信端子が存在し、 この OhElement, 送信先の Element で計算を実行できません。

    この場合、接続作業に誤りがあるか、OhSendPort に canYouSwitch() を実行していない可能性があります。

     [RETURN]
      ・true --> 全端子の areYouReady の戻り値が true の場合。
      ・false -> 戻り値が false の端子が存在する場合。
     

    Checks before calculation work.

    Checks to see sending ports and receiving ports are in the state which can send and receive the data packs.

    戻り値:
    a boolean value
    例外:
    OhError - if an error occurs

    canYouGetDataString

    public boolean canYouGetDataString(java.lang.String aDataStr)
                                throws OhError
    データ文字列 _dataString を aDataStr に設定します。

    クラス OhElement の String 型の引数つき init() で呼び出されます。

    Gets the data string.

    パラメータ:
    aDataStr - a String value
    戻り値:
    a boolean value
    例外:
    OhError - if an error occurs

    clearDataString

    public void clearDataString()
    データ文字列 _dataString を null に設定します。

    Clear the data string.


    getParameter

    public void getParameter(OhBufferedReader aBr)
                      throws OhError
    パラメタを読み込むメソッドです。 定義済みで、ユーザは新規に定義する必要はありません。

    Gets the parameter.

    パラメータ:
    aBr - an OhBufferedReader value
    例外:
    OhError - if an error occurs

    getInitialState

    public void getInitialState(OhBufferedReader aBr)
                         throws OhError
    初期状態量を読み込むメソッドです。

    Gets the initial state.

    パラメータ:
    aBr - an OhBufferedReader value
    例外:
    OhError - if an error occurs

    canYouShareInfo

    public boolean canYouShareInfo()
    このメソッドは、直接通信を利用してパラメタなどの情報を共有するためのメソッドです。 様々な利用方法が考えられますが、 例えばあるオブジェクトのパラメタを他のオブジェクトでも利用したい場合などに利用できます。 それぞれが同じパラメタを setParameter() で設定するのではなく、 一方が設定したパラメタ値を、他方がコピーさせてもらう、 あるいはそのパラメタを教えてもらう、などといった使い方が考えられます。 情報を共有する作業を行なった場合は true を返して下さい。 作業を行なえなかった場合は false を返して下さい。 デフォルトでは単に true を返すように定義しています。

    This is a method for sharing information, such as a parameter, using direct communication.

    戻り値:
    a boolean value

    doShareInfo

    public OperationFlag doShareInfo()
                              throws OhError
    このメソッドは canYouShareInfo() を呼び出すメソッドです。 戻り値は OperationFlag 型です。

    doShareInfo() は、

    canYouShareInfo() がまだなされていない場合、

    1. canYouShareInfo() を呼び、戻り値が true ならば _shareInfoDoneP を true に設定し、 OperationFlag.E_DONE を返します。
    2. canYouShareInfo() の戻り値が false ならば 情報共有作業ができなかったとして、 OperationFlag.E_UNDONE を返します。
    canYouShareInfo() がすでにすんでいる場合は OperationFlag.E_ALREADY を返します。

    This is the method which calls 'canYouShareInfo()'.

    戻り値:
    an OperationFlag value
    例外:
    OhError - if an error occurs

    saveSendPortStock

    public void saveSendPortStock(java.io.PrintWriter aPw)
    要素に接続されているすべての送信端子のデータに収録されているデータパックを、 ストリーム aPw(引数)で指定されているファイルに書き出します。 収録の仕事は、送信端子の同名のメソッド OhSendPort.saveSendPortStock() を使って行ないます。

    OhSubSystem では再定義されます。

    The data pack recorded on the data of all the sending ports connected to the element is written out to the file specified by stream 'aPw'. Work of inclusion is performed using method 'saveSendPortStock' of the same name of a sending port.

    This method is re-defined by 'OhSubSystem'.

    パラメータ:
    aPw - a PrintWriter value

    restoreSendPortStock

    public void restoreSendPortStock()
                              throws OhError
    データ文字列 _dataString を読みとり、要素に接続されている送信端子にデータを収録します。

    The data character sequence '_dataString' is read and data is recorded on the sending port connected to the element.

    例外:
    OhError - if an error occurs

    getCurrentTime

    public OhTimePoint getCurrentTime()
    現在時刻 _currentTime を返します。

    Returns '_currentTime'.

    戻り値:
    an OhTimePoint value

    getTimeStep

    public long getTimeStep()
    タイムステップ _timeStep を返します。

    Returns '_timeStep'.

    戻り値:
    a long value

    getNextTime

    public OhTimePoint getNextTime()
    次ステップの _currentTime を返します。

    戻り値:
    an OhTimePoint value

    getTerminalTime

    public OhTimePoint getTerminalTime()
    計算終了時刻を返します。

    戻り値:
    an OhTimePoint value

    getMediumTermTargetTime

    public OhTimePoint getMediumTermTargetTime()
    中間目標時刻を_owner から取得します。

    Returns the medium term target time from '_owner'.

    戻り値:
    an OhTimePoint value

    getFixedTime

    public OhTimePoint getFixedTime()
    反復計算において状態が確定している時刻 _fixedTime を返します。

    Returns '_fixedTime'.

    戻り値:
    an OhTimePoint value

    getTargetTime

    public OhTimePoint getTargetTime()
    反復計算目標時刻 _targetTime を返します。

    Returns '_targetTime'.

    戻り値:
    an OhTimePoint value

    setCur2Fix2Tar

    public void setCur2Fix2Tar()
    _targetTime, _fixedTime を _currentTime に一致させるメソッドです。 要素間反復計算を行なう要素モデルでは、 setInitialState() で _currentTime が初期設定された後に このメソッドを呼ぶ必要があります。


    canYouRenewCurrentTime

    public boolean canYouRenewCurrentTime()
    _currentTime を更新します。

    戻り値:
    a boolean value

    rewindCurrentTime

    public void rewindCurrentTime()
                           throws OhError
    _currentTime を _fixedTime に戻します。

    例外:
    OhError - if an error occurs

    renewFixedTime

    public void renewFixedTime()
                        throws OhError
    _fixedTime を _currentTime に進めます。

    Updates '_fixedTime'.

    例外:
    OhError - if an error occurs

    initializeTargetTime

    public void initializeTargetTime()
                              throws OhError
    このメソッドは OhElement では使わず、 OhSubSystem で再定義して使います。 なぜこのクラスで定義したかというと、OhElement である構成要素に対しても、建前上、 このメソッドを呼ぶ必要があるからです。 詳細は、 OhSubSystem.initializeTargetTime() を参照して下さい。

    This method is not used by OhElement. It uses re-defining by OhSubSystem. The reason for having defined this method is that it is necessary to call this method on principle also to the OhElement type composition element.

    例外:
    OhError

    renewTargetTime

    public void renewTargetTime(long aT)
    反復計算目標時刻 _targetTime を更新します。 引数に反復計算時間間隔をとります。

    Updates '_targetTime'.

    パラメータ:
    aT - a long value. Repeated calculation time interval.

    calculateIterationStep

    public long calculateIterationStep()
                                throws OhError
    反復計算目標時刻を計算します。

    Calculates repeated calculation target time.

    戻り値:
    a long value
    例外:
    OhError

    getNecessaryTimeFrom

    public OhTimePoint getNecessaryTimeFrom(OhReceivePort aRp)
    要素が次回の計算に必要なデータのうち、aRp (arg) から受け取るべきデータのデータ記録時刻を返します。

    getNecessaryTimeFrom() から getNecessaryTimeTo() までのデータパックが 受信端子 aRp から受信されていなければ、要素は計算を開始することができません。

    Returns the data record time of the data which 'OhElement' should receive from 'aRp' out of data required for next calculation.

    'OhElement' cannot start calculation if the data pack from 'getNecessaryTimeFrom' to 'getNecessaryTimeTo' is not received from the receiving terminal 'aRp', 'OhElement' cannot start calculation.

    パラメータ:
    aRp - an OhReceivePort value
    戻り値:
    an OhTimePoint value

    getNecessaryTimeTo

    public OhTimePoint getNecessaryTimeTo(OhReceivePort aRp)
    要素が次回の計算に必要なデータのうち、aRp (arg) から受け取るべきデータのデータ記録時刻を返します。

    getNecessaryTimeFrom() から getNecessaryTimeTo() までのデータパックが 受信端子 aRp から受信されていなければ、要素は計算を開始することができません。

    Returns the data record time of the data which 'OhElement' should receive from 'aRp' out of data required for next calculation.

    'OhElement' cannot start calculation if the data pack from 'getNecessaryTimeFrom' to 'getNecessaryTimeTo' is not received from the receiving terminal 'aRp', 'OhElement' cannot start calculation.

    パラメータ:
    aRp - an OhReceivePort value
    戻り値:
    an OhTimePoint value

    isInitialTime

    public boolean isInitialTime(OhTimePoint aTp)
                          throws OhError
    _currentTime, _timeStep を aTp (arg), 0 に初期化して true を返します。 初期化前に _timeStep が 0 以上の場合、
    • _currentTime, _timeStep が aTp, 0 に設定済みの場合、 警告メッセージを出力後、true を返します。
    • それ以外の場合、エラーメッセージを出力後、false を返します。

    '_currentTime' and '_timeStep'of OhElement are initialized to 'aTp' and 0, and returns 'true'.

    パラメータ:
    aTp - an OhTimePoint value
    戻り値:
    a boolean value
    例外:
    OhError - if an error occurs

    initialWork

    public boolean initialWork()
                        throws OhError
    初期作業を行ないます。

    初期時刻において、全データを取得します。

    戻り値:
    a boolean value
    例外:
    OhError - if an error occurs

    doInitialWork

    public OperationFlag doInitialWork()
                                throws OhError
    初期作業 initialWork() を終えたかどうかを判断します。

    【初期作業がまだなされていない場合】

    1. 初期時刻ですべての受信端子のデータが取得できれば、 初期作業が可能であると判断して、initialWork() を呼び、 _initialWorkdoneP を true に設定して OperationFlag.E_DONE を返します。
    2. 初期時刻で少なくともひとつの受信端子のデータが取得できないときは、 初期作業が不可能であると判断して OperationFlag.E_UNDONE を返します。
    【初期作業がすでにすんでいる場合】 OperationFlag.E_ALREADY を返します。

    戻り値:
    an OperationFlag value
    例外:
    OhError - if an error occurs

    canYouCalculate0

    public boolean canYouCalculate0()
                             throws OhCannotGetDataError,
                                    OhError
    canYouCalculate() の候補です。

    getNecessaryTimeFrom(), getNecessaryTimeTo() で定義される時間の間の データが取得できれば計算可能と判断する。 これを選ぶのが自然です。 getNecessaryTimeFrom(), getNecessaryTimeTo() メソッドは、 ユーザが自由に再定義できますが、デフォルトでは getNecessaryTimeFrom() は _currentTime を返し、 getNecessaryTimeTo は _currentTime + _timeStep の値を返します。

    データが取得不可能であると返事をしてきた受信端子に対して計算要求を出します。 具体的には、受信端子に calReq() メッセージを送ります。 たとえば、

      public boolean canYouCalculate() {
        return canYouCalculate0();
      }
     
    と定義すればよいです。

    戻り値:
    a boolean value
    例外:
    OhCannotGetDataError - if an error occurs
    OhError - if an error occurs

    canYouCalculate1

    public boolean canYouCalculate1()
                             throws OhCannotGetDataError,
                                    OhError
    canYouCalculate() の候補です。

    getNecessaryTimeFrom() で定義されるデータが取得できれば計算可能と判断します。 (この場合は getNecessaryTimeTo() メソッドを定義する意味はありません。)

    データが取得不可能であると返事をしてきた受信端子に対して計算要求を出します。 具体的には、受信端子に calReq() メッセージを送ります。

    戻り値:
    a boolean value
    例外:
    OhCannotGetDataError - if an error occurs
    OhError - if an error occurs

    setDataPackArray

    public void setDataPackArray()
    データパック配列を更新します。

    全ての所有送信端子に OhSendPort.setDataPackArray() を用い、 送信データパック配列を更新します。

    これにより、古いデータパック配列は消去され、新しいデータパック配列が作成されます。

    Sends data packs.

    'OhSendPort setDataPackArray' is used for all possession sending ports, and sending data pack arrangement is updated. Thereby, old data pack arrangement is eliminated and new data pack arrangement is created.

    But, nothing is carried out in fact.


    reduceDataPackStock

    public void reduceDataPackStock()
    不要データパックを消去します。

    全ての所有受信端子に OhReceivePort.reduceDataPackStock() を用い、 受信元送信端子に計算終了報告を行ないます。

    これにより、受信元送信端子で不要データパックが消去され、データパック配列が更新されます。

    Deletion of an unnecessary datapacks.


    printStatus

    public boolean printStatus()
    Returns true.

    戻り値:
    a boolean value

    recordStatus

    public boolean recordStatus()
                         throws OhError
    Records status.

    戻り値:
    a boolean value
    例外:
    OhError - if an error occurs

    work0

    public boolean work0()
                  throws OhCannotGetDataError,
                         OhError
    work() の例です。

    _timeStep を得てから、calculate() を実行する。

    'Work' which performs 'calculate()' after obtaining '_timeStep'.

    戻り値:
    a boolean value
    例外:
    OhCannotGetDataError - if an error occurs
    OhError - if an error occurs

    work1

    public boolean work1()
                  throws OhCannotGetDataError,
                         OhError
    work() の例です。

    _timeStep は、calculate() の内部で計算される。

    '_timeStep' is calculated inside 'calculate()'.

    戻り値:
    a boolean value
    例外:
    OhCannotGetDataError - if an error occurs
    OhError - if an error occurs

    work2

    public boolean work2()
                  throws OhCannotGetDataError,
                         OhError
    反復計算要素用 work() の例です。

    For the element which carries out repeated calculation.

    戻り値:
    a boolean value
    例外:
    OhCannotGetDataError - if an error occurs
    OhError - if an error occurs

    doYouReachTargetTime

    public boolean doYouReachTargetTime()
    反復計算が _targetTime に到達したかどうかを判断します。 到達していたら true、到達していなければ false を返します。

    This method judges whether repeated calculation reached '_targetTime'.

    戻り値:
    a boolean value

    doYouConverge

    public boolean doYouConverge()
                          throws OhError
    要素間の反復計算の収束を判定します。 反復計算を行なう要素で必ず再定義して下さい。 収束したら true、収束していなければ false を返して下さい。 再定義しない場合はエラーメッセージを出して exit します。

    Convergence of the repeated calculation between elements is judged. Please be sure to re-define by the element which performs repeated calculation. In the method, please return 'true' if it converges. When not giving a re-definition, an error message is sent, and it exits.

    戻り値:
    a boolean value
    例外:
    OhError

    flushData

    public void flushData()
                   throws OhError
    反復目標時刻までのデータの出力と、データパックの処理をするメソッドです。

    It is the method which carries out output of the data by repetitive target time, and processing of a data pack.

    例外:
    OhError

    sendStockedData

    public void sendStockedData()
                         throws OhError
    反復目標時刻までにたまったデータを出力するメソッドです。 出力端子の、例えば OhSendDouble.sendData(OhTimePoint, double) などを利用して下さい。 反復計算を行なう要素で必ず再定義して下さい。 再定義しない場合はエラーメッセージを出して exit します。

    It is the method which outputs the data which accumulated by repetitive target time. For example, please use 'OhSendDouble sendData(OhTimePoint aT, double aValue)'.

    Please be sure to re-define by the element which performs repeated calculation. When not giving a re-definition, an error message is sent, and it exits.

    例外:
    OhError

    calReq

    public void calReq()
                throws OhCannotGetDataError,
                       OhError
    この要素が計算することになったら、 必要となるデータが受信できるかチェックするメソッド canYouCalculate() を実行することで、 この要素が依存している他の要素へ計算要請を伝達します。

    メソッド canYouCalculate() を実行した後で、 この要素への計算要請があったことを記録します。 この要素の work() でこの要請を考慮します。

    このメソッドは、この要素の送信端子から呼ばれます。 部分系では、このメソッドが呼ばれることはありません。 中継端子は、計算要求を送信端子に転送するだけで、 中継端子の所有者である部分系には計算要求を送らないからです。

    ここの定義が不適切である場合は、継承したクラスで再定義してください。

    例外:
    OhCannotGetDataError - if an error occurs
    OhError - if an error occurs

    printObjects

    public void printObjects(java.io.PrintWriter aPw,
                             java.lang.String aHead,
                             java.lang.String aTitle,
                             java.lang.Object[] aPortArray,
                             int aNumOfObjs)
    所有オブジェクトの情報を出力します。

    Information output on possession objects.

    パラメータ:
    aPw - a PrintWriter value
    aHead - a String value
    aTitle - a String value
    aPortArray - an Object[] value
    aNumOfObjs - an int value

    printReceivePorts

    public void printReceivePorts(java.io.PrintWriter aPw,
                                  java.lang.String aHead)
    所有受信端子の情報を出力します。

    Information output on possession receiving ports.


    printReceivePorts

    public void printReceivePorts(java.io.PrintWriter aPw)
    所有受信端子の情報を出力します。

    Information output on possession receiving ports.


    printReceivePorts

    public void printReceivePorts(java.lang.String aHead)
    所有受信端子の情報の出力

    Information output on possession receiving ports.


    printReceivePorts

    public void printReceivePorts()
    所有受信端子の情報を出力します。

    Information output on possession receiving ports.


    printSendPorts

    public void printSendPorts(java.io.PrintWriter aPw,
                               java.lang.String aHead)
    所有送信端子の情報を出力します。

    Information output on possession sending ports.


    printSendPorts

    public void printSendPorts(java.io.PrintWriter aPw)
    所有送信端子の情報を出力します。

    Information output on possession sending ports.


    printSendPorts

    public void printSendPorts(java.lang.String aHead)
    所有送信端子の情報を出力します。

    Information output on possession sending ports.


    printSendPorts

    public void printSendPorts()
    所有送信端子の情報を出力します。

    Information output on possession sending ports.


    printConnection

    public void printConnection(java.io.PrintWriter aPw,
                                java.lang.String aHead)
    接続情報を出力します。

    Information output on connection.


    printConnection

    public void printConnection(java.io.PrintWriter aPw)
    接続情報の出力

    Information output on connection. At this time, the header is " ".


    printConnection

    public void printConnection(java.lang.String aHead)
    接続情報を出力します。

    Information output on connection.


    printConnection

    public void printConnection()
    接続情報を出力します。

    Information output on connection.


    terminalState

    public void terminalState(java.io.PrintWriter aPw)
    最終状態を保存します。

    パラメータ:
    aPw - a PrintWriter value

    create

    public static OhElement create(java.lang.String aClassName)
    水文モデルの要素を作成します。

    引数に、水文モデルの要素となるモデルを表すクラス名を与えると、 その要素モデルのオブジェクトを生成します。

    パラメータ:
    aClassName - a String value
    戻り値:
    an OhElement value