Translate

2015/08/11

IWEC2ってなんだ?

このまえ書いた気象データのサイト、White Box Technologiesで日本の気象データを眺めていたら年別データの他に、データの種類でIWEC2っていうのが用意されている。IWEC2の'2'ってなに?

調べてみたらこれ↓

ASHRAE International Weather Files For Energy Calculations 2.0 (IWEC2)


エネルギーシミュレーション用の標準気象データの最新版(?)っぽい。
FAQによるとファイルフォーマットは基本的にTMY3と同じで、EPW形式も提供される。TRNSYSだと、どちらの形式もデータリーダーがあるから、ばっちり使えます。

What file formats are supplied for the individual IWEC2 files?


DVDだと3,012地点入って、$299とかお手頃ですね。掲載されているIWEC2の地点のリスト(PDF)を見ると、日本国内も65カ所含まれている。機会があれば使ってみたいです。

View a list of IWEC2 station locations included on the DVD



2015/08/08

TRNSYS-USERS拾い読み(気象データ)

TRNSYS-USERSから気象データの話題をピックアップ。入手先として以下のサイトが紹介されていました。

Energy Plus Weather:
    http://apps1.eere.energy.gov/buildings/energyplus/weatherdata_about.cfm
White Box Technologies:
    http://weather.whiteboxtechnologies.com/
Weather Analytics:
    http://www.weatheranalytics.com/wa/

EnergyPlusのサイトは良く出てくるので知ってたけど、あとの2つは初耳です。日本だと拡張アメダスの独壇場なので、あまり関係ないかもですが、海外の案件など取り組む際には役立ちそうです。
と言うことでメモ代わりに書き残しておきます。


2015/08/04

作ってみようTRNSYSコンポーネント C/C++編(5) コンポーネントが呼び出されるタイミング

前回はSimulation Studioで作成したコンポーネントの動作を確認しました。

あとは計算式に合わせてソースコードを書き換えればOKです。基本的にはParameters,Inputsの値を取得して計算を実行、結果をOutputsへ引き渡してあげます。

さて、ここでもう少しコンポーネントの動きについて掘り下げてみましょう。

if文がいっぱい

ソースコードを眺めてみるとParameters,Inputs,そしてOutputsの処理の他にも、なにやらごちゃごちゃとif分で処理が記述されています。例えば131行目からを見ると、次のような処理が記述されています。

NewImage

info[6]の値が’-2’ならinfo[11]を16にセットして、そのまま処理終了。つまり本来の計算まで進まずに終了しています。ちなみにここではコンポーネントの対応するバージョンが16である事を宣言しています。(TRNSYS17使っているのに、なんで16なのかは後述)

他にもif文が何カ所かありますが、同じように何かを処理して、そのまま終了しています。これら本来の計算とは関係ない処理に見えますが、コンポーネントの処理を行う上で重要な処理を行っています。

コンポーネントは計算以外にも呼び出される

Simulation Studioでコンポーネントの配置、接続を行っていると、その順番に沿ってコンポーネントが呼び出されて計算が行われているように見えます。実際、動きとしては基本的にはその通りなのですが、計算の処理以外にも付随した処理が必要になる事があります。

例えば、コンポーネントがデータファイルを参照するようなケースを考えてみましょう。この場合、データファイルを開いて値を読み込む処理が必要になります。こういった処理は計算ごとに行う必要はないので、一般的には計算の開始前にまとめて処理するのが効率的です。

TRNSYSではタイムステップごとの計算の他、計算全体の開始前、終了後などのタイミングでコンポーネントを呼び出します。逆にコンポーネント側では、どのタイミングで呼び出されているのか意識して処理を進める必要があります。

具体的には、先ほどのif文のように、コンポーネント側ではinfo[]やタイムステップの値を使って、自身がどの段階で呼び出されているのか判定して処理を行います。

コンポーネント対応バージョンの処理などは、TRNSYS側からは最初に一度だけ呼び出されるので、そのタイミングでバージョンを宣言して終了するようにします。データファイルを読み込む処理などは、初期値の値を設定している以下のif文で処理すると良いでしょう。

NewImage

このあたりを含め、コンポーネントの仕組みについて詳しくは、ドキュメントの以下の箇所に、

7.3. How to Create New Component

info[]については以下に詳しく記載されています。

7.4.3. The INFO array – Typical calling sequence

この記述ですが、FORTRANを前提に記載されているため、C/C++では配列の添え字が一つずれます。(配列はC/C++では0、FORTRANでは1から始まるため)info[6]の説明はドキュメントではinfo(7)を見て下さい。

さて、ここでやっているinfo[]の値をif文で処理やり方ですが、これ実はTRNSYS16形式と呼ばれる方法です。前述のバージョンの宣言で16を指定しているのはこのあたりの事情によります。最新版のTRNSYS17では、専用の関数で判定する方式に変更され、分かりやすくなっています。

TRNSYS17形式(FORTRAN)の例。

!Set the Version Number for This Type

      If(getIsVersionSigningTime()) Then

             Call SetTypeVersion(17)

            Return

      EndIf

info[]を判定するやり方に比べると、何をやっているのかだいぶ理解しやすくなります。

C/C++でも同じような書き方ができるんですが、そのあたりの話しについては、また次回ということで。つづく。

----------------------------------------------------

以下、このシリーズの目次

作ってみようTRNSYSコンポーネント C/C++編
(1) 基本情報
(2) ソースコードの生成
(3) ソースコードを読んでみよう
(4) Simulation Studioで実行してみよう
(5) コンポーネントが呼び出されるタイミング
(6) ヘッダーファイル・基本編
(7) ヘッダーファイル・実践編