OpenModelicaのBuildingsライブラリを学ぶ_その6

概要

OpenModelicaでLBNLのBuildingsライブラリを使う。初心者なのでいろいろ教えて頂けるとありがたい。 SpaceCoolingのSystem2をやる。前回はvolとfan廻りをみたのでhexとoutとsenTemHXOutを見る。
使用バージョン
-OpenModelica1.12.0 →Modelica標準ライブラリ3.2.2
-Buildings 5.0.1

チュートリアル SpaceCoolingのSystem2

f:id:kinonotofu:20180606201749p:plain

熱交換器hexは外気outからの給気とvolからの排気の熱交換をしている。センサーsenTemHXOutはhexからでた給気温度をとってcooCoiにつないでいる。
hex、out、senTemHXOut廻りのコネクタは以下のとおり。

connect(vol.ports[2], hex.port_a2);
connect(out.ports[1], hex.port_a1);
connect(out.ports[2], hex.port_b2);
connect(weaDat.weaBus, out.weaBus);
connect(hex.port_b1, senTemHXOut.port_a);
connect(senTemHXOut.port_b, cooCoi.port_a2);

outのコネクタはweaDatから気象データ一式を受け取ってhexへ給気のデータを渡している。逆にhexからおそらく排気のデータを受け取っている。hexはさらにvolからの排気とsenTemHXOutへの給気がつながっている。そしてsenTemHXOutはhexから得たデータをコイルへ出力している。hexからセンサーとコイルの両方へデータを渡すという形にしてしまいそうだがこのように使うらしい。

out廻り

outの設定は以下のとおり。

Buildings.Fluid.Sources.Outside out(nPorts=2, redeclare package Medium = MediumA);

アイコンをぱっと見た感じでvolに近いだろうと思ったのだが中身を見てみると気象データを取り出すだけのモデルだと感じた。nPorts=2で指定された数だけ、Modelica.Fluid.Interfaces.FluidPorts_bが用意されている。気象データやバスからはこのコネクタは出てなかったように思うので、気象データをMediumの状態としてFluidPortsを通じて渡すときのための境界条件用モデルだろう。out.ports[1]は流出条件、out.ports[2]は流入条件のような接続がされているが、FluidPorts_bって流入にも使えるけれど一応流出用のコネクタだよなぁと思った。計算したときに確認してみたい。
outのOMEDit上の設定画面は以下のとおり。
f:id:kinonotofu:20180704222036p:plain
設定画面からコネクタの数を指定できる。物質の濃度を入力したり、固定値で与えたりもできるようだがつかいどころがイメージできない。

hex廻り

hexの設定は以下のとおり。

Buildings.Fluid.HeatExchangers.ConstantEffectiveness hex(redeclare package Medium1 =
      MediumA, redeclare package Medium2 = MediumA,
  m1_flow_nominal=mA_flow_nominal,
  m2_flow_nominal=mA_flow_nominal,
  dp1_nominal=200,
  dp2_nominal=200,
  eps=eps);

熱交換するそれぞれの流体と流量と差圧と、熱交換効率を指定している。このチュートリアルではダクト系の圧力降下を気にしていないが一応設定しているようだ。流量が正の値のとき熱交換器に対してhex.port_a1から流入してhex.portb1から流出、hex.port_a2から流入してhex.port_b2から流出しており、FluidPorts_aとFluidPorts_bがそれぞれ割り当てられている。これは顕熱のみ交換するモデルで全熱交換器はBuildings.Fluid.MassExchangers.ConstantEffectiveness を使うらしい。他にも詳細な熱交換器のモデルがライブラリにはあるけれど、これは入力した交換効率でそのまま顕熱だけ計算するシンプルなものである。 hexのOMEDit上の設定画面は以下のとおり。 f:id:kinonotofu:20180704222541p:plain
↑テキストで指定したのはGeneralの部分。
f:id:kinonotofu:20180704222610p:plain
↑Assumptionでは流れの逆流の有無を指定できる。デフォルトでtrueである。逆流しないと分かっているときはたぶんfalseの方が計算が安定したり速くなったりするのだと思う。
f:id:kinonotofu:20180704222627p:plain
↑Advancedでは流量0付近での計算安定性のパラメータと思われる流量と、ホモトピー法の使用のオンオフ設定がある。ホモトピー法というのをはじめて聞いたのだがたぶんHomotopy analysis method - Wikipediaのことだろう。よく理解できなかったのだがThe HAM is an analytic approximation method designed for the computer era with the goal of "computing with functions instead of numbers."とあるので数値的な解法というよりもなんらかの関数を使ってより解析的な近似で計算するらしい。わからん。
それからコネクタでの実際の温度を計算するかの設定があるがあまり計算に影響するものではなさそうである。
f:id:kinonotofu:20180704222731p:plain
↑Flow Resistanceでは圧力降下の計算に関する設定がある。

senTemHXOut廻り

コイルとファンの間にあるセンサーsenTemSupAirも同じモデルを使っている。実はパラメータの設定も同じである。両方の設定は以下のとおり。

Buildings.Fluid.Sensors.TemperatureTwoPort senTemHXOut(redeclare package Medium =
      MediumA, m_flow_nominal=mA_flow_nominal);
Buildings.Fluid.Sensors.TemperatureTwoPort senTemSupAir(redeclare package Medium =
      MediumA, m_flow_nominal=mA_flow_nominal);

流体と流量の指定をしているだけである。流体の状態をそのまま受け渡すだけで何をやっているのやらという感じではあるが、System3で制御が組み込まれるのだろう。Buildings.Fluid.Sensors.UsersGuideにセンサー類の説明がある。センサーにはコネクタが1つのものと2つのものがあるがMixingVolumesの値を計測する以外は2つのものを使用したほうがよいらしい。また、tau=0とすると定常モデル、tau>0とすると非定常モデルになるらしく、流量に依存しない量を計測する場合は流量0付近で数値的に不安定になるのでtau>0として非定常モデルにしたほうがよいようだ。他にもセンサーの動的挙動に関する説明があったが力不足であまりよく理解できなかった。 senTemHXOutのOMEDit上の設定画面は以下のとおり。 f:id:kinonotofu:20180704230013p:plain
↑非定常モデルとしたときの設定がいろいろできる。 f:id:kinonotofu:20180704230054p:plain
f:id:kinonotofu:20180704230103p:plain
↑この上ふたつはよくある流れの逆流の設定と流量0付近の扱いの設定である。

おわりに

