Solver | boundaryFoam |
Case | boundaryWallFunctionProfile (/tutorials/incompressible/boundaryFoam/boundaryWallFunctionProfile) |
Version | 2.1.x |
Kerword | 定常,乱流モデル |
変数 | U [m/s]
k [m^2/s^2] epsilon [m^2/s^3] |
定数 | 流体特性(constant/transportProperties)
nu [m^2/s] 乱流モデル(constant/RASProperties) RASModel kEpsilon |
基礎方程式 | |
コメント | (注:本チュートリアルの物理現象面での解説については、専門的にみて疑問なところもあるかと思うが、実行スクリプトに参考になりそうな点が多いので、スクリプトの解説を主眼として記した)
隣のチュートリアルケース(boundaryWallFunction)は、特定の動粘性係数を与えた時の平行平板間の発達した境界層流れ場を計算してくれるものだが、本チュートリアルはその動粘性係数を複数の水準で変更し、順次ソルバーを実行する。このソルバーは、壁面に隣接したセルに関するy+やu+などの値を出力してくれるので、計算ログの出力ファイルから、これらの値を読み取って、最終的に、OpenFOAMの壁法則モデルを使って計算された壁面すべり速度と、Spalding則とを比較したプロット図が作成される。 また、通常のfoamLogコマンドによるログファイル解析では、本ソルバーに固有の出力項目(y+,u+など)を解析できないが、foamLog.db という定義ファイルを用意することで実現しており、この表記方法も他のソルバーで応用する際の参考になるだろう。 (結果考察) プロット図(左図)をみると、y+が10のあたり(nu=1e-4と、1e-5の間)で、OpenFOAMで計算されたu+の大小関係が逆転しているが 、計算された流れ場(図2)を見ると、明らかに非物理的な結果になっていた。kEpsilonモデルを使う際の要注意点といったところか。 また、乱流モデルを変えて計算すると、結果も大きく変わってくるので(図3)、それぞれの乱流モデルを採用する際の参考にもなりそう。 |
U | epsilon | k | nut | |
internalField | uniform ( 1 0 0 ); | uniform 1e-08; | uniform 1e-09; | uniform 0; |
lowerWal | type fixedValue;value uniform ( 0 0 0 ); | type epsilonWallFunction; value uniform 1e-08; | type kqRWallFunction; internalField uniform 0.1; | type nutkWallFunction; value uniform 0; |
upperWal | type fixedValue; value uniform ( 0 0 0 ); | type epsilonWallFunction; value uniform 1e-08; | type kqRWallFunction; internalField uniform 0.1; | type nutkWallFunction; value uniform 0; |
front | type cyclic; | type cyclic; | type cyclic; | type cyclic; |
back | type cyclic; | type cyclic; | type cyclic; | type cyclic; |
defaultFaces | type empty; | type empty; | type empty; | type empty; |
実行コマンド
boundaryFoam
$ blockMesh //メッシュ作成(blockMesh) $ exponents="2 3 4 5 6 7 8" //パラメタのセットを定義 $ echo "# yPlus vs uPlus" > yPlus_vs_uPlus //gnuplot 用のデータファイルを作成 $ for e in $exponents //各パラメタについて以下実行 > do > sed "s/XXX/$e/g" constant/transportProperties.template \ //transportPropertiesファイルを書き換える > > constant/transportProperties //nu [ 0 2 -1 0 0 0 0 ] 1e-XXX // (XXXの部分を$eに) > boundaryFoam | tee log.boundaryFoam //ソルバーの実行(⇒ログはlog.boundaryFoam) > mv log.boundaryFoam log.boundaryFoam_$e //ログファイル名を変更 > foamLog log.boundaryFoam_$e //ログファイルを解析(logsフォルダ下に結果) > yPlus=`awk < logs/yPlus_0 'END{print $2}'` //yPlus_0の最終行の2番目の数字をyPlusに収納 > uPlus=`awk < logs/uPlus_0 'END{print $2}'` //uPlus_0の最終行の2番目の数字をuPlusに収納 > echo "$yPlus $uPlus" >> yPlus_vs_uPlus //yPlus,uPlusを、データファイルに書き出し > rm -rf logs //ログファイルの解析結果を削除 > done $ graphName="OF_vs_ANAYTICAL.eps" //gnuplotで作成するグラフの名前を定義 $ gnuplot<<EOF //gnuplotを実行 > set terminal postscript eps color enhanced > set output "$graphName" > set grid > set xlabel "y+" > set ylabel "u+" > set key top left > set size 0.75, 0.75 > set parametric > # u+ range > set trange [0:35] > # Spaldings law > k=0.41 > E=9.8 > f(t) = t + 1/E*(exp(k*t) - 1 - k*t*(1 + 0.5*k*t) - 1/6*k*t**3) //Spalding則 > set logscale x > set format x "10^{%T}" > plot f(t),t title "Spalding" with lines linetype -1, \ //Spalding則をラインプロット > "yPlus_vs_uPlus" title "OpenFOAM" with points lt 1 pt 6 //OpenFOAMの計算結果をプロット >EOF