壁関数の計算結果の検証

OpenFOAM 4.x

ケース

$FOAM_TUTORIALS/incompressible/boundaryFoam/boundaryWallFunctionsProfile

概要

流体の動粘性係数 ν をそれぞれ 1e-2、1e-3、1e-4、1e-5、1e-6、1e-7、1e-8(単位 m2/s)と変化させて計算を行い、それぞれの計算結果から壁面隣接セルの壁面からの無次元距離、無次元速度を求め、Spalding 則と比較します。無次元距離 y+、無次元速度 u+、Spalding 則はそれぞれ以下の様に定義されます。

  • 壁面からの無次元距離:y^+:=\frac{u_\tau y}{\nu}
  • 無次元速度:u^+:=\frac{u}{u_\tau}
  • Spalding 則:y^+=u^+ + \frac{1}{E} \left [ e^{\kappa u^+} - 1 - \kappa u^+ - \frac{1}{2}(\kappa u^+)^2 - \frac{1}{6}(\kappa u^+)^3 \right ]

ただしここで uτ は壁面摩擦速度(=(壁面せん断応力/流体密度)1/2)、y は壁面隣接セル中心と壁面の距離 、u は壁面隣接セル中心での流速、ν は動粘性係数です。また κ=0.41、E=9.8 とします。

流入側領域 front、流出側領域 back は周期境界条件を設定し、流路壁である領域 lowerWall、upperWall はすべりなし壁条件とします。メッシュは Y 方向にのみ作成し、2次元モデルとして計算を行います。

各動粘性係数での流速の目標平均流速 10 m/s を以下の様にファイル constant/transportProperties で指定します。

Ubar            [0 1 -1 0 0 0 0] (10 0 0);

メッシュは以下の通りです。

メッシュ メッシュ

計算結果は以下の通りです。

y+ と u+ の関係 y+ と u+ の関係(円形マーカーが計算値、線が Spalding 則)

計算値がおおよそ Spalding 則と一致することがわかります。

実行コマンド

cp -r $FOAM_TUTORIALS/incompressible/boundaryFoam/boundaryWallFunctionsProfile boundaryWallFunctionsProfile
cd boundaryWallFunctionsProfile

blockMesh
echo "# yPlus vs uPlus" > yPlus_vs_uPlus

# nu を 1e-2 として計算
sed "s/XXX/2/g" constant/transportProperties.template > constant/transportProperties
boundaryFoam > log.boundaryFoam.2
foamLog log.boundaryFoam.2
yPlus=`awk < logs/yPlus_0 'END{print $2}'`
uPlus=`awk < logs/uPlus_0 'END{print $2}'`
echo "$yPlus $uPlus" >> yPlus_vs_uPlus
rm -rf logs

# nu を 1e-3 として計算
sed "s/XXX/3/g" constant/transportProperties.template > constant/transportProperties
boundaryFoam > log.boundaryFoam.3
foamLog log.boundaryFoam.3
yPlus=`awk < logs/yPlus_0 'END{print $2}'`
uPlus=`awk < logs/uPlus_0 'END{print $2}'`
echo "$yPlus $uPlus" >> yPlus_vs_uPlus
rm -rf logs

# nu を 1e-4 として計算
sed "s/XXX/4/g" constant/transportProperties.template > constant/transportProperties
boundaryFoam > log.boundaryFoam.4
foamLog log.boundaryFoam.4
yPlus=`awk < logs/yPlus_0 'END{print $2}'`
uPlus=`awk < logs/uPlus_0 'END{print $2}'`
echo "$yPlus $uPlus" >> yPlus_vs_uPlus
rm -rf logs

# nu を 1e-5 として計算
sed "s/XXX/5/g" constant/transportProperties.template > constant/transportProperties
boundaryFoam > log.boundaryFoam.5
foamLog log.boundaryFoam.5
yPlus=`awk < logs/yPlus_0 'END{print $2}'`
uPlus=`awk < logs/uPlus_0 'END{print $2}'`
echo "$yPlus $uPlus" >> yPlus_vs_uPlus
rm -rf logs

# nu を 1e-6 として計算
sed "s/XXX/6/g" constant/transportProperties.template > constant/transportProperties
boundaryFoam > log.boundaryFoam.6
foamLog log.boundaryFoam.6
yPlus=`awk < logs/yPlus_0 'END{print $2}'`
uPlus=`awk < logs/uPlus_0 'END{print $2}'`
echo "$yPlus $uPlus" >> yPlus_vs_uPlus
rm -rf logs

# nu を 1e-7 として計算
sed "s/XXX/7/g" constant/transportProperties.template > constant/transportProperties
boundaryFoam > log.boundaryFoam.7
foamLog log.boundaryFoam.7
yPlus=`awk < logs/yPlus_0 'END{print $2}'`
uPlus=`awk < logs/uPlus_0 'END{print $2}'`
echo "$yPlus $uPlus" >> yPlus_vs_uPlus
rm -rf logs

# nu を 1e-8 として計算
sed "s/XXX/8/g" constant/transportProperties.template > constant/transportProperties
boundaryFoam > log.boundaryFoam.8
foamLog log.boundaryFoam.8
yPlus=`awk < logs/yPlus_0 'END{print $2}'`
uPlus=`awk < logs/uPlus_0 'END{print $2}'`
echo "$yPlus $uPlus" >> yPlus_vs_uPlus
rm -rf logs

gnuplot
gnuplot>set grid
gnuplot>set xlabel "y+"
gnuplot>set ylabel "u+"
gnuplot>set key top left
gnuplot>set size 0.75, 0.75
gnuplot>set parametric
gnuplot># u+ range
gnuplot>set trange [0:35]
gnuplot># Spaldings law
gnuplot>k=0.41
gnuplot>E=9.8
gnuplot>f(t) = t + 1/E*(exp(k*t) - 1 - k*t*(1 + 0.5*k*t) - 1/6*k*t**3)
gnuplot>set logscale x
gnuplot>set format x "10^{%T}"
gnuplot>plot f(t),t title "Spalding" with lines linetype -1, "yPlus_vs_uPlus" title "OpenFOAM" with points lt 1 pt 6

ユーティティー foamLog を使用してそれぞれの計算結果から (y+, u+) を求めています。

計算時間

10.61秒 ※シングル、Inter(R) Core(TM) i7-2600 CPU @ 3.40GHz 3.40GHz

参照