OpenFOAM

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

こんにちは(@t_kun_kamakiri

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

OpenFOAMv2036

熱流体固体連成のソルバ

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

  • chtMultiRegionFoam
  • chtMultiRegionSimpleFoam
  • chtMultiRegionTwoPhaseEulerFoam

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

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

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

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

$FOAM_TUTORIALS = /usr/lib/openfoam/openfoam2306/tutorials

chtMultiRegionFoamのフォルダ構成は特殊で各領域ごとに設定を用意する必要があります。

Allrunスクリプトを確認する

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

Allrun

Allrunファイルは全体のスクリプトなので、以下のコマンドをターミナルに打ち計算を実行します。

これでメッシュ作成➡解析設定➡ソルバ実行まで行ってくれます。

Allrun.preの確認

AllrunスクリプトははじめにAlrun.preを実行しているため、Alrun.preからまずは確認することになります。

Allrun.pre

解析の設定を理解するために、設定ファイルをはじめの状態に戻しておきます。

これで初期化されます。

初期設定のフォルダ構成

 

blockMeshでメッシュ作成

blockMeshを実行します。

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

cellZoneを作成する

次にtopoSetでcellZoneを作成して、作成したcellZoneを元にsplitMultiRegionで領域分割を行います。
ここではtopoSetのみを行い、後ほどsplitMultiRegionで領域分割を行います。

system/topoSetDict

以下のコマンドでcellZoneを作成します。

例えばHeater部分のみ見ていくと、

  • 黄色の丸の座標値を対角線にした直方体でcellSetを新規で作成
  • 緑色の丸の座標値を対角線にした直方体でcellSetを追加
  • 上記で作成したcellSetをcellZoneとして作成します。

これをParaViewで確認することができます。

ParaViewでheater部分だけを確認すると以下のようになります。

0.origのコピー

次に0.origを0フォルダとしてコピーします。

Allrun.preスクリプト内では以下の記述で同様のことができます。

Allrun.preの冒頭に「${WM_PROJECT_DIR:?}/bin/tools/RunFunctions」という記述があるので、また別のスクリプトを使用していることがわかります。
このスクリプトの中に「restore0Dir」関数があります。
気になる方は、vimなどで調べてみてください。

領域に分割

この状態だとまだ領域を分割できていないので、splitMeshRegionsコマンドを使ってcellZoneで分割を行います。
複数回計算させながら分割を行うのですが、分割した最終状態だけがほしいのでoverwriteをオプションで付けておきます。

これにより物理量を設定する0フォルダも領域ごとに設定が分かれれます。

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

constant/bottomWater/polyMesh/boundary

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

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

splitMeshRegionsの実行は必ず0.origをコピーして0フォルダを作成した後にしてください。

境界条件の設定

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を用意して境界条件の設定を変更していきます。


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

system/bottomWater/changeDictionaryDict

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

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

0/bottomWater/U

0/bottomWater/T

changeDictionaryで“bottomWater_to_.*”としているので、「bottomWater_to_」からはじまる境界は全て同じ設定にしています。
全ての領域をここで記載することはできないので、特殊な設定をしている部分を紹介しておきます。
leftSolidとheaterが接触する部分の温度の設定です。
0/leftSolid/T

デフォルトでは界面での熱流束は単純に領域の熱伝導率で決まります。
しかし、leftSolid_to_heaterの境界面は任意の熱伝導率の層を挟んでいます。

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

設定のまとめ

要するにchtMultiRegionFoamでは各領域の境界条件もフォルダ分けして行う必要があるということです。

  • blockMesh:ベースメッシュの作成
  • topoSet:cellZoneの作成
  • cp -r 0.orig 0:0.origフォルダをコピー
  • splitMeshRegions:topoSetで作成したcellZoneを使って領域分割
  • changeDictionary:境界条件の変更

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

計算実行

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

system/controlDict

function Objectsで「#include “vtkWrite”」として、「system/vtkWrite」ファイルを読み込んでいます。各領域のvtkファイルを作成してくれているのでParaViewで結果を確認するときは便利です。

system/vtkWrite

 

では、計算実行します。

結果の確認

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

温度分布を見るとこんな感じです。
leftSolidとheaterの境界は熱伝導率を持つ厚みを設けたので熱が伝わりにくくなっているのが確認できます。

まとめ

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

手順は以下です。

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

今回紹介したチュートリアルでは領域分割はtopoSetとsplitMeshRegionsを使っていますが、複雑な形状になると対応できなくなるでしょう。
これをsnappyHexMeshで行っているのが以下のチュートリアルです。

こちらも合わせて見ておくといいですね。

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

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