メインプログラム:
program main
use omp_lib
use my_module
implicit none
integer, parameter :: nmax = 202000
real(8) :: e_in(nmax) = 0.D0
integer i
call omp_set_num_threads(2)
!$omp parallel default(firstprivate)
!$omp do
do i=1,2
print *, e_in(i)
print *, eTDSE(i)
end do
!$omp end do
!$omp end parallel
end program main
モジュール:
module my_module
implicit none
integer, parameter, private :: ntmax = 202000
double complex :: eTDSE(ntmax) = (0.D0,0.D0)
!$omp threadprivate(eTDSE)
end module my_module
を使用してコンパイル:
ifort -openmp main.f90 my_module.f90
実行時にセグメンテーション違反が発生します。メインプログラムの印刷コマンドの1つを削除すると、正常に実行されます。また、omp関数を削除し、-openmpオプションなしでコンパイルすると、正常に実行されます。