この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 最新リビジョン 両方とも次のリビジョン | ||
openfoam [2018/03/08 13:04] fifi |
openfoam [2018/04/01 23:01] fifi |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
+ | [[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 mixing_elbow-mm.stl mixing_elbow.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 <= これしかない | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | こんだけ。非圧縮性ソルバー はそんなにない | ||
- | |||
- | |||
- | - ケースの設定 | ||
- | - 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 | ||
- | |||
- | ``` | ||
- | // どこのメッシュを残すかの場所を指定する | ||
- | 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 | ||
- | ``` | ||
- | |||
- | ``` | ||
- | FoamFile | ||
- | { | ||
- | version 2.0; | ||
- | format ascii; | ||
- | class dictionary; | ||
- | object blockMeshDict; | ||
- | } | ||
- | |||
- | // x3^ | ||
- | // | | ||
- | // |__ x1 | ||
- | // / | ||
- | // x2 | ||
- | |||
- | // 3____ 2 | ||
- | // /| /| | ||
- | // /_0__/ |1 | ||
- | //7| |6/ | ||
- | // |____|/ | ||
- | // 4 5 | ||
- | |||
- | // __ 1 | ||
- | // /| | ||
- | // _2/ |0 ==> 外向きに右ねじの法則 | ||
- | // __|/ | ||
- | // 3 | ||
- | // | ||
- | |||
- | convertToMeters 1; //[m] | ||
- | |||
- | vertices | ||
- | ( | ||
- | (0 0 0) //0 | ||
- | (1 0 0) //1 | ||
- | (1 1 0) //2 | ||
- | (0 1 0) //3 | ||
- | (0 0 0.1) //4 | ||
- | (1 0 0.1) //5 | ||
- | (1 1 0.1) //6 | ||
- | (0 1 0.1) //7 | ||
- | ); | ||
- | |||
- | blocks | ||
- | ( | ||
- | |||
- | hex (0 1 2 3 4 5 6 7) (40 40 10) simpleGrading (8 5 2) | ||
- | |||
- | // | ||
- | // simpleGrading (x1s x2s x3s) | ||
- | // x*s : 分割幅の比率 (最後の分割幅)/(最初の分割幅) | ||
- | // edgeGrading(g0 g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11) | ||
- | // g* : 全ての辺に対する分割幅の比率 | ||
- | // | ||
- | ); | ||
- | |||
- | edges | ||
- | ( | ||
- | ); | ||
- | |||
- | // -*- Boundary Type -*- | ||
- | // patch パッチ (入/出境界) | ||
- | // wall 壁 | ||
- | // symmetryPlane 対称面 | ||
- | // cyclic 周期境界 | ||
- | // cyclicAMI 不適合境界 | ||
- | // wedge 2次元軸対象 | ||
- | // empty 2次元問題 | ||
- | |||
- | boundary | ||
- | ( | ||
- | top | ||
- | { | ||
- | type wall; | ||
- | faces | ||
- | ( | ||
- | (3 7 6 2) | ||
- | ); // カンマ必須 | ||
- | } | ||
- | bottom | ||
- | { | ||
- | type wall; | ||
- | faces | ||
- | ( | ||
- | (1 5 4 0) | ||
- | ); | ||
- | } | ||
- | left | ||
- | { | ||
- | type wall; | ||
- | faces | ||
- | ( | ||
- | (0 4 7 3) | ||
- | ); | ||
- | } | ||
- | right | ||
- | { | ||
- | type wall; | ||
- | faces | ||
- | ( | ||
- | (2 6 5 1) | ||
- | ); | ||
- | } | ||
- | frontAndBack | ||
- | { | ||
- | type empty; // 2次元問題 | ||
- | 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) | ||
- | ); | ||
- | |||
- | |||
- | ``` | ||
- | |||
- | |||
- |