segmentation error
call MPI_Allreduce的时候少了最后一个参数ierr,fortran的MPI实现都有这个额外的ierr参数,竟然没提示错误,执行的时候就出现了segmentation fault,结果找了很久
forrtl: severe (174): SIGSEGV, segmentation fault occurred
某个变量在子程序调用过程中表面上没有代码修改该变量的值,实际上值却发生了变化
这个错误找了很多天啊
在module中定义了一个三维数组
real,dimension(8,20,120),save ::parm
在该module中有很多变量
比如在parm之前还定义了某个变量 real,dimension(60),save ::arr
然后程序访问了parm(8,20,0),而fortran中数组索引是从1开始的,是数组访问越界结果导致另外一个变量arr值发生修改。数组边界访问问题需要引起注意。
The shapes of the array expressions do not conform
在代码中有这样一段
do i=1,10
s=.....
a(n)=s-b(n)
end do
a(n)与b(n)的数组维数是相同的,都是当前子程序中定义的,一直没看出来。
后来发现是变量s与use 模块中定义的变量相同,而在
关于并行程序的调试:可以先用一个处理器运行,这样比较容易发现问题所在
判定条件
.or.不小心写成了.and.
if(-1 .ge. a .or. 10 .lt. a)cycle
if(-1 .ge. a .and. 10 .lt. a)cycle
结果导致产生了更多的数据