home *** CD-ROM | disk | FTP | other *** search
/ Antennas / Antennas_CD-ROM_Walnut_Creek_September_1996.iso / rf / minimuf / muf.bas < prev    next >
BASIC Source File  |  1996-06-30  |  7KB  |  216 lines

  1. 1 REM MININUF 3.5 FROM NOSC TO KE6UY TO H4UH TO W4MB 15 OCT 87
  2. 10 ON ERROR GOTO 5000
  3. 18 H$ = "****************************************"
  4. 19 QC = 0: QD = 0: OG = O: G = 0
  5. 20 DIM M$(37), A$(94), M(12), H(40), L2(360), W2(360)
  6. 21 DATA 31,28,31,30,31,30,31,31,30,31,30,31
  7. 22 FOR X = 1 TO 12: READ M(X): NEXT X
  8. 23 M$ = "JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
  9. 24 PRINT : PRINT
  10. 25 PRINT "MINIMUF 3.5 PROPAGATION PREDICTION"
  11. 26 PRINT "   INPUT 1-4 FOR TYPE OF RUN WANTED"
  12. 27 PRINT "           W4MB QTH                           ANOTHER QTH"
  13. 28 PRINT "      1-360 DEGREE AT AN HOUR            3-360 DEGREE AT AN HOUR"
  14. 29 PRINT "      2-W4MB TO A POINT, 24 HOUR         4- THE QTH TO A POINT, 24 HOUR"
  15. 31 INPUT I$: IF I$ < "1" OR I$ > "4" THEN 31
  16. 32 IF I$ = "2" THEN QC = 1
  17. 33 IF I$ = "4" THEN QC = 1
  18. 34 IF I$ > "2" THEN INPUT "ENTER OTHER QTH LAT (+/-90), LONG (+/-360) "; L1, W1: GOTO 50
  19. 43 L1 = 29.1583: W1 = 81.025: QD = 1' IS W4MB
  20.  
  21. 50 PI = 3.14159265#
  22. 60 R0 = PI / 180
  23. 70 P1 = 2 * PI
  24. 80 R1 = 180 / PI
  25. 90 P0 = PI / 2
  26. 100 IF QC = 0 THEN 200
  27. 110 INPUT "ENTER  THE POINT LAT (+/-90), LONG (+/-360)  "; L2, W2
  28. 120 IF L2 < -90 OR L2 > 90 THEN 110
  29. 130 IF W2 < -360 OR W2 > 360 THEN 10
  30. 140 GOSUB 2640
  31.  
  32. 200 INPUT "ENTER DAY (1-31), MONTH (1-12)"; D6, MON
  33. 210 IF MON < 1 OR MON > 12 THEN PRINT "INVALID MONTH": GOTO 200
  34. 220 IF M(MON) - D6 < 0 THEN PRINT "INVALID DAY": GOTO 200
  35. 230 J$ = MID$(M$, 3 * MON - 2, 3)
  36. 240 INPUT " ENTER SOLAR FLUX NUMBER"; SF
  37. 250 IF SF < 70 THEN PRINT "DO NOT USE SOLAR FLUX LESS THAN 70": GOTO 240
  38. 260 S9 = (SQR(.52998 - .00356 * (63.75 - SF)) - .728) / .00178
  39. 270 S9 = INT(S9)
  40. 280 IF QC = 1 THEN 400
  41.  
  42. 300 INPUT "ENTER DISTANCE TO FIRST HOP IN KM"; K
  43. 310 NA = K / 1.852
  44. 320 INPUT "ENTER GMT OF PREDICTION, 0-23 "; TG
  45. 330 IF TG < 0 OR TG > 23 THEN 330
  46.  
  47. 400 PRINT H$
  48. 410 PRINT " DATE IS;   DAY="; D6; ",   MONTH="; J$
  49. 420 PRINT "  SUNSPOT N0.="; S9; "  SOLAR FLUX="; SF
  50. 450 PRINT "   QTH LOCATION IS ";
  51. 460 PRINT "    LATITUDE="; L1; ",   LONGITUDE="; W1
  52. 490 IF QC = 1 THEN 600
  53. 500 GOTO 800
  54.  
  55. 600 PRINT
  56. 610 PRINT "     POINT LAT="; L2; " DEG"; "; LONG="; W2; "DEG"; "; PATH LENGTH="; DX; " KM"
  57. 620 PRINT , "HOUR", "MUF", "HOUR", "MUF"
  58.  
  59. 630  FOR T5 = 0 TO 23
  60. 640 GOSUB 1140
  61. 650 J9 = J9 * 10
  62. 660 J9 = INT(J9)
  63. 670 J9 = J9 / 10
  64. 675 IF T5 / 2 - INT(T5 / 2) = 0 THEN PRINT , T5, J9; : GOTO 690
  65. 680 PRINT , T5, J9
  66. 690 NEXT T5
  67. 700 GOTO 3000
  68.      
  69. 800 IF G = 1 THEN 1000
  70. 810 FOR H = 0 TO 350 STEP 10
  71. 820 V = SIN((NA / 60) * R0) * COS(L1 * R0) * COS(H * R0) + COS((NA / 60) / R0) * SIN(L1 * R0)
  72. 830 L2 = ATN(V / SQR(1 - V * V)) * R1
  73. 840 L2(H) = L2
  74. 850 O = (COS((NA / 60) * R0) - (SIN(L1 * R0) * SIN(L2(H) * R0))) / (COS(L1 * R0) * COS(L2(H) * R0))
  75. 860 IF ABS(O) >= 1 - 1E-09 THEN O = .999999
  76. 870 W2 = (P0 - ATN(O / SQR(1 - O * O))) * R1
  77. 880 IF H <= 180 THEN W2 = -(W2 - W1)
  78. 890 IF H > 180 THEN W2 = W2 + W1
  79. 900 W2(H) = W2
  80. 910 NEXT H
  81. 920 G0 = 1
  82. 1000 IF QC = 1 THEN GOSUB 2640
  83. 1010 PRINT "     FIRST HOP LENGTH= "; K; " KM"
  84.  
  85. 1030 PRINT "      FOR TIME= "; TG; " HOURS GMT"
  86. 1040 PRINT , "BEARING", "MUF", "BEARING", "MUF"
  87. 1050 FOR H = 0 TO 350 STEP 10
  88. 1060 T5 = TG
  89. 1070 GOSUB 1140
  90. 1080 J9 = J9 * 10
  91. 1090 J9 = INT(J9)
  92. 1100 J9 = J9 / 10
  93. 1110 IF H / 20 - INT(H / 20) = 0 THEN PRINT , H, J9; : GOTO 1130
  94. 1120 PRINT , H, J9
  95.  
  96. 1130 NEXT H
  97. 1135 GOTO 3000
  98.  
  99. 1139 REM MINIMUF 3.5
  100. 1140 L1 = L1 * R0: W1 = W1 * R0
  101. 1145 IF QC = 1 THEN K7 = SIN(L1) * SIN(L2 * R0) + COS(L1) * COS(L2 * R0) * COS(W2 * R0 - W1): GOTO 1160
  102. 1150 K7 = SIN(L1) * SIN(L2(H) * R0) + COS(L1) * COS(L2(H) * R0) * COS(W2(H) * R0 - W1)
  103. 1160 IF K7 >= -1 THEN 1190
  104. 1170 K7 = -1
  105. 1180 GOTO 1210
  106. 1190 IF K7 <= 1 THEN 1210
  107. 1200 K7 = 1
  108. 1210 G1 = -ATN(K7 / SQR(-K7 * K7 + 1)) + P0
  109. 1220 K6 = 1.59 * G1
  110. 1230 IF K6 >= 1 THEN 1250
  111. 1240 K6 = 1
  112. 1250 K5 = 1 / K6
  113. 1260 J9 = 100
  114. 1270 FOR K1 = 1 / (2 * K6) TO 1 - 1 / (2 * K6) STEP .9999 - 1 / K6
  115. 1280 IF K5 = 1 THEN 1295
  116. 1290 K5 = .5
  117. 1295 IF QC = 1 THEN P = SIN(L2 * R0): GOTO 1305
  118. 1300 P = SIN(L2(H) * R0)
  119. 1305 IF QC = 1 THEN Q = COS(L2 * R0): GOTO 1320
  120. 1310 Q = COS(L2(H) * R0)
  121. 1320 A = (SIN(L1) - P * COS(G1)) / (Q * SIN(G1))
  122. 1330 B = G1 * K1
  123. 1340 C = P * COS(B) + Q * SIN(B) * A
  124. 1350 D = (COS(B) - C * P) / (Q * SQR(1 - C * C))
  125. 1360 IF D >= -1 THEN 1390
  126. 1370 D = -1
  127. 1380 GOTO 1410
  128. 1390 IF D <= 1 THEN 1410
  129. 1400 D = 1
  130. 1410 D = -ATN(D / SQR(-D * D + 1)) + P0
  131. 1415 IF QC = 1 THEN W0 = W2 * R0 + SGN(SIN(W1 - W2 * R0)) * D: GOTO 1430
  132. 1420 W0 = W2(H) * R0 + SGN(SIN(W1 - W2(H) * R0)) * D
  133. 1430 IF W0 >= 0 THEN 1450
  134. 1440 W0 = W0 + P1
  135. 1450 IF W0 < P1 THEN 1470
  136. 1460 W0 = W0 - P1
  137. 1470 IF C >= -1 THEN 1500
  138. 1480 C = -1
  139. 1490 GOTO 1520
  140. 1500 IF C <= 1 THEN 1520
  141. 1510 C = 1
  142. 1520 L0 = P0 - (-ATN(C / SQR(-C * C + 1)) + P0)
  143. 1530 Y1 = .0172 * (10 + (MON - 1) * 30.4 + D6)
  144. 1540 Y2 = .409 * COS(Y1)
  145. 1550 K8 = 3.82 * W0 + 12 + .13 * (SIN(Y1) + 1.2 * SIN(2 * Y1))
  146. 1560 K8 = K8 - 12 * (1 + SGN(K8 - 24)) * SGN(ABS(K8 - 24))
  147. 1570 IF COS(L0 + Y2) > -.26 THEN 1660
  148. 1580 K9 = 0
  149. 1590 G0 = 0
  150. 1600 M9 = 2.5 * G1 * K5
  151. 1610 IF M9 <= P0 THEN 1630
  152. 1620 M9 = P0
  153. 1630 M9 = SIN(M9)
  154. 1640 M9 = 1 + 2.5 * M9 * SQR(M9)
  155. 1650 GOTO 1910
  156. 1660 K9 = (-.26 + SIN(Y2) * SIN(L0)) / (COS(Y2) * COS(L0) + .001)
  157. 1670 K9 = 12 - ATN(K9 / SQR(ABS(1 - K9 * K9))) * 7.639437
  158. 1680 T = K8 - K9 / 2 + 12 * (1 - SGN(K8 - K9 / 2)) * SGN(ABS(K8 - K9 / 2))
  159. 1690 T4 = K8 + K9 / 2 - 12 * (1 + SGN(K8 + K9 / 2 - 24)) * SGN(ABS(K8 + K9 / 2 - 24))
  160. 1700 C0 = ABS(COS(L0 + Y2))
  161. 1710 T9 = 9.7 * C0 ^ 9.6
  162. 1720 IF T9 > .1 THEN 1740
  163. 1730 T9 = .1
  164. 1740 M9 = 2.5 * G1 * K5
  165. 1750 IF M9 <= P0 THEN 1770
  166. 1760 M9 = P0
  167. 1770 M9 = SIN(M9)
  168. 1780 M9 = 1 + 2.5 * M9 * SQR(M9)
  169. 1790 IF T4 < T THEN 1820
  170. 1800 IF (T5 - T) * (T4 - T5) > 0 THEN 1830
  171. 1810 GOTO 1960
  172. 1820 IF (T5 - T4) * (T - T5) > 0 THEN 1960
  173. 1830 T6 = T5 + 12 * (1 + SGN(T - T5)) * SGN(ABS(T - T5))
  174. 1840 G9 = PI * (T6 - T) / K9
  175. 1850 G8 = PI * T9 / K9
  176. 1860 U = (T - T6) / T9
  177. 1870 G0 = C0 * (SIN(G9) + G8 * (EXP(U) - COS(G9))) / (1 + G8 * G8)
  178. 1880 G7 = C0 * (G8 * (EXP(-K9 / T9) + 1)) * EXP((K9 - 24) / 2) / (1 + G8 * G8)
  179. 1890 IF G0 >= G7 THEN 1910
  180. 1900 G0 = G7
  181. 1910 G2 = (1 + S9 / 250) * M9 * SQR(6 + 58 * SQR(G0))
  182. 1920 G2 = G2 * (1 - .1 * EXP((K9 - 24) / 3))
  183. 1930 G2 = G2 * (1 + (1 - SGN(L1) * SGN(L2)) * .1)
  184. 1940 G2 = G2 * (1 - .1 * (1 + SGN(ABS(SIN(L0)) - COS(L0))))
  185. 1950 GOTO 2020
  186. 1960 T6 = T5 + 12 * (1 + SGN(T4 - T5)) * SGN(ABS(T4 - T5))
  187. 1970 G8 = PI * T9 / K9
  188. 1980 U = (T4 - T6) / 2
  189. 1990 U1 = -K9 / T9
  190. 2000 G0 = C0 * (G8 * (EXP(U1) + 1)) * EXP(U) / (1 + G8 * G8)
  191. 2010 GOTO 1910
  192. 2020 IF G2 > J9 THEN 2040
  193. 2030 J9 = G2
  194. 2040 NEXT K1
  195. 2050 J9 = .93 * J9
  196. 2060 G = 1: L1 = L1 * R1: W1 = W1 * R1
  197. 2070 RETURN
  198. 2640 DY = SIN(L1 * R0) * SIN(L2 * R0) + COS(L1 * R0) * COS(L2 * R0) * COS(W1 * R0 - W2 * R0)
  199. 2650 DX = 60 * (P0 - ATN(DY / SQR(1 - DY * DY))) * 57.296
  200. 2670 DX = DX * 1.852
  201. 2680 DX = INT(DX)
  202. 2685 RETURN
  203. 3000 PRINT "PRESS  Q=QUIT, R=RERUN, A=ANOTHER CONDITION"
  204. 3010 INPUT AN$
  205. 3030 IF AN$ = "Q" THEN STOP
  206. 3040 IF AN$ = "R" THEN OG = 1: G = 0: PRINT H$: GOTO 200
  207. 3050 IF AN$ = "A" THEN OG = 1: G = 0: QC = 0: GOTO 25
  208. 5000 PRINT "ERROR # "; ERR; " AT LINE  "; ERL: STOP
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.