Problema com o bloco comum na programação paralela do OpenMP

Eu tenho algumas perguntas sobre o uso de blocos comuns na programação paralela no Fortran.

Minhas sub-rotinas têm blocos comuns. Eu tenho que declarar todos os blocos comuns e threadprivate na região do paralelo?

Como eles passam informações? Eu quero um relógio comum separado para cada thread e quero que eles passem informações pelo final da região paralela. Isso acontece aqui?

MinhasFord A sub-rotina altera algumas variáveis em blocos comuns eCondact sub-rotina substitui sobre eles novamente, mas a função usa os valores deCondact sub-rotina. A segunda sub-rotina e função copiam as variáveis da sub-rotina anterior para cada encadeamento?

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

questionAnswers(2)

yourAnswerToTheQuestion