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