なんとなくライブラリの特徴というかどういう設定があるのかが分かってきたような気はする。小難しい設定があるけれど数値計算上の設定でデフォルト値のままにしておけば大丈夫そうなことが多い。その理解でよいかは別だけれど。
前回更新時点でBuildingsライブラリは5.1.0がリリースされていた。Spacecoolingのチュートリアルが終わるまでは今のライブラリでやろうと思っているが、5.1.0ではBuildings.Fluid.Sourcesでの絶対湿度をXではなくXiを入力として使用できるようになった。Xiは絶対湿度でXは水蒸気密度(water vapor concentration)だと思われる。水蒸気濃度というのは湿り空気の質量で水蒸気の質量を割っているのだろうか。(絶対湿度は乾燥空気の質量で割っている。)とりあえず今は湿度を扱っていないのでとくに影響はなかったがあまり気にしていなければXのことを絶対湿度だと思いこむだろうと思った。やっぱちゃんと分かってないのはよくないな。

OpenModelicaのBuildingsライブラリを学ぶ_その5

概要

OpenModelicaでLBNLのBuildingsライブラリを使う。初心者なのでいろいろ教えて頂けるとありがたい。 前回からチュートリアル SpaceCoolingのSystem2をやっている。全体像と気象データ廻りを見たので次はvolとfan廻りをみる。
使用バージョン
-OpenModelica1.12.0 →たぶんModelica標準ライブラリ3.2.2
-Buildings 5.0.1

チュートリアル SpaceCoolingのSystem2

f:id:kinonotofu:20180606201749p:plain
System2ではSystem1のvolにnPorts=2と設定してできたポートをつないでファンで機械換気している。volとfan廻りのコネクタは以下。

connect(fan.port_b, vol.ports[1]);
connect(vol.ports[2], hex.port_a2);
connect(fan.m_flow_in, mAir_flow.y);
connect(senTemSupAir.port_b, fan.port_a);

volのコネクタはfanと熱交換器につながっているので給気と熱回収用の排気をつないでいるのだろう。 fanはvol以外にもつながっていて流量や温度を受け取っていそうである。mAir_flow(Modelica.Blocks.Sources.Constant)はkにReal型の値をParameterとして設定してyというコネクタから出力するブロックのようである。ブロックというクラスはそのクラス内で宣言された変数はinputかoutputとせねばならないというものである。senTemSupAirはセンサーのモデルなのだがけっこうしっかりしているのでまた別の回に取り扱いたいと思う。

vol廻り

volの設定は以下。

Buildings.Fluid.MixingVolumes.MixingVolume vol(
    redeclare package Medium = MediumA,
    m_flow_nominal=mA_flow_nominal,
    V=V,
    nPorts=2,
    energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
    mSenFac=3);

volの設定でnPorts=2とすればvolにports[1]とports[2]ができるようである。System1との違いは本当にこれだけである。
これらのコネクタはModelica.Fluid.Vessels.Baseclasses.VesselFluidPorts_bクラスのコネクタなのだが、これは実質Modelica.Fluid.Interfaces.FluidPortである。内容は以下の通り。

connector FluidPort
  "Interface for quasi one-dimensional fluid flow in a piping network (incompressible or compressible, one or more phases, one or more substances)"

  replaceable package Medium = Modelica.Media.Interfaces.PartialMedium
    "Medium model" annotation (choicesAllMatching=true);

  flow Medium.MassFlowRate m_flow
    "Mass flow rate from the connection point into the component";
  Medium.AbsolutePressure p "Thermodynamic pressure in the connection point";
  stream Medium.SpecificEnthalpy h_outflow
    "Specific thermodynamic enthalpy close to the connection point if m_flow < 0";
  stream Medium.MassFraction Xi_outflow[Medium.nXi]
    "Independent mixture mass fractions m_i/m close to the connection point if m_flow < 0";
  stream Medium.ExtraProperty C_outflow[Medium.nC]
    "Properties c_i/m close to the connection point if m_flow < 0";
end FluidPort;

とりあえずMediumを値にもつコネクタをつなげばよさそう。Medium自体が流量と圧力と熱量(エンタルピ)を持ってくれているようだ。Medium自体ではなくMassFlowRate、AbsolutePressure、SpecificEnthalpy、MassFraction、ExtraPropertyの値ももつコネクタをつないでも大丈夫な気はする。いくつかの値だけもらいたいときにはそれでもいいのかもしれない。

fan廻り

fanの設定は以下

Buildings.Fluid.Movers.FlowControlled_m_flow fan(
    redeclare package Medium = MediumA,
    m_flow_nominal=mA_flow_nominal,
    energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) ;

fanの設定はシンプルでMediumとデフォルトの風量と計算モデルの種類を指定している。これはvolとfanでMediumAを共有してしまわないのだろうか。仕様はわかっていないが別のインスタンスとして扱ってくれるのだろう。
SteadyStateとFixedInitialのどちらも一定値を出し続けそうな気がするが、値を受け取る場合はSteadyStateとするという違いがあるのかもしれない。コネクタを見る限り、風量と温度を受け取って、volヘ媒体の状態(風量含む)を渡しているように思うのだがファン自体は何か計算をしているのだろうか。

fan.port_aはfan.port_b、aが入力、bが出力であることだけで実質どちらもModelica.Fluid.Interfaces.FluidPortクラスだった。要するにvolのコネクタと同じである。fan.m_flow_inはModelica.Blocks.Interfaces.RealInputクラスのコネクタだが一行で記述できるシンプルなものである。

connector RealInput = input Real "'input Real' as connector"

m_flow_inの定義部分は以下

Modelica.Blocks.Interfaces.RealInput m_flow_in(
    final unit="kg/s",
    nominal=m_flow_nominal) if
       inputType == Buildings.Fluid.Types.InputType.Continuous
    "Prescribed mass flow rate"

RealInputは何の値か分からないので使うときに単位を指定してある。if文がありモデル作成の際の入力データの種類の設定ができる。Continuous(コネクタから入力)の他にConstant(定数指定)とStages(段階の指定)がある。Stagesを使うと例えば風量の強弱の切り替えをしようとしたときに信号を受け取って1段回目が風量なし、2段回目が最大の0.6倍、3段階目が最大風量といったように切り替えることができるらしい。

さらにBuildings.Fluid.Movers.FlowControlled_m_flowのソースを読んでいこうとしたのだが例の如く大変なので詳細を追うのは断念した。Buildings.Fluid.Movers.UsersGuideというannotationだけのクラスがありこれを読めば分かるだろうと思ったのだが、細かいところを詳しく書いていて、分かったような分からないような感じになった。今回は風量指定としているが、P-Q曲線を使ったり、消費電力の計算ができたりと一通り気になる部分は計算できそうな様子だった。

