Проблема с общим блоком в параллельном программировании OpenMP

У меня есть несколько вопросов об использовании общих блоков в параллельном программировании на Фортране.

Мои подпрограммы имеют общие блоки. Должен ли я объявлять все общие блоки и потоки частного в параллельной области?

Как они передают информацию? Я хочу отдельные общие часы для каждого потока и хочу, чтобы они передавали информацию через конец параллельной области. Это здесь происходит?

мойFord Подпрограмма изменяет некоторые переменные в общих блоках иCondact подпрограмма перезаписывает их снова, но функция использует значения изCondact подпрограмма. Копирует ли вторая подпрограмма и функция переменные из предыдущей подпрограммы для каждого потока?

program
...
! Loop which I want to parallelize
!$OMP parallel DO
!do I need to declear all common block and threadprivate them here?
I = 1, N
...
call FORD(i,j)
...
!$OMP END parallel DO
end program

subroutine FORD(i,j)
dimension zl(3),zg(3)
common /ellip/ b1,c1,f1,g1,h1,d1,
.               b2,c2,f2,g2,h2,p2,q2,r2,d2
common /root/ root1,root2
!$OMP threadprivate (/ellip/,/root/)
!this subroutine rewrite values of b1, c1 and f1 variable.
CALL CONDACT(genflg,lapflg)
return
end subroutine

SUBROUTINE CONDACT(genflg,lapflg)
common /ellip/ b1,c1,f1,g1,h1,d1,b2,c2,f2,g2,h2,p2,q2,r2,d2
!$OMP threadprivate (/ellip/)
! this subroutine rewrite b1, c1 and f1 again
call function f(x)
RETURN
END

function f(x)
common /ellip/ b1,c1,f1,g1,h1,d1,
.               b2,c2,f2,g2,h2,p2,q2,r2,d2
!$OMP threadprivate (/ellip/)
! here the function uses the value of b1, c1, f1 from CONDAT subroutine.
end

Ответы на вопрос(2)

Ваш ответ на вопрос