Translate

2013/11/18

TRNSYSの単位換算がヘンな値を返す???

計算していると、単位を換算したいケースってありますよね。たとえばkJをkWhに換算したいとか。そういう場合、TRNSYSには単位換算用にType57 Unit Convertorっていう便利なコンポーネントが用意されています。値を換算して返してくれるシンプルなコンポーネントです。

これが、あるプロジェクトで使ったら、なぜか変な値を返します。結果だけ見ると、換算係数がタイムステップごとに変化しているように見えます。コンポーネント間を流れるデータをチェックしていくと、どうも上流がType55だと変な値に換算されているようです。

こういうつなぎ方をすると、換算が変になる。
ここで使っているType55って、値を積算してくれる便利なコンポーネントなんですが、なぜ?
いろいろ検討して行き詰ってしまったので、開発元へ問い合わせてみました。結論から言うと、換算してから積算すればOK

こういうつなぎ方。換算してから積算する。
結果的に目的は果たせるのですが、なんで逆順だとだめなんだ?

これにはTRNSYSがコンポーネントを呼び出す順番が関係しています。通常のコンポーネントはTRNSYSからタイムステップごとに値が収束するまで繰り返し呼び出されます。
ところが、ある種のコンポーネントは他のコンポーネントの収束後に1度だけ呼び出されるものがあります。これは出力系のコンポーネントに多くて、たとえばType25のようにファイルにデータを書き出すコンポーネントなどがそれにあたります。結果の書き出し専用なので、収束まえのデータとか書き出されたら困るので、必ず収束後に呼び出されます。

これと同じで、Type55も収束後に一度だけ積算のため実行されるように作られています。

Type57は、ごく普通のコンポーネントなので、収束まで繰り返し呼び出され、値を出力します。この呼び出しタイミングの違いが原因で、次のような状態になります。

Type55:収束後の値を積算処理した値を出力
Type57:収束時の換算値を出力

この違いで、結果的にType57はひとつ前のタイムステップの換算値を出力してしまうようです。(あーややっこしい。)

原因が解ってしまえば、なんてことない話ですが、コンポーネントの見た目としては、どちらでも同じ結果になりそうな気になるので、ちょっと注意が必要ですね。

コンポーネントを並べるときは、出力系や積算系などは必ず最後につなぐと憶えておくといいかもしれません。


2013/11/07

TRNSYSのコンポーネントに詳細情報を追加する

TRNSYSというか、ほとんどFORTRANのネタです。というかIntel Fortranネタですね。
コンポーネントを作ってて、ふとファイルのプロパティを見てみたら。。。
なんかどうも味気ない。製品名とか著作権とか、何も表示がないので、ちょっと寂しい。

こういう場合C++だと、リソースを追加すればOKなので、FORTRANでも同じだろうと追加してみたら、ちゃんと詳細情報が追加できました。

まずはリソースの追加

ソリューションエクスプローラーで、Resource Filesを選んで、リソースファイルを追加する。

次に、リソースファイルにVersionリソースを追加する。
Versionリソースを開いて、試しにProductNameを変更する。

そして再ビルド 

ファイルのプロパティを確認すると。
設定した製品名がちゃんと反映されています。
ファイルの説明とか、著作権なんかも設定できるので、このコンポーネントのDLLってなんだっけ?って時や、バージョン管理したいときに役立ちそうです。



2013/10/25

Inputの値を"ラベル"として扱う方法

コンポーネントのInputの項目って、通常は値、もしくはEquationなので設定された変数とか定数を入力することができます。

ところが、例外があって、この部分を単なる文字列として扱う事もできます。例えば、Type65 Online Plotterでは、Inputに入力された値を単なる文字列として扱って、グラフの凡例で使っています。

なーんか不思議ですよね?Inputの項目を変数として扱う場合と、単に文字列で扱う場合って、どこで区別しているんでしょう?
ちょっと必要に迫られて調べてみました。

新しくコンポーネントを作ってみると。。。

試しに普通にProformaとコンポーネントを作ると、この部分は値、もしくは変数として認識されます。Type65と同じようにInputへ適当な文字列を入れて実行してみるとエラーになります。

例)実際にInputの項目に"Ctrl01"って文字列を入れてエラー発生

*** Fatal Error at time   :         0.000000
    Generated by Unit     : Not applicable or not available
    Generated by Type     : Not applicable or not available
    TRNSYS Message     98 : Unrecognized variable name or bad data card.
TRNSYS was looking for a numerical value or the name of a variable
defined in an equation/constant and instead it found the data in
"reported information" below.
    Reported information  : Ctrl01 0 0 0 0 0 0 0 0 0

メッセージからすると、対応する変数が無いってコトでエラーになっているようですが、はて?
でもType65は、なんでOKなんだろ?

ちなみに、Inputの項目を文字列として取得するためのAPIはちゃんと用意されています。

例)Inputの値の説明を取得する
label = getVariableDescription(CurrentUnit, 1)

