Yes, i have.
I try to do it. (I mean, to write after every common block !$omp threadprivate .. is not really difficult. )
The situation is bad.
My #pragma omp parallel block is inside of C++ function (Func(...)).
This function Func(...) gets a pointer on a FORTRAN Function (third party, written in Fortran) and calls it inside of its parallel block.
This FORTRAN-Function, let us to call it boo() uses several COMMON Blocks... also, to writing propose.
So, i cannot write inside of boo(..) !$omp parallel copyin (common block id), it would be orphan parallelizing.. i don't want to have it.
But in C++ function (Func(..) )
i cannot use #pragma omp parallel copyin( ...) , coz i don't have (don't want to have) a really difficult interface to transfer of all symbol names of global variables of the object file contains a object code with the boo(...) function, pointer on wich the function Func(...) gets. (I hope, u understand it. )
To better understanding
Func( .. ) is an optimisation algorithm and has to be able just to call any function (with a fixed form of parameters, of course) by pointer on this function.
In serial case -> pointed function may use any global variables, if it needs... also for writing.
By parallel calling -> race conditions... or Sigmention fault.
And that makes me Arghhhh! (Global variables for writing... nightmare for software developers..,. in 21th century)
What would help, if the realisation of OpenMP of given compiler (in my case - xlf95 from IBM) makes sure, that allready threadprivate directive does a copy of content of the variables from master thread. Then i don't need a copyin clause on 'parallel' directive.
So... Good luck me... without any hope on success...