こんにちは(@t_kun_kamakiri)
OpenFOAMの熱流体固体連成のチュートリアルの解説を行います。
熱流体と熱伝導による固体の温度変化を解くソルバーを使います。
前回の記事では流体と固体の領域をtopoSetとsplitMeshRegionsで行いました。
- blockMesh:ベースメッシュの作成
- topoSet:cellZoneの作成
- cp -r 0.orig 0:0.origフォルダをコピー
- splitMeshRegions:topoSetで作成したcellZoneを使って領域分割
- changeDictionary:境界条件の変更
- chtMultiRegionFoam:計算実行
topoSetだと複雑な形状に対応できなかったり応用が利きづらいところがあります。
そこで、本記事ではsnappyHexMeshを使ったchtMultiRegionFoamのチュートリアルについてまとめておきます。
解析の設定は前回の記事と同じなので割愛します。
OpenFOAMv2036
熱流体固体連成のソルバ
今回は使うのは以下のようなソルバーです。
- chtMultiRegionFoam
- chtMultiRegionSimpleFoam
- chtMultiRegionTwoPhaseEulerFoam
chtMultiRegionFoamとchtMultiRegionSimpleFoamの違いはSimpleFoamと付いている方が定常解析用です。
本記事では非定常解析のchtMultiRegionFoamを使います。
チュートリアルをコピーする
チュートリアルをコピーします。
1 |
cp -r $FOAM_TUTORIALS/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater |
Allrunスクリプトを確認する
チュートリアルにはAllrunスクリプトが用意されているので、スクリプトの内容を確認すると必要な手順というのがわかります。
並列計算無し用のスクリプトとして「Allrun-serial」があるので、こちらを確認します。
並列計算用のスクリプトを見たい人は「Allrun-parallel」や「Allrun」をご確認ください。
Allrun-serial
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
mkdir -p constant/triSurface cp -f "$FOAM_TUTORIALS"/resources/geometry/geom.stl.gz constant/triSurface rm -rf constant/polyMesh/sets runApplication blockMesh runApplication surfaceFeatureExtract runApplication snappyHexMesh -overwrite # Restore initial fields restore0Dir runApplication splitMeshRegions -cellZones -overwrite # Remove fluid fields from solid regions (important for post-processing) for region in $(foamListRegions solid) do rm -f 0/"$region"/{nut,alphat,epsilon,k,U,p_rgh} rm -f processor*/0/"$region"/{nut,alphat,epsilon,k,U,p_rgh} done for region in $(foamListRegions) do runApplication -s "$region" changeDictionary -region "$region" done # Run on single processor runApplication $(getApplication) |
では、中身を確認していきましょう。
stlファイルの入手
まずはこちらです。
「constant/triSurface」というフォルダを作成して、「geom.stl.gz」というstlファイルををコピーしています。
1 2 |
mkdir -p constant/triSurface cp -f "$FOAM_TUTORIALS"/resources/geometry/geom.stl.gz constant/triSurface |
コピーしたファイルが圧縮ファイルなので以下のコマンドで解凍します。
1 |
gzip -d constant/triSurface/*.gz |
stlは各面をregionA_to_regionBのような形で書かれています。
geom.stl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
solid topAir_to_heater facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 outer loop vertex -1.333330000e-02 8.000000000e-03 -5.000000000e-02 vertex -6.666670000e-03 8.000000000e-03 -5.000000000e-02 vertex -6.666670000e-03 8.000000000e-03 -4.000000000e-02 endloop endfacet (省略) endsolid solid leftSolid_to_topAir (省略) endsolid solid rightSolid_to_topAir (省略) endsolid ... (省略) |
ParaViewで見るとこんな感じ。
FreeCADなどで面に名前を付けるのは簡単にできます。
blockMeshでメッシュ作成
blockMeshを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
scale 1; vertices ( (-0.1 -0.04 -0.05) ( 0.1 -0.04 -0.05) ( 0.1 0.04 -0.05) (-0.1 0.04 -0.05) (-0.1 -0.04 0.05) ( 0.1 -0.04 0.05) ( 0.1 0.04 0.05) (-0.1 0.04 0.05) ); blocks ( hex (0 1 2 3 4 5 6 7) (30 10 10) simpleGrading (1 1 1) ); edges ( ); boundary ( maxY { type wall; faces ( (3 7 6 2) ); } minX { type patch; faces ( (0 4 7 3) ); } maxX { type patch; faces ( (2 6 5 1) ); } minY { type wall; faces ( (1 5 4 0) ); } minZ { type wall; faces ( (0 3 2 1) ); } maxZ { type wall; faces ( (4 5 6 7) ); } ); mergePatchPairs ( ); |
以下のコマンドでベースメッシュを作成します。
1 |
blockMesh |