Nbody6
 All Files Functions Variables
sweep.f
Go to the documentation of this file.
1  SUBROUTINE sweep(DTCL,RCL)
2 *
3 *
4 * Enforced KS regularization of wide binaries.
5 * --------------------------------------------
6 *
7  include 'common6.h'
8  SAVE i
9 *
10 *
11 * Identify wider binaries giving rise to systematic errors.
12  zmx = 100.0*bodym
13  i = ifirst - 1
14  1 i = i + 1
15  IF (i.GT.n) go to 30
16  IF (body(i).GT.zmx) go to 2
17  IF (step(i).GT.dtcl.OR.body(i).EQ.0.0d0) go to 1
18  2 CONTINUE
19 *
20 * Search neighbour list of all KS candidates (STEP < DTCL).
21  rx2 = 100.0
22  nnb1 = list(1,i) + 1
23  IF (nnb1.EQ.1) go to 1
24  DO 10 l = 2,nnb1
25  j = list(l,i)
26  rij2 = 0.0
27  DO 5 k = 1,3
28  rij2 = rij2 + (x(k,i) - x(k,j))**2
29  5 CONTINUE
30  IF (rij2.LT.rx2) THEN
31  rx2 = rij2
32  jmin = j
33  END IF
34  10 CONTINUE
35 *
36 * Skip any close c.m./chain body (small STEP treated by IMPACT).
37  IF (jmin.GT.n.OR.name(jmin).LE.0) go to 1
38 *
39 * Form inverse semi-major axis.
40  vij2 = 0.0
41  DO 15 k = 1,3
42  vij2 = vij2 + (xdot(k,i) - xdot(k,jmin))**2
43  15 CONTINUE
44  ainv = 2.0/sqrt(rx2) - vij2/(body(i) + body(jmin))
45 *
46  IF (ainv.GT.0.0) THEN
47  semi = 1.0/ainv
48  zmb = body(i) + body(jmin)
49  erel = 0.5*zmb/semi
50  ELSE
51  erel = 0.0
52  END IF
53 * Initialize bound KS pairs outside standard parameters.
54  IF (ainv.GT.1.0/rcl.OR.erel.GT.eclose) THEN
55  icomp = min(i,jmin)
56  jcomp = max(i,jmin)
57 * Skip possible rare case of chain c.m. forming binary.
58  IF (name(icomp).EQ.0.OR.name(jcomp).EQ.0) go to 1
59 * Ensure most recent velocity used for new KS.
60  DO 16 k = 1,3
61  x0dot(k,icomp) = xdot(k,icomp)
62  x0dot(k,jcomp) = xdot(k,jcomp)
63  16 CONTINUE
64  CALL ksreg
65  newks = newks + 1
66  ri2 = 0.0
67  DO 20 k = 1,3
68  ri2 = ri2 + (x(k,ntot) - rdens(k))**2
69  20 CONTINUE
70  semi = 1.0/ainv
71  ecc2 = (1.0 - r(npairs)/semi)**2 +
72  & tdot2(npairs)**2/(body(ntot)*semi)
73  ecc = sqrt(ecc2)
74  j1 = 2*npairs - 1
75  IF (newks.LT.50.OR.erel.GT.eclose) THEN
76  WRITE (6,25) name(j1), name(j1+1), list(1,j1),
77  & list(1,ntot), sqrt(ri2), ecc, semi,
78  & gamma(npairs)
79  25 FORMAT (' ENFORCED KS NAM NP NNB r E A GAM ',
80  & 2i7,i4,i5,f7.2,f8.3,1p,e10.2,e9.1)
81  END IF
82  END IF
83  IF (i.LT.n) go to 1
84 *
85  30 RETURN
86 *
87  END