https://github.com/florentrenaud/nbody6tt
Tip revision: 8a4716382ead3ece116c48a4ae5c65f8c9534437 authored by Florent on 29 January 2015, 12:19:28 UTC
Nbody6 - 29 January 2015 (added GPU2/Build/.gitkeep)
Nbody6 - 29 January 2015 (added GPU2/Build/.gitkeep)
Tip revision: 8a47163
synch.f
SUBROUTINE SYNCH(IPAIR)
*
*
* Spin synchronization of circularized orbit.
* -------------------------------------------
*
* Rational function approximations of solution to the Hut
* evolution equation with spin. Ref: A & A 99, 126, eqn (A15).
*
INCLUDE 'common6.h'
COMMON/MODES/ EB0(NTMAX),ZJ0(NTMAX),ECRIT(NTMAX),AR(NTMAX),
& BR(NTMAX),EOSC(4,NTMAX),EDEC(NTMAX),TOSC(NTMAX),
& RP(NTMAX),ES(NTMAX),CM(2,NTMAX),IOSC(NTMAX),
& NAMEC(NTMAX)
common/spins/angmom0,rg2(2),m21,r21,semi0,C1,C2,C3,C4,C5,semi
common/radii/ R1,R2
REAL*8 WW(3),QQ(3),W(2),Q(2),AT0(2),M21,WG(2),QG(2),WSCALE(2),
& QSCALE(2),A(2),B(2),C(6)
REAL*8 M0,M1,MC,MC1,MC2,CORERD,MLWIND
REAL*8 TSCLS(20),LUMS(10),GB(10),LUM,K2,MENV
EXTERNAL CORERD,MLWIND
DATA WW /2.119,3.113,8.175/
DATA QQ /0.4909,0.4219,0.2372/
DATA A /6.306505,-7.297806/
DATA B /32.17211,13.01598/
DATA C /5.101417,24.71539,-9.627739,1.733964,
& -2.314374,-4.127795/
SAVE ICOUNT,ITRY,ISYNCH,ITER,ITIME,INAME,ECCM
DATA ICOUNT,ITRY,ISYNCH,ITER,ITIME,ECCM /0,0,0,0,0,0.002D0/
DATA INAME /0/
*
*
* Define c.m. & KS indices and search current names for chaos index.
I = N + IPAIR
I1 = 2*IPAIR - 1
I2 = I1 + 1
IC = 0
DO 2 K = 1,NCHAOS
IF (NAMEC(K).EQ.NAME(I)) IC = K
2 CONTINUE
*
* Count new cases ignoring rare multiple simultaneous events.
IF (NAME(I).NE.INAME) THEN
INAME = NAME(I)
NSYNC = NSYNC + 1
END IF
*
* Exit if binary is not identified but include updating of small ECC.
IF (IC.EQ.0) THEN
JPAIR = -IPAIR
CALL TRFLOW(JPAIR,DTR)
M1 = BODY(I1)*SMU
CALL TRDOT(I1,DTM,M1)
M1 = BODY(I2)*SMU
CALL TRDOT(I2,DTM2,M1)
DTM = MIN(DTM,DTM2)
DTM = MAX(DTM,0.1D0)
TEV(I) = TIME + 0.1*MIN(DTM,DTR)
A0 = -0.5*BODY(I)/H(IPAIR)
ECC2 = (1.0 - R(IPAIR)/A0)**2 + TDOT2(IPAIR)**2/(A0*BODY(I))
ECC = SQRT(ECC2)
ITIME = ITIME + 1
IF (ITIME.GT.10) THEN
WRITE (6,3) NAME(I1), KSTAR(I), NCHAOS, ECC, A0, DTM, DTR
3 FORMAT (' MISSING! SYNCH NM K* NCH ECC A DTM DTR ',
& I6,2I4,F8.4,1P,3E10.2)
END IF
*
* Check enforcement of circularization for small TCIRC.
IF (ECC.LT.0.10.AND.LIST(1,I1).EQ.0) THEN
ICIRC = -1
QPERI = A0*(1.0 - ECC)
CALL TCIRC(QPERI,ECC,I1,I2,ICIRC,TC)
IF (TC.LT.100.0) THEN
CALL DEFORM(IPAIR,ECC,ECCM)
ECC = ECCM
END IF
END IF
*
* Initialize chaos elements after possible common envelope or E < 0.1.
IF (ECC.LE.0.003.OR.IC.EQ.0) THEN
NCHAOS = NCHAOS + 1
IC = NCHAOS
NAMEC(IC) = NAME(I)
RP(IC) = A0*(1.0 - ECC)
ES(IC) = ECC
TOSC(IC) = TIME
IF (NCHAOS.GT.NTMAX) THEN
WRITE (6,4) NAME(I1), NCHAOS, ECC, A0*(1.0 - ECC)
4 FORMAT (' FATAL ERROR! SYNCH NM NCH E QP ',
& I6,I4,F8.4,1P,E9.1)
STOP
END IF
END IF
GO TO 100
END IF
*
* Check Roche overflow time during small intervals.
IF (TIME - TOSC(IC).LT.1.0) THEN
JPAIR = -IPAIR
CALL TRFLOW(JPAIR,DTR)
IF (DTR.LT.STEP(I)) THEN
TEV(I) = TIME + DTR
END IF
END IF
*
* Copy spiral parameters and set semi-major axis & eccentricity.
TIME0 = TOSC(IC)
RP0 = RP(IC)
ES0 = ES(IC)
HI = H(IPAIR)
A0 = -0.5*BODY(I)/H(IPAIR)
ECC2 = (1.0 - R(IPAIR)/A0)**2 + TDOT2(IPAIR)**2/(A0*BODY(I))
ECC = SQRT(ECC2)
ECC0 = ECC
*
* Rectify elements after possible common envelope, Roche or GR process.
QPERI = A0*(1.0 - ECC)
IF (ES0.GT.0.01.OR.ABS(QPERI-RP0).GT.0.02*QPERI) THEN
DT = TIME - TOSC(IC)
IF (ITIME.LT.50) THEN
WRITE (6,5) NAME(I1), KSTAR(I1),KSTAR(I2),KSTAR(I), ES0,
& ECC, RP0, QPERI, DT
5 FORMAT (' RP RECTIFY SYNCH NM K* ES0 E RP0 QP DT ',
& I6,3I4,2F8.4,1P,3E10.2)
END IF
* Note: new RP(IC) needed for scaling RADIUS (original bug Oct 2008).
RP(IC) = QPERI
RP0 = QPERI
ES0 = ECC
END IF
*
* Set standard binary or current elements on significant departure.
IF (ECC.GT.0.01.OR.ES0.GT.0.01) THEN
ECC = SQRT(ECC2)
IF (ECC.GT.0.01) THEN
KSTAR(I) = 0
WRITE (6,8) NAME(I1), LIST(1,I1), ES0, ECC, A0*SU
8 FORMAT (' NON-CIRCULAR SYNCH NM NP ES0 ECC A ',
& I6,I4,2F8.4,1P,E10.2)
NAMI = -I
CALL SPIRAL(NAMI)
GO TO 100
ELSE
ES0 = ECC
RP0 = A0*(1.0 - ECC)
END IF
END IF
*
* Specify index J1 as biggest radius to be used with AT0(1).
IF (RADIUS(I1).GE.RADIUS(I2)) THEN
J1 = I1
J2 = I2
ELSE
J1 = I2
J2 = I1
END IF
*
* Obtain stellar parameters for evolving stars at current epoch.
IF (KSTAR(J1).GE.2.AND.KSTAR(J1).LE.9) THEN
KW = KSTAR(J1)
M1 = BODY(J1)*SMU
M0 = BODY0(J1)*ZMBAR
MC = 0.D0
AGE = TIME*TSTAR - EPOCH(J1)
CALL star(KW,M0,M1,TM,TN,TSCLS,LUMS,GB,ZPARS)
CALL hrdiag(M0,AGE,M1,TM,TN,TSCLS,LUMS,GB,ZPARS,
& RM,LUM,KW,MC,RCC,MENV,RENV,K2)
CM(1,IC) = MC/SMU
KW1 = KW
ELSE
KW1 = KSTAR(J1)
END IF
*
* Define oscillation period (dimensionless time) and damping constants.
XN = 0.0
QD = 0.0
DO 10 K = 1,2
IK = I1 + K - 1
IF (K.EQ.1) THEN
IK = J1
ELSE
IK = J2
END IF
* Specify polytropic index for each star (n = 3, 2 or 3/2).
IF (KSTAR(IK).EQ.3.OR.KSTAR(IK).EQ.5.OR.
& KSTAR(IK).EQ.6.OR.KSTAR(IK).EQ.9) THEN
CALL GIANT(IPAIR,IK,WG,QG,WSCALE,QSCALE,XN,QL)
W(K) = WG(1)
Q(K) = QG(1)
rg2(k)= 0.1*(1.0 - CM(K,IC)/BODY(IK))
QD = QL
ELSE
QL = 1.0E+04
IP = 3
IF (KSTAR(IK).GE.3) IP = 2
IF (KSTAR(IK).EQ.4.OR.KSTAR(IK).EQ.7) IP = 3
IF (KSTAR(IK).EQ.8) IP = 3
IF (KSTAR(IK).EQ.0) IP = 1
W(K) = WW(IP)
Q(K) = QQ(IP)
IF (KSTAR(IK).LE.2.OR.KSTAR(IK).EQ.7) THEN
rg2(k) = 0.1
ELSE IF (KSTAR(IK).EQ.4) THEN
CM(K,IC) = MIN(0.89D0*BODY(IK),CM(K,IC))
rg2(k)= 0.1*(1.0 - CM(K,IC)/BODY(IK))
ELSE
rg2(k)= 0.21
END IF
END IF
TL = TWOPI*RADIUS(IK)*SQRT(RADIUS(IK)/BODY(IK)/W(K))
IF (KSTAR(IK).GE.11) QL = 1.0D+10
AT0(K) = 1.0/(QL*TL)
10 CONTINUE
*
* Form mass, radius & pericentre ratio.
IF (RADIUS(I1).GE.RADIUS(I2)) THEN
M21 = BODY(I2)/BODY(I1)
R21 = RADIUS(I2)/RADIUS(I1)
RP1 = RP(IC)/RADIUS(I1)
rad = radius(i1)
ELSE
M21 = BODY(I1)/BODY(I2)
R21 = RADIUS(I1)/RADIUS(I2)
RP1 = RP(IC)/RADIUS(I2)
rad = radius(i2)
END IF
*
* Define initial angular momentum from the scaled semi-major axis.
semi0 = RP1/(1.0 - ES0)
*
* Form the initial mean motion in N-body units.
omeq = sqrt(BODY(I)/(rad*semi0)**3)
*
* Convert from angular momentum to omega (denoted spin1 & spin2).
IF (KSTAR(J1).LE.2.OR.(KSTAR(J1).GE.7.AND.KSTAR(J1).NE.9)) THEN
SPIN1 = SPIN(J1)/(rg2(1)*BODY(J1)*RADIUS(J1)**2)
ELSE
KW = KSTAR(J1)
M0 = BODY0(J1)*SMU
MC1 = CM(1,IC)*SMU
IF (MC1.LE.0.0D0.OR.MC1.GT.M0) THEN
MC1 = 0.3 + 0.1*(KSTAR(J1) - 3)
IF(KW.EQ.9) MC1 = MIN(0.3D0,0.95*M0)
CM(1,IC) = MC1/ZMBAR
END IF
ZDUM = 2.0D0
RC1 = CORERD(KW,MC1,M0,ZDUM)/SU
SPIN1 = SPIN(J1)/(rg2(1)*BODY(J1)*RADIUS(J1)**2 +
& 0.21*MC1/SMU*RC1**2)
END IF
IF (KSTAR(J2).LE.2.OR.(KSTAR(J2).GE.7.AND.KSTAR(J2).NE.9)) THEN
spin2 = SPIN(J2)/(rg2(2)*BODY(J2)*RADIUS(J2)**2)
ELSE
KW = KSTAR(J2)
M0 = BODY0(J2)*SMU
MC2 = CM(2,IC)*SMU
IF (MC2.LE.0.0D0.OR.MC2.GT.M0) THEN
MC2 = 0.3 + 0.1*(KSTAR(J2) - 3)
IF(KW.EQ.9) MC2 = MIN(0.3D0,0.95*M0)
CM(2,IC) = MC2/ZMBAR
END IF
ZDUM = 2.0D0
RC2 = CORERD(KW,MC2,M0,ZDUM)/SU
spin2 = SPIN(J2)/(rg2(2)*BODY(J2)*RADIUS(J2)**2 +
& 0.21*MC2/SMU*RC2**2)
END IF
*
* Set synchronous spin for degenerate stars.
DS10 = (spin1 - omeq)/omeq
DS20 = (spin2 - omeq)/omeq
IF (KSTAR(J1).GE.10) spin1 = omeq
IF (KSTAR(J2).GE.10) spin2 = omeq
DS1 = (spin1 - omeq)/omeq
DS2 = (spin2 - omeq)/omeq
*
* Skip integration if both spins are synchronous.
IF (ABS(DS1).LT.0.01.AND.ABS(DS2).LT.0.01) THEN
KX = MAX(KSTAR(J1),KSTAR(J2))
IF (ABS(DS20).GT.0.01.AND.KX.LT.10) THEN
WRITE (6,20) NAME(I1), KSTAR(I1), KSTAR(I2), A0*SU, DS1,
& DS20, OMEQ
20 FORMAT (' ENFORCED SYNCH NM K* A DS1 DS2 omeq ',
& I6,2I4,F9.3,1P,3E10.2)
END IF
ISYNCH = 1
GO TO 50
END IF
*
DS = (spin1 - omeq)/omeq
* Scale the spins by mean motion and define angular momentum.
spin10=spin1/omeq
spin20=spin2/omeq
angmom0=(m21/(1+m21))*semi0**2*sqrt(1-es0**2)+rg2(1)*spin10+
& m21*r21**2*rg2(2)*spin20
*
IF (ICOUNT.LE.-1000) THEN
ICOUNT = ICOUNT + 1
SUM1=(m21/(1+m21))*semi0**2*sqrt(1-es0**2)
SUM2 = rg2(1)*spin10
SUM3 = m21*r21**2*rg2(2)*spin20
SUM4 = SUM1 + SUM2 + SUM3
ZM = BODY(J1)*SMU
WRITE (92,21)KSTAR(J1),KSTAR(J2),ZM,a0,SUM1,SUM2,SUM3,SUM4,DS
21 FORMAT (' K* M1 A S1 S2 S3 S4 DS ',2I4,F8.4,1P,E12.4,4E10.2,
& 0P,F6.1)
CALL FLUSH(92)
END IF
* Evaluate damping coefficients (Mardling & SJA, M.N. 321, 398, 2001).
cf = 54.0*twopi/5.0
C3 = (cf/9.0)*(AT0(1)*(Q(1)/W(1))**2*M21**2)/rg2(1)/semi0**6
C4 = (cf/9.0)*(AT0(2)*(Q(2)/W(2))**2/M21**2)*R21**6/rg2(2)/
& semi0**6
*
* Include change in moment of inertia for rapid evolution of primary.
IF (KW1.GE.2.AND.KW1.LE.9) THEN
* Obtain mass loss due to stellar wind for single star (Msun/yr).
RLPERI = 0.D0
DMX = MLWIND(KW1,LUM,RM,M1,MC,RLPERI,ZMET)
DT = TIME - TEV0(J1)
* Include safety check on small time interval (SJA 4/09).
IF (DT.LE.1.0D-10) DT = ABS(TEV(J1) - TIME)
RDOT = (RM/SU - RADIUS(J1))/DT
* Form combined moment of inertia factor for primary (RM 11/08).
C5 = -1.0D+06*DMX*TSTAR/M1 + 2.0*RDOT/RADIUS(J1)
R1 = RM/(SU*RADIUS(J1))
R2 = 1.0
ELSE
R1 = 1.0
R2 = 1.0
C5 = 0.0
END IF
*
* Skip on zero or negative interval.
IF (time - time0.LE.0.0D0) GO TO 70
*
* Obtain dominant terms of the derivatives (cf. routine HUT/DERIV2).
udot1=C3
udot2=C4
*
* Choose the step from smallest time-scale (! time0 < time possible).
taux = min(abs(1.0/udot1),abs(1.0/udot2))
nstep = 1 + 100.0*sqrt(ABS(time - time0)/taux)
nstep = min(nstep,100)
* Increase number of steps on slow primary rotation.
IF (DS1.LT.-0.2) nstep = nstep + 10
IF (DS1.LT.-0.8) nstep = nstep + 50
IF (DS1.LT.-0.9) nstep = nstep + 50
DT = TIME - TIME0
*
* Reduce integration interval for slow evolution or after merger.
IF (DT.GT.0.5) THEN
JPAIR = -IPAIR
CALL TRFLOW(JPAIR,DTR)
M1 = BODY(J1)*SMU
CALL TRDOT(J1,DTM,M1)
DTM = MAX(DTM,0.1D0)
DT = 0.1*MIN(DTR,DTM,10.0D0)
IF (ABS(DS2).GT.0.05.OR.DS10.LT.-0.99) THEN
DT = 0.1*DT
nstep = nstep + 50
END IF
TK = DAYS*A0*SQRT(A0/BODY(I))
IF (ICOUNT.LT.50) THEN
WRITE (6,30) NAME(J1), DS1, DS2, DT, TK
30 FORMAT (' REDUCE SYNCH NM DS1 DS2 DT P ',
& I6,1P,4E10.2)
END IF
END IF
*
ITT = 0
IF (KSTAR(J1).EQ.3) DT = 0.5*DT
40 dtau1 = ABS(DT)/float(nstep)
*
* Integrate equations for angular velocities only.
call hut2(spin10,spin20,spin1,spin2,nstep,dtau1)
*
spin11=spin1
spin21=spin2
* Re-scale the semi-major axis and angular velocities to N-body units.
semi = rad*semi0*semi
spin1 = omeq*spin1
spin2 = omeq*spin2
ecc = es0
omeq = SQRT(BODY(I)/SEMI**3)
DS1 = (spin1 - omeq)/omeq
DS2 = (spin2 - omeq)/omeq
NSYNCH = NSYNCH + 1
*
ITT = ITT + 1
* IF (ITT.GE.3) STOP
IF (spin1.LT.0.0.OR.spin2.LT.0.0) THEN
WRITE (6,42) ITRY, nstep, DT, spin1, spin2, omeq
42 FORMAT (' REPEAT SYNCH IT # DT S1 S2 omeq ',
& 2I5,1P,4E10.2)
ITRY = ITRY + 1
nstep = nstep + 50
IF (ITRY.LT.2) GO TO 40
* STOP
END IF
ITRY = 0
*
IF ((DS10.LT.0.0.AND.DS1.GT.0.01).OR.
& (DS20.LT.0.0.AND.DS2.GT.0.01)) THEN
ITER = ITER + 1
nstep = nstep + 50
IF (ITER.GT.1) DT = 0.5*DT
IF (ITER.LT.4) GO TO 40
WRITE (6,45) nstep, DS10, DS1, DS20, DS2, DT
45 FORMAT (' LIMIT SYNCH # DS10, DS1, DS20, DS2, DT ',
& I4,1P,5E10.2)
END IF
*
IF ((DS1.GT.0.0.AND.DS10.LT.-0.01).OR.
& (DS2.GT.0.0.AND.DS20.LT.-0.01)) THEN
ITER = ITER + 1
nstep = nstep + 50
IF (ITER.GT.1) DT = 0.5*DT
IF (ITER.LT.4) GO TO 40
WRITE (6,45) nstep, DS10, DS1, DS20, DS2, DT
END IF
ITER = 0
*
* Convert back to angular momenta.
50 IF (KSTAR(J1).LE.2.OR.(KSTAR(J1).GE.7.AND.KSTAR(J1).NE.9)) THEN
SPIN(J1) = rg2(1)*BODY(J1)*RADIUS(J1)**2*spin1
ELSE
SPIN(J1) = (rg2(1)*BODY(J1)*RADIUS(J1)**2 +
& 0.21*MC1/SMU*RC1**2)*spin1
END IF
IF (KSTAR(J2).LE.2.OR.(KSTAR(J2).GE.7.AND.KSTAR(J2).NE.9)) THEN
SPIN(J2) = rg2(2)*BODY(J2)*RADIUS(J2)**2*spin2
ELSE
SPIN(J2) = (rg2(2)*BODY(J2)*RADIUS(J2)**2 +
& 0.21*MC2/SMU*RC2**2)*spin2
END IF
IF (ISYNCH.GT.0) THEN
ISYNCH = 0
GO TO 70
END IF
*
ERR = (SEMI - A0)/A0
* Obtain the tidal contributions from integration.
A0 = RP0/(1.0 - ES0)
DH = -0.5*BODY(I)*(1.0/SEMI - 1.0/A0)
* Prevent new SEMI < R.
IF (H(IPAIR) + DH.LT.-0.5*BODY(I)/R(IPAIR)) THEN
DH = -0.5*BODY(I)/R(IPAIR) - H(IPAIR)
END IF
*
* Update energy and semi-major axis.
H(IPAIR) = H(IPAIR) + DH
SEMI = -0.5*BODY(I)/H(IPAIR)
*
* Set new pericentre from final elements (delay updating).
IF (LIST(1,I1).EQ.0) THEN
QPERI = semi*(1.0 - ecc)
ELSE
QPERI = RP0*(1.0 + ES0)/(1.0 + ECC)
END IF
*
* Form KS coordinate scaling factor from pericentre ratio.
C1 = SQRT(QPERI/RP0)
*
* Set KS velocity scaling from energy relation with RP0 instead of R.
C2 = SQRT((BODY(I) + H(IPAIR)*QPERI)/(BODY(I) + HI*RP0))
*
* Scale KS variables to yield the prescribed elements (set TDOT2 >= 0).
R(IPAIR) = 0.0D0
TDOT2(IPAIR) = 0.0
DO 60 K = 1,4
U(K,IPAIR) = C1*U(K,IPAIR)
UDOT(K,IPAIR) = C2*UDOT(K,IPAIR)
U0(K,IPAIR) = U(K,IPAIR)
R(IPAIR) = R(IPAIR) + U(K,IPAIR)**2
TDOT2(IPAIR) = TDOT2(IPAIR) + 2.0*U(K,IPAIR)*UDOT(K,IPAIR)
60 CONTINUE
TDOT2(IPAIR) = MAX(TDOT2(IPAIR),0.0D0)
*
* Perform energy correction to maintain conservation.
ZMU = BODY(I1)*BODY(I2)/BODY(I)
ECOLL = ECOLL + ZMU*(HI - H(IPAIR))
EGRAV = EGRAV + ZMU*(HI - H(IPAIR))
*
* Initialize KS for perturbed motion.
IF (LIST(1,I1).GT.0) THEN
* Rectify orbit to prevent eccentricity growth.
CALL KSRECT(IPAIR)
CALL RESOLV(IPAIR,1)
IMOD = KSLOW(IPAIR)
CALL KSPOLY(IPAIR,IMOD)
END IF
*
DA = (SEMI - A0)/SEMI
DS1 = (spin1-omeq)/omeq
DS2 = (spin2-omeq)/omeq
TS1 = MIN(TEV(J1),TEV(J2))
WRITE (7,65) nstep,time-time0,udot1,udot2,DS1,DS2,DA,TS1
65 FORMAT (' HUT2 # t-t0 ud DS DA/A TM ',
& I5,F9.3,1P,5E9.1,0P,F10.2)
*
* Include magnetic or gravitational braking for small separations.
* IF (SEMI*SU.LT.10.0) THEN
* DT = TIME - TIME0
* CALL BRAKE(IPAIR,DT)
* IF (IPHASE.LT.0) GO TO 100
* END IF
*
* Update look-up time from radial expansion or Roche interval.
70 JPAIR = -IPAIR
CALL TRFLOW(JPAIR,DTR)
M1 = BODY(J1)*SMU
CALL TRDOT(J1,DTM,M1)
DTM = MAX(DTM,0.1D0)
TOSC(IC) = TIME
TEV(I) = TIME + 0.1*MIN(DTR,DTM)
TEV(I) = MIN(TEV(J1),TEV(J2),TEV(I))
*
SEMI = -0.5*BODY(I)/H(IPAIR)
ECC2 = (1.0 - R(IPAIR)/SEMI)**2 + TDOT2(IPAIR)**2/(SEMI*BODY(I))
ECC = SQRT(ECC2)
* Correct for small eccentricity drift.
IF (ABS(ECC - ES0).GT.0.001*ES0) THEN
CALL DEFORM(IPAIR,ECC,ES0)
ECC = ES0
QPERI = SEMI*(1.0 - ES0)
END IF
* Save final reference values.
RP(IC) = QPERI
ES(IC) = ECC
TOSC(IC) = TIME
*
IF (ECC.GT.0.01) THEN
WRITE (6,80) NAME(I1), ECC, nstep, dtau1, ERR, C1-1.0, C2-1.0
80 FORMAT (' DANGER! NAM E # dtau DA/A DC1 DC2 ',
& I6,F8.4,I5,1P,5E10.2)
STOP
END IF
*
IF (ICOUNT.LE.100.AND.ABS(DS1).GT.0.01) THEN
ICOUNT = ICOUNT + 1
DT = TEV(I) - TIME
WRITE (7,85) NAME(J1), KSTAR(J1), KSTAR(J2),
& SEMI*SU, DA, omeq, spin1, spin2, DT
85 FORMAT (' SYNCH NM K* A DA/A om s1 s2 DT ',
& I8,2I4,F8.2,1P,5E10.2)
CALL FLUSH(7)
END IF
*
IF (spin1.LT.0.0) THEN
WRITE (6,90) NAME(J1), KSTAR(J1), spin1, TIME-TIME0
90 FORMAT (' DANGER! NEGATIVE SPIN NM K* s1 T-T0 ',
& I6,I4,1P,2E10.2)
IF (SPIN1.LT.0.0) SPIN1 = 0.1*omeq
IF (SPIN2.LT.0.0) SPIN2 = 0.1*omeq
ITRY = ITRY + 1
IF (ITRY.LE.2) GO TO 50
* STOP
END IF
*
100 RETURN
*
END