TRNSYSで日単位で平均、最低、最高気温を計算する

2018/11/21 追記 日平均、月平均のサンプルを作成、公開しました。

https://github.com/TRNSYSJP/TRNSYS.JP/tree/master/TRNSYS18/MyProjects/Type155_DailyAndMonthlyAve

社内的なリクエストでタイトルのような処理を考えてみました。(何のために要るのかはよく分かっていないんだが。。。)

さてと、計算結果を出力すると、通常は図のようにタイムステップごとに結果が出力されます。(タイムステップ1hの例)

タイムステップごとに結果が出力される
タイムステップごとに結果が出力される

こういったデータから日平均を計算は、通常Excelなどを使って処理することになります。でも、何度も繰り返して計算する場合、Excelで計算を繰り返すのも大変です。

TRNSYSには標準で積算や平均値を計算する便利なコンポーネント、Type55が用意されています。これを使って日平均、最低、最高気温を計算してみます。

用意する物

  • Type99-AMeDAS
  • Type55 Periodic Integrator
  • Type25a

Type99-AMeDAS

気温のデータが必要なので、気象データリーダーを用意します。今回はType99-AMeDASを使いましたが、気温のデータが出力できるコンポーネントであれば何でもOKです。

Type55 Periodic Integrator

期間を指定可能な積分コンポーネント。任意の時間間隔で平均や最高、最低値を出力してくれる便利なコンポーネントです。

Type25a

ファイル出力用。

プロジェクトの作成例

Type55を使ったプロジェクト
Type55を使ったプロジェクト

必要最小限の構成のでシンプルなプロジェクトになります。一つ一つコンポーネントの設定を見ていきましょう。

Type99-AMeDAS

デフォルトのままで変更なし。

Type55 Periodic Integrator

日単位(24h間隔)で処理するため何カ所か設定を変更します。

Type55の設定
Type55の設定
  1. 気温を扱うので積分ではなく合計値処理を指定(-1)
  2. 気象データの開始(1:00)に合せて相対開始時刻を0hへ変更
  3. 集計する間隔を24hへ設定
  4. 平均、最高、最低値をリセットする間隔を24hへ設定

Type25

Excelで扱いやすくするため、ファイルの区切り文字をカンマ”,”へ変更。

デリミタをカンマへ変更
デリミタをカンマへ変更

ファイルの拡張子もExcelで扱いやすいように”.csv”へ変更しておきます。

ファイル拡張子を"CSV"へ変更
ファイル拡張子を”CSV”へ変更

コンポーネントの接続

Type99-AMeDAS → Type25c

気温の値のみ接続
気温の値のみ接続

Type99-AMeDAS → Type55 Periodic Integrator

こちらも気温の値のみ接続する
こちらも気温の値のみ接続する

Type55 Periodic Integrator → Type25c

動作確認のためすべての出力を接続する
動作確認のためすべての出力を接続する

動作確認のためすべての出力を接続する。

出力結果

計算を実行して書き出した結果が下の図です。一日分のデータを抜きして、重要な項目を塗りつぶしています。

一日分のデータを抜粋
一日分のデータを抜粋
  1. 集計範囲(24h)
  2. 合計値
  3. 平均値
  4. 最低値と発生時刻
  5. 最高値と発生時刻24時間の範囲で平均、最低、最高の値が出力されているのが確認できます。

Type25で一工夫

さて、欲しい値が書き出されているのは確認できました。でも、これだと毎時間ごとの値も出力されているので、少々見にくい状態です。日単位の値が欲しいので、次はType25の機能を使って必要な値のみを抜き出す処理を追加します。変更箇所は一箇所だけ、Printing intervalの設定をデフォルトの「STEP」から「24」へ変更します。

Printing intervalを「24」へ変更
Printing intervalを「24」へ変更

再度実行してCSVファイルを開くと、下の図のように24h間隔で値が書き出されるようになりました。必要なデータだけまとまっています。タイムステップごとの出力に比べて大分すっきりしました。こういった一工夫で計算の作業がぐっと楽になります。

24h間隔で値が書き出される
24h間隔で値が書き出される

動作環境

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

TRNSYSで実測データでシミュレーションする

実測データや気象庁などの観測データから計算用の気象データを作る際の注意点をまとめてみます。

TRNSYSには標準的な気象データを読み込んで出力する各種気象データリーダーが添付されています。これらを使って市販やオープンソースの気象データを扱うことができます。

実測データを使いたいケースではUser Formatに対応したコンポーネント、Type99も用意されています。このコンポーネントを使って実測データなど標準気象データ以外を扱うことができます。

User Format Type99
User Format Type99

Type99のデータフォーマット

