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 ドライブ

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

OpenModelicaはじめます

OpenModelicaは計算モデルを繋げてシミュレーションするプログラムらしい。 需要がどれだけあるのかは知らない。 同じModelicaでもJModelicaはサイトが放置されてそうだったのでこれにしてみた。 検索すると日本人で触ってみている人がちょいちょい見つかる。

とりあえずここからダウンロードしてインストール。Windows環境なので.exe実行するだけ。 重い。

openmodelica.org

目当てはBuildingsライブラリ。 アメリカのローレンス・バークレー国立研究所が作ったらしい。 何にせよ遊べればいい。

インストールしたらOMEdit(OpenModelica Connection Editor)を起動する。 ライブラリがめちゃくちゃいっぱいある。

インストール時に同梱のBuildingsライブラリのバージョンは3.0.0だ。 最新のは自分で拾ってきたほうがよさそうである。 他にも気になるライブラリがいっぱいあるので当分遊べそう。

f:id:kinonotofu:20180508225846p:plain

ライブラリのModelicaのバージョン(3.2.1)と自分の環境のバージョン(3.2.2)が違うと警告してくる。 サンプルファイルがあるのでSpaceCoolingを開いてみる。 Systemの1~3がありちょっとずつコンポーネントを増やしてつないで行くというのを伝えているのだろう。図はSystem1とSystem3。

f:id:kinonotofu:20180508225624p:plain f:id:kinonotofu:20180508225641p:plain

とりあえず右向きの矢印が実行のようなので押して見る。エラーがでる。 System3がだめだったのでSystem1の方に戻って実行。 成功。 結果を見ていて説明らしきものの存在に気づく。右にずっと書いていたようだ。 右上が文章、中央上が計算結果、右下が計算結果に表示する変数の選択といった感じである。 計算結果とモデリングの画面の切り替えは右下のタブでできる。 結果はcsvで出力できる。 f:id:kinonotofu:20180508230844p:plain

仕事で使えるかは分からないけど遊ぶにはいろいろできそうな可能性を感じた。