OMEditの設定画面を示す。
f:id:kinonotofu:20180614035618p:plain
↑下のControlでインプットの種類を選択する。Parameterの設定でConstantやStageにしたときの流量を設定できる。 addPowerToMedeiumをtrueにすると機器の発熱を流体に加えることができるのだと思う。nominalValuesDefineDefaultPressureCurveをtrueにするとP-Q曲線のために流量と差圧を設定したときの警告がでなくなるらしい。規定値の外の値になると警告がでて計算がとまるのだろうか。
Initializationでは流量や差圧と体積流量の初期値を設定できる。保存則の関係からなのか流量は基本的に質量流量を設定しているが、 ここでは機器データとして得られる体積流量をいれられる。Nominalconditionでは差圧と流量の公称条件?の値を設定する。たぶんこの値でP-Q曲線の設定をするのではないかと思う。

f:id:kinonotofu:20180614035646p:plain
↑Equationsのところはエネルギーと物質の計算式の種類を選ぶところなのだがまだよくわかっていない。ここではSteadyStateになっている。NominalconditionやFilteredspeedのところはよくわからない。

f:id:kinonotofu:20180614035659p:plain
↑初期値と物質の濃度のデフォルト値。

f:id:kinonotofu:20180614035711p:plain
↑計算上逆流するとなった時の設定。逆流しないように強制力を働かせるわけではなさそうだがfalseで計算上逆流するとどうなるのだろう。

f:id:kinonotofu:20180614035724p:plain
↑show_Tをtrueにするとポートの実際の温度を計算するとのことだがおそらく流量の正負(流れ方向)が変わるとコネクタの温度の計算が安定しなくなるので、流量の絶対値がm_flow_small以下の流量ゼロ近傍のときに計算式を変えているのだと思う。

ファンの効率はデフォルト値で0.7になっているらしいのだがどこで設定するのだろうか。いろいろ設定できるよくできたモデルなんだろうけれど全部を把握するのは難しい。色々入出力をみながらいじるのがよさそうなのでもう少し学習が進んだらたくさん試したい。

おわりに

もうすこし浅い理解でどんどん触っていくほうがよいと思いながらも全然進まない。次は熱交換器、センサーをみていきたい。次の次にコイルとかポンプ廻りをみてその後さくっとSystem3へ進みたい。はやく熱源システム組んでみたいが、換気回路網計算のモデルもあるのでそっちも気になるところ。
ちょっとよさそうなサイトを見つけた。コードを読んでいてこれなんだっけと思ったときにマニュアルの該当箇所へ飛びやすくなると思う。http://modref.xogeny.com/
OpenModelicaの理解も深めないといけないしやることはたくさんあるけど楽しめるペースでやっていきます。

OpenModelicaのBuildingsライブラリを学ぶ_その4

概要

OpenModelicaでLBNLのBuildingsライブラリを使う。初心者なのでいろいろ教えて頂けるとありがたい。 前回でチュートリアル SpaceCoolingのSystem1はとりあえず終わったのでSystem2を見ていく。 今回はSystem2の全体像と気象データの読み込み部分だけ。
使用バージョン
-OpenModelica1.12.0 →たぶんModelica標準ライブラリ3.2.2
-Buildings 5.0.1

チュートリアル SpaceCoolingのSystem2

f:id:kinonotofu:20180606201749p:plain
気象データを読み込む部分と室を冷房する部分が増えてコネクタのつながりが少しややこしくなった。System1との違いは以下の通り
* TOutの温度Tを気象データのテキストを読み込むモデルweaDatとつなげて与えるようになった
* volでnPorts=2の設定がでてきた。たぶん給排気用。空調空気を給気し、排気は熱交換器で熱回収を行う。
* 熱交換器hexと冷却コイルcooCoiとファンfanなどのモデルを使って室を空調(外調?)している。
* 冷却コイル用の冷水廻りのモデルも色々ある。
* Mediaとして室内を満たす空気Buildings.Media.Air に加えて冷却コイル用の水Buildings.Media.Waterがでてきた。
* 制御用のモデルも色々ある。

全部一気に見るのが大変そうなので少しずつ見ていく。 System2に登場するモデルは以下の通り。

Buildings.Fluid.Movers.FlowControlled_m_flow fan;
Buildings.Fluid.HeatExchangers.ConstantEffectiveness hex;
Buildings.Fluid.HeatExchangers.WetCoilCounterFlow cooCoi;
Buildings.Fluid.Sources.Outside out;
Buildings.Fluid.Sources.MassFlowSource_T souWat;
Buildings.Fluid.Sources.FixedBoundary sinWat;
BoundaryConditions.WeatherData.ReaderTMY3 weaDat;
BoundaryConditions.WeatherData.Bus weaBus;
Modelica.Blocks.Sources.Constant mAir_flow;
Modelica.Blocks.Sources.Constant mWat_flow;
Buildings.Fluid.Sensors.TemperatureTwoPort senTemHXOut;
Buildings.Fluid.Sensors.TemperatureTwoPort senTemSupAir;

気象データ関係のところでBuildingsを省略しているのは長いからだろうか。本来Buildings.BoundaryConditions.~となるはずである。他のモデルも短く宣言してもいいのかもしれない。

まずはBoundaryConditionsとなるweaDat(ReaderTMY3)とweaBus(Bus)をみてみる。各モデルのコネクタでのつながりは以下のとおり。weaDatはweaBusというコネクタがあり、weaBusはTDryBulというコネクタがある上にweaBus自身もコネクタとなっている。不思議である。

connect(weaDat.weaBus, out.weaBus);
connect(weaDat.weaBus, weaBus);
connect(weaBus.TDryBul, TOut.T);

weaBusのコードは以下のとおり。

within Buildings.BoundaryConditions.WeatherData;
expandable connector Bus "Data bus that stores weather data"
  extends Modelica.Icons.SignalBus;
  annotation (省略);
end Bus;

expandable connectorクラスであるがアイコン以外特に何も書いていない。普通のコネクタは何かしらの変数を持ってその変数を通して値を受け渡しするはずだがexpandableがつくとコネクタ側で変数を持たずとも受け取ったデータを他のモデルに受け渡すことが出来るのかもしれない。

とりあえず気象データの使い方としてはweaDatからweaBusやout.weaBusで一式丸ごとうけとって、そこからほしい物を取り出すという使い方をするものなのだろう。ところで今までチュートリアルのモデルを眺めているだけで気づかなかったのだが、自分でモデルを作ってweaDatからBusにコネクタをつないでみると繋げる変数の一覧が出てきた。これでモデルがどんなコネクタをもっているのかがわかるのだがweaDatのコネクタの数がちょっと多すぎる。サイドバーを見れば変数の多さがわかると思う。繋げる変数は黒色、無効なものは灰色の文字になっている。
f:id:kinonotofu:20180606203933p:plain
ちなみにBusとThermalConductorをつなぐときにはweaBusの下のNew Variableを選択してweaBusの中の変数を手打ちでTDryBulと打って指定する必要がある。もっと良い方法はないものか。
f:id:kinonotofu:20180606204850p:plain

