FYI FLoops.jl is trying to provide a “user-friendly” interface to parallel (and sequential) loops. In particular, it can detect the error as in the OP:
(But I should say that I had to fix two bugs for this example to work. FLoops.jl is a quite new package. It may find your mistakes but it may contain its own bugs .)
A data race-free implementation using FLoops.jl is something like
function demo()
Sim = randn(50,12,10,2)
lev = zeros(10)
for ij = 1:10
@floop for i = 1:12
for j = 1:50
if Sim[j,i,ij,1] > 0.05 && Sim[j,i,ij,2] > 0.0
@reduce(
suma = 0.0 + Sim[j,i,ij,1]/Sim[j,i,ij,2],
counta = 0.0 + 1,
)
end
end
end
lev[ij] = suma/counta
end
Sim
end