Следующий пример может помочь понять ваш подход к тому, что вы наметили.Он показывает использование! $ OMP, а также идентифицирует поток, используемый для каждой итерации цикла.Я изменил SUM на SUMI, чтобы сохранить SUM как внутреннюю функцию.Надеюсь, что вы можете основываться на этом.
use omp_lib
real sumi(99), a,b,c
integer thread_used(0:9), I
nThreads = omp_get_max_threads ()
thread_used = 0
!$OMP PARALLEL DO &
!$OMP SHARED (SUMI,thread_used) &
!$OMP PRIVATE (i,a,b,c,iThread)
DO I = 1,99
iThread = omp_get_thread_num ()
thread_used(iThread) = thread_used(iThread) + 1
A=2*I
B=3*I
C=A+B
SUMI(I)=C
END DO
!$OMP END PARALLEL DO
write (*,*) sum (SUMI)
do i = 0, nThreads
write (*,*) i, thread_used(i)
end do
end