weaDatの設定は以下のようになっている。

BoundaryConditions.WeatherData.ReaderTMY3 weaDat(
    pAtmSou=Buildings.BoundaryConditions.Types.DataSource.Parameter,
    TDryBulSou=Buildings.BoundaryConditions.Types.DataSource.Parameter,
    TDryBul=TOut_nominal,
    filNam="modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")
    "Weather data reader");

pAtmSouとTDryBulSouがBuildings.BoundaryConditions.Types.DataSource.Parameterとなっている。.Parameter以外に .Fileや.Inputがありそれぞれ、定数、ファイルからの入力、コネクタからの入力?となっているようである。特に指定しなければファイルからの入力がデフォルトになっている。
ファイルから読み込むときはfilNamで指定したmosファイル(気象データファイル)を読み込んでいる。 weaDatはややこしいのでOMEdit上の設定画面だけ確認してコードは割愛する。 f:id:kinonotofu:20180606205432p:plain
f:id:kinonotofu:20180606205445p:plain
湿球温度の計算はループが必要なので計算時間への影響が大きいのか計算のオンオフがある。あとは天空への放射の計算の際に天空温度を用いるか長波放射量とするかの切り替えもある。それ以外はそれぞれ.Parameterや.Fileや.Inputの選択とParameterのときの値の指定をするだけである。さらにParameterのときでもpAtmのように値を指定しなければデフォルト値が使われるようだ。

気象データファイルとして読み込んでいるmosファイルは自分でフォーマットを見て用意してもいいのだがEnergyPlusの気象データ(.epw)からライブラリ付属のjavaのプログラムにより変換して作成することが出来る。これで世界中の気象データを使うことが出来る。
まずはWeather Data | EnergyPlusから目的の地点の気象データを拾ってきて (OpenModelicaインストールフォルダ)\lib\omlibrary\Buildings 5.0.1\Resources\weatherdataにepwデータをおく。
たとえばJPN_Tokyo.Hyakuri.477150_IWEC.epwを.mosデータにする場合は以下のようにする。

cd (OpenModelicaインストールフォルダ)\lib\omlibrary\Buildings 5.0.1\Resources\weatherdata
java -jar ../bin/ConvertWeatherData.jar JPN_Tokyo.Hyakuri.477150_IWEC.epw

これでJPN_Tokyo.Hyakuri.477150_IWEC.mosができている。中身は以下の通り。 ヘッダーで記載した#C1から#C30までのデータがタブ区切りでならんでいる。項目が多く、すべてのデータがそろっているわけではない。

#1
double tab1(8760,30)
#LOCATION,TOKYO HYAKURI,-,JPN,IWEC Data,477150,36.18,140.42,9.0,35.0
#DESIGN CONDITIONS,1,Climate Design Data 2009 ASHRAE Handbook,,Heating,1,-6.9,-5.1,-12.8,1.2,1,-11.1,1.5,0.6,10.2,6.1,8.7,6.6,1.1,0,Cooling,8,7.7,32.1,26,30.9,25.8,29.2,24.8,26.8,30.6,26.1,29.6,25.5,28.7,4.8,210,26,21.4,29.3,25.1,20.3,28.3,24.2,19.2,27.1,84.8,30.6,81.4,29.6,78.4,28.6,1007,Extremes,9.7,8.3,7.3,32.8,-9.5,34.1,1.1,1.5,-10.3,35.2,-11,36,-11.6,36.9,-12.4,38
#TYPICAL/EXTREME PERIODS,6,Summer - Week Nearest Max Temperature For Period,Extreme,8/ 5,8/11,Summer - Week Nearest Average Temperature For Period,Typical,8/12,8/18,Winter - Week Nearest Min Temperature For Period,Extreme,1/22,1/28,Winter - Week Nearest Average Temperature For Period,Typical,2/12,2/18,Autumn - Week Nearest Average Temperature For Period,Typical,11/19,11/25,Spring - Week Nearest Average Temperature For Period,Typical,5/13,5/19
#GROUND TEMPERATURES,3,.5,,,,3.79,2.88,4.49,7.01,13.59,18.68,22.10,23.15,21.37,17.42,12.15,7.26,2,,,,7.13,5.51,5.84,7.18,11.58,15.57,18.75,20.46,20.10,17.86,14.23,10.38,4,,,,9.89,8.23,7.87,8.37,10.86,13.55,16.01,17.72,18.12,17.15,15.02,12.41
#HOLIDAYS/DAYLIGHT SAVINGS,No,0,0,0
#COMMENTS 1,"IWEC- WMO#477150 - Asia -- Original Source Data (c) 2001 American Society of Heating, Refrigerating and Air-Conditioning Engineers (ASHRAE), Inc., Atlanta, GA, USA.  www.ashrae.org  All rights reserved as noted in the License Agreement and Additional Conditions. DISCLAIMER OF WARRANTIES: The data is provided 'as is' without warranty of any kind, either expressed or implied. The entire risk as to the quality and performance of the data is with you. In no event will ASHRAE or its contractors be liable to you for any damages, including without limitation any lost profits, lost savings, or other incidental or consequential damages arising out of the use or inability to use this data."
#COMMENTS 2, -- Ground temps produced with a standard soil diffusivity of 2.3225760E-03 {m**2/day}
#DATA PERIODS,1,1,Data,Sunday, 1/ 1,12/31
#C1 Time in seconds. Beginning of a year is 0s.
#C2 Dry bulb temperature in Celsius at indicated time
#C3 Dew point temperature in Celsius at indicated time
#C4 Relative humidity in percent at indicated time
#C5 Atmospheric station pressure in Pa at indicated time
#C6 Extraterrestrial horizontal radiation in Wh/m2
#C7 Extraterrestrial direct normal radiation in Wh/m2
#C8 Horizontal infrared radiation intensity in Wh/m2
#C9 Global horizontal radiation in Wh/m2
#C10 Direct normal radiation in Wh/m2
#C11 Diffuse horizontal radiation in Wh/m2
#C12 Averaged global horizontal illuminance in lux during minutes preceding the indicated time
#C13 Direct normal illuminance in lux during minutes preceding the indicated time
#C14 Diffuse horizontal illuminance in lux  during minutes preceding the indicated time
#C15 Zenith luminance in Cd/m2 during minutes preceding the indicated time
#C16 Wind direction at indicated time. N=0, E=90, S=180, W=270
#C17 Wind speed in m/s at indicated time
#C18 Total sky cover at indicated time
#C19 Opaque sky cover at indicated time
#C20 Visibility in km at indicated time
#C21 Ceiling height in m
#C22 Present weather observation
#C23 Present weather codes
#C24 Precipitable water in mm
#C25 Aerosol optical depth
#C26 Snow depth in cm
#C27 Days since last snowfall
#C28 Albedo
#C29 Liquid precipitation depth in mm at indicated time
#C30 Liquid precipitation quantity
0.0 -1.1    -5.5    69  100905  0   1415    254 0   0   0   0   0   0   0   0   0.0 9   5   11.2    1500    9   999999999   0   0.1740  0   88  0.000   0.0 0.0 
7200.0  -1.1    -5.5    69  100905  0   1415    254 0   0   0   0   0   0   0   0   0.0 9   5   11.2    1500    9   999999999   0   0.1740  0   88  0.000   0.0 0.0 
10800.0 -1.9    -5.9    71  100905  0   1415    251 0   0   0   0   0   0   0   0   0.0 7   5   11.2    1500    9   999999999   0   0.1740  0   88  0.000   0.0 0.0 
(以下気象データが続く、省略)

