Nbody6
 All Files Functions Variables
cstab2.f
Go to the documentation of this file.
1  SUBROUTINE cstab2(ITERM)
2 *
3 *
4 * Degenerate triple 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,r2(nmx,nmx),xcm(3),vcm(3),xx(3,3),vv(3,3),
11  & xcm3(3),vcm3(3)
12  INTEGER ij(nmx)
13 *
14 *
15 * Sort particle separations (I1 & I2 form closest pair).
16  CALL r2sort(ij,r2)
17  i1 = ij(1)
18  i2 = ij(2)
19  i3 = ij(3)
20  i4 = ij(4)
21  mb = m(i1) + m(i2)
22  mb1 = mb + m(i3)
23  mb2 = mb1 + m(i4)
24 *
25 * Form output diagnostics with smallest binary as one body.
26  vrel2 = 0.0d0
27  vrel21 = 0.0d0
28  rdot = 0.0d0
29  rdot3 = 0.0d0
30  rb0 = 0.0
31  ri2 = 0.0d0
32  r4 = 0.0d0
33  v4 = 0.0
34  rdot4 = 0.0d0
35  DO 10 k = 1,3
36  j1 = 3*(i1-1) + k
37  j2 = 3*(i2-1) + k
38  j3 = 3*(i3-1) + k
39  j4 = 3*(i4-1) + k
40  rb0 = rb0 + (x(j1) - x(j2))**2
41  vrel2 = vrel2 + (v(j1) - v(j2))**2
42  rdot = rdot + (x(j1) - x(j2))*(v(j1) - v(j2))
43  xcm(k) = (m(i1)*x(j1) + m(i2)*x(j2))/mb
44  vcm(k) = (m(i1)*v(j1) + m(i2)*v(j2))/mb
45  ri2 = ri2 + (x(j3) - xcm(k))**2
46  vrel21 = vrel21 + (v(j3) - vcm(k))**2
47  rdot3 = rdot3 + (x(j3) - xcm(k))*(v(j3) - vcm(k))
48  xcm3(k) = (m(i3)*x(j3) + mb*xcm(k))/mb1
49  vcm3(k) = (m(i3)*v(j3) + mb*vcm(k))/mb1
50  r4 = r4 + (x(j4) - xcm3(k))**2
51  v4 = v4 + (v(j4) - vcm3(k))**2
52  rdot4 = rdot4 + (x(j4) - xcm3(k))*(v(j4) - vcm3(k))
53  xx(k,1) = xcm(k)
54  xx(k,2) = xcm3(k)
55  xx(k,3) = x(j4) - xcm3(k)
56  vv(k,1) = vcm(k)
57  vv(k,2) = vcm3(k)
58  vv(k,3) = v(j4) - vcm3(k)
59  10 CONTINUE
60 *
61 * Evaluate orbital elements for inner and outer motion.
62  rb = sqrt(ri2)
63  r4 = sqrt(r4)
64  semi = 2.0d0/rb - vrel21/mb1
65  semi = 1.0/semi
66  ecc = sqrt((1.0d0 - rb/semi)**2 + rdot3**2/(semi*mb1))
67  semi1 = 2.0/r4 - v4/mb2
68  semi1 = 1.0/semi1
69  ecc1 = sqrt((1.0d0 - r4/semi1)**2 + rdot4**2/(semi1*mb2))
70 *
71 * Skip if innermost triple is not stable (including ECC > 1).
72  rb0 = sqrt(rb0)
73  semi0 = 2.0/rb0 - vrel2/mb
74  semi0 = 1.0/semi0
75  IF (semi0.LT.0.0.OR.ecc.GT.1.0) go to 40
76  ecc0 = sqrt((1.0 - rb0/semi0)**2 + rdot**2/(semi0*mb))
77  pcrit0 = stability(m(i1),m(i2),m(i3),ecc0,ecc,0.0d0)*semi0
78 * Allow 10% extra with MA 1999 (proper test done for outer triple).
79  pmin0 = 1.1*semi*(1.0 - ecc)
80  IF (pmin0.LT.pcrit0) go to 40
81 *
82 * Form hierarchical stability ratio (Eggleton & Kiseleva 1995).
83 * QL = MB1/M(I4)
84 * Q1 = MAX(MB/MB1,MB1/MB)
85 * Q3 = QL**0.33333
86 * Q13 = Q1**0.33333
87 * AR = 1.0 + 3.7/Q3 - 2.2/(1.0 + Q3) + 1.4/Q13*(Q3 - 1.0)/(Q3 + 1.0)
88 *
89 * EK = AR*SEMI*(1.0D0 + ECC)
90  pmin = semi1*(1.0d0 - ecc1)
91 *
92 * Obtain the inclination (in radians).
93  CALL inclin(xx,vv,xcm3,vcm3,alpha)
94 *
95 * Replace the EK criterion by the MA 1999 stability formula.
96  pc99 = stability(mb,m(i3),m(i4),ecc,ecc1,alpha)*semi
97 *
98 * Evaluate the general stability function.
99  IF (ecc1.LT.1.0) THEN
100  nst = nstab(semi,semi1,ecc,ecc1,alpha,mb,m(i3),m(i4))
101  IF (nst.EQ.0) THEN
102  pcrit = 0.99*pmin
103  ELSE
104  pcrit = 1.01*pmin
105  END IF
106  ELSE
107  pcrit = 1.01*pmin
108  END IF
109 *
110 * Check hierarchical stability condition (SEMI1 > 0 => ECC1 < 1).
111  iterm = 0
112  IF (pmin.GT.pcrit.AND.semi.GT.0.0.AND.semi1.GT.0.0) THEN
113  iterm = -1
114  WRITE (6,20) ecc, ecc1, semi, semi1, pmin, pcrit, pc99
115  20 FORMAT (' CSTAB2 E =',f6.3,' E1 =',f6.3,' A =',1p,e8.1,
116  & ' A1 =',e8.1,' PM =',e9.2,' PC =',e9.2,
117  & ' PC99 =',e9.2)
118  WRITE (6,25) namec(i1), namec(i2), ecc0, semi0, pmin0, pcrit0
119  25 FORMAT (' INNER TRIPLE NAM E0 A0 PM0 PC0 ',
120  & 2i6,f7.3,1p,3e10.2)
121  ri = sqrt(cm(1)**2 + cm(2)**2 + cm(3)**2)
122  emax = 0.0
123  WRITE (81,30) timec, ri, namec(i3), ql, q1, ecc, ecc1,
124  & semi, semi1, pcrit/pmin, 180.*alpha/3.14, emax
125  30 FORMAT (f9.5,f5.1,i6,2f6.2,2f6.3,1p,2e10.2,0p,f5.2,f6.1,f6.3)
126  CALL flush(81)
127  END IF
128 *
129  40 RETURN
130 *
131  END