1 REM  MININEC(3) ***************** NOSC CODE 822 (JCL CHANGE 12) 1-20-88
  '
  '  INCLUDES THE ACUTE ANGLE KERNEL
  '
	'   BASED ON MININEC(3) - CHANGE 11 OF 7-31-87
	'
	'   NOTES: 1.  MUST USE /MBF OPTION WITH QB87
	'
2 DEFINT I-K, N
3 DIM K!(6, 2), Q(14)
     REM ----- MAXIMUM NUMBER OF PULSES = MP
	 REM $DYNAMIC
	 MP = 50
4         DIM C%(MP, 2), CI(MP), CR(MP), P(MP), W%(MP)
5         DIM ZR(MP, MP), ZI(MP, MP)
     REM ----- MAXIMUM NUMBER OF WIRES = MW
	 MW = 50
	 DIM A(MW), CA(MW), CB(MW), CG(MW), J1(MW), J2(MW, 2), N(MW, 2), S(MW)
     REM ----- MAXIMUM NUMBER OF SEGMENTS (PULSES + 2 * WIRES) = MS
	 MS = MP + 2 * MW
6 DIM X(MS), Y(MS), Z(MS)
10 REM ----- MAXIMUM NUMBER OF LOADS = ML
11 ML = 12
12 REM ----- MAXIMUM ORDER OF S-DOMAIN LOADS = MA
13 MA = ML
14 DIM LA(2, ML, ML), LP(ML), LS(ML)
15 REM ----- MAXIMUM NUMBER OF MEDIA = 6
16 MM = 6
17 REM ----- H MUST BE DIMENSIONED AT LEAST = MM
18 DIM H(MM), T(MM), U(MM), V(MM), Z1(MM), Z2(MM)
23 REM ---- ARRAYS E,L & M DIMENSIONED TO MW+MP
24 DIM E(MW + MP), L(MW + MP), M(MW + MP)
25 COLOR 2, 0
26 GOTO 1497
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
      REM ----- ADDITION FOR ACUTE ANGLE BETWEEN WIRES -- 1-88
	 IF IFLG = 0 THEN 44
	 REM ----- EXACT KERNEL FOR DIFFERENT WIRES
	    LL = X3 * CA(P4) + Y3 * CB(P4) + Z3 * CG(P4)
	    LL2 = LL * LL
	    RHO = SQR(D3 - LL2 + AM2)
	    D = SQR(LL2 + RHO * RHO)
	    RN = RHO - A(P4)
	    RP = RHO + A(P4)
	    RN2 = RN * RN
	    RP2 = RP * RP
	    B = (LL2 + RN2) / (LL2 + RP2)
	    TT = LOG((LL2 + RN2) / RP2 / 16) / RP
	 GOTO 45
43 REM ----- EXACT KERNEL CALCULATION WITH ELLIPTIC INTEGRAL
44 B = D3 / (D3 + 4 * A2)
      REM ----- ADDITION FOR ACUTE ANGLE BETWEEN WIRES -- 1-88
	 TT = LOG(D3 / 64 / A2) / 2 / A(P4)
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)
      REM ----- ADDITION FOR ACUTE ANGLE BETWEEN WIRES -- 1-88
	 IF IFLG = 1 THEN V0 = V0 / SQR(RHO * A(P4)) ELSE V0 = V0 / A(P4)
	 T3 = T3 + (V0 + TT) / P - 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
      REM ----- ADDITION FOR ACUTE ANGLE BETWEEN WIRES -- 1-88
	    IFLG = 0
	    F2 = 2 * (P3 - P2)
	    FVS1 = 1
	    IF FVS = 0 THEN FVS1 = 2
	    IF (D0 + D3) > ((S(P4) + A(P4)) / FVS1) THEN 154 ELSE 161
	 REM ----- I1 FOR DIFFERENT WIRES
154            LV = -(V1 * CA(P4) + V2 * CB(P4) + V3 * CG(P4))
	    LU = -(X2 * CA(P4) + Y2 * CB(P4) + Z2 * CG(P4))
	    RHOV = SQR(D3 * D3 - LV * LV + AM2)
	    RHOU = SQR(D0 * D0 - LU * LU + AM2)
	    RHO = RHOU
	    LL = LU
160      RN = RHO - A(P4)
	    RP = RHO + A(P4)
	    TF = 0
	    IF LL <> 0 THEN TF = LL * (LOG(LL * LL + RN * RN) / 2 - LOG(4 * RP) - 1)
	    X = 0
	    IF RN <> 0 THEN X = LL / RN
	    IF X < 100 THEN TT = RN * ATN(X) ELSE TT = RN * (P * SGN(LL) / 2 - RN / LL)
	    I6! = I6! + 2 * (TF + TT) / P / RP / S4
	 IF IFLG = 1 THEN 167
	    RHO = RHOV
	    LL = LV
	    I6! = -I6!
	    IFLG = 1
	 GOTO 160
	 REM -----  SELF TERM
