home *** CD-ROM | disk | FTP | other *** search
/ Antennas / Antennas_CD-ROM_Walnut_Creek_September_1996.iso / mininec / mn3basic / mininec3.bas < prev    next >
BASIC Source File  |  1996-06-30  |  44KB  |  1,608 lines

  1. 1 REM ****** MININEC(3) **********  NOSC CODE 822 (JCL) 4-86
  2. 2 DEFINT I,J,K,N
  3. 3 DIM K!(6,2),Q(14)
  4. 4 REM ----- MAXIMUM NUMBER OF SEGMENTS (PULSES + 2 * WIRES) = 150
  5. 5 MS=150
  6. 6 DIM X(150),Y(150),Z(150)
  7. 7 REM ----- MAXIMUM NUMBER OF WIRES = 50
  8. 8 MW=50
  9. 9 DIM A(50),CA(50),CB(50),CG(50),J1(50),J2(50,2),N(50,2),S(50)
  10. 10 REM ----- MAXIMUM NUMBER OF LOADS = 11
  11. 11 ML=11
  12. 12 REM ----- MAXIMUM ORDER OF S-PARAMETER LOADS = 8
  13. 13 MA=8
  14. 14 DIM LA(2,11,8),LP(11),LS(11)
  15. 15 REM ----- MAXIMUM NUMBER OF MEDIA = 6
  16. 16 MM=6
  17. 17 REM ----- H MUST BE DIMENSIONED AT LEAST 6
  18. 18 DIM H(6),T(6),U(6),V(6),Z1(6),Z2(6)
  19. 19 REM ----- MAXIMUM NUMBER OF PULSES = 50 
  20. 20 MP=50 
  21. 21 DIM C%(50,2),CI(50),CR(50),P(50),W%(50)
  22. 22 DIM ZR(50,50),ZI(50,50)
  23. 23 REM ---- ARRAYS E,L & M DIMENSIONED TO MW+MP=100
  24. 24 DIM E(100),L(100),M(100)
  25. 25 COLOR 2,0
  26. 26 GOTO 1487
  27. 27 REM ********** KERNEL EVALUATION OF INTEGRALS I2 & I3 **********
  28. 28 IF K<0 THEN 33
  29. 29 X3=X2+T*(V1-X2)
  30. 30 Y3=Y2+T*(V2-Y2)
  31. 31 Z3=Z2+T*(V3-Z2)
  32. 32 GOTO 36
  33. 33 X3=V1+T*(X2-V1)
  34. 34 Y3=V2+T*(Y2-V2)
  35. 35 Z3=V3+T*(Z2-V3)
  36. 36 D3=X3*X3+Y3*Y3+Z3*Z3
  37. 37 REM ----- MOD FOR SMALL RADIUS TO WAVELENGTH RATIO
  38. 38 IF A(P4)<=SRM THEN D=SQR(D3):GOTO 49
  39. 39 D=D3+A2
  40. 40 IF D>0 THEN D=SQR(D)
  41. 41 REM ----- CRITERIA FOR USING REDUCED KERNEL
  42. 42 IF I6!=0 THEN 49
  43. 43 REM ----- EXACT KERNEL CALCULATION WITH ELLIPTIC INTEGRAL
  44. 44 B=D3/(D3+4*A2)
  45. 45 W0=C0+B*(C1+B*(C2+B*(C3+B*C4)))
  46. 46 W1=C5+B*(C6+B*(C7+B*(C8+B*C9)))
  47. 47 V0=(W0-W1*LOG(B))*SQR(1-B)
  48. 48 T3=T3+(V0+LOG(D3/(64*A2))/2)/P/A(P4)-1/D
  49. 49 B1=D*W
  50. 50 REM ----- EXP(-J*K*R)/R
  51. 51 T3=T3+COS(B1)/D
  52. 52 T4=T4-SIN(B1)/D
  53. 53 RETURN
  54. 54 REM ***** PSI(P1,P2,P3) = T1 + J * T2 **********
  55. 55 REM ----- ENTRIES REQUIRED FOR NEAR FIELD CALCULATION
  56. 56 X1=X0+P1*T5/2
  57. 57 Y1=Y0+P1*T6/2
  58. 58 Z1=Z0+P1*T7/2
  59. 59 X2=X1-X(P2)
  60. 60 Y2=Y1-Y(P2)
  61. 61 Z2=Z1-K*Z(P2)
  62. 62 V1=X1-X(P3)
  63. 63 V2=Y1-Y(P3)
  64. 64 V3=Z1-K*Z(P3)
  65. 65 GOTO 135
  66. 66 I4=INT(P2)
  67. 67 I5=I4+1
  68. 68 X2=X0-(X(I4)+X(I5))/2
  69. 69 Y2=Y0-(Y(I4)+Y(I5))/2
  70. 70 Z2=Z0-K*(Z(I4)+Z(I5))/2
  71. 71 V1=X0-X(P3)
  72. 72 V2=Y0-Y(P3)
  73. 73 V3=Z0-K*Z(P3)
  74. 74 GOTO 135
  75. 75 X2=X0-X(P2)
  76. 76 Y2=Y0-Y(P2)
  77. 77 Z2=Z0-K*Z(P2)
  78. 78 I4=INT(P3)
  79. 79 I5=I4+1
  80. 80 V1=X0-(X(I4)+X(I5))/2
  81. 81 V2=Y0-(Y(I4)+Y(I5))/2
  82. 82 V3=Z0-K*(Z(I4)+Z(I5))/2
  83. 83 GOTO 135
  84. 84 REM ----- ENTRIES REQUIRED FOR IMPEDANCE MATRIX CALCULATION
  85. 85 REM ----- S(M) GOES IN (X1,Y1,Z1) FOR SCALAR POTENTIAL
  86. 86 REM ----- MOD FOR SMALL RADIUS TO WAVE LENGTH RATIO
  87. 87 FVS=1
  88. 88 IF K<1 THEN 94
  89. 89 IF A(P4)>SRM THEN 94
  90. 90 IF (P3=P2+1 AND P1=(P2+P3)/2) THEN 91 ELSE 94
  91. 91 T1=2*LOG(S(P4)/A(P4))
  92. 92 T2=-W*S(P4)
  93. 93 RETURN
  94. 94 I4=INT(P1)
  95. 95 I5=I4+1
  96. 96 X1=(X(I4)+X(I5))/2
  97. 97 Y1=(Y(I4)+Y(I5))/2
  98. 98 Z1=(Z(I4)+Z(I5))/2
  99. 99 GOTO 113
  100. 100 REM ----- S(M) GOES IN (X1,Y1,Z1) FOR VECTOR POTENTIAL
  101. 101 REM ----- MOD FOR SMALL RADIUS TO WAVE LENGTH RATIO
  102. 102 FVS=0
  103. 103 IF K<1 THEN 109
  104. 104 IF A(P4)>=SRM THEN 109
  105. 105 IF (I=J AND P3=P2+.5) THEN 106 ELSE 109
  106. 106 T1=LOG(S(P4)/A(P4))
  107. 107 T2=-W*S(P4)/2
  108. 108 RETURN
  109. 109 X1=X(P1)
  110. 110 Y1=Y(P1)
  111. 111 Z1=Z(P1)
  112. 112 REM ----- S(U)-S(M) GOES IN (X2,Y2,Z2)
  113. 113 I4=INT(P2)
  114. 114 IF I4=P2 THEN 120
  115. 115 I5=I4+1
  116. 116 X2=(X(I4)+X(I5))/2-X1
  117. 117 Y2=(Y(I4)+Y(I5))/2-Y1
  118. 118 Z2=K*(Z(I4)+Z(I5))/2-Z1
  119. 119 GOTO 124
  120. 120 X2=X(P2)-X1
  121. 121 Y2=Y(P2)-Y1
  122. 122 Z2=K*Z(P2)-Z1
  123. 123 REM ----- S(V)-S(M) GOES IN (V1,V2,V3)
  124. 124 I4=INT(P3)
  125. 125 IF I4=P3 THEN 131
  126. 126 I5=I4+1
  127. 127 V1=(X(I4)+X(I5))/2-X1
  128. 128 V2=(Y(I4)+Y(I5))/2-Y1
  129. 129 V3=K*(Z(I4)+Z(I5))/2-Z1
  130. 130 GOTO 135
  131. 131 V1=X(P3)-X1
  132. 132 V2=Y(P3)-Y1
  133. 133 V3=K*Z(P3)-Z1
  134. 134 REM ----- MAGNITUDE OF S(U) - S(M)
  135. 135 D0=X2*X2+Y2*Y2+Z2*Z2
  136. 136 REM ----- MAGNITUDE OF S(V) - S(M)
  137. 137 IF D0>0 THEN D0=SQR(D0)
  138. 138 D3=V1*V1+V2*V2+V3*V3
  139. 139 IF D3>0 THEN D3=SQR(D3)
  140. 140 REM ----- SQUARE OF WIRE RADIUS
  141. 141 A2=A(P4)*A(P4)
  142. 142 REM ----- MAGNITUDE OF S(V) - S(U)
  143. 143 S4=(P3-P2)*S(P4)
  144. 144 REM ----- ORDER OF INTEGRATION
  145. 145 REM ----- LTH ORDER GAUSSIAN QUADRATURE
  146. 146 T1=0
  147. 147 T2=0
  148. 148 I6!=0
  149. 149 F2=1
  150. 150 L=7
  151. 151 T=(D0+D3)/S(P4)
  152. 152 REM ----- CRITERIA FOR EXACT KERNEL
  153. 153 IF T>1.1 THEN 165
  154. 154 IF C$="N" THEN 165
  155. 155 IF J2(W%(I),1)=J2(W%(J),1) THEN 160
  156. 156 IF J2(W%(I),1)=J2(W%(J),2) THEN 160
  157. 157 IF J2(W%(I),2)=J2(W%(J),1) THEN 160
  158. 158 IF J2(W%(I),2)=J2(W%(J),2) THEN 160
  159. 159 GOTO 165
  160. 160 IF A(P4)>SRM THEN 162
  161. 161 IF FVS=1 THEN 91 ELSE 106
  162. 162 F2=2*(P3-P2)
  163. 163 I6!=(1-LOG(S4/F2/8/A(P4)))/P/A(P4)
  164. 164 GOTO 167
  165. 165 IF T>6 THEN L=3
  166. 166 IF T>10 THEN L=1
  167. 167 I5=L+L
  168. 168 T3=0
  169. 169 T4=0
  170. 170 T=(Q(L)+.5)/F2
  171. 171 GOSUB 28
  172. 172 T=(.5-Q(L))/F2
  173. 173 GOSUB 28
  174. 174 L=L+1
  175. 175 T1=T1+Q(L)*T3
  176. 176 T2=T2+Q(L)*T4
  177. 177 L=L+1
  178. 178 IF L<I5 THEN 168
  179. 179 T1=S4*(T1+I6!)
  180. 180 T2=S4*T2
  181. 181 RETURN
  182. 182 REM ********** COMPLEX SQUARE ROOT **********
  183. 183 REM ----- W6+I*W7=SQR(Z6+I*Z7)
  184. 184 T6=SQR((ABS(Z6)+SQR(Z6*Z6+Z7*ZS7))/2)
  185. 185 T7=ABS(Z7)/2/T6
  186. 186 IF Z6<0 THEN 191
  187. 187 W6=T6
  188. 188 W7=T7
  189. 189 IF Z7<0 THEN W7=-T7
  190. 190 RETURN
  191. 191 W6=T7
  192. 192 W7=T6
  193. 193 IF Z7<0 THEN W7=-T6
  194. 194 RETURN
  195. 195 REM ********** IMPEDANCE MATRIX CALCULATION **********
  196. 196 IF FLG=1 THEN 427
  197. 197 IF FLG=2 THEN 476
  198. 198 REM ----- BEGIN MATRIX FILL TIME CALCULATION
  199. 199 OT$=TIME$
  200. 200 Q$="MATRIX FILL  "
  201. 201 PRINT
  202. 202 PRINT "BEGIN ";Q$
  203. 203 REM ----- ZERO IMPEDANCE MATRIX
  204. 204 FOR I=1 TO N
  205. 205 FOR J=1 TO N
  206. 206 ZR(I,J)=0
  207. 207 ZI(I,J)=0
  208. 208 NEXT J
  209. 209 NEXT I
  210. 210 REM ----- COMPUTE ROW I OF MATRIX (OBSERVATION LOOP)
  211. 211 FOR I=1 TO N
  212. 212 I1=ABS(C%(I,1))
  213. 213 I2=ABS(C%(I,2))
  214. 214 F4=SGN(C%(I,1))*S(I1)
  215. 215 F5=SGN(C%(I,2))*S(I2)
  216. 216 REM ----- R(M + 1/2) - R(M - 1/2) HAS COMPONENTS (T5,T6,T7)
  217. 217 T5=F4*CA(I1)+F5*CA(I2)
  218. 218 T6=F4*CB(I1)+F5*CB(I2)
  219. 219 T7=F4*CG(I1)+F5*CG(I2)
  220. 220 IF C%(I,1)=-C%(I,2) THEN T7=S(I1)*(CG(I1)+CG(I2))
  221. 221 REM ----- COMPUTE COLUMN J OF ROW I (SOURCE LOOP)
  222. 222 FOR J=1 TO N
  223. 223 J1=ABS(C%(J,1))
  224. 224 J2=ABS(C%(J,2))
  225. 225 F4=SGN(C%(J,1))
  226. 226 F5=SGN(C%(J,2))
  227. 227 F6=1
  228. 228 F7=1
  229. 229 REM ----- IMAGE LOOP
  230. 230 FOR K=1 TO G STEP -2
  231. 231 IF C%(J,1)<>-C%(J,2) THEN 235
  232. 232 IF K<0 THEN 332
  233. 233 F6=F4
  234. 234 F7=F5
  235. 235 F8=0
  236. 236 IF K<0 THEN 248
  237. 237 REM ----- SET FLAG TO AVOID REDUNANT CALCULATIONS
  238. 238 IF I1<>I2 THEN 246
  239. 239 IF (CA(I1)+CB(I1))=0 THEN 241
  240. 240 IF C%(I,1)<>C%(I,2) THEN 246
  241. 241 IF J1<>J2 THEN 246
  242. 242 IF (CA(J1)+CB(J1))=0 THEN 244
  243. 243 IF C%(J,1)<>C%(J,2) THEN 246
  244. 244 IF I1=J1 THEN F8=1
  245. 245 IF I=J THEN F8=2
  246. 246 IF ZR(I,J)<>0 THEN 317
  247. 247 REM ----- COMPUTE PSI(M,N,N+1/2)
  248. 248 P1=2*W%(I)+I-1
  249. 249 P2=2*W%(J)+J-1
  250. 250 P3=P2+.5
  251. 251 P4=J2
  252. 252 GOSUB 102
  253. 253 U1=F5*T1
  254. 254 U2=F5*T2
  255. 255 REM ----- COMPUTE PSI(M,N-1/2,N)
  256. 256 P3=P2
  257. 257 P2=P2-.5
  258. 258 P4=J1
  259. 259 IF F8<2 THEN GOSUB 102
  260. 260 V1=F4*T1
  261. 261 V2=F4*T2
  262. 262 REM ----- S(N+1/2)*PSI(M,N,N+1/2) + S(N-1/2)*PSI(M,N-1/2,N)
  263. 263 X3=U1*CA(J2)+V1*CA(J1)
  264. 264 Y3=U1*CB(J2)+V1*CB(J1)
  265. 265 Z3=(F7*U1*CG(J2)+F6*V1*CG(J1))*K
  266. 266 REM ----- REAL PART OF VECTOR POTENTIAL CONTRIBUTION
  267. 267 D1=W2*(X3*T5+Y3*T6+Z3*T7)
  268. 268 X3=U2*CA(J2)+V2*CA(J1)
  269. 269 Y3=U2*CB(J2)+V2*CB(J1)
  270. 270 Z3=(F7*U2*CG(J2)+F6*V2*CG(J1))*K
  271. 271 REM ----- IMAGINARY PART OF VECTOR POTENTIAL CONTRIBUTION
  272. 272 D2=W2*(X3*T5+Y3*T6+Z3*T7)
  273. 273 REM ----- COMPUTE PSI(M+1/2,N,N+1)
  274. 274 P1=P1+.5
  275. 275 IF F8=2 THEN P1=P1-1
  276. 276 P2=P3
  277. 277 P3=P3+1
  278. 278 P4=J2
  279. 279 IF F8<>1 THEN 283
  280. 280 U5=F5*U1+T1
  281. 281 U6=F5*U2+T2
  282. 282 GOTO 291
  283. 283 GOSUB 87
  284. 284 IF F8<2 THEN 288
  285. 285 U1=(2*T1-4*U1*F5)/S(J1)
  286. 286 U2=(2*T2-4*U2*F5)/S(J1)
  287. 287 GOTO 314
  288. 288 U5=T1
  289. 289 U6=T2
  290. 290 REM ----- COMPUTE PSI(M-1/2,N,N+1)
  291. 291 P1=P1-1
  292. 292 GOSUB 87
  293. 293 U1=(T1-U5)/S(J2)
  294. 294 U2=(T2-U6)/S(J2)
  295. 295 REM ----- COMPUTE PSI(M+1/2,N-1,N)
  296. 296 P1=P1+1
  297. 297 P3=P2
  298. 298 P2=P2-1
  299. 299 P4=J1
  300. 300 GOSUB 87
  301. 301 U3=T1
  302. 302 U4=T2
  303. 303 REM ----- COMPUTE PSI(M-1/2,N-1,N)
  304. 304 IF F8<1 THEN 308
  305. 305 T1=U5
  306. 306 T2=U6
  307. 307 GOTO 311
  308. 308 P1=P1-1
  309. 309 GOSUB 87
  310. 310 REM ----- GRADIENT OF SCALAR POTENTIAL CONTRIBUTION
  311. 311 U1=U1+(U3-T1)/S(J1)
  312. 312 U2=U2+(U4-T2)/S(J1)
  313. 313 REM ----- SUM INTO IMPEDANCE MATRIX
  314. 314 ZR(I,J)=ZR(I,J)+K*(D1+U1)
  315. 315 ZI(I,J)=ZI(I,J)+K*(D2+U2)
  316. 316 REM ----- AVOID REDUNANT CALCULATIONS
  317. 317 IF J<I THEN 332
  318. 318 IF F8=0 THEN 332
  319. 319 ZR(J,I)=ZR(I,J)
  320. 320 ZI(J,I)=ZI(I,J)
  321. 321 REM ----- SEGMENTS ON SAME WIRE SAME DISTANCE APART HAVE SAME Z
  322. 322 P1=J+1
  323. 323 IF P1>N THEN 332
  324. 324 IF C%(P1,1)<>C%(P1,2) THEN 332
  325. 325 IF C%(P1,2)=C%(J,2) THEN 328
  326. 326 IF C%(P1,2)<>-C%(J,2) THEN 332
  327. 327 IF (CA(J2)+CB(J2))<>0 THEN 332
  328. 328 P2=I+1
  329. 329 IF P2>N THEN 332
  330. 330 ZR(P2,P1)=ZR(I,J)
  331. 331 ZI(P2,P1)=ZI(I,J)
  332. 332 NEXT K
  333. 333 NEXT J
  334. 334 PCT=I/N
  335. 335 GOSUB 1589
  336. 336 NEXT I
  337. 337 REM ----- END MATRIX FILL TIME CALCULATION
  338. 338 T$=TIME$
  339. 339 GOSUB 1579
  340. 340 PRINT #3," "
  341. 341 PRINT #3,"FILL MATRIX  : ";T$
  342. 342 REM ********** ADDITION OF LOADS **********
  343. 343 IF NL=0 THEN 376
  344. 344 F5=2*P*F
  345. 345 FOR I=1 TO NL
  346. 346 IF L$="N" THEN 365
  347. 347 REM ----- S-PARAMETER LOADS
  348. 348 U1=0
  349. 349 U2=0
  350. 350 D1=0
  351. 351 D2=0
  352. 352 S=-1
  353. 353 FOR J=0 TO LS(I) STEP 2
  354. 354 U1=U1+LA(1,I,J)*(S*F5)^J
  355. 355 D1=D1+LA(2,I,J)*(S*F5)^J
  356. 356 L=J+1
  357. 357 U2=U2+LA(1,I,L)*(S*F5)^L
  358. 358 D2=D2+LA(2,I,L)*(S*F5)^L
  359. 359 NEXT J
  360. 360 J=LP(I)
  361. 361 D=D1*D1+D2*D2
  362. 362 LI=(U2*D1-D2*U1)/D
  363. 363 LR=(U1*D1+U2*D2)/D
  364. 364 GOTO 368
  365. 365 LR=LA(1,I,1)
  366. 366 LI=LA(2,I,1)
  367. 367 J=LP(I)
  368. 368 F2=1/M
  369. 369 IF C%(J,1)<>-C%(J,2) THEN 371
  370. 370 IF K<0 THEN F2=2/M
  371. 371 ZR(J,J)=ZR(J,J)+F2*LI
  372. 372 ZI(J,J)=ZI(J,J)-F2*LR
  373. 373 NEXT I
  374. 374 REM ********** IMPEDANCE MATRIX FACTORIZATION **********
  375. 375 REM ----- BEGIN MATRIX FACTOR TIME CALCULATION
  376. 376 OT$=TIME$
  377. 377 Q$="FACTOR MATRIX"
  378. 378 PRINT
  379. 379 PRINT "BEGIN ";Q$;
  380. 380 X=N
  381. 381 PCTN=X*(X-1)*(X+X-1)
  382. 382 FOR K=1 TO N-1
  383. 383 REM ----- SEARCH FOR PIVOT
  384. 384 T=ZR(K,K)*ZR(K,K)+ZI(K,K)*ZI(K,K)
  385. 385 I1=K
  386. 386 FOR I=K+1 TO N
  387. 387 T1=ZR(I,K)*ZR(I,K)+ZI(I,K)*ZI(I,K)
  388. 388 IF T1<T THEN 391
  389. 389 I1=I
  390. 390 T=T1
  391. 391 NEXT I
  392. 392 REM ----- EXCHANGE ROWS K AND I1
  393. 393 IF I1=K THEN 402
  394. 394 FOR J=1 TO N
  395. 395 T1=ZR(K,J)
  396. 396 T2=ZI(K,J)
  397. 397 ZR(K,J)=ZR(I1,J)
  398. 398 ZI(K,J)=ZI(I1,J)
  399. 399 ZR(I1,J)=T1
  400. 400 ZI(I1,J)=T2
  401. 401 NEXT J
  402. 402 P(K)=I1
  403. 403 REM ----- SUBTRACT ROW K FROM ROWS K+1 TO N
  404. 404 FOR I=K+1 TO N
  405. 405 REM ----- COMPUTE MULTIPLIER L(I,K)
  406. 406 T1=(ZR(I,K)*ZR(K,K)+ZI(I,K)*ZI(K,K))/T
  407. 407 T2=(ZI(I,K)*ZR(K,K)-ZR(I,K)*ZI(K,K))/T
  408. 408 ZR(I,K)=T1
  409. 409 ZI(I,K)=T2
  410. 410 REM ----- SUBTRACT ROW K FROM ROW I
  411. 411 FOR J=K+1 TO N
  412. 412 ZR(I,J)=ZR(I,J)-(ZR(K,J)*T1-ZI(K,J)*T2)
  413. 413 ZI(I,J)=ZI(I,J)-(ZR(K,J)*T2+ZI(K,J)*T1)
  414. 414 NEXT J
  415. 415 NEXT I
  416. 416 X=N-K
  417. 417 PCT=1-X*(X-1)*(X+X-1)/PCTN
  418. 418 GOSUB 1589
  419. 419 NEXT K
  420. 420 REM ----- END MATRIX FACTOR TIME CALCULATION
  421. 421 T$=TIME$
  422. 422 GOSUB 1579
  423. 423 PRINT
  424. 424 PRINT #3, "FACTOR MATRIX: ";T$
  425. 425 REM ********** SOLVE **********
  426. 426 REM ----- COMPUTE RIGHT HAND SIDE
  427. 427 FOR I=1 TO N
  428. 428 CR(I)=0
  429. 429 CI(I)=0
  430. 430 NEXT I
  431. 431 FOR J=1 TO NS
  432. 432 F2=1/M
  433. 433 IF C%(E(J),1)=-C%(E(J),2) THEN F2=2/M
  434. 434 CR(E(J))=F2*M(J)
  435. 435 CI(E(J))=-F2*L(J)
  436. 436 NEXT J
  437. 437 REM ----- PERMUTE EXCITATION
  438. 438 FOR K=1 TO N-1
  439. 439 I1=P(K)
  440. 440 IF I1=K THEN 447
  441. 441 T1=CR(K)
  442. 442 T2=CI(K)
  443. 443 CR(K)=CR(I1)
  444. 444 CI(K)=CI(I1)
  445. 445 CR(I1)=T1
  446. 446 CI(I1)=T2
  447. 447 NEXT K
  448. 448 REM ----- FORWARD ELIMINATION
  449. 449 FOR I=2 TO N
  450. 450 T1=0
  451. 451 T2=0
  452. 452 FOR J=1 TO I-1
  453. 453 T1=T1+ZR(I,J)*CR(J)-ZI(I,J)*CI(J)
  454. 454 T2=T2+ZR(I,J)*CI(J)+ZI(I,J)*CR(J)
  455. 455 NEXT J
  456. 456 CR(I)=CR(I)-T1
  457. 457 CI(I)=CI(I)-T2
  458. 458 NEXT I
  459. 459 REM ----- BACK SUBSTITUTION
  460. 460 FOR I=N TO 1 STEP -1
  461. 461 T1=0
  462. 462 T2=0
  463. 463 IF I=N THEN 468
  464. 464 FOR J=I+1 TO N
  465. 465 T1=T1+ZR(I,J)*CR(J)-ZI(I,J)*CI(J)
  466. 466 T2=T2+ZR(I,J)*CI(J)+ZI(I,J)*CR(J)
  467. 467 NEXT J
  468. 468 T=ZR(I,I)*ZR(I,I)+ZI(I,I)*ZI(I,I)
  469. 469 T1=CR(I)-T1
  470. 470 T2=CI(I)-T2
  471. 471 CR(I)=(T1*ZR(I,I)+T2*ZI(I,I))/T
  472. 472 CI(I)=(T2*ZR(I,I)-T1*ZI(I,I))/T
  473. 473 NEXT I
  474. 474 FLG=2
  475. 475 REM ********** SOURCE DATA **********
  476. 476 PRINT #3," "
  477. 477 PRINT #3,B$;"    SOURCE DATA     ";B$
  478. 478 PWR=0
  479. 479 FOR I=1 TO NS
  480. 480 CR=CR(E(I))
  481. 481 CI=CI(E(I))
  482. 482 T=CR*CR+CI*CI
  483. 483 T1=(L(I)*CR+M(I)*CI)/T
  484. 484 T2=(M(I)*CR-L(I)*CI)/T
  485. 485 O2=(L(I)*CR+M(I)*CI)/2
  486. 486 PWR=PWR+O2
  487. 487 PRINT #3,"PULSE ";E(I),"VOLTAGE = (";L(I);",";M(I);"J)"
  488. 488 PRINT #3," ","CURRENT = (";CR;",";CI;"J)"
  489. 489 PRINT #3," ","IMPEDANCE = (";T1;",";T2;"J)"
  490. 490 PRINT #3," ","POWER = ";O2;" WATTS"
  491. 491 NEXT I
  492. 492 IF NS>1 THEN PRINT #3," "
  493. 493 IF NS>1 THEN PRINT #3,"TOTAL POWER = ";PWR;"WATTS"
  494. 494 RETURN
  495. 495 REM ********** PRINT CURRENTS **********
  496. 496 GOSUB 196
  497. 497 S$="N"
  498. 498 PRINT #3, " "
  499. 499 PRINT #3,B$;"    CURRENT DATA    ";B$
  500. 500 FOR K=1 TO NW
  501. 501 IF S$="Y" THEN 506
  502. 502 PRINT #3, " "
  503. 503 PRINT #3, "WIRE NO. ";K;":"
  504. 504 PRINT #3, "PULSE","REAL","IMAGINARY","MAGNITUDE","PHASE"
  505. 505 PRINT #3, " NO.","(AMPS)","(AMPS)","(AMPS)","(DEGREES)"
  506. 506 N1=N(K,1)
  507. 507 N2=N(K,2)
  508. 508 I=N1
  509. 509 C=C%(I,1)
  510. 510 IF (N1=0 AND N2=0) THEN C=K
  511. 511 IF G=1 THEN 514
  512. 512 IF (J1(K)=-1 AND N1>N2) THEN N2=N1
  513. 513 IF J1(K)=-1 THEN 524
  514. 514 E%=1
  515. 515 GOSUB 571
  516. 516 I2!=I1!
  517. 517 J2!=J1!
  518. 518 GOSUB 606
  519. 519 IF S$="N" THEN PRINT #3, I$,I1!;TAB(29);J1!;TAB(43);S1;TAB(57);S2
  520. 520 IF S$="Y" THEN PRINT #1,I1!;",";J1!;",";S1;",";S2
  521. 521 IF N1=0 THEN 531
  522. 522 IF C=K THEN 524
  523. 523 IF I$="J" THEN N1=N1+1
  524. 524 FOR I=N1 TO N2-1
  525. 525 I2!=CR(I)
  526. 526 J2!=CI(I)
  527. 527 GOSUB 606
  528. 528 IF S$="N" THEN PRINT #3, I,CR(I);TAB(29);CI(I);TAB(43);S1;TAB(57);S2
  529. 529 IF S$="Y" THEN PRINT #1,CR(I);",";CI(I);",";S1;",";S2
  530. 530 NEXT I
  531. 531 I=N2
  532. 532 C=C%(I,2)
  533. 533 IF (N1=0 AND N2=0) THEN C=K
  534. 534 IF G=1 THEN 536
  535. 535 IF J1(K)=1 THEN 542
  536. 536 E%=2
  537. 537 GOSUB 571
  538. 538 IF (N1=0 AND N2=0) THEN 548
  539. 539 IF N1>N2 THEN 548
  540. 540 IF C=K THEN 542
  541. 541 IF I$="J" THEN 548
  542. 542 I2!=CR(N2)
  543. 543 J2!=CI(N2)
  544. 544 GOSUB 606
  545. 545 IF S$="N" THEN PRINT #3, N2,CR(N2);TAB(29);CI(N2);TAB(43);S1;TAB(57);S2
  546. 546 IF S$="Y" THEN PRINT #1,CR(N2);",";CI(N2);",";S1;",";S2
  547. 547 IF J1(K)=1 THEN 553
  548. 548 I2!=I1!
  549. 549 J2!=J1!
  550. 550 GOSUB 606
  551. 551 IF S$="N" THEN PRINT #3,I$,I1!;TAB(29);J1!;TAB(43);S1;TAB(57);S2
  552. 552 IF S$="Y" THEN PRINT #1,I1!;",";J1!;",";S1;",";S2
  553. 553 IF S$="Y" THEN PRINT #1," 1 , 1 , 1 , 1"
  554. 554 NEXT K
  555. 555 IF S$="Y" THEN 568
  556. 556 PRINT
  557. 557 INPUT "SAVE CURRENTS TO A FILE (Y/N) ";S$
  558. 558 IF S$="N" THEN 569
  559. 559 IF S$<>"Y" THEN 556
  560. 560 PRINT #3," "
  561. 561 INPUT "FILENAME (NAME.OUT) ";F$
  562. 562 IF LEFT$(RIGHT$(F$,4),1)="." THEN 563 ELSE F$=F$+".OUT"
  563. 563 IF O$>"C" THEN PRINT #3,"FILENAME (NAME.OUT): ";F$
  564. 564 OPEN F$ FOR OUTPUT AS #1
  565. 565 PRINT #3," "
  566. 566 PRINT #1,NW;",";PWR;",C"
  567. 567 GOTO 500
  568. 568 CLOSE #1
  569. 569 RETURN
  570. 570 REM ----- SORT JUNCTION CURRENTS
  571. 571 I$="E"
  572. 572 I1!=0! 
  573. 573 J1!=0! 
  574. 574 IF (C=K OR C=0) THEN 579
  575. 575 I$="J" 
  576. 576 I1!=CR(I)
  577. 577 J1!=CI(I)
  578. 578 REM ----- CHECK FOR OTHER OVERLAPPING WIRES
  579. 579 FOR J=1 TO NW
  580. 580 IF J=K GOTO 603
  581. 581 L1=N(J,1)
  582. 582 L2=N(J,2)
  583. 583 IF E%=2 THEN 589
  584. 584 CO=C%(L1,1)
  585. 585 CT=C%(L2,2)
  586. 586 L3=L1
  587. 587 L4=L2
  588. 588 GOTO 593
  589. 589 CO=C%(L2,2)
  590. 590 CT=C%(L1,1)
  591. 591 L3=L2
  592. 592 L4=L1
  593. 593 IF CO=-K THEN 595
  594. 594 GOTO 598
  595. 595 I1!=I1!-CR(L3)
  596. 596 J1!=J1!-CI(L3)
  597. 597 I$="J"
  598. 598 IF CT=K THEN 600
  599. 599 GOTO 603
  600. 600 I1!=I1!+CR(L4)
  601. 601 J1!=J1!+CI(L4)
  602. 602 I$="J"
  603. 603 NEXT J
  604. 604 RETURN
  605. 605 REM ----- CALCULATE S1 AND S2
  606. 606 I3!=I2!*I2!
  607. 607 J3!=J2!*J2!
  608. 608 IF (I3!>0 OR J3!>0) THEN 611
  609. 609 S1=0!
  610. 610 GOTO 612
  611. 611 S1=SQR(I3!+J3!)
  612. 612 IF I2!><0 THEN 615
  613. 613 S2=0!
  614. 614 RETURN
  615. 615 S2=ATN(J2!/I2!)/P0
  616. 616 IF I2!>0 THEN RETURN
  617. 617 S2=S2+SGN(J2!)*180
  618. 618 RETURN
  619. 619 REM ********** FAR FIELD CALCULATION **********
  620. 620 IF FLG<2 THEN GOSUB 196
  621. 621 O2=PWR
  622. 622 REM ----- TABULATE IMPEDANCE
  623. 623 IF NM=0 THEN 633
  624. 624 FOR I=1 TO NM
  625. 625 Z6=T(I)
  626. 626 Z7=-V(I)/(2*P*F*8.85E-06)
  627. 627 REM ----- FORM IMPEDANCE=1/SQR(DIELECTRIC CONSTANT)
  628. 628 GOSUB 184
  629. 629 D=W6*W6+W7*W7
  630. 630 Z1(I)=W6/D
  631. 631 Z2(I)=-W7/D
  632. 632 NEXT I
  633. 633 PRINT #3," "
  634. 634 PRINT #3,B$;"     FAR FIELD      ";B$
  635. 635 PRINT #3," "
  636. 636 REM ----- INPUT VARIABLES FOR FAR FIELD CALCULATION
  637. 637 INPUT "CALCULATE PATTERN IN DBI OR VOLTS/METER (D/V)";P$
  638. 638 IF P$="D" THEN 654
  639. 639 IF P$<>"V" THEN 637
  640. 640 F1=1
  641. 641 PRINT
  642. 642 PRINT "PRESENT POWER LEVEL =  ";PWR;" WATTS"
  643. 643 INPUT "CHANGE POWER LEVEL (Y/N) ";A$
  644. 644 IF A$="N" THEN 649
  645. 645 IF A$<>"Y" THEN 643
  646. 646 INPUT "NEW POWER LEVEL (WATTS)  ";O2
  647. 647 IF O$>"C" THEN PRINT #3,"NEW POWER LEVEL = ";O2
  648. 648 GOTO 643
  649. 649 IF (O2<0 OR O2=0) THEN O2=PWR
  650. 650 F1=SQR(O2/PWR)
  651. 651 PRINT
  652. 652 INPUT "RADIAL DISTANCE (METERS) ";RD
  653. 653 IF RD<0 THEN RD=0
  654. 654 A$="ZENITH ANGLE : INITIAL,INCREMENT,NUMBER"
  655. 655 PRINT A$;
  656. 656 INPUT ZA,ZC,NZ
  657. 657 IF NZ=0 THEN NZ=1
  658. 658 IF O$>"C" THEN PRINT #3,A$;": ";ZA;",";ZC;",";NZ
  659. 659 A$="AZIMUTH ANGLE: INITIAL,INCREMENT,NUMBER"
  660. 660 PRINT A$;
  661. 661 INPUT AA,AC,NA
  662. 662 IF NA=0 THEN NA=1
  663. 663 IF O$>"C" THEN PRINT #3,A$;": ";AA;",";AC;",";NA
  664. 664 PRINT #3," "
  665. 665 REM ********** FILE FAR FIELD DATA **********
  666. 666 INPUT "FILE PATTERN (Y/N)";S$
  667. 667 IF S$="N" THEN 675
  668. 668 IF S$<>"Y" THEN 666
  669. 669 PRINT #3," "
  670. 670 INPUT "FILENAME (NAME.OUT)";F$
  671. 671 IF LEFT$(RIGHT$(F$,4),1)="." THEN 672 ELSE F$=F$+".OUT"
  672. 672 IF O$>"C" THEN PRINT #3,"FILENAME (NAME.OUT): ";F$
  673. 673 OPEN F$ FOR OUTPUT AS #1
  674. 674 PRINT #1,NA*NZ;",";O2;",";P$
  675. 675 PRINT #3, " "
  676. 676 K9!=.016678/PWR
  677. 677 REM ----- PATTERN HEADER
  678. 678 PRINT #3,B$;"    PATTERN DATA    ";B$
  679. 679 IF P$="V" GOTO 684
  680. 680 PRINT #3,"ZENITH","AZIMUTH","VERTICAL","HORIZONTAL","TOTAL"
  681. 681 A$="PATTERN (DB)"
  682. 682 PRINT #3," ANGLE"," ANGLE",A$,A$,A$
  683. 683 GOTO 691
  684. 684 IF RD>0 THEN PRINT #3,TAB(15);"RADIAL DISTANCE = ";RD;" METERS"
  685. 685 PRINT #3,TAB(15);"POWER LEVEL = ";PWR*F1*F1;" WATTS"
  686. 686 PRINT #3,"ZENITH   AZIMUTH","     E(THETA)     ","     E(PHI)"
  687. 687 A$=" MAG(V/M)    PHASE(DEG)"
  688. 688 PRINT #3," ANGLE    ANGLE",A$,A$
  689. 689 IF S$="Y" THEN PRINT #1,RD
  690. 690 REM ----- LOOP OVER AZIMUTH ANGLE
  691. 691 Q1=AA
  692. 692 FOR I1=1 TO NA
  693. 693 U3=Q1*P0
  694. 694 V1=-SIN(U3)
  695. 695 V2=COS(U3)
  696. 696 REM ----- LOOP OVER ZENITH ANGLE
  697. 697 Q2=ZA
  698. 698 FOR I2=1 TO NZ
  699. 699 U4=Q2*P0
  700. 700 R3=COS(U4)
  701. 701 T3=-SIN(U4)
  702. 702 T1=R3*V2
  703. 703 T2=-R3*V1
  704. 704 R1=-T3*V2
  705. 705 R2=T3*V1
  706. 706 X1=0
  707. 707 Y1=0
  708. 708 Z1=0
  709. 709 X2=0
  710. 710 Y2=0
  711. 711 Z2=0
  712. 712 REM ----- IMAGE LOOP
  713. 713 FOR K=1 TO G STEP -2
  714. 714 FOR I=1 TO N
  715. 715 IF K>0 THEN 717
  716. 716 IF C%(I,1)=-C%(I,2) THEN 811
  717. 717 J=2*W%(I)-1+I
  718. 718 REM ----- FOR EACH END OF PULSE COMPUTE A CONTRIBUTION TO E-FIELD
  719. 719 FOR F5=1 TO 2
  720. 720 L=ABS(C%(I,F5))
  721. 721 F3=SGN(C%(I,F5))*W*S(L)/2
  722. 722 IF C%(I,1)<>-C%(I,2) THEN 724
  723. 723 IF F3<0 THEN 810
  724. 724 IF K=1 THEN 727
  725. 725 IF NM<>0 THEN 746
  726. 726 REM ----- STANDARD CASE
  727. 727 S2=W*(X(J)*R1+Y(J)*R2+Z(J)*K*R3)
  728. 728 S1=COS(S2)
  729. 729 S2=SIN(S2)
  730. 730 B1=F3*(S1*CR(I)-S2*CI(I))
  731. 731 B2=F3*(S1*CI(I)+S2*CR(I))
  732. 732 IF C%(I,1)=-C%(I,2) THEN 741
  733. 733 X1=X1+K*B1*CA(L)
  734. 734 X2=X2+K*B2*CA(L)
  735. 735 Y1=Y1+K*B1*CB(L)
  736. 736 Y2=Y2+K*B2*CB(L)
  737. 737 Z1=Z1+B1*CG(L)
  738. 738 Z2=Z2+B2*CG(L)
  739. 739 GOTO 810
  740. 740 REM ----- GROUNDED ENDS
  741. 741 Z1=Z1+2*B1*CG(L)
  742. 742 Z2=Z2+2*B2*CG(L)
  743. 743 GOTO 810
  744. 744 REM ----- REAL GROUND CASE
  745. 745 REM ----- BEGIN BY FINDING SPECULAR DISTANCE
  746. 746 T4=100000!
  747. 747 IF R3=0 THEN 749
  748. 748 T4=-Z(J)*T3/R3
  749. 749 B9=T4*V2+X(J)
  750. 750 IF TB=1 THEN 753
  751. 751 B9=SQR(B9*B9+(Y(J)-T4*V1)^2)
  752. 752 REM ----- SEARCH FOR THE CORRESPONDING MEDIUM
  753. 753 J2=NM
  754. 754 FOR J1=NM TO 1 STEP -1
  755. 755 IF B9>U(J1) THEN 757
  756. 756 J2=J1
  757. 757 NEXT J1
  758. 758 REM ----- OBTAIN IMPEDANCE AT SPECULAR POINT
  759. 759 Z4=Z1(J2)
  760. 760 Z5=Z2(J2)
  761. 761 REM ----- IF PRESENT INCLUDE GROUND SCREEN IMPEDANCE IN PARALLEL
  762. 762 IF NR=0 THEN 774
  763. 763 IF B9>U(1) THEN 774
  764. 764 R=B9+NR*RR
  765. 765 Z8=W*R*LOG(R/(NR*RR))/NR
  766. 766 S8=-Z5*Z8
  767. 767 S9=Z4*Z8
  768. 768 T8=Z4
  769. 769 T9=Z5+Z8
  770. 770 D=T8*T8+T9*T9
  771. 771 Z4=(S8*T8+S9*T9)/D
  772. 772 Z5=(S9*T8-S8*T9)/D
  773. 773 REM ----- FORM SQR(1-Z^2*SIN^2)
  774. 774 Z6=1-(Z4*Z4-Z5*Z5)*T3*T3
  775. 775 Z7=-(2*Z4*Z5)*T3*T3
  776. 776 GOSUB 184
  777. 777 REM ----- VERTICAL REFLECTION COEFFICIENT
  778. 778 S8=R3-(W6*Z4-W7*Z5)
  779. 779 S9=-(W6*Z5+W7*Z4)
  780. 780 T8=R3+(W6*Z4-W7*Z5)
  781. 781 T9=W6*Z5+W7*Z4
  782. 782 D=T8*T8+T9*T9
  783. 783 V8=(S8*T8+S9*T9)/D
  784. 784 V9=(S9*T8-S8*T9)/D
  785. 785 REM ----- HORIZONTAL REFLECTION COEFFICIENT
  786. 786 S8=W6-R3*Z4
  787. 787 S9=W7-R3*Z5
  788. 788 T8=W6+R3*Z4
  789. 789 T9=W7+R3*Z5
  790. 790 D=T8*T8+T9*T9
  791. 791 H8=(S8*T8+S9*T9)/D-V8
  792. 792 H9=(S9*T8-S8*T9)/D-V9
  793. 793 REM ----- COMPUTE CONTRIBUTION TO SUM
  794. 794 S2=W*(X(J)*R1+Y(J)*R2-(Z(J)-2*H(J2))*R3)
  795. 795 S1=COS(S2)
  796. 796 S2=SIN(S2)
  797. 797 B1=F3*(S1*CR(I)-S2*CI(I))
  798. 798 B2=F3*(S1*CI(I)+S2*CR(I))
  799. 799 W6=B1*V8-B2*V9
  800. 800 W7=B1*V9+B2*V8
  801. 801 D=CA(L)*V1+CB(L)*V2
  802. 802 Z6=D*(B1*H8-B2*H9)
  803. 803 Z7=D*(B1*H9+B2*H8)
  804. 804 X1=X1-(CA(L)*W6+V1*Z6)
  805. 805 X2=X2-(CA(L)*W7+V1*Z7)
  806. 806 Y1=Y1-(CB(L)*W6+V2*Z6)
  807. 807 Y2=Y2-(CB(L)*W7+V2*Z7)
  808. 808 Z1=Z1+CG(L)*W6
  809. 809 Z2=Z2+CG(L)*W7
  810. 810 NEXT F5
  811. 811 NEXT I
  812. 812 NEXT K
  813. 813 H2=(X1*T1+Y1*T2+Z1*T3)*G0
  814. 814 H1=(X2*T1+Y2*T2+Z2*T3)*G0
  815. 815 X4=(X1*V1+Y1*V2)*G0
  816. 816 X3=(X2*V1+Y2*V2)*G0
  817. 817 IF P$="D" THEN 824
  818. 818 IF RD=0 THEN 839
  819. 819 H1=H1/RD
  820. 820 X3=X3/RD
  821. 821 X4=X4/RD
  822. 822 GOTO 839
  823. 823 REM ----- PATTERN IN DB
  824. 824 P1=-999
  825. 825 P2=P1
  826. 826 P3=P1
  827. 827 T1=K9!*(H1*H1+H2*H2)
  828. 828 T2=K9!*(X3*X3+X4*X4)
  829. 829 T3=T1+T2
  830. 830 REM ----- CALCULATE VALUES IN DB
  831. 831 IF T1>1E-30 THEN P1=4.343*LOG(T1)
  832. 832 IF T2>1E-30 THEN P2=4.343*LOG(T2)
  833. 833 IF T3>1E-30 THEN P3=4.343*LOG(T3)
  834. 834 PRINT #3,Q2;TAB(15);Q1;TAB(29);P1;TAB(43);P2;TAB(57);P3
  835. 835 IF S$="Y" THEN PRINT #1,Q2;",";Q1;",";P1;",";P2;",";P3
  836. 836 GOTO 863
  837. 837 REM ----- PATTERN IN VOLTS/METER
  838. 838 REM ----- MAGNITUDE AND PHASE OF E(THETA)
  839. 839 S1=0 
  840. 840 IF (H1=0 AND H2=0) THEN 842
  841. 841 S1=(H1*H1+H2*H2)
  842. 842 IF H1><0 THEN 845
  843. 843 S2=0
  844. 844 GOTO 848
  845. 845 S2=ATN(H2/H1)/P0
  846. 846 IF H1<0 THEN S2=S2+SGN(H2)*180
  847. 847 REM ----- MAGNITUDE AND PHASE OF E(PHI)
  848. 848 S3=0
  849. 849 IF (X3=0 AND X4=0) THEN 851
  850. 850 S3=SQR(X3*X3+X4*X4)
  851. 851 IF X3><0 THEN 854
  852. 852 S4=0
  853. 853 GOTO 856
  854. 854 S4=ATN(X4/X3)/P0
  855. 855 IF X3<0 THEN S4=S4+SGN(X4)*180
  856. 856 PRINT #3,USING "###.##    ";Q2,Q1;
  857. 857 PRINT #3,USING "       ##.###^^^^";S1*F1;
  858. 858 PRINT #3,USING "   ###.##   ";S2;
  859. 859 PRINT #3,USING "       ##.###^^^^";S3*F1;
  860. 860 PRINT #3,USING "   ###.##";S4
  861. 861 IF S$="Y" THEN PRINT #1,Q2;",";Q1;",";S1*F1;",";S2;",";S3*F1;","S4
  862. 862 REM ----- INCREMENT ZENITH ANGLE
  863. 863 Q2=Q2+ZC
  864. 864 NEXT I2
  865. 865 REM ----- INCREMENT AZIMUTH ANGLE
  866. 866 Q1=Q1+AC
  867. 867 NEXT I1
  868. 868 CLOSE #1
  869. 869 RETURN
  870. 870 REM ********** NEAR FIELD CALCULATION **********
  871. 871 REM ----- ENSURE CURRENTS HAVE BEEN CALCULATED
  872. 872 IF FLG<2 THEN GOSUB 196
  873. 873 O2=PWR
  874. 874 PRINT #3," "
  875. 875 PRINT #3,B$;"    NEAR FIELDS     ";B$
  876. 876 PRINT #3," "
  877. 877 INPUT "ELECTRIC OR MAGNETIC NEAR FIELDS (E/H) ";N$
  878. 878 IF(N$="H" OR N$="E") GOTO 880
  879. 879 GOTO 877
  880. 880 PRINT
  881. 881 REM ----- INPUT VARIABLES FOR NEAR FIELD CALCULATION
  882. 882 PRINT "FIELD LOCATION(S):"
  883. 883 A$="-COORDINATE (M): INITIAL,INCREMENT,NUMBER "
  884. 884 PRINT "   X";A$;
  885. 885 INPUT XX,XC,NX
  886. 886 IF NX=0 THEN NX=1
  887. 887 IF O$>"C" THEN PRINT #3,"X";A$;": ";XX;",";XC;",";NX
  888. 888 PRINT "   Y";A$;
  889. 889 INPUT YY,YC,NY
  890. 890 IF NY=0 THEN NY=1
  891. 891 IF O$>"C" THEN PRINT #3,"Y";A$;": ";YY;",";YC;",";NY
  892. 892 PRINT "   Z";A$;
  893. 893 INPUT ZZ,ZC,NZ
  894. 894 IF NZ=0 THEN NZ=1
  895. 895 IF O$>"C" THEN PRINT #3,"Z";A$;": ";ZZ;",";ZC;",";NZ
  896. 896 F1=1
  897. 897 PRINT
  898. 898 PRINT "PRESENT POWER LEVEL IS ";PWR;" WATTS"
  899. 899 INPUT "CHANGE POWER LEVEL (Y/N) ";A$
  900. 900 IF A$="N" THEN 905
  901. 901 IF A$<>"Y" THEN 899
  902. 902 INPUT "NEW POWER LEVEL (WATTS)  ";O2
  903. 903 IF O$>"C" THEN PRINT #3," ":PRINT #3,"NEW POWER LEVEL (WATTS) = ";O2
  904. 904 GOTO 899
  905. 905 IF (O2<0 OR O2=0) THEN O2=PWR
  906. 906 REM ----- RATIO OF POWER LEVELS
  907. 907 F1=SQR(O2/PWR)
  908. 908 IF N$="H" THEN F1=F1/S0/4/P
  909. 909 PRINT
  910. 910 REM ----- DESIGNATION OF OUTPUT FILE FOR NEAR FIELD DATA
  911. 911 INPUT "SAVE TO A FILE (Y/N) ";S$
  912. 912 IF S$="N" THEN 920
  913. 913 IF S$<>"Y" THEN 911
  914. 914 INPUT "FILENAME (NAME.OUT)  ";F$
  915. 915 IF LEFT$(RIGHT$(F$,4),1)="." THEN 916 ELSE F$=F$+".OUT"
  916. 916 IF O$>"C" THEN PRINT #3," ":PRINT #3,"FILENAME (NAME.OUT) ";F$
  917. 917 OPEN F$ FOR OUTPUT AS #2
  918. 918 PRINT #2,NX*NY*NZ;",";O2;",";N$
  919. 919 REM ----- LOOP OVER Z DIMENSION
  920. 920 FOR IZ=1 TO NZ
  921. 921 REM ----- LOOP OVER Y DIMENSION
  922. 922 FOR IY=1 TO NY
  923. 923 REM ----- LOOP OVER Z DIMENSION
  924. 924 FOR IX=1 TO NX
  925. 925 REM ----- NEAR FIELD HEADER
  926. 926 PRINT #3," "
  927. 927 IF N$="E" THEN PRINT #3,B$;"NEAR ELECTRIC FIELDS";B$
  928. 928 IF N$="H" THEN PRINT #3,B$;"NEAR MAGNETIC FIELDS";B$
  929. 929 PRINT #3,TAB(10);"FIELD POINT: ";"X = ";XX;" Y = ";YY;" Z = ";ZZ
  930. 930 PRINT #3,"  VECTOR","REAL","IMAGINARY","MAGNITUDE","PHASE"
  931. 931 IF N$="E" THEN A$=" V/M "
  932. 932 IF N$="H" THEN A$=" AMPS/M "
  933. 933 PRINT #3," COMPONENT  ",A$,A$,A$," DEG"
  934. 934 A1=0
  935. 935 A3=0
  936. 936 A4=0
  937. 937 REM ----- LOOP OVER THREE VECTOR COMPONENTS
  938. 938 FOR I=1 TO 3
  939. 939 X0=XX
  940. 940 Y0=YY
  941. 941 Z0=ZZ
  942. 942 IF N$="H" THEN 952
  943. 943 T5=0
  944. 944 T6=0
  945. 945 T7=0
  946. 946 IF I=1 THEN T5=2*S0
  947. 947 IF I=2 THEN T6=2*S0
  948. 948 IF I=3 THEN T7=2*S0
  949. 949 U7=0
  950. 950 U8=0
  951. 951 GOTO 962
  952. 952 FOR J8=1 TO 6
  953. 953 K!(J8,1)=0
  954. 954 K!(J8,2)=0
  955. 955 NEXT J8
  956. 956 J9=1
  957. 957 J8=-1
  958. 958 IF I=1 THEN X0=XX+J8*S0/2
  959. 959 IF I=2 THEN Y0=YY+J8*S0/2
  960. 960 IF I=3 THEN Z0=ZZ+J8*S0/2
  961. 961 REM ----- LOOP OVER SOURCE SEGMENTS
  962. 962 FOR J=1 TO N
  963. 963 J1=ABS(C%(J,1))
  964. 964 J2=ABS(C%(J,2))
  965. 965 J3=J2
  966. 966 IF J1>J2 THEN J3=J1
  967. 967 F4=SGN(C%(J,1))
  968. 968 F5=SGN(C%(J,2))
  969. 969 F6=1
  970. 970 F7=1
  971. 971 U5=0
  972. 972 U6=0
  973. 973 REM ----- IMAGE LOOP
  974. 974 FOR K=1 TO G STEP -2
  975. 975 IF C%(J,1)<>-C%(J,2) THEN 981
  976. 976 IF K<0 THEN 1042
  977. 977 REM ----- COMPUTE VECTOR POTENTIAL A
  978. 978 F6=F4
  979. 979 F7=F5
  980. 980 REM ----- COMPUTE PSI(0,J,J+.5)
  981. 981 P1=0
  982. 982 P2=2*J3+J-1
  983. 983 P3=P2+.5
  984. 984 P4=J2
  985. 985 GOSUB 75
  986. 986 U1=T1*F5
  987. 987 U2=T2*F5
  988. 988 REM ----- COMPUTE PSI(0,J-.5,J)
  989. 989 P3=P2
  990. 990 P2=P2-.5
  991. 991 P4=J1
  992. 992 GOSUB 66
  993. 993 V1=F4*T1
  994. 994 V2=F4*T2
  995. 995 REM ----- REAL PART OF VECTOR POTENTIAL CONTRIBUTION
  996. 996 X3=U1*CA(J2)+V1*CA(J1)
  997. 997 Y3=U1*CB(J2)+V1*CB(J1)
  998. 998 Z3=(F7*U1*CG(J2)+F6*V1*CG(J1))*K
  999. 999 REM ----- IMAGINARY PART OF VECTOR POTENTIAL CONTRIBUTION
  1000. 1000 X5=U2*CA(J2)+V2*CA(J1)
  1001. 1001 Y5=U2*CB(J2)+V2*CB(J1)
  1002. 1002 Z5=(F7*U2*CG(J2)+F6*V2*CG(J1))*K
  1003. 1003 REM ----- MAGNETIC FIELD CALCULATION COMPLETED
  1004. 1004 IF N$="H" THEN 1036
  1005. 1005 D1=(X3*T5+Y3*T6+Z3*T7)*W2
  1006. 1006 D2=(X5*T5+Y5*T6+Z5*T7)*W2
  1007. 1007 REM ----- COMPUTE PSI(.5,J,J+1)
  1008. 1008 P1=.5
  1009. 1009 P2=P3
  1010. 1010 P3=P3+1
  1011. 1011 P4=J2
  1012. 1012 GOSUB 56
  1013. 1013 U1=T1
  1014. 1014 U2=T2
  1015. 1015 REM ----- COMPUTE PSI(-.5,J,J+1)
  1016. 1016 P1=-P1
  1017. 1017 GOSUB 56
  1018. 1018 U1=(T1-U1)/S(J2)
  1019. 1019 U2=(T2-U2)/S(J2)
  1020. 1020 REM ----- COMPUTE PSI(.5,J-1,J)
  1021. 1021 P1=-P1
  1022. 1022 P3=P2
  1023. 1023 P2=P2-1
  1024. 1024 P4=J1
  1025. 1025 GOSUB 56
  1026. 1026 U3=T1
  1027. 1027 U4=T2
  1028. 1028 REM ----- COMPUTE PSI(-.5,J-1,J)
  1029. 1029 P1=-P1
  1030. 1030 GOSUB 56
  1031. 1031 REM ----- GRADIENT OF SCALAR POTENTIAL
  1032. 1032 U5=(U1+(U3-T1)/S(J1)+D1)*K+U5
  1033. 1033 U6=(U2+(U4-T2)/S(J1)+D2)*K+U6
  1034. 1034 GOTO 1042
  1035. 1035 REM ----- COMPONENTS OF VECTOR POTENTIAL A
  1036. 1036 K!(1,J9)=K!(1,J9)+(X3*CR(J)-X5*CI(J))*K
  1037. 1037 K!(2,J9)=K!(2,J9)+(X5*CR(J)+X3*CI(J))*K
  1038. 1038 K!(3,J9)=K!(3,J9)+(Y3*CR(J)-Y5*CI(J))*K
  1039. 1039 K!(4,J9)=K!(4,J9)+(Y5*CR(J)+Y3*CI(J))*K
  1040. 1040 K!(5,J9)=K!(5,J9)+(Z3*CR(J)-Z5*CI(J))*K
  1041. 1041 K!(6,J9)=K!(6,J9)+(Z5*CR(J)+Z3*CI(J))*K
  1042. 1042 NEXT K
  1043. 1043 IF N$="H" THEN 1046
  1044. 1044 U7=U5*CR(J)-U6*CI(J)+U7
  1045. 1045 U8=U6*CR(J)+U5*CI(J)+U8
  1046. 1046 NEXT J
  1047. 1047 IF N$="E" THEN 1069
  1048. 1048 REM ----- DIFFERENCES OF VECTOR POTENTIAL A
  1049. 1049 J8=1
  1050. 1050 J9=J9+1
  1051. 1051 IF J9=2 THEN 958
  1052. 1052 ON I GOTO 1053,1058,1063
  1053. 1053 H(3)=K!(5,1)-K!(5,2)
  1054. 1054 H(4)=K!(6,1)-K!(6,2)
  1055. 1055 H(5)=K!(3,2)-K!(3,1)
  1056. 1056 H(6)=K!(4,2)-K!(4,1)
  1057. 1057 GOTO 1091
  1058. 1058 H(1)=K!(5,2)-K!(5,1)
  1059. 1059 H(2)=K!(6,2)-K!(6,1)
  1060. 1060 H(5)=H(5)-K!(1,2)+K!(1,1)
  1061. 1061 H(6)=H(6)-K!(2,2)+K!(2,1)
  1062. 1062 GOTO 1091
  1063. 1063 H(1)=H(1)-K!(3,2)+K!(3,1)
  1064. 1064 H(2)=H(2)-K!(4,2)+K!(4,1)
  1065. 1065 H(3)=H(3)+K!(1,2)-K!(1,1)
  1066. 1066 H(4)=H(4)+K!(2,2)-K!(2,1)
  1067. 1067 GOTO 1091
  1068. 1068 REM ----- IMAGINARY PART OF ELECTRIC FIELD
  1069. 1069 U7=M*U7/S0
  1070. 1070 REM ----- REAL PART OF ELECTRIC FIELD
  1071. 1071 U8=-M*U8/S0
  1072. 1072 REM ----- MAGNITUDE AND PHASE CALCULATION
  1073. 1073 S1=0
  1074. 1074 IF (U7=0 AND U8=0) THEN 1076
  1075. 1075 S1=SQR(U7*U7+U8*U8)
  1076. 1076 S2=0
  1077. 1077 IF U8<>0 THEN S2=ATN(U7/U8)/P0
  1078. 1078 IF U8>0 THEN 1080
  1079. 1079 S2=S2+SGN(U7)*180
  1080. 1080 IF I=1 THEN PRINT #3,"   X  ",
  1081. 1081 IF I=2 THEN PRINT #3,"   Y  ",
  1082. 1082 IF I=3 THEN PRINT #3,"   Z  ",
  1083. 1083 PRINT #3,TAB(15);F1*U8;TAB(29);F1*U7;TAB(43);F1*S1;TAB(57);S2
  1084. 1084 IF S$="Y" THEN PRINT #2,F1*U8;",";F1*U7;",";F1*S1;",";S2
  1085. 1085 REM ----- CALCULATION FOR PEAK ELECTRIC FIELD
  1086. 1086 S1=S1*S1
  1087. 1087 S2=S2*P0
  1088. 1088 A1=A1+S1*COS(2*S2)
  1089. 1089 A3=A3+S1*SIN(2*S2)
  1090. 1090 A4=A4+S1
  1091. 1091 NEXT I
  1092. 1092 IF N$="E" THEN 1115
  1093. 1093 REM ----- MAGNETIC FIELD MAGNITUDE AND PHASE CALCULATION
  1094. 1094 FOR I=1 TO 5 STEP 2
  1095. 1095 S1=0
  1096. 1096 IF (H(I)=0 AND H(I+1)=0) THEN 1098
  1097. 1097 S1=SQR(H(I)*H(I)+H(I+1)*H(I+1))
  1098. 1098 S2=0
  1099. 1099 IF H(I)<>0 THEN S2=ATN(H(I+1)/H(I))/P0
  1100. 1100 IF H(I)>0 THEN 1102
  1101. 1101 S2=S2+SGN(H(I+1))*180
  1102. 1102 IF I=1 THEN PRINT #3,"   X  ",
  1103. 1103 IF I=3 THEN PRINT #3,"   Y  ",
  1104. 1104 IF I=5 THEN PRINT #3,"   Z  ",
  1105. 1105 PRINT #3,TAB(15);F1*H(I);TAB(29);F1*H(I+1);TAB(43);F1*S1;TAB(57);S2
  1106. 1106 IF S$="Y" THEN PRINT #2,F1*H(I);",";F1*H(I+1);",";F1*S1;",";S2
  1107. 1107 REM ----- CALCULATION FOR PEAK MAGNETIC FIELD
  1108. 1108 S1=S1*S1
  1109. 1109 S2=S2*P0
  1110. 1110 A1=A1+S1*COS(2*S2)
  1111. 1111 A3=A3+S1*SIN(2*S2)
  1112. 1112 A4=A4+S1
  1113. 1113 NEXT I
  1114. 1114 REM ----- PEAK FIELD CALCULATION
  1115. 1115 PK=SQR(A4/2+SQR(A1*A1+A3*A3)/2)
  1116. 1116 PRINT #3,"   MAXIMUM OR PEAK FIELD = ";F1*PK;A$
  1117. 1117 IF (S$="Y" AND N$="E") THEN PRINT #2,F1*PK;",";O2
  1118. 1118 IF (S$="Y" AND N$="H") THEN PRINT #2,F1*PK;",";O2
  1119. 1119 IF S$="Y" THEN PRINT #2,XX;",";YY;",";ZZ
  1120. 1120 REM ----- INCREMENT X DIMENSION
  1121. 1121 XX=XX+XC
  1122. 1122 NEXT IX
  1123. 1123 REM ----- INCREMENT Y DIMENSION
  1124. 1124 YY=YY+YC
  1125. 1125 NEXT IY
  1126. 1126 REM ----- INCREMENT Z DIMENSION
  1127. 1127 ZZ=ZZ+ZC
  1128. 1128 NEXT IZ
  1129. 1129 CLOSE #2
  1130. 1130 RETURN
  1131. 1131 REM ********** FREQUENCY INPUT **********
  1132. 1132 REM ----- SET FLAG
  1133. 1133 PRINT
  1134. 1134 INPUT "FREQUENCY (MHZ)";F
  1135. 1135 IF F=0 THEN F=299.8
  1136. 1136 IF O$>"C" THEN PRINT #3, " ":PRINT #3, "FREQUENCY (MHZ):";F
  1137. 1137 W=299.8/F
  1138. 1138 REM -----VIRTUAL DIPOLE LENGTH FOR NEAR FIELD CALCULATION
  1139. 1139 S0=.001*W
  1140. 1140 REM ----- 1 / (4 * PI * OMEGA * EPSILON)
  1141. 1141 M=4.77783352#*W
  1142. 1142 REM ----- SET SMALL RADIUS MODIFICATION CONDITION
  1143. 1143 SRM=.0001*W
  1144. 1144 PRINT #3, "    WAVE LENGTH = ";W;" METERS"
  1145. 1145 REM ----- 2 PI / WAVELENGTH
  1146. 1146 W=2*P/W
  1147. 1147 W2=W*W/2
  1148. 1148 FLG=0
  1149. 1149 RETURN
  1150. 1150 REM ********** GEOMETRY INPUT **********
  1151. 1151 REM ----- WHEN GEOMETRY IS CHANGED, ENVIRONMENT MUST BE CHECKED
  1152. 1152 GOSUB 1359
  1153. 1153 PRINT
  1154. 1154 IF INFILE THEN 1160
  1155. 1155 INPUT "NO. OF WIRES";NW
  1156. 1156 IF NW=0 THEN RETURN
  1157. 1157 IF NW<=MW THEN 1160
  1158. 1158 PRINT "NUMBER OF WIRES EXCEEDS DIMENSION..."
  1159. 1159 GOTO 1155
  1160. 1160 IF O$>"C" THEN PRINT #3," ":PRINT #3,"NO. OF WIRES:";NW
  1161. 1161 REM ----- INITIALIZE NUMBER OF PULSES TO ZERO
  1162. 1162 N=0
  1163. 1163 FOR I=1 TO NW
  1164. 1164 IF INFILE THEN GOSUB 1547:GOTO 1190
  1165. 1165 PRINT
  1166. 1166 PRINT "WIRE NO.";I
  1167. 1167 INPUT "   NO. OF SEGMENTS";S1
  1168. 1168 IF S1=0 THEN 1153
  1169. 1169 A$="   END ONE COORDINATES (X,Y,Z)"
  1170. 1170 PRINT A$;
  1171. 1171 INPUT X1,Y1,Z1
  1172. 1172 IF G<0 AND Z1<0 THEN PRINT "Z CANNOT BE NEGATIVE":GOTO 1170
  1173. 1173 A$="   END TWO COORDINATES (X,Y,Z)"
  1174. 1174 PRINT A$;
  1175. 1175 INPUT X2,Y2,Z2
  1176. 1176 IF G<0 AND Z2<0 THEN PRINT "Z CANNOT BE NEGATIVE":GOTO 1174
  1177. 1177 IF X1=X2 AND Y1=Y2 AND Z1=Z2 THEN PRINT"ZERO LENGTH WIRE.":GOTO 1166
  1178. 1178 A$="   RADIUS"
  1179. 1179 PRINT "                     "A$;
  1180. 1180 INPUT A(I)
  1181. 1181 IF A(I)<=0! THEN 1179
  1182. 1182 REM ----- DETERMINE CONNECTIONS
  1183. 1183 IF O$>"C" THEN PRINT #3," ":PRINT #3,"WIRE NO.";I
  1184. 1184 GOSUB 1289
  1185. 1185 PRINT "CHANGE WIRE NO. ";I;" (Y/N) ";
  1186. 1186 INPUT A$
  1187. 1187 IF A$="Y" THEN 1165
  1188. 1188 IF A$<>"N" THEN 1185
  1189. 1189 REM ----- COMPUTE DIRECTION COSINES
  1190. 1190 X3=X2-X1
  1191. 1191 Y3=Y2-Y1
  1192. 1192 Z3=Z2-Z1
  1193. 1193 D=SQR(X3*X3+Y3*Y3+Z3*Z3)
  1194. 1194 CA(I)=X3/D
  1195. 1195 CB(I)=Y3/D
  1196. 1196 CG(I)=Z3/D
  1197. 1197 S(I)=D/S1
  1198. 1198 REM ----- COMPUTE CONNECTIVITY DATA (PULSES N1 TO N)
  1199. 1199 N1=N+1
  1200. 1200 N(I,1)=N1
  1201. 1201 IF (S1=1 AND I1=0) THEN N(I,1)=0
  1202. 1202 N=N1+S1
  1203. 1203 IF I1=0 THEN N=N-1
  1204. 1204 IF I2=0 THEN N=N-1
  1205. 1205 IF N>MP THEN PRINT "PULSE NUMBER EXCEEDS DIMENSION":CLOSE:GOTO 1155
  1206. 1206 N(I,2)=N
  1207. 1207 IF (S1=1 AND I2=0) THEN N(I,2)=0
  1208. 1208 IF N<N1 THEN 1245
  1209. 1209 FOR J=N1 TO N
  1210. 1210 C%(J,1)=I
  1211. 1211 C%(J,2)=I
  1212. 1212 W%(J)=I
  1213. 1213 NEXT J
  1214. 1214 C%(N1,1)=I1
  1215. 1215 C%(N,2)=I2
  1216. 1216 REM ----- COMPUTE COORDINATES OF BREAK POINTS
  1217. 1217 I1=N1+2*(I-1)
  1218. 1218 I3=I1
  1219. 1219 X(I1)=X1
  1220. 1220 Y(I1)=Y1
  1221. 1221 Z(I1)=Z1
  1222. 1222 IF C%(N1,1)=0 THEN 1230
  1223. 1223 I2=ABS(C%(N1,1))
  1224. 1224 F3=SGN(C%(N1,1))*S(I2)
  1225. 1225 X(I1)=X(I1)-F3*CA(I2)
  1226. 1226 Y(I1)=Y(I1)-F3*CB(I2)
  1227. 1227 IF C%(N1,1)=-I THEN F3=-F3
  1228. 1228 Z(I1)=Z(I1)-F3*CG(I2)
  1229. 1229 I3=I3+1
  1230. 1230 I6=N+2*I
  1231. 1231 FOR I4=I1+1 TO I6
  1232. 1232 J=I4-I3
  1233. 1233 X(I4)=X1+J*X3/S1
  1234. 1234 Y(I4)=Y1+J*Y3/S1
  1235. 1235 Z(I4)=Z1+J*Z3/S1
  1236. 1236 NEXT I4
  1237. 1237 IF C%(N,2)=0 THEN 1245
  1238. 1238 I2=ABS(C%(N,2))
  1239. 1239 F3=SGN(C%(N,2))*S(I2)
  1240. 1240 I3=I6-1
  1241. 1241 X(I6)=X(I3)+F3*CA(I2)
  1242. 1242 Y(I6)=Y(I3)+F3*CB(I2)
  1243. 1243 IF I=-C%(N,2) THEN F3=-F3
  1244. 1244 Z(I6)=Z(I3)+F3*CG(I2)
  1245. 1245 NEXT I
  1246. 1246 REM ********** GEOMETRY OUTPUT **********
  1247. 1247 PRINT #3, " "
  1248. 1248 PRINT #3, "                  **** ANTENNA GEOMETRY ****"
  1249. 1249 IF N>0 THEN 1254
  1250. 1250 PRINT
  1251. 1251 PRINT "NUMBER OF PULSES IS ZERO....RE-ENTER GEOMETRY"
  1252. 1252 PRINT
  1253. 1253 GOTO 1155
  1254. 1254 K=1
  1255. 1255 J=0
  1256. 1256 FOR I=1 TO N
  1257. 1257 I1=2*W%(I)-1+I
  1258. 1258 IF K>NW THEN 1269
  1259. 1259 IF K=J THEN 1269
  1260. 1260 J=K
  1261. 1261 PRINT #3," "
  1262. 1262 PRINT #3,"WIRE NO. ";K;" COORDINATES",,,"CONNECTION PULSE"
  1263. 1263 PRINT #3,"X","Y","Z","RADIUS","END1 END2  NO."
  1264. 1264 IF (N(K,1)><0 OR  N(K,2)><0) THEN 1269
  1265. 1265 PRINT #3,"-","-","-","    -"," -    -    0"
  1266. 1266 K=K+1
  1267. 1267 IF K>NW THEN 1276
  1268. 1268 GOTO 1260
  1269. 1269 PRINT #3,X(I1);TAB(15);Y(I1);TAB(29);Z(I1);TAB(43);A(W%(I));TAB(57);
  1270. 1270 PRINT #3, USING "###  ###   ##";C%(I,1),C%(I,2),I
  1271. 1271 IF (I=N(K,2) OR N(K,1)=N(K,2) OR C%(I,2)=0) THEN K=K+1
  1272. 1272 IF C%(I,1)=0 THEN C%(I,1)=W%(I)
  1273. 1273 IF C%(I,2)=0 THEN C%(I,2)=W%(I)
  1274. 1274 IF (K=NW AND N(K,1)=0 AND N(K,2)=0) THEN 1260
  1275. 1275 IF (I=N AND K<NW) THEN 1260
  1276. 1276 NEXT I
  1277. 1277 PRINT
  1278. 1278 CLOSE 1:IF INFILE THEN INFILE=0:IF O$>"C" THEN 1283
  1279. 1279 INPUT "    CHANGE GEOMETRY (Y/N) ";A$
  1280. 1280 IF A$="Y" THEN 1153
  1281. 1281 IF A$<>"N" THEN 1279
  1282. 1282 REM ----- EXCITATION INPUT
  1283. 1283 GOSUB 1420
  1284. 1284 REM ----- LOADS/NETWORKS INPUT
  1285. 1285 GOSUB 1445
  1286. 1286 FLG=0
  1287. 1287 RETURN
  1288. 1288 REM ********** CONNECTIONS **********
  1289. 1289 E(I)=X1
  1290. 1290 L(I)=Y1
  1291. 1291 M(I)=Z1
  1292. 1292 E(I+NW)=X2
  1293. 1293 L(I+NW)=Y2
  1294. 1294 M(I+NW)=Z2
  1295. 1295 G%=0
  1296. 1296 I1=0
  1297. 1297 I2=0
  1298. 1298 J1(I)=0
  1299. 1299 J2(I,1)=-I
  1300. 1300 J2(I,2)=-I
  1301. 1301 IF G=1 THEN 1313
  1302. 1302 REM ----- CHECK FOR GROUND CONNECTION
  1303. 1303 IF Z1=0 THEN 1305
  1304. 1304 GOTO 1308
  1305. 1305 I1=-I
  1306. 1306 J1(I)=-1
  1307. 1307 GOTO 1330
  1308. 1308 IF Z2=0 THEN 1310
  1309. 1309 GOTO 1313
  1310. 1310 I2=-I
  1311. 1311 J1(I)=1
  1312. 1312 G%=1
  1313. 1313 IF I=1 THEN 1348
  1314. 1314 FOR J=1 TO I-1
  1315. 1315 REM ----- CHECK FOR END1 TO END1
  1316. 1316 IF (X1=E(J) AND Y1=L(J) AND Z1=M(J)) THEN 1318
  1317. 1317 GOTO 1323
  1318. 1318 I1=-J
  1319. 1319 J2(I,1)=J
  1320. 1320 IF J2(J,1)=-J THEN J2(J,1)=J
  1321. 1321 GOTO 1330
  1322. 1322 REM ----- CHECK FOR END1 TO END2
  1323. 1323 IF (X1=E(J+NW) AND Y1=L(J+NW) AND Z1=M(J+NW)) THEN 1325
  1324. 1324 GOTO 1329
  1325. 1325 I1=J
  1326. 1326 J2(I,1)=J
  1327. 1327 IF J2(J,2)=-J THEN J2(J,2)=J
  1328. 1328 GOTO 1330
  1329. 1329 NEXT J
  1330. 1330 IF G%=1 THEN 1348
  1331. 1331 IF I=1 THEN 1348
  1332. 1332 FOR J=1 TO I-1
  1333. 1333 REM ----- CHECK END2 TO END2
  1334. 1334 IF (X2=E(J+NW) AND Y2=L(J+NW) AND Z2=M(J+NW)) THEN 1336
  1335. 1335 GOTO 1341
  1336. 1336 I2=-J
  1337. 1337 J2(I,2)=J
  1338. 1338 IF J2(J,2)=-J THEN J2(J,2)=J
  1339. 1339 GOTO 1348
  1340. 1340 REM ----- CHECK FOR END2 TO END1
  1341. 1341 IF (X2=E(J) AND Y2=L(J) AND Z2=M(J)) THEN 1343
  1342. 1342 GOTO 1347
  1343. 1343 I2=J
  1344. 1344 J2(I,2)=J
  1345. 1345 IF J2(J,1)=-J THEN J2(J,1)=J
  1346. 1346 GOTO 1348
  1347. 1347 NEXT J
  1348. 1348 PRINT #3,"            COORDINATES","  ","  ","END         NO. OF"
  1349. 1349 PRINT #3,"   X","   Y","   Z","RADIUS     CONNECTION     SEGMENTS"
  1350. 1350 PRINT #3,X1;TAB(15);Y1;TAB(29);Z1;TAB(57);I1
  1351. 1351 PRINT #3,X2;TAB(15);Y2;TAB(29);Z2;TAB(43);A(I);TAB(57);I2;TAB(71);S1
  1352. 1352 RETURN
  1353. 1353 REM ********** ENVIROMENT INPUT **********
  1354. 1354 PRINT
  1355. 1355 PRINT "                        **** WARNING ****"
  1356. 1356 PRINT "REDO GEOMETRY TO ENSURE PROPER GROUND CONNECTION/DISCONNECTION"
  1357. 1357 PRINT
  1358. 1358 REM ----- INITIALIZE NUMBER OF RADIAL WIRES TO ZERO
  1359. 1359 NR=0
  1360. 1360 REM ----- SET ENVIRONMENT
  1361. 1361 PRINT #3," "
  1362. 1362 A$="ENVIRONMENT (+1 FOR FREE SPACE, -1 FOR GROUND PLANE)"
  1363. 1363 PRINT A$;
  1364. 1364 INPUT G
  1365. 1365 IF O$>"C" THEN PRINT #3,A$;": ";G
  1366. 1366 IF G=1 THEN 1418
  1367. 1367 IF G<>-1 THEN 1363
  1368. 1368 REM ----- NUMBER OF MEDIA
  1369. 1369 A$=" NUMBER OF MEDIA (0 FOR PERFECTLY CONDUCTING GROUND)"
  1370. 1370 PRINT A$;
  1371. 1371 INPUT NM
  1372. 1372 IF NM<=MM THEN 1375
  1373. 1373 PRINT "NUMBER OF MEDIA EXCEEDS DIMENSION..."
  1374. 1374 GOTO 1370
  1375. 1375 IF O$>"C" THEN PRINT #3,A$;": ";NM
  1376. 1376 REM ----- INITIALIZE BOUNDARY TYPE
  1377. 1377 TB=1
  1378. 1378 IF NM=0 THEN 1418
  1379. 1379 IF NM=1 THEN 1386
  1380. 1380 REM ----- TYPE OF BOUNDARY
  1381. 1381 A$=" TYPE OF BOUNDARY (1-LINEAR, 2-CIRCULAR)"
  1382. 1382 PRINT "            ";A$;
  1383. 1383 INPUT TB
  1384. 1384 IF O$>"C" THEN PRINT #3,A$;": ";TB
  1385. 1385 REM ----- BOUNDARY CONDITIONS
  1386. 1386 FOR I=1 TO NM
  1387. 1387 PRINT "MEDIA";I
  1388. 1388 A$=" RELATIVE DIELECTRIC CONSTANT, CONDUCTIVITY"
  1389. 1389 PRINT "         ";A$;
  1390. 1390 INPUT T(I),V(I)
  1391. 1391 IF O$>"C" THEN PRINT #3,A$;": ";T(I)","V(I)
  1392. 1392 IF I>1 THEN 1404
  1393. 1393 IF TB=1 THEN 1404
  1394. 1394 A$=" NUMBER OF RADIAL WIRES IN GROUND SCREEN"
  1395. 1395 PRINT "            ";A$;
  1396. 1396 INPUT NR
  1397. 1397 IF O$>"C" THEN PRINT #3,A$;": ";NR
  1398. 1398 IF NR=0 THEN 1404
  1399. 1399 A$=" RADIUS OF RADIAL WIRES"
  1400. 1400 PRINT "                             ";A$;
  1401. 1401 INPUT RR
  1402. 1402 IF O$>"C" THEN PRINT #3,A$;": ";RR
  1403. 1403 REM ----- INITIALIZE COORDINATE OF MEDIA INTERFACE
  1404. 1404 U(I)=1000000!
  1405. 1405 REM ----- INITIALIZE HEIGHT OF MEDIA
  1406. 1406 H(I)=0
  1407. 1407 IF I=NM THEN 1412
  1408. 1408 A$=" X OR R COORDINATE OF NEXT MEDIA INTERFACE"
  1409. 1409 PRINT "          ";A$;
  1410. 1410 INPUT U(I)
  1411. 1411 IF O$>"C" THEN PRINT #3,A$;": ";U(I)
  1412. 1412 IF I=1 THEN 1417
  1413. 1413 A$=" HEIGHT OF MEDIA"
  1414. 1414 PRINT "                                    ";A$;
  1415. 1415 INPUT H(I)
  1416. 1416 IF O$>"C" THEN PRINT #3,A$;": ";H(I)
  1417. 1417 NEXT I
  1418. 1418 RETURN
  1419. 1419 REM ********** EXCITATION INPUT **********
  1420. 1420 PRINT
  1421. 1421 A$="NO. OF SOURCES "
  1422. 1422 PRINT A$;
  1423. 1423 INPUT NS
  1424. 1424 IF NS<1 THEN NS=1
  1425. 1425 IF NS<=MP THEN 1428
  1426. 1426 PRINT "NO. OF SOURCES EXCEEDS DIMENSION ..."
  1427. 1427 GOTO 1422
  1428. 1428 IF O$>"C" THEN PRINT #3," ":PRINT #3, A$;": ";NS
  1429. 1429 FOR I=1 TO NS
  1430. 1430 PRINT
  1431. 1431 PRINT "SOURCE NO. ";I;":"
  1432. 1432 A$="PULSE NO., VOLTAGE MAGNITUDE, PHASE (DEGREES)"
  1433. 1433 PRINT A$;
  1434. 1434 INPUT E(I),VM,VP
  1435. 1435 IF E(I)<=N THEN 1438
  1436. 1436 PRINT "PULSE NUMBER EXCEEDS NUMBER OF PULSES..."
  1437. 1437 GOTO 1433
  1438. 1438 IF O$>"C" THEN PRINT #3,A$;": ";E(I)","VM","VP
  1439. 1439 L(I)=VM*COS(VP*P0)
  1440. 1440 M(I)=VM*SIN(VP*P0)
  1441. 1441 NEXT I
  1442. 1442 IF FLG=2 THEN FLG=1
  1443. 1443 RETURN
  1444. 1444 REM ********** LOADS INPUT **********
  1445. 1445 PRINT
  1446. 1446 INPUT "NUMBER OF LOADS       ";NL
  1447. 1447 IF NL<=ML THEN 1450
  1448. 1448 PRINT "NUMBER OF LOADS EXCEEDS DIMENSION..."
  1449. 1449 GOTO 1446
  1450. 1450 IF O$>"C" THEN PRINT #3,"NUMBER OF LOADS";NL
  1451. 1451 IF NL<1 THEN 1482
  1452. 1452 INPUT "S-PARAMETER LOAD (Y/N)";L$
  1453. 1453 IF L$<>"Y" AND L$<>"N" THEN 1452
  1454. 1454 A$="PULSE NO.,RESISTANCE,REACTANCE"
  1455. 1455 IF L$="Y" THEN A$= "PULSE NO., ORDER OF S-PARAMETER FUNCTION"
  1456. 1456 FOR I=1 TO NL
  1457. 1457 PRINT
  1458. 1458 PRINT "LOAD NO. ";I;":"
  1459. 1459 IF L$="Y" THEN 1466
  1460. 1460 PRINT A$;
  1461. 1461 INPUT LP(I),LA(1,I,1),LA(2,I,1)
  1462. 1462 IF LP(I)>N THEN PRINT "PULSE NUMBER EXCEEDS NUMBER OF PULSES...": GOTO 1460
  1463. 1463 IF O$>"C" THEN PRINT #3,A$;": ";LP(I);",";LA(1,I,1);",";LA(2,I,1)
  1464. 1464 GOTO 1481
  1465. 1465 REM ----- S-PARAMETER LOADS
  1466. 1466 PRINT A$;
  1467. 1467 INPUT LP(I),LS(I)
  1468. 1468 IF LP(I)>N THEN PRINT "PULSE NUMBER EXCEEDS NUMBER OF PULSES...": GOTO 1466
  1469. 1469 IF LS(I)>MA THEN PRINT "MAXIMUM DIMENSION IS 10":GOTO 1467
  1470. 1470 IF O$>"C" THEN PRINT #3,A$;": ";LP(I);",";LS(I)
  1471. 1471 FOR J=0 TO LS(I)
  1472. 1472 A$="NUMERATOR, DENOMINATOR COEFFICIENTS OF S^"
  1473. 1473 PRINT A$;J;
  1474. 1474 INPUT LA(1,I,J),LA(2,I,J)
  1475. 1475 IF O$>"C" THEN PRINT #3,A$;J;":";LA(1,I,J);",";LA(2,I,J)
  1476. 1476 NEXT J
  1477. 1477 IF LS(I)>0 THEN 1481
  1478. 1478 LS(I)=1
  1479. 1479 LA(1,I,1)=0
  1480. 1480 LA(2,I,1)=0
  1481. 1481 NEXT I
  1482. 1482 FLG=0
  1483. 1483 RETURN
  1484. 1484 REM ********** MAIN PROGRAM **********
  1485. 1485 REM ----- DATA INITIALIZATION
  1486. 1486 REM ----- PI
  1487. 1487 P=4*ATN(1)
  1488. 1488 REM ----- CHANGES DEGREES TO RADIANS
  1489. 1489 P0=P/180
  1490. 1490 B$="********************"
  1491. 1491 REM ----- INTRINSIC IMPEDANCE OF FREE SPACE DIVIDED BY 2 PI
  1492. 1492 G0=29.979221#
  1493. 1493 REM ---------- Q-VECTOR FOR GAUSSIAN QUADRATURE
  1494. 1494 READ Q(1),Q(2),Q(3),Q(4),Q(5),Q(6),Q(7),Q(8),Q(9),Q(10),Q(11),Q(12)
  1495. 1495 READ Q(13),Q(14)
  1496. 1496 DATA .288675135,.5,.430568156,.173927423,.169990522,.326072577
  1497. 1497 DATA .480144928,.050614268,.398333239,.111190517
  1498. 1498 DATA .262766205,.156853323,.091717321,.181341892
  1499. 1499 REM ---------- E-VECTOR FOR COEFFICIENTS OF ELLIPTIC INTEGRAL
  1500. 1500 READ C0,C1,C2,C3,C4,C5,C6,C7,C8,C9
  1501. 1501 DATA 1.38629436,.09666344,.03590092,.03742563713,.01451196
  1502. 1502 DATA .5,.12498814,.06880249,.0332836,.00441787
  1503. 1503 REM ----- IDENTIFY OUTPUT DEVICE
  1504. 1504 GOSUB 1570
  1505. 1505 PRINT #3,TAB(20);B$;B$
  1506. 1506 PRINT #3,TAB(22);"MINI-NUMERICAL ELECTROMAGNETICS CODE"
  1507. 1507 PRINT #3,TAB(36);"MININEC"
  1508. 1508 PRINT #3,TAB(24);DATE$;TAB(48);TIME$
  1509. 1509 PRINT #3,TAB(20);B$;B$
  1510. 1510 REM ----- FREQUENCY INPUT
  1511. 1511 GOSUB 1133
  1512. 1512 REM ----- ENVIRONMENT INPUT
  1513. 1513 GOSUB 1359
  1514. 1514 REM ----- CHECK FOR NEC-TYPE GEOMETRY INPUT
  1515. 1515 GOSUB 1540
  1516. 1516 REM ----- GEOMETRY INPUT
  1517. 1517 GOSUB 1153
  1518. 1518 REM ----- MENU
  1519. 1519 PRINT
  1520. 1520 PRINT B$;"    MININEC MENU    ";B$
  1521. 1521 PRINT "   G - CHANGE GEOMETRY     C - COMPUTE/DISPLAY CURRENTS"
  1522. 1522 PRINT "   E - CHANGE ENVIRONMENT  P - COMPUTE FAR-FIELD PATTERNS"
  1523. 1523 PRINT "   X - CHANGE EXCITATION   N - COMPUTE NEAR-FIELDS"
  1524. 1524 PRINT "   L - CHANGE LOADS"
  1525. 1525 PRINT "   F - CHANGE FREQUENCY    Q - QUIT"
  1526. 1526 PRINT B$;B$;B$
  1527. 1527 INPUT "   COMMAND ";C$
  1528. 1528 IF C$="F" THEN GOSUB 1133
  1529. 1529 IF C$="P" THEN GOSUB 620
  1530. 1530 IF C$="X" THEN GOSUB 1420
  1531. 1531 IF C$="E" THEN GOSUB 1354
  1532. 1532 IF C$="G" THEN GOSUB 1152
  1533. 1533 IF C$="C" THEN GOSUB 496
  1534. 1534 IF C$="L" THEN GOSUB 1445
  1535. 1535 IF C$="N" THEN GOSUB 872
  1536. 1536 IF C$<>"Q" THEN 1519
  1537. 1537 IF O$="P" THEN PRINT #3, CHR$(12) ELSE IF O$="C" THEN PRINT #3, " "
  1538. 1538 CLOSE
  1539. 1539 GOTO 1607
  1540. 1540 REM ********** NEC-TYPE GEOMETRY INPUT **********
  1541. 1541 OPEN "MININEC.INP" AS #1 LEN=30
  1542. 1542 FIELD #1,2 AS S$,4 AS X1$,4 AS Y1$,4 AS Z1$,4 AS X2$,4 AS Y2$,4 AS Z2$,4 AS R$
  1543. 1543 GET 1
  1544. 1544 NW=CVI(S$)
  1545. 1545 IF NW THEN INFILE=1
  1546. 1546 RETURN
  1547. 1547 REM ---------- GET GEOMETRY DATA FROM MININEC.INP
  1548. 1548 GET 1
  1549. 1549 S1=CVI(S$)
  1550. 1550 X1=CVS(X1$)
  1551. 1551 Y1=CVS(Y1$)
  1552. 1552 Z1=CVS(Z1$)
  1553. 1553 X2=CVS(X2$)
  1554. 1554 Y2=CVS(Y2$)
  1555. 1555 Z2=CVS(Z2$)
  1556. 1556 A(I)=CVS(R$)
  1557. 1557 IF G<0 THEN IF Z1<0 OR Z2<0 THEN GOSUB 1562
  1558. 1558 PRINT #3," ":PRINT #3,"WIRE NO.";I
  1559. 1559 IF X1=X2 AND Y1=Y2 AND Z1=Z2 THEN PRINT"WIRE LENGTH IS ZERO.":GOTO 1537
  1560. 1560 GOSUB 1289
  1561. 1561 RETURN
  1562. 1562 IF IZNEG THEN 1566
  1563. 1563 PRINT"NEGATIVE Z VALUE ENCOUNTERED FOR GROUND PLANE."
  1564. 1564 INPUT "ABORT OR CONVERT NEGATIVE Z VALUE TO ZERO (A/C)? ";A$
  1565. 1565 IF A$="A" THEN 1537 ELSE IF A$="C" THEN IZNEG=1 ELSE 1564
  1566. 1566 IF Z1<0 THEN Z1=-Z1
  1567. 1567 IF Z2<0 THEN Z2=-Z2
  1568. 1568 RETURN
  1569. 1569 REM ********** IDENTIFY OUTPUT DEVICE **********
  1570. 1570 INPUT "OUTPUT TO CONSOLE, PRINTER, OR DISK (C/P/D)";O$
  1571. 1571 IF O$="C" THEN F$="SCRN:":GOTO 1576
  1572. 1572 IF O$="P" THEN F$="LPT1:":GOTO 1576
  1573. 1573 IF O$<>"D" THEN 1570
  1574. 1574 INPUT "FILENAME (NAME.OUT)";F$
  1575. 1575 IF LEFT$(RIGHT$(F$,4),1)="." THEN 1576 ELSE F$=F$+".OUT"
  1576. 1576 OPEN F$ FOR OUTPUT AS #3
  1577. 1577 CLS
  1578. 1578 RETURN
  1579. 1579 REM ********** CALCULATE ELAPSED TIME **********
  1580. 1580 IH=VAL(MID$(T$,1,2))-VAL(MID$(OT$,1,2))
  1581. 1581 IM=VAL(MID$(T$,4,2))-VAL(MID$(OT$,4,2))
  1582. 1582 IS=VAL(MID$(T$,7,2))-VAL(MID$(OT$,7,2))
  1583. 1583 IF IS<0 THEN IS=IS+60:IM=IM-1
  1584. 1584 IF IM<0 THEN IM=IM+60:IH=IH-1
  1585. 1585 IF IH<0 THEN IH=IH+24
  1586. 1586 T$=":"+MID$(STR$(IS+100),3)
  1587. 1587 IF IH THEN T$=MID$(STR$(IH),2)+":"+MID$(STR$(IM+100),3)+T$ ELSE T$=MID$(STR$(IM),2)+T$
  1588. 1588 RETURN
  1589. 1589 REM ********** CALCULATE APPROXIMATE TIME REMAINING **********
  1590. 1590 IPCT=100*PCT
  1591. 1591 T$=TIME$
  1592. 1592 IH=VAL(MID$(T$,1,2))-VAL(MID$(OT$,1,2))
  1593. 1593 IF IH<0 THEN IH=IH+24
  1594. 1594 IM=VAL(MID$(T$,4,2))-VAL(MID$(OT$,4,2))
  1595. 1595 IS=VAL(MID$(T$,7,2))-VAL(MID$(OT$,7,2))
  1596. 1596 IS=IS+60*(IM+60*IH)
  1597. 1597 IS=IS*(1/PCT-1)
  1598. 1598 IM=INT(IS/60)
  1599. 1599 IS=IS MOD 60
  1600. 1600 IH=INT(IM/60)
  1601. 1601 IM=IM MOD 60
  1602. 1602 T$=":"+MID$(STR$(IS+100),3)
  1603. 1603 IF IH THEN T$=MID$(STR$(IH),2)+":"+MID$(STR$(IM+100),3)+T$ ELSE T$=MID$(STR$(IM),2)+T$
  1604. 1604 LOCATE CSRLIN,1
  1605. 1605 PRINT Q$;IPCT;"% COMPLETE - APPROX TIME REMAINING "T$"   ";
  1606. 1606 RETURN
  1607. 1607 END
  1608.