FiFiWiki2

FiFiWikiの第2版

ユーザ用ツール

サイト用ツール


openfoam

**以前のリビジョンの文書です**

OpenFOAM

  • OpenFOAMでできること
    • 非圧縮性流体の定常/非定常解析 ⇐ これしたい
    • 圧縮性流体の定常/非定常解析
    • 流体・個体伝熱解析
    • 混相流(VOF)
  • 非圧縮性流体の定常/非定常解析を目指す

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:非圧縮製定常乱流ソルバー]

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 (定常計算)

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/mixingelbow.stlが設置されている - blockMeshを実行すると、メッシュが切られた直方体が作られた。 - surfaceFeatureExtractで特徴線を抽出 - つまり、stlの外形線をパスとしてだしている。constant/extendedFeatureEdgeMeshの下に保存されている - snappyHexMeshを実行すると、polyMeshの中身も増えた。また、triSurface/mixingelbow.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);

Q&A

  • Q: チュートリアルからコピーするだけでいいの?設定はどこまで変えていいの?
  • Q: FoamFileのヘッダのヴァージョンは適当?

参考

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)
);

openfoam.1520045043.txt.gz · 最終更新: 2018/03/03 02:44 by fifi