Nbody6
 All Files Functions Variables
hut2.f
Go to the documentation of this file.
1  subroutine hut2(spin10,spin20,spin1,spin2,nsteps,dtau)
2 *
3 * spin evolution of circular binary.
4 * ----------------------------------
5 
6  implicit real*8 (a-h,o-z)
7  real*8 u(2),udot(2)
8  common/cflag/ iflag,iq
9 
10  u(1)=spin10
11  u(2)=spin20
12  iflag = 0
13  iq = 0
14 
15  call deriv3(u,udot)
16 
17 * include step reduction for large derivatives.
18  it = 0
19  1 IF (abs(udot(1))*dtau.GT.0.01*spin10) THEN
20  dtau = 0.5d0*dtau
21  nsteps = 2*nsteps
22  it = it + 1
23  IF (it.LT.5) go to 1
24  END IF
25 
26  5 IF (abs(udot(2))*dtau.GT.0.01*spin20) THEN
27  dtau = 0.5d0*dtau
28  nsteps = 2*nsteps
29  it = it + 1
30  IF (it.LT.5) go to 5
31  END IF
32 
33 * do i=1,nsteps
34 * call rk4c(dtau,u)
35 * IF (iflag.GT.0) go to 10
36 * enddo
37 
38  iter = 0
39  6 call rk4c(dtau,u)
40  iter = iter + 1
41  IF (iflag.EQ.0.AND.iter.LT.nsteps) go to 6
42 
43  spin1=u(1)
44  spin2=u(2)
45 
46  end
47 
48  subroutine rk4c(dt,u)
49 
50 * runge-kutta integrator.
51 * -----------------------
52 
53 * author: rosemary mardling(3/98).
54 
55  parameter(n=2)
56  implicit real*8 (a-h,o-z)
57  real*8 u0(n),ut(n),du(n),u(n)
58  real*8 a(4),b(4)
59 
60  a(1)=dt/2.0d0
61  a(2)=a(1)
62  a(3)=dt
63  a(4)=0.0d0
64 
65  b(1)=dt/6.0d0
66  b(2)=dt/3.0d0
67  b(3)=b(2)
68  b(4)=b(1)
69 
70  do i=1,n
71  u0(i)=u(i)
72  ut(i)=0.0d0
73  enddo
74 
75  do j=1,4
76  call deriv3(u,du)
77 
78  do i=1,n
79  u(i)=u0(i)+a(j)*du(i)
80  ut(i)=ut(i)+b(j)*du(i)
81  enddo
82  enddo
83 
84  do i=1,n
85  u(i)=u0(i)+ut(i)
86  enddo
87 
88  end
89 
90  subroutine deriv3(u,udot)
91 
92  implicit real*8 (a-h,m,o-z)
93  real*8 u(2),udot(2)
94  common/spins/angmom0,rg2(2),m21,r21,semi0,c1,c2,c30,c40,c5,semi
95  common/radii/ r1,r2
96  common/cflag/ iflag,iq
97  SAVE ic,id
98  DATA ic,id /0,0/
99 
100 * assume e=0.
101  spin1=u(1)
102  spin2=u(2)
103 
104  c3=c30*r1**6
105  c4=c40*r2**6
106 
107 * e2=e**2
108 * e4=e2**2
109 * e6=e4*e2
110 * fac=1-e2
111 
112 * f2=1+7.5*e2+5.625*e4+0.3125*e6
113 * f3=1+3.75*e2+1.875*e4+0.078125*e6
114 * f4=1+1.5*e2+0.125*e4
115 * f5=1+3*e2+0.375*e4
116 
117 
118  semi=angmom0-rg2(1)*spin1-m21*r21**2*rg2(2)*spin2
119 * semi=(semi*(1+m21)/m21/semi0**2)**2/fac
120  semi=(semi*(1+m21)/m21/semi0**2)**2
121  oa = 1.0/semi
122  IF (iq.EQ.0) THEN
123  oa0 = oa
124  iq = 1
125  END IF
126 
127 * udot(1)=(oa/fac)**6*c3*(oa**1.5*f2-fac**1.5*f5*spin1)
128 * udot(2)=(oa/fac)**6*c4*(oa**1.5*f2-fac**1.5*f5*spin2)
129  udot(1)=oa**6*c3*(oa**1.5-spin1) - c5*spin1
130  udot(2)=oa**6*c4*(oa**1.5-spin2)
131 
132 * quit on relative change exceeding 2 % (sja 05/09).
133  IF (abs(oa - oa0).GT.0.02*oa0) iflag = 1
134 
135 * ic = ic + 1
136 * ic = ic + 1
137 * IF (ic.LT.10) THEN
138 * WRITE (6,1) ic, spin1, spin2, udot, c5
139 * 1 FORMAT (' HUT DERIV # s1 s2 udot C5 ',i5,1p,6e9.1)
140 * END IF
141 
142  end