Googleグループ:OpenFOAMの投稿内容(10月および11月)から,個人的に気になった内容の要約を作成しました。
https://groups.google.com/forum/?hl=ja&fromgroups#!forum/openfoam
--
Q.管内流の周期境界条件
パイプ内部の流れを解析するとき,上流の流入面と下流の流出面を周期境界条件として,発達した流れを計算したい。
単純にcyclic境界を使うと,流入面と流出面とが同一圧力になり,流れがなくなってしまう。どうすれば良いか?
A1.
cyclicJumpから派生したfixedJumpか、更に派生したfanを使う。
fanの使用例は、pimpleFoam/TJunctionFanチュートリアルが参考になる。
jumpの設定については,下記の記事に議論がある。
https://groups.google.com/forum/#!msg/openfoam/qRaaWl5k2l4/AiJ7Tfyd2xMJ
fan境界では,次式のように,面に垂直な速度成分Unの関数として,圧力の上昇分を与えることが可能である。
P=f1 + f2 * Un + f3*Un^2 + ...
この式における係数(f1,f2,f3 など)は,pの境界条件として,下記の様に指定する。
fan_half1
{
type fan;
patchType cyclic;
jump uniform 0;
f 2(100 -0.1);
value uniform 0;
}
上記の例では,Pを与える式は2つの項から成る。定数項(f1)は 100,Unの1次の項の係数は-0.1である。
P = 100 - 0.1 Un
ソースコードは,finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchFields.C
なお,圧力差は0以上になるようになっているので,Pの計算が負になると,自動的に0に置き換えられる。
A2.
別の方法として,平均圧力勾配への考慮を,プログラム内で行う方法がある。
channelFoamソルバーが,この方式をとっている。
平均速度を与えると,それに応じた圧力勾配が計算され,自動的に設定される。
ほかのソルバーでも,channelFoamソルバーを参考にして,改造すれば良い。
A3.
OpenFOAM v2.1以降では, Field sources という機能を使って,A2のカスタマイズなしで,圧力勾配を考慮することが可能となった。
http://foam.sourceforge.net/docs/cpp/a03924_source.html
http://foam.sourceforge.net/docs/cpp/a03923_source.html
上記のソースにある pressureGradientExplicitSource を使うことになる。指定できるパラメータは下記となる。
pressureGradientExplicitSourceCoeffs
{
fieldNames ( U ); // name of velocity field
Ubar (10.0 0 0); // desired average velocity
gradPini gradPini [0 1 -2 0 0] 0; // initial pressure gradient
}
Field sources の設定は constant/sourcesPropertiesで行う。下記の様に記述する。
all
{
type pressureGradientExplicitSource;
active on; //on/off switch
timeStart 0; //start time
duration 1e+30; //duration
selectionMode all; //cellSet // points //cellZone
pressureGradientExplicitSourceCoeffs
{
fieldNames ( U );
Ubar (5 0 0); // desired average velocity
gradPini gradPini [0 1 -2 0 0] 0; // initial pressure gradient
}
}
参考 https://groups.google.com/forum/#!msg/openfoam/qRaaWl5k2l4/AiJ7Tfyd2xMJ
--
Q.流入面に対して法線方向の速度を境界条件として与える方法は?
A.
面に垂直な速度を与える境界条件surfaceNormalFixedValueが,標準機能にあります。
http://www.openfoam.org/docs/user/boundaries.php#x24-1370005.2
Swak4Foamを使う方法もあります。(別途インストールが必要)
controlDictの最後の方に,下記1行を追加します。
libs ( "libgroovyBC.so" );
そして,速度の境界条件のところで,
outlet
{
type groovyBC;
variables "Un=0.1;";
valueExpression "-Un*normal()";
}
とします。
面に垂直な方向の速度をUnとして,数字を与えています。この値と面に垂直なベクトルnormal()の積で,面に垂直な速度の値を指定できます。
http://openfoamwiki.net/index.php/Contrib_groovyBC#Swirl_on_inlet
下記サイトに,両方の指定について,まとめた記述がありました。
http://www.geocities.jp/penguinitis2002/study/OpenFOAM/normal_velocity/normal_velocity.html
--
Q.タービンの解析をpimpleDyMFoamで実施している。計算結果から,回転翼周辺の相対速度を表示させる方法は?
A1.
ParaViewのCalculatorを使って相対速度場を作ることができる。
Z軸周りで回転速度Omega であれば,Calculatorでは,次式で相対速度場を計算できる。
iHat*(U_X-coordsY*Omega)+jHat*(U_Y+coordsX*Omega)+kHat*U_Z
ここで,iHat,jHat,kHat は 単位ベクトル,U_X,U_Y は 速度成分,coordsX,coordsY は 位置座標成分です。
これらの値は,CalculatorパネルのScalarsボタンからプルダウンで選択できます。
ただし,回転軸が傾いている場合には,それを考慮した式にする必要があります。
A2.
MRFSimpleFoam用のUrelユーティリティがCFD-Onlineで公開されている。
http://www.cfd-online.com/Forums/openfoam-solving/71277-how-derive-relative-velocity-mrfsimplefoam.html#post350891
dynamicMeshDictと整合性のあるMRFZonesを作れば,使えるのではないか。
--
Q.流体-固体熱連成解析について
1.流体部と固体部の境界メッシュは一致していなくても良いか?
2.ダクトの入口・出口で差圧(静圧)を取りたい。utilitityで面同士の差圧を直接出力することは可能か?
3.固体部に発熱量を定義することは可能か?
A
1.固体と流体メッシュは一致させる必要はない。
2.patchAverageユーティリティーで,パッチごとの平均を求め,差を計算すると良いのでは。
3.体積発熱には,Field Sourcesを使う。今野先生のプレゼン資料に,とても解りやすい説明がある。
http://www.opencae.jp/attachment/wiki/OpenFOAM-study-group-for-beginner%28ja%29/20120421OFBeginner.pdf
--
Q.pimpleDyMFoamを使い、ami領域を作り、半径流型タービンの翼内部の流動を解析したい。
モデルの作成方法は?
A.
snappyHexMeshを用いた回転体メッシュの作成方法について,日本流体力学会誌6月号の下記論文(野村氏・今川氏)がとても参考になる。
http://www.nagare.or.jp/download/noauth.html?dd=assets/files/download/noauth/nagare/31-3/31-3tokushu2.pdf
blockMeshの段階でAMIインターフェース(円筒面)を作成し,回転領域と静止領域に対して別々にsnappyHexMeshを実行すれば,AMIインターフェースの歪みを避けられる。
--
Q.キャビテ―ションに関するソルバーが2種類あるが,その違いは?
A.
cavitationgFoamはバロトロピー流体モデルである。液相と気相は,密度の違いとして表現されている。各位置での密度が,圧力の関数として求められている。
interPhaseChangeFoamはVOF法に基づく均質流モデルのキャビテーションソルバーである。飽和蒸気圧によって気相の発生を決めたあと,各相内での密度は一定である。