この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
|
openfoam [2018/03/17 05:10] fifi |
openfoam [2018/04/10 08:38] (現在) fifi [TIPS] |
||
|---|---|---|---|
| ライン 1: | ライン 1: | ||
| - | [[:top:openfoam:備忘録1]] | ||
| - | [[:top:openfoam:備忘録2]] | ||
| + | [[openfoam:備忘録1]] | ||
| - | # OpenFOAM | + | 初めてのチュートリアルをまわしながらの作業メモ。 |
| - | - OpenFOAMでできること | + | [[openfoam:備忘録2]] |
| - | - 非圧縮性流体の定常/非定常解析 <= これしたい | + | |
| - | - 圧縮性流体の定常/非定常解析 | + | |
| - | - 流体・個体伝熱解析 | + | |
| - | - 混相流(VOF) | + | |
| - | - 非圧縮性流体の定常/非定常解析を目指す | + | pimpleFoamでRASの計算をまわすためのテンプレート作成備忘録. |
| - | ## 乱流モデル | + | stlを読み込む外部流れのテンプレート |
| - | 定常(simpleFoam)と非定常(pimpleFoam)でも同じ | ||
| - | constant/turbulencePropertiesにて、laminarかRASかLESかを選ぶ.その下に書く設定を追記する。 | + | # TIPS |
| - | + | (増えてきたら備忘録にまとめる) | |
| - | + | ||
| - | - simulationType | + | |
| - | - "laminar" | + | |
| - | - "RAS" | + | |
| - | - kEpsilon | + | |
| - | - RNGkEpsilon | + | |
| - | - realizableKE | + | |
| - | - kOmega | + | |
| - | - kOmegaSST | + | |
| - | - LRR (RSTM レイノルズ応力輸送モデル) | + | |
| - | - "LES" | + | |
| - | - Smagorinsky | + | |
| - | - homogeneousDynSmagorinsky | + | |
| - | - oneEqEddy | + | |
| - | - dynOneEqEddy | + | |
| - | + | ||
| - | - 乱流モデルの選択 | + | |
| - | - RASはレイノルズ平均をベースにしているので、詳細な非定常現象の再現には向かない | + | |
| - | - kEpsilonは単純で計算しやすいので、おおまかな流れのパターンを見るような用途に向いている | + | |
| - | - kEpsilon系統モデル(渦粘性モデル)は、等方性を仮定しているので、曲がりや旋回、剥離には向かない. RNG kEpsilon, Realizable kEpsilonはいくらか改善版 | + | |
| - | - RSTMは乱れの非等方性を考慮できる。しかし方程式がふえ、計算時間が3倍. | + | |
| - | - RSTMよりも制度が必要な場合はLES | + | |
| - | + | ||
| - | + | ||
| - | チュートリアル/incompressible/pimpleFoam/参照 | + | |
| - | + | ||
| - | + | ||
| - | ## 境界条件 | + | |
| - | + | ||
| - | - 境界タイプ | + | |
| - | - patch | + | |
| - | - wall | + | |
| - | - symmetryPlane | + | |
| - | - cyclic 周期境界 | + | |
| - | - cyclicAMI 不整合周期境界 | + | |
| - | - wedge 2次元軸対象境界 | + | |
| - | - empty 2次元 | + | |
| - | - ソルバーが必要とするフィールドファイル | + | |
| - | - simpleFoam | + | |
| - | - U, p, k, epsilon, nut | + | |
| - | - buoyantBoussinesqSimpleFoam | + | |
| - | - U,p,p_rgh,T,k,epsilon,nut,alphat | + | |
| - | - buoyantSimpleFoam | + | |
| - | - U,p,p_rgh,T,k,epsilon,nut,alphat | + | |
| + | - スケールの変換 | ||
| + | - STL ファイルのスケール (単位) の変換を行うには、OpenFOAM のユーティリティ surfaceConvert を使う。たとえば mm から m に変換する場合は次のようにする。 | ||
| ``` | ``` | ||
| - | // | + | $ surfaceConvert -scale 0.001 MC_T0_A_ASSY_AllCATPart.stl MC_T0_A_ASSY_AllCATPart_mm.stl |
| - | // U | + | |
| - | // | + | |
| - | FoamFile | + | |
| - | { | + | |
| - | version 2.0; | + | |
| - | format ascii; | + | |
| - | class volVectorField; // volScalarField - volVectorField - volSymmTensorField | + | |
| - | object U; | + | |
| - | } | + | |
| - | + | ||
| - | // 単位 [kg m s K mol A Cd] | + | |
| - | dimensions [0 1 -1 0 0 0 0] | + | |
| - | + | ||
| - | // フィールド内部の値。0の場合は初期値 | + | |
| - | internalField uniform(0 0 0) | + | |
| - | + | ||
| - | // 境界値 | + | |
| - | boundaryField | + | |
| - | { | + | |
| - | BoudaryName // メッシュ生成時につけた名前 | + | |
| - | { | + | |
| - | type fixedValue; | + | |
| - | value uniform (1 0 0); | + | |
| - | + | ||
| - | or | + | |
| - | + | ||
| - | type zeroGradient; // 値指定の必要はない | + | |
| - | } | + | |
| - | + | ||
| - | + | ||
| - | ".*" | + | |
| - | { | + | |
| - | type zeroGradient; // 値指定の必要はない | + | |
| - | } | + | |
| - | + | ||
| - | "(inlet-1|inlet-2)" // outlet-1 or outlet-2 | + | |
| - | { | + | |
| - | type fixedValue; | + | |
| - | value uniform (1 0 0); | + | |
| - | } | + | |
| - | + | ||
| - | "outlet.*" // outlet-1, outlet-2, outletA, ... | + | |
| - | { | + | |
| - | type zeroGradient; | + | |
| - | } | + | |
| - | + | ||
| - | "nonSlipWall.*" | + | |
| - | { | + | |
| - | type fixedValue; | + | |
| - | value uniform (0 0 0); | + | |
| - | } | + | |
| - | + | ||
| - | "slipWall.*" | + | |
| - | { | + | |
| - | // 壁面スリップ条件 | + | |
| - | type slip; | + | |
| - | } | + | |
| - | } | + | |
| - | + | ||
| ``` | ``` | ||
| - | |||
| - | その他便利な境界 | ||
| - | |||
| - | ``` | ||
| - | boundaryField | ||
| - | { | ||
| - | "inlet.*" | ||
| - | { | ||
| - | // 表面法線方向速度 (※ 法線ベクトルが外側を向いていることがあるので注意) | ||
| - | type surfaceNormalFixedValue; | ||
| - | refValue uniform 10; // [m/s] | ||
| - | } | ||
| - | |||
| - | "volInlet.*" | ||
| - | { | ||
| - | // 体積流量 | ||
| - | type flowRateInletVelocity; | ||
| - | volumetricFlowRate constant 2.5e-4; // [m3/s] | ||
| - | value uniform (0 0 0); | ||
| - | } | ||
| - | |||
| - | "flowRateInlet.*" | ||
| - | { | ||
| - | // 質量流量 | ||
| - | type flowRateInletVelocity; | ||
| - | massFlowRate constant 2.5e-4; // [kg/s] | ||
| - | rhoInlet 1; / [kg/m3] | ||
| - | value uniform (0 0 0); | ||
| - | } | ||
| - | |||
| - | "turbulenceInlet.*" | ||
| - | { | ||
| - | // 乱れ付き速度境界 | ||
| - | type turbulentInlet; | ||
| - | referenceField uniform (10 0 0); // 流速[m/s] | ||
| - | fluctuationScale (0.02 0.01 0.01); // 変動スケール | ||
| - | } | ||
| - | } | ||
| - | |||
| - | ``` | ||
| - | |||
| - | ## OpenFOAMにおける計算手順 (重要) | ||
| - | |||
| - | - ヴァージョン | ||
| - | - v5.0 (2018-02-28 時点) | ||
| - | |||
| - | - メッシング (商用メッシャーある? YES?NO?) | ||
| - | - (YES) | ||
| - | - fluentMeshToFoam | ||
| - | - ideasUnvToFoam... | ||
| - | - あったらやってない | ||
| - | - (NO) <= これ | ||
| - | - blockMesh | ||
| - | - CAD + snappyHexMesh <= おそらくこれしたい | ||
| - | - SALOME | ||
| - | |||
| - | - ソルバーの選択 | ||
| - | - 非圧縮性ソルバー | ||
| - | - 定常 : simpleFoam <= これしかない | ||
| - | - 非定常 : pimpleFoam <= これしかない | ||
| - | |||
| - | s | ||
| - | |||
| - | こんだけ。非圧縮性ソルバーはそんなにない | ||
| - | |||
| - | |||
| - | - ケースの設定 | ||
| - | - 0 <= フィールド変数 | ||
| - | - U | ||
| - | - epsilon | ||
| - | - k | ||
| - | - nuTilda | ||
| - | - nut | ||
| - | - p | ||
| - | - constant | ||
| - | - polyMesh | ||
| - | - blockMeshDict | ||
| - | - turbulenceProperties <= 定常/乱流モデルの設定 | ||
| - | - (RASProperties) <= 非定常/乱流モデルの設定 RANS | ||
| - | - (LESProperties) <= 非定常/乱流モデルの設定 LES | ||
| - | |||
| - | - system | ||
| - | - controlDict <= 計算の制御の設定 (時間幅、終了時刻等..) | ||
| - | - fvSchemes <= 離散化スキームの設定 | ||
| - | - fvSolutions <= 代数方程式ソルバーの設定、SIMPLE(PISO)等の設定を含むファイル | ||
| - | |||
| - | ## まずは2つのチュートリアルで概要を把握する | ||
| - | |||
| - | ### バックステップ流れ pitzDaily [simpleFoam:非圧縮製定常乱流ソルバー] | ||
| - | |||
| - | - [説明資料 - スライド](http://www.mech.iwate-u.ac.jp/~hirose/ockitatohoku/ref/wakashimasensei-text-3-1.pdf) | ||
| - | |||
| - | ``` | ||
| - | mkdir -p $FOAM_RUN // runディレクトリを作っておく。(もしないなら) | ||
| - | run // = cd $FOAM_RUN (便利) | ||
| - | cp -r $FOAM_TUTORIAL/incompressible/simpleFoam/pitzDaily . | ||
| - | cd PitzDaily | ||
| - | blockMesh | ||
| - | simpleFoam | ||
| - | paraFoam | ||
| - | ``` | ||
| - | |||
| - | - 気づき | ||
| - | - コピーした時点ではconstantディレクトリにはメッシュ情報はなにもない. | ||
| - | blockMesh実行後に、constant/polyMeshディレクトリが作成され、配下に、boundary,faces,neighbour, owner, pointsが生成されている. | ||
| - | |||
| - | |||
| - | ### ミキシングエルボー その1 (定常計算) | ||
| - | |||
| - | - [ミキシングエルボーの熱流動解析チュートリアルのケースファイル ダウンロード | 森北出版株式会社](http://www.morikita.co.jp/exclusive/download/1522) | ||
| - | |||
| - | ``` | ||
| - | cd steadyIsoThermal | ||
| - | blockMesh | ||
| - | surfaceFeaturExtract | ||
| - | snappyHexMesh -overwrite | ||
| - | createPatch -overwrite (v.4以降は不要) | ||
| - | paraFoam (メッシュの確認) | ||
| - | |||
| - | foamJob simpleFoam (バックグラウンド実行) | ||
| - | tail -f log (ログ確認. "End"が計算終了合図) | ||
| - | |||
| - | ``` | ||
| - | |||
| - | ログの確認 | ||
| - | |||
| - | ``` | ||
| - | foamLog log //logsディレクトリができる | ||
| - | |||
| - | gnuplot residual.gp | ||
| - | evince residual.eps | ||
| - | ``` | ||
| - | |||
| - | - triSurface/mixing_elbow.stlが設置されている | ||
| - | - blockMeshを実行すると、メッシュが切られた直方体が作られた。 | ||
| - | - surfaceFeatureExtractで特徴線を抽出 | ||
| - | - つまり、stlの外形線をパスとしてだしている。constant/extendedFeatureEdgeMeshの下に保存されている | ||
| - | - snappyHexMeshを実行すると、polyMeshの中身も増えた。また、triSurface/mixing_elbow.eMeshができた! | ||
| - | - snappyHexMeshを実行すると、ミキシングエルボ内部のメッシュが切れた。外側はどうするのか?設定? | ||
| - | - foamLog logでlogsディレクトリに計算ログが出力 | ||
| - | - 残差logのグラフを見たいがアプリが無く失敗。epsもイラレでみたが白紙. | ||
| - | |||
| - | ### ミキシングエルボー その2 (非定常熱計算) | ||
| - | |||
| - | ``` | ||
| - | cd constant | ||
| - | rm -rf polyMesh | ||
| - | ln -s ../../steadyIsothermal/constant/polyMesh | ||
| - | ``` | ||
| - | |||
| - | - メッシュは重たいので、steadyIsoThermalのconstat/polyMeshにリンクを張ることで再利用 | ||
| - | - (分かったこと) : constant/triSurfaceは中間データだった.計算に利用しているのはpolyMeshの可能性がある | ||
| - | |||
| - | ``` | ||
| - | foamJob buoyantPimpleFoam | ||
| - | |||
| - | // 並列の場合 | ||
| - | decomposePar // 並列用に領域分割する | ||
| - | foamJob -p buoyantPimpleFoam // -pで並列実行 | ||
| - | reconstructPar // 領域結合 | ||
| - | |||
| - | tail -f log //途中経過確認 | ||
| - | |||
| - | paraFoam | ||
| - | ``` | ||
| - | |||
| - | |||
| - | |||
| - | ## メッシュ生成 | ||
| - | |||
| - | - ツール | ||
| - | - 形状生成 : FreeCAD | ||
| - | - メッシング : snappyHexMesh, blockMesh, Netgen | ||
| - | - 形状生成 + メッシング : salome | ||
| - | |||
| - | |||
| - | ## SnappyHexMesh | ||
| - | |||
| - | サンプルコード : OpenFOAM-5.x\applications\utilities\mesh\generation\snappyHexMesh | ||
| - | |||
| - | - 以下のファイルが必要 | ||
| - | - system/snappyHexMeshDict | ||
| - | - system/meshQualityDict | ||
| - | |||
| - | ``` | ||
| - | // どこのメッシュを残すかの場所を指定する | ||
| - | locationInMesh (0 0 0); | ||
| - | |||
| - | ``` | ||
| - | |||
| - | ``` | ||
| - | // メッシュの初期化 | ||
| - | foamCleanPolyMesh | ||
| - | ``` | ||
| - | |||
| - | メッシュはきれいになる | ||
| - | ``` | ||
| - | // 不要な境界の除去 | ||
| - | createPatch -overwrite | ||
| - | ``` | ||
| - | |||
| - | |||
| - | ## OpenFOAMによる熱流体解析 | ||
| - | |||
| - | |||
| - | ## Q&A | ||
| - | |||
| - | - Q: チュートリアルからコピーするだけでいいの?設定はどこまで変えていいの? | ||
| - | - Q: FoamFileのヘッダのヴァージョンは適当? | ||
| - | |||
| - | |||
| - | ## 参考 | ||
| - | |||
| - | - [OpenFOAM® - Official ](https://www.openfoam.com/) | ||
| - | - [penguinFoam - GUIツール](http://www.geocities.jp/penguinitis2002/study/OpenFOAM/penguinFoam/penguinFoam-20170909.pdf) | ||
| - | |||
| - | - [OpenFOAMによる熱移動と流れの数値解析 | 森北出版株式会社](http://www.morikita.co.jp/books/book/2779) | ||
| - | - [正誤表 | 森北出版株式会社](http://www.morikita.co.jp/exclusive/download/1601) | ||
| - | |||
| - | |||
| - | |||
| - | ## ParaViewで格子の表示 | ||
| - | |||
| - | ``` | ||
| - | # vtk DataFile Version 2.0 | ||
| - | grid.vtk | ||
| - | ASCII | ||
| - | DATASET POLYDATA | ||
| - | POINTS 8 float | ||
| - | 3.2 1.5 1.2 | ||
| - | 3.7 1.5 1.2 | ||
| - | 3.7 1.5 1.2 | ||
| - | 3.2 1.5 1.2 | ||
| - | 3.2 2.1 1.2 | ||
| - | 3.7 2.1 1.2 | ||
| - | 3.7 2.1 1.2 | ||
| - | 3.2 2.1 1.2 | ||
| - | POLYGONS 2 10 | ||
| - | 4 0 1 2 3 | ||
| - | 4 4 5 6 7 | ||
| - | ``` | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ## paraFoamでblockMeshの確認 | ||
| - | |||
| - | |||
| - | ``` | ||
| - | blockMesh | ||
| - | paraFoam -block | ||
| - | ``` | ||
| - | |||
| - | ``` | ||
| - | /*--------------------------------*- C++ -*----------------------------------*\ | ||
| - | | ========= | | | ||
| - | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | ||
| - | | \\ / O peration | Version: 5 | | ||
| - | | \\ / A nd | Web: www.OpenFOAM.org | | ||
| - | | \\/ M anipulation | | | ||
| - | \*---------------------------------------------------------------------------*/ | ||
| - | FoamFile | ||
| - | { | ||
| - | version 2.0; | ||
| - | format ascii; | ||
| - | class dictionary; | ||
| - | object blockMeshDict; | ||
| - | } | ||
| - | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // | ||
| - | |||
| - | convertToMeters 1; | ||
| - | |||
| - | // 二次元はXY平面(X1,X2) | ||
| - | // ^ x2(y) | ||
| - | // | | ||
| - | // |__ x1(x) | ||
| - | // / | ||
| - | // x3(z) | ||
| - | |||
| - | // 4____ 5 | ||
| - | // /| /| | ||
| - | // /_0__/ |1 | ||
| - | //7| |6/ | ||
| - | // |____|/ | ||
| - | // 3 2 | ||
| - | |||
| - | // __ 1 | ||
| - | // /| | ||
| - | // _2/ |0 ==> 外向きに右ねじの法則 | ||
| - | // __|/ | ||
| - | // 3 | ||
| - | // | ||
| - | |||
| - | |||
| - | minx -0.15; | ||
| - | maxx 0.50; | ||
| - | miny -0.05; //高さ方向 | ||
| - | maxy 0.20; //高さ方向 | ||
| - | minz -0.15; | ||
| - | maxz 0.15; | ||
| - | |||
| - | nx 60; | ||
| - | ny 30; | ||
| - | nz 30; | ||
| - | |||
| - | vertices | ||
| - | ( | ||
| - | ($minx $miny $minz) // 0 | ||
| - | ($maxx $miny $minz) // 1 | ||
| - | ($maxx $maxy $minz) // 2 | ||
| - | ($minx $maxy $minz) // 3 | ||
| - | ($minx $miny $maxz) // 4 | ||
| - | ($maxx $miny $maxz) // 5 | ||
| - | ($maxx $maxy $maxz) // 6 | ||
| - | ($minx $maxy $maxz) // 7 | ||
| - | ); | ||
| - | |||
| - | blocks | ||
| - | ( | ||
| - | hex (0 1 2 3 4 5 6 7) ($nx $ny $nz) simpleGrading (1 1 1) | ||
| - | ); | ||
| - | |||
| - | edges | ||
| - | ( | ||
| - | ); | ||
| - | |||
| - | // -*- Boundary Type -*- | ||
| - | // patch パッチ (入/出境界) | ||
| - | // wall 壁 | ||
| - | // symmetryPlane 対称面 | ||
| - | // cyclic 周期境界 | ||
| - | // cyclicAMI 不適合境界 | ||
| - | // wedge 2次元軸対象 | ||
| - | // empty 2次元問題 | ||
| - | |||
| - | boundary | ||
| - | ( | ||
| - | |||
| - | upperWall | ||
| - | { | ||
| - | type wall; | ||
| - | faces | ||
| - | ( | ||
| - | (3 7 6 2) | ||
| - | ); // カンマ必須 | ||
| - | } | ||
| - | lowerWall | ||
| - | { | ||
| - | type wall; | ||
| - | faces | ||
| - | ( | ||
| - | (1 5 4 0) | ||
| - | ); | ||
| - | } | ||
| - | inlet | ||
| - | { | ||
| - | type patch; | ||
| - | faces | ||
| - | ( | ||
| - | (0 4 7 3) | ||
| - | ); | ||
| - | } | ||
| - | outlet | ||
| - | { | ||
| - | type patch; | ||
| - | faces | ||
| - | ( | ||
| - | (2 6 5 1) | ||
| - | ); | ||
| - | } | ||
| - | |||
| - | frontAndBack | ||
| - | { | ||
| - | type wall; | ||
| - | faces | ||
| - | ( | ||
| - | (4 5 6 7) | ||
| - | (0 3 2 1) | ||
| - | ); | ||
| - | |||
| - | } | ||
| - | ); | ||
| - | |||
| - | |||
| - | // mergePatchPairs | ||
| - | // {}; | ||
| - | |||
| - | // ************************************************************************* // | ||
| - | |||
| - | |||
| - | ``` | ||
| - | |||
| - | 変数宣言 | ||
| - | |||
| - | ``` | ||
| - | |||
| - | minx -0.00101; | ||
| - | maxx 0.05101; | ||
| - | miny -0.00601; | ||
| - | maxy 0.05601; | ||
| - | minz -0.01001; | ||
| - | maxz 0.05601; | ||
| - | |||
| - | nx 52; | ||
| - | ny 32; | ||
| - | nz 56; | ||
| - | |||
| - | vertices | ||
| - | ( | ||
| - | ($minx $miny $minz) | ||
| - | ($maxx $miny $minz) | ||
| - | ($maxx $maxy $minz) | ||
| - | ($minx $maxy $minz) | ||
| - | ($minx $miny $maxz) | ||
| - | ($maxx $miny $maxz) | ||
| - | ($maxx $maxy $maxz) | ||
| - | ($minx $maxy $maxz) | ||
| - | ); | ||
| - | |||
| - | blocks | ||
| - | ( | ||
| - | hex (0 1 2 3 4 5 6 7) ($nx $ny $nz) simpleGrading (1 1 1) | ||
| - | ); | ||
| - | |||
| - | |||
| - | ``` | ||
| - | |||
| - | |||
| - | |||
| - | # snappyHexMeshDict | ||
| - | |||
| - | ``` | ||
| - | /*--------------------------------*- C++ -*----------------------------------*\ | ||
| - | | ========= | | | ||
| - | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | ||
| - | | \\ / O peration | Version: 5 | | ||
| - | | \\ / A nd | Web: www.OpenFOAM.org | | ||
| - | | \\/ M anipulation | | | ||
| - | \*---------------------------------------------------------------------------*/ | ||
| - | FoamFile | ||
| - | { | ||
| - | version 2.0; | ||
| - | format ascii; | ||
| - | class dictionary; | ||
| - | object snappyHexMeshDict; | ||
| - | } | ||
| - | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // | ||
| - | |||
| - | // Which of the steps to run | ||
| - | castellatedMesh true; | ||
| - | snap true; | ||
| - | addLayers false; | ||
| - | |||
| - | |||
| - | //Optional: single region surfaces get patch names according to | ||
| - | // surface only. Multi-region surfaces get patch name | ||
| - | // surface "_ "region. Default is true | ||
| - | //singleRegionName false; | ||
| - | |||
| - | |||
| - | //Optional: preserve all generated patches. Default is to remove | ||
| - | // zero-sized patches. | ||
| - | //keepPatches true; | ||
| - | |||
| - | |||
| - | // Geometry. Definition of all surfaces. All surfaces are of class | ||
| - | // searchableSurface. | ||
| - | // Surfaces are used | ||
| - | // - to specify refinement for any mesh cell intersecting it | ||
| - | // - to specify refinement for any mesh cell inside/outside/near | ||
| - | // - to 'snap' the mesh boundary to the surface | ||
| - | geometry | ||
| - | { | ||
| - | box1x1x1 | ||
| - | { | ||
| - | type searchableBox; | ||
| - | min (1.5 1 -0.5); | ||
| - | max (3.5 2 0.5); | ||
| - | } | ||
| - | |||
| - | sphere | ||
| - | { | ||
| - | type triSurfaceMesh; | ||
| - | file "sphere.stl" | ||
| - | |||
| - | //tolerance 1E-5; // optional:non-default tolerance on intersections | ||
| - | //maxTreeDepth 10; // optional:depth of octree. Decrease only in case | ||
| - | // of memory limitations. | ||
| - | |||
| - | // Per region the patchname. If not provided will be <surface>_<region>. | ||
| - | // Note: this name cannot be used to identity this region in any | ||
| - | // other part of this dictionary; it is only a name | ||
| - | // for the combination of surface+region (which is only used | ||
| - | // when creating patches) | ||
| - | regions | ||
| - | { | ||
| - | secondSolid | ||
| - | { | ||
| - | name mySecondPatch; | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | |||
| - | sphere2 | ||
| - | { | ||
| - | type searchableSphere; | ||
| - | centre (1.5 1.5 1.5); | ||
| - | radius 1.03; | ||
| - | } | ||
| - | }; | ||
| - | |||
| - | // Settings for the castellatedMesh generation. | ||
| - | castellatedMeshControls | ||
| - | { | ||
| - | |||
| - | // Refinement parameters | ||
| - | // ~~~~~~~~~~~~~~~~~~~~~ | ||
| - | |||
| - | // If local number of cells is >= maxLocalCells on any processor | ||
| - | // switches from from refinement followed by balancing | ||
| - | // (current method) to (weighted) balancing before refinement. | ||
| - | maxLocalCells 100000; | ||
| - | |||
| - | // Overall cell limit (approximately). Refinement will stop immediately | ||
| - | // upon reaching this number so a refinement level might not complete. | ||
| - | // Note that this is the number of cells before removing the part which | ||
| - | // is not 'visible' from the keepPoint. The final number of cells might | ||
| - | // actually be a lot less. | ||
| - | maxGlobalCells 2000000; | ||
| - | |||
| - | // The surface refinement loop might spend lots of iterations refining just a | ||
| - | // few cells. This setting will cause refinement to stop if <= minimumRefine | ||
| - | // are selected for refinement. Note: it will at least do one iteration | ||
| - | // (unless the number of cells to refine is 0) | ||
| - | minRefinementCells 0; | ||
| - | |||
| - | // Allow a certain level of imbalance during refining | ||
| - | // (since balancing is quite expensive) | ||
| - | // Expressed as fraction of perfect balance (= overall number of cells / | ||
| - | // nProcs). 0=balance always. | ||
| - | maxLoadUnbalance 0.10; | ||
| - | |||
| - | // Number of buffer layers between different levels. | ||
| - | // 1 means normal 2:1 refinement restriction, larger means slower | ||
| - | // refinement. | ||
| - | nCellsBetweenLevels 1; | ||
| - | |||
| - | |||
| - | // Explicit feature edge refinement | ||
| - | // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
| - | |||
| - | // Specifies a level for any cell intersected by explicitly provided | ||
| - | // edges. | ||
| - | // This is a featureEdgeMesh, read from constant/triSurface for now. | ||
| - | // Specify 'levels' in the same way as the 'distance' mode in the | ||
| - | // refinementRegions (see below). The old specification | ||
| - | // level 2; | ||
| - | // is equivalent to | ||
| - | // levels ((0 2)); | ||
| - | |||
| - | features | ||
| - | ( | ||
| - | //{ | ||
| - | // file "someLine.eMesh"; | ||
| - | // //level 2; | ||
| - | // levels ((0.0 2) (1.0 3)); | ||
| - | //} | ||
| - | ); | ||
| - | |||
| - | |||
| - | // Surface based refinement | ||
| - | // ~~~~~~~~~~~~~~~~~~~~~~~~ | ||
| - | |||
| - | // Specifies two levels for every surface. The first is the minimum level, | ||
| - | // every cell intersecting a surface gets refined up to the minimum level. | ||
| - | // The second level is the maximum level. Cells that 'see' multiple | ||
| - | // intersections where the intersections make an | ||
| - | // angle > resolveFeatureAngle get refined up to the maximum level. | ||
| - | |||
| - | refinementSurfaces | ||
| - | { | ||
| - | sphere | ||
| - | { | ||
| - | // Surface-wise min and max refinement level | ||
| - | level (2 2); | ||
| - | |||
| - | // Optional region-wise level specification | ||
| - | regions | ||
| - | { | ||
| - | secondSolid | ||
| - | { | ||
| - | level (3 3); | ||
| - | } | ||
| - | } | ||
| - | |||
| - | // Optional specification of patch type (default is wall). No | ||
| - | // constraint types (cyclic, symmetry) etc. are allowed. | ||
| - | patchInfo | ||
| - | { | ||
| - | type patch; | ||
| - | inGroups (meshedPatches); | ||
| - | } | ||
| - | |||
| - | |||
| - | //- Optional increment (on top of max level) in small gaps | ||
| - | //gapLevelIncrement 2; | ||
| - | |||
| - | //- Optional angle to detect small-large cell situation | ||
| - | // perpendicular to the surface. Is the angle of face w.r.t. | ||
| - | // the local surface normal. Use on flat(ish) surfaces only. | ||
| - | // Otherwise leave out or set to negative number. | ||
| - | //perpendicularAngle 10; | ||
| - | |||
| - | //- Optional faceZone and (for closed surface) cellZone with | ||
| - | // how to select the cells that are in the cellZone | ||
| - | // (inside / outside / specified insidePoint) | ||
| - | // The orientation of the faceZone is | ||
| - | // - if on cellZone(s) : point out of (maximum) cellZone | ||
| - | // - if freestanding : oriented according to surface | ||
| - | |||
| - | //faceZone sphere; | ||
| - | //cellZone sphere; | ||
| - | //cellZoneInside inside; //outside/insidePoint | ||
| - | |||
| - | //- Optional specification of what to do with faceZone faces: | ||
| - | // internal : keep them as internal faces (default) | ||
| - | // baffle : create baffles from them. This gives more | ||
| - | // freedom in mesh motion | ||
| - | // boundary : create free-standing boundary faces (baffles | ||
| - | // but without the shared points) | ||
| - | //faceType baffle; | ||
| - | } | ||
| - | } | ||
| - | |||
| - | // Feature angle: | ||
| - | // - used if min and max refinement level of a surface differ | ||
| - | // - used if feature snapping (see snapControls below) is used | ||
| - | resolveFeatureAngle 30; | ||
| - | |||
| - | //- Optional increment (on top of max level) in small gaps | ||
| - | //gapLevelIncrement 2; | ||
| - | |||
| - | |||
| - | // Planar angle: | ||
| - | // - used to determine if surface normals | ||
| - | // are roughly the same or opposite. Used | ||
| - | // - in proximity refinement | ||
| - | // - to decide when to merge free-standing baffles | ||
| - | // (if e.g. running in surfaceSimplify mode set this to 180 to | ||
| - | // merge all baffles) | ||
| - | // - in snapping to avoid snapping to nearest on 'wrong' side | ||
| - | // of thin gap | ||
| - | // | ||
| - | // If not specified same as resolveFeatureAngle | ||
| - | planarAngle 30; | ||
| - | |||
| - | |||
| - | // Region-wise refinement | ||
| - | // ~~~~~~~~~~~~~~~~~~~~~~ | ||
| - | |||
| - | // Specifies refinement level for cells in relation to a surface. One of | ||
| - | // three modes | ||
| - | // - distance. 'levels' specifies per distance to the surface the | ||
| - | // wanted refinement level. The distances need to be specified in | ||
| - | // increasing order. | ||
| - | // - inside. 'levels' is only one entry and only the level is used. All | ||
| - | // cells inside the surface get refined up to the level. The surface | ||
| - | // needs to be closed for this to be possible. | ||
| - | // - outside. Same but cells outside. | ||
| - | |||
| - | refinementRegions | ||
| - | { | ||
| - | box1x1x1 | ||
| - | { | ||
| - | mode inside; | ||
| - | levels ((1.0 4)); | ||
| - | } | ||
| - | //sphere | ||
| - | //{ | ||
| - | // mode distance; | ||
| - | // levels ((1.0 5) (2.0 3)); | ||
| - | //} | ||
| - | } | ||
| - | |||
| - | // Mesh selection | ||
| - | // ~~~~~~~~~~~~~~ | ||
| - | |||
| - | // After refinement patches get added for all refinementSurfaces and | ||
| - | // all cells intersecting the surfaces get put into these patches. The | ||
| - | // section reachable from the locationInMesh is kept. | ||
| - | // NOTE: This point should never be on a face, always inside a cell, even | ||
| - | // after refinement. | ||
| - | locationInMesh (5 0.28 0.43); | ||
| - | |||
| - | // Whether any faceZones (as specified in the refinementSurfaces) | ||
| - | // are only on the boundary of corresponding cellZones or also allow | ||
| - | // free-standing zone faces. Not used if there are no faceZones. | ||
| - | allowFreeStandingZoneFaces true; | ||
| - | |||
| - | |||
| - | // Optional: do not remove cells likely to give snapping problems | ||
| - | // handleSnapProblems false; | ||
| - | |||
| - | // Optional: switch off topological test for cells to-be-squashed | ||
| - | // and use geometric test instead | ||
| - | //useTopologicalSnapDetection false; | ||
| - | } | ||
| - | |||
| - | // Settings for the snapping. | ||
| - | snapControls | ||
| - | { | ||
| - | // Number of patch smoothing iterations before finding correspondence | ||
| - | // to surface | ||
| - | nSmoothPatch 3; | ||
| - | |||
| - | // Maximum relative distance for points to be attracted by surface. | ||
| - | // True distance is this factor times local maximum edge length. | ||
| - | // Note: changed(corrected) w.r.t 17x! (17x used 2* tolerance) | ||
| - | tolerance 2.0; | ||
| - | |||
| - | // Number of mesh displacement relaxation iterations. | ||
| - | nSolveIter 30; | ||
| - | |||
| - | // Maximum number of snapping relaxation iterations. Should stop | ||
| - | // before upon reaching a correct mesh. | ||
| - | nRelaxIter 5; | ||
| - | |||
| - | // Feature snapping | ||
| - | |||
| - | // Number of feature edge snapping iterations. | ||
| - | // Leave out altogether to disable. | ||
| - | nFeatureSnapIter 10; | ||
| - | |||
| - | // Detect (geometric only) features by sampling the surface | ||
| - | // (default=false). | ||
| - | implicitFeatureSnap false; | ||
| - | |||
| - | // Use castellatedMeshControls::features (default = true) | ||
| - | explicitFeatureSnap true; | ||
| - | |||
| - | // Detect features between multiple surfaces | ||
| - | // (only for explicitFeatureSnap, default = false) | ||
| - | multiRegionFeatureSnap false; | ||
| - | |||
| - | |||
| - | // wip: disable snapping to opposite near surfaces (revert to 22x behaviour) | ||
| - | // detectNearSurfacesSnap false; | ||
| - | } | ||
| - | |||
| - | // Settings for the layer addition. | ||
| - | addLayersControls | ||
| - | { | ||
| - | // Are the thickness parameters below relative to the undistorted | ||
| - | // size of the refined cell outside layer (true) or absolute sizes (false). | ||
| - | relativeSizes true; | ||
| - | |||
| - | // Layer thickness specification. This can be specified in one of following | ||
| - | // ways: | ||
| - | // - expansionRatio and finalLayerThickness (cell nearest internal mesh) | ||
| - | // - expansionRatio and firstLayerThickness (cell on surface) | ||
| - | // - overall thickness and firstLayerThickness | ||
| - | // - overall thickness and finalLayerThickness | ||
| - | // - overall thickness and expansionRatio | ||
| - | // | ||
| - | // Note: the mode thus selected is global, i.e. one cannot override the | ||
| - | // mode on a per-patch basis (only the values can be overridden) | ||
| - | |||
| - | // Expansion factor for layer mesh | ||
| - | expansionRatio 1.0; | ||
| - | |||
| - | // Wanted thickness of the layer furthest away from the wall. | ||
| - | // If relativeSizes this is relative to undistorted size of cell | ||
| - | // outside layer. | ||
| - | finalLayerThickness 0.3; | ||
| - | |||
| - | // Wanted thickness of the layer next to the wall. | ||
| - | // If relativeSizes this is relative to undistorted size of cell | ||
| - | // outside layer. | ||
| - | //firstLayerThickness 0.3; | ||
| - | |||
| - | // Wanted overall thickness of layers. | ||
| - | // If relativeSizes this is relative to undistorted size of cell | ||
| - | // outside layer. | ||
| - | //thickness 0.5 | ||
| - | |||
| - | |||
| - | // Minimum overall thickness of total layers. If for any reason layer | ||
| - | // cannot be above minThickness do not add layer. | ||
| - | // If relativeSizes this is relative to undistorted size of cell | ||
| - | // outside layer.. | ||
| - | minThickness 0.25; | ||
| - | |||
| - | |||
| - | // Per final patch (so not geometry!) the layer information | ||
| - | // Note: This behaviour changed after 21x. Any non-mentioned patches | ||
| - | // now slide unless: | ||
| - | // - nSurfaceLayers is explicitly mentioned to be 0. | ||
| - | // - angle to nearest surface < slipFeatureAngle (see below) | ||
| - | layers | ||
| - | { | ||
| - | sphere_firstSolid | ||
| - | { | ||
| - | nSurfaceLayers 1; | ||
| - | |||
| - | } | ||
| - | maxY | ||
| - | { | ||
| - | nSurfaceLayers 1; | ||
| - | // Per patch layer data | ||
| - | expansionRatio 1.3; | ||
| - | finalLayerThickness 0.3; | ||
| - | minThickness 0.1; | ||
| - | } | ||
| - | |||
| - | // Disable any mesh shrinking and layer addition on any point of | ||
| - | // a patch by setting nSurfaceLayers to 0 | ||
| - | frozenPatches | ||
| - | { | ||
| - | nSurfaceLayers 0; | ||
| - | } | ||
| - | } | ||
| - | |||
| - | // If points get not extruded do nGrow layers of connected faces that are | ||
| - | // also not grown. This helps convergence of the layer addition process | ||
| - | // close to features. | ||
| - | // Note: changed(corrected) w.r.t 17x! (didn't do anything in 17x) | ||
| - | nGrow 0; | ||
| - | |||
| - | // Advanced settings | ||
| - | |||
| - | |||
| - | // Static analysis of starting mesh | ||
| - | |||
| - | // When not to extrude surface. 0 is flat surface, 90 is when two faces | ||
| - | // are perpendicular | ||
| - | featureAngle 130; | ||
| - | |||
| - | // Stop layer growth on highly warped cells | ||
| - | maxFaceThicknessRatio 0.5; | ||
| - | |||
| - | |||
| - | // Patch displacement | ||
| - | |||
| - | // Number of smoothing iterations of surface normals | ||
| - | nSmoothSurfaceNormals 1; | ||
| - | |||
| - | // Smooth layer thickness over surface patches | ||
| - | nSmoothThickness 10; | ||
| - | |||
| - | |||
| - | |||
| - | // Medial axis analysis | ||
| - | |||
| - | // Angle used to pick up medial axis points | ||
| - | // Note: changed(corrected) w.r.t 17x! 90 degrees corresponds to 130 | ||
| - | // in 17x. | ||
| - | minMedialAxisAngle 90; | ||
| - | |||
| - | // Reduce layer growth where ratio thickness to medial | ||
| - | // distance is large | ||
| - | maxThicknessToMedialRatio 0.3; | ||
| - | |||
| - | // Number of smoothing iterations of interior mesh movement direction | ||
| - | nSmoothNormals 3; | ||
| - | |||
| - | // Optional: limit the number of steps walking away from the surface. | ||
| - | // Default is unlimited. | ||
| - | //nMedialAxisIter 10; | ||
| - | |||
| - | // Optional: smooth displacement after medial axis determination. | ||
| - | // default is 0. | ||
| - | //nSmoothDisplacement 90; | ||
| - | |||
| - | // (wip)Optional: do not extrude a point if none of the surrounding points is | ||
| - | // not extruded. Default is false. | ||
| - | //detectExtrusionIsland true; | ||
| - | |||
| - | |||
| - | // Mesh shrinking | ||
| - | |||
| - | // Optional: at non-patched sides allow mesh to slip if extrusion | ||
| - | // direction makes angle larger than slipFeatureAngle. Default is | ||
| - | // 0.5*featureAngle. | ||
| - | slipFeatureAngle 30; | ||
| - | |||
| - | // Maximum number of snapping relaxation iterations. Should stop | ||
| - | // before upon reaching a correct mesh. | ||
| - | nRelaxIter 5; | ||
| - | |||
| - | // Create buffer region for new layer terminations | ||
| - | nBufferCellsNoExtrude 0; | ||
| - | |||
| - | // Overall max number of layer addition iterations. The mesher will | ||
| - | // exit if it reaches this number of iterations; possibly with an | ||
| - | // illegal mesh. | ||
| - | nLayerIter 50; | ||
| - | |||
| - | // Max number of iterations after which relaxed meshQuality controls | ||
| - | // get used. Up to nRelaxedIter it uses the settings in | ||
| - | // meshQualityControls, | ||
| - | // after nRelaxedIter it uses the values in | ||
| - | // meshQualityControls::relaxed. | ||
| - | nRelaxedIter 20; | ||
| - | |||
| - | // Additional reporting: if there are just a few faces where there | ||
| - | // are mesh errors (after adding the layers) print their face centres. | ||
| - | // This helps in tracking down problematic mesh areas. | ||
| - | //additionalReporting true; | ||
| - | } | ||
| - | |||
| - | // Generic mesh quality settings. At any undoable phase these determine | ||
| - | // where to undo. | ||
| - | meshQualityControls | ||
| - | { | ||
| - | // Specify mesh quality constraints in separate dictionary so can | ||
| - | // be reused (e.g. checkMesh -meshQuality) | ||
| - | #include "meshQualityDict" | ||
| - | |||
| - | |||
| - | // Optional : some meshing phases allow usage of relaxed rules. | ||
| - | // See e.g. addLayersControls::nRelaxedIter. | ||
| - | relaxed | ||
| - | { | ||
| - | // Maximum non-orthogonality allowed. Set to 180 to disable. | ||
| - | maxNonOrtho 75; | ||
| - | } | ||
| - | |||
| - | |||
| - | // Advanced | ||
| - | |||
| - | // Number of error distribution iterations | ||
| - | nSmoothScale 4; | ||
| - | // amount to scale back displacement at error points | ||
| - | errorReduction 0.75; | ||
| - | } | ||
| - | |||
| - | // Advanced | ||
| - | |||
| - | //// Debug flags | ||
| - | //debugFlags | ||
| - | //( | ||
| - | // mesh // write intermediate meshes | ||
| - | // intersections // write current mesh intersections as .obj files | ||
| - | // featureSeeds // write information about explicit feature edge | ||
| - | // // refinement | ||
| - | // attraction // write attraction as .obj files | ||
| - | // layerInfo // write information about layers | ||
| - | //); | ||
| - | // | ||
| - | //// Write flags | ||
| - | //writeFlags | ||
| - | //( | ||
| - | // scalarLevels // write volScalarField with cellLevel for postprocessing | ||
| - | // layerSets // write cellSets, faceSets of faces in layer | ||
| - | // layerFields // write volScalarField for layer coverage | ||
| - | //); | ||
| - | |||
| - | // Merge tolerance. Is fraction of overall bounding box of initial mesh. | ||
| - | // Note: the write tolerance needs to be higher than this. | ||
| - | mergeTolerance 1e-6; | ||
| - | |||
| - | // ************************************************************************* // | ||
| - | |||
| - | ``` | ||
| - | |||
| - | |||
| - | # meshQualityDict | ||
| - | |||
| - | ``` | ||
| - | |||
| - | /*--------------------------------*- C++ -*----------------------------------*\ | ||
| - | | ========= | | | ||
| - | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | ||
| - | | \\ / O peration | Version: 5 | | ||
| - | | \\ / A nd | Web: www.OpenFOAM.org | | ||
| - | | \\/ M anipulation | | | ||
| - | \*---------------------------------------------------------------------------*/ | ||
| - | FoamFile | ||
| - | { | ||
| - | version 2.0; | ||
| - | format ascii; | ||
| - | class dictionary; | ||
| - | object meshQualityDict; | ||
| - | } | ||
| - | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // | ||
| - | |||
| - | // Include defaults parameters from master dictionary | ||
| - | #include "$WM_PROJECT_DIR/etc/caseDicts/meshQualityDict" | ||
| - | |||
| - | |||
| - | // ************************************************************************* // | ||
| - | |||
| - | ``` | ||
| - | |||