You are here

moonup.bas


Title: moonup.bas
Description: Modified by Dave La Rosa - Added Automatic Mode works on eBookman
***************************
THIS PROGRAM COMPUTES THE
TIMES OF MOONRISE AND MOON-
SET ANYWHERE IN THE WORLD.
FROM SKY & TELESCOPE, JULY,
1989, PAGE 78.
***************************

Category: Physics
Copyright: Dave La Rosa
Email: davelarosa@yahoo.com
Created:
Version: 1.00
Sbver:


'10 REM MOONRISE-MOONSET
11 DIM Ma(3,3)
12 '' mode =1 Automatic
13 mode=0
15 GOSUB 170
16 '' Chandler Arizona Latitude=33N18 Longitude=-111W50
17 B5=33+(18/60) : L5=-1*(111+(50/60))
18 H=7
19 if mode=1 then goto 30
20 INPUT "Lat, Long (Deg)";B5,L5
25 INPUT "Time Zone (Hrs)";H
30 L5=L5/360: Z0=H/24
35 GOSUB 760: T=(J-2451545)+F
40 GOSUB 245: T=T+Z0
45 REM
50 REM POSITION LOOP
55 FOR I=1 TO 3
60 GOSUB 495: Ma(I,1)=A5
65 Ma(I,2)=D7: Ma(I,3)=R5: T=T+0.5
70 NEXT
75 IF Ma(2,1)>Ma(1,1) THEN 85
80 Ma(2,1)=Ma(2,1)+P2
85 IF Ma(3,1)>Ma(2,1) THEN 95
90 Ma(3,1)=Ma(3,1)+P2
95 Z1=R1*(90.567-41.685/Ma(2,3))
100 S=SIN(B5*R1): C=COS(B5*R1)
105 Z=COS(Z1): M8=0: W8=0: PRINT
110 A0=Ma(1,1): D0=Ma(1,2)
115 FOR C0=0 TO 23
120 P=(C0+1)/24
125 F0=Ma(1,1):F1=Ma(2,1):F2=Ma(3,1)
130 GOSUB 225: A2=F
135 F0=Ma(1,2):F1=Ma(2,2):F2=Ma(3,2)
140 GOSUB 225: D2=F
145 GOSUB 285: A0=A2:D0=D2:V0=V2
150 NEXT
155 GOSUB 450: REM SPECIAL MSG?
156 if mode!=1 then goto 160
157 PRINT "Latitude ";B5;" Longitude ";L5*360;" TimeZone ";H
158 PRINT "Day/Month/Year ";nd$
160 END
165 REM
170 REM CONSTANTS
175 REM DIM Ma(3,3)
176 REM 14159265: P2=2*P1
180 P2=2*PI
185 R1=PI/180: K1=15*R1*1.0027379
190 S$="MOONSET AT "
195 R$="MOONRISE AT "
200 M1$="NO MOONRISE THIS DATE"
205 M2$="NO MOONSET THIS DATE"
210 M3$="MOON DOWN ALL DAY"
215 M4$="MOON UP ALL DAY"
220 RETURN
225 REM 3-POINT INTERPOLATION
230 A=F1-F0: B=F2-F1-A
235 F=F0+P*(2*A+B*(2*P-1))
240 RETURN
245 REM LST AT 0H ZONE TIME
250 T0=T/36525
255 S=24110.5+8640184.813*T0
260 S=S+86636.6*Z0+86400*L5
265 S=S/86400: S=S-INT(S)
270 T0=S*360*R1
275 RETURN
280 REM
285 REM TEST AN HOUR FOR AN EVENT
290 L0=T0+C0*K1: L2=L0+K1
295 IF A2 THEN A2=A2+2*PI
300 H0=L0-A0: H2=L2-A2
305 H1=(H2+H0)/2: REM HOUR ANGLE
310 D1=(D2+D0)/2: REM DEC
315 IF C0>0 THEN 325
320 V0=S*SIN(D0)+C*COS(D0)*COS(H0)-Z
325 V2=S*SIN(D2)+C*COS(D2)*COS(H2)-Z
330 IF SGN(V0)=SGN(V2) THEN 440
335 V1=S*SIN(D1)+C*COS(D1)*COS(H1)-Z
340 A=2*V2-4*V1+2*V0: B=4*V1-3*V0-V2
345 D=B*B-4*A*V0: IF D<0 THEN 440
350 D=SQR(D)
355 IF V0<0 AND V2>0 THEN PRINT R$;
360 IF V0<0 AND V2>0 THEN M8=1
365 IF V0>0 AND V2<0 THEN PRINT S$;
370 IF V0>0 AND V2<0 THEN W8=1
375 E=(-B+D)/(2*A)
380 IF E>1 OR E<0 THEN E=(-B-D)/(2*A)
385 T3=C0+E+1/120: REM ROUND OFF
390 H3=INT(T3): M3=INT((T3-H3)*60)
395 PRINT USING "##:##";H3;M3;
400 H7=H0+E*(H2-H0)
405 N7=-COS(D1)*SIN(H7)
410 D7=C*SIN(D1)-S*COS(D1)*COS(H7)
415 A7=ATN(N7/D7)/R1
420 IF D7<0 THEN A7=A7+180
425 IF A7<0 THEN A7=A7+360
430 IF A7>360 THEN A7=A7-360
435 PRINT USING ", AZ ###.#";A7
440 RETURN
445 REM
450 REM SPECIAL MESSAGE ROUTINE
455 IF M8=0 AND W8=0 THEN 475
460 IF M8=0 THEN PRINT M1$
465 IF W8=0 THEN PRINT M2$
470 GOTO 485
475 IF V2<0 THEN PRINT M3$
480 IF V2>0 THEN PRINT M4$
485 RETURN
490 REM
495 REM FUNDAMENTAL ARGUMENTS
500 L=0.606434+0.03660110129*T
505 M=0.374897+0.03629164709*T
510 F=0.259091+0.03674819520*T
515 D=0.827362+0.03386319198*T
520 N=0.347343-0.00014709391*T
525 G=0.993126+0.00273777850*T
530 L=L-INT(L): M=M-INT(M)
535 F=F-INT(F): D=D-INT(D)
540 N=N-INT(N): G=G-INT(G)
545 L=L*P2: M=M*P2: F=F*P2
550 D=D*P2: N=N*P2: G=G*P2
555 V=0.39558*SIN(F+N)
560 V=V+0.08200*SIN(F)
565 V=V+0.03257*SIN(M-F-N)
570 V=V+0.01092*SIN(M+F+N)
575 V=V+0.00666*SIN(M-F)
580 V=V-0.00644*SIN(M+F-2*D+N)
585 V=V-0.00331*SIN(F-2*D+N)
590 V=V-0.00304*SIN(F-2*D)
595 V=V-0.00240*SIN(M-F-2*D-N)
600 V=V+0.00226*SIN(M+F)
605 V=V-0.00108*SIN(M+F-2*D)
610 V=V-0.00079*SIN(F-N)
615 V=V+0.00078*SIN(F+2*D+N)
620 U=1-0.10828*COS(M)
625 U=U-0.01880*COS(M-2*D)
630 U=U-0.01479*COS(2*D)
635 U=U+0.00181*COS(2*M-2*D)
640 U=U-0.00147*COS(2*M)
645 U=U-0.00105*COS(2*D-G)
650 U=U-0.00075*COS(M-2*D+G)
655 W=0.10478*SIN(M)
660 W=W-0.04105*SIN(2*F+2*N)
665 W=W-0.02130*SIN(M-2*D)
670 W=W-0.01779*SIN(2*F+N)
675 W=W+0.01774*SIN(N)
680 W=W+0.00987*SIN(2*D)
685 W=W-0.00338*SIN(M-2*F-2*N)
690 W=W-0.00309*SIN(G)
695 W=W-0.00190*SIN(2*F)
700 W=W-0.00144*SIN(M+N)
705 W=W-0.00144*SIN(M-2*F-N)
710 W=W-0.00113*SIN(M+2*F+2*N)
715 W=W-0.00094*SIN(M-2*D+G)
720 W=W-0.00092*SIN(2*M-2*D)
725 REM
730 REM COMPUTE RA, DEC, DIST
735 S=W/SQR(U-V*V)
740 A5=L+ATN(S/SQR(1-S*S))
745 S=V/SQR(U):D7=ATN(S/SQR(1-S*S))
750 R5=60.40974*SQR(U)
755 RETURN
760 REM CALENDAR --> JD
761 '' Get current Date
762 nd$=DATE$
763 '' DATE$ - returns the current day as string "DD/MM/YYYY"
764 M=MID$(nd$,4,2)+0
765 Y=MID$(nd$,7,4)+0
766 Day=MID$(nd$,1,2)+0
767 if mode=1 then goto 770
768 INPUT "Y,M,D ";Y,Mo,D
770 G=1: IF Y<1582 THEN G=0
775 D1=INT(D): F=D-D1-0.5
780 J=-INT(7*(INT((Mo+9)/12)+Y)/4)
785 IF G=0 THEN 805
790 S=SGN(Mo-9): A=ABS(Mo-9)
795 J3=INT(Y+S*INT(A/7))
800 J3=-INT((INT(J3/100)+1)*3/4)
805 J=J+INT(275*Mo/9)+D1+G*J3
810 J=J+1721027+2*G+367*Y
815 IF F>=0 THEN 825
820 F=F+1: J=J-1
825 RETURN
900 REM ***************************
910 REM THIS PROGRAM COMPUTES THE
920 REM TIMES OF MOONRISE AND MOON-
930 REM SET ANYWHERE IN THE WORLD.
940 REM FROM SKY & TELESCOPE, JULY,
950 REM 1989, PAGE 78.
960 REM ***************************
'