Nbody6
 All Files Functions Variables
cstab4.f
Go to the documentation of this file.
1  SUBROUTINE cstab4(ITERM)
2 *
3 *
4 * Four-body chain stability test.
5 * -------------------------------
6 *
7  include 'commonc.h'
8  include 'common2.h'
9  common/chreg/ timec,tmax,rmaxc,cm(10),namec(6),nstep1,kz27,kz30
10  REAL*8 m,mb,mb1,mb2,r2(nmx,nmx),xcm(3),vcm(3),xx(3,3),vv(3,3),
11  & xcm2(3),vcm2(3)
12  INTEGER ij(nmx)
13 *
14 *
15 * Sort particle separations (K1 & K2 form closest pair).
16  CALL r2sort(ij,r2)
17 *
18 * Save indices with I1 & I2 as wide binary and I3 & I4 as outer body.
19  i1 = ij(3)
20  i2 = ij(4)
21  i3 = ij(1)
22  i4 = ij(2)
23  mb = m(i1) + m(i2)
24  mb2 = m(i3) + m(i4)
25  mb1 = mb + mb2
26 *
27 * Use perturbed triple stability instead for small middle distance.
28  IF (1.0/rinv(2).LT.0.5*rsum) THEN
29  CALL cstab3(iterm)
30  go to 40
31  END IF
32 *
33 * Form orbital parameters with c.m. of I3 & I4 as third body.
34  vrel2 = 0.0d0
35  vrel21 = 0.0d0
36  vrel34 = 0.0d0
37  rdot = 0.0d0
38  rdot3 = 0.0d0
39  rb0 = 0.0
40  ri2 = 0.0d0
41  DO 10 k = 1,3
42  j1 = 3*(i1-1) + k
43  j2 = 3*(i2-1) + k
44  j3 = 3*(i3-1) + k
45  j4 = 3*(i4-1) + k
46  rb0 = rb0 + (x(j1) - x(j2))**2
47  vrel2 = vrel2 + (v(j1) - v(j2))**2
48  rdot = rdot + (x(j1) - x(j2))*(v(j1) - v(j2))
49  xcm(k) = (m(i1)*x(j1) + m(i2)*x(j2))/mb
50  vcm(k) = (m(i1)*v(j1) + m(i2)*v(j2))/mb
51  xcm2(k) = (m(i3)*x(j3) + m(i4)*x(j4))/mb2
52  vcm2(k) = (m(i3)*v(j3) + m(i4)*v(j4))/mb2
53  ri2 = ri2 + (xcm2(k) - xcm(k))**2
54  vrel21 = vrel21 + (vcm2(k) - vcm(k))**2
55  vrel34 = vrel34 + (v(j3) - v(j4))**2
56  rdot3 = rdot3 + (xcm2(k) - xcm(k))*(vcm2(k) - vcm(k))
57  xx(k,1) = x(j1)
58  xx(k,2) = x(j2)
59  xx(k,3) = xcm2(k)
60  vv(k,1) = v(j1)
61  vv(k,2) = v(j2)
62  vv(k,3) = vcm2(k)
63  10 CONTINUE
64 *
65 * Evaluate orbital elements for inner and outer motion.
66  rb = sqrt(r2(i1,i2))
67  r3 = sqrt(ri2)
68  semi = 2.0d0/rb - vrel2/mb
69  semi = 1.0/semi
70  ecc = sqrt((1.0d0 - rb/semi)**2 + rdot**2/(semi*mb))
71  semi1 = 2.0/r3 - vrel21/mb1
72  semi1 = 1.0/semi1
73  ecc1 = sqrt((1.0d0 - r3/semi1)**2 + rdot3**2/(semi1*mb1))
74  rb2 = sqrt(r2(i3,i4))
75  semi2 = 2.0/rb2 - vrel34/mb2
76  semi2 = 1.0/semi2
77 *
78 * Skip if innermost triple is not stable (including ECC > 1).
79  IF (semi.LT.0.0.OR.ecc.GT.1.0) THEN
80  iterm = 1
81  go to 40
82  END IF
83  pcrit0 = stability(m(i1),m(i2),m(i3),ecc,ecc1,0.0d0)*semi
84  pmin0 = semi*(1.0 - ecc)
85  IF (pmin0.LT.pcrit0) THEN
86  iterm = 1
87  go to 40
88  END IF
89 *
90 * Obtain the inclination.
91  CALL inclin(xx,vv,xcm,vcm,alpha)
92 *
93 * Use the general stability formula for the widest binary.
94  IF (semi.GT.semi2) THEN
95  pcrit = stability(m(i1),m(i2),mb2,ecc,ecc1,alpha)
96  ain = semi
97  ELSE IF (semi2.GT.0.0) THEN
98  pcrit = stability(m(i3),m(i4),mb,0.0d0,ecc1,alpha)
99  ain = semi2
100  ELSE
101  ain = 0.0
102  pcrit = 0.0
103  END IF
104  pcrit = pcrit*(1.0 + 0.1*abs(semi/semi2))*ain
105 *
106 * Check hierarchical stability condition for bound close pair.
107  iterm = 0
108  pmin = semi1*(1.0d0 - ecc1)
109  IF (pmin.GT.pcrit.AND.ain.GT.0.0.AND.semi1.GT.0.0.AND.
110  & rb.GT.semi) THEN
111  iterm = -1
112  alpha = 180.0*alpha/3.14
113  WRITE (6,20) ecc, ecc1, semi, semi1, pmin, pcrit, alpha
114  20 FORMAT (' QUAD HIARCH E =',f6.3,' E1 =',f6.3,
115  & ' A =',1p,e8.1,' A1 =',e8.1,' PM =',e9.2,
116  & ' PC =',e9.2,' IN =',0p,f6.1)
117  ri = sqrt(cm(1)**2 + cm(2)**2 + cm(3)**2)
118  emax = 0.0
119  WRITE (81,30) timec, ri, namec(i3), ecc, ecc1, semi, semi1,
120  & pcrit/pmin, alpha, emax
121  30 FORMAT (f9.5,f5.1,i6,2f6.3,1p,2e10.2,0p,f5.2,f6.1,f6.3)
122  CALL flush(81)
123  END IF
124 *
125  40 RETURN
126 *
127  END