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 /dataj/ */ |
||
| 29 | dataj_t dataj; |
||
| 30 | |||
| 31 | /* common /gnd/ */ |
||
| 32 | extern gnd_t gnd; |
||
| 33 | |||
| 34 | /* common /incom/ */ |
||
| 35 | extern incom_t incom; |
||
| 36 | |||
| 37 | /* common /tmi/ */ |
||
| 38 | tmi_t tmi; |
||
| 39 | |||
| 40 | /*common /tmh/ */ |
||
| 41 | static tmh_t tmh; |
||
| 42 | |||
| 43 | /* common /gwav/ */ |
||
| 44 | extern gwav_t gwav; |
||
| 45 | |||
| 46 | /* common /data/ */ |
||
| 47 | extern data_t data; |
||
| 48 | |||
| 49 | /* common /crnt/ */ |
||
| 50 | extern crnt_t crnt; |
||
| 51 | |||
| 52 | /* common /fpat/ */ |
||
| 53 | extern fpat_t fpat; |
||
| 54 | |||
| 55 | /* common /plot/ */ |
||
| 56 | extern plot_t plot; |
||
| 57 | |||
| 58 | /* pointers to input/output files */ |
||
| 59 | extern FILE *input_fp, *output_fp, *plot_fp; |
||
| 60 | |||
| 61 | /*-------------------------------------------------------------------*/ |
||
| 62 | |||
| 63 | /* compute near e fields of a segment with sine, cosine, and */ |
||
| 64 | /* constant currents. ground effect included. */ |
||
| 65 | void efld (double xi, double yi, double zi, double ai, int ij) |
||
| 66 | { |
||
| 67 | #define txk egnd[0] |
||
| 68 | #define tyk egnd[1] |
||
| 69 | #define tzk egnd[2] |
||
| 70 | #define txs egnd[3] |
||
| 71 | #define tys egnd[4] |
||
| 72 | #define tzs egnd[5] |
||
| 73 | #define txc egnd[6] |
||
| 74 | #define tyc egnd[7] |
||
| 75 | #define tzc egnd[8] |
||
| 76 | |||
| 77 | int ip; |
||
| 78 | double xij, yij, ijx, rfl, salpr, zij, zp, rhox; |
||
| 79 | double rhoy, rhoz, rh, r, rmag, cth, px, py; |
||
| 80 | double xymag, xspec, yspec, rhospc, dmin, shaf; |
||
| 81 | complex double epx, epy, refs, refps, zrsin, zratx, zscrn; |
||
| 82 | complex double tezs, ters, tezc, terc, tezk, terk, egnd[9]; |
||
| 83 | |||
| 84 | xij = xi - dataj.xj; |
||
| 85 | yij = yi - dataj.yj; |
||
| 86 | ijx = ij; |
||
| 87 | rfl = -1.; |
||
| 88 | |||
| 89 | for (ip = 0; ip < gnd.ksymp; ip++) |
||
| 90 | { |
||
| 91 | if (ip == 1) |
||
| 92 | ijx = 1; |
||
| 93 | rfl = -rfl; |
||
| 94 | salpr = dataj.salpj * rfl; |
||
| 95 | zij = zi - rfl * dataj.zj; |
||
| 96 | zp = xij * dataj.cabj + yij * dataj.sabj + zij * salpr; |
||
| 97 | rhox = xij - dataj.cabj * zp; |
||
| 98 | rhoy = yij - dataj.sabj * zp; |
||
| 99 | rhoz = zij - salpr * zp; |
||
| 100 | |||
| 101 | rh = sqrtl (rhox * rhox + rhoy * rhoy + rhoz * rhoz + ai * ai); |
||
| 102 | if (rh <= 1.e-10) |
||
| 103 | { |
||
| 104 | rhox = 0.; |
||
| 105 | rhoy = 0.; |
||
| 106 | rhoz = 0.; |
||
| 107 | } |
||
| 108 | else |
||
| 109 | { |
||
| 110 | rhox = rhox / rh; |
||
| 111 | rhoy = rhoy / rh; |
||
| 112 | rhoz = rhoz / rh; |
||
| 113 | } |
||
| 114 | |||
| 115 | /* lumped current element approx. for large separations */ |
||
| 116 | r = sqrtl (zp * zp + rh * rh); |
||
| 117 | if (r >= dataj.rkh) |
||
| 118 | { |
||
| 119 | rmag = TP * r; |
||
| 120 | cth = zp / r; |
||
| 121 | px = rh / r; |
||
| 122 | txk = cmplx (cosl (rmag), -sinl (rmag)); |
||
| 123 | py = TP * r * r; |
||
| 124 | tyk = ETA * cth * txk * cmplx (1.0, -1.0 / rmag) / py; |
||
| 125 | tzk = ETA * px * txk * cmplx (1.0, rmag - 1.0 / rmag) / (2. * py); |
||
| 126 | tezk = tyk * cth - tzk * px; |
||
| 127 | terk = tyk * px + tzk * cth; |
||
| 128 | rmag = sinl (PI * dataj.s) / PI; |
||
| 129 | tezc = tezk * rmag; |
||
| 130 | terc = terk * rmag; |
||
| 131 | tezk = tezk * dataj.s; |
||
| 132 | terk = terk * dataj.s; |
||
| 133 | txs = CPLX_00; |
||
| 134 | tys = CPLX_00; |
||
| 135 | tzs = CPLX_00; |
||
| 136 | |||
| 137 | } /* if( r >= dataj.rkh) */ |
||
| 138 | |||
| 139 | if (r < dataj.rkh) |
||
| 140 | { |
||
| 141 | /* eksc for thin wire approx. or ekscx for extended t.w. approx. */ |
||
| 142 | if (dataj.iexk != 1) |
||
| 143 | eksc ( |
||
| 144 | dataj.s, |
||
| 145 | zp, |
||
| 146 | rh, |
||
| 147 | TP, |
||
| 148 | ijx, |
||
| 149 | &tezs, |
||
| 150 | &ters, |
||
| 151 | &tezc, |
||
| 152 | &terc, |
||
| 153 | &tezk, |
||
| 154 | &terk); |
||
| 155 | else |
||
| 156 | ekscx ( |
||
| 157 | dataj.b, |
||
| 158 | dataj.s, |
||
| 159 | zp, |
||
| 160 | rh, |
||
| 161 | TP, |
||
| 162 | ijx, |
||
| 163 | dataj.ind1, |
||
| 164 | dataj.ind2, |
||
| 165 | &tezs, |
||
| 166 | &ters, |
||
| 167 | &tezc, |
||
| 168 | &terc, |
||
| 169 | &tezk, |
||
| 170 | &terk); |
||
| 171 | |||
| 172 | txs = tezs * dataj.cabj + ters * rhox; |
||
| 173 | tys = tezs * dataj.sabj + ters * rhoy; |
||
| 174 | tzs = tezs * salpr + ters * rhoz; |
||
| 175 | |||
| 176 | } /* if( r < dataj.rkh) */ |
||
| 177 | |||
| 178 | txk = tezk * dataj.cabj + terk * rhox; |
||
| 179 | tyk = tezk * dataj.sabj + terk * rhoy; |
||
| 180 | tzk = tezk * salpr + terk * rhoz; |
||
| 181 | txc = tezc * dataj.cabj + terc * rhox; |
||
| 182 | tyc = tezc * dataj.sabj + terc * rhoy; |
||
| 183 | tzc = tezc * salpr + terc * rhoz; |
||
| 184 | |||
| 185 | if (ip == 1) |
||
| 186 | { |
||
| 187 | if (gnd.iperf <= 0) |
||
| 188 | { |
||
| 189 | zratx = gnd.zrati; |
||
| 190 | rmag = r; |
||
| 191 | xymag = sqrtl (xij * xij + yij * yij); |
||
| 192 | |||
| 193 | /* set parameters for radial wire ground screen. */ |
||
| 194 | if (gnd.nradl != 0) |
||
| 195 | { |
||
| 196 | xspec = |
||
| 197 | (xi * dataj.zj + zi * dataj.xj) / (zi + dataj.zj); |
||
| 198 | yspec = |
||
| 199 | (yi * dataj.zj + zi * dataj.yj) / (zi + dataj.zj); |
||
| 200 | rhospc = sqrtl ( |
||
| 201 | xspec * xspec + yspec * yspec + gnd.t2 * gnd.t2); |
||
| 202 | |||
| 203 | if (rhospc <= gnd.scrwl) |
||
| 204 | { |
||
| 205 | zscrn = |
||
| 206 | gnd.t1 * rhospc * logl (rhospc / gnd.t2); |
||
| 207 | zratx = (zscrn * gnd.zrati) / |
||
| 208 | (ETA * gnd.zrati + zscrn); |
||
| 209 | } |
||
| 210 | } /* if( gnd.nradl != 0) */ |
||
| 211 | |||
| 212 | /* calculation of reflection coefficients when ground is |
||
| 213 | * specified. */ |
||
| 214 | if (xymag <= 1.0e-6) |
||
| 215 | { |
||
| 216 | px = 0.; |
||
| 217 | py = 0.; |
||
| 218 | cth = 1.; |
||
| 219 | zrsin = CPLX_10; |
||
| 220 | } |
||
| 221 | else |
||
| 222 | { |
||
| 223 | px = -yij / xymag; |
||
| 224 | py = xij / xymag; |
||
| 225 | cth = zij / rmag; |
||
| 226 | zrsin = |
||
| 227 | csqrtl (1.0 - zratx * zratx * (1.0 - cth * cth)); |
||
| 228 | |||
| 229 | } /* if( xymag <= 1.0e-6) */ |
||
| 230 | |||
| 231 | refs = (cth - zratx * zrsin) / (cth + zratx * zrsin); |
||
| 232 | refps = -(zratx * cth - zrsin) / (zratx * cth + zrsin); |
||
| 233 | refps = refps - refs; |
||
| 234 | epy = px * txk + py * tyk; |
||
| 235 | epx = px * epy; |
||
| 236 | epy = py * epy; |
||
| 237 | txk = refs * txk + refps * epx; |
||
| 238 | tyk = refs * tyk + refps * epy; |
||
| 239 | tzk = refs * tzk; |
||
| 240 | epy = px * txs + py * tys; |
||
| 241 | epx = px * epy; |
||
| 242 | epy = py * epy; |
||
| 243 | txs = refs * txs + refps * epx; |
||
| 244 | tys = refs * tys + refps * epy; |
||
| 245 | tzs = refs * tzs; |
||
| 246 | epy = px * txc + py * tyc; |
||
| 247 | epx = px * epy; |
||
| 248 | epy = py * epy; |
||
| 249 | txc = refs * txc + refps * epx; |
||
| 250 | tyc = refs * tyc + refps * epy; |
||
| 251 | tzc = refs * tzc; |
||
| 252 | |||
| 253 | } /* if( gnd.iperf <= 0) */ |
||
| 254 | |||
| 255 | dataj.exk = dataj.exk - txk * gnd.frati; |
||
| 256 | dataj.eyk = dataj.eyk - tyk * gnd.frati; |
||
| 257 | dataj.ezk = dataj.ezk - tzk * gnd.frati; |
||
| 258 | dataj.exs = dataj.exs - txs * gnd.frati; |
||
| 259 | dataj.eys = dataj.eys - tys * gnd.frati; |
||
| 260 | dataj.ezs = dataj.ezs - tzs * gnd.frati; |
||
| 261 | dataj.exc = dataj.exc - txc * gnd.frati; |
||
| 262 | dataj.eyc = dataj.eyc - tyc * gnd.frati; |
||
| 263 | dataj.ezc = dataj.ezc - tzc * gnd.frati; |
||
| 264 | continue; |
||
| 265 | |||
| 266 | } /* if( ip == 1) */ |
||
| 267 | |||
| 268 | dataj.exk = txk; |
||
| 269 | dataj.eyk = tyk; |
||
| 270 | dataj.ezk = tzk; |
||
| 271 | dataj.exs = txs; |
||
| 272 | dataj.eys = tys; |
||
| 273 | dataj.ezs = tzs; |
||
| 274 | dataj.exc = txc; |
||
| 275 | dataj.eyc = tyc; |
||
| 276 | dataj.ezc = tzc; |
||
| 277 | |||
| 278 | } /* for( ip = 0; ip < gnd.ksymp; ip++ ) */ |
||
| 279 | |||
| 280 | if (gnd.iperf != 2) |
||
| 281 | return; |
||
| 282 | |||
| 283 | /* field due to ground using sommerfeld/norton */ |
||
| 284 | incom.sn = sqrtl (dataj.cabj * dataj.cabj + dataj.sabj * dataj.sabj); |
||
| 285 | if (incom.sn >= 1.0e-5) |
||
| 286 | { |
||
| 287 | incom.xsn = dataj.cabj / incom.sn; |
||
| 288 | incom.ysn = dataj.sabj / incom.sn; |
||
| 289 | } |
||
| 290 | else |
||
| 291 | { |
||
| 292 | incom.sn = 0.; |
||
| 293 | incom.xsn = 1.; |
||
| 294 | incom.ysn = 0.; |
||
| 295 | } |
||
| 296 | |||
| 297 | /* displace observation point for thin wire approximation */ |
||
| 298 | zij = zi + dataj.zj; |
||
| 299 | salpr = -dataj.salpj; |
||
| 300 | rhox = dataj.sabj * zij - salpr * yij; |
||
| 301 | rhoy = salpr * xij - dataj.cabj * zij; |
||
| 302 | rhoz = dataj.cabj * yij - dataj.sabj * xij; |
||
| 303 | rh = rhox * rhox + rhoy * rhoy + rhoz * rhoz; |
||
| 304 | |||
| 305 | if (rh <= 1.e-10) |
||
| 306 | { |
||
| 307 | incom.xo = xi - ai * incom.ysn; |
||
| 308 | incom.yo = yi + ai * incom.xsn; |
||
| 309 | incom.zo = zi; |
||
| 310 | } |
||
| 311 | else |
||
| 312 | { |
||
| 313 | rh = ai / sqrtl (rh); |
||
| 314 | if (rhoz < 0.) |
||
| 315 | rh = -rh; |
||
| 316 | incom.xo = xi + rh * rhox; |
||
| 317 | incom.yo = yi + rh * rhoy; |
||
| 318 | incom.zo = zi + rh * rhoz; |
||
| 319 | |||
| 320 | } /* if( rh <= 1.e-10) */ |
||
| 321 | |||
| 322 | r = xij * xij + yij * yij + zij * zij; |
||
| 323 | if (r <= .95) |
||
| 324 | { |
||
| 325 | /* field from interpolation is integrated over segment */ |
||
| 326 | incom.isnor = 1; |
||
| 327 | dmin = dataj.exk * conjl (dataj.exk) + dataj.eyk * conjl (dataj.eyk) + |
||
| 328 | dataj.ezk * conjl (dataj.ezk); |
||
| 329 | dmin = .01 * sqrtl (dmin); |
||
| 330 | shaf = .5 * dataj.s; |
||
| 331 | rom2 (-shaf, shaf, egnd, dmin); |
||
| 332 | } |
||
| 333 | else |
||
| 334 | { |
||
| 335 | /* norton field equations and lumped current element approximation */ |
||
| 336 | incom.isnor = 2; |
||
| 337 | sflds (0., egnd); |
||
| 338 | } /* if( r <= .95) */ |
||
| 339 | |||
| 340 | if (r > .95) |
||
| 341 | { |
||
| 342 | zp = xij * dataj.cabj + yij * dataj.sabj + zij * salpr; |
||
| 343 | rh = r - zp * zp; |
||
| 344 | if (rh <= 1.e-10) |
||
| 345 | dmin = 0.; |
||
| 346 | else |
||
| 347 | dmin = sqrtl (rh / (rh + ai * ai)); |
||
| 348 | |||
| 349 | if (dmin <= .95) |
||
| 350 | { |
||
| 351 | px = 1. - dmin; |
||
| 352 | terk = (txk * dataj.cabj + tyk * dataj.sabj + tzk * salpr) * px; |
||
| 353 | txk = dmin * txk + terk * dataj.cabj; |
||
| 354 | tyk = dmin * tyk + terk * dataj.sabj; |
||
| 355 | tzk = dmin * tzk + terk * salpr; |
||
| 356 | ters = (txs * dataj.cabj + tys * dataj.sabj + tzs * salpr) * px; |
||
| 357 | txs = dmin * txs + ters * dataj.cabj; |
||
| 358 | tys = dmin * tys + ters * dataj.sabj; |
||
| 359 | tzs = dmin * tzs + ters * salpr; |
||
| 360 | terc = (txc * dataj.cabj + tyc * dataj.sabj + tzc * salpr) * px; |
||
| 361 | txc = dmin * txc + terc * dataj.cabj; |
||
| 362 | tyc = dmin * tyc + terc * dataj.sabj; |
||
| 363 | tzc = dmin * tzc + terc * salpr; |
||
| 364 | |||
| 365 | } /* if( dmin <= .95) */ |
||
| 366 | |||
| 367 | } /* if( r > .95) */ |
||
| 368 | |||
| 369 | dataj.exk = dataj.exk + txk; |
||
| 370 | dataj.eyk = dataj.eyk + tyk; |
||
| 371 | dataj.ezk = dataj.ezk + tzk; |
||
| 372 | dataj.exs = dataj.exs + txs; |
||
| 373 | dataj.eys = dataj.eys + tys; |
||
| 374 | dataj.ezs = dataj.ezs + tzs; |
||
| 375 | dataj.exc = dataj.exc + txc; |
||
| 376 | dataj.eyc = dataj.eyc + tyc; |
||
| 377 | dataj.ezc = dataj.ezc + tzc; |
||
| 378 | |||
| 379 | return; |
||
| 380 | } |
||
| 381 | |||
| 382 | /*-----------------------------------------------------------------------*/ |
||
| 383 | |||
| 384 | /* compute e field of sine, cosine, and constant */ |
||
| 385 | /* current filaments by thin wire approximation. */ |
||
| 386 | void eksc ( |
||
| 387 | double s, |
||
| 388 | double z, |
||
| 389 | double rh, |
||
| 390 | double xk, |
||
| 391 | int ij, |
||
| 392 | complex double *ezs, |
||
| 393 | complex double *ers, |
||
| 394 | complex double *ezc, |
||
| 395 | complex double *erc, |
||
| 396 | complex double *ezk, |
||
| 397 | complex double *erk) |
||
| 398 | { |
||
| 399 | double rhk, sh, shk, ss, cs, z1a, z2a, cint, sint; |
||
| 400 | complex double gz1, gz2, gp1, gp2, gzp1, gzp2; |
||
| 401 | |||
| 402 | tmi.ij = ij; |
||
| 403 | tmi.zpk = xk * z; |
||
| 404 | rhk = xk * rh; |
||
| 405 | tmi.rkb2 = rhk * rhk; |
||
| 406 | sh = .5 * s; |
||
| 407 | shk = xk * sh; |
||
| 408 | ss = sinl (shk); |
||
| 409 | cs = cosl (shk); |
||
| 410 | z2a = sh - z; |
||
| 411 | z1a = -(sh + z); |
||
| 412 | gx (z1a, rh, xk, &gz1, &gp1); |
||
| 413 | gx (z2a, rh, xk, &gz2, &gp2); |
||
| 414 | gzp1 = gp1 * z1a; |
||
| 415 | gzp2 = gp2 * z2a; |
||
| 416 | *ezs = CONST1 * ((gz2 - gz1) * cs * xk - (gzp2 + gzp1) * ss); |
||
| 417 | *ezc = -CONST1 * ((gz2 + gz1) * ss * xk + (gzp2 - gzp1) * cs); |
||
| 418 | *erk = CONST1 * (gp2 - gp1) * rh; |
||
| 419 | intx (-shk, shk, rhk, ij, &cint, &sint); |
||
| 420 | *ezk = -CONST1 * (gzp2 - gzp1 + xk * xk * cmplx (cint, -sint)); |
||
| 421 | gzp1 = gzp1 * z1a; |
||
| 422 | gzp2 = gzp2 * z2a; |
||
| 423 | |||
| 424 | if (rh >= 1.0e-10) |
||
| 425 | { |
||
| 426 | *ers = -CONST1 * |
||
| 427 | ((gzp2 + gzp1 + gz2 + gz1) * ss - (z2a * gz2 - z1a * gz1) * cs * xk) / |
||
| 428 | rh; |
||
| 429 | *erc = -CONST1 * |
||
| 430 | ((gzp2 - gzp1 + gz2 - gz1) * cs + (z2a * gz2 + z1a * gz1) * ss * xk) / |
||
| 431 | rh; |
||
| 432 | return; |
||
| 433 | } |
||
| 434 | |||
| 435 | *ers = CPLX_00; |
||
| 436 | *erc = CPLX_00; |
||
| 437 | |||
| 438 | return; |
||
| 439 | } |
||
| 440 | |||
| 441 | /*-----------------------------------------------------------------------*/ |
||
| 442 | |||
| 443 | /* compute e field of sine, cosine, and constant current */ |
||
| 444 | /* filaments by extended thin wire approximation. */ |
||
| 445 | void ekscx ( |
||
| 446 | double bx, |
||
| 447 | double s, |
||
| 448 | double z, |
||
| 449 | double rhx, |
||
| 450 | double xk, |
||
| 451 | int ij, |
||
| 452 | int inx1, |
||
| 453 | int inx2, |
||
| 454 | complex double *ezs, |
||
| 455 | complex double *ers, |
||
| 456 | complex double *ezc, |
||
| 457 | complex double *erc, |
||
| 458 | complex double *ezk, |
||
| 459 | complex double *erk) |
||
| 460 | { |
||
| 461 | int ira; |
||
| 462 | double b, rh, sh, rhk, shk, ss, cs, z1a; |
||
| 463 | double z2a, a2, bk, bk2, cint, sint; |
||
| 464 | complex double gz1, gz2, gzp1, gzp2, gr1, gr2; |
||
| 465 | complex double grp1, grp2, grk1, grk2, gzz1, gzz2; |
||
| 466 | |||
| 467 | if (rhx >= bx) |
||
| 468 | { |
||
| 469 | rh = rhx; |
||
| 470 | b = bx; |
||
| 471 | ira = 0; |
||
| 472 | } |
||
| 473 | else |
||
| 474 | { |
||
| 475 | rh = bx; |
||
| 476 | b = rhx; |
||
| 477 | ira = 1; |
||
| 478 | } |
||
| 479 | |||
| 480 | sh = .5 * s; |
||
| 481 | tmi.ij = ij; |
||
| 482 | tmi.zpk = xk * z; |
||
| 483 | rhk = xk * rh; |
||
| 484 | tmi.rkb2 = rhk * rhk; |
||
| 485 | shk = xk * sh; |
||
| 486 | ss = sinl (shk); |
||
| 487 | cs = cosl (shk); |
||
| 488 | z2a = sh - z; |
||
| 489 | z1a = -(sh + z); |
||
| 490 | a2 = b * b; |
||
| 491 | |||
| 492 | if (inx1 != 2) |
||
| 493 | gxx (z1a, rh, b, a2, xk, ira, &gz1, &gzp1, &gr1, &grp1, &grk1, &gzz1); |
||
| 494 | else |
||
| 495 | { |
||
| 496 | gx (z1a, rhx, xk, &gz1, &grk1); |
||
| 497 | gzp1 = grk1 * z1a; |
||
| 498 | gr1 = gz1 / rhx; |
||
| 499 | grp1 = gzp1 / rhx; |
||
| 500 | grk1 = grk1 * rhx; |
||
| 501 | gzz1 = CPLX_00; |
||
| 502 | } |
||
| 503 | |||
| 504 | if (inx2 != 2) |
||
| 505 | gxx (z2a, rh, b, a2, xk, ira, &gz2, &gzp2, &gr2, &grp2, &grk2, &gzz2); |
||
| 506 | else |
||
| 507 | { |
||
| 508 | gx (z2a, rhx, xk, &gz2, &grk2); |
||
| 509 | gzp2 = grk2 * z2a; |
||
| 510 | gr2 = gz2 / rhx; |
||
| 511 | grp2 = gzp2 / rhx; |
||
| 512 | grk2 = grk2 * rhx; |
||
| 513 | gzz2 = CPLX_00; |
||
| 514 | } |
||
| 515 | |||
| 516 | *ezs = CONST1 * ((gz2 - gz1) * cs * xk - (gzp2 + gzp1) * ss); |
||
| 517 | *ezc = -CONST1 * ((gz2 + gz1) * ss * xk + (gzp2 - gzp1) * cs); |
||
| 518 | *ers = -CONST1 * ((z2a * grp2 + z1a * grp1 + gr2 + gr1) * ss - |
||
| 519 | (z2a * gr2 - z1a * gr1) * cs * xk); |
||
| 520 | *erc = -CONST1 * ((z2a * grp2 - z1a * grp1 + gr2 - gr1) * cs + |
||
| 521 | (z2a * gr2 + z1a * gr1) * ss * xk); |
||
| 522 | *erk = CONST1 * (grk2 - grk1); |
||
| 523 | intx (-shk, shk, rhk, ij, &cint, &sint); |
||
| 524 | bk = b * xk; |
||
| 525 | bk2 = bk * bk * .25; |
||
| 526 | *ezk = -CONST1 * (gzp2 - gzp1 + xk * xk * (1. - bk2) * cmplx (cint, -sint) - |
||
| 527 | bk2 * (gzz2 - gzz1)); |
||
| 528 | |||
| 529 | return; |
||
| 530 | } |
||
| 531 | |||
| 532 | /*-----------------------------------------------------------------------*/ |
||
| 533 | |||
| 534 | /* integrand for h field of a wire */ |
||
| 535 | void gh (double zk, double *hr, double *hi) |
||
| 536 | { |
||
| 537 | double rs, r, ckr, skr, rr2, rr3; |
||
| 538 | |||
| 539 | rs = zk - tmh.zpka; |
||
| 540 | rs = tmh.rhks + rs * rs; |
||
| 541 | r = sqrtl (rs); |
||
| 542 | ckr = cosl (r); |
||
| 543 | skr = sinl (r); |
||
| 544 | rr2 = 1. / rs; |
||
| 545 | rr3 = rr2 / r; |
||
| 546 | *hr = skr * rr2 + ckr * rr3; |
||
| 547 | *hi = ckr * rr2 - skr * rr3; |
||
| 548 | |||
| 549 | return; |
||
| 550 | } |
||
| 551 | |||
| 552 | /*-----------------------------------------------------------------------*/ |
||
| 553 | |||
| 554 | /* gwave computes the electric field, including ground wave, of a */ |
||
| 555 | /* current element over a ground plane using formulas of k.a. norton */ |
||
| 556 | /* (proc. ire, sept., 1937, pp.1203,1236.) */ |
||
| 557 | |||
| 558 | void gwave ( |
||
| 559 | complex double *erv, |
||
| 560 | complex double *ezv, |
||
| 561 | complex double *erh, |
||
| 562 | complex double *ezh, |
||
| 563 | complex double *eph) |
||
| 564 | { |
||
| 565 | double sppp, sppp2, cppp2, cppp, spp, spp2, cpp2, cpp; |
||
| 566 | complex double rk1, rk2, t1, t2, t3, t4, p1, rv; |
||
| 567 | complex double omr, w, f, q1, rh, v, g, xr1, xr2; |
||
| 568 | complex double x1, x2, x3, x4, x5, x6, x7; |
||
| 569 | |||
| 570 | sppp = gwav.zmh / gwav.r1; |
||
| 571 | sppp2 = sppp * sppp; |
||
| 572 | cppp2 = 1. - sppp2; |
||
| 573 | |||
| 574 | if (cppp2 < 1.0e-20) |
||
| 575 | cppp2 = 1.0e-20; |
||
| 576 | |||
| 577 | cppp = sqrtl (cppp2); |
||
| 578 | spp = gwav.zph / gwav.r2; |
||
| 579 | spp2 = spp * spp; |
||
| 580 | cpp2 = 1. - spp2; |
||
| 581 | |||
| 582 | if (cpp2 < 1.0e-20) |
||
| 583 | cpp2 = 1.0e-20; |
||
| 584 | |||
| 585 | cpp = sqrtl (cpp2); |
||
| 586 | rk1 = -TPJ * gwav.r1; |
||
| 587 | rk2 = -TPJ * gwav.r2; |
||
| 588 | t1 = 1. - gwav.u2 * cpp2; |
||
| 589 | t2 = csqrtl (t1); |
||
| 590 | t3 = (1. - 1. / rk1) / rk1; |
||
| 591 | t4 = (1. - 1. / rk2) / rk2; |
||
| 592 | p1 = rk2 * gwav.u2 * t1 / (2. * cpp2); |
||
| 593 | rv = (spp - gwav.u * t2) / (spp + gwav.u * t2); |
||
| 594 | omr = 1. - rv; |
||
| 595 | w = 1. / omr; |
||
| 596 | w = (4.0 + 0.0fj) * p1 * w * w; |
||
| 597 | fbar (w, &f); |
||
| 598 | q1 = rk2 * t1 / (2. * gwav.u2 * cpp2); |
||
| 599 | rh = (t2 - gwav.u * spp) / (t2 + gwav.u * spp); |
||
| 600 | v = 1. / (1. + rh); |
||
| 601 | v = (4.0 + 0.0fj) * q1 * v * v; |
||
| 602 | fbar (v, &g); |
||
| 603 | xr1 = gwav.xx1 / gwav.r1; |
||
| 604 | xr2 = gwav.xx2 / gwav.r2; |
||
| 605 | x1 = cppp2 * xr1; |
||
| 606 | x2 = rv * cpp2 * xr2; |
||
| 607 | x3 = omr * cpp2 * f * xr2; |
||
| 608 | x4 = gwav.u * t2 * spp * 2. * xr2 / rk2; |
||
| 609 | x5 = xr1 * t3 * (1. - 3. * sppp2); |
||
| 610 | x6 = xr2 * t4 * (1. - 3. * spp2); |
||
| 611 | *ezv = (x1 + x2 + x3 - x4 - x5 - x6) * (-CONST4); |
||
| 612 | x1 = sppp * cppp * xr1; |
||
| 613 | x2 = rv * spp * cpp * xr2; |
||
| 614 | x3 = cpp * omr * gwav.u * t2 * f * xr2; |
||
| 615 | x4 = spp * cpp * omr * xr2 / rk2; |
||
| 616 | x5 = 3. * sppp * cppp * t3 * xr1; |
||
| 617 | x6 = cpp * gwav.u * t2 * omr * xr2 / rk2 * .5; |
||
| 618 | x7 = 3. * spp * cpp * t4 * xr2; |
||
| 619 | *erv = -(x1 + x2 - x3 + x4 - x5 + x6 - x7) * (-CONST4); |
||
| 620 | *ezh = -(x1 - x2 + x3 - x4 - x5 - x6 + x7) * (-CONST4); |
||
| 621 | x1 = sppp2 * xr1; |
||
| 622 | x2 = rv * spp2 * xr2; |
||
| 623 | x4 = gwav.u2 * t1 * omr * f * xr2; |
||
| 624 | x5 = t3 * (1. - 3. * cppp2) * xr1; |
||
| 625 | x6 = t4 * (1. - 3. * cpp2) * (1. - gwav.u2 * (1. + rv) - gwav.u2 * omr * f) * xr2; |
||
| 626 | x7 = gwav.u2 * cpp2 * omr * (1. - 1. / rk2) * |
||
| 627 | (f * (gwav.u2 * t1 - spp2 - 1. / rk2) + 1. / rk2) * xr2; |
||
| 628 | *erh = (x1 - x2 - x4 - x5 + x6 + x7) * (-CONST4); |
||
| 629 | x1 = xr1; |
||
| 630 | x2 = rh * xr2; |
||
| 631 | x3 = (rh + 1.) * g * xr2; |
||
| 632 | x4 = t3 * xr1; |
||
| 633 | x5 = t4 * (1. - gwav.u2 * (1. + rv) - gwav.u2 * omr * f) * xr2; |
||
| 634 | x6 = |
||
| 635 | .5 * gwav.u2 * omr * (f * (gwav.u2 * t1 - spp2 - 1. / rk2) + 1. / rk2) * xr2 / rk2; |
||
| 636 | *eph = -(x1 - x2 + x3 - x4 + x5 + x6) * (-CONST4); |
||
| 637 | |||
| 638 | return; |
||
| 639 | } |
||
| 640 | |||
| 641 | /*-----------------------------------------------------------------------*/ |
||
| 642 | |||
| 643 | /* segment end contributions for thin wire approx. */ |
||
| 644 | void gx (double zz, double rh, double xk, complex double *gz, complex double *gzp) |
||
| 645 | { |
||
| 646 | double r, r2, rkz; |
||
| 647 | |||
| 648 | r2 = zz * zz + rh * rh; |
||
| 649 | r = sqrtl (r2); |
||
| 650 | rkz = xk * r; |
||
| 651 | *gz = cmplx (cosl (rkz), -sinl (rkz)) / r; |
||
| 652 | *gzp = -cmplx (1.0, rkz) * *gz / r2; |
||
| 653 | |||
| 654 | return; |
||
| 655 | } |
||
| 656 | |||
| 657 | /*-----------------------------------------------------------------------*/ |
||
| 658 | |||
| 659 | /* segment end contributions for ext. thin wire approx. */ |
||
| 660 | void gxx ( |
||
| 661 | double zz, |
||
| 662 | double rh, |
||
| 663 | double a, |
||
| 664 | double a2, |
||
| 665 | double xk, |
||
| 666 | int ira, |
||
| 667 | complex double *g1, |
||
| 668 | complex double *g1p, |
||
| 669 | complex double *g2, |
||
| 670 | complex double *g2p, |
||
| 671 | complex double *g3, |
||
| 672 | complex double *gzp) |
||
| 673 | { |
||
| 674 | double r, r2, r4, rk, rk2, rh2, t1, t2; |
||
| 675 | complex double gz, c1, c2, c3; |
||
| 676 | |||
| 677 | r2 = zz * zz + rh * rh; |
||
| 678 | r = sqrtl (r2); |
||
| 679 | r4 = r2 * r2; |
||
| 680 | rk = xk * r; |
||
| 681 | rk2 = rk * rk; |
||
| 682 | rh2 = rh * rh; |
||
| 683 | t1 = .25 * a2 * rh2 / r4; |
||
| 684 | t2 = .5 * a2 / r2; |
||
| 685 | c1 = cmplx (1.0, rk); |
||
| 686 | c2 = 3. * c1 - rk2; |
||
| 687 | c3 = cmplx (6.0, rk) * rk2 - 15. * c1; |
||
| 688 | gz = cmplx (cosl (rk), -sinl (rk)) / r; |
||
| 689 | *g2 = gz * (1. + t1 * c2); |
||
| 690 | *g1 = *g2 - t2 * c1 * gz; |
||
| 691 | gz = gz / r2; |
||
| 692 | *g2p = gz * (t1 * c3 - c1); |
||
| 693 | *gzp = t2 * c2 * gz; |
||
| 694 | *g3 = *g2p + *gzp; |
||
| 695 | *g1p = *g3 * zz; |
||
| 696 | |||
| 697 | if (ira != 1) |
||
| 698 | { |
||
| 699 | *g3 = (*g3 + *gzp) * rh; |
||
| 700 | *gzp = -zz * c1 * gz; |
||
| 701 | |||
| 702 | if (rh <= 1.0e-10) |
||
| 703 | { |
||
| 704 | *g2 = 0.; |
||
| 705 | *g2p = 0.; |
||
| 706 | return; |
||
| 707 | } |
||
| 708 | |||
| 709 | *g2 = *g2 / rh; |
||
| 710 | *g2p = *g2p * zz / rh; |
||
| 711 | return; |
||
| 712 | |||
| 713 | } /* if( ira != 1) */ |
||
| 714 | |||
| 715 | t2 = .5 * a; |
||
| 716 | *g2 = -t2 * c1 * gz; |
||
| 717 | *g2p = t2 * gz * c2 / r2; |
||
| 718 | *g3 = rh2 * *g2p - a * gz * c1; |
||
| 719 | *g2p = *g2p * zz; |
||
| 720 | *gzp = -zz * c1 * gz; |
||
| 721 | |||
| 722 | return; |
||
| 723 | } |
||
| 724 | |||
| 725 | /*-----------------------------------------------------------------------*/ |
||
| 726 | |||
| 727 | /* hfk computes the h field of a uniform current */ |
||
| 728 | /* filament by numerical integration */ |
||
| 729 | void hfk (double el1, double el2, double rhk, double zpkx, double *sgr, double *sgi) |
||
| 730 | { |
||
| 731 | int nx = 1, nma = 65536, nts = 4; |
||
| 732 | int ns, nt; |
||
| 733 | int flag = TRUE; |
||
| 734 | double rx = 1.0e-4; |
||
| 735 | double z, ze, s, ep, zend, dz = 0., zp, dzot = 0., t00r, g1r, g5r = 0, t00i; |
||
| 736 | double g1i, g5i = 0., t01r, g3r = 0, t01i, g3i = 0, t10r, t10i, te1i, te1r, t02r; |
||
| 737 | double g2r, g4r, t02i, g2i, g4i, t11r, t11i, t20r, t20i, te2i, te2r; |
||
| 738 | |||
| 739 | tmh.zpka = zpkx; |
||
| 740 | tmh.rhks = rhk * rhk; |
||
| 741 | z = el1; |
||
| 742 | ze = el2; |
||
| 743 | s = ze - z; |
||
| 744 | ep = s / (10. * nma); |
||
| 745 | zend = ze - ep; |
||
| 746 | *sgr = 0.0; |
||
| 747 | *sgi = 0.0; |
||
| 748 | ns = nx; |
||
| 749 | nt = 0; |
||
| 750 | gh (z, &g1r, &g1i); |
||
| 751 | |||
| 752 | while (TRUE) |
||
| 753 | { |
||
| 754 | if (flag) |
||
| 755 | { |
||
| 756 | dz = s / ns; |
||
| 757 | zp = z + dz; |
||
| 758 | |||
| 759 | if (zp > ze) |
||
| 760 | { |
||
| 761 | dz = ze - z; |
||
| 762 | if (fabsl (dz) <= ep) |
||
| 763 | { |
||
| 764 | *sgr = *sgr * rhk * .5; |
||
| 765 | *sgi = *sgi * rhk * .5; |
||
| 766 | return; |
||
| 767 | } |
||
| 768 | } |
||
| 769 | |||
| 770 | dzot = dz * .5; |
||
| 771 | zp = z + dzot; |
||
| 772 | gh (zp, &g3r, &g3i); |
||
| 773 | zp = z + dz; |
||
| 774 | gh (zp, &g5r, &g5i); |
||
| 775 | |||
| 776 | } /* if( flag ) */ |
||
| 777 | |||
| 778 | t00r = (g1r + g5r) * dzot; |
||
| 779 | t00i = (g1i + g5i) * dzot; |
||
| 780 | t01r = (t00r + dz * g3r) * 0.5; |
||
| 781 | t01i = (t00i + dz * g3i) * 0.5; |
||
| 782 | t10r = (4.0 * t01r - t00r) / 3.0; |
||
| 783 | t10i = (4.0 * t01i - t00i) / 3.0; |
||
| 784 | |||
| 785 | test (t01r, t10r, &te1r, t01i, t10i, &te1i, 0.); |
||
| 786 | if ((te1i <= rx) && (te1r <= rx)) |
||
| 787 | { |
||
| 788 | *sgr = *sgr + t10r; |
||
| 789 | *sgi = *sgi + t10i; |
||
| 790 | nt += 2; |
||
| 791 | |||
| 792 | z += dz; |
||
| 793 | if (z >= zend) |
||
| 794 | { |
||
| 795 | *sgr = *sgr * rhk * .5; |
||
| 796 | *sgi = *sgi * rhk * .5; |
||
| 797 | return; |
||
| 798 | } |
||
| 799 | |||
| 800 | g1r = g5r; |
||
| 801 | g1i = g5i; |
||
| 802 | if (nt >= nts) |
||
| 803 | if (ns > nx) |
||
| 804 | { |
||
| 805 | ns = ns / 2; |
||
| 806 | nt = 1; |
||
| 807 | } |
||
| 808 | flag = TRUE; |
||
| 809 | continue; |
||
| 810 | |||
| 811 | } /* if( (te1i <= rx) && (te1r <= rx) ) */ |
||
| 812 | |||
| 813 | zp = z + dz * 0.25; |
||
| 814 | gh (zp, &g2r, &g2i); |
||
| 815 | zp = z + dz * 0.75; |
||
| 816 | gh (zp, &g4r, &g4i); |
||
| 817 | t02r = (t01r + dzot * (g2r + g4r)) * 0.5; |
||
| 818 | t02i = (t01i + dzot * (g2i + g4i)) * 0.5; |
||
| 819 | t11r = (4.0 * t02r - t01r) / 3.0; |
||
| 820 | t11i = (4.0 * t02i - t01i) / 3.0; |
||
| 821 | t20r = (16.0 * t11r - t10r) / 15.0; |
||
| 822 | t20i = (16.0 * t11i - t10i) / 15.0; |
||
| 823 | |||
| 824 | test (t11r, t20r, &te2r, t11i, t20i, &te2i, 0.); |
||
| 825 | if ((te2i > rx) || (te2r > rx)) |
||
| 826 | { |
||
| 827 | nt = 0; |
||
| 828 | if (ns >= nma) |
||
| 829 | fprintf (output_fp, "\n STEP SIZE LIMITED AT Z= %10.5f", z); |
||
| 830 | else |
||
| 831 | { |
||
| 832 | ns = ns * 2; |
||
| 833 | dz = s / ns; |
||
| 834 | dzot = dz * 0.5; |
||
| 835 | g5r = g3r; |
||
| 836 | g5i = g3i; |
||
| 837 | g3r = g2r; |
||
| 838 | g3i = g2i; |
||
| 839 | |||
| 840 | flag = FALSE; |
||
| 841 | continue; |
||
| 842 | } |
||
| 843 | |||
| 844 | } /* if( (te2i > rx) || (te2r > rx) ) */ |
||
| 845 | |||
| 846 | *sgr = *sgr + t20r; |
||
| 847 | *sgi = *sgi + t20i; |
||
| 848 | nt++; |
||
| 849 | |||
| 850 | z += dz; |
||
| 851 | if (z >= zend) |
||
| 852 | { |
||
| 853 | *sgr = *sgr * rhk * .5; |
||
| 854 | *sgi = *sgi * rhk * .5; |
||
| 855 | return; |
||
| 856 | } |
||
| 857 | |||
| 858 | g1r = g5r; |
||
| 859 | g1i = g5i; |
||
| 860 | if (nt >= nts) |
||
| 861 | if (ns > nx) |
||
| 862 | { |
||
| 863 | ns = ns / 2; |
||
| 864 | nt = 1; |
||
| 865 | } |
||
| 866 | flag = TRUE; |
||
| 867 | |||
| 868 | } /* while( TRUE ) */ |
||
| 869 | } |
||
| 870 | |||
| 871 | /*-----------------------------------------------------------------------*/ |
||
| 872 | |||
| 873 | /* hintg computes the h field of a patch current */ |
||
| 874 | void hintg (double xi, double yi, double zi) |
||
| 875 | { |
||
| 876 | int ip; |
||
| 877 | double rx, ry, rfl, xymag, pxx, pyy, cth; |
||
| 878 | double rz, rsq, r, rk, cr, sr, t1zr, t2zr; |
||
| 879 | complex double gam, f1x, f1y, f1z, f2x, f2y, f2z, rrv, rrh; |
||
| 880 | |||
| 881 | rx = xi - dataj.xj; |
||
| 882 | ry = yi - dataj.yj; |
||
| 883 | rfl = -1.; |
||
| 884 | dataj.exk = CPLX_00; |
||
| 885 | dataj.eyk = CPLX_00; |
||
| 886 | dataj.ezk = CPLX_00; |
||
| 887 | dataj.exs = CPLX_00; |
||
| 888 | dataj.eys = CPLX_00; |
||
| 889 | dataj.ezs = CPLX_00; |
||
| 890 | |||
| 891 | for (ip = 1; ip <= gnd.ksymp; ip++) |
||
| 892 | { |
||
| 893 | rfl = -rfl; |
||
| 894 | rz = zi - dataj.zj * rfl; |
||
| 895 | rsq = rx * rx + ry * ry + rz * rz; |
||
| 896 | |||
| 897 | if (rsq < 1.0e-20) |
||
| 898 | continue; |
||
| 899 | |||
| 900 | r = sqrtl (rsq); |
||
| 901 | rk = TP * r; |
||
| 902 | cr = cosl (rk); |
||
| 903 | sr = sinl (rk); |
||
| 904 | gam = -(cmplx (cr, -sr) + rk * cmplx (sr, cr)) / (FPI * rsq * r) * dataj.s; |
||
| 905 | dataj.exc = gam * rx; |
||
| 906 | dataj.eyc = gam * ry; |
||
| 907 | dataj.ezc = gam * rz; |
||
| 908 | t1zr = dataj.t1zj * rfl; |
||
| 909 | t2zr = dataj.t2zj * rfl; |
||
| 910 | f1x = dataj.eyc * t1zr - dataj.ezc * dataj.t1yj; |
||
| 911 | f1y = dataj.ezc * dataj.t1xj - dataj.exc * t1zr; |
||
| 912 | f1z = dataj.exc * dataj.t1yj - dataj.eyc * dataj.t1xj; |
||
| 913 | f2x = dataj.eyc * t2zr - dataj.ezc * dataj.t2yj; |
||
| 914 | f2y = dataj.ezc * dataj.t2xj - dataj.exc * t2zr; |
||
| 915 | f2z = dataj.exc * dataj.t2yj - dataj.eyc * dataj.t2xj; |
||
| 916 | |||
| 917 | if (ip != 1) |
||
| 918 | { |
||
| 919 | if (gnd.iperf == 1) |
||
| 920 | { |
||
| 921 | f1x = -f1x; |
||
| 922 | f1y = -f1y; |
||
| 923 | f1z = -f1z; |
||
| 924 | f2x = -f2x; |
||
| 925 | f2y = -f2y; |
||
| 926 | f2z = -f2z; |
||
| 927 | } |
||
| 928 | else |
||
| 929 | { |
||
| 930 | xymag = sqrtl (rx * rx + ry * ry); |
||
| 931 | if (xymag <= 1.0e-6) |
||
| 932 | { |
||
| 933 | pxx = 0.; |
||
| 934 | pyy = 0.; |
||
| 935 | cth = 1.; |
||
| 936 | rrv = CPLX_10; |
||
| 937 | } |
||
| 938 | else |
||
| 939 | { |
||
| 940 | pxx = -ry / xymag; |
||
| 941 | pyy = rx / xymag; |
||
| 942 | cth = rz / r; |
||
| 943 | rrv = csqrtl ( |
||
| 944 | 1. - gnd.zrati * gnd.zrati * (1. - cth * cth)); |
||
| 945 | |||
| 946 | } /* if( xymag <= 1.0e-6) */ |
||
| 947 | |||
| 948 | rrh = gnd.zrati * cth; |
||
| 949 | rrh = (rrh - rrv) / (rrh + rrv); |
||
| 950 | rrv = gnd.zrati * rrv; |
||
| 951 | rrv = -(cth - rrv) / (cth + rrv); |
||
| 952 | gam = (f1x * pxx + f1y * pyy) * (rrv - rrh); |
||
| 953 | f1x = f1x * rrh + gam * pxx; |
||
| 954 | f1y = f1y * rrh + gam * pyy; |
||
| 955 | f1z = f1z * rrh; |
||
| 956 | gam = (f2x * pxx + f2y * pyy) * (rrv - rrh); |
||
| 957 | f2x = f2x * rrh + gam * pxx; |
||
| 958 | f2y = f2y * rrh + gam * pyy; |
||
| 959 | f2z = f2z * rrh; |
||
| 960 | |||
| 961 | } /* if( gnd.iperf == 1) */ |
||
| 962 | |||
| 963 | } /* if( ip != 1) */ |
||
| 964 | |||
| 965 | dataj.exk += f1x; |
||
| 966 | dataj.eyk += f1y; |
||
| 967 | dataj.ezk += f1z; |
||
| 968 | dataj.exs += f2x; |
||
| 969 | dataj.eys += f2y; |
||
| 970 | dataj.ezs += f2z; |
||
| 971 | |||
| 972 | } /* for( ip = 1; ip <= gnd.ksymp; ip++ ) */ |
||
| 973 | |||
| 974 | return; |
||
| 975 | } |
||
| 976 | |||
| 977 | /*-----------------------------------------------------------------------*/ |
||
| 978 | |||
| 979 | /* hsfld computes the h field for constant, sine, and */ |
||
| 980 | /* cosine current on a segment including ground effects. */ |
||
| 981 | void hsfld (double xi, double yi, double zi, double ai) |
||
| 982 | { |
||
| 983 | int ip; |
||
| 984 | double xij, yij, rfl, salpr, zij, zp, rhox, rhoy, rhoz, rh, phx; |
||
| 985 | double phy, phz, rmag, xymag, xspec, yspec, rhospc, px, py, cth; |
||
| 986 | complex double hpk, hps, hpc, qx, qy, qz, rrv, rrh, zratx; |
||
| 987 | |||
| 988 | xij = xi - dataj.xj; |
||
| 989 | yij = yi - dataj.yj; |
||
| 990 | rfl = -1.; |
||
| 991 | |||
| 992 | for (ip = 0; ip < gnd.ksymp; ip++) |
||
| 993 | { |
||
| 994 | rfl = -rfl; |
||
| 995 | salpr = dataj.salpj * rfl; |
||
| 996 | zij = zi - rfl * dataj.zj; |
||
| 997 | zp = xij * dataj.cabj + yij * dataj.sabj + zij * salpr; |
||
| 998 | rhox = xij - dataj.cabj * zp; |
||
| 999 | rhoy = yij - dataj.sabj * zp; |
||
| 1000 | rhoz = zij - salpr * zp; |
||
| 1001 | rh = sqrtl (rhox * rhox + rhoy * rhoy + rhoz * rhoz + ai * ai); |
||
| 1002 | |||
| 1003 | if (rh <= 1.0e-10) |
||
| 1004 | { |
||
| 1005 | dataj.exk = 0.; |
||
| 1006 | dataj.eyk = 0.; |
||
| 1007 | dataj.ezk = 0.; |
||
| 1008 | dataj.exs = 0.; |
||
| 1009 | dataj.eys = 0.; |
||
| 1010 | dataj.ezs = 0.; |
||
| 1011 | dataj.exc = 0.; |
||
| 1012 | dataj.eyc = 0.; |
||
| 1013 | dataj.ezc = 0.; |
||
| 1014 | continue; |
||
| 1015 | } |
||
| 1016 | |||
| 1017 | rhox = rhox / rh; |
||
| 1018 | rhoy = rhoy / rh; |
||
| 1019 | rhoz = rhoz / rh; |
||
| 1020 | phx = dataj.sabj * rhoz - salpr * rhoy; |
||
| 1021 | phy = salpr * rhox - dataj.cabj * rhoz; |
||
| 1022 | phz = dataj.cabj * rhoy - dataj.sabj * rhox; |
||
| 1023 | |||
| 1024 | hsflx (dataj.s, rh, zp, &hpk, &hps, &hpc); |
||
| 1025 | |||
| 1026 | if (ip == 1) |
||
| 1027 | { |
||
| 1028 | if (gnd.iperf != 1) |
||
| 1029 | { |
||
| 1030 | zratx = gnd.zrati; |
||
| 1031 | rmag = sqrtl (zp * zp + rh * rh); |
||
| 1032 | xymag = sqrtl (xij * xij + yij * yij); |
||
| 1033 | |||
| 1034 | /* set parameters for radial wire ground screen. */ |
||
| 1035 | if (gnd.nradl != 0) |
||
| 1036 | { |
||
| 1037 | xspec = |
||
| 1038 | (xi * dataj.zj + zi * dataj.xj) / (zi + dataj.zj); |
||
| 1039 | yspec = |
||
| 1040 | (yi * dataj.zj + zi * dataj.yj) / (zi + dataj.zj); |
||
| 1041 | rhospc = sqrtl ( |
||
| 1042 | xspec * xspec + yspec * yspec + gnd.t2 * gnd.t2); |
||
| 1043 | |||
| 1044 | if (rhospc <= gnd.scrwl) |
||
| 1045 | { |
||
| 1046 | rrv = gnd.t1 * rhospc * logl (rhospc / gnd.t2); |
||
| 1047 | zratx = (rrv * gnd.zrati) / |
||
| 1048 | (ETA * gnd.zrati + rrv); |
||
| 1049 | } |
||
| 1050 | } |
||
| 1051 | |||
| 1052 | /* calculation of reflection coefficients when ground is |
||
| 1053 | * specified. */ |
||
| 1054 | if (xymag <= 1.0e-6) |
||
| 1055 | { |
||
| 1056 | px = 0.; |
||
| 1057 | py = 0.; |
||
| 1058 | cth = 1.; |
||
| 1059 | rrv = CPLX_10; |
||
| 1060 | } |
||
| 1061 | else |
||
| 1062 | { |
||
| 1063 | px = -yij / xymag; |
||
| 1064 | py = xij / xymag; |
||
| 1065 | cth = zij / rmag; |
||
| 1066 | rrv = csqrtl (1. - zratx * zratx * (1. - cth * cth)); |
||
| 1067 | } |
||
| 1068 | |||
| 1069 | rrh = zratx * cth; |
||
| 1070 | rrh = -(rrh - rrv) / (rrh + rrv); |
||
| 1071 | rrv = zratx * rrv; |
||
| 1072 | rrv = (cth - rrv) / (cth + rrv); |
||
| 1073 | qy = (phx * px + phy * py) * (rrv - rrh); |
||
| 1074 | qx = qy * px + phx * rrh; |
||
| 1075 | qy = qy * py + phy * rrh; |
||
| 1076 | qz = phz * rrh; |
||
| 1077 | dataj.exk = dataj.exk - hpk * qx; |
||
| 1078 | dataj.eyk = dataj.eyk - hpk * qy; |
||
| 1079 | dataj.ezk = dataj.ezk - hpk * qz; |
||
| 1080 | dataj.exs = dataj.exs - hps * qx; |
||
| 1081 | dataj.eys = dataj.eys - hps * qy; |
||
| 1082 | dataj.ezs = dataj.ezs - hps * qz; |
||
| 1083 | dataj.exc = dataj.exc - hpc * qx; |
||
| 1084 | dataj.eyc = dataj.eyc - hpc * qy; |
||
| 1085 | dataj.ezc = dataj.ezc - hpc * qz; |
||
| 1086 | continue; |
||
| 1087 | |||
| 1088 | } /* if( gnd.iperf != 1 ) */ |
||
| 1089 | |||
| 1090 | dataj.exk = dataj.exk - hpk * phx; |
||
| 1091 | dataj.eyk = dataj.eyk - hpk * phy; |
||
| 1092 | dataj.ezk = dataj.ezk - hpk * phz; |
||
| 1093 | dataj.exs = dataj.exs - hps * phx; |
||
| 1094 | dataj.eys = dataj.eys - hps * phy; |
||
| 1095 | dataj.ezs = dataj.ezs - hps * phz; |
||
| 1096 | dataj.exc = dataj.exc - hpc * phx; |
||
| 1097 | dataj.eyc = dataj.eyc - hpc * phy; |
||
| 1098 | dataj.ezc = dataj.ezc - hpc * phz; |
||
| 1099 | continue; |
||
| 1100 | |||
| 1101 | } /* if( ip == 1 ) */ |
||
| 1102 | |||
| 1103 | dataj.exk = hpk * phx; |
||
| 1104 | dataj.eyk = hpk * phy; |
||
| 1105 | dataj.ezk = hpk * phz; |
||
| 1106 | dataj.exs = hps * phx; |
||
| 1107 | dataj.eys = hps * phy; |
||
| 1108 | dataj.ezs = hps * phz; |
||
| 1109 | dataj.exc = hpc * phx; |
||
| 1110 | dataj.eyc = hpc * phy; |
||
| 1111 | dataj.ezc = hpc * phz; |
||
| 1112 | |||
| 1113 | } /* for( ip = 0; ip < gnd.ksymp; ip++ ) */ |
||
| 1114 | |||
| 1115 | return; |
||
| 1116 | } |
||
| 1117 | |||
| 1118 | /*-----------------------------------------------------------------------*/ |
||
| 1119 | |||
| 1120 | /* calculates h field of sine cosine, and constant current of segment */ |
||
| 1121 | void hsflx ( |
||
| 1122 | double s, |
||
| 1123 | double rh, |
||
| 1124 | double zpx, |
||
| 1125 | complex double *hpk, |
||
| 1126 | complex double *hps, |
||
| 1127 | complex double *hpc) |
||
| 1128 | { |
||
| 1129 | double r1, r2, zp, z2a, hss, dh, z1; |
||
| 1130 | double rhz, dk, cdk, sdk, hkr, hki, rh2; |
||
| 1131 | complex double fjk, ekr1, ekr2, t1, t2, cons; |
||
| 1132 | |||
| 1133 | fjk = -TPJ; |
||
| 1134 | if (rh >= 1.0e-10) |
||
| 1135 | { |
||
| 1136 | if (zpx >= 0.) |
||
| 1137 | { |
||
| 1138 | zp = zpx; |
||
| 1139 | hss = 1.; |
||
| 1140 | } |
||
| 1141 | else |
||
| 1142 | { |
||
| 1143 | zp = -zpx; |
||
| 1144 | hss = -1.; |
||
| 1145 | } |
||
| 1146 | |||
| 1147 | dh = .5 * s; |
||
| 1148 | z1 = zp + dh; |
||
| 1149 | z2a = zp - dh; |
||
| 1150 | if (z2a >= 1.0e-7) |
||
| 1151 | rhz = rh / z2a; |
||
| 1152 | else |
||
| 1153 | rhz = 1.; |
||
| 1154 | |||
| 1155 | dk = TP * dh; |
||
| 1156 | cdk = cosl (dk); |
||
| 1157 | sdk = sinl (dk); |
||
| 1158 | hfk (-dk, dk, rh * TP, zp * TP, &hkr, &hki); |
||
| 1159 | *hpk = cmplx (hkr, hki); |
||
| 1160 | |||
| 1161 | if (rhz >= 1.0e-3) |
||
| 1162 | { |
||
| 1163 | rh2 = rh * rh; |
||
| 1164 | r1 = sqrtl (rh2 + z1 * z1); |
||
| 1165 | r2 = sqrtl (rh2 + z2a * z2a); |
||
| 1166 | ekr1 = cexp (fjk * r1); |
||
| 1167 | ekr2 = cexp (fjk * r2); |
||
| 1168 | t1 = z1 * ekr1 / r1; |
||
| 1169 | t2 = z2a * ekr2 / r2; |
||
| 1170 | *hps = (cdk * (ekr2 - ekr1) - CPLX_01 * sdk * (t2 + t1)) * hss; |
||
| 1171 | *hpc = -sdk * (ekr2 + ekr1) - CPLX_01 * cdk * (t2 - t1); |
||
| 1172 | cons = -CPLX_01 / (2. * TP * rh); |
||
| 1173 | *hps = cons * *hps; |
||
| 1174 | *hpc = cons * *hpc; |
||
| 1175 | return; |
||
| 1176 | |||
| 1177 | } /* if( rhz >= 1.0e-3) */ |
||
| 1178 | |||
| 1179 | ekr1 = cmplx (cdk, sdk) / (z2a * z2a); |
||
| 1180 | ekr2 = cmplx (cdk, -sdk) / (z1 * z1); |
||
| 1181 | t1 = TP * (1. / z1 - 1. / z2a); |
||
| 1182 | t2 = cexp (fjk * zp) * rh / PI8; |
||
| 1183 | *hps = t2 * (t1 + (ekr1 + ekr2) * sdk) * hss; |
||
| 1184 | *hpc = t2 * (-CPLX_01 * t1 + (ekr1 - ekr2) * cdk); |
||
| 1185 | return; |
||
| 1186 | |||
| 1187 | } /* if( rh >= 1.0e-10) */ |
||
| 1188 | |||
| 1189 | *hps = CPLX_00; |
||
| 1190 | *hpc = CPLX_00; |
||
| 1191 | *hpk = CPLX_00; |
||
| 1192 | |||
| 1193 | return; |
||
| 1194 | } |
||
| 1195 | |||
| 1196 | /*-----------------------------------------------------------------------*/ |
||
| 1197 | |||
| 1198 | /* nefld computes the near field at specified points in space after */ |
||
| 1199 | /* the structure currents have been computed. */ |
||
| 1200 | void nefld ( |
||
| 1201 | double xob, |
||
| 1202 | double yob, |
||
| 1203 | double zob, |
||
| 1204 | complex double *ex, |
||
| 1205 | complex double *ey, |
||
| 1206 | complex double *ez) |
||
| 1207 | { |
||
| 1208 | int i, ix, ipr, iprx, jc, ipa; |
||
| 1209 | double zp, xi, ax; |
||
| 1210 | complex double acx, bcx, ccx; |
||
| 1211 | |||
| 1212 | *ex = CPLX_00; |
||
| 1213 | *ey = CPLX_00; |
||
| 1214 | *ez = CPLX_00; |
||
| 1215 | ax = 0.; |
||
| 1216 | |||
| 1217 | if (data.n != 0) |
||
| 1218 | { |
||
| 1219 | for (i = 0; i < data.n; i++) |
||
| 1220 | { |
||
| 1221 | dataj.xj = xob - data.x[i]; |
||
| 1222 | dataj.yj = yob - data.y[i]; |
||
| 1223 | dataj.zj = zob - data.z[i]; |
||
| 1224 | zp = data.cab[i] * dataj.xj + data.sab[i] * dataj.yj + |
||
| 1225 | data.salp[i] * dataj.zj; |
||
| 1226 | |||
| 1227 | if (fabsl (zp) > 0.5001 * data.si[i]) |
||
| 1228 | continue; |
||
| 1229 | |||
| 1230 | zp = dataj.xj * dataj.xj + dataj.yj * dataj.yj + dataj.zj * dataj.zj - |
||
| 1231 | zp * zp; |
||
| 1232 | dataj.xj = data.bi[i]; |
||
| 1233 | |||
| 1234 | if (zp > 0.9 * dataj.xj * dataj.xj) |
||
| 1235 | continue; |
||
| 1236 | |||
| 1237 | ax = dataj.xj; |
||
| 1238 | break; |
||
| 1239 | |||
| 1240 | } /* for( i = 0; i < n; i++ ) */ |
||
| 1241 | |||
| 1242 | for (i = 0; i < data.n; i++) |
||
| 1243 | { |
||
| 1244 | ix = i + 1; |
||
| 1245 | dataj.s = data.si[i]; |
||
| 1246 | dataj.b = data.bi[i]; |
||
| 1247 | dataj.xj = data.x[i]; |
||
| 1248 | dataj.yj = data.y[i]; |
||
| 1249 | dataj.zj = data.z[i]; |
||
| 1250 | dataj.cabj = data.cab[i]; |
||
| 1251 | dataj.sabj = data.sab[i]; |
||
| 1252 | dataj.salpj = data.salp[i]; |
||
| 1253 | |||
| 1254 | if (dataj.iexk != 0) |
||
| 1255 | { |
||
| 1256 | ipr = data.icon1[i]; |
||
| 1257 | |||
| 1258 | if (ipr > PCHCON) |
||
| 1259 | dataj.ind1 = 2; |
||
| 1260 | else if (ipr < 0) |
||
| 1261 | { |
||
| 1262 | ipr = -ipr; |
||
| 1263 | iprx = ipr - 1; |
||
| 1264 | |||
| 1265 | if (-data.icon1[iprx] != ix) |
||
| 1266 | dataj.ind1 = 2; |
||
| 1267 | else |
||
| 1268 | { |
||
| 1269 | xi = fabsl ( |
||
| 1270 | dataj.cabj * data.cab[iprx] + |
||
| 1271 | dataj.sabj * data.sab[iprx] + |
||
| 1272 | dataj.salpj * data.salp[iprx]); |
||
| 1273 | if ((xi < 0.999999) || |
||
| 1274 | (fabsl (data.bi[iprx] / dataj.b - 1.) > |
||
| 1275 | 1.0e-6)) |
||
| 1276 | dataj.ind1 = 2; |
||
| 1277 | else |
||
| 1278 | dataj.ind1 = 0; |
||
| 1279 | } |
||
| 1280 | } /* if( ipr < 0 ) */ |
||
| 1281 | else if (ipr == 0) |
||
| 1282 | dataj.ind1 = 1; |
||
| 1283 | else |
||
| 1284 | { |
||
| 1285 | iprx = ipr - 1; |
||
| 1286 | |||
| 1287 | if (ipr != ix) |
||
| 1288 | { |
||
| 1289 | if (data.icon2[iprx] != ix) |
||
| 1290 | dataj.ind1 = 2; |
||
| 1291 | else |
||
| 1292 | { |
||
| 1293 | xi = fabsl ( |
||
| 1294 | dataj.cabj * data.cab[iprx] + |
||
| 1295 | dataj.sabj * data.sab[iprx] + |
||
| 1296 | dataj.salpj * data.salp[iprx]); |
||
| 1297 | if ((xi < 0.999999) || |
||
| 1298 | (fabsl ( |
||
| 1299 | data.bi[iprx] / dataj.b - |
||
| 1300 | 1.) > 1.0e-6)) |
||
| 1301 | dataj.ind1 = 2; |
||
| 1302 | else |
||
| 1303 | dataj.ind1 = 0; |
||
| 1304 | } |
||
| 1305 | } /* if( ipr != ix ) */ |
||
| 1306 | else |
||
| 1307 | { |
||
| 1308 | if (dataj.cabj * dataj.cabj + |
||
| 1309 | dataj.sabj * dataj.sabj > |
||
| 1310 | 1.0e-8) |
||
| 1311 | dataj.ind1 = 2; |
||
| 1312 | else |
||
| 1313 | dataj.ind1 = 0; |
||
| 1314 | } |
||
| 1315 | } /* else */ |
||
| 1316 | |||
| 1317 | ipr = data.icon2[i]; |
||
| 1318 | |||
| 1319 | if (ipr > PCHCON) |
||
| 1320 | dataj.ind2 = 2; |
||
| 1321 | else if (ipr < 0) |
||
| 1322 | { |
||
| 1323 | ipr = -ipr; |
||
| 1324 | iprx = ipr - 1; |
||
| 1325 | |||
| 1326 | if (-data.icon2[iprx] != ix) |
||
| 1327 | dataj.ind1 = 2; |
||
| 1328 | else |
||
| 1329 | { |
||
| 1330 | xi = fabsl ( |
||
| 1331 | dataj.cabj * data.cab[iprx] + |
||
| 1332 | dataj.sabj * data.sab[iprx] + |
||
| 1333 | dataj.salpj * data.salp[iprx]); |
||
| 1334 | if ((xi < 0.999999) || |
||
| 1335 | (fabsl (data.bi[iprx] / dataj.b - 1.) > |
||
| 1336 | 1.0e-6)) |
||
| 1337 | dataj.ind1 = 2; |
||
| 1338 | else |
||
| 1339 | dataj.ind1 = 0; |
||
| 1340 | } |
||
| 1341 | } /* if( ipr < 0 ) */ |
||
| 1342 | else if (ipr == 0) |
||
| 1343 | dataj.ind2 = 1; |
||
| 1344 | else |
||
| 1345 | { |
||
| 1346 | iprx = ipr - 1; |
||
| 1347 | |||
| 1348 | if (ipr != ix) |
||
| 1349 | { |
||
| 1350 | if (data.icon1[iprx] != ix) |
||
| 1351 | dataj.ind2 = 2; |
||
| 1352 | else |
||
| 1353 | { |
||
| 1354 | xi = fabsl ( |
||
| 1355 | dataj.cabj * data.cab[iprx] + |
||
| 1356 | dataj.sabj * data.sab[iprx] + |
||
| 1357 | dataj.salpj * data.salp[iprx]); |
||
| 1358 | if ((xi < 0.999999) || |
||
| 1359 | (fabsl ( |
||
| 1360 | data.bi[iprx] / dataj.b - |
||
| 1361 | 1.) > 1.0e-6)) |
||
| 1362 | dataj.ind2 = 2; |
||
| 1363 | else |
||
| 1364 | dataj.ind2 = 0; |
||
| 1365 | } |
||
| 1366 | } /* if( ipr != (i+1) ) */ |
||
| 1367 | else |
||
| 1368 | { |
||
| 1369 | if (dataj.cabj * dataj.cabj + |
||
| 1370 | dataj.sabj * dataj.sabj > |
||
| 1371 | 1.0e-8) |
||
| 1372 | dataj.ind1 = 2; |
||
| 1373 | else |
||
| 1374 | dataj.ind1 = 0; |
||
| 1375 | } |
||
| 1376 | |||
| 1377 | } /* else */ |
||
| 1378 | |||
| 1379 | } /* if( dataj.iexk != 0) */ |
||
| 1380 | |||
| 1381 | efld (xob, yob, zob, ax, 1); |
||
| 1382 | acx = cmplx (crnt.air[i], crnt.aii[i]); |
||
| 1383 | bcx = cmplx (crnt.bir[i], crnt.bii[i]); |
||
| 1384 | ccx = cmplx (crnt.cir[i], crnt.cii[i]); |
||
| 1385 | *ex += dataj.exk * acx + dataj.exs * bcx + dataj.exc * ccx; |
||
| 1386 | *ey += dataj.eyk * acx + dataj.eys * bcx + dataj.eyc * ccx; |
||
| 1387 | *ez += dataj.ezk * acx + dataj.ezs * bcx + dataj.ezc * ccx; |
||
| 1388 | |||
| 1389 | } /* for( i = 0; i < n; i++ ) */ |
||
| 1390 | |||
| 1391 | if (data.m == 0) |
||
| 1392 | return; |
||
| 1393 | |||
| 1394 | } /* if( n != 0) */ |
||
| 1395 | |||
| 1396 | jc = data.n - 1; |
||
| 1397 | for (i = 0; i < data.m; i++) |
||
| 1398 | { |
||
| 1399 | dataj.s = data.pbi[i]; |
||
| 1400 | dataj.xj = data.px[i]; |
||
| 1401 | dataj.yj = data.py[i]; |
||
| 1402 | dataj.zj = data.pz[i]; |
||
| 1403 | dataj.t1xj = data.t1x[i]; |
||
| 1404 | dataj.t1yj = data.t1y[i]; |
||
| 1405 | dataj.t1zj = data.t1z[i]; |
||
| 1406 | dataj.t2xj = data.t2x[i]; |
||
| 1407 | dataj.t2yj = data.t2y[i]; |
||
| 1408 | dataj.t2zj = data.t2z[i]; |
||
| 1409 | jc += 3; |
||
| 1410 | acx = dataj.t1xj * crnt.cur[jc - 2] + dataj.t1yj * crnt.cur[jc - 1] + |
||
| 1411 | dataj.t1zj * crnt.cur[jc]; |
||
| 1412 | bcx = dataj.t2xj * crnt.cur[jc - 2] + dataj.t2yj * crnt.cur[jc - 1] + |
||
| 1413 | dataj.t2zj * crnt.cur[jc]; |
||
| 1414 | |||
| 1415 | for (ipa = 0; ipa < gnd.ksymp; ipa++) |
||
| 1416 | { |
||
| 1417 | dataj.ipgnd = ipa + 1; |
||
| 1418 | unere (xob, yob, zob); |
||
| 1419 | *ex = *ex + acx * dataj.exk + bcx * dataj.exs; |
||
| 1420 | *ey = *ey + acx * dataj.eyk + bcx * dataj.eys; |
||
| 1421 | *ez = *ez + acx * dataj.ezk + bcx * dataj.ezs; |
||
| 1422 | } |
||
| 1423 | |||
| 1424 | } /* for( i = 0; i < m; i++ ) */ |
||
| 1425 | |||
| 1426 | return; |
||
| 1427 | } |
||
| 1428 | |||
| 1429 | /*-----------------------------------------------------------------------*/ |
||
| 1430 | |||
| 1431 | /* compute near e or h fields over a range of points */ |
||
| 1432 | void nfpat (void) |
||
| 1433 | { |
||
| 1434 | int i, j, kk; |
||
| 1435 | double znrt, cth = 0., sth = 0., ynrt, cph = 0., sph = 0., xnrt, xob, yob; |
||
| 1436 | double zob, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, xxx; |
||
| 1437 | complex double ex, ey, ez; |
||
| 1438 | |||
| 1439 | if (fpat.nfeh != 1) |
||
| 1440 | { |
||
| 1441 | fprintf ( |
||
| 1442 | output_fp, |
||
| 1443 | "\n\n\n" |
||
| 1444 | " " |
||
| 1445 | "-------- NEAR ELECTRIC FIELDS --------\n" |
||
| 1446 | " ------- LOCATION ------- ------- EX ------ ------- EY ------ " |
||
| 1447 | " ------- EZ ------\n" |
||
| 1448 | " X Y Z MAGNITUDE PHASE MAGNITUDE PHASE " |
||
| 1449 | " MAGNITUDE PHASE\n" |
||
| 1450 | " METERS METERS METERS VOLTS/M DEGREES VOLTS/M DEGREES " |
||
| 1451 | " VOLTS/M DEGREES"); |
||
| 1452 | } |
||
| 1453 | else |
||
| 1454 | { |
||
| 1455 | fprintf ( |
||
| 1456 | output_fp, |
||
| 1457 | "\n\n\n" |
||
| 1458 | " " |
||
| 1459 | "-------- NEAR MAGNETIC FIELDS ---------\n\n" |
||
| 1460 | " ------- LOCATION ------- ------- HX ------ ------- HY ------ " |
||
| 1461 | " ------- HZ ------\n" |
||
| 1462 | " X Y Z MAGNITUDE PHASE MAGNITUDE PHASE " |
||
| 1463 | " MAGNITUDE PHASE\n" |
||
| 1464 | " METERS METERS METERS AMPS/M DEGREES AMPS/M DEGREES " |
||
| 1465 | " AMPS/M DEGREES"); |
||
| 1466 | } |
||
| 1467 | |||
| 1468 | znrt = fpat.znr - fpat.dznr; |
||
| 1469 | for (i = 0; i < fpat.nrz; i++) |
||
| 1470 | { |
||
| 1471 | znrt += fpat.dznr; |
||
| 1472 | if (fpat.near != 0) |
||
| 1473 | { |
||
| 1474 | cth = cosl (TA * znrt); |
||
| 1475 | sth = sinl (TA * znrt); |
||
| 1476 | } |
||
| 1477 | |||
| 1478 | ynrt = fpat.ynr - fpat.dynr; |
||
| 1479 | for (j = 0; j < fpat.nry; j++) |
||
| 1480 | { |
||
| 1481 | ynrt += fpat.dynr; |
||
| 1482 | if (fpat.near != 0) |
||
| 1483 | { |
||
| 1484 | cph = cosl (TA * ynrt); |
||
| 1485 | sph = sinl (TA * ynrt); |
||
| 1486 | } |
||
| 1487 | |||
| 1488 | xnrt = fpat.xnr - fpat.dxnr; |
||
| 1489 | for (kk = 0; kk < fpat.nrx; kk++) |
||
| 1490 | { |
||
| 1491 | xnrt += fpat.dxnr; |
||
| 1492 | if (fpat.near != 0) |
||
| 1493 | { |
||
| 1494 | xob = xnrt * sth * cph; |
||
| 1495 | yob = xnrt * sth * sph; |
||
| 1496 | zob = xnrt * cth; |
||
| 1497 | } |
||
| 1498 | else |
||
| 1499 | { |
||
| 1500 | xob = xnrt; |
||
| 1501 | yob = ynrt; |
||
| 1502 | zob = znrt; |
||
| 1503 | } |
||
| 1504 | |||
| 1505 | tmp1 = xob / data.wlam; |
||
| 1506 | tmp2 = yob / data.wlam; |
||
| 1507 | tmp3 = zob / data.wlam; |
||
| 1508 | |||
| 1509 | if (fpat.nfeh != 1) |
||
| 1510 | nefld (tmp1, tmp2, tmp3, &ex, &ey, &ez); |
||
| 1511 | else |
||
| 1512 | nhfld (tmp1, tmp2, tmp3, &ex, &ey, &ez); |
||
| 1513 | |||
| 1514 | tmp1 = cabsl (ex); |
||
| 1515 | tmp2 = cang (ex); |
||
| 1516 | tmp3 = cabsl (ey); |
||
| 1517 | tmp4 = cang (ey); |
||
| 1518 | tmp5 = cabsl (ez); |
||
| 1519 | tmp6 = cang (ez); |
||
| 1520 | |||
| 1521 | fprintf ( |
||
| 1522 | output_fp, |
||
| 1523 | "\n" |
||
| 1524 | " %9.4f %9.4f %9.4f %11.4E %7.2f %11.4E %7.2f %11.4E " |
||
| 1525 | "%7.2f", |
||
| 1526 | xob, |
||
| 1527 | yob, |
||
| 1528 | zob, |
||
| 1529 | tmp1, |
||
| 1530 | tmp2, |
||
| 1531 | tmp3, |
||
| 1532 | tmp4, |
||
| 1533 | tmp5, |
||
| 1534 | tmp6); |
||
| 1535 | |||
| 1536 | if (plot.iplp1 != 2) |
||
| 1537 | continue; |
||
| 1538 | |||
| 1539 | if (plot.iplp4 < 0) |
||
| 1540 | xxx = xob; |
||
| 1541 | else if (plot.iplp4 == 0) |
||
| 1542 | xxx = yob; |
||
| 1543 | else |
||
| 1544 | xxx = zob; |
||
| 1545 | |||
| 1546 | if (plot.iplp2 == 2) |
||
| 1547 | { |
||
| 1548 | switch (plot.iplp3) |
||
| 1549 | { |
||
| 1550 | case 1: |
||
| 1551 | fprintf ( |
||
| 1552 | plot_fp, |
||
| 1553 | "%12.4E %12.4E %12.4E\n", |
||
| 1554 | xxx, |
||
| 1555 | tmp1, |
||
| 1556 | tmp2); |
||
| 1557 | break; |
||
| 1558 | case 2: |
||
| 1559 | fprintf ( |
||
| 1560 | plot_fp, |
||
| 1561 | "%12.4E %12.4E %12.4E\n", |
||
| 1562 | xxx, |
||
| 1563 | tmp3, |
||
| 1564 | tmp4); |
||
| 1565 | break; |
||
| 1566 | case 3: |
||
| 1567 | fprintf ( |
||
| 1568 | plot_fp, |
||
| 1569 | "%12.4E %12.4E %12.4E\n", |
||
| 1570 | xxx, |
||
| 1571 | tmp5, |
||
| 1572 | tmp6); |
||
| 1573 | break; |
||
| 1574 | case 4: |
||
| 1575 | fprintf ( |
||
| 1576 | plot_fp, |
||
| 1577 | "%12.4E %12.4E %12.4E %12.4E %12.4E " |
||
| 1578 | "%12.4E %12.4E\n", |
||
| 1579 | xxx, |
||
| 1580 | tmp1, |
||
| 1581 | tmp2, |
||
| 1582 | tmp3, |
||
| 1583 | tmp4, |
||
| 1584 | tmp5, |
||
| 1585 | tmp6); |
||
| 1586 | } |
||
| 1587 | continue; |
||
| 1588 | } |
||
| 1589 | |||
| 1590 | if (plot.iplp2 != 1) |
||
| 1591 | continue; |
||
| 1592 | |||
| 1593 | switch (plot.iplp3) |
||
| 1594 | { |
||
| 1595 | case 1: |
||
| 1596 | fprintf ( |
||
| 1597 | plot_fp, |
||
| 1598 | "%12.4E %12.4E %12.4E\n", |
||
| 1599 | xxx, |
||
| 1600 | print_creall (ex), |
||
| 1601 | print_cimagl (ex)); |
||
| 1602 | break; |
||
| 1603 | case 2: |
||
| 1604 | fprintf ( |
||
| 1605 | plot_fp, |
||
| 1606 | "%12.4E %12.4E %12.4E\n", |
||
| 1607 | xxx, |
||
| 1608 | print_creall (ey), |
||
| 1609 | print_cimagl (ey)); |
||
| 1610 | break; |
||
| 1611 | case 3: |
||
| 1612 | fprintf ( |
||
| 1613 | plot_fp, |
||
| 1614 | "%12.4E %12.4E %12.4E\n", |
||
| 1615 | xxx, |
||
| 1616 | print_creall (ez), |
||
| 1617 | print_cimagl (ez)); |
||
| 1618 | break; |
||
| 1619 | case 4: |
||
| 1620 | fprintf ( |
||
| 1621 | plot_fp, |
||
| 1622 | "%12.4E %12.4E %12.4E %12.4E %12.4E %12.4E " |
||
| 1623 | "%12.4E\n", |
||
| 1624 | xxx, |
||
| 1625 | print_creall (ex), |
||
| 1626 | print_cimagl (ex), |
||
| 1627 | print_creall (ey), |
||
| 1628 | print_cimagl (ey), |
||
| 1629 | print_creall (ez), |
||
| 1630 | print_cimagl (ez)); |
||
| 1631 | } |
||
| 1632 | } /* for( kk = 0; kk < fpat.nrx; kk++ ) */ |
||
| 1633 | |||
| 1634 | } /* for( j = 0; j < fpat.nry; j++ ) */ |
||
| 1635 | |||
| 1636 | } /* for( i = 0; i < fpat.nrz; i++ ) */ |
||
| 1637 | |||
| 1638 | return; |
||
| 1639 | } |
||
| 1640 | |||
| 1641 | /*-----------------------------------------------------------------------*/ |
||
| 1642 | |||
| 1643 | /* nhfld computes the near field at specified points in space after */ |
||
| 1644 | /* the structure currents have been computed. */ |
||
| 1645 | |||
| 1646 | void nhfld ( |
||
| 1647 | double xob, |
||
| 1648 | double yob, |
||
| 1649 | double zob, |
||
| 1650 | complex double *hx, |
||
| 1651 | complex double *hy, |
||
| 1652 | complex double *hz) |
||
| 1653 | { |
||
| 1654 | int i, jc; |
||
| 1655 | double ax, zp; |
||
| 1656 | complex double acx, bcx, ccx; |
||
| 1657 | |||
| 1658 | *hx = CPLX_00; |
||
| 1659 | *hy = CPLX_00; |
||
| 1660 | *hz = CPLX_00; |
||
| 1661 | ax = 0.; |
||
| 1662 | |||
| 1663 | if (data.n != 0) |
||
| 1664 | { |
||
| 1665 | for (i = 0; i < data.n; i++) |
||
| 1666 | { |
||
| 1667 | dataj.xj = xob - data.x[i]; |
||
| 1668 | dataj.yj = yob - data.y[i]; |
||
| 1669 | dataj.zj = zob - data.z[i]; |
||
| 1670 | zp = data.cab[i] * dataj.xj + data.sab[i] * dataj.yj + |
||
| 1671 | data.salp[i] * dataj.zj; |
||
| 1672 | |||
| 1673 | if (fabsl (zp) > 0.5001 * data.si[i]) |
||
| 1674 | continue; |
||
| 1675 | |||
| 1676 | zp = dataj.xj * dataj.xj + dataj.yj * dataj.yj + dataj.zj * dataj.zj - |
||
| 1677 | zp * zp; |
||
| 1678 | dataj.xj = data.bi[i]; |
||
| 1679 | |||
| 1680 | if (zp > 0.9 * dataj.xj * dataj.xj) |
||
| 1681 | continue; |
||
| 1682 | |||
| 1683 | ax = dataj.xj; |
||
| 1684 | break; |
||
| 1685 | } |
||
| 1686 | |||
| 1687 | for (i = 0; i < data.n; i++) |
||
| 1688 | { |
||
| 1689 | dataj.s = data.si[i]; |
||
| 1690 | dataj.b = data.bi[i]; |
||
| 1691 | dataj.xj = data.x[i]; |
||
| 1692 | dataj.yj = data.y[i]; |
||
| 1693 | dataj.zj = data.z[i]; |
||
| 1694 | dataj.cabj = data.cab[i]; |
||
| 1695 | dataj.sabj = data.sab[i]; |
||
| 1696 | dataj.salpj = data.salp[i]; |
||
| 1697 | hsfld (xob, yob, zob, ax); |
||
| 1698 | acx = cmplx (crnt.air[i], crnt.aii[i]); |
||
| 1699 | bcx = cmplx (crnt.bir[i], crnt.bii[i]); |
||
| 1700 | ccx = cmplx (crnt.cir[i], crnt.cii[i]); |
||
| 1701 | *hx += dataj.exk * acx + dataj.exs * bcx + dataj.exc * ccx; |
||
| 1702 | *hy += dataj.eyk * acx + dataj.eys * bcx + dataj.eyc * ccx; |
||
| 1703 | *hz += dataj.ezk * acx + dataj.ezs * bcx + dataj.ezc * ccx; |
||
| 1704 | } |
||
| 1705 | |||
| 1706 | if (data.m == 0) |
||
| 1707 | return; |
||
| 1708 | |||
| 1709 | } /* if( data.n != 0) */ |
||
| 1710 | |||
| 1711 | jc = data.n - 1; |
||
| 1712 | for (i = 0; i < data.m; i++) |
||
| 1713 | { |
||
| 1714 | dataj.s = data.pbi[i]; |
||
| 1715 | dataj.xj = data.px[i]; |
||
| 1716 | dataj.yj = data.py[i]; |
||
| 1717 | dataj.zj = data.pz[i]; |
||
| 1718 | dataj.t1xj = data.t1x[i]; |
||
| 1719 | dataj.t1yj = data.t1y[i]; |
||
| 1720 | dataj.t1zj = data.t1z[i]; |
||
| 1721 | dataj.t2xj = data.t2x[i]; |
||
| 1722 | dataj.t2yj = data.t2y[i]; |
||
| 1723 | dataj.t2zj = data.t2z[i]; |
||
| 1724 | hintg (xob, yob, zob); |
||
| 1725 | jc += 3; |
||
| 1726 | acx = dataj.t1xj * crnt.cur[jc - 2] + dataj.t1yj * crnt.cur[jc - 1] + |
||
| 1727 | dataj.t1zj * crnt.cur[jc]; |
||
| 1728 | bcx = dataj.t2xj * crnt.cur[jc - 2] + dataj.t2yj * crnt.cur[jc - 1] + |
||
| 1729 | dataj.t2zj * crnt.cur[jc]; |
||
| 1730 | *hx = *hx + acx * dataj.exk + bcx * dataj.exs; |
||
| 1731 | *hy = *hy + acx * dataj.eyk + bcx * dataj.eys; |
||
| 1732 | *hz = *hz + acx * dataj.ezk + bcx * dataj.ezs; |
||
| 1733 | } |
||
| 1734 | |||
| 1735 | return; |
||
| 1736 | } |
||
| 1737 | |||
| 1738 | /*-----------------------------------------------------------------------*/ |
||
| 1739 | |||
| 1740 | /* integrate over patches at wire connection point */ |
||
| 1741 | void pcint ( |
||
| 1742 | double xi, double yi, double zi, double cabi, double sabi, double salpi, complex double *e) |
||
| 1743 | { |
||
| 1744 | int nint, i1, i2; |
||
| 1745 | double d, ds, da, gcon, fcon, xxj, xyj, xzj, xs, s1; |
||
| 1746 | double xss, yss, zss, s2x, s2, g1, g2, g3, g4, f2, f1; |
||
| 1747 | complex double e1, e2, e3, e4, e5, e6, e7, e8, e9; |
||
| 1748 | |||
| 1749 | nint = 10; |
||
| 1750 | d = sqrtl (dataj.s) * .5; |
||
| 1751 | ds = 4. * d / (double) nint; |
||
| 1752 | da = ds * ds; |
||
| 1753 | gcon = 1. / dataj.s; |
||
| 1754 | fcon = 1. / (2. * TP * d); |
||
| 1755 | xxj = dataj.xj; |
||
| 1756 | xyj = dataj.yj; |
||
| 1757 | xzj = dataj.zj; |
||
| 1758 | xs = dataj.s; |
||
| 1759 | dataj.s = da; |
||
| 1760 | s1 = d + ds * .5; |
||
| 1761 | xss = dataj.xj + s1 * (dataj.t1xj + dataj.t2xj); |
||
| 1762 | yss = dataj.yj + s1 * (dataj.t1yj + dataj.t2yj); |
||
| 1763 | zss = dataj.zj + s1 * (dataj.t1zj + dataj.t2zj); |
||
| 1764 | s1 = s1 + d; |
||
| 1765 | s2x = s1; |
||
| 1766 | e1 = CPLX_00; |
||
| 1767 | e2 = CPLX_00; |
||
| 1768 | e3 = CPLX_00; |
||
| 1769 | e4 = CPLX_00; |
||
| 1770 | e5 = CPLX_00; |
||
| 1771 | e6 = CPLX_00; |
||
| 1772 | e7 = CPLX_00; |
||
| 1773 | e8 = CPLX_00; |
||
| 1774 | e9 = CPLX_00; |
||
| 1775 | |||
| 1776 | for (i1 = 0; i1 < nint; i1++) |
||
| 1777 | { |
||
| 1778 | s1 = s1 - ds; |
||
| 1779 | s2 = s2x; |
||
| 1780 | xss = xss - ds * dataj.t1xj; |
||
| 1781 | yss = yss - ds * dataj.t1yj; |
||
| 1782 | zss = zss - ds * dataj.t1zj; |
||
| 1783 | dataj.xj = xss; |
||
| 1784 | dataj.yj = yss; |
||
| 1785 | dataj.zj = zss; |
||
| 1786 | |||
| 1787 | for (i2 = 0; i2 < nint; i2++) |
||
| 1788 | { |
||
| 1789 | s2 = s2 - ds; |
||
| 1790 | dataj.xj = dataj.xj - ds * dataj.t2xj; |
||
| 1791 | dataj.yj = dataj.yj - ds * dataj.t2yj; |
||
| 1792 | dataj.zj = dataj.zj - ds * dataj.t2zj; |
||
| 1793 | unere (xi, yi, zi); |
||
| 1794 | dataj.exk = dataj.exk * cabi + dataj.eyk * sabi + dataj.ezk * salpi; |
||
| 1795 | dataj.exs = dataj.exs * cabi + dataj.eys * sabi + dataj.ezs * salpi; |
||
| 1796 | g1 = (d + s1) * (d + s2) * gcon; |
||
| 1797 | g2 = (d - s1) * (d + s2) * gcon; |
||
| 1798 | g3 = (d - s1) * (d - s2) * gcon; |
||
| 1799 | g4 = (d + s1) * (d - s2) * gcon; |
||
| 1800 | f2 = (s1 * s1 + s2 * s2) * TP; |
||
| 1801 | f1 = s1 / f2 - (g1 - g2 - g3 + g4) * fcon; |
||
| 1802 | f2 = s2 / f2 - (g1 + g2 - g3 - g4) * fcon; |
||
| 1803 | e1 = e1 + dataj.exk * g1; |
||
| 1804 | e2 = e2 + dataj.exk * g2; |
||
| 1805 | e3 = e3 + dataj.exk * g3; |
||
| 1806 | e4 = e4 + dataj.exk * g4; |
||
| 1807 | e5 = e5 + dataj.exs * g1; |
||
| 1808 | e6 = e6 + dataj.exs * g2; |
||
| 1809 | e7 = e7 + dataj.exs * g3; |
||
| 1810 | e8 = e8 + dataj.exs * g4; |
||
| 1811 | e9 = e9 + dataj.exk * f1 + dataj.exs * f2; |
||
| 1812 | |||
| 1813 | } /* for( i2 = 0; i2 < nint; i2++ ) */ |
||
| 1814 | |||
| 1815 | } /* for( i1 = 0; i1 < nint; i1++ ) */ |
||
| 1816 | |||
| 1817 | e[0] = e1; |
||
| 1818 | e[1] = e2; |
||
| 1819 | e[2] = e3; |
||
| 1820 | e[3] = e4; |
||
| 1821 | e[4] = e5; |
||
| 1822 | e[5] = e6; |
||
| 1823 | e[6] = e7; |
||
| 1824 | e[7] = e8; |
||
| 1825 | e[8] = e9; |
||
| 1826 | dataj.xj = xxj; |
||
| 1827 | dataj.yj = xyj; |
||
| 1828 | dataj.zj = xzj; |
||
| 1829 | dataj.s = xs; |
||
| 1830 | |||
| 1831 | return; |
||
| 1832 | } |
||
| 1833 | |||
| 1834 | /*-----------------------------------------------------------------------*/ |
||
| 1835 | |||
| 1836 | /* calculates the electric field due to unit current */ |
||
| 1837 | /* in the t1 and t2 directions on a patch */ |
||
| 1838 | void unere (double xob, double yob, double zob) |
||
| 1839 | { |
||
| 1840 | double zr, t1zr, t2zr, rx, ry, rz, r, tt1; |
||
| 1841 | double tt2, rt, xymag, px, py, cth, r2; |
||
| 1842 | complex double er, q1, q2, rrv, rrh, edp; |
||
| 1843 | |||
| 1844 | zr = dataj.zj; |
||
| 1845 | t1zr = dataj.t1zj; |
||
| 1846 | t2zr = dataj.t2zj; |
||
| 1847 | |||
| 1848 | if (dataj.ipgnd == 2) |
||
| 1849 | { |
||
| 1850 | zr = -zr; |
||
| 1851 | t1zr = -t1zr; |
||
| 1852 | t2zr = -t2zr; |
||
| 1853 | } |
||
| 1854 | |||
| 1855 | rx = xob - dataj.xj; |
||
| 1856 | ry = yob - dataj.yj; |
||
| 1857 | rz = zob - zr; |
||
| 1858 | r2 = rx * rx + ry * ry + rz * rz; |
||
| 1859 | |||
| 1860 | if (r2 <= 1.0e-20) |
||
| 1861 | { |
||
| 1862 | dataj.exk = CPLX_00; |
||
| 1863 | dataj.eyk = CPLX_00; |
||
| 1864 | dataj.ezk = CPLX_00; |
||
| 1865 | dataj.exs = CPLX_00; |
||
| 1866 | dataj.eys = CPLX_00; |
||
| 1867 | dataj.ezs = CPLX_00; |
||
| 1868 | return; |
||
| 1869 | } |
||
| 1870 | |||
| 1871 | r = sqrtl (r2); |
||
| 1872 | tt1 = -TP * r; |
||
| 1873 | tt2 = tt1 * tt1; |
||
| 1874 | rt = r2 * r; |
||
| 1875 | er = cmplx (sinl (tt1), -cosl (tt1)) * (CONST2 * dataj.s); |
||
| 1876 | q1 = cmplx (tt2 - 1., tt1) * er / rt; |
||
| 1877 | q2 = cmplx (3. - tt2, -3. * tt1) * er / (rt * r2); |
||
| 1878 | er = q2 * (dataj.t1xj * rx + dataj.t1yj * ry + t1zr * rz); |
||
| 1879 | dataj.exk = q1 * dataj.t1xj + er * rx; |
||
| 1880 | dataj.eyk = q1 * dataj.t1yj + er * ry; |
||
| 1881 | dataj.ezk = q1 * t1zr + er * rz; |
||
| 1882 | er = q2 * (dataj.t2xj * rx + dataj.t2yj * ry + t2zr * rz); |
||
| 1883 | dataj.exs = q1 * dataj.t2xj + er * rx; |
||
| 1884 | dataj.eys = q1 * dataj.t2yj + er * ry; |
||
| 1885 | dataj.ezs = q1 * t2zr + er * rz; |
||
| 1886 | |||
| 1887 | if (dataj.ipgnd == 1) |
||
| 1888 | return; |
||
| 1889 | |||
| 1890 | if (gnd.iperf == 1) |
||
| 1891 | { |
||
| 1892 | dataj.exk = -dataj.exk; |
||
| 1893 | dataj.eyk = -dataj.eyk; |
||
| 1894 | dataj.ezk = -dataj.ezk; |
||
| 1895 | dataj.exs = -dataj.exs; |
||
| 1896 | dataj.eys = -dataj.eys; |
||
| 1897 | dataj.ezs = -dataj.ezs; |
||
| 1898 | return; |
||
| 1899 | } |
||
| 1900 | |||
| 1901 | xymag = sqrtl (rx * rx + ry * ry); |
||
| 1902 | if (xymag <= 1.0e-6) |
||
| 1903 | { |
||
| 1904 | px = 0.; |
||
| 1905 | py = 0.; |
||
| 1906 | cth = 1.; |
||
| 1907 | rrv = CPLX_10; |
||
| 1908 | } |
||
| 1909 | else |
||
| 1910 | { |
||
| 1911 | px = -ry / xymag; |
||
| 1912 | py = rx / xymag; |
||
| 1913 | cth = rz / sqrtl (xymag * xymag + rz * rz); |
||
| 1914 | rrv = csqrtl (1. - gnd.zrati * gnd.zrati * (1. - cth * cth)); |
||
| 1915 | } |
||
| 1916 | |||
| 1917 | rrh = gnd.zrati * cth; |
||
| 1918 | rrh = (rrh - rrv) / (rrh + rrv); |
||
| 1919 | rrv = gnd.zrati * rrv; |
||
| 1920 | rrv = -(cth - rrv) / (cth + rrv); |
||
| 1921 | edp = (dataj.exk * px + dataj.eyk * py) * (rrh - rrv); |
||
| 1922 | dataj.exk = dataj.exk * rrv + edp * px; |
||
| 1923 | dataj.eyk = dataj.eyk * rrv + edp * py; |
||
| 1924 | dataj.ezk = dataj.ezk * rrv; |
||
| 1925 | edp = (dataj.exs * px + dataj.eys * py) * (rrh - rrv); |
||
| 1926 | dataj.exs = dataj.exs * rrv + edp * px; |
||
| 1927 | dataj.eys = dataj.eys * rrv + edp * py; |
||
| 1928 | dataj.ezs = dataj.ezs * rrv; |
||
| 1929 | |||
| 1930 | return; |
||
| 1931 | } |
||
| 1932 | |||
| 1933 | /*-----------------------------------------------------------------------*/ |