并行时如何获得壁面受到的力

在程序运行时,需要根据边界的压力来重新计算其所受到的力,现在单核计算没问题,并行计算无法算出结果,结果为 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() 操作。
可以查一查

参考文献:

  1. H Jasak. Handling Parallelisation in OpenFOAM, 2012
  2. Fransje. https://www.cfd-online.com/Forums/openfoam-solving/58174-reduce-operation-array.html#post316767
1 个赞