~topoSetやsetFieldsの活用とSTLファイルの落とし穴!?~
攪拌槽内の流体挙動を高精度にシミュレーションするために、overset(重ね合わせ)メッシュの手法は非常に有効です。特に、回転体を含むような攪拌プロセスでは、背景メッシュと移動メッシュを動的に連携させられるoversetは、効率的かつ柔軟なCFD解析を可能にします。
今回は、OpenFOAMのoversetメッシュ機能を用いた攪拌槽の事例をもとに、境界条件、topoSet、setFieldsの使い方を整理しつつ、STLファイルからoversetを設定した際に起こりがちな問題にも触れていきます。失敗事例も載せておくので参考にしてもらえればと思います。個人的にoversetの考え方は初心者には難しく、なかなか理論が分かりずらいので、だれか詳しく教えてほしいです。
今回の計算条件は以下のcontrolDictで設定しています。
controlDict
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
libs (overset fvMotionSolvers);
application overPimpleDyMFoam;
startFrom startTime;
startTime 0;
stopAt endTime;
endTime 5;
deltaT 0.001;
writeControl timeStep;
writeInterval 1;
purgeWrite 100; //古い出力データの削除
writeFormat ascii;
writePrecision 10; //数値の精度(小数点以下の桁数)
writeCompression off; //出力ファイルの圧縮設定
timeFormat general;
timePrecision 8; //時間データの精度
runTimeModifiable yes;
adjustTimeStep no;//yes or no
maxCo 0.5;
maxDeltaT 0.01;
debugSwitches
{
limitFieldValue 1;
overset 0;
dynamicOversetFvMesh 0;
cellVolumeWeight 0;
}
攪拌槽モデルにおけるoversetメッシュ構成
攪拌槽の解析においては、通常以下のようなメッシュ領域に分けます。
最初の段階では、撹拌容器(バックグラウンド)のモデルはblockMeshで単なる立方体にしておきました。
- ・背景メッシュ(background):槽全体や流体領域をカバーする固定メッシュ
- ・回転体メッシュ(overset):インペラなどの回転体を含む領域。動的に移動・回転させる
手法①:stlファイルでovermeshの領域を定義してみる
撹拌槽を立方体の容器とみなし、その内側のoversetメッシュをstlファイルで定義して計算を試みました。

計算領域(ベース領域)とoverset領域を分けてメッシュ化し、それをマージ(合体)することで計算領域を設定しています。※上の画像と下の画像でメッシュ色が違ってますが同じものを指しています(分かりにくくてすみません)

blockMeshDict(overmesh側)
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
scale 1;
vertices
(
(-1.1 -1.1 -1.0)
(1.1 -1.1 -1.0)
(1.1 1.1 -1.0)
(-1.1 1.1 -1.0)
(-1.1 -1.1 5.0)
(1.1 -1.1 5.0)
(1.1 1.1 5.0)
(-1.1 1.1 5.0)
);
blocks
(
hex (0 1 2 3 4 5 6 7) (80 80 160) simpleGrading (1 1 1)
);
edges
(
);
boundary
(
walls
{
type overset;
faces
(
(3 7 6 2)
(0 4 7 3)
(2 6 5 1)
(1 5 4 0)
(0 3 2 1)
(4 5 6 7)
);
}
);
mergePatchPairs
(
);
surfaceFeatureExtractDict(overmesh側)
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object surfaceFeatureExtractDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
overmesh.stl //オーバーメッシュ
{
extractionMethod extractFromSurface;
extractFromSurfaceCoeffs
{
includedAngle 95;
}
writeObj yes;
}
bottommixer.stl //撹拌機の羽根No.1:stlファイル名
{
extractionMethod extractFromSurface;
extractFromSurfaceCoeffs
{
includedAngle 120;
}
writeObj yes;
}
middlemixer.stl //撹拌機の羽根No.2:stlファイル名
{
extractionMethod extractFromSurface;
extractFromSurfaceCoeffs
{
includedAngle 120;
}
writeObj yes;
}
topmixer.stl //撹拌機の羽根No.3:stlファイル名
{
extractionMethod extractFromSurface;
extractFromSurfaceCoeffs
{
includedAngle 120;
}
writeObj yes;
}
topoSetDict
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object topoSetDict;
}
//constant\polyMesh\setsの中をクリアにしておく。
actions
(
Info << "=== c0:バックグラウンドのセル===" << endl;
{
name c0;
type cellSet;
action new;
source regionsToCell;
sourceInfo
{
insidePoints ((1.1 1.1 0.4));
}
}
Info << "=== c1:バックグラウンドのセルをc1に複製===" << endl;
{
name c1;
type cellSet;
action new;
source cellToCell;
set c0;
}
Info << "=== c1:反転してoversetメッシュをc1に設定===" << endl;
{
name c1;
type cellSet;
action invert;
}
Info << "=== movingZone:movingZoneのセルセットをc1より作成===" << endl;
{
name movingZone;
type cellZoneSet;
action new;
source setToCellZone;
set c1;
}
);
手法①の結果
結果はうまくいきませんでした。stl領域でoversetメッシュを区画し、toposetでsellcetの設定をしてるのですが、計算実行すると、本来バックグラウンドとしてみなされるべき領域がholeとみなされて計算されない状態になってしまいます。
んーーーー、、、理由が分かりませんが、いろいろsnappyhexmeshで設定をいじってみましたが、oversetmeshの領域の内側でしか計算がされない状態となっています。

続いて次に、
overset領域をstlファイルで作成するのは難易度が高いと思い、シンプルに立方体のメッシュをoversetで作成することにしました。
手法②:blockMeshでovermeshの領域を定義してみる
oversetMeshの領域設定でstlファイルを読み込むのが原因であると考え、blockMeshでシンプルな直方体の領域をoverset領域として設定してみた。

計算中に以下のコードが出てくるのですが、その値を見てうまくいっているかどうかを判断できます。失敗すると、よくholeが計算領域に比べて大きくなってしまいます。
calculated ・・・・計算領域(主にベース領域)
interpolated ・・・・オーバーメッシュ領域
hole ・・・・計算しない領域
この領域はOpenFoam内で自動認識されるため、topoセットのセルセット設定と違う箇所をholeの領域として誤解してしまうことがあります。(原因はわかりませんが、私の経験です)
Overset analysis : nCells : 1877924
calculated : 1814444
interpolated : 63182 (from local:63182 mixed local/remote:0 remote:0)
hole : 298
手法②の結果
うまくoversetが機能しており、問題なくoversetメッシュがとホール領域と分離されることが確認できました。撹拌機で流体を動かしたいる状態の流線(白線)を描いてみたところ、きれいに上下旋回流が起きているのが分かりますね。
