foam-extend的fsiFoam并行效率问题



  • 通过将fsiFoam算例beamInCrossFlow网格等比放大至800万流体网格+800万固体网格,其他参数不变,foam4.0版本,我测试了一下fsiFoam的并行效率,结果发现fsiFoam大规模并行效率非常糟糕,规整的六面体网格,200核以上直接跑不动,峰值在50核左右,和串行比加速比不超过25。
    仔细地对fsiFoam的代码计时,发现求解过程正常,根源出现在固体求解器的一行最小二乘法的cell to point interpolation上,源代码如下:

    头文件声明:

    //- Cell-to-point interpolation
    leastSquaresVolPointInterpolation volToPoint_;
    

    .C文件:

    volToPoint_.interpolate(D_, pointD_);
    

    在这个插值函数里面,用的大量的scheduled形式的MPI通信,MPI_Probe函数占用了大量的时间。
    底层的东西我改不了,就不求甚解地直接把这个插值类从最小二乘法的leastSquaresVolPointInterpolation 改成了反距离加权法的volPointInterpolation,编译正常,报错的地方改好了且不参加计算。
    (foam-extend提供了volPointInterpolation、leastSquaresVolPointInterpolation 和edgeCorrectedVolPointInterpolation,第三个的输入参数不一样就没用)
    但是计算结果出了问题,网格变形和原算例的不一致,原算例的网格变形类似于倾斜的平行四边形,改了之后的网格变形像个橡皮泥一样从四边形迎流面中部凹陷,背流面也错位凸起。
    图片传不上去,服务器解析出错,后面再补。

    请问各位大佬,这两个插值类的区别那么大,不能混用么,还是我代码改得有问题?我看foam-extend的icoFsiFoam求解器的算例也是一个类似的二维受限空间平板绕流的流固耦合算例,用的volPointInterpolation就没问题。



  • 补个图,上面是源代码算的结果,下面是改了volPointInterpolation算的结果。

    compare.jpg



  • Hi, Number44
    我遇到和您类似的问题,不过我的case简单不需要并行,但对时间cost要求很严格,我发现我改动的FSI很花费时间,可能与你说的插值函数有关,不知你有改善效率问题吗?
    其次,想问一下,除了foam-extend里面有FSI tool,基金会的openfoam有类似的吗?比较偏向于使用基金会版本,谢谢


  • 管理员

    @Number44foam-extend的fsiFoam并行效率问题 中说:

    过将fsiFoam算例beamInCrossFlow网格等比放大至800万流体网格+800万固体网格,其他参数不变,foam4.0版本,我测试了一下fsiFoam的并行效率,结果发现fsiFoam大规模并行效率非常糟糕,规整的六面体网格,200核以上直接跑不动,峰值在50核左右,和串行比加速比不超过25

    这看起来像是个bug,可以跟foam-extend官方提bug


Log in to reply
 


CFD中文网 | 东岳流体学术 | 东岳流体商业 | 吉ICP备20003622号-1