OpenFOAM

OpenFOAMの熱流体固体連成のチュートリアル(snappyMultiRegionHeater)

こんにちは(@t_kun_kamakiri

OpenFOAMの熱流体固体連成のチュートリアルの解説を行います。
熱流体と熱伝導による固体の温度変化を解くソルバーを使います。

前回の記事では流体と固体の領域をtopoSetsplitMeshRegionsで行いました。

  1. blockMesh:ベースメッシュの作成
  2. topoSet:cellZoneの作成
  3. cp -r 0.orig 0:0.origフォルダをコピー
  4. splitMeshRegions:topoSetで作成したcellZoneを使って領域分割
  5. changeDictionary:境界条件の変更
  6. chtMultiRegionFoam:計算実行

topoSetだと複雑な形状に対応できなかったり応用が利きづらいところがあります。
そこで、本記事ではsnappyHexMeshを使ったchtMultiRegionFoamのチュートリアルについてまとめておきます。
解析の設定は前回の記事と同じなので割愛します。

OpenFOAMv2036

熱流体固体連成のソルバ

今回は使うのは以下のようなソルバーです。

  • chtMultiRegionFoam
  • chtMultiRegionSimpleFoam
  • chtMultiRegionTwoPhaseEulerFoam

chtMultiRegionFoamとchtMultiRegionSimpleFoamの違いはSimpleFoamと付いている方が定常解析用です。

本記事では非定常解析のchtMultiRegionFoamを使います。

チュートリアルをコピーする

チュートリアルをコピーします。

Allrunスクリプトを確認する

チュートリアルにはAllrunスクリプトが用意されているので、スクリプトの内容を確認すると必要な手順というのがわかります。

並列計算無し用のスクリプトとして「Allrun-serial」があるので、こちらを確認します。
並列計算用のスクリプトを見たい人は「Allrun-parallel」や「Allrun」をご確認ください。

Allrun-serial

では、中身を確認していきましょう。

stlファイルの入手

まずはこちらです。
「constant/triSurface」というフォルダを作成して、「geom.stl.gz」というstlファイルををコピーしています。

コピーしたファイルが圧縮ファイルなので以下のコマンドで解凍します。

stlは各面をregionA_to_regionBのような形で書かれています。

geom.stl

ParaViewで見るとこんな感じ。

FreeCADなどで面に名前を付けるのは簡単にできます。

blockMeshでメッシュ作成

blockMeshを実行します。

以下のコマンドでベースメッシュを作成します。

surfaceFeatureExtract

続いてsltファイルを元に特徴線を作成します。
これは次のsnappyHexMeshで使用されます。

system/surfaceFeatureExtractDict

snappyHexMesh

続いてstlファイルを元に形状に沿ってメッシュ作成します。
snappyHexMeshの中身は長いですが全部書いておきます。

system/snappyHexMeshDict

大事なのはcastellatedMeshControlsの{}の中の以下の部分です。

これによりsnappyHexMeshを実行するとstl面で区切られた部分の領域は名前が付けられたcellZoneができます。

constant/polyMesh/cellZones

こんな形でできています。
ParaViewで確認することもできます。

※以下補足です。
snappyHexMeshはstlファイルで区切られた領域のメッシュを作成するために、locationInMeshを使うことがあります。
試しに上記をコメントアウトして以下のようにしてsnappyHexMeshを実行してみます。

これだとheaterの部分しか作られていないですね。

これがlocationInMeshとlocationsInMeshの違いです。

splitMeshRegions :各領域に分割

まずは0.origをコピーして0フォルダを作ります。

splitMeshRegionsを行う前に必ず0フォルダを作成する必要があります。

では、splitMeshRegionsを実行してsnappyHexMeshで作成したcellZoneを使って領域の分割を行います。

ParaViewで確認。

メッシュ情報として「constant/bottomAir/polyMesh/boundary」は境界条件のtypeにも関わるので確認しておきます。

constant/bottomAir/polyMesh/boundary

以下のような構造になっています。

typeはmappedWallとしておく必要があります。

あとの境界の設定は前回の記事と同じです。
別のページ開くのも面倒だと思いますので以下に書いておきます。

境界条件の設定

Allrun.preを見ると以下のような記述があります。

foamListRegionsが「constant/regionProperties」で指定しているリストをします。

foamListRegionsだけだと領域全ての要素をリストにするので、 [bottomWater topAir heater leftSolid rightSolid]というリストになります。

しかし以下のようにregionTypeを指定すると、

「foamListRegions solid」とsolidを指定するとsolidだけを要素にするので [heater  leftSolid rightSolid]となります。

つまり、上記のdo文は以下のようになります。

既に設定がされていたら設定を消すためものですね。
「rm -f」の「-f」オプションはファイルがあれば削除するというものです。

続いてAllrun.preを見ると以下のようになっています。

これはsystemフォルダ内で各領域のフォルダ内を用意しその中にchangeDictionaryを用意して境界条件の設定を変更していきます。


例えば例としてbottomAirを見てみると、

system/bottomAir/changeDictionaryDict

上記のスクリプトでchangeDictionaryが実行されると、以下のようにファイルが作成されます。

各領域がどの様に変更されたのかを見ていきます。

0/bottomAir/U

0/bottomAir/T

changeDictionaryで“bottomWater_to_.*”としているので、「bottomWater_to_」からはじまる境界は全て同じ設定にしています。
前回の記事と異なる点は以下です。
leftSolidとheaterが接触する部分の温度について、
以下のように、デフォルトでは界面での熱流束は単純に領域の熱伝導率で決まります。
0/leftSolid/T

以下のように熱伝導率を持つ厚みにある境界面を挟むことができます。
前回の記事で紹介したチュートリアルは以下のようになっていました。

0/leftSolid/T

  • thicknessLayersで厚みを0.001[m]
  • kappaLayersで熱伝導率を0.005[W/m K]

この辺の違いも確認しておくと良いですね。

設定のまとめ

要するにchtMultiRegionFoamでは各領域の境界条件もフォルダ分けして行う必要があるということです。
  • blockMesh:ベースメッシュの作成
  • surfaceFeatureExtract:特徴線の抽出
  • snappyHexMesh:stlに沿ったメッシュ作成、cellZoneの作成
  • cp -r 0.orig 0:0.origフォルダをコピー
  • splitMeshRegions:snappyHexMeshで作成したcellZoneを使って領域分割
  • changeDictionary:境界条件の変更

ここまでまとめてきて、これを手作業で行うのは至難の業ですね。
なので、オリジナルの解析を行う際はスクリプトを使うことは必須になります。

計算実行

設定の確認ができたので計算を実行します。
system/controlDictは以下のようになっています。

system/controlDict

function Objectsで「#include “vtkWrite”」として、「system/vtkWrite」ファイルを読み込んでいます。

今回のチュートリアルにはこちらの記述が無いので追加しておきます。

各領域のvtkファイルを作成してくれているのでParaViewで結果を確認するときは便利です。

system/vtkWrite

 

では、計算実行します。

結果の確認

ParaViewでpostProcessingに保存されたvtkファイルを読み込みます。

温度分布を見るとこんな感じです。

前回の記事では、leftSolidとheaterの境界は熱伝導率を持つ厚みを設けたので熱が伝わりにくくなっているのが確認できます。leftSolidの熱の伝わり方が違いますね。

まとめ

OpenFOAMのchtmultiRegionFoamのチュートリアルの解説を行いました。

手順は以下です。

  1. blockMesh:ベースメッシュの作成
  2. topoSet:cellZoneの作成
  3. cp -r 0.orig 0:0.origフォルダをコピー
  4. splitMeshRegions:topoSetで作成したcellZoneを使って領域分割
  5. changeDictionary:境界条件の変更
  6. chtMultiRegionFoam:計算実行

これでだいたいの使い方はわかりましたので、オリジナルの解析などをしたいですね。

chtMultiRegionFoamの勉強のきっかけ

当ブログに低温調理でのお肉の温度変化を対流なども考慮した解析をできないかという問い合わせが来ました。

  • 複数の物質との熱伝導
  • 強制対流や自然対流も考慮した熱解析
  • 脂肪の融解熱

など考慮したいことが多いようです。

あまり色々と考えたあげく以下のように提案をしてみました。

すると先方からは以下のようにしたいという提案がありまして・・・

  • 方法1
    熱流体は個別でOpenFOAMなりで計算して熱流束や熱伝達率を算出する
    その熱流束や熱伝達率を固体表面に与えて熱解析を行う

  • 方法2
    本記事で紹介したように流体・固体熱連成を行う

というわけで、方法2を試すことにしました。
どれほどchtMultiRegionFoamソルバが使えるのかを試してみたくなったというわけです。

※追記:適当な条件で試しました。

適当にモデルを作ってやってみました。

solid部分がお肉のつもりです。
物性は良くわからないですが調べて適当に設定しています。

constant/solid/thermophysicalProperties

 

角が温まりやすい?

おすすめ参考図書

☟こちらは、OpenFOAMの日本語書籍が無い中唯一わかりやすい参考書だと思います。

OpenFOAMによる熱移動と流れの数値解析(第2版)

OpenFOAMによる熱移動と流れの数値解析(第2版)

3,520円(12/10 15:05時点)
Amazonの情報を掲載しています

☟こちらもOpenFOMの古いバージョンでの和訳になります。さすがにこちらはバージョンに対する日本語でのケアはしていないので、OpenFOAMに慣れている方は購入しても良いかと思います。僕は「日本語でまとまっている内容」なので少し重宝しています。

OpenFOAMプログラミング

OpenFOAMプログラミング

Mari´c,Tomislav, H¨opken,Jens, Mooney,Kyle
8,250円(12/10 16:48時点)
Amazonの情報を掲載しています

☟以下に、もっと初心者向けの同人誌を紹介しておきます。
初心者は「ってか、まずどうやってOpenFOAMをインストールするの?」というところからつまずきがちです。
そんな時は、以下の書籍をおすすめします。

改訂新版 OpenFOAMの歩き方 (技術の泉シリーズ(NextPublishing))

改訂新版 OpenFOAMの歩き方 (技術の泉シリーズ(NextPublishing))

川畑 真一
2,640円(12/10 16:22時点)
発売日: 2022/04/15
Amazonの情報を掲載しています

インストール方法とチュートリアルで流体解析を体験・・・ちょっと高度な解析まで解説があります。著者曰くOpenFOAMのバージョンの追跡を行いながら、書籍をアップデートするようなので安心ですね。

関連記事もどうぞ

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です