https://github.com/nbodyx/Nbody6
Tip revision: dff3b5c68673d4d4c4c9f54c8ba110b8416098f2 authored by nitadori on 31 May 2020, 13:04:00 UTC
Avoided touching uninitialized SEMIX
Avoided touching uninitialized SEMIX
Tip revision: dff3b5c
swap.f
SUBROUTINE SWAP
*
*
* Randomized particle swapping.
* -----------------------------
*
INCLUDE 'common6.h'
REAL*8 RAN2,SAVE(7)
*
* Fisher-Yates-Knuth shuffling algorithm.
* ---------------------------------------
*
* Decide on swapping here (strongly recommended).
* IF (N.GT.0) RETURN
*
KDUM = IDUM1
JMIN = 2*NBIN0 + 1
JMAX = N
DO 20 J = JMAX,JMIN+1,-1
XR1 = RAN2(KDUM)
I = JMIN + FLOOR((J-JMIN+1)*XR1)
I = MIN(I,J)
I = MAX(I,JMIN)
IF (I.EQ.J) GO TO 20
NAMI = NAME(I)
SAVE(1) = BODY(I)
DO 15 K = 1,3
SAVE(K+1) = X(K,I)
SAVE(K+4) = XDOT(K,I)
15 CONTINUE
NAME(I) = NAME(J)
BODY(I) = BODY(J)
DO 16 K = 1,3
X(K,I) = X(K,J)
XDOT(K,I) = XDOT(K,J)
X0DOT(K,I) = XDOT(K,J)
16 CONTINUE
NAME(J) = NAMI
BODY(J) = SAVE(1)
DO 18 K = 1,3
X(K,J) = SAVE(K+1)
XDOT(K,J) = SAVE(K+4)
X0DOT(K,J) = SAVE(K+4)
18 CONTINUE
20 CONTINUE
*
RETURN
*
END