我试图通过在fortran中访问越界元素来检查我的数组是否返回废话。我想检查这些值是否小于一,如果是,请将它们更改为一。
这是我的一段导致问题的代码:
lastNeighLabel=(/clusterLabel(jj-1,kk,ll), clusterLabel(jj,kk-1,ll), clusterLabel(jj,kk,ll-1)/)
LastNeighLabel 分别包含 x、y、z 方向上最后一个邻居的集群标签(介于 1 和 n 之间,其中 n 是找到的唯一单独集群的总数)。
当jj
orkk
或ll
为 1 时,它们会尝试访问数组中的第 0 个元素,并且FORTRAN
从数组中的 1 开始计数,它会尝试破坏宇宙。我目前正处于大约 8 个 if/elseif 语句的混乱中,试图为每一种可能性编码。但我希望有一种方法可以对每个元素进行操作。所以基本上我想说where((/jj-1,kk-1,ll-1/).lt.1) do clusterLabel(jj-1,kk,ll)=0 etc
这取决于哪个元素导致了问题。
但是我想不出一种方法来做到这一点,因为 where 只会操纵传递给它的变量,而不是同一索引处的不同数组。还是我错了?
如果这没有意义,我很乐意编辑。