Dear Intel users,
I have a strange behaviour with a PRIVATE variable. I'm using Intel Ifort 14.01
My program has many lines of code, so I report a snippet that summarize the situation. In the main I have an integer global variable, a parallel region that sets that variabies, and a function ever in parallel region that uses the variable. If I define the variable PRIVATE, the code dies. If Ipass the same variable to a subroutine the code works fine, also if the results are not the same as serial code. This is the snippet that fails:
PROGRAM my_program integer samplmin_newscal integer samplmax, sampl0, deltaT REAL(stnd), DIMENSION( : ), allocatable :: t0 samplmax = some_value sampl0 = some_value deltaT = some_value ...allocate and set t0 $!OMP PARALLEL DO PRIVATE (i, samplmin_newscal) DO i samplmin_newscal = some_value call my_subroutine() END DO contains my_subroutine() real to_tmp DO ij = samplmax, samplmin_newscal, -1 t0_tmp = t0(ij + sampl0)+deltaT ! here the code dies with ! Subscript #1 of the array T0 has value 0 which ! is less than the lower bound of 1 END DO END program my_program
This is the snippet that works well:
integer samplmin_newscal integer samplmax, sampl0, deltaT REAL(stnd), DIMENSION( : ), allocatable :: t0 samplmax = some_value sampl0 = some_value deltaT = some_value ...allocate and set t0 $!OMP PARALLEL DO PRIVATE (i, samplmin_newscal) DO i samplmin_newscal = some_value call my_subroutine(samplmin_newscal) END DO contains my_subroutine(samplmin_newscal_local) integer samplmin_newscal_local real to_tmp DO ij = samplmax, samplmin_newscal_local, -1 t0_tmp = t0(ij + sampl0)+deltaT END DO END program my_program
No, I know thas if a variable is defined inside a module, must be declared THREADPRIVATE, but this is not the case. Why the private definitions seems to fail?
Thanks in advance.