Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2 | mjames | 1 | /*** Translated to the C language by N. Kyriazis 20 Aug 2003 *** |
2 | |||
3 | Program NEC(input,tape5=input,output,tape11,tape12,tape13,tape14, |
||
4 | tape15,tape16,tape20,tape21) |
||
5 | |||
6 | Numerical Electromagnetics Code (NEC2) developed at Lawrence |
||
7 | Livermore lab., Livermore, CA. (contact G. Burke at 415-422-8414 |
||
8 | for problems with the NEC code. For problems with the vax implem- |
||
9 | entation, contact J. Breakall at 415-422-8196 or E. Domning at 415 |
||
10 | 422-5936) |
||
11 | file created 4/11/80. |
||
12 | |||
13 | ***********Notice********** |
||
14 | This computer code material was prepared as an account of work |
||
15 | sponsored by the United States government. Neither the United |
||
16 | States nor the United States Department Of Energy, nor any of |
||
17 | their employees, nor any of their contractors, subcontractors, |
||
18 | or their employees, makes any warranty, express or implied, or |
||
19 | assumes any legal liability or responsibility for the accuracy, |
||
20 | completeness or usefulness of any information, apparatus, product |
||
21 | or process disclosed, or represents that its use would not infringe |
||
22 | privately-owned rights. |
||
23 | |||
24 | *******************************************************************/ |
||
25 | |||
26 | #include "nec2c.h" |
||
27 | |||
28 | /* common /netcx/ */ |
||
29 | extern netcx_t netcx; |
||
30 | |||
31 | /* common /vsorc/ */ |
||
32 | extern vsorc_t vsorc; |
||
33 | |||
34 | /* common /data/ */ |
||
35 | extern data_t data; |
||
36 | |||
37 | /* common /crnt/ */ |
||
38 | extern crnt_t crnt; |
||
39 | |||
40 | /* pointers to input/output files */ |
||
41 | extern FILE *input_fp, *output_fp, *plot_fp; |
||
42 | |||
43 | /*-------------------------------------------------------------------*/ |
||
44 | |||
45 | /* subroutine netwk solves for structure currents for a given */ |
||
46 | /* excitation including the effect of non-radiating networks if */ |
||
47 | /* present. */ |
||
48 | void netwk (complex double *cm, int *ip, complex double *einc) |
||
49 | { |
||
50 | int *ipnt = NULL, *nteqa = NULL, *ntsca = NULL; |
||
51 | int jump1, jump2, nteq = 0, ntsc = 0, nseg2, irow2 = 0, j, ndimn; |
||
52 | int neqz2, neqt, irow1 = 0, i, nseg1, isc1 = 0, isc2 = 0; |
||
53 | double asmx, asa, pwr, y11r, y11i, y12r, y12i, y22r, y22i; |
||
54 | complex double *vsrc = NULL, *rhs = NULL, *cmn = NULL; |
||
55 | complex double *rhnt = NULL, *rhnx = NULL, ymit, vlt, cux; |
||
56 | |||
57 | neqz2 = netcx.neq2; |
||
58 | if (neqz2 == 0) |
||
59 | neqz2 = 1; |
||
60 | |||
61 | netcx.pin = 0.; |
||
62 | netcx.pnls = 0.; |
||
63 | neqt = netcx.neq + netcx.neq2; |
||
64 | ndimn = j = (2 * netcx.nonet + vsorc.nsant); |
||
65 | |||
66 | /* Allocate network buffers */ |
||
67 | if (netcx.nonet != 0) |
||
68 | { |
||
69 | mem_alloc ((void *) &rhs, data.np3m * sizeof (complex double)); |
||
70 | |||
71 | i = j * sizeof (complex double); |
||
72 | mem_alloc ((void *) &rhnt, i); |
||
73 | mem_alloc ((void *) &rhnx, i); |
||
74 | mem_alloc ((void *) &cmn, i * j); |
||
75 | |||
76 | i = j * sizeof (int); |
||
77 | mem_alloc ((void *) &ntsca, i); |
||
78 | mem_alloc ((void *) &nteqa, i); |
||
79 | mem_alloc ((void *) &ipnt, i); |
||
80 | |||
81 | mem_alloc ((void *) &vsrc, vsorc.nsant * sizeof (complex double)); |
||
82 | } |
||
83 | else if (netcx.masym != 0) |
||
84 | { |
||
85 | i = j * sizeof (int); |
||
86 | mem_alloc ((void *) &ipnt, i); |
||
87 | } |
||
88 | |||
89 | if (netcx.ntsol == 0) |
||
90 | { |
||
91 | /* compute relative matrix asymmetry */ |
||
92 | if (netcx.masym != 0) |
||
93 | { |
||
94 | irow1 = 0; |
||
95 | if (netcx.nonet != 0) |
||
96 | { |
||
97 | for (i = 0; i < netcx.nonet; i++) |
||
98 | { |
||
99 | nseg1 = netcx.iseg1[i]; |
||
100 | for (isc1 = 0; isc1 < 2; isc1++) |
||
101 | { |
||
102 | if (irow1 == 0) |
||
103 | { |
||
104 | ipnt[irow1] = nseg1; |
||
105 | nseg1 = netcx.iseg2[i]; |
||
106 | irow1++; |
||
107 | continue; |
||
108 | } |
||
109 | |||
110 | for (j = 0; j < irow1; j++) |
||
111 | if (nseg1 == ipnt[j]) |
||
112 | break; |
||
113 | |||
114 | if (j == irow1) |
||
115 | { |
||
116 | ipnt[irow1] = nseg1; |
||
117 | irow1++; |
||
118 | } |
||
119 | |||
120 | nseg1 = netcx.iseg2[i]; |
||
121 | |||
122 | } /* for( isc1 = 0; isc1 < 2; isc1++ ) */ |
||
123 | |||
124 | } /* for( i = 0; i < netcx.nonet; i++ ) */ |
||
125 | |||
126 | } /* if( netcx.nonet != 0) */ |
||
127 | |||
128 | if (vsorc.nsant != 0) |
||
129 | { |
||
130 | for (i = 0; i < vsorc.nsant; i++) |
||
131 | { |
||
132 | nseg1 = vsorc.isant[i]; |
||
133 | if (irow1 == 0) |
||
134 | { |
||
135 | ipnt[irow1] = nseg1; |
||
136 | irow1++; |
||
137 | continue; |
||
138 | } |
||
139 | |||
140 | for (j = 0; j < irow1; j++) |
||
141 | if (nseg1 == ipnt[j]) |
||
142 | break; |
||
143 | |||
144 | if (j == irow1) |
||
145 | { |
||
146 | ipnt[irow1] = nseg1; |
||
147 | irow1++; |
||
148 | } |
||
149 | |||
150 | } /* for( i = 0; i < vsorc.nsant; i++ ) */ |
||
151 | |||
152 | } /* if( vsorc.nsant != 0) */ |
||
153 | |||
154 | if (irow1 >= 2) |
||
155 | { |
||
156 | for (i = 0; i < irow1; i++) |
||
157 | { |
||
158 | isc1 = ipnt[i] - 1; |
||
159 | asmx = data.si[isc1]; |
||
160 | |||
161 | for (j = 0; j < neqt; j++) |
||
162 | rhs[j] = CPLX_00; |
||
163 | |||
164 | rhs[isc1] = CPLX_10; |
||
165 | solves ( |
||
166 | cm, |
||
167 | ip, |
||
168 | rhs, |
||
169 | netcx.neq, |
||
170 | 1, |
||
171 | data.np, |
||
172 | data.n, |
||
173 | data.mp, |
||
174 | data.m); |
||
175 | cabc (rhs); |
||
176 | |||
177 | for (j = 0; j < irow1; j++) |
||
178 | { |
||
179 | isc1 = ipnt[j] - 1; |
||
180 | cmn[j + i * ndimn] = rhs[isc1] / asmx; |
||
181 | } |
||
182 | |||
183 | } /* for( i = 0; i < irow1; i++ ) */ |
||
184 | |||
185 | asmx = 0.; |
||
186 | asa = 0.; |
||
187 | |||
188 | for (i = 1; i < irow1; i++) |
||
189 | { |
||
190 | isc1 = i; |
||
191 | for (j = 0; j < isc1; j++) |
||
192 | { |
||
193 | cux = cmn[i + j * ndimn]; |
||
194 | pwr = cabsl ((cux - cmn[j + i * ndimn]) / cux); |
||
195 | asa += pwr * pwr; |
||
196 | |||
197 | if (pwr < asmx) |
||
198 | continue; |
||
199 | |||
200 | asmx = pwr; |
||
201 | nteq = ipnt[i]; |
||
202 | ntsc = ipnt[j]; |
||
203 | |||
204 | } /* for( j = 0; j < isc1; j++ ) */ |
||
205 | |||
206 | } /* for( i = 1; i < irow1; i++ ) */ |
||
207 | |||
208 | asa = sqrtl (asa * 2. / (double) (irow1 * (irow1 - 1))); |
||
209 | fprintf ( |
||
210 | output_fp, |
||
211 | "\n\n" |
||
212 | " MAXIMUM RELATIVE ASYMMETRY OF THE DRIVING POINT " |
||
213 | "ADMITTANCE\n" |
||
214 | " MATRIX IS %10.3E FOR SEGMENTS %d AND %d\n" |
||
215 | " RMS RELATIVE ASYMMETRY IS %10.3E", |
||
216 | asmx, |
||
217 | nteq, |
||
218 | ntsc, |
||
219 | asa); |
||
220 | |||
221 | } /* if( irow1 >= 2) */ |
||
222 | |||
223 | } /* if( netcx.masym != 0) */ |
||
224 | |||
225 | /* solution of network equations */ |
||
226 | if (netcx.nonet != 0) |
||
227 | { |
||
228 | for (i = 0; i < ndimn; i++) |
||
229 | { |
||
230 | rhnx[i] = CPLX_00; |
||
231 | for (j = 0; j < ndimn; j++) |
||
232 | cmn[j + i * ndimn] = CPLX_00; |
||
233 | } |
||
234 | |||
235 | /* sort network and source data and */ |
||
236 | /* assign equation numbers to segments */ |
||
237 | nteq = 0; |
||
238 | ntsc = 0; |
||
239 | |||
240 | for (j = 0; j < netcx.nonet; j++) |
||
241 | { |
||
242 | nseg1 = netcx.iseg1[j]; |
||
243 | nseg2 = netcx.iseg2[j]; |
||
244 | |||
245 | if (netcx.ntyp[j] <= 1) |
||
246 | { |
||
247 | y11r = netcx.x11r[j]; |
||
248 | y11i = netcx.x11i[j]; |
||
249 | y12r = netcx.x12r[j]; |
||
250 | y12i = netcx.x12i[j]; |
||
251 | y22r = netcx.x22r[j]; |
||
252 | y22i = netcx.x22i[j]; |
||
253 | } |
||
254 | else |
||
255 | { |
||
256 | y22r = TP * netcx.x11i[j] / data.wlam; |
||
257 | y12r = 0.; |
||
258 | y12i = 1. / (netcx.x11r[j] * sinl (y22r)); |
||
259 | y11r = netcx.x12r[j]; |
||
260 | y11i = -y12i * cosl (y22r); |
||
261 | y22r = netcx.x22r[j]; |
||
262 | y22i = y11i + netcx.x22i[j]; |
||
263 | y11i = y11i + netcx.x12i[j]; |
||
264 | |||
265 | if (netcx.ntyp[j] != 2) |
||
266 | { |
||
267 | y12r = -y12r; |
||
268 | y12i = -y12i; |
||
269 | } |
||
270 | |||
271 | } /* if( netcx.ntyp[j] <= 1) */ |
||
272 | |||
273 | jump1 = FALSE; |
||
274 | if (vsorc.nsant != 0) |
||
275 | { |
||
276 | for (i = 0; i < vsorc.nsant; i++) |
||
277 | if (nseg1 == vsorc.isant[i]) |
||
278 | { |
||
279 | isc1 = i; |
||
280 | jump1 = TRUE; |
||
281 | break; |
||
282 | } |
||
283 | } /* if( vsorc.nsant != 0) */ |
||
284 | |||
285 | jump2 = FALSE; |
||
286 | if (!jump1) |
||
287 | { |
||
288 | isc1 = -1; |
||
289 | |||
290 | if (nteq != 0) |
||
291 | { |
||
292 | for (i = 0; i < nteq; i++) |
||
293 | if (nseg1 == nteqa[i]) |
||
294 | { |
||
295 | irow1 = i; |
||
296 | jump2 = TRUE; |
||
297 | break; |
||
298 | } |
||
299 | |||
300 | } /* if( nteq != 0) */ |
||
301 | |||
302 | if (!jump2) |
||
303 | { |
||
304 | irow1 = nteq; |
||
305 | nteqa[nteq] = nseg1; |
||
306 | nteq++; |
||
307 | } |
||
308 | |||
309 | } /* if( ! jump1 ) */ |
||
310 | else |
||
311 | { |
||
312 | if (ntsc != 0) |
||
313 | { |
||
314 | for (i = 0; i < ntsc; i++) |
||
315 | { |
||
316 | if (nseg1 == ntsca[i]) |
||
317 | { |
||
318 | irow1 = ndimn - (i + 1); |
||
319 | jump2 = TRUE; |
||
320 | break; |
||
321 | } |
||
322 | } |
||
323 | |||
324 | } /* if( ntsc != 0) */ |
||
325 | |||
326 | if (!jump2) |
||
327 | { |
||
328 | irow1 = ndimn - (ntsc + 1); |
||
329 | ntsca[ntsc] = nseg1; |
||
330 | vsrc[ntsc] = vsorc.vsant[isc1]; |
||
331 | ntsc++; |
||
332 | } |
||
333 | |||
334 | } /* if( ! jump1 ) */ |
||
335 | |||
336 | jump1 = FALSE; |
||
337 | if (vsorc.nsant != 0) |
||
338 | { |
||
339 | for (i = 0; i < vsorc.nsant; i++) |
||
340 | { |
||
341 | if (nseg2 == vsorc.isant[i]) |
||
342 | { |
||
343 | isc2 = i; |
||
344 | jump1 = TRUE; |
||
345 | break; |
||
346 | } |
||
347 | } |
||
348 | |||
349 | } /* if( vsorc.nsant != 0) */ |
||
350 | |||
351 | jump2 = FALSE; |
||
352 | if (!jump1) |
||
353 | { |
||
354 | isc2 = -1; |
||
355 | |||
356 | if (nteq != 0) |
||
357 | { |
||
358 | for (i = 0; i < nteq; i++) |
||
359 | if (nseg2 == nteqa[i]) |
||
360 | { |
||
361 | irow2 = i; |
||
362 | jump2 = TRUE; |
||
363 | break; |
||
364 | } |
||
365 | |||
366 | } /* if( nteq != 0) */ |
||
367 | |||
368 | if (!jump2) |
||
369 | { |
||
370 | irow2 = nteq; |
||
371 | nteqa[nteq] = nseg2; |
||
372 | nteq++; |
||
373 | } |
||
374 | |||
375 | } /* if( ! jump1 ) */ |
||
376 | else |
||
377 | { |
||
378 | if (ntsc != 0) |
||
379 | { |
||
380 | for (i = 0; i < ntsc; i++) |
||
381 | if (nseg2 == ntsca[i]) |
||
382 | { |
||
383 | irow2 = ndimn - (i + 1); |
||
384 | jump2 = TRUE; |
||
385 | break; |
||
386 | } |
||
387 | |||
388 | } /* if( ntsc != 0) */ |
||
389 | |||
390 | if (!jump2) |
||
391 | { |
||
392 | irow2 = ndimn - (ntsc + 1); |
||
393 | ntsca[ntsc] = nseg2; |
||
394 | vsrc[ntsc] = vsorc.vsant[isc2]; |
||
395 | ntsc++; |
||
396 | } |
||
397 | |||
398 | } /* if( ! jump1 ) */ |
||
399 | |||
400 | /* fill network equation matrix and right hand side vector with |
||
401 | */ |
||
402 | /* network short-circuit admittance matrix coefficients. */ |
||
403 | if (isc1 == -1) |
||
404 | { |
||
405 | cmn[irow1 + irow1 * ndimn] -= |
||
406 | cmplx (y11r, y11i) * data.si[nseg1 - 1]; |
||
407 | cmn[irow1 + irow2 * ndimn] -= |
||
408 | cmplx (y12r, y12i) * data.si[nseg1 - 1]; |
||
409 | } |
||
410 | else |
||
411 | { |
||
412 | rhnx[irow1] += |
||
413 | cmplx (y11r, y11i) * vsorc.vsant[isc1] / data.wlam; |
||
414 | rhnx[irow2] += |
||
415 | cmplx (y12r, y12i) * vsorc.vsant[isc1] / data.wlam; |
||
416 | } |
||
417 | |||
418 | if (isc2 == -1) |
||
419 | { |
||
420 | cmn[irow2 + irow2 * ndimn] -= |
||
421 | cmplx (y22r, y22i) * data.si[nseg2 - 1]; |
||
422 | cmn[irow2 + irow1 * ndimn] -= |
||
423 | cmplx (y12r, y12i) * data.si[nseg2 - 1]; |
||
424 | } |
||
425 | else |
||
426 | { |
||
427 | rhnx[irow1] += |
||
428 | cmplx (y12r, y12i) * vsorc.vsant[isc2] / data.wlam; |
||
429 | rhnx[irow2] += |
||
430 | cmplx (y22r, y22i) * vsorc.vsant[isc2] / data.wlam; |
||
431 | } |
||
432 | |||
433 | } /* for( j = 0; j < netcx.nonet; j++ ) */ |
||
434 | |||
435 | /* add interaction matrix admittance */ |
||
436 | /* elements to network equation matrix */ |
||
437 | for (i = 0; i < nteq; i++) |
||
438 | { |
||
439 | for (j = 0; j < neqt; j++) |
||
440 | rhs[j] = CPLX_00; |
||
441 | |||
442 | irow1 = nteqa[i] - 1; |
||
443 | rhs[irow1] = CPLX_10; |
||
444 | solves ( |
||
445 | cm, |
||
446 | ip, |
||
447 | rhs, |
||
448 | netcx.neq, |
||
449 | 1, |
||
450 | data.np, |
||
451 | data.n, |
||
452 | data.mp, |
||
453 | data.m); |
||
454 | cabc (rhs); |
||
455 | |||
456 | for (j = 0; j < nteq; j++) |
||
457 | { |
||
458 | irow1 = nteqa[j] - 1; |
||
459 | cmn[i + j * ndimn] += rhs[irow1]; |
||
460 | } |
||
461 | |||
462 | } /* for( i = 0; i < nteq; i++ ) */ |
||
463 | |||
464 | /* factor network equation matrix */ |
||
465 | factr (nteq, cmn, ipnt, ndimn); |
||
466 | |||
467 | } /* if( netcx.nonet != 0) */ |
||
468 | |||
469 | } /* if( netcx.ntsol != 0) */ |
||
470 | |||
471 | if (netcx.nonet != 0) |
||
472 | { |
||
473 | /* add to network equation right hand side */ |
||
474 | /* the terms due to element interactions */ |
||
475 | for (i = 0; i < neqt; i++) |
||
476 | rhs[i] = einc[i]; |
||
477 | |||
478 | solves (cm, ip, rhs, netcx.neq, 1, data.np, data.n, data.mp, data.m); |
||
479 | cabc (rhs); |
||
480 | |||
481 | for (i = 0; i < nteq; i++) |
||
482 | { |
||
483 | irow1 = nteqa[i] - 1; |
||
484 | rhnt[i] = rhnx[i] + rhs[irow1]; |
||
485 | } |
||
486 | |||
487 | /* solve network equations */ |
||
488 | solve (nteq, cmn, ipnt, rhnt, ndimn); |
||
489 | |||
490 | /* add fields due to network voltages to electric fields */ |
||
491 | /* applied to structure and solve for induced current */ |
||
492 | for (i = 0; i < nteq; i++) |
||
493 | { |
||
494 | irow1 = nteqa[i] - 1; |
||
495 | einc[irow1] -= rhnt[i]; |
||
496 | } |
||
497 | |||
498 | solves (cm, ip, einc, netcx.neq, 1, data.np, data.n, data.mp, data.m); |
||
499 | cabc (einc); |
||
500 | |||
501 | if (netcx.nprint == 0) |
||
502 | { |
||
503 | fprintf ( |
||
504 | output_fp, |
||
505 | "\n\n\n" |
||
506 | " " |
||
507 | "--------- STRUCTURE EXCITATION DATA AT NETWORK CONNECTION POINTS " |
||
508 | "--------"); |
||
509 | |||
510 | fprintf ( |
||
511 | output_fp, |
||
512 | "\n" |
||
513 | " TAG SEG. VOLTAGE (VOLTS) CURRENT (AMPS) " |
||
514 | " IMPEDANCE (OHMS) ADMITTANCE (MHOS) POWER\n" |
||
515 | " NO. NO. REAL IMAGINARY REAL IMAGINARY " |
||
516 | " REAL IMAGINARY REAL IMAGINARY (WATTS)"); |
||
517 | } |
||
518 | |||
519 | for (i = 0; i < nteq; i++) |
||
520 | { |
||
521 | irow1 = nteqa[i] - 1; |
||
522 | vlt = rhnt[i] * data.si[irow1] * data.wlam; |
||
523 | cux = einc[irow1] * data.wlam; |
||
524 | ymit = cux / vlt; |
||
525 | netcx.zped = vlt / cux; |
||
526 | irow2 = data.itag[irow1]; |
||
527 | pwr = .5 * creall (vlt * conjl (cux)); |
||
528 | netcx.pnls = netcx.pnls - pwr; |
||
529 | |||
530 | if (netcx.nprint == 0) |
||
531 | fprintf ( |
||
532 | output_fp, |
||
533 | "\n" |
||
534 | " %4d %5d %11.4E %11.4E %11.4E %11.4E" |
||
535 | " %11.4E %11.4E %11.4E %11.4E %11.4E", |
||
536 | irow2, |
||
537 | irow1 + 1, |
||
538 | print_creall (vlt), |
||
539 | print_cimagl (vlt), |
||
540 | print_creall (cux), |
||
541 | print_cimagl (cux), |
||
542 | print_creall (netcx.zped), |
||
543 | print_cimagl (netcx.zped), |
||
544 | print_creall (ymit), |
||
545 | print_cimagl (ymit), |
||
546 | pwr); |
||
547 | } |
||
548 | |||
549 | if (ntsc != 0) |
||
550 | { |
||
551 | for (i = 0; i < ntsc; i++) |
||
552 | { |
||
553 | irow1 = ntsca[i] - 1; |
||
554 | vlt = vsrc[i]; |
||
555 | cux = einc[irow1] * data.wlam; |
||
556 | ymit = cux / vlt; |
||
557 | netcx.zped = vlt / cux; |
||
558 | irow2 = data.itag[irow1]; |
||
559 | pwr = .5 * creall (vlt * conjl (cux)); |
||
560 | netcx.pnls = netcx.pnls - pwr; |
||
561 | |||
562 | if (netcx.nprint == 0) |
||
563 | fprintf ( |
||
564 | output_fp, |
||
565 | "\n" |
||
566 | " %4d %5d %11.4E %11.4E %11.4E %11.4E" |
||
567 | " %11.4E %11.4E %11.4E %11.4E %11.4E", |
||
568 | irow2, |
||
569 | irow1 + 1, |
||
570 | print_creall (vlt), |
||
571 | print_cimagl (vlt), |
||
572 | print_creall (cux), |
||
573 | print_cimagl (cux), |
||
574 | print_creall (netcx.zped), |
||
575 | print_cimagl (netcx.zped), |
||
576 | print_creall (ymit), |
||
577 | print_cimagl (ymit), |
||
578 | pwr); |
||
579 | |||
580 | } /* for( i = 0; i < ntsc; i++ ) */ |
||
581 | |||
582 | } /* if( ntsc != 0) */ |
||
583 | |||
584 | } /* if( netcx.nonet != 0) */ |
||
585 | else |
||
586 | { |
||
587 | /* solve for currents when no networks are present */ |
||
588 | solves (cm, ip, einc, netcx.neq, 1, data.np, data.n, data.mp, data.m); |
||
589 | cabc (einc); |
||
590 | ntsc = 0; |
||
591 | } |
||
592 | |||
593 | if ((vsorc.nsant + vsorc.nvqd) == 0) |
||
594 | return; |
||
595 | |||
596 | fprintf ( |
||
597 | output_fp, |
||
598 | "\n\n\n" |
||
599 | " " |
||
600 | "- - - ANTENNA INPUT PARAMETERS - - -\n"); |
||
601 | |||
602 | fprintf ( |
||
603 | output_fp, |
||
604 | "\n" |
||
605 | " TAG SEG. VOLTAGE (VOLTS) CURRENT (AMPS) " |
||
606 | " IMPEDANCE (OHMS) ADMITTANCE (MHOS) POWER\n" |
||
607 | " NO. NO. REAL IMAG. REAL IMAG. " |
||
608 | " REAL IMAG. REAL IMAG. (WATTS)"); |
||
609 | |||
610 | if (vsorc.nsant != 0) |
||
611 | { |
||
612 | for (i = 0; i < vsorc.nsant; i++) |
||
613 | { |
||
614 | isc1 = vsorc.isant[i] - 1; |
||
615 | vlt = vsorc.vsant[i]; |
||
616 | |||
617 | if (ntsc == 0) |
||
618 | { |
||
619 | cux = einc[isc1] * data.wlam; |
||
620 | irow1 = 0; |
||
621 | } |
||
622 | else |
||
623 | { |
||
624 | for (j = 0; j < ntsc; j++) |
||
625 | if (ntsca[j] == isc1 + 1) |
||
626 | break; |
||
627 | |||
628 | irow1 = ndimn - (j + 1); |
||
629 | cux = rhnx[irow1]; |
||
630 | for (j = 0; j < nteq; j++) |
||
631 | cux -= cmn[j + irow1 * ndimn] * rhnt[j]; |
||
632 | cux = (einc[isc1] + cux) * data.wlam; |
||
633 | irow1++; |
||
634 | |||
635 | } /* if( ntsc == 0) */ |
||
636 | |||
637 | ymit = cux / vlt; |
||
638 | netcx.zped = vlt / cux; |
||
639 | pwr = .5 * creall (vlt * conjl (cux)); |
||
640 | netcx.pin = netcx.pin + pwr; |
||
641 | |||
642 | if (irow1 != 0) |
||
643 | netcx.pnls = netcx.pnls + pwr; |
||
644 | |||
645 | irow2 = data.itag[isc1]; |
||
646 | fprintf ( |
||
647 | output_fp, |
||
648 | "\n" |
||
649 | "%6d%6d%12.5E%12.5E%12.5E%12.5E" |
||
650 | "%12.5E%12.5E%12.5E%12.5E%12.5E", |
||
651 | irow2, |
||
652 | isc1 + 1, |
||
653 | print_creall (vlt), |
||
654 | print_cimagl (vlt), |
||
655 | print_creall (cux), |
||
656 | print_cimagl (cux), |
||
657 | print_creall (netcx.zped), |
||
658 | print_cimagl (netcx.zped), |
||
659 | print_creall (ymit), |
||
660 | print_cimagl (ymit), |
||
661 | pwr); |
||
662 | |||
663 | } /* for( i = 0; i < vsorc.nsant; i++ ) */ |
||
664 | |||
665 | } /* if( vsorc.nsant != 0) */ |
||
666 | |||
667 | if (vsorc.nvqd == 0) |
||
668 | return; |
||
669 | |||
670 | for (i = 0; i < vsorc.nvqd; i++) |
||
671 | { |
||
672 | isc1 = vsorc.ivqd[i] - 1; |
||
673 | vlt = vsorc.vqd[i]; |
||
674 | cux = cmplx (crnt.air[isc1], crnt.aii[isc1]); |
||
675 | ymit = cmplx (crnt.bir[isc1], crnt.bii[isc1]); |
||
676 | netcx.zped = cmplx (crnt.cir[isc1], crnt.cii[isc1]); |
||
677 | pwr = data.si[isc1] * TP * .5; |
||
678 | cux = (cux - ymit * sinl (pwr) + netcx.zped * cosl (pwr)) * data.wlam; |
||
679 | ymit = cux / vlt; |
||
680 | netcx.zped = vlt / cux; |
||
681 | pwr = .5 * creall (vlt * conjl (cux)); |
||
682 | netcx.pin = netcx.pin + pwr; |
||
683 | irow2 = data.itag[isc1]; |
||
684 | |||
685 | fprintf ( |
||
686 | output_fp, |
||
687 | "\n" |
||
688 | "%6d%6d%12.5E%12.5E%12.5E%12.5E" |
||
689 | "%12.5E%12.5E%12.5E%12.5E%12.5E", |
||
690 | irow2, |
||
691 | isc1 + 1, |
||
692 | print_creall (vlt), |
||
693 | print_cimagl (vlt), |
||
694 | print_creall (cux), |
||
695 | print_cimagl (cux), |
||
696 | print_creall (netcx.zped), |
||
697 | print_cimagl (netcx.zped), |
||
698 | print_creall (ymit), |
||
699 | print_cimagl (ymit), |
||
700 | pwr); |
||
701 | |||
702 | } /* for( i = 0; i < vsorc.nvqd; i++ ) */ |
||
703 | |||
704 | /* Free network buffers */ |
||
705 | free_ptr ((void *) &ipnt); |
||
706 | free_ptr ((void *) &nteqa); |
||
707 | free_ptr ((void *) &ntsca); |
||
708 | free_ptr ((void *) &vsrc); |
||
709 | free_ptr ((void *) &rhs); |
||
710 | free_ptr ((void *) &cmn); |
||
711 | free_ptr ((void *) &rhnt); |
||
712 | free_ptr ((void *) &rhnx); |
||
713 | |||
714 | return; |
||
715 | } |
||
716 | |||
717 | /*-----------------------------------------------------------------------*/ |