なぜか1時間後のデータ(3600のデータ)がなかった。と思ったら7200から開始のようだ。たぶんアメリカはデータの開始が0時始まりで日本は1時始まりになっているせいだと思う。
System2で読み込むUSA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mosも3600から開始でいずれにせよ0のときのデータは次のデータと同じ値になっているので0時点のデータは初期値として何かしらいれておくということだろうか。だとすると日本のデータは3600に0と同じようにデータをいれておいて計算を0ではなく3600から開始するようにせねばならないように思うのだが、値がないというのはいかがなものだろうか。 手動で調整する必要があるのかもしれない。

前回のMixingVolumeもそうだったが今回のReaderTMY3も全部理解するのは大変そうだった。ちゃんと読み込めばたいしたことないのかもしれないけれどまだ理解が追いついていない。とりあえずの気象データの使い方は分かった(気がする)ので次はvolのポートを増やしてファンで機械換気をしているところを見て行きたい。

OpenModelicaのBuildingsライブラリを学ぶ_その3

概要

OpenModelicaでLBNLのBuildingsライブラリを使う。初心者なのでいろいろ教えていただけるとありがたい。 チュートリアル SpaceCoolingの続きをやる。
使用バージョン
-OpenModelica1.12.0 →たぶんModelica標準ライブラリ3.2.2
-Buildings 5.0.1

チュートリアル SpaceCoolingのSystem1の続き

f:id:kinonotofu:20180508225624p:plain

前回はチュートリアル SpaceCoolingのSystem1に配置されている4つのモデルのうち標準Modelicaライブラリを使っている3つ(theCon、TOut、preHea)のモデルについて見てみた。今回は残りのvolについて見てみる。BuildingsライブラリのMixingVolumeというモデルを使っている。
まずはSystem1.moの該当部分を抜粋で確認。

replaceable package MediumA = Buildings.Media.Air "Medium for air";
Buildings.Fluid.MixingVolumes.MixingVolume vol(
    redeclare package Medium = MediumA,
    m_flow_nominal=mA_flow_nominal,
    V=V,
    energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
    mSenFac=3)
(省略)
equation
  connect(theCon.port_b, vol.heatPort)
  connect(preHea.port, vol.heatPort) 

packageはクラスのまとまりみたいなものらしく、replaceableとかredeclareとかはよく分からないけれど、モデル内のpackageに別のpackageを入れるときの一連の手続きだと思う。volを使うときには中身が空気なのか水なのかなどを指定してやるということだろう。Buildings.Media.Air自体は900行くらいあるのでコードを見ることはしばらく後回しにする。
他のモデルとコネクトしているのはvol.heatPortだけであり、値を設定しているのはMediumとm_flow_nominalとVとenergyDynamicsmとSenFacで5つなのだが、実はMixingVolumeは設定できる部分が多く全ての項目を設定しているわけではない。 OMEdit上の設定画面はこんな感じである。 f:id:kinonotofu:20180524175456p:plain

タブが多い。
m_flow_nominalは流出はvol自体の計算には関係ないので空気の流入量のデフォルト値?だろう。流入空気の温度を設定しているわけでもなさそうなので、計算には使っていない気がするが、チュートリアルのドキュメントによると数値計算上の理由で適切なオーダーに設定する必要があるそうで、ここでは換気回数6回で設定している。
mSenFacは顕熱の熱容量のパラメータで3倍になっているらしい。体積Vの空気(MediumにBuildings.Media.Airを設定している)の3倍の熱容量ということだろうか。家具などを想定して空気よりも多い熱容量を見積もることは多い。 energyDynamicsは結局よくわからない。ここではFixedInitialだが他にDynamicFreeInitialとStedystateInitialとStedystateがある。熱収支式のタイプの選択かと思いきやチュートリアルのドキュメントによるとFixedInitialとした時はOMEdit上でInitializationタブで設定した初期値がvolの初期値になると書いてある。
Mediumはコードに直接書き込まないと設定できないようである。
ややこしいのでコードを読むよりLBNLのホームページへ行ってドキュメントを読んだほうが良い気がするが一応コードも見てみる。

↓Buildings.Fluid.MixingVolumes.MixingVolume

within Buildings.Fluid.MixingVolumes;
model MixingVolume
  "Mixing volume with inlet and outlet ports (flow reversal is allowed)"
  extends Buildings.Fluid.MixingVolumes.BaseClasses.PartialMixingVolume(
    final initialize_p = not Medium.singleState,
    steBal(final use_C_flow = use_C_flow),
    dynBal(final use_C_flow = use_C_flow));

  parameter Boolean use_C_flow = false
    "Set to true to enable input connector for trace substance"
    annotation(Evaluate=true, Dialog(tab="Advanced"));

  Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPort(
    T(start=T_start)) "Heat port for heat exchange with the control volume"
    annotation (Placement(transformation(extent={{-110,-10},{-90,10}})));

  Modelica.Blocks.Interfaces.RealInput[Medium.nC] C_flow if use_C_flow
    "Trace substance mass flow rate added to the medium"
    annotation (Placement(transformation(extent={{-140,-80},{-100,-40}})));

equation
  connect(heaFloSen.port_a, heatPort)
    annotation (Line(points={{-90,0},{-96,0},{-100,0}}, color={191,0,0}));
  connect(C_flow, steBal.C_flow) annotation (Line(points={{-120,-60},{-80,-60},
          {12,-60},{12,6},{18,6}}, color={0,0,127}));
  connect(C_flow, dynBal.C_flow) annotation (Line(points={{-120,-60},{-52,-60},
          {52,-60},{52,6},{58,6}}, color={0,0,127}));
  annotation (省略);
end MixingVolume;

↓Modelica.Blocks.Interfaces.RealInput

connector RealInput = input Real "'input Real' as connector" annotation ();