Type65のソースコードと比較してみると、同じAPIを使って文字列のデータを取得しているのにエラーは発生しません。でも自分で書いたコンポーネントではエラーになります。
う~ん、きっとなにか切り替えの仕組みがあるはずです。しかし、Type65のソースコードやProformaを眺めても、それらしい記述が見つかりません。ナゾです。

隠し機能なのか?


1日悩んでお手上げだったので開発に問い合わせたら、あっさり答えが返ってきました。

「ExeフォルダのDescrips.dat にType番号書いとけばOK」(意訳)

なんと、専用のファイルがあるようです。という事で実際にType番号を書き加えてみました。

例)Descrips.dat
This file should contain the TYPE numbers 
208  !Tess Library Model: Type208.for
535  !Tess Library Model: Type535.for
221  !MyComponent: Type221  ←この行を追加した

で、試したらあっさり動いた。

この仕組み、ドキュメントには記載が見当たらない(見付けらていないだけか?)
滅多に使う機能じゃないので、知っている人だけが知っていればいいってことなのかな?
ま、ともかく、目的は達せそうです。


2013/10/18

R言語を試す(インストール)

なんだか、最近ちょいちょいR言語が話題になります。しかも統計データの処理だとか、気象データを取ってきて処理するとか便利&面白そうな話題です。

これはちょっと試してみても損はないのではと、インストールしてみました。

インストーラーの入手

RjpWiki」という便利なサイトがあるので、ここからインストーラーをダウンロードできます。(正確には最新版のダウンロードサイトへのリンクがある)

「Rのインストール」で、使用環境に合わせてインストーラーをダウンロードすることができます。
http://www.okada.jp.org/RWiki/?R%20%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB

インストール

Windows版インストーラーを選んでダウンロードしたら、起動。

ごく一般的なインストーラーなので、指示に従ってインストールすればOK。

Rを起動

ということで、スタートメニューからRを起動してみる。
あっさり起動。しかし、どうやって使うんだ、これ?久しぶりに見るコマンドラインな画面は面食らいます。
次はR言語そのものの勉強だな。。。


2013/10/17

なぞのエラー

先日の話ですが、締め切り間際の作業中、いろいろ設定を変更して、さあTRNSYSで計算しようと思ったらエラーが発生。
なんか、やっちまったようです。
で、リストファイル(*.lst)でエラーをチェックしようと思ったら。。。。
アイコンがグレーになってて、リストファイルが参照できないんですけど。。。
なんか、もー、時間がない時に限って意味不明なエラーが起きるよ、とほほほ。
なにを変更したのが原因だ?

沈思黙考。。。

しばらくして、テスト用にファイル名を「テストモデル.tpf」って名前に変えていたのに気がついた。
そう、TRNSYSって日本語というか、英語以外だと通じないときがあります。
ファイル名を英語にしたら、無事に計算開始。
ヘンな汗が出ました。




2013/10/11

シンポジウムへ出かける

今週はなにやらセミナーやシンポジウムが集中していて、外出&座りっぱなしの一週間でした。健康には良くないですね。おかげで仕事がたまり気味。でもセミナーに出かけると、いろいろ情報収集ができて楽しいです。

出かけた学会のシンポジウム「実務者のための自然換気設計」で紹介されていたハンドブックが面白そうだったので、さっそく購入してみました。

自然換気といえば住宅というイメージがあったんですが、オフィスビルでも自然エネルギーの活用となると、換気をどうするかといった点がテーマになるようです。
まだ読み始めたところですが、換気の他、温熱環境やシミュレーション、実施例など多岐に渡っていて、なかなか面白いです。
TRNSYS,TRNFlowが紹介されているページもあって、思いがけず嬉しかったです。


2013/10/08

Direct Access toolbarのアイコンを大きくする

打ち合わせ用にノートPCを持ち歩いているのですが、これが解像度が高すぎで画面が見にくいケースがあります。
Simulation StudioのDirect Access Toolbar(画面右側)なんか、表示が細かくなりすぎて、かなり見にくい。

こういう場合は、[File]-[Settings]で表示されるダイアログの「Project」タブで「Icon size of Direct Access bar」でサイズを大きな値に設定します。

OKボタンをクリックしてダイアログを閉じて、Simulation Studioを再起動すると。。。


Direct Access Toolbarの表示が大きくなります。多少不恰好になるのが難点ですが、これでノートPCでも見やすくなります。

2013/09/27

くるっと回るアイコン

TRNSYSのSimulation Studioにはいろいろと面白い機能が用意されています。

Rotate

まずは、アイコンを選んで右クリック。ここで表示されるメニューから、[Graphic]-[Roate clockwise]を選択します。

と、こうなる。アイコンが90度回転しました。
何に使うんだ、これ?って気もしますが、アイコンの向きに意味があるような場合に便利そうな機能です。

Focus on

次はアイコンを選んで右クリック。ここで表示されるメニューから[Graphic]-[Focus on]を選択します。

と、今度は選んでいるアイコンと接続されているコンポーネント以外が非表示になります。
コンポーネントがたくさん配置されているプロジェクトでは、特定のコンポーネントの接続関係を確認するのに便利な機能です。



2013/09/26

