I am modifying some old, old Fortran code to run with OpenMP directives, and it makes heavy use of COMMON block. I have found multiple sources that say that using OMP directives to declare COMMON blocks as THREADPRIVATE solves the issue of COMMON blocks residing in global scope by giving each OpenMP thread its own copy. What I'm unsure of though, is whether the THREADPRIVATE directive needs to be after declaration in every single subroutine, or whether having it in the main (and only) PROGRAM is enough?