1 /* 2 * nec2.h - header file for nec2 3 */ 4 5 #include <complex.h> 6 #include <stdio.h> 7 #include <math.h> 8 #include <signal.h> 9 #include <stdlib.h> 10 #include <unistd.h> 11 #include <string.h> 12 #include <fcntl.h> 13 #include <errno.h> 14 #include <time.h> 15 #include <sys/types.h> 16 #include <sys/times.h> 17 18 #ifndef TRUE 19 #define TRUE 1 20 #endif 21 22 #ifndef FALSE 23 #define FALSE 0 24 #endif 25 26 /* commonly used complex constants */ 27 #define CPLX_00 (0.0+0.0fj) 28 #define CPLX_01 (0.0+1.0fj) 29 #define CPLX_10 (1.0+0.0fj) 30 #define CPLX_11 (1.0+1.0fj) 31 32 /* common constants */ 33 #define PI 3.141592654 34 #define POT 1.570796327 35 #define TP 6.283185308 36 #define PTP .6283185308 37 #define TPJ (0.0+6.283185308fj) 38 #define PI8 25.13274123 39 #define PI10 31.41592654 40 #define TA 1.745329252E-02 41 #define TD 57.29577951 42 #define ETA 376.73 43 #define CVEL 299.8 44 #define RETA 2.654420938E-3 45 #define TOSP 1.128379167 46 #define ACCS 1.E-12 47 #define SP 1.772453851 48 #define FPI 12.56637062 49 #define CCJ (0.0-0.01666666667fj) 50 #define CONST1 (0.0+4.771341189fj) 51 #define CONST2 4.771341188 52 #define CONST3 (0.0-29.97922085fj) 53 #define CONST4 (0.0+188.365fj) 54 #define GAMMA .5772156649 55 #define C1 -.02457850915 56 #define C2 .3674669052 57 #define C3 .7978845608 58 #define P10 .0703125 59 #define P20 .1121520996 60 #define Q10 .125 61 #define Q20 .0732421875 62 #define P11 .1171875 63 #define P21 .1441955566 64 #define Q11 .375 65 #define Q21 .1025390625 66 #define POF .7853981635 67 #define MAXH 20 68 #define CRIT 1.0E-4 69 #define NM 131072 70 #define NTS 4 71 #define SMIN 1.e-3 72 73 /* Replaces the "10000" limit used to */ 74 /* identify segment/patch connections */ 75 #define PCHCON 100000 76 77 /* carriage return and line feed */ 78 #define CR 0x0d 79 #define LF 0x0a 80 81 /* max length of a line read from input file */ 82 #define LINE_LEN 132 83 84 /* version of fortran source for the -v option */ 85 #define version "nec2c v0.1" 86 87 /* nec2.c */ 88 int main(int argc, char **argv); 89 void arc(int itg, int ns, double rada, double ang1, double ang2, double rad); 90 double atgn2(double x, double y); 91 void blckot(complex double *ar, int nunit, int ix1, int ix2, int nblks, int neof); 92 void blckin(complex double *ar, int nunit, int ix1, int ix2, int nblks, int neof); 93 void cabc(complex double *curx); 94 double cang(complex double z); 95 void cmset(int nrow, complex double *cm, double rkhx, int iexkx); 96 void cmss(int j1, int j2, int im1, int im2, 97 complex double *cm, int nrow, int itrp); 98 void cmsw(int j1, int j2, int i1, int i2, complex double *cm, 99 complex double *cw, int ncw, int nrow, int itrp); 100 void cmws(int j, int i1, int i2, complex double *cm, int nr, 101 complex double *cw, int nw, int itrp); 102 void cmww(int j, int i1, int i2, complex double *cm, int nr, 103 complex double *cw, int nw, int itrp); 104 void conect(int ignd); 105 void couple(complex double *cur, double wlam); 106 void datagn(void); 107 double db10(double x); 108 double db20(double x); 109 void efld(double xi, double yi, double zi, double ai, int ij); 110 void eksc(double s, double z, double rh, double xk, int ij, 111 complex double *ezs, complex double *ers, complex double *ezc, 112 complex double *erc, complex double *ezk, complex double *erk); 113 void ekscx(double bx, double s, double z, double rhx, double xk, 114 int ij, int inx1, int inx2, complex double *ezs, 115 complex double *ers, complex double *ezc, complex double *erc, 116 complex double *ezk, complex double *erk); 117 void etmns(double p1, double p2, double p3, double p4, double p5, 118 double p6, int ipr, complex double *e); 119 void factr(int n, complex double *a, int *ip, int ndim); 120 void factrs(int np, int nrow, complex double *a, int *ip); 121 complex double fbar(complex double p); 122 void fblock(int nrow, int ncol, int imax, int ipsym); 123 void ffld(double thet, double phi, 124 complex double *eth, complex double *eph); 125 void fflds(double rox, double roy, double roz, complex double *scur, 126 complex double *ex, complex double *ey, complex double *ez); 127 void gf(double zk, double *co, double *si); 128 void gfld(double rho, double phi, double rz, complex double *eth, 129 complex double *epi, complex double *erd, complex double ux, int ksymp); 130 void gh(double zk, double *hr, double *hi); 131 void gwave(complex double *erv, complex double *ezv, 132 complex double *erh, complex double *ezh, complex double *eph); 133 void gx(double zz, double rh, double xk, 134 complex double *gz, complex double *gzp); 135 void gxx(double zz, double rh, double a, double a2, double xk, 136 int ira, complex double *g1, complex double *g1p, complex double *g2, 137 complex double *g2p, complex double *g3, complex double *gzp); 138 void helix(double s, double hl, double a1, double b1, 139 double a2,double b2, double rad, int ns, int itg); 140 void hfk(double el1, double el2, double rhk, 141 double zpkx, double *sgr, double *sgi); 142 void hintg(double xi, double yi, double zi); 143 void hsfld(double xi, double yi, double zi, double ai); 144 void hsflx(double s, double rh, double zpx, complex double *hpk, 145 complex double *hps, complex double *hpc); 146 void intrp(double x, double y, complex double *f1, 147 complex double *f2, complex double *f3, complex double *f4); 148 void intx(double el1, double el2, double b, int ij, double *sgr, double *sgi); 149 int isegno(int itagi, int mx); 150 void lfactr(complex double *a, int nrow, int ix1, int ix2, int *ip); 151 void load(int *ldtyp, int *ldtag, int *ldtagf, int *ldtagt, 152 double *zlr, double *zli, double *zlc); 153 void lunscr(complex double *a, int nrow, int nop, 154 int *ix, int *ip, int iu2, int iu3, int iu4); 155 void move(double rox, double roy, double roz, double xs, 156 double ys, double zs, int its, int nrpt, int itgi); 157 void nefld(double xob, double yob, double zob, complex double *ex, 158 complex double *ey, complex double *ez); 159 void netwk(complex double *cm, complex double *cmb, complex double *cmc, 160 complex double *cmd, int *ip, complex double *einc); 161 void nfpat(void); 162 void nhfld(double xob, double yob, double zob, complex double *hx, 163 complex double *hy, complex double *hz); 164 void patch(int nx, int ny, double ax1, double ay1, double az1, 165 double ax2, double ay2, double az2, double ax3, double ay3, 166 double az3, double ax4, double ay4, double az4); 167 void subph(int nx, int ny); 168 void pcint(double xi, double yi, double zi, double cabi, 169 double sabi, double salpi, complex double *e); 170 void prnt(int in1, int in2, int in3, double fl1, double fl2, 171 double fl3, double fl4, double fl5, double fl6, char *ia, int ichar); 172 void qdsrc(int is, complex double v, complex double *e); 173 void rdpat(void); 174 void readgm(char *gm, int *i1, int *i2, double *x1, double *y1, 175 double *z1, double *x2, double *y2, double *z2, double *rad); 176 void readmn(char *gm, int *i1, int *i2, int *i3, int *i4, double *f1, 177 double *f2, double *f3, double *f4, double *f5, double *f6); 178 void reflc(int ix, int iy, int iz, int itx, int nop); 179 void rom2(double a, double b, complex double *sum, double dmin); 180 void sbf(int i, int is, double *aa, double *bb, double *cc); 181 void sflds(double t, complex double *e); 182 void solgf(complex double *a, complex double *b, complex double *c, 183 complex double *d, complex double *xy, int *ip, int np, int n1, 184 int n, int mp, int m1, int m, int n1c, int n2c, int n2cz); 185 void solve(int n, complex double *a, int *ip, complex double *b, int ndim); 186 void solves(complex double *a, int *ip, complex double *b, int neq, 187 int nrh, int np, int n, int mp, int m); 188 void tbf(int i, int icap); 189 void test(double f1r, double f2r, double *tr, double f1i, 190 double f2i, double *ti, double dmin); 191 void trio(int j); 192 void unere(double xob, double yob, double zob); 193 void wire(double xw1, double yw1, double zw1, double xw2, double yw2, 194 double zw2, double rad, double rdel, double rrad, int ns, int itg); 195 complex double zint(double sigl, double rolam); 196 int min(int a, int b); 197 /* misc.c */ 198 void usage(void); 199 void abort_on_error(int why); 200 complex double cmplx(double a, double j); 201 void secnds(double *x); 202 int stop(int flag); 203 int load_line(char *buff, FILE *pfile); 204 void mem_alloc( void **ptr, size_t req ); 205 void mem_realloc( void **ptr, size_t req ); 206 void free_ptr( void **ptr ); 207 /* somnec.c */ 208 void somnec(double epr, double sig, double fmhz); 209 void bessel(complex double z, complex double *j0, complex double *j0p); 210 void evlua(complex double *erv, complex double *ezv, 211 complex double *erh, complex double *eph); 212 void gshank(complex double start, complex double dela, complex double *sum, 213 int nans, complex double *seed, int ibk, complex double bk, complex double delb); 214 void hankel(complex double z, complex double *h0, complex double *h0p); 215 void lambda(double t, complex double *xlam, complex double *dxlam); 216 void rom1(int n, complex double *sum, int nx); 217 void saoa( double t, complex double *ans); 218 219