【问题标题】:Fortran: Pointer to an array which index start at 0Fortran:指向索引从 0 开始的数组的指针
【发布时间】:2014-11-29 21:46:52
【问题描述】:

这是我的问题:

我在一个模块中声明了一个 3D 数组,并使用从 0 开始的第一个索引来分配它:

REAL*8, POINTER :: QALC(:,:,:)
ALLOCATE(QALC(0:N+1,NR+1,NLVL))

我还有一个指针,我想指向上面的数组:

REAL*8, POINTER :: Q(:,:)
Q=>QALC(0:N+1,1:NR+1,L)

其中 L 是一个整数。上面的代码有效,但不幸的是 Q 的索引从 1 开始,而不是从 0 开始!有什么方法可以让 Q 第一索引为 0?

非常感谢, 伊利亚斯

【问题讨论】:

  • 虽然很笨重,但为什么在从 Q 中获取元素时不总是减去 1?喜欢Q(index - 1,dim2,dim3)

标签: arrays pointers fortran


【解决方案1】:

你可以在指针赋值中指定Q的边界:

Q(0:,:) => QALC(:,:,L)

【讨论】:

  • 我已经尝试过了,但在编译时出现错误:“错误 #6731:对象不是指针对象。”。我用谷歌搜索它,不幸的是我发现它可能是编译器(英特尔 11.0)中的一个错误:software.intel.com/en-us/forums/topic/295038。还有其他解决方案吗?感谢您的回答。
  • 请注意,我应该输入Q(0:,1:)。当我认为我会做一个更实质性的答案时,我会在稍后进行编辑。
  • 特别是,我的第一次尝试是错误的:您不希望重新映射边界(就是这样)。
  • 不幸的是,我仍然收到错误“对象不是指针对象”。在“=>”命令之后(或之前)有什么办法吗?再次感谢您。
  • 如果评论中有更正,那么恐怕我无能为力:我无法用我的设置重现问题,因此无法保证任何解决方法都适合针对同样的问题。
猜你喜欢
  • 1970-01-01
  • 2010-10-11
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
相关资源
最近更新 更多