我想根据另一个数组中满足特定条件的元素数量创建一个维度为数组的数组。这将要求我初始化一个数组中间例程,而Fortran不会让我这样做。
有办法解决吗?
例程示例:
subroutine example(some_array)
real some_array(50) ! passed array of known dimension
element_count = 0
do i=1,50
if (some_array.gt.0) then
element_count = element_count+1
endif
enddo
real new_array(element_count) ! new array with length based on conditional statement
endsubroutine example
谢谢!
您的问题不在于初始化数组,而是涉及设置其值。
但是,有一种方法可以执行您想要的操作。您甚至可以选择,这取决于它的通用性。
我假设在该循环中element_count
具有a的意思some_array(i)
。
您可以new_array
allocatable
:
subroutine example(some_array)
real some_array(50)
real, allocatable :: new_array(:)
allocate(new_array(COUNT(some_array.gt.0)))
end subroutine
或将其作为自动对象:
subroutine example(some_array)
real some_array(50)
real new_array(COUNT(some_array.gt.0))
end subroutine
仅当您的条件为“简单”时,后者才有效。这种allocatable
情况更为普遍,例如,当您要使用完整循环而不是count
固有循环时。
在这两种情况下,您都满足在可执行语句之前具有所有声明的要求。
[作为一个旁注,在Fortran 2008中,block
即使在可执行语句之后,该构造也允许自动对象。]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句