昨日の勉強会での宿題を調べてみた。
昔、やったんだけどなぁ・・・ということだったんですが、実は、OpenFOAMの 1.5 以前には、そのものズバリのチュートリアルケース(nonNewtonianIcoFoam/offsetCylinder)が同梱されていたのでした。それを見れば一目瞭然です。
constantの下、transportProperties が、通常、
transportModel Newtonian;
nu nu [ 0 2 -1 0 0 0 0 ] 1e-05;
CrossPowerLawCoeffs
{
nu0 nu0 [ 0 2 -1 0 0 0 0 ] 1e-06;
nuInf nuInf [ 0 2 -1 0 0 0 0 ] 1e-06;
m m [ 0 0 1 0 0 0 0 ] 1;
n n [ 0 0 0 0 0 0 0 ] 1;
}
となっており、nu の値で粘性係数(この場合は動粘性係数)を指定していたのに対して、
transportModel CrossPowerLaw;
nu nu [0 2 -1 0 0 0 0] 1;
CrossPowerLawCoeffs
{
nu0 nu0 [0 2 -1 0 0 0 0] 0.01;
nuInf nuInf [0 2 -1 0 0 0 0] 10;
m m [0 0 1 0 0 0 0] 0.4;
n n [0 0 0 0 0 0 0] 3;
}
として、この場合は、(CrossPowerLaw)を使って、その係数は、no0, nuInf などの値を指定・・・というだけのことでした。
ちなみにこの場合(CrossPowerLaw)粘性係数の値は以下のように計算されているようです (/src/transportModels/incompressivele/viscosityModels/CrossPowerLaw)
return (nu0_ - nuInf_)/(scalar(1) + pow(m_*strainRate(), n_)) + nuInf_;
上記ソースの在所あたり(/src/transportModels/incompressivele/viscosityModels/)を見れば、他のモデル(BirdCarreau, HerschelBulkley など)も使えることもわかるし、独自のモデルを作るのもさほど難しくはなさそう・・・と判ります。
