下面的 Fortran 源代码片段包含一个 goto、一个标签、一个可能多余的逻辑变量、一个 end do 之前的 exit 语句以及可能的其他不良特性......
下面的 Fortran 源代码片段包含 goto
、一个标签、一个可能多余的逻辑变量 going
、一个 exit
位于之前的语句 end do
以及可能的其他不良特征。
您会怎样用 Fortran 来编写它,以实现简洁性、清晰性、简洁性、可维护性和性能?
allocate (level(lower%noRows))
level = 0 ! array assignment
noLevels = 0
do
going = .FALSE.
do row = 1, lower%noRows
if (level(row) .eq. 0) then
maxLevel = 0
do k = lower%rowPtr(row), lower%rowPtr(row+1)-1
l = level(lower%colIndex(k))
if (l .eq. 0) goto 10
maxLevel = max(maxLevel,l)
end do
level(row) = maxLevel + 1
noLevels = max(noLevels,level(row))
going = .TRUE.
10 continue
end if
end do
if (.not. going) exit
end do
lower%noLevels = noLevels
如果你好奇的话,它会计算预排序的 CSR 格式下三角稀疏矩阵每一行的有向无环图依赖级别 lower
.