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