我正在 Fortran 90 中制作我自己的有限差分计算磁流体动力学代码。查看其他代码,它们似乎可以计算它们的导数,它们的变量的bb,例如aa,如下所示:
CALL system_clock(tstart, count_rate)
DO ix = 1, nx - 1
ixp = ix + 1
DO iy = 1, ny
DO iz = 1, nz
bb(ix,iy,iz) = (aa(ixp,iy,iz) - aa(ix,iy,iz)) / dx
END DO
END DO
END DO
CALL system_clock(tstop, count_rate)
PRINT*, "Computation time =", REAL(tstop - tstart) / REAL(count_rate)
换句话说,他们逐个元素地计算导数。另一种计算导数的方法是逐个数组,即:
CALL system_clock(tstart, count_rate)
bb(1:nx-1,:,:) = (aa(2:nx,:,:) - aa(1:nx-1,:,:)) / dx
CALL system_clock(tstop, count_rate)
PRINT*, "Computation time =", REAL(tstop - tstart) / REAL(count_rate)
第二种方法似乎快了大约 37 倍。那么为什么我没有看到更多的代码逐个数组而不是逐个元素地计算它们的 -derivatives 数组呢?逐个数组的缺点是什么,我缺少什么吗?