Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multidimensional array 用ifort 16实现Fortran中连续多维数组的边界重映射_Multidimensional Array_Fortran_Intel Fortran - Fatal编程技术网

Multidimensional array 用ifort 16实现Fortran中连续多维数组的边界重映射

Multidimensional array 用ifort 16实现Fortran中连续多维数组的边界重映射,multidimensional-array,fortran,intel-fortran,Multidimensional Array,Fortran,Intel Fortran,我在ifort 16中出现了索引重新映射问题,但在ifort 14或gfortran中没有出现(下面列出了确切的版本号)。问题发生在以下测试程序中: program remap_problem implicit none type :: tp real, dimension(:,:,:), allocatable :: trg_in end type tp real, dimension(:,:,:), allocatable, target :: trg_out

我在ifort 16中出现了索引重新映射问题,但在ifort 14或gfortran中没有出现(下面列出了确切的版本号)。问题发生在以下测试程序中:

program remap_problem

  implicit none

  type :: tp
    real, dimension(:,:,:), allocatable :: trg_in
  end type tp

  real, dimension(:,:,:), allocatable, target :: trg_out

  type(tp), target :: instance
  real, dimension(:,:), pointer :: ptr

  allocate(instance%trg_in(3,4,5))
  allocate(trg_out(3,4,5))

  ptr(0:2,0:3) => instance%trg_in(:,:,2)
  ptr(0:2,0:3) => trg_out(:,:,2)

end program remap_problem
Fortran中有一条规则,如果目标是连续的或秩为1,则只能重新定义索引(使用0:2,0:3完成)。在本例中,目标子数组是连续的,因为最后一个索引是Fortran中最慢的

使用ifort 14或gfortran,它可以正常编译。 但是ifort 16抱怨派生类型中的目标数组不连续,我得到以下错误:

error #8527: If a bound remapping list is specified, data target must be simply contiguous or of rank one.   [TRG_IN]
但是,
trg_out不会出现错误。因此,
,不知何故,ifort 16无法将(:,:,2)中的
实例%trg_识别为连续的,因为它是派生类型。我尝试在这里和那里添加关键字
continuous
,并将
allocatable
替换为
pointer
,但似乎没有任何效果

解决办法是:

  ptr(0:2,-4:3) => instance%trg_in
将所需元素放在正确的索引上,但这是肮脏的。是否有正确的方法来修复此问题,或者我必须等待编译器更新

my iforts和gfortran的版本为:

ifort(ifort)14.0.2 20140120
ifort(ifort)16.0.0 20150815

GNU Fortran(Debian 4.9.2-10)4.9.2

对我来说,这对供应商来说似乎是个问题。史蒂夫·莱昂内尔不时来这里,但我不知道他是否还能向英特尔员工提出问题。在我看来,这是一个bug(回归),应该在官方论坛上报告。您的代码也使用ifort 18.0中的PGI 15.10组件为我编译。(我手边没有17.0。)