昨日の勉強会での宿題を調べてみた。
昔、やったんだけどなぁ・・・ということだったんですが、実は、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 など)も使えることもわかるし、独自のモデルを作るのもさほど難しくはなさそう・・・と判ります。