我有遗留的fortran源文件,名为pot.f, ,我需要将OpenMP应用到并行,如下所示,但我可以关于意外结束状态等错误消息。但是当我评论通过添加额外的$OMP
行!在第一列中,没有错误。添加Openmp伪指令时奇怪gfortran编译错误
这对我来说真的很奇怪。有谁能告诉我哪里出了问题?
subroutine pot_osc(rvp,R_pot,e_pot,pe_pot,ftmp,gtmp,vtmp,natoms)
implicit none
include 'sizes.h'
include 'constants.h'
include 'omp_lib.h'
double precision ftmp(maxatoms,3),gtmp(3),R_pot(maxatoms,3)
!$OMP PARALLEL WORKSHARE SHARED(gtmp,ftmp)
!$OMP PARALLEL NUM_THREADS(16)
gtmp = 0d0
ftmp = 0d0
!$OMP END PARALLEL WORKSHARE
return
end
subroutine pot_asym(rvp,vtmp)
implicit none
include 'constants.h'
return
end
错误消息:
end
1
Error: Unexpected END statement at (1)
subroutine pot_asym(rvp,vtmp)
1
Error: Unclassifiable statement at (1)
我注意到你在数组中使用了'maxatoms'作为第一个索引。我的猜测是你描述了与每个原子相关的三维矢量。我认为将Fortran转换为[专业专栏](https://en.wikipedia.org/wiki/Row-major_order#Column-major_order)将会更好。这样,3D矢量在内存中将是连续的。 –