29 #include "component.h"
33 msline::msline () :
circuit (2) {
34 alpha = beta = zl = ereff = 0;
66 nr_double_t ZlEff, ErEff, WEff, ZlEffFreq, ErEffFreq;
74 ZlEffFreq, ErEffFreq);
77 analyseLoss (W, t, er, rho, D, tand, ZlEff, ZlEff, ErEff,
78 frequency,
"Hammerstad", ac, ad);
84 beta =
sqrt (ErEffFreq) * 2 *
M_PI * frequency /
C0;
94 nr_double_t z = zl /
z0;
95 nr_double_t y = 1 / z;
114 nr_double_t er,
char * Model,
115 nr_double_t& ZlEff, nr_double_t& ErEff,
126 if (!strcmp (Model,
"Wheeler")) {
127 nr_double_t a,
b,
c, d,
x, dW1, dWr, Wr;
135 dWr = (1 + 1 / er) / 2 * dW1;
140 c =
log (4 * h / Wr +
sqrt (
sqr (4 * h / Wr) + 2));
147 x = 2 *
M_LN2 /
M_PI + Wr / h / 2 + (er + 1) / 2 /
M_PI / er * c + d;
148 z =
Z0 / 2 / x /
sqrt (er);
153 a =
log (8 * h / Wr) +
sqr (Wr / h) / 32;
155 e = (er + 1) / 2 *
sqr (a / (a - b));
158 a = (er - 1) / 2 /
M_PI / er * (
log (2.1349 * Wr / h + 4.0137) -
160 b = Wr / h / 2 +
M_1_PI *
log (8.5397 * Wr / h + 16.0547);
161 e = er *
sqr ((b - a) / b);
165 else if (!strcmp (Model,
"Schneider")) {
167 nr_double_t dW = 0, u = W / h;
170 if (t != 0 && t < W / 2) {
171 nr_double_t
arg = (u <
M_1_PI / 2) ? 2 *
M_PI * W / t : h / t;
172 dW = t /
M_PI * (1 +
log (2 * arg));
173 if (t / dW >= 0.75) dW = 0;
175 WEff = W + dW; u = WEff / h;
178 e = (er + 1) / 2 + (er - 1) / 2 /
sqrt (1 + 10 / u);
185 z = 1 / (u + 2.42 - 0.44 / u +
pow (1 - 1 / u, 6));
190 else if (!strcmp (Model,
"Hammerstad")) {
191 nr_double_t a,
b, du1, du, u, ur, u1, zr, z1;
201 du = du1 * (1 +
sech (
sqrt (er - 1))) / 2;
217 e = e *
sqr (z1 / zr);
228 nr_double_t ZlEff, nr_double_t ErEff,
229 nr_double_t frequency,
char * Model,
230 nr_double_t& ZlEffFreq,
231 nr_double_t& ErEffFreq) {
236 z = ZlEffFreq = ZlEff;
237 e = ErEffFreq = ErEff;
240 if (!strcmp (Model,
"Getsinger")) {
244 else if (!strcmp (Model,
"Schneider")) {
246 k =
sqrt (ErEff / er);
247 f = 4 * h * frequency /
C0 *
sqrt (er - 1);
249 e = ErEff *
sqr ((1 + f) / (1 + k * f));
250 z = ZlEff *
sqrt (ErEff / e);
253 else if (!strcmp (Model,
"Yamashita")) {
255 k =
sqrt (er / ErEff);
256 f = 4 * h * frequency /
C0 *
sqrt (er - 1) *
257 (0.5 +
sqr (1 + 2 *
log10 (1 + W / h)));
258 e = ErEff *
sqr ((1 + k *
pow (f, 1.5) / 4) / (1 +
pow (f, 1.5) / 4));
261 else if (!strcmp (Model,
"Kobayashi")) {
262 nr_double_t
n, no, nc, fh, fk;
263 fk =
C0 *
atan (er *
sqrt ((ErEff - 1) / (er - ErEff))) /
265 fh = fk / (0.75 + (0.75 - 0.332 /
pow (er, 1.73)) * W / h);
266 no = 1 + 1 / (1 +
sqrt (W / h)) + 0.32 *
cubic (1 / (1 +
sqrt (W / h)));
268 nc = 1 + 1.4 / (1 + W / h) * (0.15 - 0.235 *
269 exp (-0.45 * frequency / fh));
272 n = no * nc < 2.32 ? no * nc : 2.32;
273 e = er - (er - ErEff) / (1 +
pow (frequency / fh, n));
276 else if (!strcmp (Model,
"Pramanick")) {
277 nr_double_t Weff, We, f;
278 f = 2 *
MU0 * h * frequency *
sqrt (ErEff / er) / ZlEff;
279 e = er - (er - ErEff) / (1 +
sqr (f));
280 Weff =
Z0 * h / ZlEff /
sqrt (ErEff);
281 We = W + (Weff - W) / (1 +
sqr (f));
282 z =
Z0 * h / We /
sqrt (e);
285 else if (!strcmp (Model,
"Hammerstad")) {
288 f = 2 *
MU0 * h * frequency / ZlEff;
289 e = er - (er - ErEff) / (1 + g *
sqr (f));
290 z = ZlEff *
sqrt (ErEff / e) * (e - 1) / (ErEff - 1);
293 else if (!strcmp (Model,
"Kirschning")) {
294 nr_double_t r17, u = W / h, fn = frequency * h / 1e6;
314 b = 0.564 *
pow ((er - 0.9) / (er + 3), 0.053);
321 nr_double_t
b, nr_double_t&
e) {
322 e = (er + 1) / 2 + (er - 1) / 2 *
pow (1 + 10 / u, -a * b);
330 nr_double_t fu = 6 + (2 *
M_PI - 6) *
exp (-
pow (30.666 / u, 0.7528));
338 nr_double_t ZlEff, nr_double_t frequency,
339 nr_double_t&
e, nr_double_t& z) {
341 g = 0.6 + 0.009 * ZlEff;
342 f = frequency * 2 *
MU0 * h / ZlEff;
343 e = er - (er - ErEff) / (1 + g *
sqr (f));
344 d = (er -
e) * (e - ErEff) / e / (er - ErEff);
345 z = ZlEff *
sqrt (e / ErEff) / (1 + d);
353 nr_double_t ErEff, nr_double_t& ErEffFreq) {
354 nr_double_t p, p1, p2, p3, p4;
355 p1 = 0.27488 + (0.6315 + 0.525 /
pow (1 + 0.0157 * fn, 20)) * u -
356 0.065683 *
exp (-8.7513 * u);
357 p2 = 0.33622 * (1 -
exp (-0.03442 * er));
358 p3 = 0.0363 *
exp (-4.6 * u) * (1 -
exp (-
pow (fn / 38.7, 4.97)));
359 p4 = 1 + 2.751 * (1 -
exp (-
pow (er / 15.916, 8)));
360 p = p1 * p2 *
pow ((0.1844 + p3 * p4) * fn, 1.5763);
361 ErEffFreq = er - (er - ErEff) / (1 + p);
368 nr_double_t ErEff, nr_double_t ErEffFreq,
369 nr_double_t ZlEff, nr_double_t& r17,
370 nr_double_t& ZlEffFreq) {
371 nr_double_t r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
372 nr_double_t r11, r12, r13, r14, r15, r16;
373 r1 = 0.03891 *
pow (er, 1.4);
374 r2 = 0.267 *
pow (u, 7);
375 r3 = 4.766 *
exp (-3.228 *
pow (u, 0.641));
376 r4 = 0.016 +
pow (0.0514 * er, 4.524);
377 r5 =
pow (fn / 28.843, 12);
378 r6 = 22.20 *
pow (u, 1.92);
379 r7 = 1.206 - 0.3144 *
exp (-r1) * (1 -
exp (-r2));
380 r8 = 1 + 1.275 * (1 -
exp (-0.004625 * r3 *
381 pow (er, 1.674) *
pow (fn / 18.365, 2.745)));
382 r9 = 5.086 * r4 * r5 / (0.3838 + 0.386 * r4) *
383 exp (-r6) / (1 + 1.2992 * r5) *
384 pow (er - 1, 6) / (1 + 10 *
pow (er - 1, 6));
385 r10 = 0.00044 *
pow (er, 2.136) + 0.0184;
386 r11 =
pow (fn / 19.47, 6) / (1 + 0.0962 *
pow (fn / 19.47, 6));
387 r12 = 1 / (1 + 0.00245 *
sqr (u));
388 r13 = 0.9408 *
pow (ErEffFreq, r8) - 0.9603;
389 r14 = (0.9408 - r9) *
pow (ErEff, r8) - 0.9603;
390 r15 = 0.707 * r10 *
pow (fn / 12.3, 1.097);
391 r16 = 1 + 0.0503 *
sqr (er) * r11 * (1 -
exp (- pow (u / 15, 6)));
392 r17 = r7 * (1 - 1.1241 * r12 / r16 *
393 exp (-0.026 * pow (fn, 1.15656) - r15));
394 ZlEffFreq = ZlEff *
pow (r13 / r14, r17);
400 nr_double_t rho, nr_double_t
D, nr_double_t tand,
401 nr_double_t ZlEff1, nr_double_t ZlEff2,
403 nr_double_t frequency,
const char * Model,
404 nr_double_t& ac, nr_double_t& ad) {
408 if (!strcmp (Model,
"Hammerstad")) {
409 nr_double_t Rs, ds, l0, Kr, Ki;
418 "WARNING: conductor loss calculation invalid for line "
419 "height t (%g) < 3 * skin depth (%g)\n", t, 3 * ds);
422 Ki =
exp (-1.2 *
pow ((ZlEff1 + ZlEff2) / 2 /
Z0, 0.7));
425 ac = Rs / (ZlEff1 * W) * Ki * Kr;
430 ad =
M_PI * er / (er - 1) * (ErEff - 1) /
sqrt (ErEff) * tand / l0;
441 if (t != 0.0 && rho != 0.0 && l != 0.0) {
443 nr_double_t g = t * W / rho / l;