はじめに"Mixing volume with inlet and outlet ports (flow reversal is allowed)"とあり逆流できるというのは熱流の向きとかではなくコネクタでのデータの受け渡しが双方向という意味だろうか。とりあえず一方通行のコネクタもあるのだろう。
あと、論理型の変数を使ってif文で変数宣言部分の制御をしていると思われる部分がよくわからない。 というか全体的によく分からないなぁという部分が多い。
MixingVolumesはかなり複雑でモデルを追っていくのが大変なので継承元の Buildings.Fluid.MixingVolumes.BaseClasses.PartialMixingVolume も Buildings.Fluid.Interfaces.LumpedVolumeDeclarations も全部見ることはしばらく後回しにする。

計算結果の確認

f:id:kinonotofu:20180530074432p:plain

volの温度の初期値はデフォルトでは20℃らしい。温度-10℃と熱コンダクタンス10000/30W/Kでつながっており、発熱1000Wともつながっている。温度が徐々に下がってだいたい-7℃で定常状態になっている。温度差3℃、熱コンダクタンス10000/30の熱流が1000Wでつなぎこんだ発熱と釣り合っているのでm_flow_nominalを設定しているものの予想通り換気による温度変化はここでは計算されていないと考えられる。
とりあえずvolについて今のところ分かったことは、Mediaで満たされたボリュームで熱容量を設定できる、換気量も設定できる(今回は計算していない。粉塵などの計算もある。)、温度と熱流を持つ点をつなぐことで非定常の温度変化を確認することができるということだろうか。volを満たしたMediaの温度変化分の熱量とコネクタでつながれた点の熱流の収支がバランスされるようになっていると言う理解でいいと思う。 次からSystem2に取り組んでいくけれど、けっこう分からないことが多いのでOMNotebookも少しずつ読んで勉強したほうがいいと感じた。

OpenModelicaのBuildingsライブラリを学ぶ_その2

概要

OpenModelicaでLBNLのBuildingsライブラリを使う。初心者なのでいろいろ教えていただけるとありがたい。 チュートリアル SpaceCoolingの続きをやる。(あまりチュートリアル関係ないかも)
使用バージョン
-OpenModelica1.12.0 →たぶんModelica標準ライブラリ3.2.2
-Buildings 5.0.1

チュートリアル SpaceCoolingのSystem1の続き

f:id:kinonotofu:20180508225624p:plain

前回は.moファイルを眺めてなんとなくの書き方を把握した。今回はもう少し理解を深める。 チュートリアル SpaceCoolingのSystem1は4つのモデルがコネクトされているモデルである。
* vol室(Buildings.Fluid.MixingVolumes.MixingVolume)
* theCon熱コンダクタンス(Modelica.Thermal.HeatTransfer.Components.ThermalConductor)
* TOut外気(Modelica.Thermal.HeatTransfer.Sources.FixedTemperature)
* preHea熱流(Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow)

室(vol)の中で発熱があり(preHea)、壁の熱伝導とか表面の熱伝達とか込みの熱コンダクタンスtheConを通して外気(TOut)へ熱が逃げているというモデルだと思う。 さらにvol以外はModelica標準ライブラリを使用している。ということでvolは後回しにして先に他のモデルを見る。

theCon

f:id:kinonotofu:20180522161542p:plain
↓Modelica.Thermal.HeatTransfer.Components.ThermalConductor

model ThermalConductor  
    "Lumped thermal element transporting heat without storing it"  
  extends Interfaces.Element1D;  
  parameter Modelica.SIunits.ThermalConductance G  
    "Constant thermal conductance of material";  
equation  
  Q_flow = G*dT;  
  annotation (省略);  

熱コンダクタンスと温度差の乗算で熱流が求まるということだと思うがなんとなくしか分からない。
extends Interfaces.Element1Dとあり、Modelica.Thermal.HeatTransfer.Interfaces.Element1Dを継承しているようである。
Element1Dをみてみる。
↓Modelica.Thermal.HeatTransfer.Interfaces.Element1D

partial model Element1D
  "Partial heat transfer element with two HeatPort connectors that does not store energy"
  Modelica.SIunits.HeatFlowRate Q_flow
    "Heat flow rate from port_a -> port_b";
  Modelica.SIunits.TemperatureDifference dT "port_a.T - port_b.T";
public
  HeatPort_a port_a annotation (Placement(transformation(extent={{-110,-10},
            {-90,10}})));
  HeatPort_b port_b annotation (Placement(transformation(extent={{90,-10},{
            110,10}})));
equation
  dT = port_a.T - port_b.T;
  port_a.Q_flow = Q_flow;
  port_b.Q_flow = -Q_flow;
  annotation (省略);
end Element1D;

partial model Element1Dのpartialがよくわからないが、継承専用の型のモデルということだろうか。 変数はQ_flow、dT、port_a、port_b。publicってどういう要素なのだろう。書かなくても計算結果はみれるし、ポートだから必要というわけでもなさそうだし、他のモデルからコネクト以外のところで値を参照されるとわけがわからなくなりそうだし。とりあえず各要素をもう少し詳しく見る。 ↓Modelica.SIunits.HeatFlowRate

type HeatFlowRate = Real (final quantity="Power", final unit="W");

↓Modelica.SIunits.TemperatureDifference

type TemperatureDifference = Real (
    final quantity="ThermodynamicTemperature",
    final unit="K") annotation(absoluteValue=false);

↓Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a

connector HeatPort_a
  "Thermal port for 1-dim. heat transfer (filled rectangular icon)"
  extends HeatPort;
  annotation(省略);
end HeatPort_a;

↓Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b

connector HeatPort_b
  "Thermal port for 1-dim. heat transfer (unfilled rectangular icon)"
  extends HeatPort;
  annotation(省略);
end HeatPort_b;

↓Modelica.Thermal.HeatTransfer.Interfaces.HeatPort

partial connector HeatPort "Thermal port for 1-dim. heat transfer"
  Modelica.SIunits.Temperature T "Port temperature";
  flow Modelica.SIunits.HeatFlowRate Q_flow
    "Heat flow rate (positive if flowing from outside into the component)";
  annotation (省略);
end HeatPort;

HeatPortの作りがややこしいけれどこういう書き方をするものなのか。aとbは色以外の違いが分からないと思っていたがどうやらそのようらしい。aが入力でbが出力みたいに使って計算の流れをつかみやすくしているだけで、たぶんbから入力するプログラムを作っても正常に動作はするのだろう。
あとポートの熱流は外からモデルの中へ向かう方向が正となるようにしましょうということらしい。熱流の方向はよく忘れるのですぐに確認出来るようにしたい。
基本的に変数は名称(final quantity)と単位(final unit)を指定しているだけと思っていたが温度はもう少し細かい設定があった。 Modelica.SIunits.Temperatureはtype Temperature = ThermodynamicTemperature; となっており
↓Modelica.SIunits.ThermodynamicTemperature