Type99には専用フォーマットが用意されているので、それに合せて実測データを加工します。データフォーマットの構造です。<userdefined>につづく20行ほどはヘッダーで、実測値点の緯度経度やタイムゾーン、含まれる実測値の種類を定義しています。それにつづいて実際のデータが<data>行以降に続きます。

緯度経度とタイムゾーン

実測値点の緯度(latitude)経度(longitude)とタイムゾーンを指定します。緯度は北半球(+)、南半球(-)、経度はグリニッジを基準に東(+)、西(-)で指定します。
タイムゾーンはグリニッジ標準時との時差を指定します。日本は+9です。

以下は東京の例です。

<longitude> -139.76 
<latitude>  35.69 
<gmt>       9 

インターバルと開始時刻

実測データのインターバル(interval)は、実測の間隔に合わせてHourで指定します。例えば15分間隔であれば0.25を指定します。Type99では標準は1hを前提にしているため短い間隔を指定するとエラーの原因になることがあります。とくに理由がない場合は1h間隔のデータがお勧めです。

開始時刻(firsttime)は1/1 1:00から始まる通し時間で指定します。例えば、2/1 1:00から始まる実測データであれば745を指定します。

インターバル1h,開始時刻2/1 1:00の例

<interval>  1
<firsttime> 745

データの指定

<var>で始まる行ではデータの種類とカラム位置を指定します。

リストはサンプルデータ(”C:TRNSYS18ExamplesData FilesType99-UserFormat.99″)の抜粋です。この例では水平面直達日射、水平面天空日射、外気温、相対湿度、風向、風速のデータを定義しています。

<var> IBEAM_H <col> 5 <interp> 0 <add> 0 <mult> 1 <samp> 1
<var> IBEAM_N <col> 0 <interp> 0 <add> 0 <mult> 1 <samp> 0
<var> IDIFF_H <col> 6 <interp> 0 <add> 0 <mult> 1 <samp> -1
<var> IGLOB_H <col> 0 <interp> 0 <add> 0 <mult> 1 <samp> 0
<var> TAMB    <col> 3 <interp> 2 <add> 0 <mult> 1 <samp> 0
<var> RHUM    <col> 4 <interp> 1 <add> 0 <mult> 100<samp> 0
<var> WSPEED  <col> 2 <interp> 1 <add> 0 <mult> 1 <samp> 0
<var> WDIR    <col> 1 <interp> 1 <add> 0 <mult> 1 <samp> 0

データの指定は値のキーワードと、<data>行以降のカラム番号の組み合わせで指定します。

水平面直達日射の値はキーワードは IBEAM_H、カラム位置は<col>5 です。これでデータ部分の5カラム目が水平面直達日射として扱われます。

下のリストは<data>行の抜き出したものです。赤い部分が5カラム目、水平面直達日射の値です。(0が並んでいるのは開始時刻が夜間なので日射がないため)

<data>
  0   0.0   -2.1   .93        0   0
 80   0.0   -2.5   .95        0   0
340    .5   -2.9   .96        0   0
  0   0.0   -3.4   .96        0   0
 30    .5   -4.1   .95        0   0
 50   0.0   -4.9   .94        0   0
 40   1.0   -5.5   .93        0   0
 70   1.5   -5.6   .91        0   0
120    .5   -5.4   .91       22  28

データのキーワードは以下の通りです。

  • 水平面直達日射(IBEAM_H)
  • 法線面直達日射(IBEAM_N)
  • 水平面天空日射(IDIFF_H)
  • 水平面全天日射(IGLOB_H)
  • 外気温(TAMB)
  • 相対湿度(RHUM)
  • 風速(WSPEED)
  • 風向(WDIR)

日射量についてはすべてを指定する必要はありませんが、直散分離の関係で、最低限必要な項目が決まっています。以下のいずれかの組み合わせで指定が必要です。

  • 水平面直達日射(Ib)、水平面天空日射(Id)
  • 水平面全天日射(I)、水平面天空日射(Id)
  • 水平面全天日射(I)、法線面直達日射(Ibn)
  • 水平面全天日射(I)、外気温(Tamb)、相対湿度(RH)

<interp>は補完処理の指定です。1h間隔のデータを使って、タイムステップ0.25hで計算するようなケースで値の補完処理が行われます。0:補完なし、1:線形補完、2:は5点スプライン補完です。

スプライン補完では、実際の値よりも大きな値や小さな値に補完されることがあります。このため相対湿度へ指定すると、計算上100%を超えるケースがあります。湿度については<interp>2の指定は避けてください。

<add>, <mult>値への係数。必要に応じて指定します。(あまり使わないです)

