我目前正在使用 Arrayfire 来加速 Fortran CFD 求解器。我们实现 Fortran 数组的方式意味着二维 Fortran 数组由 (N,M,1) 表示,而不仅仅是 (N,M),允许可分配数组处理 2 维或 3 维参数。但是,当其中一个被复制到设备以成为 Arrayfire 阵列时,它似乎自动被赋予尺寸 (N,M) 而不是 (N,M,1)。当数组复制回主机时,这会导致尺寸不匹配。
有没有办法改变这种行为?重写大多数求解器以区别对待二维数组是相当棘手的。
这是一个显示此行为的测试用例:
program testcase
use arrayfire
implicit none
real,dimension(4,4,1) :: a = 5.0
real,dimension(:,:,:),allocatable :: b
type(array) ARR1
ARR1 = a
b=ARR1
end program testcase
我也在 Arrayfire 论坛上问过这个问题,但只是想知道是否有其他人遇到过这个问题。
编辑:这不再是一个问题,因为只有测试用例是使用 2D 数组执行的。
谢谢,哈利