值得注意的是,对于一个简单的问题,我找不到任何解决方案。
获取元素时,例如,从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)
有什么好办法处理这些事情吗?