コンポーネントが認識されない。。。(2)

さて、前回、新しく作ったコンポーネントがTRNSYSから認識されない状況に陥りました。

原因は参照しているMSVCR110.DLLが見つけられないこと。
このファイルが何かというと、一般には「Cランタイムライブラリ」と言われるファイルです。コンポーネントはFORTRANで書いているので、なんでCのランタイム参照してるんだという気もしますが、まあ、必要なんで参照してます。

単純な話、このMSVCR110.DLLをTRNSYSから認識できるパスに放り込んでやればエラーはでなくなります。

例)VS2012では以下のフォルダに格納されています。
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\redist\x86\Microsoft.VC110.CRT

このフォルダから、DLLをC:\TRNSYS17\Exeフォルダにコピーします。これであっさり解決です。

落とし穴

と、ここで落とし穴が待ち構えています。この「Cランタイムライブラリ」、TRNSYS自身も参照しています。しかも厄介なことに、少し前のバージョンを参照していてファイル名も違っています。(具体的にはMSVCRT.DLLという名前のファイル)

図にすると、こんな感じ。
ここで何が問題かというと、TRNSYS本体とコンポーネントの間で参照先が違うので、実行時に齟齬が発生するケースがあります。(大部分は問題ないのですが、一部の処理で齟齬が出ます)

なんちゅーか、初版と改訂版のテキスト混在みたいな感じですかね。同じ授業なのに人によって使っているテキスト違っているから、受講者の理解している内容が違っているみたいな。ちょっと違うか。

具体的な例としては、データファイルを参照しているコンポーネントだとTRNSYS本体が割り当てたLUがコンポーネント側から見えないといった問題となって現れます。TRNSYSのデータとしては問題ないのに、エラーで動かない状況になります。

こういう時は基本的に新しい方に合わせてしまうのがよろしい。という事でTRNSYS(TRNDLL.DLL)も同じライブラリを参照するようにビルドし直してやればOK.

図にすると、こんどは、こんな感じ。
同じライブラリを参照するようになるので、齟齬もなく安心して使えます。
実作業としてはTRNDLL.DLLを開発中のコンポーネントと同じコンパイラで再ビルドすればOKです。









2013/09/24

コンポーネントが認識されない。。。(1)

新しく作ったTRNSYSのコンポーネントがなぜか認識されない。Simulation Studioでメッセージを確認すると、どうもDLLとして認識されていないっぽい。

以下、リストファイル(*.lst)に書き出されているエラーメッセージ

*** Fatal Error at time   :         0.000000
    Generated by Unit     : Not applicable or not available
    Generated by Type     :   201
    TRNSYS Message    105 : A TYPE was called in the TRNSYS input file but was either not linked into trndll.dll or was not found in an external dll. A dummy subroutine was called in its place. Please link the TYPE or remove it from the input file
    Reported information  :  Type201 could not be located in either the trndll.dll or in an external dll. Please relink theTRNDll.dll including this Type or make sure that an external DLL in the \UserLib\DebugDLLs and \UserLib\ReleaseDLLs folders contain the Type.


はて?特殊なことはしてないはずなんだけどな?どんな理由で認識されないんだろ?
こういう時は、TRNSYSをコマンドラインから実行してみると、より詳しい原因が判ることがあります。(Simulation Studioから実行すると、Simulation Studioからのエラーメッセージが記録されてしまうので、TRNSYS本体のエラーメッセージを確認するため直接実行してみる)

で、コマンドラインから、こんな感じでTRNSYSを実行してみると。。。

C:\>C:\Trnsys17\Exe\TRNExe.exe sample.dck


DLL(MSVCR110.dll)を参照しているのに見つけられていない。

さて、エラーの原因は判ったものの、さて次はどうする???

つづく。

2013/09/18

SketchUp2013がリリースされてます。

TRNSYSで建物のモデルを作るのに便利なSketchUp。最新版SketchUp2013がリリースされています。(2013/9/17より)
SketchUp Make2013(英語版)の画面

機能的な話はともかく、無償版は名称がSketchUp Make2013に名前が変わって、商用利用禁止になっています。
  • SketchUp Make2013 無償版、ただし商用利用は禁止
  • SketchUp Pro 2013  有償(92,500円税別)
詳しくはこちら→新バージョン『SketchUp Pro2013J』リリースに関するお知らせ

このバージョンから仕事で使うならSktchUp Pro 2013を購入する必要がありそうです。価格は、この手のソフトとしてはそれほど高価ではないですが、安くはないですね。

TRNSYSのモデルを作るぐらいの用途だと、基本的な機能で出来てしまうので、ちょっと割高感がありますが、これは販売形態が変わったので仕方ないですね。予算取らなきゃ。

アカデミックの場合は、今まで通りMake2013は無償のようです。

しかし、どうでもいい話ですが、デフォルトとして表示されていた点景(Susan)が、変なおっさん(Derrickって名前らしい)になったのが、個人的にショックであります。

2013/09/18 以下、追記

TRNSYS3Dインストールの注意点

