(例)blockMeshでメッシュを切る


  • 準備
直径10mm 高さ30mm の円柱を描き ”D10L30(120).STL” として保存する。

デスクトップに フォルダー "meshtest120" を作る。
  →このフォルダーを 解析のケースディレクトリーと呼ぶ

そのフォルダーに ファイルD10L30(120).STL を保存する。

さらに フォルダー"meshtest120/constant/polyMesh" を作る。

ファイル"meshtest120/constant/polyMesh/blockMeshDict" を作る。(詳細は後述)

フォルダー"meshtest120/system/" を作る。

ファイル"meshtest120/system/controlDict" を作る。
※ "controlDict"は ありさえすればいいのでOpenFOAMのチュートリアルからどれでもコピーしてくればよい。(詳細は後述)


  • 図形の配置確認
指示している形状がモデルを囲むように配置されるか確認する。
ターミナルから以下を入力する。
 $ touch case.blockMesh
 $ paraview --data=case.blockMesh &
しばらくすると ParaViewが立ち上がる。

画面左中央[Properties]の[Apply]を押す。
メニューバーの[vtkBlockColors]を[SolidClor]に変更。
メニューバーの
を押したあと マウスの左ボタンをドラッグして位置を調整。
画面左中央[Properties][Styling]の[Opacity]を"0.5"にする。
[File] [Open..]で解析したいSTLモデルを呼び出す。(ここではD10L30(120).STL)
画面左中央[Properties]の[Apply]を押す。

円柱モデルがちょうど
収まっていることを確認

 流体の出入口面以外の曲面は
少し大きめに囲っている

画像を確認して 流体の出入口以外の面は 若干大きめになるよう
モデルを囲むブロックが配置されていることを確認する。
確認できたら paraviewを閉じる。
ケースディレクトリーに paraviewで描画するための ファイル”case.blockMesh”が出来ているので消去する。


  • メッシュを切る
OpenFOAMのターミナルで blockMeshを実行する
$ blockMesh

結果として フォルダー "meshtest120/constant/polyMesh" に
幾つかのファイルが保存される。


  • メッシュを確認する
結果が出たら 続いてターミナルに以下を入力
 $ touch pv.foam
 $ paraview
(ケースディレクトリーにpv.foamというファイルが作られる。ちなみに"pv"の文字は任意)
Paraviewが立ち上がったら ファイル”pv.foam"を呼び出す。
メニューバーの[File][Open..]から"pv.foam"を選択。
画面左中央[Ploperties]の[aplly]を押す。
メニューバー中央の[Surface]から[Surface With Edges]に変更。

blockMeshの結果

blockMeshDicで X方向10 Y方向10 Z方向30で等分割するよう指示している。
確認が終わったら Paraviewを閉じる。
ケースディレクトリーに blockMeshの結果をparaviewで描画するための ファイル”pv.foam”が出来ているので消去する。


blockMeshDict

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  2.4.0                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

convertToMeters 1;

vertices
(

    ( -0.1 -0.1 0)  //0
    ( 10.1 -0.1 0)  //1
    ( 10.1 10.1 0)  //2
    ( -0.1 10.1 0)  //3

    ( -0.1 -0.1 30)  //4
    ( 10.1 -0.1 30)  //5
    ( 10.1 10.1 30)  //6
    ( -0.1 10.1 30)  //7
);

blocks
(
    hex (0 1 2 3 4 5 6 7) (10 10 30) simpleGrading (1 1 1)
);

edges
(
);

boundary
(
    inlet
    {
        type patch;
        faces
        (
            (0 1 2 3)
        );
    }
    outlet
    {
        type patch;
        faces
        (
            (4 5 6 7)
        );
    }
);

// ************************************************************************* //


  • blockMeshDict内の補足

 convertToMeters:縮尺
 vertices:六面体の頂点(流出入面以外は モデルより0.1だけ広めにしている)
 blocks:各頂点に番号を割当て 10, 10, 30分割を 1, 1, 1の割合(当分配)で行う。
 boundary:境界層を 面(0 1 2 3)を " inlet " 面(4 5 6 7)を " outlet "  その他の面は指定なし と定義。


controlDict
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  2.4.0                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    location    "system";
    object      controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

application     MPPICFoam;

startFrom       latestTime;

startTime       0;

stopAt          endTime;

endTime         10;

deltaT          0.001;

writeControl    adjustableRunTime;

writeInterval   0.01;

purgeWrite      0;

writeFormat     binary;

writePrecision  6;

writeCompression uncompressed;

timeFormat      general;

timePrecision   6;

runTimeModifiable yes;

adjustTimeStep on;
maxCo 0.001;

// ************************************************************************* //