Nbody6
 All Files Functions Variables
spinup.f
Go to the documentation of this file.
1  SUBROUTINE spinup(IPAIR,ITERM)
2 *
3 *
4 * Spin synchronization of hierarchical binary.
5 * -------------------------------------------
6 *
7  include 'common6.h'
8  common/binary/ cm(4,mmax),xrel(3,mmax),vrel(3,mmax),
9  & hm(mmax),um(4,mmax),umdot(4,mmax),tmdis(mmax),
10  & namem(mmax),nameg(mmax),kstarm(mmax),iflagm(mmax)
11  REAL*8 m1,m2,mx,mb
12  DATA rg2 /0.1/
13  EXTERNAL rl
14 *
15 *
16 * Set basic pointers.
17  i = n + ipair
18  i1 = 2*ipair - 1
19  iterm = 0
20  im = 0
21  DO 1 k = 1,nmerge
22  IF (namem(k).EQ.name(i)) im = k
23  1 CONTINUE
24 *
25 * Find location of the secondary (i.e. ghost).
26  CALL findj(i,i2,im)
27  IF (i2.LT.0) go to 50
28  m1 = cm(1,im)
29  m2 = cm(2,im)
30  mb = m1 + m2
31  semi0 = -0.5*mb/hm(im)
32  semi1 = semi0
33 *
34 * Obtain current separation and t'' = 2*U*U'.
35  rb = 0.0
36  td2 = 0.0
37  v20 = 0.0
38  DO 5 k = 1,4
39  rb = rb + um(k,im)**2
40  td2 = td2 + 2.0*um(k,im)*umdot(k,im)
41  v20 = v20 + umdot(k,im)**2
42  5 CONTINUE
43 *
44 * Evaluate inner eccentricity and exit non-circular orbit.
45  ecc2 = (1.0 - rb/semi0)**2 + td2**2/(mb*semi0)
46  ecc = sqrt(ecc2)
47  IF (ecc.GT.0.1) THEN
48  go to 50
49  END IF
50 *
51 * Determine largest angular momentum and Roche radius.
52  IF (spin(i2).GT.spin(i1)) THEN
53  rx = radius(i2)
54  mx = m2
55  j1 = i2
56  q = m2/m1
57  rl1 = rl(q)*semi0
58  ELSE
59  rx = radius(i1)
60  mx = m1
61  j1 = i1
62  q = m1/m2
63  rl1 = rl(q)*semi0
64  END IF
65 *
66  IF (rx.GT.rl1) THEN
67  iterm = 1
68  go to 50
69  END IF
70 *
71 * Solve for joint angular frequency for star and binary by iteration.
72  zmu = m1*m2/mb
73  amb0 = zmu*sqrt(mb*semi0)
74  spin0 = spin(j1)
75  DO 10 l = 1,10
76  w = spin(j1)/(rg2*mx*rx**2)
77  wb = sqrt(mb/semi0**3)
78  spin(j1) = spin(j1)*(wb/w)
79  fac = (amb0 + spin0 - spin(j1))**2
80 * Obtain new semi-major axis from angular momentum conservation.
81  semi = fac/(zmu**2*mb)
82 * Copy new value for continued iteration.
83  dw = (wb - w)/wb
84  iter = l
85  IF (abs(dw).LT.1.0d-03) THEN
86 * WRITE (6,8) L, SEMI, WB, W, DW
87  go to 15
88  END IF
89  semi0 = semi
90 * WRITE (6,8) L, SEMI, WB, W, DW
91 * 8 FORMAT (' ITERATE L A WB W DW/W ',I4,1P,E12.4,3E10.2)
92  10 CONTINUE
93 *
94 * Check minimum size.
95  15 IF (semi.LT.rx) THEN
96  semi = rx
97  END IF
98 *
99 * Update binding energy.
100  hi = hm(im)
101  hm(im) = -0.5*mb/semi
102 *
103 * Correct EMERGE & ECOLL (consistency; no net effect).
104  decorr = zmu*(hi - hm(im))
105  emerge = emerge - decorr
106  ecoll = ecoll + decorr
107  egrav = egrav + decorr
108 *
109 * Specify KS coordinate & velocity scaling factors at general point.
110  c2 = sqrt(semi/semi1)
111  v2 = 0.5*(mb + hm(im)*rb*(semi/semi1))
112  c1 = sqrt(v2/v20)
113 *
114 * Re-scale KS variables to new energy with constant eccentricity.
115  rb = 0.0d0
116  DO 20 k = 1,4
117  um(k,im) = c2*um(k,im)
118  umdot(k,im) = c1*umdot(k,im)
119 * RB = RB + UM(K,IM)**2
120  20 CONTINUE
121 *
122 * Rectify the hierarchical KS variables.
123  CALL hirect(im)
124 *
125 * Set new look-up time slightly ahead of components.
126  tev0(i) = tev(i)
127  tev(i) = tev(j1) + 0.01
128 *
129  WRITE (6,25) time+toff, name(i1), kstar(j1), iter, semi, w, dw
130  25 FORMAT (' SPINUP T NM K* IT A W DW/W ',f9.3,i6,2i4,1p,3e10.2)
131 *
132 * WRITE (6,30) KSTAR(J1), KSTAR(I), MX*SMU, RX, RL1,
133 * & TEV(I1), TEV(I2)
134 * 30 FORMAT (' SPINCHECK K*1 K*I MX RX RL TEV ',2I4,F7.2,1P,4E10.2)
135 *
136  50 RETURN
137 *
138  END