@李东岳 在 OpenFOAM并行计算不同进程数下获取场的积分值不同 中说:
scalar meshVolume(0);
forAll(mesh.V(),cellI)
{
meshVolume += mesh.V()[cellI];
}Pout << "Mesh volume on this processor: " << meshVolume << endl;
reduce(meshVolume, sumOp<scalar>());
Info << "Total mesh volume on all processors: " << meshVolume << endl;
老师,您的代码我测试了,结果如下:
四核:
双核:
[0] Mesh volume on this processor: 2177.28 [1] Mesh volume on this processor: 2190.72 Total mesh volume on all processors: 4368但是domainIntegrate这个函数的作用不就是为了整合各个计算域之间的结果吗:
domainIntegrate(phi) = gSum(fvc::volumeIntegrate(phi));同时我测试了另一个网格,用24核和36核算了一段时间后发现两者相同时间下差距较小,感觉应该不是某一个核心的结果,而更像是误差?
d35b8301-5575-4f3f-a069-39d31c3892dd-image.png 784bdb80-c837-439c-bf76-0c56f82b271e-image.png
同时还想请教一个问题,就在刚刚我发现前后两次不改任何设置的情况下,进行decompose操作(scotch方法)得到计算域划分结果竟然是不同的:
464b6812-f1ff-440b-91ae-e54c881f8d61-image.png
进而导致一个计算正常进行,一个计算一段时间就发散了,这是什么原因?