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