type ThermodynamicTemperature = Real (
    final quantity="ThermodynamicTemperature",
    final unit="K",
    min = 0.0,
    start = 288.15,
    nominal = 300,
    displayUnit="degC")
  "Absolute temperature (use type TemperatureDifference for relative temperatures)"
                                                                                                      annotation(absoluteValue=true);

最小値、初期値、デフォルト値?表示上の単位の切り替え選択肢を設定しているようである。単位の切り替えは図のようにできる。
f:id:kinonotofu:20180522174848p:plain

TOut

f:id:kinonotofu:20180522172529p:plain
↓Modelica.Thermal.HeatTransfer.Sources.FixedTemperature

model FixedTemperature "Fixed temperature boundary condition in Kelvin"
  parameter Modelica.SIunits.Temperature T "Fixed temperature at port";
  Interfaces.HeatPort_b port annotation (Placement(transformation(extent={{90,
            -10},{110,10}})));
equation
  port.T = T;
  annotation (省略);
end FixedTemperature;

port.TにTを固定値として設定してやるというシンプルなもの。
やはりbのポートは出力用、aのポートは入力用として使おうという暗黙の了解が感じられる。 port.Q_flowはリンク先の熱流をそのまま返すのだろうか。

preHea

f:id:kinonotofu:20180522175242p:plain
↓Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow

model FixedHeatFlow "Fixed heat flow boundary condition"
  parameter Modelica.SIunits.HeatFlowRate Q_flow
    "Fixed heat flow rate at port";
  parameter Modelica.SIunits.Temperature T_ref=293.15
    "Reference temperature";
  parameter Modelica.SIunits.LinearTemperatureCoefficient alpha=0
    "Temperature coefficient of heat flow rate";
  Interfaces.HeatPort_b port annotation (Placement(transformation(extent={{90,
            -10},{110,10}})));
equation
  port.Q_flow = -Q_flow*(1 + alpha*(port.T - T_ref));
  annotation

↓Modelica.SIunits.LinearTemperatureCoefficient

type LinearTemperatureCoefficient = Real(final quantity = "LinearTemperatureCoefficient", final unit="1/K");

熱流はモデルから外へ出ていく方向が正になるように設定する。内容はTOutとだいたい同じかと思いきや違った。HeatPort_bにQ_flowを固定値として設定してやるだけでなくLinearTemperatureCoefficientのalphaとport.TとT_refとで熱流量に補正?をいれられるらしい。port.Tはリンク先の温度をそのまま返すのだろうか。あとT_ref=293.15はあとで打ちかえられるようなので定数ではなくデフォルト値という扱いである。
f:id:kinonotofu:20180522181613p:plain
今日はここまで。Buildingsライブラリに全く触れずに標準ライブラリのモデルを見ているだけだった。ポートの仕様がよくわからんなぁ。。。それぞれのモデルで固定値を渡してしまったり、どちらも計算してなくて値が定義されなくなったりとか、エラーの元になる気がするんだがそういう場合は繋げないとかなってるのだろうか。もう少し細かい指定が出来ても良い気はした。
個々のモデルの作りがちょっと分かったような気がするがまだまだ理解が甘い。でもマニュアルゴリゴリ読むのはモチベーションが足りないのでなんとなく触りながら理解していく方針でがんばる。もう少し理解が進んだらいろいろ動作確認しないとだなぁ。
次はBuildings.Fluid.MixingVolumes.MixingVolumeの中身をみる予定。

OpenModelicaのBuildingsライブラリを学ぶ_その1

概要

前回はとりあえずOpenModelicaをインストールして動かしてみただけだったので今回からはチュートリアルSpaceCoolingの中身を少しずつみていく。このブログは出来るヤツが知識を教えるのではなく初心者がもがく様子を公開するブログなのでご理解を。
各バージョンは以下の通り
-OpenModelica1.12.0 →Modelica標準ライブラリ3.2.2を使っているが詳細な対応状況は不明
-Buildings 5.0.1

Modelicaについて

Modelicaというのはシミュレーション用の言語で以下のような使い方をする、と思う。
1. 計算モデルのコンポーネントをあらかじめ作成しておく。 (ポンプとか制御モデルとか)
2. 各コンポーネントの設定値や初期値などの変数を設定する。
3. 各コンポーネント同士のアウトプットとインプットをつないでシステムをつくる。
4. 計算して時々刻々と変化する各コンポーネントの変数が出力される。

単体の挙動を把握しているものがシステムにつながれた時にどう振る舞うかを計算するのだ。
ちなみにOpenModelicaはModelica言語のOSSでの実装の1つであり、 OpenModelica Connection Editor(OMEdit)は手軽にシステムを組む事ができるGUIである。どこがつながっているのか確認するのはテキストより画像のほうが楽なのでGUIはありがたい。

Buildingsライブラリについて

有名なところ(アメリカのローレンス・バークレー国立研究所LBNL)が作っているので使いはじめただけで他のものと比較してどうなのかは不明。その名のとおり建物関係のライブラリではあるのだが基本的に温熱環境や空調設備のみを取り扱っている。開発側はOpenModelicaでの挙動確認はしておらずDymolaとJModelicaでのみ挙動確認をしている。
Exampleファイルはたくさんあるので要領をつかんだらサンプル見て書き替えてというのはできるはず。

ライブラリの設定

OpenModelicaにはじめからついてるバージョンは3.0.0だが最新のBuildings 5.0.1を使うことにする。LBNLのサイトからダウンロードしてきて「ファイル→モデル/ライブラリを開く」からBuildings 5.0.1のpackage.moを開くと拾ってきたライブラリを使える。
毎回これやるのは面倒なので、Windowsの場合はたぶんCドライブ直下にOpenModelicaのフォルダがありlib/omlibraryの中に拾ってきたBuildings 5.0.1を投げ込む。バージョン違いがいっぱい入ってるがどうやらこれで最新バージョンを読み込んでくれるらしい。(やり方違っていたらごめんなさい)
さらに「ツール→オプション」のライブラリのところ追加を押してBuildingsを選ぶ。この画面のバージョンのところの設定はよく分からなかった。
f:id:kinonotofu:20180516202700p:plain
OMEditを再起動するとはじめからBuildingsライブラリを読み込んでくれる。

チュートリアル SpaceCooling

このライブラリのチュートリアルはBoilerもあるのだけれど7ステップあってめんどくさそうなのでSpaceCoolingをみることにした。
まずはSystem1から。
Buildings→Examples→Tutorial→SpaceCooling→System1をダブルクリック。
これでチュートリアルのファイルをみることが出来る。 f:id:kinonotofu:20180508225624p:plain
このダイアグラムの上にあるアイコンをクリックするとダイアグラムビューとテキストビューの切り替えやドキュメントの表示ができる。

