
まくまく
OpenFoamを使って流体解析をしよう!今回はinterFoamの使い方を学ぶため公式チュートリアルのdamBreakWithObstacleを実行してみようと思います。
damBreakWithObstacleをコピー
cp -r $FOAM_TUTORIALS/multiphase/interFoam/laminar/damBreakWithObstacle
チュートリアルをコピーします。interFoamのlaminarフォルダの中になります。
実行
Allrunで実行するとこのような感じになります。水柱が一気に崩壊する様子が確認できます。中央に障害物があるので、通常のdamBreakよりダイナミックな感じになりますね。
paraviewではcontourでalphawaterを設定して、ValuewRangeは0.5に変更。blockMeshで規定したボックスはFeatureEdgesかWireframeにしておくとそれっぽくなると思います。
damBreakの実行についてはこちらの書籍でも詳細な記載があるので参考になると思います。
コードを確認
各ファイルを少し見てみましょう。
regions
(
boxToCell
{
box (0 0 0) (0.6 0.1875 0.75);
fieldValues
(
volScalarFieldValue alpha.water 1
);
}
);
setFieldsで初期状態を設定します。boxToCellの座標を変更して水柱形状を変えることができます。
scale 1;
vertices
(
(0 0 0)
(1 0 0)
(1 1 0)
(0 1 0)
(0 0 1)
(1 0 1)
(1 1 1)
(0 1 1)
);
blocks
(
hex (0 1 2 3 4 5 6 7) (32 32 32) simpleGrading (1 1 1)
);
blockMeshは単純な1m四方のボックス形状になっています。
ただ、メッシュを確認してみると障害物となる部分はこのようになってます。設定を探してみると、下記のtopoSetDictで記載されているようですね。
actions
(
{
name c0;
type cellSet;
action clear;
}
{
name c0;
type cellSet;
action invert;
}
{
name c0;
type cellSet;
action subtract;
source boxToCell;
box (0.375 0.375 0) (0.625 0.625 0.25);
}
);
topoSetは、topoSetはcellやFaceの集合を作成するためのユーティリティです。この機能を使ってどのようなことができるかというと、今回のように六面体を作成してその部分を元の領域から削除したり、他の使い方ではメッシュ細分化領域を規定したり、またはpropellerチュートリアルで見られるようにinletとoutletをtoposetで設定することも可能です。cellやFaceの集合を作成して、そこに何らかの処理を実行するというようなイメージですね。単純な形状であれば、STLファイルを準備するよりも効率的かもしれませんね。