Arrays Fortran/Arrayfire尺寸标注问题

Arrays Fortran/Arrayfire尺寸标注问题,arrays,fortran,arrayfire,Arrays,Fortran,Arrayfire,我目前正在使用Arrayfire加速Fortran CFD解算器。我们实现Fortran数组的方式意味着二维Fortran数组由(N,M,1)表示,而不仅仅是(N,M),允许可分配数组处理二维或三维参数。但是,当将其中一个复制到设备以成为Arrayfire阵列时,似乎会自动为其指定尺寸(N,M),而不是(N,M,1)。将阵列复制回主机时,这会导致维度不匹配 有没有办法改变这种行为?重写大部分解算器以不同方式处理二维数组是相当棘手的 下面是一个显示此行为的测试用例: program testcas

我目前正在使用Arrayfire加速Fortran CFD解算器。我们实现Fortran数组的方式意味着二维Fortran数组由(N,M,1)表示,而不仅仅是(N,M),允许可分配数组处理二维或三维参数。但是,当将其中一个复制到设备以成为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数组执行

谢谢,Harry(在评论和编辑中回答。请参阅)

OP写道:

这不再是一个问题,因为只有测试用例是使用2D阵列执行的


像:b(:,:,1)=ARR1这样的东西不是一个好的解决方案吗?问题是,在程序中,函数必须处理2(N,M,1)和3(N,M,O)维参数,因此我将所有3维都作为可分配的。