161         IF A(P4) > SRM THEN 163
	    IF FVS = 1 THEN 91 ELSE 106
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 * Z7)) / 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 428
197 IF FLG = 2 THEN 477
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))
     REM ----- ADDITION FOR ACUTE ANGLE BETWEEN WIRES -- 1-88
	REM ----- SQUARE OF LARGEST MATCH POINT RADIUS
	   AM2 = A(I1)
	   IF AM2 < A(I2) THEN AM2 = A(I2)
	   AM2 = AM2 * AM2
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 1599
336 NEXT I
337 REM ----- END MATRIX FILL TIME CALCULATION
338 T$ = TIME$
339 GOSUB 1589
340 PRINT #3, " "
341 PRINT #3, "FILL MATRIX  : "; T$
342 REM ********** ADDITION OF LOADS **********
343 IF NL = 0 THEN 377
344 F5 = 2 * P * F * 1000000!
345 FOR I = 1 TO NL
346 IF LS(I) < 1 THEN 366
347 REM ----- S-DOMAIN 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 S = -S
355 U1 = U1 + LA(1, I, J) * S * F5 ^ J
356 D1 = D1 + LA(2, I, J) * S * F5 ^ J
357 L = J + 1
358 U2 = U2 + LA(1, I, L) * S * F5 ^ L
359 D2 = D2 + LA(2, I, L) * S * F5 ^ L
360 NEXT J
361 J = LP(I)
362 D = D1 * D1 + D2 * D2
363 LI = (U2 * D1 - D2 * U1) / D
364 LR = (U1 * D1 + U2 * D2) / D
365 GOTO 369
366 LR = LA(1, I, 1)
367 LI = LA(2, I, 1)
368 J = LP(I)
369 F2 = 1 / M
370 IF C%(J, 1) <> -C%(J, 2) THEN 372
371 IF K < 0 THEN F2 = 2 / M
372 ZR(J, J) = ZR(J, J) + F2 * LI
373 ZI(J, J) = ZI(J, J) - F2 * LR
374 NEXT I
375 REM ********** IMPEDANCE MATRIX FACTORIZATION **********
376 REM ----- BEGIN MATRIX FACTOR TIME CALCULATION
377 OT$ = TIME$
378 Q$ = "FACTOR MATRIX"
379 PRINT
380 PRINT "BEGIN "; Q$;
381 X = N
382 PCTN = X * (X - 1) * (X + X - 1)
383 FOR K = 1 TO N - 1
384 REM ----- SEARCH FOR PIVOT
385 T = ZR(K, K) * ZR(K, K) + ZI(K, K) * ZI(K, K)
386 I1 = K
387 FOR I = K + 1 TO N
388 T1 = ZR(I, K) * ZR(I, K) + ZI(I, K) * ZI(I, K)
389 IF T1 < T THEN 392
390 I1 = I
391 T = T1
392 NEXT I
393 REM ----- EXCHANGE ROWS K AND I1
394 IF I1 = K THEN 403
395 FOR J = 1 TO N
396 T1 = ZR(K, J)
397 T2 = ZI(K, J)
398 ZR(K, J) = ZR(I1, J)
399 ZI(K, J) = ZI(I1, J)
400 ZR(I1, J) = T1
401 ZI(I1, J) = T2
402 NEXT J
403 P(K) = I1
404 REM ----- SUBTRACT ROW K FROM ROWS K+1 TO N
405 FOR I = K + 1 TO N
406 REM ----- COMPUTE MULTIPLIER L(I,K)
407 T1 = (ZR(I, K) * ZR(K, K) + ZI(I, K) * ZI(K, K)) / T
408 T2 = (ZI(I, K) * ZR(K, K) - ZR(I, K) * ZI(K, K)) / T
409 ZR(I, K) = T1
410 ZI(I, K) = T2
411 REM ----- SUBTRACT ROW K FROM ROW I
412 FOR J = K + 1 TO N
413 ZR(I, J) = ZR(I, J) - (ZR(K, J) * T1 - ZI(K, J) * T2)
414 ZI(I, J) = ZI(I, J) - (ZR(K, J) * T2 + ZI(K, J) * T1)
415 NEXT J
416 NEXT I
417 X = N - K
418 PCT = 1 - X * (X - 1) * (X + X - 1) / PCTN
419 GOSUB 1599
420 NEXT K
421 REM ----- END MATRIX FACTOR TIME CALCULATION
422 T$ = TIME$
423 GOSUB 1589
424 PRINT
425 PRINT #3, "FACTOR MATRIX: "; T$
426 REM ********** SOLVE **********
427 REM ----- COMPUTE RIGHT HAND SIDE
428 FOR I = 1 TO N
429 CR(I) = 0
430 CI(I) = 0
431 NEXT I
432 FOR J = 1 TO NS
433 F2 = 1 / M
434 IF C%(E(J), 1) = -C%(E(J), 2) THEN F2 = 2 / M
435 CR(E(J)) = F2 * M(J)
436 CI(E(J)) = -F2 * L(J)
437 NEXT J
438 REM ----- PERMUTE EXCITATION
439 FOR K = 1 TO N - 1
440 I1 = P(K)
441 IF I1 = K THEN 448
442 T1 = CR(K)
443 T2 = CI(K)
444 CR(K) = CR(I1)
445 CI(K) = CI(I1)
446 CR(I1) = T1
447 CI(I1) = T2
448 NEXT K
449 REM ----- FORWARD ELIMINATION
450 FOR I = 2 TO N
451 T1 = 0
452 T2 = 0
453 FOR J = 1 TO I - 1
454 T1 = T1 + ZR(I, J) * CR(J) - ZI(I, J) * CI(J)
455 T2 = T2 + ZR(I, J) * CI(J) + ZI(I, J) * CR(J)
456 NEXT J
457 CR(I) = CR(I) - T1
458 CI(I) = CI(I) - T2
459 NEXT I
460 REM ----- BACK SUBSTITUTION
461 FOR I = N TO 1 STEP -1
462 T1 = 0
463 T2 = 0
464 IF I = N THEN 469
465 FOR J = I + 1 TO N
466 T1 = T1 + ZR(I, J) * CR(J) - ZI(I, J) * CI(J)
467 T2 = T2 + ZR(I, J) * CI(J) + ZI(I, J) * CR(J)
468 NEXT J
469 T = ZR(I, I) * ZR(I, I) + ZI(I, I) * ZI(I, I)
470 T1 = CR(I) - T1
471 T2 = CI(I) - T2
472 CR(I) = (T1 * ZR(I, I) + T2 * ZI(I, I)) / T
473 CI(I) = (T2 * ZR(I, I) - T1 * ZI(I, I)) / T
474 NEXT I
475 FLG = 2
476 REM ********** SOURCE DATA **********
477 PRINT #3, " "
478 PRINT #3, B$; "    SOURCE DATA     "; B$
479 PWR = 0
480 FOR I = 1 TO NS
481 CR = CR(E(I))
482 CI = CI(E(I))
483 T = CR * CR + CI * CI
484 T1 = (L(I) * CR + M(I) * CI) / T
485 T2 = (M(I) * CR - L(I) * CI) / T
486 O2 = (L(I) * CR + M(I) * CI) / 2
487 PWR = PWR + O2
488 PRINT #3, "PULSE "; E(I), "VOLTAGE = ("; L(I); ","; M(I); "J)"
489 PRINT #3, " ", "CURRENT = ("; CR; ","; CI; "J)"
490 PRINT #3, " ", "IMPEDANCE = ("; T1; ","; T2; "J)"
491 PRINT #3, " ", "POWER = "; O2; " WATTS"
492 NEXT I
493 IF NS > 1 THEN PRINT #3, " "
494 IF NS > 1 THEN PRINT #3, "TOTAL POWER = "; PWR; "WATTS"
495 RETURN
496 REM ********** PRINT CURRENTS **********
497 GOSUB 196
498 S$ = "N"
499 PRINT #3, " "
500 PRINT #3, B$; "    CURRENT DATA    "; B$
501 FOR K = 1 TO NW
502 IF S$ = "Y" THEN 507
503 PRINT #3, " "
504 PRINT #3, "WIRE NO. "; K; ":"
505 PRINT #3, "PULSE", "REAL", "IMAGINARY", "MAGNITUDE", "PHASE"
506 PRINT #3, " NO.", "(AMPS)", "(AMPS)", "(AMPS)", "(DEGREES)"
507 N1 = N(K, 1)
508 N2 = N(K, 2)
509 I = N1
510 C = C%(I, 1)
511 IF (N1 = 0 AND N2 = 0) THEN C = K
512 IF G = 1 THEN 515
513 IF (J1(K) = -1 AND N1 > N2) THEN N2 = N1
514 IF J1(K) = -1 THEN 525
515 E% = 1
516 GOSUB 572
517 I2! = I1!
518 J2! = J1!
519 GOSUB 607
520 IF S$ = "N" THEN PRINT #3, I$, I1!; TAB(29); J1!; TAB(43); S1; TAB(57); S2
521 IF S$ = "Y" THEN PRINT #1, I1!; ","; J1!; ","; S1; ","; S2
522 IF N1 = 0 THEN 532
523 IF C = K THEN 525
524 IF I$ = "J" THEN N1 = N1 + 1
525 FOR I = N1 TO N2 - 1
526 I2! = CR(I)
527 J2! = CI(I)
528 GOSUB 607
529 IF S$ = "N" THEN PRINT #3, I, CR(I); TAB(29); CI(I); TAB(43); S1; TAB(57); S2
530 IF S$ = "Y" THEN PRINT #1, CR(I); ","; CI(I); ","; S1; ","; S2
531 NEXT I
532 I = N2
533 C = C%(I, 2)
534 IF (N1 = 0 AND N2 = 0) THEN C = K
535 IF G = 1 THEN 537
536 IF J1(K) = 1 THEN 543
537 E% = 2
538 GOSUB 572
539 IF (N1 = 0 AND N2 = 0) THEN 549
540 IF N1 > N2 THEN 549
541 IF C = K THEN 543
542 IF I$ = "J" THEN 549
543 I2! = CR(N2)
544 J2! = CI(N2)
545 GOSUB 607
546 IF S$ = "N" THEN PRINT #3, N2, CR(N2); TAB(29); CI(N2); TAB(43); S1; TAB(57); S2
547 IF S$ = "Y" THEN PRINT #1, CR(N2); ","; CI(N2); ","; S1; ","; S2
548 IF J1(K) = 1 THEN 554
549 I2! = I1!
550 J2! = J1!
551 GOSUB 607
552 IF S$ = "N" THEN PRINT #3, I$, I1!; TAB(29); J1!; TAB(43); S1; TAB(57); S2
553 IF S$ = "Y" THEN PRINT #1, I1!; ","; J1!; ","; S1; ","; S2
554 IF S$ = "Y" THEN PRINT #1, " 1 , 1 , 1 , 1"
555 NEXT K
556 IF S$ = "Y" THEN 569
557 PRINT
558 INPUT "SAVE CURRENTS TO A FILE (Y/N) "; S$
559 IF S$ = "N" THEN 569
560 IF S$ <> "Y" THEN 557
561 PRINT #3, " "
562 INPUT "FILENAME (NAME.OUT) "; F$
563 IF LEFT$(RIGHT$(F$, 4), 1) = "." THEN 564 ELSE F$ = F$ + ".OUT"
564 IF O$ > "C" THEN PRINT #3, "FILENAME (NAME.OUT): "; F$
565 OPEN F$ FOR OUTPUT AS #1
566 PRINT #3, " "
567 PRINT #1, NW; ","; PWR; ",C"
568 GOTO 501
569 CLOSE #1
570 RETURN
571 REM ----- SORT JUNCTION CURRENTS
572 I$ = "E"
573 I1! = 0!
574 J1! = 0!
575 IF (C = K OR C = 0) THEN 580
576 I$ = "J"
577 I1! = CR(I)
578 J1! = CI(I)
579 REM ----- CHECK FOR OTHER OVERLAPPING WIRES
580 FOR J = 1 TO NW
581 IF J = K GOTO 604
582 L1 = N(J, 1)
583 L2 = N(J, 2)
584 IF E% = 2 THEN 590
585 CO = C%(L1, 1)
586 CT = C%(L2, 2)
587 L3 = L1
588 L4 = L2
589 GOTO 594
590 CO = C%(L2, 2)
591 CT = C%(L1, 1)
592 L3 = L2
593 L4 = L1
594 IF CO = -K THEN 596
595 GOTO 599
596 I1! = I1! - CR(L3)
597 J1! = J1! - CI(L3)
598 I$ = "J"
599 IF CT = K THEN 601
600 GOTO 604
601 I1! = I1! + CR(L4)
602 J1! = J1! + CI(L4)
603 I$ = "J"
604 NEXT J
605 RETURN
606 REM ----- CALCULATE S1 AND S2
607 I3! = I2! * I2!
608 J3! = J2! * J2!
609 IF (I3! > 0 OR J3! > 0) THEN 612
610 S1 = 0!
611 GOTO 613
612 S1 = SQR(I3! + J3!)
613 IF I2! <> 0 THEN 616
614 S2 = 0!
615 RETURN
616 S2 = ATN(J2! / I2!) / P0
617 IF I2! > 0 THEN RETURN
618 S2 = S2 + SGN(J2!) * 180
619 RETURN
620 REM ********** FAR FIELD CALCULATION **********
621 IF FLG < 2 THEN GOSUB 196
622 O2 = PWR
623 REM ----- TABULATE IMPEDANCE
624 IF NM = 0 THEN 634
625 FOR I = 1 TO NM
626 Z6 = T(I)
627 Z7 = -V(I) / (2 * P * F * 8.85E-06)
628 REM ----- FORM IMPEDANCE=1/SQR(DIELECTRIC CONSTANT)
629 GOSUB 184
630 D = W6 * W6 + W7 * W7
631 Z1(I) = W6 / D
632 Z2(I) = -W7 / D
633 NEXT I
634 PRINT #3, " "
635 PRINT #3, B$; "     FAR FIELD      "; B$
636 PRINT #3, " "
637 REM ----- INPUT VARIABLES FOR FAR FIELD CALCULATION
638 INPUT "CALCULATE PATTERN IN DBI OR VOLTS/METER (D/V)"; P$
639 IF P$ = "D" THEN 655
640 IF P$ <> "V" THEN 638
641 F1 = 1
642 PRINT
643 PRINT "PRESENT POWER LEVEL =  "; PWR; " WATTS"
644 INPUT "CHANGE POWER LEVEL (Y/N) "; A$
645 IF A$ = "N" THEN 650
646 IF A$ <> "Y" THEN 644
647 INPUT "NEW POWER LEVEL (WATTS)  "; O2
648 IF O$ > "C" THEN PRINT #3, "NEW POWER LEVEL = "; O2
649 GOTO 644
650 IF (O2 < 0 OR O2 = 0) THEN O2 = PWR
651 F1 = SQR(O2 / PWR)
652 PRINT
653 INPUT "RADIAL DISTANCE (METERS) "; RD
654 IF RD < 0 THEN RD = 0
655 A$ = "ZENITH ANGLE : INITIAL,INCREMENT,NUMBER"
656 PRINT A$;
657 INPUT ZA, ZC, NZ
658 IF NZ = 0 THEN NZ = 1
659 IF O$ > "C" THEN PRINT #3, A$; ": "; ZA; ","; ZC; ","; NZ
660 A$ = "AZIMUTH ANGLE: INITIAL,INCREMENT,NUMBER"
661 PRINT A$;
662 INPUT AA, AC, NA
663 IF NA = 0 THEN NA = 1
664 IF O$ > "C" THEN PRINT #3, A$; ": "; AA; ","; AC; ","; NA
665 PRINT #3, " "
666 REM ********** FILE FAR FIELD DATA **********
667 INPUT "FILE PATTERN (Y/N)"; S$
668 IF S$ = "N" THEN 676
669 IF S$ <> "Y" THEN 667
670 PRINT #3, " "
671 INPUT "FILENAME (NAME.OUT)"; F$
672 IF LEFT$(RIGHT$(F$, 4), 1) = "." THEN 673 ELSE F$ = F$ + ".OUT"
673 IF O$ > "C" THEN PRINT #3, "FILENAME (NAME.OUT): "; F$
674 OPEN F$ FOR OUTPUT AS #1
675 PRINT #1, NA * NZ; ","; O2; ","; P$
676 PRINT #3, " "
677 K9! = .016678 / PWR
678 REM ----- PATTERN HEADER
679 PRINT #3, B$; "    PATTERN DATA    "; B$
680 IF P$ = "V" GOTO 685
681 PRINT #3, "ZENITH", "AZIMUTH", "VERTICAL", "HORIZONTAL", "TOTAL"
682 A$ = "PATTERN (DB)"
683 PRINT #3, " ANGLE", " ANGLE", A$, A$, A$
684 GOTO 692
685 IF RD > 0 THEN PRINT #3, TAB(15); "RADIAL DISTANCE = "; RD; " METERS"
686 PRINT #3, TAB(15); "POWER LEVEL = "; PWR * F1 * F1; " WATTS"
687 PRINT #3, "ZENITH   AZIMUTH", "     E(THETA)     ", "     E(PHI)"
688 A$ = " MAG(V/M)    PHASE(DEG)"
689 PRINT #3, " ANGLE    ANGLE", A$, A$
690 IF S$ = "Y" THEN PRINT #1, RD
691 REM ----- LOOP OVER AZIMUTH ANGLE
692 Q1 = AA
693 FOR I1 = 1 TO NA
694 U3 = Q1 * P0
695 V1 = -SIN(U3)
696 V2 = COS(U3)
697 REM ----- LOOP OVER ZENITH ANGLE
698 Q2 = ZA
699 FOR I2 = 1 TO NZ
700 U4 = Q2 * P0
701 R3 = COS(U4)
702 T3 = -SIN(U4)
703 T1 = R3 * V2
704 T2 = -R3 * V1
705 R1 = -T3 * V2
706 R2 = T3 * V1
707 X1 = 0
708 Y1 = 0
709 Z1 = 0
710 X2 = 0
711 Y2 = 0
712 Z2 = 0
713 REM ----- IMAGE LOOP
714 FOR K = 1 TO G STEP -2
715 FOR I = 1 TO N
716 IF K > 0 THEN 718
717 IF C%(I, 1) = -C%(I, 2) THEN 813
718 J = 2 * W%(I) - 1 + I
719 REM ----- FOR EACH END OF PULSE COMPUTE A CONTRIBUTION TO E-FIELD
720 FOR F5 = 1 TO 2
721 L = ABS(C%(I, F5))
722 F3 = SGN(C%(I, F5)) * W * S(L) / 2
723 IF C%(I, 1) <> -C%(I, 2) THEN 725
724 IF F3 < 0 THEN 812
725 IF K = 1 THEN 728
726 IF NM <> 0 THEN 747
727 REM ----- STANDARD CASE
728 S2 = W * (X(J) * R1 + Y(J) * R2 + Z(J) * K * R3)
729 S1 = COS(S2)
730 S2 = SIN(S2)
731 B1 = F3 * (S1 * CR(I) - S2 * CI(I))
732 B2 = F3 * (S1 * CI(I) + S2 * CR(I))
733 IF C%(I, 1) = -C%(I, 2) THEN 742
734 X1 = X1 + K * B1 * CA(L)
735 X2 = X2 + K * B2 * CA(L)
736 Y1 = Y1 + K * B1 * CB(L)
737 Y2 = Y2 + K * B2 * CB(L)
738 Z1 = Z1 + B1 * CG(L)
739 Z2 = Z2 + B2 * CG(L)
740 GOTO 812
741 REM ----- GROUNDED ENDS
742 Z1 = Z1 + 2 * B1 * CG(L)
743 Z2 = Z2 + 2 * B2 * CG(L)
744 GOTO 812
745 REM ----- REAL GROUND CASE
746 REM ----- BEGIN BY FINDING SPECULAR DISTANCE
747 T4 = 100000!
748 IF R3 = 0 THEN 750
749 T4 = -Z(J) * T3 / R3
750 B9 = T4 * V2 + X(J)
751 IF TB = 1 THEN 755
752 B9 = B9 * B9 + (Y(J) - T4 * V1) ^ 2
753 IF B9 > 0 THEN B9 = SQR(B9) ELSE 755
754 REM ----- SEARCH FOR THE CORRESPONDING MEDIUM
755 J2 = NM
756 FOR J1 = NM TO 1 STEP -1
757 IF B9 > U(J1) THEN 759
758 J2 = J1
759 NEXT J1
760 REM ----- OBTAIN IMPEDANCE AT SPECULAR POINT
761 Z4 = Z1(J2)
762 Z5 = Z2(J2)
763 REM ----- IF PRESENT INCLUDE GROUND SCREEN IMPEDANCE IN PARALLEL
764 IF NR = 0 THEN 776
765 IF B9 > U(1) THEN 776
766 R = B9 + NR * RR
767 Z8 = W * R * LOG(R / (NR * RR)) / NR
768 S8 = -Z5 * Z8
769 S9 = Z4 * Z8
770 T8 = Z4
771 T9 = Z5 + Z8
772 D = T8 * T8 + T9 * T9
773 Z4 = (S8 * T8 + S9 * T9) / D
774 Z5 = (S9 * T8 - S8 * T9) / D
775 REM ----- FORM SQR(1-Z^2*SIN^2)
776 Z6 = 1 - (Z4 * Z4 - Z5 * Z5) * T3 * T3
777 Z7 = -(2 * Z4 * Z5) * T3 * T3
778 GOSUB 184
779 REM ----- VERTICAL REFLECTION COEFFICIENT
780 S8 = R3 - (W6 * Z4 - W7 * Z5)
781 S9 = -(W6 * Z5 + W7 * Z4)
782 T8 = R3 + (W6 * Z4 - W7 * Z5)
783 T9 = W6 * Z5 + W7 * Z4
784 D = T8 * T8 + T9 * T9
785 V8 = (S8 * T8 + S9 * T9) / D
786 V9 = (S9 * T8 - S8 * T9) / D
787 REM ----- HORIZONTAL REFLECTION COEFFICIENT
788 S8 = W6 - R3 * Z4
789 S9 = W7 - R3 * Z5
790 T8 = W6 + R3 * Z4
791 T9 = W7 + R3 * Z5
792 D = T8 * T8 + T9 * T9
793 H8 = (S8 * T8 + S9 * T9) / D - V8
794 H9 = (S9 * T8 - S8 * T9) / D - V9
795 REM ----- COMPUTE CONTRIBUTION TO SUM
796 S2 = W * (X(J) * R1 + Y(J) * R2 - (Z(J) - 2 * H(J2)) * R3)
797 S1 = COS(S2)
798 S2 = SIN(S2)
799 B1 = F3 * (S1 * CR(I) - S2 * CI(I))
800 B2 = F3 * (S1 * CI(I) + S2 * CR(I))
801 W6 = B1 * V8 - B2 * V9
802 W7 = B1 * V9 + B2 * V8
803 D = CA(L) * V1 + CB(L) * V2
804 Z6 = D * (B1 * H8 - B2 * H9)
805 Z7 = D * (B1 * H9 + B2 * H8)
806 X1 = X1 - (CA(L) * W6 + V1 * Z6)
807 X2 = X2 - (CA(L) * W7 + V1 * Z7)
808 Y1 = Y1 - (CB(L) * W6 + V2 * Z6)
809 Y2 = Y2 - (CB(L) * W7 + V2 * Z7)
810 Z1 = Z1 + CG(L) * W6
811 Z2 = Z2 + CG(L) * W7
812 NEXT F5
813 NEXT I
814 NEXT K
815 H2 = -(X1 * T1 + Y1 * T2 + Z1 * T3) * G0
816 H1 = (X2 * T1 + Y2 * T2 + Z2 * T3) * G0
817 X4 = -(X1 * V1 + Y1 * V2) * G0
818 X3 = (X2 * V1 + Y2 * V2) * G0
819 IF P$ = "D" THEN 827
820 IF RD = 0 THEN 842
821 H1 = H1 / RD
822 H2 = H2 / RD
823 X3 = X3 / RD
824 X4 = X4 / RD
825 GOTO 842
826 REM ----- PATTERN IN DB
827 P1 = -999
828 P2 = P1
829 P3 = P1
830 T1 = K9! * (H1 * H1 + H2 * H2)
831 T2 = K9! * (X3 * X3 + X4 * X4)
832 T3 = T1 + T2
833 REM ----- CALCULATE VALUES IN DB
834 IF T1 > 1E-30 THEN P1 = 4.343 * LOG(T1)
835 IF T2 > 1E-30 THEN P2 = 4.343 * LOG(T2)
836 IF T3 > 1E-30 THEN P3 = 4.343 * LOG(T3)
837 PRINT #3, Q2; TAB(15); Q1; TAB(29); P1; TAB(43); P2; TAB(57); P3
838 IF S$ = "Y" THEN PRINT #1, Q2; ","; Q1; ","; P1; ","; P2; ","; P3
839 GOTO 866
840 REM ----- PATTERN IN VOLTS/METER
841 REM ----- MAGNITUDE AND PHASE OF E(THETA)
842 S1 = 0
843 IF (H1 = 0 AND H2 = 0) THEN 845
844 S1 = SQR(H1 * H1 + H2 * H2)
845 IF H1 <> 0 THEN 848
846 S2 = 0
847 GOTO 851
848 S2 = ATN(H2 / H1) / P0
849 IF H1 < 0 THEN S2 = S2 + SGN(H2) * 180
850 REM ----- MAGNITUDE AND PHASE OF E(PHI)
851 S3 = 0
852 IF (X3 = 0 AND X4 = 0) THEN 854
853 S3 = SQR(X3 * X3 + X4 * X4)
854 IF X3 <> 0 THEN 857
855 S4 = 0
856 GOTO 859
857 S4 = ATN(X4 / X3) / P0
858 IF X3 < 0 THEN S4 = S4 + SGN(X4) * 180
859 PRINT #3, USING "###.##    "; Q2, Q1;
860 PRINT #3, USING "       ##.###^^^^"; S1 * F1;
861 PRINT #3, USING "   ###.##   "; S2;
862 PRINT #3, USING "       ##.###^^^^"; S3 * F1;
863 PRINT #3, USING "   ###.##"; S4
864 IF S$ = "Y" THEN PRINT #1, Q2; ","; Q1; ","; S1 * F1; ","; S2; ","; S3 * F1; ","; S4
865 REM ----- INCREMENT ZENITH ANGLE
866 Q2 = Q2 + ZC
867 NEXT I2
868 REM ----- INCREMENT AZIMUTH ANGLE
869 Q1 = Q1 + AC
870 NEXT I1
871 CLOSE #1
872 RETURN
873 REM ********** NEAR FIELD CALCULATION **********
874 REM ----- ENSURE CURRENTS HAVE BEEN CALCULATED
875 IF FLG < 2 THEN GOSUB 196
876 FVS = -1: O2 = PWR
877 PRINT #3, " "
878 PRINT #3, B$; "    NEAR FIELDS     "; B$
879 PRINT #3, " "
880 INPUT "ELECTRIC OR MAGNETIC NEAR FIELDS (E/H) "; N$
881 IF (N$ = "H" OR N$ = "E") GOTO 883
882 GOTO 880
883 PRINT
884 REM ----- INPUT VARIABLES FOR NEAR FIELD CALCULATION
885 PRINT "FIELD LOCATION(S):"
886 A$ = "-COORDINATE (M): INITIAL,INCREMENT,NUMBER "
887 PRINT "   X"; A$;
888 INPUT XI, XC, NX
889 IF NX = 0 THEN NX = 1
890 IF O$ > "C" THEN PRINT #3, "X"; A$; ": "; XI; ","; XC; ","; NX
891 PRINT "   Y"; A$;
892 INPUT YI, YC, NY
893 IF NY = 0 THEN NY = 1
894 IF O$ > "C" THEN PRINT #3, "Y"; A$; ": "; YI; ","; YC; ","; NY
895 PRINT "   Z"; A$;
896 INPUT ZI, ZC, NZ
897 IF NZ = 0 THEN NZ = 1
898 IF O$ > "C" THEN PRINT #3, "Z"; A$; ": "; ZI; ","; ZC; ","; NZ
899 F1 = 1
900 PRINT
901 PRINT "PRESENT POWER LEVEL IS "; PWR; " WATTS"
902 INPUT "CHANGE POWER LEVEL (Y/N) "; A$
903 IF A$ = "N" THEN 908
904 IF A$ <> "Y" THEN 902
905 INPUT "NEW POWER LEVEL (WATTS)  "; O2
906 IF O$ > "C" THEN PRINT #3, " ": PRINT #3, "NEW POWER LEVEL (WATTS) = "; O2
907 GOTO 902
908 IF (O2 < 0 OR O2 = 0) THEN O2 = PWR
909 REM ----- RATIO OF POWER LEVELS
910 F1 = SQR(O2 / PWR)
911 IF N$ = "H" THEN F1 = F1 / S0 / 4 / P
912 PRINT
913 REM ----- DESIGNATION OF OUTPUT FILE FOR NEAR FIELD DATA
914 INPUT "SAVE TO A FILE (Y/N) "; S$
915 IF S$ = "N" THEN 923
916 IF S$ <> "Y" THEN 914
917 INPUT "FILENAME (NAME.OUT)  "; F$
918 IF LEFT$(RIGHT$(F$, 4), 1) = "." THEN 919 ELSE F$ = F$ + ".OUT"
919 IF O$ > "C" THEN PRINT #3, " ": PRINT #3, "FILENAME (NAME.OUT) "; F$
920 OPEN F$ FOR OUTPUT AS #2
921 PRINT #2, NX * NY * NZ; ","; O2; ","; N$
922 REM ----- LOOP OVER Z DIMENSION
923 FOR IZ = 1 TO NZ
924 ZZ = ZI + (IZ - 1) * ZC
925 REM ----- LOOP OVER Y DIMENSION
926 FOR IY = 1 TO NY
927 YY = YI + (IY - 1) * YC
928 REM ----- LOOP OVER X DIMENSION
929 FOR IX = 1 TO NX
930 XX = XI + (IX - 1) * XC
931 REM ----- NEAR FIELD HEADER
932 PRINT #3, " "
933 IF N$ = "E" THEN PRINT #3, B$; "NEAR ELECTRIC FIELDS"; B$
934 IF N$ = "H" THEN PRINT #3, B$; "NEAR MAGNETIC FIELDS"; B$
935 PRINT #3, TAB(10); "FIELD POINT: "; "X = "; XX; " Y = "; YY; " Z = "; ZZ
936 PRINT #3, "  VECTOR", "REAL", "IMAGINARY", "MAGNITUDE", "PHASE"
937 IF N$ = "E" THEN A$ = " V/M "
938 IF N$ = "H" THEN A$ = " AMPS/M "
939 PRINT #3, " COMPONENT  ", A$, A$, A$, " DEG"
940 A1 = 0
941 A3 = 0
942 A4 = 0
943 REM ----- LOOP OVER THREE VECTOR COMPONENTS
944 FOR I = 1 TO 3
945 X0 = XX
946 Y0 = YY
947 Z0 = ZZ
948 IF N$ = "H" THEN 958
949 T5 = 0
950 T6 = 0
951 T7 = 0
952 IF I = 1 THEN T5 = 2 * S0
953 IF I = 2 THEN T6 = 2 * S0
954 IF I = 3 THEN T7 = 2 * S0
955 U7 = 0
956 U8 = 0
957 GOTO 968
958 FOR J8 = 1 TO 6
959 K!(J8, 1) = 0
960 K!(J8, 2) = 0
961 NEXT J8
962 J9 = 1
963 J8 = -1
964 IF I = 1 THEN X0 = XX + J8 * S0 / 2
965 IF I = 2 THEN Y0 = YY + J8 * S0 / 2
966 IF I = 3 THEN Z0 = ZZ + J8 * S0 / 2
967 REM ----- LOOP OVER SOURCE SEGMENTS
968 FOR J = 1 TO N
969 J1 = ABS(C%(J, 1))
970 J2 = ABS(C%(J, 2))
971 J3 = J2
972 IF J1 > J2 THEN J3 = J1
973 F4 = SGN(C%(J, 1))
974 F5 = SGN(C%(J, 2))
975 F6 = 1
976 F7 = 1
977 U5 = 0
978 U6 = 0
979 REM ----- IMAGE LOOP
980 FOR K = 1 TO G STEP -2
981 IF C%(J, 1) <> -C%(J, 2) THEN 987
982 IF K < 0 THEN 1048
983 REM ----- COMPUTE VECTOR POTENTIAL A
984 F6 = F4
985 F7 = F5
986 REM ----- COMPUTE PSI(0,J,J+.5)
987 P1 = 0
988 P2 = 2 * J3 + J - 1
989 P3 = P2 + .5
990 P4 = J2
991 GOSUB 75
992 U1 = T1 * F5
993 U2 = T2 * F5
994 REM ----- COMPUTE PSI(0,J-.5,J)
995 P3 = P2
996 P2 = P2 - .5
997 P4 = J1
998 GOSUB 66
999 V1 = F4 * T1
1000 V2 = F4 * T2
1001 REM ----- REAL PART OF VECTOR POTENTIAL CONTRIBUTION
1002 X3 = U1 * CA(J2) + V1 * CA(J1)
1003 Y3 = U1 * CB(J2) + V1 * CB(J1)
1004 Z3 = (F7 * U1 * CG(J2) + F6 * V1 * CG(J1)) * K
1005 REM ----- IMAGINARY PART OF VECTOR POTENTIAL CONTRIBUTION
1006 X5 = U2 * CA(J2) + V2 * CA(J1)
1007 Y5 = U2 * CB(J2) + V2 * CB(J1)
1008 Z5 = (F7 * U2 * CG(J2) + F6 * V2 * CG(J1)) * K
1009 REM ----- MAGNETIC FIELD CALCULATION COMPLETED
1010 IF N$ = "H" THEN 1042
1011 D1 = (X3 * T5 + Y3 * T6 + Z3 * T7) * W2
1012 D2 = (X5 * T5 + Y5 * T6 + Z5 * T7) * W2
1013 REM ----- COMPUTE PSI(.5,J,J+1)
1014 P1 = .5
1015 P2 = P3
1016 P3 = P3 + 1
1017 P4 = J2
1018 GOSUB 56
1019 U1 = T1
1020 U2 = T2
1021 REM ----- COMPUTE PSI(-.5,J,J+1)
1022 P1 = -P1
1023 GOSUB 56
1024 U1 = (T1 - U1) / S(J2)
1025 U2 = (T2 - U2) / S(J2)
1026 REM ----- COMPUTE PSI(.5,J-1,J)
1027 P1 = -P1
1028 P3 = P2
1029 P2 = P2 - 1
1030 P4 = J1
1031 GOSUB 56
1032 U3 = T1
1033 U4 = T2
1034 REM ----- COMPUTE PSI(-.5,J-1,J)
1035 P1 = -P1
1036 GOSUB 56
1037 REM ----- GRADIENT OF SCALAR POTENTIAL
1038 U5 = (U1 + (U3 - T1) / S(J1) + D1) * K + U5
1039 U6 = (U2 + (U4 - T2) / S(J1) + D2) * K + U6
1040 GOTO 1048
1041 REM ----- COMPONENTS OF VECTOR POTENTIAL A
1042 K!(1, J9) = K!(1, J9) + (X3 * CR(J) - X5 * CI(J)) * K
1043 K!(2, J9) = K!(2, J9) + (X5 * CR(J) + X3 * CI(J)) * K
1044 K!(3, J9) = K!(3, J9) + (Y3 * CR(J) - Y5 * CI(J)) * K
1045 K!(4, J9) = K!(4, J9) + (Y5 * CR(J) + Y3 * CI(J)) * K
1046 K!(5, J9) = K!(5, J9) + (Z3 * CR(J) - Z5 * CI(J)) * K
1047 K!(6, J9) = K!(6, J9) + (Z5 * CR(J) + Z3 * CI(J)) * K
1048 NEXT K
1049 IF N$ = "H" THEN 1052
1050 U7 = U5 * CR(J) - U6 * CI(J) + U7
1051 U8 = U6 * CR(J) + U5 * CI(J) + U8
1052 NEXT J
1053 IF N$ = "E" THEN 1075
1054 REM ----- DIFFERENCES OF VECTOR POTENTIAL A
1055 J8 = 1
1056 J9 = J9 + 1
1057 IF J9 = 2 THEN 964
1058 ON I GOTO 1059, 1064, 1069
1059 H(3) = K!(5, 1) - K!(5, 2)
1060 H(4) = K!(6, 1) - K!(6, 2)
1061 H(5) = K!(3, 2) - K!(3, 1)
1062 H(6) = K!(4, 2) - K!(4, 1)
1063 GOTO 1097
1064 H(1) = K!(5, 2) - K!(5, 1)
1065 H(2) = K!(6, 2) - K!(6, 1)
1066 H(5) = H(5) - K!(1, 2) + K!(1, 1)
1067 H(6) = H(6) - K!(2, 2) + K!(2, 1)
1068 GOTO 1097
1069 H(1) = H(1) - K!(3, 2) + K!(3, 1)
1070 H(2) = H(2) - K!(4, 2) + K!(4, 1)
1071 H(3) = H(3) + K!(1, 2) - K!(1, 1)
1072 H(4) = H(4) + K!(2, 2) - K!(2, 1)
1073 GOTO 1097
1074 REM ----- IMAGINARY PART OF ELECTRIC FIELD
1075 U7 = -M * U7 / S0
1076 REM ----- REAL PART OF ELECTRIC FIELD
1077 U8 = M * U8 / S0
1078 REM ----- MAGNITUDE AND PHASE CALCULATION
1079 S1 = 0
1080 IF (U7 = 0 AND U8 = 0) THEN 1082
1081 S1 = SQR(U7 * U7 + U8 * U8)
1082 S2 = 0
1083 IF U8 <> 0 THEN S2 = ATN(U7 / U8) / P0
1084 IF U8 > 0 THEN 1086
1085 S2 = S2 + SGN(U7) * 180
1086 IF I = 1 THEN PRINT #3, "   X  ",
1087 IF I = 2 THEN PRINT #3, "   Y  ",
1088 IF I = 3 THEN PRINT #3, "   Z  ",
1089 PRINT #3, TAB(15); F1 * U8; TAB(29); F1 * U7; TAB(43); F1 * S1; TAB(57); S2
1090 IF S$ = "Y" THEN PRINT #2, F1 * U8; ","; F1 * U7; ","; F1 * S1; ","; S2
1091 REM ----- CALCULATION FOR PEAK ELECTRIC FIELD
1092 S1 = S1 * S1
1093 S2 = S2 * P0
1094 A1 = A1 + S1 * COS(2 * S2)
1095 A3 = A3 + S1 * SIN(2 * S2)
1096 A4 = A4 + S1
1097 NEXT I
1098 IF N$ = "E" THEN 1121
1099 REM ----- MAGNETIC FIELD MAGNITUDE AND PHASE CALCULATION
1100 FOR I = 1 TO 5 STEP 2
1101 S1 = 0
1102 IF (H(I) = 0 AND H(I + 1) = 0) THEN 1104
1103 S1 = SQR(H(I) * H(I) + H(I + 1) * H(I + 1))
1104 S2 = 0
1105 IF H(I) <> 0 THEN S2 = ATN(H(I + 1) / H(I)) / P0
1106 IF H(I) > 0 THEN 1108
1107 S2 = S2 + SGN(H(I + 1)) * 180
1108 IF I = 1 THEN PRINT #3, "   X  ",
1109 IF I = 3 THEN PRINT #3, "   Y  ",
1110 IF I = 5 THEN PRINT #3, "   Z  ",
1111 PRINT #3, TAB(15); F1 * H(I); TAB(29); F1 * H(I + 1); TAB(43); F1 * S1; TAB(57); S2
1112 IF S$ = "Y" THEN PRINT #2, F1 * H(I); ","; F1 * H(I + 1); ","; F1 * S1; ","; S2
1113 REM ----- CALCULATION FOR PEAK MAGNETIC FIELD
1114 S1 = S1 * S1
1115 S2 = S2 * P0
1116 A1 = A1 + S1 * COS(2 * S2)
1117 A3 = A3 + S1 * SIN(2 * S2)
1118 A4 = A4 + S1
1119 NEXT I
1120 REM ----- PEAK FIELD CALCULATION
1121 PK = SQR(A4 / 2 + SQR(A1 * A1 + A3 * A3) / 2)
1122 PRINT #3, "   MAXIMUM OR PEAK FIELD = "; F1 * PK; A$
1123 IF (S$ = "Y" AND N$ = "E") THEN PRINT #2, F1 * PK; ","; O2
1124 IF (S$ = "Y" AND N$ = "H") THEN PRINT #2, F1 * PK; ","; O2
1125 IF S$ = "Y" THEN PRINT #2, XX; ","; YY; ","; ZZ
1126 NEXT IX
1127 NEXT IY
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 1369
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 1557: 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 1299
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 1247
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 GOTO 1255
1246 REM ---- SINGLE SEGMEN 0 PULSE CASE
1247 I1 = N1 + 2 * (I - 1)
1248 X(I1) = X1
1249 Y(I1) = Y1
1250 Z(I1) = Z1
1251 I1 = I1 + 1
1252 X(I1) = X2
1253 Y(I1) = Y2
1254 Z(I1) = Z2
1255 NEXT I
1256 REM ********** GEOMETRY OUTPUT **********
1257 PRINT #3, " "
1258 PRINT #3, "                  **** ANTENNA GEOMETRY ****"
1259 IF N > 0 THEN 1264
1260 PRINT
1261 PRINT "NUMBER OF PULSES IS ZERO....RE-ENTER GEOMETRY"
1262 PRINT
1263 GOTO 1155
1264 K = 1
1265 J = 0
1266 FOR I = 1 TO N
1267 I1 = 2 * W%(I) - 1 + I
1268 IF K > NW THEN 1279
1269 IF K = J THEN 1279
1270 J = K
1271 PRINT #3, " "
1272 PRINT #3, "WIRE NO. "; K; " COORDINATES", , , "CONNECTION PULSE"
1273 PRINT #3, "X", "Y", "Z", "RADIUS", "END1 END2  NO."
1274 IF (N(K, 1) <> 0 OR N(K, 2) <> 0) THEN 1279
1275 PRINT #3, "-", "-", "-", "    -", " -    -    0"
1276 K = K + 1
1277 IF K > NW THEN 1286
1278 GOTO 1270
1279 PRINT #3, X(I1); TAB(15); Y(I1); TAB(29); Z(I1); TAB(43); A(W%(I)); TAB(57);
1280 PRINT #3, USING "###  ###   ##"; C%(I, 1), C%(I, 2), I
1281 IF (I = N(K, 2) OR N(K, 1) = N(K, 2) OR C%(I, 2) = 0) THEN K = K + 1
1282 IF C%(I, 1) = 0 THEN C%(I, 1) = W%(I)
1283 IF C%(I, 2) = 0 THEN C%(I, 2) = W%(I)
1284 IF (K = NW AND N(K, 1) = 0 AND N(K, 2) = 0) THEN 1270
1285 IF (I = N AND K < NW) THEN 1270
1286 NEXT I
1287 PRINT
1288 CLOSE 1: IF INFILE THEN INFILE = 0: IF O$ > "C" THEN 1293
1289 INPUT "    CHANGE GEOMETRY (Y/N) "; A$
1290 IF A$ = "Y" THEN 1153
1291 IF A$ <> "N" THEN 1289
1292 REM ----- EXCITATION INPUT
1293 GOSUB 1430
1294 REM ----- LOADS/NETWORKS INPUT
1295 GOSUB 1455
1296 FLG = 0
1297 RETURN
1298 REM ********** CONNECTIONS **********
1299 E(I) = X1
1300 L(I) = Y1
1301 M(I) = Z1
1302 E(I + NW) = X2
1303 L(I + NW) = Y2
1304 M(I + NW) = Z2
1305 G% = 0
1306 I1 = 0
1307 I2 = 0
1308 J1(I) = 0
1309 J2(I, 1) = -I
1310 J2(I, 2) = -I
1311 IF G = 1 THEN 1323
1312 REM ----- CHECK FOR GROUND CONNECTION
1313 IF Z1 = 0 THEN 1315
1314 GOTO 1318
1315 I1 = -I
1316 J1(I) = -1
1317 GOTO 1340
1318 IF Z2 = 0 THEN 1320
1319 GOTO 1323
1320 I2 = -I
1321 J1(I) = 1
1322 G% = 1
1323 IF I = 1 THEN 1358
1324 FOR J = 1 TO I - 1
1325 REM ----- CHECK FOR END1 TO END1
1326 IF (X1 = E(J) AND Y1 = L(J) AND Z1 = M(J)) THEN 1328
1327 GOTO 1333
1328 I1 = -J
1329 J2(I, 1) = J
1330 IF J2(J, 1) = -J THEN J2(J, 1) = J
1331 GOTO 1340
1332 REM ----- CHECK FOR END1 TO END2
1333 IF (X1 = E(J + NW) AND Y1 = L(J + NW) AND Z1 = M(J + NW)) THEN 1335
1334 GOTO 1339
1335 I1 = J
1336 J2(I, 1) = J
1337 IF J2(J, 2) = -J THEN J2(J, 2) = J
1338 GOTO 1340
1339 NEXT J
1340 IF G% = 1 THEN 1358
1341 IF I = 1 THEN 1358
1342 FOR J = 1 TO I - 1
1343 REM ----- CHECK END2 TO END2
1344 IF (X2 = E(J + NW) AND Y2 = L(J + NW) AND Z2 = M(J + NW)) THEN 1346
1345 GOTO 1351
1346 I2 = -J
1347 J2(I, 2) = J
1348 IF J2(J, 2) = -J THEN J2(J, 2) = J
1349 GOTO 1358
1350 REM ----- CHECK FOR END2 TO END1
1351 IF (X2 = E(J) AND Y2 = L(J) AND Z2 = M(J)) THEN 1353
1352 GOTO 1357
1353 I2 = J
1354 J2(I, 2) = J
1355 IF J2(J, 1) = -J THEN J2(J, 1) = J
1356 GOTO 1358
1357 NEXT J
1358 PRINT #3, "            COORDINATES", "  ", "  ", "END         NO. OF"
1359 PRINT #3, "   X", "   Y", "   Z", "RADIUS     CONNECTION     SEGMENTS"
1360 PRINT #3, X1; TAB(15); Y1; TAB(29); Z1; TAB(57); I1
1361 PRINT #3, X2; TAB(15); Y2; TAB(29); Z2; TAB(43); A(I); TAB(57); I2; TAB(71); S1
1362 RETURN
1363 REM ********** ENVIROMENT INPUT **********
1364 PRINT
1365 PRINT "                        **** WARNING ****"
1366 PRINT "REDO GEOMETRY TO ENSURE PROPER GROUND CONNECTION/DISCONNECTION"
1367 PRINT
1368 REM ----- INITIALIZE NUMBER OF RADIAL WIRES TO ZERO
1369 NR = 0
1370 REM ----- SET ENVIRONMENT
1371 PRINT #3, " "
1372 A$ = "ENVIRONMENT (+1 FOR FREE SPACE, -1 FOR GROUND PLANE)"
1373 PRINT A$;
1374 INPUT G
1375 IF O$ > "C" THEN PRINT #3, A$; ": "; G
1376 IF G = 1 THEN 1428
1377 IF G <> -1 THEN 1373
1378 REM ----- NUMBER OF MEDIA
1379 A$ = " NUMBER OF MEDIA (0 FOR PERFECTLY CONDUCTING GROUND)"
1380 PRINT A$;
1381 INPUT NM
1382 IF NM <= MM THEN 1385
1383 PRINT "NUMBER OF MEDIA EXCEEDS DIMENSION..."
1384 GOTO 1380
1385 IF O$ > "C" THEN PRINT #3, A$; ": "; NM
1386 REM ----- INITIALIZE BOUNDARY TYPE
1387 TB = 1
1388 IF NM = 0 THEN 1428
1389 IF NM = 1 THEN 1396
1390 REM ----- TYPE OF BOUNDARY
1391 A$ = " TYPE OF BOUNDARY (1-LINEAR, 2-CIRCULAR)"
1392 PRINT "            "; A$;
1393 INPUT TB
1394 IF O$ > "C" THEN PRINT #3, A$; ": "; TB
1395 REM ----- BOUNDARY CONDITIONS
1396 FOR I = 1 TO NM
1397 PRINT "MEDIA"; I
1398 A$ = " RELATIVE DIELECTRIC CONSTANT, CONDUCTIVITY"
1399 PRINT "         "; A$;
1400 INPUT T(I), V(I)
1401 IF O$ > "C" THEN PRINT #3, A$; ": "; T(I); ","; V(I)
1402 IF I > 1 THEN 1414
1403 IF TB = 1 THEN 1414
1404 A$ = " NUMBER OF RADIAL WIRES IN GROUND SCREEN"
1405 PRINT "            "; A$;
1406 INPUT NR
1407 IF O$ > "C" THEN PRINT #3, A$; ": "; NR
1408 IF NR = 0 THEN 1414
1409 A$ = " RADIUS OF RADIAL WIRES"
1410 PRINT "                             "; A$;
1411 INPUT RR
1412 IF O$ > "C" THEN PRINT #3, A$; ": "; RR
1413 REM ----- INITIALIZE COORDINATE OF MEDIA INTERFACE
1414 U(I) = 1000000!
1415 REM ----- INITIALIZE HEIGHT OF MEDIA
1416 H(I) = 0
1417 IF I = NM THEN 1422
1418 A$ = " X OR R COORDINATE OF NEXT MEDIA INTERFACE"
1419 PRINT "          "; A$;
1420 INPUT U(I)
1421 IF O$ > "C" THEN PRINT #3, A$; ": "; U(I)
1422 IF I = 1 THEN 1427
1423 A$ = " HEIGHT OF MEDIA"
1424 PRINT "                                    "; A$;
1425 INPUT H(I)
1426 IF O$ > "C" THEN PRINT #3, A$; ": "; H(I)
1427 NEXT I
1428 RETURN
1429 REM ********** EXCITATION INPUT **********
1430 PRINT
1431 A$ = "NO. OF SOURCES "
1432 PRINT A$;
1433 INPUT NS
1434 IF NS < 1 THEN NS = 1
1435 IF NS <= MP THEN 1438
1436 PRINT "NO. OF SOURCES EXCEEDS DIMENSION ..."
1437 GOTO 1432
1438 IF O$ > "C" THEN PRINT #3, " ": PRINT #3, A$; ": "; NS
1439 FOR I = 1 TO NS
1440 PRINT
1441 PRINT "SOURCE NO. "; I; ":"
1442 A$ = "PULSE NO., VOLTAGE MAGNITUDE, PHASE (DEGREES)"
1443 PRINT A$;
1444 INPUT E(I), VM, VP
1445 IF E(I) <= N THEN 1448
1446 PRINT "PULSE NUMBER EXCEEDS NUMBER OF PULSES..."
1447 GOTO 1443
1448 IF O$ > "C" THEN PRINT #3, A$; ": "; E(I); ","; VM; ","; VP
1449 L(I) = VM * COS(VP * P0)
1450 M(I) = VM * SIN(VP * P0)
1451 NEXT I
1452 IF FLG = 2 THEN FLG = 1
1453 RETURN
1454 REM ********** LOADS INPUT **********
1455 PRINT
1456 INPUT "NUMBER OF LOADS       "; NL
1457 IF NL <= ML THEN 1460
1458 PRINT "NUMBER OF LOADS EXCEEDS DIMENSION..."
1459 GOTO 1456
1460 IF O$ > "C" THEN PRINT #3, "NUMBER OF LOADS"; NL
1461 IF NL < 1 THEN 1492
1462 INPUT "S-DOMAIN (S=jw) IMPEDANCE LOAD (Y/N)"; L$
1463 IF L$ <> "Y" AND L$ <> "N" THEN 1462
1464 A$ = "PULSE NO.,RESISTANCE,REACTANCE"
1465 IF L$ = "Y" THEN A$ = "PULSE NO., ORDER OF S-DOMAIN FUNCTION"
1466 FOR I = 1 TO NL
1467 PRINT
1468 PRINT "LOAD NO. "; I; ":"
1469 IF L$ = "Y" THEN 1476
1470 PRINT A$;
1471 INPUT LP(I), LA(1, I, 1), LA(2, I, 1)
1472 IF LP(I) > N THEN PRINT "PULSE NUMBER EXCEEDS NUMBER OF PULSES...": GOTO 1470
1473 IF O$ > "C" THEN PRINT #3, A$; ": "; LP(I); ","; LA(1, I, 1); ","; LA(2, I, 1)
1474 GOTO 1491
1475 REM ----- S-DOMAIN LOADS
1476 PRINT A$;
1477 INPUT LP(I), LS(I)
1478 IF LP(I) > N THEN PRINT "PULSE NUMBER EXCEEDS NUMBER OF PULSES...": GOTO 1476
1479 IF LS(I) > MA THEN PRINT "MAXIMUM DIMENSION IS 10": GOTO 1477
1480 IF O$ > "C" THEN PRINT #3, A$; ": "; LP(I); ","; LS(I)
1481 FOR J = 0 TO LS(I)
1482 A1$ = "NUMERATOR, DENOMINATOR COEFFICIENTS OF S^"
1483 PRINT A1$; J;
1484 INPUT LA(1, I, J), LA(2, I, J)
1485 IF O$ > "C" THEN PRINT #3, A1$; J; ":"; LA(1, I, J); ","; LA(2, I, J)
1486 NEXT J
1487 IF LS(I) > 0 THEN 1491
1488 LS(I) = 1
1489 LA(1, I, 1) = 0
1490 LA(2, I, 1) = 0
1491 NEXT I
1492 FLG = 0
1493 RETURN
1494 REM ********** MAIN PROGRAM **********
1495 REM ----- DATA INITIALIZATION
1496 REM ----- PI
1497 P = 4 * ATN(1)
1498 REM ----- CHANGES DEGREES TO RADIANS
1499 P0 = P / 180
1500 B$ = "********************"
1501 REM ----- INTRINSIC IMPEDANCE OF FREE SPACE DIVIDED BY 2 PI
1502 G0 = 29.979221#
1503 REM ---------- Q-VECTOR FOR GAUSSIAN QUADRATURE
1504 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)
1505 READ Q(13), Q(14)
1506 DATA .288675135,.5,.430568156,.173927423,.169990522,.326072577
1507 DATA .480144928,.050614268,.398333239,.111190517
1508 DATA .262766205,.156853323,.091717321,.181341892
1509 REM ---------- E-VECTOR FOR COEFFICIENTS OF ELLIPTIC INTEGRAL
1510 READ C0, C1, C2, C3, C4, C5, C6, C7, C8, C9
1511 DATA 1.38629436112,.09666344259,.03590092383,.03742563713,.01451196212
1512 DATA .5,.12498593397,.06880248576,.0332835346,.00441787012
1513 REM ----- IDENTIFY OUTPUT DEVICE
1514 GOSUB 1580
1515 PRINT #3, TAB(20); B$; B$
1516 PRINT #3, TAB(22); "MINI-NUMERICAL ELECTROMAGNETICS CODE"
1517 PRINT #3, TAB(34); "MININEC (3)"
1518 PRINT #3, TAB(24); DATE$; TAB(48); TIME$
1519 PRINT #3, TAB(20); B$; B$
1520 REM ----- FREQUENCY INPUT
1521 GOSUB 1133
1522 REM ----- ENVIRONMENT INPUT
1523 GOSUB 1369
1524 REM ----- CHECK FOR NEC-TYPE GEOMETRY INPUT
1525 GOSUB 1550
1526 REM ----- GEOMETRY INPUT
1527 GOSUB 1153
1528 REM ----- MENU
1529 PRINT
1530 PRINT B$; "    MININEC(3) MENU    "; B$
1531 PRINT "   G - CHANGE GEOMETRY     C - COMPUTE/DISPLAY CURRENTS"
1532 PRINT "   E - CHANGE ENVIRONMENT  P - COMPUTE FAR-FIELD PATTERNS"
1533 PRINT "   X - CHANGE EXCITATION   N - COMPUTE NEAR-FIELDS"
1534 PRINT "   L - CHANGE LOADS"
1535 PRINT "   F - CHANGE FREQUENCY    Q - QUIT"
1536 PRINT B$; "  {math co-processor}  "; B$
1537 INPUT "   COMMAND "; C$
1538 IF C$ = "F" THEN GOSUB 1133
1539 IF C$ = "P" THEN GOSUB 621
1540 IF C$ = "X" THEN GOSUB 1430
1541 IF C$ = "E" THEN GOSUB 1364
1542 IF C$ = "G" THEN GOSUB 1152
1543 IF C$ = "C" THEN GOSUB 497
1544 IF C$ = "L" THEN GOSUB 1455
1545 IF C$ = "N" THEN GOSUB 875
1546 IF C$ <> "Q" THEN 1529
1547 IF O$ = "P" THEN PRINT #3, CHR$(12) ELSE IF O$ = "C" THEN PRINT #3, " "
1548 CLOSE
1549 SYSTEM
1550 REM ********** NEC-TYPE GEOMETRY INPUT **********
1551 OPEN "MININEC.INP" FOR RANDOM AS #1 LEN = 30
1552 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$
1553 GET 1
1554 NW = CVI(S$)
1555 IF NW THEN INFILE = 1
1556 RETURN
1557 REM ---------- GET GEOMETRY DATA FROM MININEC.INP
1558 GET 1
1559 S1 = CVI(S$)
1560 X1 = CVS(X1$)
1561 Y1 = CVS(Y1$)
1562 Z1 = CVS(Z1$)
1563 X2 = CVS(X2$)
1564 Y2 = CVS(Y2$)
1565 Z2 = CVS(Z2$)
1566 A(I) = CVS(R$)
1567 IF G < 0 THEN IF Z1 < 0 OR Z2 < 0 THEN GOSUB 1572
1568 PRINT #3, " ": PRINT #3, "WIRE NO."; I
1569 IF X1 = X2 AND Y1 = Y2 AND Z1 = Z2 THEN PRINT "WIRE LENGTH IS ZERO.": GOTO 1547
1570 GOSUB 1299
1571 RETURN
1572 IF IZNEG THEN 1576
1573 PRINT "NEGATIVE Z VALUE ENCOUNTERED FOR GROUND PLANE."
1574 INPUT "ABORT OR CONVERT NEGATIVE Z VALUE TO ZERO (A/C)? "; A$
1575 IF A$ = "A" THEN 1547 ELSE IF A$ = "C" THEN IZNEG = 1 ELSE 1574
1576 IF Z1 < 0 THEN Z1 = -Z1
1577 IF Z2 < 0 THEN Z2 = -Z2
1578 RETURN
1579 REM ********** IDENTIFY OUTPUT DEVICE **********
1580 INPUT "OUTPUT TO CONSOLE, PRINTER, OR DISK (C/P/D)"; O$
1581 IF O$ = "C" THEN F$ = "SCRN:": GOTO 1586
1582 IF O$ = "P" THEN F$ = "LPT1:": GOTO 1586
1583 IF O$ <> "D" THEN 1580
1584 INPUT "FILENAME (NAME.OUT)"; F$
1585 IF LEFT$(RIGHT$(F$, 4), 1) = "." THEN 1586 ELSE F$ = F$ + ".OUT"
1586 OPEN F$ FOR OUTPUT AS #3
1587 CLS
1588 RETURN
1589 REM ********** CALCULATE ELAPSED TIME **********
1590 JH = VAL(MID$(T$, 1, 2)) - VAL(MID$(OT$, 1, 2))
1591 JM = VAL(MID$(T$, 4, 2)) - VAL(MID$(OT$, 4, 2))
1592 JS = VAL(MID$(T$, 7, 2)) - VAL(MID$(OT$, 7, 2))
1593 IF JS < 0 THEN JS = JS + 60: JM = JM - 1
1594 IF JM < 0 THEN JM = JM + 60: JH = JH - 1
1595 IF JH < 0 THEN JH = JH + 24
1596 T$ = ":" + MID$(STR$(JS + 100), 3)
1597 IF JH THEN T$ = MID$(STR$(JH), 2) + ":" + MID$(STR$(JM + 100), 3) + T$ ELSE T$ = MID$(STR$(JM), 2) + T$
1598 RETURN
1599 REM ********** CALCULATE APPROXIMATE TIME REMAINING **********
1600 IPCT = 100 * PCT
1601 T$ = TIME$
1602 JH = VAL(MID$(T$, 1, 2)) - VAL(MID$(OT$, 1, 2))
1603 IF JH < 0 THEN JH = JH + 24
1604 JM = VAL(MID$(T$, 4, 2)) - VAL(MID$(OT$, 4, 2))
1605 JS = VAL(MID$(T$, 7, 2)) - VAL(MID$(OT$, 7, 2))
1606 JS = JS + 60 * (JM + 60 * JH)
1607 JS = JS * (1 / PCT - 1)
1608 JM = INT(JS / 60)
1609 JS = JS MOD 60
1610 JH = INT(JM / 60)
1611 JM = JM MOD 60
1612 T$ = ":" + MID$(STR$(JS + 100), 3)
1613 IF JH THEN T$ = MID$(STR$(JH), 2) + ":" + MID$(STR$(JM + 100), 3) + T$ ELSE T$ = MID$(STR$(JM), 2) + T$
1614 LOCATE CSRLIN, 1
1615 PRINT Q$; IPCT; "% COMPLETE - APPROX TIME REMAINING "; T$; "   ";
1616 RETURN
1617 END

REM $STATIC
DEFSNG I-K, N