Transcript downloading

OpenFOAM beginner 勉強会
進捗報告
2011年2月27日
髙橋 功一
進捗概要
• データ付与・抽出ツールの使用法
– セルデータ付与(setFields)
– 数値データ出力(controlDictのfunction, sample)
・・・勉強中
• ソース読解トライ
– Eclipse(なんとかつかえるところまで)
– SimpleFoamから勉強
– 狭間さん講義の予習
setFieldsの使い方:探索してみました
Dambreakチュートリアル
setFieldsDict
FoamFile
{
version
2.0;
format
ascii;
class
dictionary;
location "system";
object
setFieldsDict;
}
defaultFieldValues
(
volScalarFieldValue alpha1 0
);
regions
(
boxToCell
{
box (0 0 -1) (0.1461 0.292 1);
fieldValues
(
volScalarFieldValue alpha1 1
);
}
);
boxToCellで指定した直方体内の
セルだけAlpha1を1にする
直方体以外で指定したいときは?
dambreak
【いろいろな方法で探索トライ】
・わざと間違えて記述
boxToCell → aboxToCell エラーメッセージにヒントあり
・ソースと同じ場所に置いてあるsetFieldsDict
setFieldsのソースの場所にDictファイルの例題もおいてある
・分かっているキーワードで全文検索
“boxToCell”で“OpenFOAM-1.7.1”以下を全文検索
setFieldsの使い方探索
“boxToCell”で全文検索
cellSetDictに同じキーワードあり
setFieldsの使い方探索
cellSetDict
// Cells with cell centre within box
boxToCell
{
box (0 0 0) (1 1 1);
}
Dambreakチュートリアル
setFieldsDict
直方体
(dambreakと同じ)
// Cells with cell centre within box
// Is skewed, rotated box. Given as origin and three spanning vectors.
rotatedBoxToCell
{
origin (0.2 0.2 -10);
直方体を回転させた形状
i
(0.2 0.2 0);
j
(-0.2 0.2 0);
k
(10 10 10);
}
// Cells with centre within cylinder
cylinderToCell
円筒
{
p1
(0.2 0.2 -10); // start point on cylinder axis
p2
(0.2 0.2 0); // end point on cylinder axis
radius 5.0;
}
// Cells with centre within sphere
sphereToCell
{
centre (0.2 0.2 -10);
radius 5.0;
}
球
FoamFile
{
version
2.0;
format
ascii;
class
dictionary;
location "system";
object
setFieldsDict;
}
defaultFieldValues
(
volScalarFieldValue alpha1 0
);
regions
(
boxToCell
{
box (0 0 -1) (0.1461 0.292 1);
fieldValues
(
volScalarFieldValue alpha1 1
);
}
);
cellSetDictの記載に
この記述を足せばよさそう
// Select by explicitly providing cell labels
labelToCell //セルラベル(boundaryファイル)
{
value (12 13 56 250 350); // labels of cells
fieldValues
(
volScalarFieldValue alpha1 1
);
}
// Cells with cell centre within box
boxToCell //直方体
{
box (0.1 0.1 -1) (0.3 0.3 1);
fieldValues
(
volScalarFieldValue alpha1 1
);
}
// Cells with cell centre within box
// Is skewed, rotated box. Given as origin and three spanning vectors.
rotatedBoxToCell //並行六面体?
{
origin (0.2 0.2 0);
i
(0.1 0.1 0.1);
j
(0 0 -0.1);
k
(0 0.1 0);
fieldValues
(
volScalarFieldValue alpha1 1
);
}
// Cells with centre within cylinder
cylinderToCell //円筒
{
p1
(0.2 0.2 -1); // start point on cylinder axis
p2
(0.2 0.2 1); // end point on cylinder axis
radius 0.1;
fieldValues
(
volScalarFieldValue alpha1 1
);
}
// Cells with centre within sphere
sphereToCell //球
{
centre (0.2 0.2 0);
radius 0.1;
fieldValues
(
volScalarFieldValue alpha1 1
);
}
// Cells with cellCentre nearest to coordinates
nearestToCell //指定点に一番近いセル
{
points ((0.1 0.1 0) (0.2 0.2 0) (0.4 0.1 0));
fieldValues
(
volScalarFieldValue alpha1 1
);
}
p
// values of field within certain range
fieldToCell //フィールド値の範囲で指定(ベクトル値Uはmag(U)と指定)
{
fieldName p;
// Note: uses mag(U) since volVectorField
min
300;
max
500;
fieldValues
(
volScalarFieldValue alpha1 1
);
}
alpha1
その他
(未実施)
cellToCell
faceToCell
pointToCell
zoneToCell
faceZoneToCell
shapeToCell
surfaceToCell
regionToCell
:cellSetで指定
:指定したfaceSetに隣接するセル (option owner/neighbour/any/all)
:指定したpointSet (に隣接するセル?) (option any/all)
:cellzoneで指定
:指定したfacezoneに隣接するセル (option master/slave)
:セル形状で指定 (option hex/wedge/prism/pyr/tet/tetWedge/splitHex)
:STLファイルで指定 (option …)
:?
ソース読解トライ
今後、最も応用範囲の広そうなsimpleFoamをベースに勉強
○ソルバーの主ソース
・simpleFoam.C
○ヘッダファイル
どのソルバーにも必ずある?
・createFields.H ・・・変数定義
・UEqn.H
・・・Uの方程式を記述
ソルバーによっては
・pEqn.H
・・・pの収束計算(simple法)を記述
ないことも
・convergenceCheck.H
興味なし
(主ソースに直接書き)
・initConvergenceCheck.H
(*)kやεの保存方程式はsimpleFoamディレクトリ内のソースに書かれていない
【UEqn.H】
tmp<fvVectorMatrix> UEqn
(
fvm::div(phi, U)
+ turbulence->divDevReff(U)
);
UEqn().relax();
eqnResidual = solve
(
UEqn() == -fvc::grad(p)
).initialResidual();
maxResidual = max(eqnResidual, maxResidual);
UEqn    (U)    (eff   U)
UEqn  p'
?
元の方程式(想像)
 p
  (UU)   {(   t )  U}   

皆様にご相談(特に知りたいところ)
ソースが難解すぎて、全く手が付けられず
皆様、どうやって調べていますか?
1.乱流
RASModel(kepsilon)の機能を
調べたい
【createFields.H】
autoPtr<incompressible::RASModel> turbulence
(
incompressible::RASModel::New(U, phi, laminarTransport)
);
tmp<fvVectorMatrix> UEqn
RASModelにはdivDevReff以外にも
(
使える機能がありそう
fvm::div(phi, U)
+ turbulence->divDevReff(U)
);
2.境界条件
使い方不明の境界条件が多数
使い方を調べたい
// dambreak/0/p
atmosphere
{
type
p0
U
phi
rho
psi
gamma
value
}
の境界条件部分
totalPressure;
uniform 0;
U;
phi;
rho;
none;
1;
uniform 0;
ここに入るパラメータ
各境界条件ごとに
項目が変わる