我有一个文本文件,如下所示:
0.031 0.031 0.031 1.4998 0.9976 0.5668 0.9659
0.062 0.031 0.031 0.9620 0.7479 0.3674 0.4806
0.094 0.031 0.031 0.3549 0.0738 0.0054 0.3471
0.125 0.031 0.031 0.4270 0.3422 0.2180 0.1332
0.156 0.031 0.031 1.0766 0.9005 0.3868 0.4455
0.188 0.031 0.031 0.9285 0.6619 0.0161 0.6509
0.219 0.031 0.031 1.1200 0.6464 0.3230 0.8557
依此类推......(32768行,因为它是32 ^ 3网格。) 前三列表示x,y和z坐标,第四列是坐标的范数,后三列表示3D矢量的分量。我需要在每个点使用中心差分法计算矢量场(5,6,7)的卷曲和发散。由于有很多行,我想使用MPI并行化输入。但为了实现这一点,我需要一次访问三行作为中心差异方法状态(例如) 我从文件中读取数据的fortran代码是:
open(unit = 1,file = '32data.txt') !
do i = 1,32767
read(1,*) x(i),y(i),z(i),norm(i),xv(i),yv(i),zv(i)
end do
do i = 2,32767
dx = x(i) - x(i-1)
dy = y(i) - y(i-1)
dz = z(i) - z(i-1)
Fx(i) = (xv(i+1) - xv(i-1))/(2.0)*dx
Fy(i) = (yv(i+1) - yv(i-1))/(2.0)*dy
Fz(i) = (zv(i+1) - zv(i-1))/(2.0)*dz
div(i) = Fx(i)+Fy(i)+Fz(i)
end do
所以我需要将大量的行发送到不同的进程。但这里有一个问题。让我们说过程2占用4行,过程3占用下一行6.要计算过程3中第一行的梯度,我需要过程2中前一行的数据。所以我需要再次发送它过程3.那么可以在MPI中并行化这个吗?或者我应该关注别的吗?