More on Kinetic Returns
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
220 REM CIRCLE,HALF
1810 REM DAYS FROM 1900,OBLIQUITY
1820 DEF FNE(J)
1870 RETURN E
2140 REM JULIAN DAY
2150 DEF FNJ(M,D,Y,H)
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
2230 RETURN J
2250 REM REVERSE JULIAN W4,5,6,7=MON,DAY,YR,TIME
2260 DEF FNJ2(J)
2270 U0=J+32082.5 \IFO7THEN2310
2380 RETURN W7
6880 REM SUN MOON
10330 REM KINETIC SOLAR
10610 REM KINETIC LUNAR RETURN
10700 GOSUB 6890
10740 IF ABS(F)>.001 THEN 10640
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.