home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Antennas
/
Antennas_CD-ROM_Walnut_Creek_September_1996.iso
/
rf
/
minimuf
/
muf.bas
< prev
next >
Wrap
BASIC Source File
|
1996-06-30
|
7KB
|
216 lines
1 REM MININUF 3.5 FROM NOSC TO KE6UY TO H4UH TO W4MB 15 OCT 87
10 ON ERROR GOTO 5000
18 H$ = "****************************************"
19 QC = 0: QD = 0: OG = O: G = 0
20 DIM M$(37), A$(94), M(12), H(40), L2(360), W2(360)
21 DATA 31,28,31,30,31,30,31,31,30,31,30,31
22 FOR X = 1 TO 12: READ M(X): NEXT X
23 M$ = "JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
24 PRINT : PRINT
25 PRINT "MINIMUF 3.5 PROPAGATION PREDICTION"
26 PRINT " INPUT 1-4 FOR TYPE OF RUN WANTED"
27 PRINT " W4MB QTH ANOTHER QTH"
28 PRINT " 1-360 DEGREE AT AN HOUR 3-360 DEGREE AT AN HOUR"
29 PRINT " 2-W4MB TO A POINT, 24 HOUR 4- THE QTH TO A POINT, 24 HOUR"
31 INPUT I$: IF I$ < "1" OR I$ > "4" THEN 31
32 IF I$ = "2" THEN QC = 1
33 IF I$ = "4" THEN QC = 1
34 IF I$ > "2" THEN INPUT "ENTER OTHER QTH LAT (+/-90), LONG (+/-360) "; L1, W1: GOTO 50
43 L1 = 29.1583: W1 = 81.025: QD = 1' IS W4MB
50 PI = 3.14159265#
60 R0 = PI / 180
70 P1 = 2 * PI
80 R1 = 180 / PI
90 P0 = PI / 2
100 IF QC = 0 THEN 200
110 INPUT "ENTER THE POINT LAT (+/-90), LONG (+/-360) "; L2, W2
120 IF L2 < -90 OR L2 > 90 THEN 110
130 IF W2 < -360 OR W2 > 360 THEN 10
140 GOSUB 2640
200 INPUT "ENTER DAY (1-31), MONTH (1-12)"; D6, MON
210 IF MON < 1 OR MON > 12 THEN PRINT "INVALID MONTH": GOTO 200
220 IF M(MON) - D6 < 0 THEN PRINT "INVALID DAY": GOTO 200
230 J$ = MID$(M$, 3 * MON - 2, 3)
240 INPUT " ENTER SOLAR FLUX NUMBER"; SF
250 IF SF < 70 THEN PRINT "DO NOT USE SOLAR FLUX LESS THAN 70": GOTO 240
260 S9 = (SQR(.52998 - .00356 * (63.75 - SF)) - .728) / .00178
270 S9 = INT(S9)
280 IF QC = 1 THEN 400
300 INPUT "ENTER DISTANCE TO FIRST HOP IN KM"; K
310 NA = K / 1.852
320 INPUT "ENTER GMT OF PREDICTION, 0-23 "; TG
330 IF TG < 0 OR TG > 23 THEN 330
400 PRINT H$
410 PRINT " DATE IS; DAY="; D6; ", MONTH="; J$
420 PRINT " SUNSPOT N0.="; S9; " SOLAR FLUX="; SF
450 PRINT " QTH LOCATION IS ";
460 PRINT " LATITUDE="; L1; ", LONGITUDE="; W1
490 IF QC = 1 THEN 600
500 GOTO 800
600 PRINT
610 PRINT " POINT LAT="; L2; " DEG"; "; LONG="; W2; "DEG"; "; PATH LENGTH="; DX; " KM"
620 PRINT , "HOUR", "MUF", "HOUR", "MUF"
630 FOR T5 = 0 TO 23
640 GOSUB 1140
650 J9 = J9 * 10
660 J9 = INT(J9)
670 J9 = J9 / 10
675 IF T5 / 2 - INT(T5 / 2) = 0 THEN PRINT , T5, J9; : GOTO 690
680 PRINT , T5, J9
690 NEXT T5
700 GOTO 3000
800 IF G = 1 THEN 1000
810 FOR H = 0 TO 350 STEP 10
820 V = SIN((NA / 60) * R0) * COS(L1 * R0) * COS(H * R0) + COS((NA / 60) / R0) * SIN(L1 * R0)
830 L2 = ATN(V / SQR(1 - V * V)) * R1
840 L2(H) = L2
850 O = (COS((NA / 60) * R0) - (SIN(L1 * R0) * SIN(L2(H) * R0))) / (COS(L1 * R0) * COS(L2(H) * R0))
860 IF ABS(O) >= 1 - 1E-09 THEN O = .999999
870 W2 = (P0 - ATN(O / SQR(1 - O * O))) * R1
880 IF H <= 180 THEN W2 = -(W2 - W1)
890 IF H > 180 THEN W2 = W2 + W1
900 W2(H) = W2
910 NEXT H
920 G0 = 1
1000 IF QC = 1 THEN GOSUB 2640
1010 PRINT " FIRST HOP LENGTH= "; K; " KM"
1030 PRINT " FOR TIME= "; TG; " HOURS GMT"
1040 PRINT , "BEARING", "MUF", "BEARING", "MUF"
1050 FOR H = 0 TO 350 STEP 10
1060 T5 = TG
1070 GOSUB 1140
1080 J9 = J9 * 10
1090 J9 = INT(J9)
1100 J9 = J9 / 10
1110 IF H / 20 - INT(H / 20) = 0 THEN PRINT , H, J9; : GOTO 1130
1120 PRINT , H, J9
1130 NEXT H
1135 GOTO 3000
1139 REM MINIMUF 3.5
1140 L1 = L1 * R0: W1 = W1 * R0
1145 IF QC = 1 THEN K7 = SIN(L1) * SIN(L2 * R0) + COS(L1) * COS(L2 * R0) * COS(W2 * R0 - W1): GOTO 1160
1150 K7 = SIN(L1) * SIN(L2(H) * R0) + COS(L1) * COS(L2(H) * R0) * COS(W2(H) * R0 - W1)
1160 IF K7 >= -1 THEN 1190
1170 K7 = -1
1180 GOTO 1210
1190 IF K7 <= 1 THEN 1210
1200 K7 = 1
1210 G1 = -ATN(K7 / SQR(-K7 * K7 + 1)) + P0
1220 K6 = 1.59 * G1
1230 IF K6 >= 1 THEN 1250
1240 K6 = 1
1250 K5 = 1 / K6
1260 J9 = 100
1270 FOR K1 = 1 / (2 * K6) TO 1 - 1 / (2 * K6) STEP .9999 - 1 / K6
1280 IF K5 = 1 THEN 1295
1290 K5 = .5
1295 IF QC = 1 THEN P = SIN(L2 * R0): GOTO 1305
1300 P = SIN(L2(H) * R0)
1305 IF QC = 1 THEN Q = COS(L2 * R0): GOTO 1320
1310 Q = COS(L2(H) * R0)
1320 A = (SIN(L1) - P * COS(G1)) / (Q * SIN(G1))
1330 B = G1 * K1
1340 C = P * COS(B) + Q * SIN(B) * A
1350 D = (COS(B) - C * P) / (Q * SQR(1 - C * C))
1360 IF D >= -1 THEN 1390
1370 D = -1
1380 GOTO 1410
1390 IF D <= 1 THEN 1410
1400 D = 1
1410 D = -ATN(D / SQR(-D * D + 1)) + P0
1415 IF QC = 1 THEN W0 = W2 * R0 + SGN(SIN(W1 - W2 * R0)) * D: GOTO 1430
1420 W0 = W2(H) * R0 + SGN(SIN(W1 - W2(H) * R0)) * D
1430 IF W0 >= 0 THEN 1450
1440 W0 = W0 + P1
1450 IF W0 < P1 THEN 1470
1460 W0 = W0 - P1
1470 IF C >= -1 THEN 1500
1480 C = -1
1490 GOTO 1520
1500 IF C <= 1 THEN 1520
1510 C = 1
1520 L0 = P0 - (-ATN(C / SQR(-C * C + 1)) + P0)
1530 Y1 = .0172 * (10 + (MON - 1) * 30.4 + D6)
1540 Y2 = .409 * COS(Y1)
1550 K8 = 3.82 * W0 + 12 + .13 * (SIN(Y1) + 1.2 * SIN(2 * Y1))
1560 K8 = K8 - 12 * (1 + SGN(K8 - 24)) * SGN(ABS(K8 - 24))
1570 IF COS(L0 + Y2) > -.26 THEN 1660
1580 K9 = 0
1590 G0 = 0
1600 M9 = 2.5 * G1 * K5
1610 IF M9 <= P0 THEN 1630
1620 M9 = P0
1630 M9 = SIN(M9)
1640 M9 = 1 + 2.5 * M9 * SQR(M9)
1650 GOTO 1910
1660 K9 = (-.26 + SIN(Y2) * SIN(L0)) / (COS(Y2) * COS(L0) + .001)
1670 K9 = 12 - ATN(K9 / SQR(ABS(1 - K9 * K9))) * 7.639437
1680 T = K8 - K9 / 2 + 12 * (1 - SGN(K8 - K9 / 2)) * SGN(ABS(K8 - K9 / 2))
1690 T4 = K8 + K9 / 2 - 12 * (1 + SGN(K8 + K9 / 2 - 24)) * SGN(ABS(K8 + K9 / 2 - 24))
1700 C0 = ABS(COS(L0 + Y2))
1710 T9 = 9.7 * C0 ^ 9.6
1720 IF T9 > .1 THEN 1740
1730 T9 = .1
1740 M9 = 2.5 * G1 * K5
1750 IF M9 <= P0 THEN 1770
1760 M9 = P0
1770 M9 = SIN(M9)
1780 M9 = 1 + 2.5 * M9 * SQR(M9)
1790 IF T4 < T THEN 1820
1800 IF (T5 - T) * (T4 - T5) > 0 THEN 1830
1810 GOTO 1960
1820 IF (T5 - T4) * (T - T5) > 0 THEN 1960
1830 T6 = T5 + 12 * (1 + SGN(T - T5)) * SGN(ABS(T - T5))
1840 G9 = PI * (T6 - T) / K9
1850 G8 = PI * T9 / K9
1860 U = (T - T6) / T9
1870 G0 = C0 * (SIN(G9) + G8 * (EXP(U) - COS(G9))) / (1 + G8 * G8)
1880 G7 = C0 * (G8 * (EXP(-K9 / T9) + 1)) * EXP((K9 - 24) / 2) / (1 + G8 * G8)
1890 IF G0 >= G7 THEN 1910
1900 G0 = G7
1910 G2 = (1 + S9 / 250) * M9 * SQR(6 + 58 * SQR(G0))
1920 G2 = G2 * (1 - .1 * EXP((K9 - 24) / 3))
1930 G2 = G2 * (1 + (1 - SGN(L1) * SGN(L2)) * .1)
1940 G2 = G2 * (1 - .1 * (1 + SGN(ABS(SIN(L0)) - COS(L0))))
1950 GOTO 2020
1960 T6 = T5 + 12 * (1 + SGN(T4 - T5)) * SGN(ABS(T4 - T5))
1970 G8 = PI * T9 / K9
1980 U = (T4 - T6) / 2
1990 U1 = -K9 / T9
2000 G0 = C0 * (G8 * (EXP(U1) + 1)) * EXP(U) / (1 + G8 * G8)
2010 GOTO 1910
2020 IF G2 > J9 THEN 2040
2030 J9 = G2
2040 NEXT K1
2050 J9 = .93 * J9
2060 G = 1: L1 = L1 * R1: W1 = W1 * R1
2070 RETURN
2640 DY = SIN(L1 * R0) * SIN(L2 * R0) + COS(L1 * R0) * COS(L2 * R0) * COS(W1 * R0 - W2 * R0)
2650 DX = 60 * (P0 - ATN(DY / SQR(1 - DY * DY))) * 57.296
2670 DX = DX * 1.852
2680 DX = INT(DX)
2685 RETURN
3000 PRINT "PRESS Q=QUIT, R=RERUN, A=ANOTHER CONDITION"
3010 INPUT AN$
3030 IF AN$ = "Q" THEN STOP
3040 IF AN$ = "R" THEN OG = 1: G = 0: PRINT H$: GOTO 200
3050 IF AN$ = "A" THEN OG = 1: G = 0: QC = 0: GOTO 25
5000 PRINT "ERROR # "; ERR; " AT LINE "; ERL: STOP