Openmp和Fortran,崩溃代码

Openmp和Fortran,崩溃代码,fortran,openmp,gfortran,Fortran,Openmp,Gfortran,这是与一个问题有关的。我正在尝试使用混合语法(f77和f90)并行化代码 我已经在代码中的许多例程中添加了这一部分 !$omp parallel shared (xdif,cdiff, dg,bfvisc,r,ro,xm ) private ( l ) !$omp do DO L=2,n-1 xdif(l)=cdiff(l)*fjc+(dg(l)+bfvisc(l))* & (4.d0*pi*r(l)**2*ro(l)/xm(n))**2

这是与一个问题有关的。我正在尝试使用混合语法(f77和f90)并行化代码

我已经在代码中的许多例程中添加了这一部分

 !$omp parallel shared (xdif,cdiff, dg,bfvisc,r,ro,xm ) private ( l ) 
 !$omp do
 DO L=2,n-1
        xdif(l)=cdiff(l)*fjc+(dg(l)+bfvisc(l))*
 &           (4.d0*pi*r(l)**2*ro(l)/xm(n))**2

 ENDDO

 !$omp end do
 !$omp end parallel
编译后(使用
-fopenmp
),代码运行了几秒钟,我得到的唯一错误是:分段错误(内核转储)

我没有使用模块
omp\u lib
(因为这是在对上一个问题的回答中建议的),但我也尝试使用它(在第一行之前使用
调用omp\u set\u num\u threads(4)
)。两方面我都有同样的问题

我能做什么

我还被建议使用标志
-g-fbacktrace-fcheck=all-Wall
打印输出。这是:

 At line 2828 of file mainII.f
 Fortran runtime error: Index '0' of dimension 1 of array 'l1mlos' below lower bound of 1

您的错误可能来自其他地方:您可能在openMP循环之前损坏了内存,但激活openMP会暴露出在您的“工作”版本中保持沉默的错误。我认为您是对的……我已经更新了输出,我担心我将不得不更改所有内容(这是我不想要的),因为很多数组都有这种结构(索引0…),谢谢。还有@anthonysecama,救命啊?嗯。。如果没有完整的代码,很难说!您的程序似乎有一个bug,即使它在单线程模式下没有崩溃。你能相信它带来的结果吗?如果可以,一种解决方法是定义从零开始的数组
l1mlos
(如
l1mlos(0:nmax)
):这样可以避免在有重要数据的地方写入。幸运的是,冲突线是“if(irlof.ne.0.和.l1mlos(i1mlos.ne.0)”,i1mlos它是一个值为0或10的整数。我试试你的变通办法。