MRF源代码的问题
-
大家好,最近阅读MRF的源代码时碰到了一些问题,其在旋转区域的处理时有一个给旋转坐标系内部的点加入科里奥利力的函数,但是貌似加得不对?按理论来说,如果以旋转坐标系作为参考系,应该在每一点加上科里奥利力和离心力,其数学式如下:
可是该程序中仅仅加入了上式中科里奥利力的一半,即w*v,并且没有加入离心力,这段代码如下:void Foam::MRFZone::addCoriolis ( const volVectorField& U, volVectorField& ddtU ) const { if (cellZoneID_ == -1) { return; } const labelList& cells = mesh_.cellZones()[cellZoneID_]; vectorField& ddtUc = ddtU.primitiveFieldRef(); const vectorField& Uc = U; const vector Omega = this->Omega(); forAll(cells, i) { label celli = cells[i]; ddtUc[celli] += (Omega ^ Uc[celli]); } }
网上也有人说其可能有问题,并将这段程序加以修改:
void Foam::MRFZone::addCoriolis ( const volVectorField& U, volVectorField& ddtU ) const { if (cellZoneID_ == -1) { return; } const labelList& cells = mesh_.cellZones()[cellZoneID_]; vectorField& ddtUc = ddtU.primitiveFieldRef(); const vectorField& Uc = U; const vector Omega = this->Omega(); forAll(cells, i) { label celli = cells[i]; ddtUc[celli] += (2.0*Omega ^ Uc[celli])+Omega ^ (Omega ^ (mesh_.C() - origin_)); } }
即改成了公式中的表达形式,附上其网址:http://waynezw0618.blog.163.com/blog/static/9228640920083235430877/ 那么该程序的编写是否真的有误?还是说是我对MRF思想理解出了偏差?
-
@lllwonderliquid 源代码并没有问题,科氏力和离心力是在旋转坐标系中出现的,在SRF求解器中会完整出现。但是在MRF中,其实是将被输运的速度改为绝对速度了,即:
详情见OpenFOAM wiki:http://openfoamwiki.net/index.php/See_the_MRF_development