インストール先のデフォルトのパスがGoogleのフォルダになっています。2013ではフォルダが変わります。インストールする際には、新しいパスを選択してください。
図の赤線のようにパスを指定しないとプラグインとして認識されないので、注意してください。


2013/09/17

TRNSYSとJavaを連成(3)

前回に続き、TRNSYS-Java Coupler(Type299)を試しています。

設定が済んで、実行したらエラーでうまく流れませんでしたが、その後いろいろ調べて原因が特定できました。

原因はJNIのライブラリ

このコンポーネントでは、JavaのJNI(Java Native Interface)を経由して外部にあるJavaのクラスを呼び出します。JNIを利用するためにはJVM.DLLというライブラリが必要なります。要は、このライブラリのパスが環境変数に無いとエラーになってしまいます。

JVM.DLLにはServer、Clientの2種類があるようですが、通常はClientのDLLのフォルダへパスを通せばOK
具体的には、環境変数Pathに以下のパスを追加すればOKです。

例)
C:\Program Files (x86)\Java\jdk1.7.0_40\jre\bin\client;
※インストールしているJDKに合わせてパスを設定します。

実行してみる

環境変数を設定して、再度実行してみると。。。


おお、今度はちゃんと動いた。
さて、動いたものの、実用的かという、ちょっとなー、な感じです。


  • 良いところ

すべて無償のツールで賄える。コンポーネントは公開されたものですし、実行時に必要な環境はJDKだけ。
特にライセンスも必要ないので気軽に始められます。

  • 悪いところ

Javaを含め、いろいろと事前準備が必要。JDKのインストールから始まって、環境変数の設定、それにJavaのソースコードの作成とビルド。
TRNSYSの標準コンポーネントを使う場合に比べて、準備に手間がかかります。
加えて、クラスを配置するパスが固定なのもちょっと厄介。プロジェクトごとに分けて用意しようと思ってもできません。

ちょっと試すぐらいならともかく、今の仕様だと準備が手間な分、普段から使うのは難しそうですね。とはいえ、まだリリースされたばかりなので、設定項目など改良されてくれば十分使えるかな?どうだろうか?






2013/09/13

TRNSYSとJavaを連成(2)

前回の続きです。

TRNSYS-Java Coupler(Type299)のファイルを試してみました。

Javaのダウンロードインストール

まずは、Javaの動作に必要なJDK(Java Development Kit)をOracleのサイトからダウンロードしてインストール。
JDKのインストールはパスの設定とかあって、ちょっと面倒です。でも、良くしたもので解説のページなどもあるので、それらを参考にしながら設定を行います。

↓このサイトが解りやすかった。
Java(JDK)ダウンロードとインストール
http://www.javadrive.jp/install/

ちょっと注意点ですがWindow版として64bit,32bitの2種類があります。TRNSYSは32bitアプリなので、32bit版(Windows x86)をダウンロードしてインストールと設定を行います。

TRNSYS-Java Couplerのダウンロードとインストール

sourceforgeからProformaとDLLをダウンロードして、フォルダに配置します。
インストーラーはないので、サイトの説明を見ながらダウンロード、配置していきます。

説明に記載されているファイル名が一か所間違っていて、TrnsysJavaCoupler.dll と書いていあるところは、実際にはType299.dllというファイルになります。

それと動作確認用にDEMOのデータをダウンロードしておきます。

Javaのビルド

DEMOに含まれているサンプルはJavaのソースコードだけなので、実行できるようにコンパイルしておきます。

次の2つのファイルを実行用のフォルダ、C:\TrnsysJavaCoupler へコピーしておきます。

demoフォルダのTrnsysJavaCoupler.java
usageフォルダのITrnsysJavaCoupler.java


で、コンパイルはこんな感じ。

C:\TrnsysJavaCoupler> javac TrnsysJavaCoupler.java

これで、TrnsysJavaCoupler.class、ITrnsysJavaCoupler.class の2つが出来上がっていればOK.


TRNSYSの実行

Simulation StudioからdemoフォルダのTrnsysJavaCouplerDemo.tpf を開いて実行してみると。。。

エラー発生。

*** Fatal Error at time   :         0.000000
    Generated by Unit     : Not applicable or not available
    Generated by Type     :   299
    TRNSYS Message    105 : A TYPE was called in the TRNSYS input file but was either not linked into trndll.dll or was not found in an external dll. A dummy subroutine was called in its place. Please link the TYPE or remove it from the input file
    Reported information  :  Type299 could not be located in either the trndll.dll or in an external dll. Please relink theTRNDll.dll including this Type or make sure that an external DLL in the \UserLib\DebugDLLs and \UserLib\ReleaseDLLs folders contain the Type.

どうもType299.DLLが認識されていない雰囲気です。なんで???

つづく。


2013/09/11

TRNSYSとJavaを連成?(1)

TRNSYSのメーリングリスト「TRNSYS-USERS」を眺めていたら、Java対応のコンポーネントの投稿が出ていました。

これ→   [TRNSYS-users] New bi-directional TRNSYS-Java coupling Type 299

