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就没问题。
-
@shiyu 在 foam-extend的fsiFoam并行效率问题 中说:
Hi, Number44
我遇到和您类似的问题,不过我的case简单不需要并行,但对时间cost要求很严格,我发现我改动的FSI很花费时间,可能与你说的插值函数有关,不知你有改善效率问题吗?
其次,想问一下,除了foam-extend里面有FSI tool,基金会的openfoam有类似的吗?比较偏向于使用基金会版本,谢谢能力有限,改了好几次代码,结果都算不对。
我只用过OpenFOAM5-7,里面应该都没有fsi相关内容,新的OpenFOAM8不清楚。
另外,我不清楚你用fsi干什么,我之前用过基于OpenFOAM6的一个IBM方法的流固耦合,还行,MIT的一个博士搞的,叫sdfibm,能算固体大位移,暂时不能算形变。效率和OpenFOAM6差不多。 -
@李东岳 在 foam-extend的fsiFoam并行效率问题 中说:
@Number44 在 foam-extend的fsiFoam并行效率问题 中说:
过将fsiFoam算例beamInCrossFlow网格等比放大至800万流体网格+800万固体网格,其他参数不变,foam4.0版本,我测试了一下fsiFoam的并行效率,结果发现fsiFoam大规模并行效率非常糟糕,规整的六面体网格,200核以上直接跑不动,峰值在50核左右,和串行比加速比不超过25
这看起来像是个bug,可以跟foam-extend官方提bug
好不容易在sourceforge注册了个帐号,在foam-extend下写了个ticket说了一下这个问题,不知道维护大佬的看不看。