pimpleDyMFoam
の設定について
一関高専・若嶋 2014/12/5 第3回OpenCAE初歩情報交換会@北東北 1 調査報告 ※OpenFOAM 2.3.xについてのみ調査OpenFOAM
で利用できる
DyM
ソルバー
$ cd $FOAM_TUTORIALS
$ find . -name *DyM*
./incompressible/
pimpleDyMFoam
./incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_pimpleDyMFoam
./compressible/rhoPimpleDyMFoam
./multiphase/multiphaseInterDyMFoam
./multiphase/interDyMFoam
./multiphase/compressibleInterDyMFoam
./multiphase/interPhaseChangeDyMFoam
./multiphase/potentialFreeSurfaceDyMFoam
DynamicMesh
機能で実現できる動き
• 基本的に運動条件を指定 ① 領域が剛体運動(併進,回転)する場合 ② 領域がトポロジー変化を伴わずに変形をする場合(例:風船の膨張・収縮) ③ 領域のトポロジーが変化(領域が分離・結合)する場合(例:エンジンシリンダー+ピストン)@
OpenFOAM/OpenFOAM-2.3.x/src/dynamicFvMesh
dynamicFvMesh・・・?(dynamicMeshのクラスラッパー?) dynamicInkJetFvMesh・・・? dynamicMotionSolverFvMesh・・・メッシュ変形を伴う場合(メッシュモーフィング) dynamicRefineFvMesh・・・メッシュリファインを伴う場合 solidBodyMotionFvMesh・・・メッシュ剛体移動 ⇒今回はこちらを使用staticFvMesh・・・DynamicMeshを使用しない(=Static)
2014/12/5 第3回OpenCAE初歩情報交換会@北東北 3
solidBodyMotionFvMesh
1.
併進
linearMotion・・・等速直線運動 oscillatingLinearMotion・・・往復直線運動2.
回転
rotatingMotion・・・等速回転運動⇒ 今回はこちらを使用 oscillatiingRotationMotion・・・往復回転運動 axisRotatingMotion・・・等速回転運動3.
船の動き
SDA(ShipDesignAnalysis:Roll/Sway/Heaveの3自由度)4.
上記の組み合わせの運動
multiMotion5.
速度が変化する場合などをテーブルで指定(
6
自由度)
tabulated6DoFMotion 参考)http://sssslide.com/www.slideshare.net/fumiyanozaki96/openfoamDynamicMesh
利用時の基本的な流れ
1. 格子生成(ケースディレクトリ中の2つのサブフォルダ中に作成)
1. stator側Meshフォルダ “mesh_stator/”でstatorメッシュ作成
• AMI領域境界は,例えば“AMIs”としておく
2. rotor側Meshフォルダ“mesh_rotor/”でrotorメッシュ作成
3. rotor計算領域にcellSet名“rotor”を設定しておく(setSet –batch/topoSetコマンド)
• AMI領域境界は,例えば“AMIr”としておく
※ インターフェースのメッシュは直交性に注意(精度,収束性)
4. mergeMesh mesh_rotor mesh_stator
• rotorMesh配下にmergeされたメッシュフォルダが生成される
5. polyMeshフォルダを本来の場所にコピー
6. boundaryファイルを修正(cyclicAMI patch作成)
2. その他の準備
1. topoSetコマンドでfaceset “AMI”を作成
• system/topoSetDict 2. renumberMesh(大規模メッシュのときのmatrix演算の効率化) 3. constant/dynamicMeshDictを設定(回転中心,回転数を指定) 3. ソルバー 1. ****DyMFoam(シリアル) 4. 可視化 1. ParaFoam(Paraview) 2014/12/5 第3回OpenCAE初歩情報交換会@北東北 5 CASE |-- 0/ |-- constant/ | |-- polyMesh | |-- triSurface |-- mesh_rotor/ | |-- 0 | |-- 0.001 | |-- constant | |-- system |-- mesh_stator/ | |-- 0 | |-- constant | |-- system |-- system/ stator rotor copy
Simple 2D pimpleDyMFoam
チュートリアル
• 2D 層流解析(z面は”empty”) • stator計算領域: dx×dy×dz=1x1x0.1m • rotor計算領域:φ0.2m(×0.1m) • 回転体:0.1√2×0.1√2m(×0.1m) 計算条件 • 流体:空気(ν=1e-5m2/s)• inlet:U=(1 0 0), p=zeroGradient
• outlet: U=zeroGradient, p=0
• sides: slip
• solidwall: U=movingWallVelocity, p=zeroGradient
• 回転体60rpm≒6.283 rad/s y x 1m/s dz=0.1m slides sides inlet outlet stator rotor simple2D_AMI |-- 0/ |-- constant/ | |-- polyMesh | |-- triSurface |-- mesh_rotor/ | |-- 0 | |-- constant | |-- system |-- mesh_stator/ | |-- 0 | |-- constant | |-- system |-- system/ HP
STEP 1: stator
領域のメッシュ作成
(blockMesh)
$ cd mesh_stator (
サブケースフォルダに移動
)
$ blockMesh
2014/12/5 第3回OpenCAE初歩情報交換会@北東北 7 1m/s slides sides inlet outlet stator AMIs AMIsは,回転領域とのstator側の境界面 (patch/wall) 0, constant, systemフォルダ(と中身)はダ ミーとして作っておくSTEP 2: rotor
領域のメッシュ作成
(blockMesh)
$ cd ..
$ cd mesh_rotor(
サブケースフォルダに移動
)
$ blockMesh
blocks (
hex (0 1 5 4 8 9 13 12) rotor(50 50 1) simpleGrading (1 0.5 1) hex (1 2 6 5 9 10 14 13) rotor(50 50 1) simpleGrading (1 0.5 1) hex (2 3 7 6 10 11 15 14) rotor (50 50 1) simpleGrading (1 0.5 1) hex (3 0 4 7 11 8 12 15) rotor (50 50 1) simpleGrading (1 0.5 1) );
AMIrは,回転領域とのrotor側の境界面
(patch/wall)・・・・AMIsと形状は一致
0, constant, systemフォルダ(と中身)はダミーと してつくっておく
blockの指定で,”rotor”というcellZone名を指定
AMIr
STEP 3: mergeMeshes
$ mergeMeshes mesh_rotor mesh_stator
mergeMeshes <master> <slave>
<master>
フォルダに,
<master>+<slave>
のマージされたメッシュが1時間ステッ
プだけ進んだフォルダとして生成される(
polyMesh
フォルダが含まれている)
2014/12/5 第3回OpenCAE初歩情報交換会@北東北 9
$ ls mesh_rotor/ 0 constant system
$ mergeMeshes mesh_rotor mesh_stator : $ ls mesh_rotor/ 0 0.001 constant system ※-overwriteオプションをつけるとmesh_rotorのメッシュを上書き ※0.001という数値は設定によります
STEP 4:
マージメッシュのコピーと
cyclicAMI
パッチの設定
•
メッシュデータを本来のメッシュフォルダにコピー
$ cp mesh_rotor/0.001/polyMesh/* constant/polyMesh/
•
cyclicAMI
パッチの設定(
constant/polyMesh/boundary
の編集)
$ vi constant/polyMesh/boundary
AMIr { type wall; inGroups 1(wall); nFaces 200; startFace 39600; } AMIs { type wall; inGroups 1(wall); nFaces 200; startFace 80200; } AMIs { type cyclicAMI; matchTolerance 0.001; neighbourPatch AMIr; transform noOrdering; inGroups 1(cyclic); nFaces 200; startFace 80200; AMIr { type cyclicAMI; matchTolerance 0.001; neighbourPatch AMIs; transform noOrdering; inGroups 1(cyclic); nFaces 200; startFace 80200;STEP 5:
回転の設定
$ vi constant/dynamicMeshDict
2014/12/5 第3回OpenCAE初歩情報交換会@北東北 11 dynamicFvMesh solidBodyMotionFvMesh; motionSolverLibs ( “libfvMotionSolvers.so” ); solidBodyMotionFvMeshCoeffs { cellZone rotor; solidBodyMotionFunction rotatingMotion; rotatingMotionCoeffs { origin (0 0 0); axis (0 0 1); omega 6.2853; //rad/s } } solidBodyMotionタイプのDynamicMeshを使う solidBodyMotionタイプの設定用subDictionary 回転領域のcellZoneを指定 移動の種類(=回転) 原点origin 回転軸のベクトルaxis 回転数omega (rad/sに注意)STEP 6:
初期・境界条件の設定
•
回転に関わる部分のみを示します
AMIs { type cyclicAMI; } AMIr { type cyclicAMI; } solidwall {type movingWallVelocity; // fixedValue; value uniform (0 0 0); } 0/U AMIs { type cyclicAMI; } AMIr { type cyclicAMI; } solidwall { type zeroGradient; } 0/p