OpenFOAM

マルチリージョンソルバで特定の面の条件を変える方法

こんにちは(@t_kun_kamakiri

前回の記事では以下の解析を行い総括熱伝達率(U値)をOpenFOAMを使って算出してみました。

OpenFOAMで総括熱伝達率(U値)を計算する方法。chtMultiRegionFoam対応 こんにちは(@t_kun_kamakiri) OpenFOAMの熱流体固体連成による総括熱伝達率(U値)を計算で求めたい...

今回の記事では特定の面だけを名前を変える方法を紹介します。具体的には、固体領域の3つの面が「s2_maxX」となっている場合に、一番右端だけを「maxX_perp」という名前にする場合を考えます。

最終的にはこうなります。

面の一部の名前を変更するとその面だけ違う境界条件にすることができます。
その場合には有効は方法だと思いますので、お困りの際はこちらの記事をご参考ください。

作業フォルダを作成

適当にフォルダを作成し、そちらを作業フォルダとします。

メッシュ作成

system/blockMeshDict

領域を分割

メッシュを作成しただけでは領域分割は行えていないので、以下のコマンドで領域を分割します。

ParaViewで確認すると領域分割できていることがわかります。
領域間の共通の面は「領域1_to _領域2」のように名前が自動で付けられます。

今は意図的のblockMeshで以下のように3面で「s2_maxX」となるようにしました。

ここから一番右端の面だけを名前を変える方法を紹介します。
blockMeshくらいでしたらblockMeshDictを編集して、もう一度メッシュを作り直せば良い話ですが、別のメッシャーを使って既に時間をかけてメッシュを作ってしまった場合に、はじめからメッシュを作り替えたりするのは面倒です。

というわけでその場合に本記事の方法が有効というわけです。

FaceSetを作成する

以下のコマンドでコピー

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

まずはFaceZoneを使って特定の面を抽出します。

system/solid_2/topoSetDict

  • 1つ目のブロック
    s2_maxX パッチにある面を全部集めています。
  • 2つ目のブロック
    その中から、法線が x 方向に近い面だけに絞っています。
  • 3つ目のブロック
    さらにその中から、x 座標が最大付近にある面だけに絞っています。

今回の場合はX方向に垂直な面は1つしかないので、2つ目のブロックまでで十分ですが念のためさらに領域を絞るためのブロック3を設けています。

実行方法は以下のコマンドです。

実行すると以下のファイルが作成されています。

constant/solid_2/polyMesh/sets/maxX_target

ここの数値が0になっている場合は、FaceSetの作成に失敗しているのでtopoSetDictにミスがないか確認してください。

※ParaViewで確認するにはtopoSetでFaceSetからさらにFaceZoneを作成する必要があります。

面に名前を付けなおす

system/solid_2/createPatchDict

確認してほしいのは以下の箇所です。

constant/solid_2/boundary

このように「maxX_perp」が新たに作られ、nFacesが0でなければOKです。

ParaViewで確認しても一番右端の面だけ「maxX_perp」に変わっています。

changeDictionaryDictによる境界条件の設定

system/solid_2/changeDictionaryDict

面倒ですが温度と圧力に「maxX_perp」の条件を追加します。

以下のコマンドを実行して境界条件に反映させます。

スクリプトで書くと以下となります。

実行すると以下のようになります。

0/solid_2/T

0/solid_2/p

計算実行

2次元計算でメッシュ数も多くないので並列計算させずにいきます。

今回最大クーラン数を流体側も固体側も10にしています。

計算の設定の前回の記事で詳しく書いていますのでご参考ください。

OpenFOAMで総括熱伝達率(U値)を計算する方法。chtMultiRegionFoam対応 こんにちは(@t_kun_kamakiri) OpenFOAMの熱流体固体連成による総括熱伝達率(U値)を計算で求めたい...

まとめ

マルチリージョンソルバで既にメッシュ作成と領域分割を終えてから面の一部の名前を変更する方法を紹介しました。

これは「メッシュは作り終わっているのに、特定の面だけ境界条件を変えたい」ときに役立ちます。特に、元の patch に複数の面がまとめられていて、その一部だけを分けたい場合に便利です。

方法は、topoSetcreatePatch を使って、既存の patch の一部だけを切り出し、新しい名前の面として再定義し、さらに changeDictionary でその新しい面にだけ別の境界条件を与えます。

この方法を使えば、マルチリージョンでは、blockMesh や外部メッシャーで作った面を後から柔軟に分割し、流体・固体の各領域ごとに適切な境界条件を入れ直せるので、とても有効です。領域間 interface を壊さずに、外壁の一部だけ条件変更したいときに役立ちますので、お困りの際はご活用ください。

関連記事もどうぞ

COMMENT