保留函数数组结果的边界

时间:2016-09-03 08:02:42

标签: arrays function fortran

我正在使用用数组类型声明的Fortran函数。问题是编译器不保留数组的边界,例如,我声明了

function normalize(vector)

  real,dimension(0:)::vector
  real,dimension(0:size(vector)-1)::normalize
  real scale
  integer dim

  scale=norm_real(vector)
  if (scale/=0) then
    do dim=0,size(vector)-1
      normalize(dim)=vector/scale
    end do
  end if

  write(*,*) Lbound(normalize,1)
end function normalize

...

real, dimension(:), allocatable :: B

B = normalize(vector)

write(*,*) Lbound(B,1)

在这种情况下,我验证函数的Lbound是规范化的,它是0,但是它在Lader In主程序中或在另一侧是1。 那么我怎样才能保留它的Lbound?

1 个答案:

答案 0 :(得分:1)

我不认为你可以,但另一方面,这没关系。 Fortran认为数组形状是更基本的属性。即使函数返回的lbound变为1,也可以将其分配给lbound为0的数组或任何其他值。你有一个重要的案例吗?