pimpleDyMFoamの設定について

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