Indeed, lines like RM[i1,i1] += -GEself[1,1]/8π
indicate that your code have data races. We can’t expect a deterministic behavior.
FYI, there are a couple of examples in FLoops documentation for writing reduction of mutable objects without data races. See: In-place mutation and Initialization with @reduce(acc = op(init, x))
syntax. There’s also private variables support.