コンポーネントの入力、出力を可変にする

TRNSYSのコンポーネントにはParameter, Input, Outputの個数が可変になっている物があります。下の図は開発中の不快指数(Discomfort Index、以下DI)のコンポーネントですが、Parameterの項目で計算するDIの個数を指定することが出来ます。ここで指定した値に合せてInputとOutputの項目の個数が変化します。この例では計算する不快指数を2に指定しているので、Inputの項目として気温(Air temperature)と相対湿度(Relative Humidity)のセットが2つ表示されています。 (図ではInputのみ表示していますが、Outputの個数も増えています)

 Parameter, Input, Outputの個数が可変になっているコンポーネントの例
Parameter, Input, Outputの個数が可変になっているコンポーネントの例

この仕組み自体はProformaのCycleという機能を使って設定します。

ソースコードもこの可変のInput, Ouputを意識して処理を行います。以下、実際に使用しているソースコードです。

これは初期化処理の部分ですが、日本語のコメントの部分がポイントです。

!Do All of the "Very First Call of the Simulation Manipulations" Here
If(getIsFirstCallofSimulation()) Then

  !get the param1, number of DI.
  nDI = JFIX(getParameterValue(1)+0.1)  !パラメーターから計算するDIの個数を取得する
  if(nDI > MaxDI) then   !指定されたDIの個数が最大値(20個)を超えていないか判定する
      Call FoundBadParameter(1,'Fatal','The number of the Discomfort Index to be calculated must be between 1 and 20.')
  endif

  !Tell the TRNSYS Engine How This Type Works
  Call SetNumberofParameters(1)       
  Call SetNumberofInputs(2*nDI)       !パラメーターで指定されたDIの個数に合せてInputの個数を設定する
  Call SetNumberofDerivatives(0)      
  Call SetNumberofOutputs(nDI)        !パラメーターで指定されたDIの個数に合せてOutputの個数を設定する
  Call SetIterationMode(1)        
  Call SetNumberStoredVariables(0,0)  
  Call SetNumberofDiscreteControls(0) 

  !Input,Outputの単位系を設定する
  do i=1, nDI
      Call SetInputUnits(i*2-1,'TE1') !乾球温度(室温)[C]
      Call SetInputUnits(i*2,'PC1')   !相対湿度[%]
  end do
  
  do i=1, GetNumberofOutputs()
      Call SetOutputUnits(i,'DM1')   !不快指数[-]
  end do

  Return
EndIf

パラメーターで指定されたDIの個数に合せて、Input, Outputの個数を設定(調整)しています。

ここではInput,Outputの各項目の単位系の指定も行っています。単位系の指定は必ずしも必要ではありませんが、異なる単位系の値が接続されるとTRNSYSがワーニングとして処理してくれます。例えば、相対湿度に絶対湿度を接続すると、大量にワーニングが発生します。うっかり間違いを避けやすくなります。

Inputからの値の取得処理もDIの個数に合せて可変で処理します。この例では個数(変数nDI)に合せてInputをループで取得しています。

!Read the Inputs
      do i=1,nDI
        Ta(i) = GetInputValue(i*2-1)
        RH(i) = GetInputValue(i*2)
      end do

Outputの処理も同じようにループを使って、DIの個数に合せて計算と出力処理を行っています。

!Set the Outputs from this Model (#,Value)
     !DI=0.81T+0.01H(0.99T-14.3)+46.3
     do i=1, nDI
        DI = 0.81*Ta(i)+0.01*RH(i)*(0.99*Ta(i)-14.3)+46.3 !不快指数の計算
	Call SetOutputValue(i, DI) 
     end do

TRNSYSのコンポーネントでは、このように計算の個数が可変になるケースでも簡単に処理することができます。

動作環境

以下の環境で動作を確認しています。
Windows10 Pro(64bit, 1803)
TRNSYS18.01.0001(64bit)

Pocket

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です