<samp>データのサンプリング範囲の補正値。日射データなど計測した範囲の指定です。具体的には1h間隔で日射量を計測した場合、その値がある時刻の直前のタイムステップ(-1)、前後1/2のタイムステップ(0)、次のタイムステップ(1)分なのかを指定します。ケースバイケースですが実測データでは直前の1ステップ分になっていることが多いようです。

ちなみにEA気象データについては前後1/2の範囲(0)になっていますので、もしEA気象データを利用される場合は注意してください。気温、湿度などは通常は0で指定してください。

その他、詳しくはマニュアルの「4.12.2. Type 99: User-Defined File Format Data Reader / Processor」参照

データ作成の注意点

欠測データの補正

割とありがちですが、欠測でデータがない、もしくはデフォルト値が含まれていることがあります。Type65でグラフを描くと、明らかに変な値が見つかることがあります。こういった場合はなんらかの方法で補正を行ってください。

データ数は24hの倍数

<data>以降の行は24hの倍数必要です。これは仕様なので、実測データが半日分で終わっているような場合は最終日のデータは捨てて24hの倍数になるように調整してください。

<interval>は割り切れる値がおすすめ

計算上はHourで扱うため、割り切れない値(例、5分間隔=0.08333333)ではエラーの原因になることがあります。(おそらく計算上の誤差が積み重なってエラーになる)

3分(0.05h)、6分(0.1h)などHourに換算して割り切れる値がお勧めです。
上述したように一般に気象データは1hour間隔のデータが多いため、特に理由がなければ1h間隔がお勧めです。

動作環境

以下の環境で動作を確認しています。

Windows10 Pro(64bit)
TRNSYS18.00.0017(64bit)

気象データでRange check error

TRNSYSでタイムステップを1h未満(例えば0.25h)にして1年以上の期間を計算しようとすると、2年目でRange check errorになってしまいます。

調べてみるとType99(気象データリーダー)で発生しています。

さっそくType99をデバッグしてみると2年目の計算に入る際に宣言した配列を超えて値を参照しようとしています(配列100個なのに101番目を参照している感じ。ソースコードがあると、こういうとき便利でいい)

どうも補間処理が絡んで発生している印象なんだけど、複雑すぎていまいちよく分からない。

悩むこと数時間。ソースコードを解析して修正を試みるも、うまく行かない。(思ったのと違う処理をしているっぽい)迂闊に書き換えると、他の影響も気になる。締め切りは迫る。。。ああ、どうしよう。

で、最終的には気象データを2年分用意する事で解決しました。

これどういう理屈かというと、Type99は1年分のデータを読み込んで順に値を出力しますが、年を超える計算ではデータの先頭へ戻って値を出力を継続します。エラーは先頭へ戻す処理で発生するので、戻らないようにデータを多めに用意してあげれば回避することができます。(早く気づけよ自分。。。)

実は気象データって24hの倍数のデータが用意されていれば何日分でも処理してくれます。通常は1年分のデータが用意されているわけですが、その部分を計算期間に合わせて2年分用意してあげれば先頭へ戻らなくなります。

気象データのファイル構造
気象データのファイル構造

ということで、データをコピーして、単純に(先頭へ戻らないよう)2年目のデータを用意してあげます。

2年分の気象データを用意する
2年分の気象データを用意する

こうすると、エラーの原因が回避できるので、2年分の計算もできるようになります。

気象データリーダーを入れ替える

TRNSYS3D(SketchUp)で建物を作成して、Simulation Studioへインポートしたプロジェクトなど、そのままだとデフォルトではTMYやTM2,TM3など海外でよく使われている気象データリーダーになっています。これを日本建築学会の拡張アメダス気象データに差し替える手順です。

以下の2段階で作業を行います。

1)気象データリーダーの接続状態の確認
2)拡張アメダス気象データリーダーの配置と接続

※図はすべてクリックで拡大表示されます。見にくい場合には拡大して御覧ください。

気象データリーダーの接続を確認する

TRNSYS3Dからインポートしたデータは、初期状態では以下のようになっています。

はじめに気象データリーダーの接続先を確認します。気象データリーダーのアイコンを選択して右クリックから「Edit connections with…」を選んで接続しているコンポーネントを確認します。

Radiation,Building,Temperatureの3つに接続していることが解ります。拡張アメダス気象データリーダーへ入れ替えた後、この3つのコンポーネントと同じように接続します。

Radiation

なんかすごいいっぱい接続されています。詳細は省きますが、方位別日射量をプロットするのにやたらと値をつないでいます。

ここで計算に必要なのはSolar azimuth angleとTotal tilted surface radiation for surface-1の値だけです。最低限、この値だけ繋げばOKです。

Building

