FiFiWiki2

FiFiWikiの第2版

ユーザ用ツール

サイト用ツール


openfoam

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

OpenFOAM

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

 乱流モデル

定常(simpleFoam)と非定常(pimpleFoam)でも同じ

constant/turbulencePropertiesにて、laminarかRASかLESかを選ぶ.その下に書く設定を追記する。

  • 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,prgh,T,k,epsilon,nut,alphat - buoyantSimpleFoam - U,p,prgh,T,k,epsilon,nut,alphat
//
// 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:非圧縮製定常乱流ソルバー]

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);
// メッシュの初期化
foamCleanPolyMesh

メッシュはきれいになる

// 不要な境界の除去
createPatch -overwrite

OpenFOAMによる熱流体解析

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.1520514282.txt.gz · 最終更新: 2018/03/08 13:04 by fifi