У меня есть цикл, который обновляет матрицу A, и я хочу сделать ее openmp, но я не уверен, какие переменные должны быть общими и частными. Я бы подумал, что только ii и jj будут работать, но это не так. Я думаю, что мне тоже нужно... $OMP ATOMIC UPDATE...
Цикл просто вычисляет расстояние между N и N-1 частицами и обновляет матрицу A.
!$OMP PARALLEL DO PRIVATE(ii,jj)
do ii=1,N-1
do jj=ii+1,N
distance_vector=X(ii,:)-X(jj,:)
distance2=sum(distance_vector*distance_vector)
distance=DSQRT(distance2)
coff=distance*distance*distance
PE=PE-M(II)*M(JJ)/distance
A(jj,:)=A(jj,:)+(M(ii)/coff)*(distance_vector)
A(ii,:)=A(ii,:)-(M(jj)/coff)*(distance_vector)
end do
end do
!$OMP END PARALLEL DO