Coupling(連成)ってありますが、コンポーネント経由でJavaで書いたプログラムを呼び出す形式のようです。まあ、確かに連成ですね。。。

sourceforgeの記載を見た感じだと、Input/Outputの処理を受け取って、Javaとやり取りしてくれるようです。つまり計算自体はJavaでコーディングできると。
Javaの開発環境はオープンソースで各種揃っているので、商用ツールなしで利用できます。これは、手軽に試せそうです。
本格的な計算もそうですが、ちょっとした判定処理に使うだけでも、便利そうですよね。

ちと時間のある時に試してみたいと思います。



2013/09/06

気象情報サイト、wunderground.com

wunderground.comは天気予報、というか直近の気象データを表示してくれるサイトです。

東京周辺を表示すると、同じ都内でも気温にばらつきがあるのが見て取れてます。場所によって2度ぐらい差がありますね。羽田の気温が低いのは、東京湾のおかげでしょうか?
さらに地点をクリックすると、詳しい情報が表示されます。

しかし、気温や湿度に交じって、露点温度が表示されるのはなんで?外国だと大事な情報なんでしょうね。農業用とかでつかうのかな?
レーダーの情報なんかもオーバーレイできるので、気象データ好きには、ちょっとたまらんです。

参照しているデータがアメダスじゃなくて、空港その他らしく、地方だとデータがまばらなのが残念。


2013/09/05

Simulation Studioのアイコンの表示を変更する(おまけ)

アイコンの背景処理

さてと、前回の続きです。
アイコンのType番号の文字を大きくすると、アイコン自身に被ってしまって、かえって見苦しくなることがあります。

文字が大きくてアイコンの下半分が見えない

これは、これで見にくいので、こういう場合は背景処理を変更します。

1. 背景処理の変更

「Fill」タブを選んで、「Transparet Fill」の項目をチェック、「適用」ボタンをクリックする。
以上で、文字の背景が透明に変更されてアイコンが見えるようになります。


2013/08/28

Simulation Studioのアイコンの表示を変更する

TRNSYS/Simulation Studioのアイコン表示を変更する


アイコンのType番号の表記を変更する方法です。解像度の高いPC、特にノート型なんかだと、文字が小さくなりすぎてType番号の表記が見にくくなります。
そういう時には、フォントの大きさを変更すると見やすくなります。

1. 「Component Properties」ウィンドウを表示する

変更したいアイコンを選んで右クリックで表示されるメニューから「Properties」を選択する。

2. フォントサイズを変更する

「Font」タブで、文字の大きさを変更して、「適用」ボタンをクリックする。

図のように、アイコンの文字が大きくなったら終了です。

2013/08/26

FORTRANでWindowsイベント処理

計算型のコンポーネントを作ったら。。。


条件が成立するまでWaitと計算を繰り返すコンポーネントを作ったら、止まらなくなりました。
いや、いずれ条件が成り立てば止まるんですが、途中で止めたくても止まらなくなってしまいました。

具体的にどうなるかというと。。。

計算が全く進まない状態。条件の成立を待ちをしているので、これはこれで正常な状態。

でも途中で止めたくなって「Abort」ボタンをクリックすると。。。。
これが、本格的に問題があるようなメッセージになってしまう。とほほっ。。。

これはなんか格好が悪い

これって、Windowsのイベント処理の問題というか、コンポーネントが計算に夢中になって処理を返さないのが原因。VBなんかでも計算型のプログラムを書くと陥りやすいパターンです。VBにはDoEvents()っていう便利な関数が用意されているので、適当なタイミング、一般的には時間の掛かりそうなループの途中で呼んであげれば簡単に解決できます。

しかし、今回はFORTRAN。そんな便利な関数はない。というか、言語仕様にそんな機能があったら変だ。

だが、そこはIntel FORTRANのこと、なんか用意してそうだと思ったら、やっぱりありました。Win32 APIを直接呼び出しているサンプルが!

ということで、DoEvents()もどきのサブルーチンに仕立ててみました。
こいつを適宜呼び出すことで無事に解決。

! 呼出し側   
! 計算の途中でイベントの処理を流す   
Call DoEvents() !Windowsイベントを処理する

!-----------------------------------------------------------
! イベント処理   
!-----------------------------------------------------------
SUBROUTINE DoEvents()

use IFWINTY
use USER32
use IFLOGM
logical lNotQuit, lret
integer iret
TYPE (T_MSG) mesg
lNotQuit = .TRUE.
do while (lNotQuit .AND. (PeekMessage(mesg, 0, 0, 0, PM_NOREMOVE) /= 0))
  lNotQuit = GetMessage(mesg, NULL, 0, 0)
    if (lNotQuit) then
      if (DLGISDLGMESSAGE(mesg) .EQV. .FALSE.) then
         lret = TranslateMessage(mesg)
         iret = DispatchMessage(mesg)
      end if
    end if
end do

END SUBROUTINE DoEvents



2013/08/22

FORTRANで四捨五入


Binary Coded Decimal / pboyd04


TRNSYSのコンポーネントを書いて、計算に組み込んでみたら、すかっと落ちる。
これがエラーメッセージが表示されるわけでもなく、ログにも手がかりなし。

