2014-01-14 19 views
0

这个问题可能看起来有些开放式的,但一段时间以来一直困扰着我,所以我想我会在这里发布它,希望讨论或建议。Fortran程序使用相同的输入参数产生不同的错误

我是一名物理博士生,在一个相当复杂的Fortran程序上运行了相当大的计算。该程序涉及大量的粒子(〜1000),它们通过局部电势彼此相互作用,并根据过阻尼langevin动力学进行移动。

最近程序开始表现得很奇怪。我不确定发生了什么变化,但是当程序使用相同的输入参数运行时,似乎发生了不同的事情。有时程序会运行完成。其他时候它会产生一个seg错误 - 在计算中的不同点上。偶尔,它似乎只是简单地停下来而不会产生任何错误,并且有几次导致我的电脑显示关于程序内存不足的警告。

让我困惑的是,为什么程序对同样的输入应该有不同的表现。我真的只是希望对这里可能发生的事情有所建议。目前我唯一的想法是某种内存管理问题。我使用的计算机是2013年iMac,配备8GB内存,2.7GHz四核i5处理器和OSX Mavericks。不是世界上最强大的,但我相当肯定我已经运行了更大的计算,而没有这些问题。

+0

我看不出任何人都可以使用的信息水平有所帮助。你是否能够调试该程序,以找出它开始发愁的地方? – trojanfoe

+5

您希望诊断无视患者!! ??好的,下面是一些猜测:未能向每个范围中插入“隐式无”;未能匹配程序虚拟参数和实际参数;访问数组之外​​的数组,...可能还有其他一些问题,这些问题可能会导致看起来是非确定性的错误。事实上,他们总是缺陷,只是他们可能并不总是咬你。 –

+0

不期望得到诊断,只是希望能够对可能导致问题的一般想法产生不同的看法,这些问题在看似相同的条件下是不同的,因为我以前从未见过类似的情况。 – crevell

回答

0

Seg错误表明您的程序内存不足或程序出现错误。 Fortran中导致seg错误的最常见错误是数组下标错误以及调用中的参数与过程(伪参数)之间的不一致。首先,打开编译器的运行时间下标检查选项。第二,将所有程序放入一个模块(或多个模块)并使用该模块(或多个模块)。这将使编译器检查参数一致性。

你使用什么编译器?

UPDATE:如果你正在使用gfortran,请尝试以下编译器选项:-O2 -fimplicit-none -Wall -Wline-truncation -Wcharacter-truncation -Wsurprising -Waliasing -Wimplicit-interface -Wunused -parameter -fwhole-file -fcheck=all -std=f2008 -pedantic -fbacktrace

+0

我的确在使用gfortran。简单地做数组绑定检查已经揭示了一些我正在研究的问题。我试着用你提出的所有选项进行编译,尽管编译器声称不承认“参数”,但其他编译器却产生了一连串的错误,我将稳步工作。非常感谢所有的建议 - 这正是我一直在寻找的东西。 – crevell

+0

我很高兴帮助。它是'Wunused-parameter'。它被划分为多个行,就像'-Wline-truncation'一样。这些选项在gfortran手册中描述。其中一些会产生可能被接受的警告。数组边界违规是不可接受的,可能会导致程序出现问题。 –

相关问题