# More on Kinetic Returns

## Mark Pottenger

In the Sagittarius 1980 issue of *The Mutable Dilemma *I
described the techniques for getting kinetic solar and lunar returns. I ended
by saying I prefer to let a computer do it. I have decided to make that easier
for any of our readers who already have computers by giving the algorithm I use
in the CCRS horoscope program. I will give the two most important subroutines
exactly as they are in the program and some additional explanations.

#### First, the program segments:

200 REM BASIC CYCLES

210 C1=365.24219879\C2=27.321582

220 REM CIRCLE,HALF

230 C=360\H1=180

1810 REM DAYS FROM 1900,OBLIQUITY

1820 DEF FNE(J)

1830 D1=J-2415020

1840 T=D1/36525\T2=T*T\T3=T2*T

1850 E=23.45229444-.0130125*T-.00000164*T2+.000000503*T3

1860 O0=FNC(E)\O1=FNS(E)

1870 RETURN E

1880 FNEND

2140 REM JULIAN DAY

2150 DEF FNJ(M,D,Y,H)

2160 U=Y\IFM<3THENU=U-1

2170 U0=U+4712

2180 U1=M+1\IFU1<4THENU1=U1+12

2190 J=INT(U0*365.25)+INT(30.6*U1)+D +H/24-63.5 \IFO7THEN2220

2200 J=J-(INT(ABS(U)/100)-INT(ABS(U) /400))*SGN(U)+2

2210 IFU<0ANDU/100=INT(U/100)ANDU/400 <>INT(U/400)THENJ=J-1

2220 E=FNE(J)

2230 RETURN J

2240 FNEND

2250 REM REVERSE JULIAN W4,5,6,7=MON,DAY,YR,TIME

2260 DEF FNJ2(J)

2270 U0=J+32082.5 \IFO7THEN2310

2280 U1=U0+INT(U0/36525)-INT(U0/146100)-38

2290 IFJ>=1830691.5THENU1=U1+1

2300 U0=U0+INT(U1/36525)-INT(U1/146100)-38

2310 U2=INT(U0+123)

2320 U3=INT((U2-122.2)/365.25)

2330 U4=INT((U2-INT(365.25*U3))/30.6001)

2340 W4=U4-1\IFW4>12THENW4=W4-12

2350 W5=U2-INT(365.25*U3)-INT(30.6001*U4)

2360 W6=U3+INT((U4-2)/12)-4800

2370 W7=(J-INT(J+.5)+.5)*24

2380 RETURN W7

2390 FNEND

6880 REM SUN MOON

10330 REM KINETIC SOLAR

10340 F=INT((J-J1)/(C1+1))

10350 J2=J1+F*(C1+1)

10360 J=J1+(J2-J1)/C1

10370 E=FNE(J)

10380 R9=1\GOSUB6890

10390 L0(1)=L(1)+L0(26)

10400 L0(25)=S5\L0(27)=V(1)/C1

10410 E=FNE(J2)

10420 GOSUB6890

10430 F=L0(1)-L(1)

10440 IFABS(F)>H1THENF=F-SGN(F)*C

10450 J2=J2+F/(V(1)-L0(27))

10460 IFABS(F)>.0003THEN10360

10470 J=J2\R9=0

10480 RETURN

10610 REM KINETIC LUNAR RETURN

10620 F=INT((J-J1)/27.396386)

10630 J2=J1+F*27.396386

10640 J=J1+(J2-J1)/C1

10650 E=FNE(J)

10660 R9=2\GOSUB6890

10670 L0(2)=L(2)+L0(26)

10680 L0(25)=S5\L0(27)=V(2)/C1

10690 E=FNE(J2)

10700 GOSUB 6890

10710 F=L0(2)-L(2)

10720 IFABS(F)>H1THENF=F-SGN(F)*C

10730 J2=J2+F/(V(2)-L0(27))

10740 IF ABS(F)>.001 THEN 10640

10750 J=J2

10760 R9=0

10770 RETURN

This is written in North Star BASIC. To convert to Microsoft BASIC or any of its variations, the multiple line functions at the beginning must be changed into subroutines. The backslash (\) is a statement separator like the colon (:). All work I do with current patterns is done in terms of the Julian Day Number (J), so I have included my calendar to JD and JD to calendar routines. (The variable O7 is a calendar flag: 0 for Gregorian, 1 for Julian.) For BASICs using less than the 14 digits we use, the routines should be changed to get time of day from the days from 1900 variable (D1)—otherwise accuracy is lost.

When the kinetic return routines are called, J is the current JD, J1 is the natal JD, L0(1) is the natal sun, L0(2) is the natal moon, L0(26) is the precession correction (0 for unprecessed returns, current SVP minus natal SVP for precessed returns), and C1 is a tropical year. The subroutine starting at 6890 (not included) is the sun-moon routine. It returns L(1), L(2), V(1), and V(2) as the sun’s and moon’s longitudes and velocities. R9 is a flag for this routine: if R9 is 1 it only gets the sun; if R9 is 2 it only gets the moon; if R9 is 0 it gets both. Calls to FNE set several variables that depend on the JD.

The kinetic solar routine works as follows: Lines 10340 and 10350 get the most recent return date before the current date asked for. A tropical year plus one day is the length of the “kinetic year”. Line 10340 gets the number of cycles elapsed. Line 10350 adds that many cycles times the cycle length to the natal JD to get a working JD. (J2). Line 10360 gets the JD for a secondary progression for the working JD just calculated. Line 10380 gets the progressed sun. Line 10390 saves the progressed sun plus precession correction (if any) as the longitude to return to. The precession correction must be added here inside the loop or the routine will always give a straight tropical (unprecessed) return. Line 10400 saves the progressed SVP and the velocity divided by one year. Line 10410 sets times back to the working JD. Line 10420 gets the transiting sun. Line 10430 gets the difference between progressed and transiting longitudes. Line 10440 corrects for any crossings of the Pisces-Aries border (which might otherwise send you jumping to a completely different year). Line 10450 corrects the working JD. The correction is ERROR/VELOCITY. Since the error is in degrees and the velocity is in degrees per day, the correction comes out in days. The velocity used is actually transiting velocity minus progressed velocity (the velocity difference). Line 10460 tests for convergence. If the error is greater than about one second of arc the routine is repeated from 10360 (progressed JD). Line 10470 sets the current JD to the working JD and restores the sun-moon routine flag.

The kinetic lunar return subroutine uses essentially the same logic, so I won’t go into it in detail. Conventional returns are, of course, much simpler. I didn’t include the code in this listing, but removing all the calculations of progressions from these routines produces a conventional return routine.

Enjoy!