在程序运行时,需要根据边界的压力来重新计算其所受到的力,现在单核计算没问题,并行计算无法算出结果,结果为 0。单核时获得某壁面边界上的力为
vector pf = sum
(
mesh_.Sf().boundaryField()[patchi] * (pd_.boundaryField()[patchi])
);
在程序运行时,需要根据边界的压力来重新计算其所受到的力,现在单核计算没问题,并行计算无法算出结果,结果为 0。单核时获得某壁面边界上的力为
vector pf = sum
(
mesh_.Sf().boundaryField()[patchi] * (pd_.boundaryField()[patchi])
);
OpenFOAM 本身提供了并行计算的一些程式,对于你说的,FOAM 早就考虑到了,你需要做的就是在后面添加一行:
vector pf = sum
(
mesh_.Sf().boundaryField()[patchi] * (pd_.boundaryField()[patchi])
);
reduce(pf, sumOp<vector>());
除 sumOp<>,还可以有 maxOp<>,minOp<> 等其他的 reduce() 操作。
可以查一查
参考文献: