将具有一个元素(等级1)的数组转换为标量(等级0)

时间:2019-06-09 16:16:47

标签: arrays fortran rank intrinsics scalar

值得注意的是,对于一个简单的问题,我找不到任何解决方案。

获取元素时,例如,从1级数组中说出

real(kind=dp), dimension(1:5) :: v
real(kind=dp), dimension(1) :: n

n = v(1)

那么,fortran确实会认为n为1级,因此不是标量。以类似的方式,大多数instrincis函数(例如maxloc,shape等)的输出将返回1级数组。 问题是我真的希望所有这些输出都是标量。例如,我想要类似的东西

real(kind=dp), dimension(shape(v)) :: w

上班。或类似的东西,

real(kind=dp), dimension(1:5) :: v, w

real(kind=dp) :: max_loc

max_loc = maxloc(v(:))
write(6,*) w(max_loc)

现在,我唯一能避免这种情况的方法是创建一个看起来很傻的中介变量,例如

real(kind=dp), dimension(1:5) :: v, w

real(kind_dp), dimension(1) :: tmp
real(kind=dp) :: max_loc

tmp = maxloc(v(:))
max_loc = tmp(1)
write(6,*) w(max_loc)

不幸的是,Fortran不像其他语言那样接受

real(kind=dp), dimension(1:5) :: v, w

real(kind=dp) :: max_loc

max_loc = maxloc(v(:))(1)
write(6,*) w(max_loc)

有什么好办法处理这些事情吗?

0 个答案:

没有答案