これは接続が少なめですが拡張アメダスにはない項目もあります。これについては対応方法を後述します。

Temperature

プロット用に1つだけつないでますね。

接続状態が確認できたら、既存の気象データリーダーは不要なので削除しておきます。

拡張アメダス気象データリーダーの配置と接続

拡張アメダス気象データリーダー(Type99-AMeDAS)を配置します。

拡張アメダスのデータファイルや地点の設定をしたら、あとは順番にRadiation、Building、Temperatureへつないでいきます。

Type99-AMeDAS->Radiation

これは、以下の2箇所がつながっていればOKです。

つながっていないInput1とInput4以降は、そのままだと、あとの処理でエラーの原因になります。使用している設定だけを残して、削除しておきます。

Type99-AMeDAS->Building

前の状態に合わせてつないで行きますが、TSKY,GRDREFの2箇所はつなぐ相手がありません。

2013/9/7 追記

下の図では「Solar azimuth angle」と「AZEN」をつないじゃってますが、これは「Solar zenith angle」と「AZEN」の間違いです。失礼しました。

この2つについては拡張アメダス気象データからは直接取れないので、他のコンポーネント、Type69cで計算を行います。

TSKY

Type69->Building

Type69を使って計算します。画面上に配置してBuidingへつないでいきます。

 ここはFictive sky temperatureからTSKYへ接続すればOK

ここでType69bはTSKYの計算に外気温や露点温度が必要になります。ということで、Type69bのInput側も接続します。

Type99-AMeDAS->Type69b

拡張アメダス気象データリーダーと接続して、必要なデータをつないできます。

さて、露点温度(Dew point temp)だけ残ってしまいました。これはこれでまた別のコンポーネント、Type33cを使って計算します。

Type33c->Type69b

Type33cを使って露点温度を計算します。画面上にType33cを配置して、Type69bを接続して、値をつないでいきます。

露点温度をつないだらこれでOK

さて、今度はType33c自身が外気温や湿度の値を必要としますので、Input側もつないでいきます。必要な値は拡張アメダスから取得できるのでType99-AMeDASと接続します。

逆順につないでいったので、少々解りにくいかもしれません。

気象データからの接続を順に見ると、以下の様なデータの流れになります。

Type99-AMeDAS——————–>Type69b————–>Type56
        |                                            |
          +————Type33c————+

GRDREF

Building

あとはGRDREFですが、これは計算できないので、Building側で初期値として適当な値を入れておきます。ここでは0.2としていますが、地表面の状態に応じて適当な値を設定してください。

Type99-AMeDAS->Temperature

ここは外気温をプロットしているだけなので、Ambient temperatureをつなげばOK。

最終的に以下のような接続になったら完成です。うまくつながっていれば、ちゃんと流れるはずです。駄目だったら、頑張って見直し&修正です。

補足:コンポーネントオーダーを変更する

コンポーネントを入れ変えると、計算の順番が変わります。気象データリーダーのように通常は最初に処理されるコンポーネントを後から追加すると、うまく計算が流れないケースがあります。

このような場合にはControl Cardsでオーダーを変更することで対処することできます。

TRNSYSで実測データでシミュレーション

シミュレーションで欠かせない気象データ。TRNSYSではWather Data Readerというコンポーネントを使って読み込みます。

このWeather Data Reader(以下”リーダー”と表記)、標準的なフォーマットは、それぞれ専用のリーダーが用意されています。

使用するデータフォーマットに合わせて、コンポーネントを配置して設定すれば、大抵の場合は計算できます。

拡張アメダスを含め、標準フォーマット対応のリーダーが用意されています。これで基本的に世界中どこのデータでも大丈夫。

で、基本的じゃない場合ですが、標準的なフォーマットじゃない場合は、User Formatのコンポーネント(Type99)を使用します。

これ、どういう時に使うかというと、特殊な形式なデータしかない場合や、実測で独自に取得したデータで計算したい時とかですね。

実測しないまでも気象庁が公開しているデータを使って(コピペしてデータを作る)で計算したい場合などに使用できます。

専用のデータファイルが定義されているので、この形式に合わせてデータファイルを用意すればオッケーです。

以下、ファイル形式についてのマニュアルの抜粋です。テキスト形式のファイルなので、見ればなんのデータか想像ついてしまうようなシンプルな形式です。

ヘッダーでは、緯度、経度の指定の他、データのカラム位置や係数の指定などもできます。ということでデータの並び順や、単位系の調整も、この中だけで設定できます。

これで実測データも大丈夫だ。

他にType9(汎用データリーダー),Type16(日射データの計算モジュール)を使って扱う方法もあります。こちらは、Type99に比べると、ちょっと面倒です。