調べてみると、どうも計算誤差が原因っぽい。

計算上は本来はゼロになる条件なのに、どうも誤差の積み重ねで変な値が出来上がっている模様。
ループの中で計算しているとありがちですよね。

ということで四捨五入

しょうがないので小数点以下の適当なところで四捨五入して誤差を吸収しようとしたら、FORTRANに適当な関数が無いんですね。(知らないだけか?)

ひとまず文字列に変換する処理で実装してみたんだけど、これだと遅くないかな?
みんなどうやってんだろう?なんか定石がありそうな気がする。

! 四捨五入
CONTAINS
DOUBLE PRECISION Function QRound(val)
    DOUBLE PRECISION val
    Character(20) valStr
   
    write(valStr, '(f0.5)') val ! 実数を文字列に変換
    read(valStr, *) val         ! 文字列を実数へ変換

    QRound = val
    return
End Function QRound  

追記:
こういう書き方もありますね。こっちの方が、3倍は速い。(呼び出し回数が少ないので、全体でみると、ほぼ同じなんですがね)

DOUBLE PRECISION Function QRound2(val)
    DOUBLE PRECISION val
    Qround2 = aint( val * 10000.0) / 10000.0
End Function QRound2

2013/08/20

FORTRANでプリプロセッサーを使う

TRNSYSのコンポーネント書いてて、デバッグ用にメッセージの処理を入れてたんですが、これってデバッグモードの時だけ出力するようにできないかと思ったので調べてみました。

実際にやってたのは、こんな感じの処理。

    filename = getLUFilename(LU)
    Open (unit=LU,file=filename,action='READ',status='OLD',err=200)
    Call Messages(-1,'Reding the data file...',             'Notice',CurrentUnit,CurrentType)

単にファイルが開けたか確認したかったので、ファイルの読み込みが始まったらログにメッセージを書き出しています。
デバッグ中はこれでいいんですが、リリースモードでもログに書き出されるのもちょっとうっとおしい。これも含めて、他にも数か所あるので、ログがごちゃごちゃしてて見にくい。

プリプロセッサを使う

Intel Fortranのドキュメント調べたら、どうもC/C++なんかと同じようにプリプロセッサがつかえるらしい!

という事で、こういう時は、#ifdef/#endifで囲んであげればオッケー。

    filename = getLUFilename(LU)
    Open (unit=LU,file=filename,action='READ',status='OLD',err=200)
#ifdef debug
    Call Messages(-1,'Reding the data file...',             'Notice',CurrentUnit,CurrentType)
#endif



これ使う場合、ちょっと条件があって、
  • ソースコードは自由形式(拡張子.f90)
  • #ifdef/#endifは1カラム目から書く(途中から書くと無視される)

プロパティの設定


それとプロジェクトのプロパティでプリプロセッサの指定も忘れずに!


  • Debugモード


  • Releaseモード





2013/08/15

TRNSYSの情報サイトを作ってみる

夏休みなのでTRNSYSのサイトを作ってみました。

日頃TRNSYSをネタに、いろいろ書いていますが、思いつきで書くことが多くて、いまいちまとまりに欠けるなー、と常々思っておりまして、内容に応じてまとめられないかなと。

Googleのサービスの一つ、Google Siteでちょちょちょいと、作ってみました。このブログのエントリーの他、役に立ちそうなサイトへのリンクなどもまとめています。

TRNSYS NOTE(Beta)

ちなみに、勢いで作ったので、まだまだ内容が薄いです。これから過去のエントリーを遡って、まとめたいと思います。
まだまだ試行錯誤中なので、サイトの構成とかレイアウトとか、予告なしに変更すると思いますが、ご容赦ください。
そんなわけで、しばらくタイトルには「Beta」の文字を入れおります。

Google Siteって、いまいち人気なさげなので、せっかく作ったのに無くなってしまわないかというのが目下の気がかりです。





2013/08/14

30度超えたらツィートする

夏休みの工作でIFTTTのレシピ作ってみました。

IFTTTが何かっていうと、なんだろ?複数のウェブサービスを組み合わせたレシピと呼ばれるスクリプトを作ってくれるサービスです。(説明あってるかな?)

ちょこっとやりたいことがあってIFTTTをいじってて、天気予報のデータが拾えることに気づきました。

で、作ってみたのがこちら。
30℃を超えたらツィートする

天気予報サービスから東京の気温を取得して、30℃を超えたらツィートするレシピ。

製作時間1分未満。こんなに簡単に作れていいのかレベルでした。

Google Driveへ書き込みなんかもできるので、予報データを記録するようなのも簡単に作れそうです。なにか工夫次第じゃ、面白いことができそうですね。


2013/07/23

スラッシュ("/")が問題

TRNSYSの最新版(17.01.0028)ではTRNBuildのZone/AirnodeのIDに("/")が使用できなくなりました。という話は知っていたのですが、どうもLayerの名称にも使えなくなったようです。というかですね、いままで使えてたんだって感じです。