テキストビューで確認できるコードは以下のとおり。
.moファイルを直接編集できるようである。

within Buildings.Examples.Tutorial.SpaceCooling;
model System1
  extends Modelica.Icons.Example;
  replaceable package MediumA = Buildings.Media.Air;

  Buildings.Fluid.MixingVolumes.MixingVolume vol(
    redeclare package Medium = MediumA,
    m_flow_nominal=mA_flow_nominal,
    V=V,
    energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
    mSenFac=3)
    annotation (Placement(transformation(extent={{60,20},{80,40}})));
  Modelica.Thermal.HeatTransfer.Components.ThermalConductor theCon(G=10000/30)
    annotation (Placement(transformation(extent={{20,40},{40,60}})));
  parameter Modelica.SIunits.Volume V=6*10*3; 
  parameter Modelica.SIunits.MassFlowRate mA_flow_nominal = V*6/3600;
  parameter Modelica.SIunits.HeatFlowRate QRooInt_flow = 1000;
  Modelica.Thermal.HeatTransfer.Sources.FixedTemperature TOut(T=263.15)
    annotation (Placement(transformation(extent={{-20,40},{0,60}})));
  Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow preHea(Q_flow=
        QRooInt_flow) "Prescribed heat flow"
    annotation (Placement(transformation(extent={{20,70},{40,90}})));
equation
  connect(TOut.port, theCon.port_a) annotation (Line(
      points={{5.55112e-16,50},{20,50}},
      color={191,0,0},
      smooth=Smooth.None));
  connect(theCon.port_b, vol.heatPort) annotation (Line(
      points={{40,50},{50,50},{50,30},{60,30}},
      color={191,0,0},
      smooth=Smooth.None));
  connect(preHea.port, vol.heatPort) annotation (Line(
      points={{40,80},{50,80},{50,30},{60,30}},
      color={191,0,0},
      smooth=Smooth.None));
  annotation (Documentation(info="<html>
(略)
</html>"),
    __Dymola_Commands(file=
     "modelica://Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SpaceCooling/System1.mos"
        "Simulate and plot"),
    experiment(Tolerance=1e-6, StopTime=10800));
end System1;

ダブルクォーテーションで囲ってあるコメントと最後のドキュメントのHTMLは省いてある。
要約するとこんな感じの構成である。

within Buildings.Examples.Tutorial.SpaceCooling;ライブラリのツリー内の位置  
model System1 このファイル(クラス)の名前  
  extends Modelica.Icons.Example; GUI上のアイコンの指定  
  replaceable package MediumA = Buildings.Media.Air; わからない    
 (コンポーネントや変数の定義)  
equation  
 (コンポーネント同士をつなぐ部分)
 annotation (Documentation(info="<html> 
 (ドキュメントビューの内容)
    </html>"),
    (Dymolaのコマンドだからいらないはず),
    experiment(Tolerance=1e-6, StopTime=10800)); 計算条件の設定
end System1;    ファイル終わり  

このシステムで使っているコンポーネントは4つ
* 室(Buildings.Fluid.MixingVolumes.MixingVolume)右下
* 熱コンダクタンス(Modelica.Thermal.HeatTransfer.Components.ThermalConductor)中下
* 外気(Modelica.Thermal.HeatTransfer.Sources.FixedTemperature)左
* 熱流(Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow)中上
コンポーネントの括弧の中の値の設定はダイアグラムのそれぞれのアイコンをダブルクリックして行えるものが反映されている。数字を直接入力しても変数名を入力してもいいらしい。
annotation (Placement(transformation(extent={{60,20},{80,40}})))はGUI上のアイコンの位置。

変数は以下の3つ。型でエラーチェックしてるのだろうか。
テキストビューで直打ちじゃないと設定できないかもしれない。
* parameter Modelica.SIunits.Volume V=6103;
* parameter Modelica.SIunits.MassFlowRate mA_flow_nominal = V*6/3600;
* parameter Modelica.SIunits.HeatFlowRate QRooInt_flow = 1000;

コンポーネント同士を繋ぐ部分は以下の3つ。
一つのポートに複数のコンポーネントが繋げる。
* connect(TOut.port, theCon.port_a);
* connect(theCon.port_b, vol.heatPort);
* connect(preHea.port, vol.heatPort);
計算条件は「シミュレーション→シミュレーションのセットアップ」で設定できる。下のシミュレートにチェックをつけてOKすると計算を実行する。
Save experiment annotation inside modelにチェックをいれないと計算条件は保存されなさそうである。
f:id:kinonotofu:20180516213746p:plain

少しは分かってきたがまだまだわからないことが多い。 まぁぼちぼちと。次もまだこのチュートリアルのSystem1と戦っていると思う。

棋譜をVTK形式で見てみる

昨年の竜王戦あたりから観る将になった。 コンピュータ将棋にも興味をもつようになった。 自分もなにかしてみようと思ったけど、人工知能に詳しいわけでもなく、プログラミングが出来るわけでもない。どちらも興味はあるし、やれば学べることは多いと思うがなにか違うことがしたい。

自分は初心者なので、将棋の対局で何が起こっているのか全然分からない。 だからまずいろいろ可視化してみようと思った。観る将から視る将へ。 とはいえプログラミング能力が低いのでなるべく手軽に手を付けたい。 vtk形式で書き出してparaviewで読み込むことにした。 vtk形式は以下を参考にした。 qiita.com

棋譜は第28回世界コンピュータ将棋選手権結晶リーグのApery対妖怪惑星Qhapaqのものを大会HPから頂戴した。 はじめてお目にかかる棋譜ファイル。CSA形式は検索したらすぐにフォーマットがわかった。 データは9×9の各マスに駒に対応する数値データを以下のようにいれていくことにした。 一手毎の各局面を積み重ねていって一番下が初期配置、一番上が投了時点の局面となっている。 空白のマス:99 歩兵FU:1、と金TO:2 香車KY:3、成香NY:4 桂馬KE:5、成桂NK:6 銀将GI:7、成銀NG:8 金将KI:9 角行KA:10、竜馬UM:11 飛車HI:12、竜王RY:13 玉将OU:14 先手駒が正の値、後手駒が不の値

f:id:kinonotofu:20180511001812p:plain

先手が青で後手が赤。空白はのセルはThreshold付けて最大値14にして見えないようにした。 んーもうちょっと感覚的にわかるようにならないものか。 きれいな絵を作るだけでもいいかもしれないけどそれはそれで難しそうだし。 一応ファイルは下から。ParaViewじゃなくてもvtk形式に対応していればたぶんみれるはず。

kifu.vti - Google ドライブ

気が向けば断面切ったりいろいろどうぞ。