ModelicaのBuildingsライブラリのHeatTransferを学ぶ_その1
概要
OpenModelicaでLBNLのBuildingsライブラリを使う。初心者なのでいろいろ教えて頂けるとありがたい。
前回はThermalZones.Detailed.MixedAirの自然室温計算を見ていった。そのままMixedAirを使っていろいろやってもよかったのだけれど、MixedAirに組み込まれている伝熱現象を理解するためにも先にBuildings.HeatTransferのパッケージについて読んだほうがいい気がしたので少し脱線してこちらに取り組む。全体をざっと見た後に単層壁の非定常熱伝導の計算をする。
使用バージョン
-OpenModelica1.12.0 →Modelica標準ライブラリ3.2.2
-Buildings 5.1.0
Buildings.HeatTransferの構成
基本的な伝熱はModelica標準ライブラリだとModelica.Thermal.HeatTransferを使うことになるが、建築で使う形としてモデルを整えているのがこのパッケージである。以下の様な構成になっており、伝導、対流、放射の伝熱の3要素やそれらが複合的に作用する窓のモデル、素材のデータのモデルなどがある。今回はこれらの全体像を見ていくことにする。ちなみに熱伝導のいくつかの部分や窓のモデルにOpenModelicaだと動かない物があるようだ。
名称 | 説明 |
---|---|
UsersGuide | ユーザーガイド |
Conduction | 熱伝導モデルのパッケージ |
Convection | 対流熱伝達のパッケージ |
Radiosity | 放射熱伝達のパッケージ |
Sources | 熱ソース |
Windows | 窓のモデルのためのパッケージ |
Data | 熱伝達モデルのためのデータ |
Types | 型定義のパッケージ |
Examples | モデルの使用方法とテストモデルを示すモデル群 |
Interfaces | 熱伝達モデルのインターフェースのパッケージ |
Buildings.HeatTransfer.Conductionの構成
nSupPCMという定数がConductionフォルダのpackage.moに書きこんである。この定数はPCM(phase change material)という使用温度帯で相変化をすることで見かけ上の熱容量を大きくした素材の熱伝導を計算するのに使用する。
SingleLayerは壁などの面の厚さ方向の一次元熱伝導計算を単一素材で計算するもので、MultiLayerはSingleLayerを複数並べたのもになっている。境界条件は表面のHeatPortで与えている。SingleLayerCylinderは配管の熱損失などに使うと思うのだが単一素材のモデルしかないので複数素材のときは自分で複数のモデルをつないでやる必要がある。
熱伝導のサンプルファイルはHeatTransfer全体のExampleのところにある。
名称 | 説明 |
---|---|
MultiLayer | 多層壁の熱伝導のためのモデル |
SingleLayer | 単層壁の熱伝導のためのモデル |
SingleLayerCylinder | 円筒の熱伝導 |
nSupPCM=6 | u(T)の近似関係を設定する点数 PCMにのみ使用する |
BaseClasses | Buildings.HeatTransfer.Conductionのための部分クラス |
Buildings.HeatTransfer.Convectionの構成
対流熱伝達は屋外側と室内側に分かれており、流体は空気のみなので液体の対流熱伝達率に使うとすれば固定値で入力することしかできない。室内側は面の向き毎(壁、床、天井)の温度差による関数で計算しており斜面の計算式はなく床でも天井でもなければすべて壁として同一の値になる。屋外側は室内側で使用した温度差の計算式による熱伝達に、風速と風向の関数による強制対流の熱伝達を加えたものになっている。境界条件は固体側と流体側それぞれ表面のHeatPortで与えている。
名称 | 説明 |
---|---|
Exterior | 屋外側の対流熱伝達モデル |
Interior | 室内側の対流熱伝達モデル |
Functions | 対流熱伝達のための関数 |
Examples | モデルの使用方法とテストモデルを示すモデル群 |
BaseClasses | Buildings.HeatTransfer.Convectionのための部分クラス |
サンプルファイルは以下の二つである。
名称 | 説明 |
---|---|
Exterior | 屋外側対流熱伝達のテストモデル |
Interior | 室内側対流熱伝達のテストモデル |
Buildings.HeatTransfer.Radiosityの構成
熱放射は放射する物質の温度によって波長が異なってくるが、建築の分野では主に短波(日射)と長波(赤外線、身の回りの物質の放射や夜間放射)に分けて計算する。単純に放射熱伝達と言うと長波のことを指すことが多いが、ここでのモデルも長波のためのモデルを取り扱っている。計算式は基本的に窓の計算のためのモデルTARCOG 2006によるが、OutdoorRadiosityは不透明壁体にも使えるように変更があるらしい。
放射は正の値のみをとるコネクタとして放出Buildings.HeatTransfer.Interfaces.RadiosityOutflowと吸収Buildings.HeatTransfer.Interfaces.RadiosityInflowがそれぞれあり、その差が放射熱伝達量となりHeatPortの熱流として得ることができる。線形近似による計算もできるようなのだが、Heatportが一つしかなく相手側の温度はParameterで与えているため使いどころがちょっとわからない計算になっている。
IndoorRadiosityは放射率1で反射なし、OpaqueSurfaceは反射あり。OutdoorRadiosityは天空温度と外気温度(地表面温度)と天空形態係数から室外側の放射計算をしている。RadiositySplitterは一つの放射のコネクタを割合を指定して2つに分割している。形態係数を使って放射を割り振るにはもう少し機能が欲しいところではないかと思う。
名称 | 説明 |
---|---|
Constant | 定常放射熱流束 |
IndoorRadiosity | 室内側熱放射のモデル |
OpaqueSurface | 不透明表面のモデル |
OutdoorRadiosity | 窓に到達する屋外側熱放射のモデル |
RadiositySplitter | 入力信号により入射した放射を二つに分割するモデル |
Examples | モデルの使用方法とテストモデルを示すモデル群 |
BaseClasses | Buildings.HeatTransfer.Radiosityのための部分クラス |
Constantは定数ではなくConstantという名前のBlockであり放射熱流束のコネクタに固定値を与えている。計算上はModelica.Blocks.Sources.Constantとほぼ変わらないのだが、用途が明確になる。
block Constant parameter Real k(min=0, start=0) extends Modelica.Blocks.Icons.Block; Interfaces.RadiosityOutflow JOut; equation JOut = k; end Constant;
例は以下の二つである。
名称 | 説明 |
---|---|
OpaqueSurface | 不透明表面の室内側のソースのテストモデル |
OutdoorRadiosity | 屋外側の放射のテストモデル |
Buildings.HeatTransfer.Interfacesの構成
Interfacesは放射のものしかなくシンプルなのでここで説明しておく。最低値が0の熱流量のみのコネクタでISO 1の標準基準温度(293.15K、20℃)のときの放射量がデフォルト値となっている。
定義は以下の通り。
名称 | 説明 |
---|---|
RadiosityInflow | 放射熱流束の放出側のコネクタ |
RadiosityOutflow | 放射熱流束の吸収側のコネクタ |
connector RadiosityInflow = input Real(min=0, final unit="W", nominal=419) connector RadiosityOutflow = output Real(min=0, final unit="W", nominal=419)
Buildings.HeatTransfer.Sourcesの構成
Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlowなどをシンプルにしたもの。Prescribedがつくと他のモデルから値をもらってくるのも同じである。FixedHeatFlow0による除算の可能性をなくすためにパラメータのalphaとT_refをなくしているらしいがFixedTemperatureは同じものである。
名称 | 説明 |
---|---|
FixedHeatFlow | 固定熱流束境界条件 |
FixedTemperature | 絶対温度[K]での固定温度境界条件 |
PrescribedHeatFlow | 熱流束を入力する境界条件 |
PrescribedTemperature | 絶対温度[K]を入力する境界条件 |
Buildings.HeatTransfer.Windowsの構成
窓の計算はけっこう複雑である。今回は何があるかを見るだけにして後でもう少し細かく見ていきたい。
BeamDepthInRoomは任意の高さの平面上で日射が窓からどこまで差し込むかを計算する。窓には庇もつけられ、太陽位置は気象データを読み込むようである。ExteriorHeatTransferは外ブラインド等の日射遮蔽物付きの窓の対流と放射の熱伝達のモデルである。屋外側用のモデルなので天空放射や風による対流熱伝達の上昇も見込んでいる。InteriorHeatTransferConvectiveは内ブラインド等の日射遮蔽物付きの窓の対流と放射の熱伝達のモデルで室内側のモデルなので屋外側よりは少しシンプルになっているが少し複雑な印象をうける。FixedShadeは庇と袖壁があったときの窓面日射量と日射面積の割合を出力するモデルで窓のデータのレコードを入力する必要がある。OverhangとSideFinsはそれぞれ庇と袖壁の独立したモデルである。Windowがいわゆる窓の計算のモデルでWindowというソフトのバージョン5時点で同じ計算法(TARCOG 2006
)で実装したらしい。その他BaseClassesにPartialでない普通のmodelやらblockやらがたっぷりある。
名称 | 説明 |
---|---|
BeamDepthInRoom | 室内での直達日射の深さ |
ExteriorHeatTransfer | (日射遮蔽物のある)窓の屋外側表面の対流熱伝達と放射熱伝達のモデル |
FixedShade | 庇や袖壁による日影のモデル |
InteriorHeatTransferConvective | (日射遮蔽物のある)窓の室内側表面の対流熱伝達のモデル |
Overhang | 庇のある窓のモデル |
SideFins | 袖壁のある窓のモデル |
Window | 窓のモデル。 |
Functions | 窓の放射モデルに使用する関数 |
Examples | モデルの使用方法とテストモデルを示すモデル群 |
BaseClasses | Buildings.HeatTransfer.Windowsのための部分クラス |
窓のサンプルモデルは以下のとおり。BeamDepthInRoomやBoundaryHeatTransferは計算はできており、OverhangやSideFinsはエラーをだしながらも一応計算している。ただしその他の窓の物性値を使ったモデルの計算がうまくいかなさそうである。
名称 | 説明 |
---|---|
BeamDepthInRoom | 室内での直達日射の深さのテストモデル |
BoundaryHeatTransfer | 窓の境界条件の熱伝達のテストモデル |
ElectrochromicWindow | 電気で透明度が変わる窓 |
FixedShade | 固定日影のテストモデル |
Overhang | 窓の庇のテストモデル |
SideFins | 窓の袖壁の使用法 |
Window | 窓のテストモデル |
Windowのエラー
Buildings.HeatTransfer.Dataの構成
壁体などに使う素材の物性値をまとめたrecord(変数のセット)用のパッケージである。
ある程度の素材や素材の組み合わせはデフォルトで作られているが、それぞれGenericというrecordに値を入れて好きな素材の物性値を使うことができる。GasesのAirはMediaのAirとは違いGlazingSystemsの窓の中空層で使われている。中空層のAirがよくエラーを吐いているような気がするのだがたぶん直すのはWindowの方だろう。
名称 | 説明 |
---|---|
BaseClasses | 部分クラス |
BoreholeFillings | 掘削穴の充填材 |
Gases | 窓の充填ガスの熱物性 |
Glasses | 窓のガラスの熱物性 |
GlazingSystems | 窓の熱物性 |
OpaqueConstructions | 床や壁などの不透明材の構成 |
OpaqueSurfaces | 不透明材の表面の熱物性 |
Resistances | 熱抵抗 |
Shades | 日射遮蔽物(ブラインドなど)の熱物性 |
Soil | 熱コンダクタンス、密度、比熱容量により記述された土壌 |
Solids | 熱コンダクタンス、密度、比熱容量により記述された固体 |
SolidsPCM | 熱コンダクタンス、密度、比熱容量により記述された固体(PCM) |
Buildings.HeatTransfer.Typesの構成
3つの列挙型が定義されている。
名称 | 説明 |
---|---|
ExteriorConvection | 屋外側表面の対流熱伝達モデルを定義する列挙型 |
InteriorConvection | 室内側表面の対流熱伝達モデルを定義する列挙型 |
SurfaceRoughness | 表面の粗度を定義する列挙型 |
type ExteriorConvection = enumeration( Fixed "Fixed coefficient (a user-specified parameter is used)", TemperatureWind "Wind speed and temperature dependent") type InteriorConvection = enumeration( Fixed "Fixed coefficient (a user-specified parameter is used)", Temperature "Temperature dependent") type SurfaceRoughness = enumeration( VeryRough "Very rough", Rough "Rough", Medium "Medium rough", MediumSmooth "Medium smooth", Smooth "Smooth", VerySmooth "Very smooth") ;
Buildings.HeatTransfer.Examplesの構成
熱伝導の例ばかりで対流や放射や窓はそれぞれ独立に例を持っているので、Conductionに入れてしまえばいいような気がする。ConductorSingleLayerPCMは変換ができず、ConductorSteadyStateTransientとConductorStepResponseは計算開始直後にエラーを吐いて終了してしまう。
名称 | 説明 |
---|---|
ConductorInitialization | 熱伝導の初期化のテストモデル |
ConductorMultiLayer | 多層壁の熱伝導のテストモデル |
ConductorMultiLayer2 | 表面の層aに条件を与えた多層壁熱伝導のテストモデル |
ConductorMultiLayer3 | 表面の層aとbに条件を与えた多層壁熱伝導のテストモデル |
ConductorSingleLayer | 単層壁の熱伝導のテストモデル |
ConductorSingleLayer2 | 表面の層に条件を与えない単層壁熱伝導のテストモデル |
ConductorSingleLayerCylinder | 円筒の熱伝導のテストモデル |
ConductorSingleLayerPCM | PCMの熱伝導のテストモデル |
ConductorSteadyStateTransient | 定常条件での過渡応答の熱伝導のテストモデル |
ConductorStepResponse | ステップ応答の熱伝導のテストモデル |
ConductorSingleLayerPCMのエラー
ConductorSteadyStateTransientやConductorStepResponseのエラー
ここでDebug moreを押すと以下のような画面が表示される。使い方がよくわからないがうまく使えばもう少しデバッグがやりやすくなるかもしれない。ただし変換ができないものには使えなさそうである。
PCMの単層壁の計算
なにがあるかをなんとなく見ていっただけになるのも何なので単層壁の熱伝導の計算を確認してみる。PCMの熱伝導の計算はサンプルファイルではエラーがでていたが、PCM自体は普通に計算できるようなので使ってみる。
PCM20というデフォルトで用意されている素材を厚さ0.1m、初期温度30℃として片側を30℃、もう片側を対流熱伝達(壁の温度差で計算)をはさんで0℃として計算した。モデルは以下のようになる。上のほうにあるのがPCMのrecordである。
PCMの設定は以下のとおり。厚さ以外は特にいじっていない。
計算結果は以下の通り。壁体はSinglelayerで素材が一つでも計算は3層に分かれて計算されており、0℃に近い側の層が層変化の温度体(23℃~27℃)で緩やかな温度変化になっている。真ん中の層も27℃になると温度変化がゆるやかになっている。
おわりに
今回はHeatTransferの全体像を見ていき、単層壁の伝熱計算を確認した。
このあたりのモデルは別に建築に限らず使ってもよい気もするけれど建築独特の計算法とか結構あるのだろうか。建築の中でも計算のモデル細かさが違ってきたりするのでなんともいえない部分はあるとは思うがどうだろう。デバッグに関してはMixedAirがOpenModelicaで動かないのは今回の熱伝導のいくつかのサンプルや窓のモデルが動いていないのが原因だと思うのでもう少し細かく見ながらあれこれいじれたらと思う。
今度のModelica勉強会でブログでやったことを少しまとめて発表しようと思います。ブログを書き始めて半年経つそうなのでそろそろ振り返って手を加えたりもしたいしよい機会になればよいかなぁと。ブログでとりあえずライブラリを探検していって勉強会でしっかりまとめるとかでもいいかもしれない。
次回は熱伝導のモデルをもう少し詳しく確認しようと思う。一つの素材の中に状態定義点が複数あるときに表面で定義するかどうかでどういう扱いになっているかとか。あとサンプルでなぜエラーを吐いているかも確認したい。エラーを吐いているのはモデルが多めなので一度減らして少しずつ動作の確認をすればなんとかなるはずだと思いたい。