"3/4_HARDWD "(3/4インチ・ハードウッド)といような名前が使えていたようです。
m系で生活していると変な印象ですが、インチ系の国では便利な名前の付け方なんでしょうね、これ。


話を戻すと、以前のバージョンで上記のような名称を使っていると、新しいバージョンではエラーとして処理されます。リネームしようにもTRNBuildでは開くことすらできなくなります。

実際のエラー画面:invalid layer type name

自分で作成したデータだと、あまりこのエラーに遭遇することはないと思いますが、サンプルデータのいくつかで使われているケースがあります。

スラッシュ記号("/")が使われているのが問題なので、こういう場合はメモ帳などで直接Buiファイル(*.bui, *.b17)を直接開いて、編集すればOKです。

編集上の注意点としては、Layerの名称は、それ自身の定義、Wallの定義で使われているため、複数個所に記述されています。
このため変更する際は「すべて置換」でまとめて置き換えないと、2度、3度とエラーメッセージをくらうことになります。ご注意ください。







2013/07/22

TMY/TMY2/TMY3気象データのフォーマット

TMY/TMY2/TMY3気象データのフォーマットのメモ
この3種類ってなにが違うんだろうって思ってたんですが、たまたま資料を見つけてしまったので、備忘のため残しておきます。

National Solar Radiation Data Base

NRELの気象データベース
http://rredc.nrel.gov/solar/old_data/nsrdb/


ということで、かるまとめると。。。

TMY

NRELの標準年気象データ(the typical meteorological year)

1952-1975 SOLMET/ERSATZ data base

TMY2

フォーマットはTMYと同じだけど、元データが新くなっている模様。

1961-1990 National Solar Radiation Data Base (NSRDB)

National Solar Radiation Data Base
User's Manual (1961-1990)
http://rredc.nrel.gov/solar/pubs/NSRDB/


TMY3

名前は似ているが、フォーマットはTMY/TMY2と互換性なし。(基本的に同じだけど、一部変更されているっぽい)
元データも新しくなっている?

Users Manual for TMY3 Data Sets
http://www.nrel.gov/docs/fy08osti/43156.pdf

↑なぜかChromeで開くと、途中で落ちる。






2013/07/19

TRNSYSので指数表記の出力を何とかする

指数表記

TRNSYSで計算結果を書き出すと、指数表記になります。

試しにType25で書き出してみると、だいたいこんな感じ。

 TIME                     TAIR_EG_GB               TAIR_EG_GB               TAIR_EG_GB            
 HOURS                                                                          
  +0.0000000000000000E+00  +2.0000000000000000E+01  +2.0000000000000000E+01  +2.0000000000000000E+01
  +1.0000000000000000E+00  +1.9809095712617690E+01  +1.9484726116999660E+01  +1.9615743684332390E+01
  +2.0000000000000000E+00  +1.9709755926303043E+01  +1.9233914565182772E+01  +1.9394910639839168E+01
  +3.0000000000000000E+00  +1.9747419227402617E+01  +1.9327408298779126E+01  +1.9471953393093376E+01
  +4.0000000000000000E+00  +1.9693025737107675E+01  +1.9182863053396972E+01  +1.9382176378677428E+01
  +5.0000000000000000E+00  +1.9664338574763043E+01  +1.9141843020969311E+01  +1.9345477650980808E+01
  +6.0000000000000000E+00  +1.9612642012823343E+01  +1.9044367724365255E+01  +1.9286016094005646E+01
  +7.0000000000000000E+00  +1.9558755297995550E+01  +1.8963047372044027E+01  +1.9228754224595775E+01
  +8.0000000000000000E+00  +1.9497057977033769E+01  +1.8866835171629649E+01  +1.9166137250448045E+01

パッと見た感じ、なんだかこれだと解り難い。というか見るのがツライ。ちなみに書き出しているのは室温です。

でもまー、普段はしょうがないやで放置していますが、大量のデータとか見るときには、やはり少々げんなりします。

そういう時に便利なのがType25f。書式付で出力できるので、出力がこうなります。

 TIME     TAIR_EG_GB  TAIR_EG_EB  TAIR_OG                  
    0.00,   20.00,   20.00,   20.00
    1.00,   19.81,   19.48,   19.62
    2.00,   19.71,   19.23,   19.39
    3.00,   19.75,   19.33,   19.47
    4.00,   19.69,   19.18,   19.38
    5.00,   19.66,   19.14,   19.35
    6.00,   19.61,   19.04,   19.29
    7.00,   19.56,   18.96,   19.23
    8.00,   19.50,   18.87,   19.17

ぐっと読みやすくなります。

書式指定の方法

これ、やり方は簡単でType25fで書式を指定するだけ。

 ちょっと小さくて分かり難いので、大きく書くと、こんな風に指定します。
もっと細かい指定もできます。
ここらあたりを参考にすると、いろいろできて面白いですよ。






2013/07/05

TRNSYSでテキストファイルを読み込む

実測などで集めたデータをTRNSYSの計算で使いたいことってありますよね?

