2011-04-12 212 views
1

嘿,我 有一个这样的代码:Fortran语言:简写形式,“做循环”

write (filehandle,'(5e14.6)') 
    & (((my_array(i,j,k,1),i=istart,iend,istep),j=jstart,jend,jstep),k=kstart,kend,kstep) 

这是一个“做环”的简写形式?我找不到任何关于它的谷歌... 此外,我发现了一个错误:

forrtl: severe (71): integer divide by zero Image PC
Routine Line Source libpthread.so.0 00007F473F0D892B Unknown Unknown Unknown libguide.so 00007F473F3CC20E Unknown Unknown Unknown

执行时的程序(程序并行使用OpenMP)有关该行(删除行删除错误MSG)。这可能是什么原因呢? 谢谢!

回答

4

正如已经回答的那样,这是一个隐式的do循环。

可以通过零点步进,jstep或kstep?这可能导致整数除以零,因为程序试图计算循环迭代次数。

当您在没有OpenMP的情况下编译时,程序是否可以正常运行?

+0

非常感谢!这给了我线索:istep,jstep或kstep为零,因为我忘记将它们设置为在OpenMP中共享(并且是的,这就是为什么没有OpenMP就可以编译好,因为所有这些变量都是可见的,但在使用OpenMP时,因为默认(私人))!非常感谢! – tim 2011-04-12 10:47:20

1

这些被称为隐式或隐含的do循环。

我没有在该声明中看到除零的任何除法,它可能是周围的线之一吗?

+0

奇怪的是,当我有这样的: 写(*,*) '测试1' 写(文件句柄, '(5e14.6)') &(((my_array(I,J,K, (*,*)'test2' 我只在我的屏幕上看到“test1”(1),i = istart,iend,istep),j = jstart,jend,jstep),k = kstart,kend,kstep) 。当我注释掉写循环时,我还看到“test2”Oo – tim 2011-04-12 10:35:06

+0

该文件是什么样子的?它是否被写入? – jonsca 2011-04-12 10:42:21