【发布时间】:2013-08-23 09:28:17
【问题描述】:
我必须设计和实现一个 Fortran 例程来确定方格上簇的大小,递归地编写子例程似乎非常方便。但是,每当我的格子大小超过某个值(大约 200/边)时,子程序就会始终出现段错误。这是我的集群检测例程:
RECURSIVE SUBROUTINE growCluster(lattice, adj, idx, area)
INTEGER, INTENT(INOUT) :: lattice(:), area
INTEGER, INTENT(IN) :: adj(:,:), idx
lattice(idx) = -1
area = area + 1
IF (lattice(adj(1,idx)).GT.0) &
CALL growCluster(lattice,adj,adj(1,idx),area)
IF (lattice(adj(2,idx)).GT.0) &
CALL growCluster(lattice,adj,adj(2,idx),area)
IF (lattice(adj(3,idx)).GT.0) &
CALL growCluster(lattice,adj,adj(3,idx),area)
IF (lattice(adj(4,idx)).GT.0) &
CALL growCluster(lattice,adj,adj(4,idx),area)
END SUBROUTINE growCluster
其中 adj(1,n) 表示站点 n 的北邻,adj(2,n) 表示西邻,依此类推。什么会导致不稳定的段错误行为?对于大晶格尺寸,集群是否“太大”?
【问题讨论】:
标签: recursion fortran cluster-computing