そういう時に便利なのがData Reader Type9シリーズ。汎用のデータリーダーなので、実測データとか、なにか他のツールで計算したデータとか、とにかくテキスト形式のファイルであれば読み込む事ができます。

Type9

Direct Access Toolbar(画面右側)のData Readersのフォルダを見ると。。。


6種類あるので、なれないうちは、どれを使ったものか迷います。
が、よーく見るとGeneric Data Files 以下の3フォルダの中身は「Free Format」か「Specified Format」の2種類になっています。

Free Format 

自由形式、いわゆるCSV形式のファイル。

Specified Format

データの書式を指定する形式。固定長で隙間なくデータが書き出されているようなデータファイルを読むときに使用します。


基本的に、この2どちらかの形式で、あとはバリエーションで3種類に分けられています。
良く利用されるのはType9c(Skip Lines to Start/Free Format)です。通常は、これを選べば間違いないです。

使い方

試しにサンプルで用意されているファイルを使って読み出し設定します。

使ったファイルはこれ:C:\Trnsys17\Examples\Data Files\Type99-UserFormat.99

このファイル、気象データのサンプルなので、最初の方はごちゃごちゃとヘッダー情報がついている点に注意してください。
19行目の"<data>"の行以降がデータになります。この部分の最初のカラム(ちなみに風向の値)を読み出してみます。

Type9の設定

Type9cを配置したら、設定を行います。

まずは「Parameters」タブで2か所変更します。

Header Lines to Skip: 19
ヘッダー部分はデータとしては邪魔なので読み飛ばします。ヘッダーの19行分を指定します。

Interpolate or not : -1
データの補間処理をOff(-1)にします。これ既定だとOn(1)になっています。補間処理されてしまうと元データと比較できなくなるので、Offにしておきます。

次は「External Files」タブで、データファイルを指定します。ここは上記のサンプルのファイルを選んであげればOK

あとは、出力用にType65をつないで準備完了。

実行して、こんな感じのファイルが書き出されていたらOK.
1カラム目はタイムステップなので、2カラム目(赤枠内)に元データと同じデータが書き出されていれば成功です。

いったん読み込めてしまえば、あとは他のコンポーネントのInputとして使うことができます。


2013/07/02

TRNSYS3DってSketchUp2013じゃ動かないっぽい

2013/7/2 追記
Transsolarのサポートから回答がありました。SketchUp2013でも動作可能だそうです。
どうも単にインストール時のパスの指定が適切じゃなかったようです。SketchUp2013のインストール先のパスを指定すればOKそうです。
という事で、いかの件は終了です。


TRNSYS-USERSメーリングリストを見ていたらTRNSYS3Dが新しいSketchUpでうまく動作、というかインストールできないという話が出ていました。

しばらく前にSketchUpの最新版2013がリリースされたのは気づいてたんですが、これは困った。しかも旧版のダウンロードページが消えている模様。さらに困った。

慌てて確認してみたところ、日本語版に関しては残ってました。

2014/9/14 追記
旧バージョンのダウンロードページ
www.sketchup.com/ja/download/all

使用される予定のある方は早目にダウンロードされるのをおススメします。

2013/06/28

ドキュメント読んでも、やっぱりわからん

前回、TRNSYSのドキュメントの話を書いたのになんですが、読んでも分からない事ってありますよね?

身もふたもない書き出しになってしまいましたが、でも、中身以前にどう使うのか、良くわからないケースや、使い方が正しいのか確信が持てないとか。。。

そういう時、これも良くしたもので、実際に動作するサンプルが多数用意されています。ちょっと癖のある(って言っていいのかな?)コンポーネントの使い方が解らない時など、まずは試してみるのがおススメです。

標準サンプル

TRNSYSに標準で用意されているサンプル。

フォルダ: C:\TRNSYS17\Examples


30数個のサブフォルダに分かれてます。シンプルなモデルが多いので、基本的な動作を確認するのに役立ちます。

オプション製品

具体的にはTESS Component Libraryになりますが、これも大量にサンプルが用意されています。

フォルダ: C:\Trnsys17\Tess Models\Examples


15個のサブフォルダに分かれてます。一見、標準のサンプルに比べて数が少ないように見えますが、それぞれのフォルダに複数のプロジェクトを格納しているので、かなりの数に上ります。

TRNSYS-USERS MLなんかも。。。

いろいろ調べて、いまいちピンとこないときはネットで検索してみるのも手です。

個人的にまとめられているケースもありますが、圧倒的に情報量が多いのはTRNSYSのメーリングリスト、TRNSYS-USERSです。実際に使っているユーザーが質問のやり取りをしているので、なにかと貴重な情報源になります。

私がよくやるのはメーリングリストのタイトル"TRNSYS-USERS"と、調べたいキーワードを並べて検索するやり方です。

例)Type56のRadiation modeについて調べる

TRNSYS-USERS Type56 radiation mode


この例のように、キーワードに関連した検索結果が大量に表示されます。

ところで、引っかかってきた投稿を読むと、かなりの確率で、同じような質問に遭遇することがあります。やっぱり分かり難いポイントは世界共通のようです。