【发布时间】:2019-10-23 18:41:00
【问题描述】:
Fortran runtime warning: temporary array 回答了类似的问题。但是,就我而言,这些解决方案对我的帮助并不大。 在子例程中,我有一个子例程调用:
subroutine initialize_prim(prim)
real(kind=wp), dimension(2, -4:204), intent(out) :: prim
call double_gaussian(prim(1, :))
end subroutine initialize_prim
subroutine double_gaussian(y)
real(kind=wp), dimension(-4:204), intent(out) :: y
integer :: i
do i = -4, 204
y(i) = 0.5 * ( &
exp(-((r(i) - r0))**2) + exp(-((r(i) + r0)/std_dev)**2))
end do
end subroutine double_gaussian
这给出了一条错误消息,指出 fortran 为“double_gaussian”中的“y”创建了一个临时数组。阅读了一些关于连续数组的内容后,我明白为什么会出现这个错误。 现在,看看我的整个程序,将数组的顺序反转为“prim”是非常乏味的,因此这种解决方案实际上是不可能的。 为了在“double_gaussian”中创建假定形状,我尝试过这样做,
real(kind=wp), dimension(:), intent(out) :: y
integer :: i
do i = -4, 204
y(i) = 0.5 * ( &
exp(-((r(i) - r0))**2) + exp(-((r(i) + r0)/std_dev)**2))
end do
end subroutine double_gaussian
但是,这会导致 fortran 崩溃并显示错误消息 “数组 'y' 的维度 1 的索引 '-4' 低于 1 的下限”。 似乎对于假定的形状格式,索引仍然假定从 1 开始,而在我的情况下它从 -4 开始。 有没有办法解决这个问题?
【问题讨论】:
-
可以显示关于非连续数组的实际“错误消息”吗?能否提供一个自包含的可编译代码?
-
假定的形状从您声明的任何地方开始。
y(-4:)将从 -4 开始。
标签: arrays fortran fortran90 method-call