Translate

2012/10/24

FORTRANコンパイラを更新する

FORTRANコンパイラの最新版をゲットしました。
インテル Visual Fortran Composer XE 2013 Windows版
TRNSYSのコンポーネント開発用です。というか、TRNSYSの場合、計算エンジン本体もソースコードが添付してくるので必要に応じてパラメータを変更してビルドし直すことができます。
ということで開発にも運用にも使えます。
いままで使っていたコンパイラよりパフォーマンスも上がりそうなので、ちょっと楽しみです。


2012/10/11

TRNSYSのDebug機能を使ってみる

TRNSYSでシミュレーションしていて、計算結果が本当に合っているんだろうかと思える時があります。計算結果が想像していたのとかなり違っている時とか、そういう事ないですか?
そういう場合、コンポーネントの出力をファイルに書きだして値を検討すると、結果的には思い違いだったり、単位間違えて変な値を入れていたりといった、間違えてんのオレじゃん的なケースが大部分です。

しかし、そのたびにファイルに書きだすのも面倒、そういう時にはTRNSYSのDebug機能を使うと手っ取り早く値をチェックする事ができます。
TRNSYSに慣れていないと少々解りにくいネタなのでブログに書くのはありや?なしや?な気分ではあるんですが、ま、知ってて役に立つこともあるので、書いてみます。
新規にオリジナルのコンポーネントを作っている時なんか、割りと役立ちそうな機能です。

下図のようなプロジェクトでコンポーネントの出力内容を調べてみることにします。ここでは気象データのコンポーネントを選んで値を調べてみます。
まず最初はDebugの機能を有効化します。Control Cardsのダイアログを表示して、Debugの項目でTrueを選択します。
次は、値を調べたいコンポーネントを選んで、Traceをクリックします。
コンポーネントのアイコンの右上に「足跡」のマークが表示されたら準備完了です。

あとは普通にシミュレーションを実行したら、Listing fileを表示します。
ダイアログから「Lst File...」のタブをクリックして、Listing Fileを表示します。
メモ帳が起動して、Listing Fileが表示されたら、ファイルの中程を見てみると、数字が大量に書きだされている箇所があります。

数値が塊で書きだされていますが、" *TRACE*"で始まる行がコンポーネントの情報です。タイムステップごとにコンポーネントの情報がひとまとめに書きだされます。
この行に続いて、そのタイムテップのPrameters,Inputs,Outputsの値が書きだされます。値は行頭の文字で次のように区別されます。
P Prametersの値
I  Inputsの値
O Outputsの値

確認のためコンポーネントの設定と見比べてみます。

まずは、Prametersの設定と出力値
出力:
P  1.0000000000000000E+00  3.0000000000000000E+01  4.0000000000000000E+00  1.0000000000000000E+00

指数表記なので若干見難いですが、Parametersの設定と同じ値が書きだされています。

次はInputsの値。
 出力:

 I  2.0000000000000001E-01  9.0000000000000000E+01  0.0000000000000000E+00  9.0000000000000000E+01  9.0000000000000000E+01
 I  9.0000000000000000E+01  1.8000000000000000E+02  9.0000000000000000E+01  2.7000000000000000E+02

こちらもInputsで指定された値が書きだされます。
注意)この例は気象データリーダなのでInputsの値は固定ですが、他のコンポーネントから値を受け取るタイプのコンポーネントでは値がタイムステップごとに変化するので、設定と比較しても値は合わない点に注意して下さい。

最後はOutputs
出力:

 O  1.0722681999206543E+01  5.8429500579833984E+01  5.5000001192092896E-01  6.7500000000000000E+01  2.9444400024414062E+02
 O  0.0000000000000000E+00  4.0000000596046448E-01  4.6000001020729542E-03  9.2652435302734375E+02  7.9320762691168056E+01
 O  5.1277485277523738E+01  4.5304650878906250E+02  1.9795703125000000E+02  2.5508947753906250E+02  0.0000000000000000E+00
 O  7.9320762691168056E+01  0.0000000000000000E+00  1.0081582565307617E+03  6.5666436767578125E+02  3.0618920898437500E+02
 O  4.5304679870605469E+01  5.2068817138671875E+01  9.0000068664550781E+01  1.2207890853881836E+03  8.1899053955078125E+02
 O  3.5649386596679688E+02  4.5304679870605469E+01  3.9944126129150391E+01  9.0000068664550781E+01  1.4799444580078125E+02
 O  0.0000000000000000E+00  1.0268976593017578E+02  4.5304679870605469E+01  1.2793133544921875E+02  9.0000068664550781E+01
 O  1.4799444580078125E+02  0.0000000000000000E+00  1.0268976593017578E+02  4.5304679870605469E+01  1.4005589294433594E+02
 O  9.0000068664550781E+01

Outputsは気象データから読み出された値が出力されます。このためコンポーネントの設定値と比較はできません。
でも値を順番に見ていくと、それらしい値かどうかの見分けはつきます。この例だと一番最初の項目は外気温になります。書きだされた値を見ると1.0722...+01でタイムテップは16hなので、冬の夕方16:00としては妥当な値だという事がわまります。

こうやって順番に調べていくと、おかしな値なのか、そうじゃないのか調べていくことができます。




2012/10/10

TRNSYSで週間スケジュールを設定する

TRNSYSのシミュレーションで曜日ごとのスケジュールを設定したい時ってありますよね。平日と休日は生活パターン違うんだよねって時なんかです。

Type56/TRNBuildだと割合簡単に設定できます。
例えば、お父さんの生活パターンを考えてみましょう。残業がちで、週末はぐったりゴロゴロしているってパターンを作るとすると、次のようになります。

①Gainの設定からPersonsをクリックします。
②次にscaleをクリックして、
③表示されるダイアログでScheduleのクリックして、
④スケジュールのリストからnewを選択します。

ここで、スケジュールの入力ダイアログが表示されるので、
⑤スケジュール名を入力します。ここでは分かりやすく「DADDY」としています。
⑥ここでWeeklyを選ぶと、図のように曜日ごとにスケジュールを指定できる画面に変わります。
 まずはMondyのリストからnewを選んで平日のスケジュールを下図のように設定します。スケジュール名はWEEKDAYとします。
朝8:00に家を出たら帰りは午後10:00。ちょっと働きすぎですね。。。

今度はSundayのリストからnewを選んで週末のスケジュールを下図のように設定します。スケジュール名はWEEKENDのとします。
疲れているお父さんは週末はぐったり、家で24hゴロゴロ寝ています。 じゃまですね。

ここまでできたら、後は曜日ごとにWEEKDAY、WEEKENDのスケジュールを割り当てて行きます。
以上で、お父さんの1週間の出来上がりです。簡単ですね。

働き過ぎには注意して1週間を過ごしましょう。

さてそろそろ切り上げて帰りたい。。。