1 /* This regurgitates the input file to the output with some
2 translations and replications if desired */
3 /* It outputs in SI units only */
4
5 #include "induct.h"
6
regurgitate(indsys)7 regurgitate(indsys)
8 SYS *indsys;
9 {
10 /* functions to shift coordinates */
11 void translate(), reflect_x(), reflect_y(), reflect_origin(), do_nothing();
12
13 /* spit out geometries and .externals */
14 spit(indsys, do_nothing, "");
15
16 /*
17 spit(indsys, reflect_x, "_X");
18 spit(indsys, reflect_y, "_Y");
19 spit(indsys, reflect_origin, "_XY");
20 */
21
22 do_end_stuff(indsys);
23 }
24
do_end_stuff(indsys)25 do_end_stuff(indsys)
26 SYS *indsys;
27 {
28 fprintf(stdout, ".freq fmin=%lg fmax=%lg ndec=%lg\n",indsys->fmin,
29 indsys->fmax, 1.0/indsys->logofstep);
30
31 fprintf(stdout, ".end\n");
32
33 }
34
35
36
37 static double delta_x, delta_y, delta_z;
38
39 /* set amount of translation for translate() */
set_translate(x,y,z)40 set_translate(x, y, z)
41 double x, y, z;
42 {
43 delta_x = x;
44 delta_y = y;
45 delta_z = z;
46 }
47
translate(x,y,z,new_x,new_y,new_z)48 void translate(x,y,z,new_x, new_y, new_z)
49 double x,y,z,*new_x, *new_y, *new_z;
50 {
51 *new_x = x + delta_x;
52 *new_y = y + delta_y;
53 *new_z = z + delta_z;
54 }
55
56 /* reflect about x axis (negate y) */
reflect_x(x,y,z,new_x,new_y,new_z)57 void reflect_x(x,y,z,new_x, new_y, new_z)
58 double x,y,z,*new_x, *new_y, *new_z;
59 {
60 *new_x = x;
61 *new_y = -y;
62 *new_z = z;
63 }
64
65 /* reflect about y axis (negate x) */
66
reflect_y(x,y,z,new_x,new_y,new_z)67 void reflect_y(x,y,z,new_x, new_y, new_z)
68 double x,y,z,*new_x, *new_y, *new_z;
69 {
70 *new_x = -x;
71 *new_y = y;
72 *new_z = z;
73 }
74
75 /* reflect about origin (negate x and y) */
76
reflect_origin(x,y,z,new_x,new_y,new_z)77 void reflect_origin(x,y,z,new_x, new_y, new_z)
78 double x,y,z,*new_x, *new_y, *new_z;
79 {
80 *new_x = -x;
81 *new_y = -y;
82 *new_z = z;
83 }
84
do_nothing(x,y,z,new_x,new_y,new_z)85 void do_nothing(x,y,z,new_x, new_y, new_z)
86 double x,y,z,*new_x, *new_y, *new_z;
87 {
88 *new_x = x;
89 *new_y = y;
90 *new_z = z;
91 }
92
93
94 /* spit out nodes and segments and .externals */
95
spit(indsys,new_coords,suffix)96 spit(indsys, new_coords, suffix)
97 SYS *indsys;
98 void (*new_coords)();
99 char *suffix;
100 {
101
102 NODES *node;
103 NODELIST *nodel;
104 SEGMENT *seg;
105 GROUNDPLANE *gp;
106 EXTERNAL *ext;
107 int i;
108 double x,y,z;
109
110 /* do nodes */
111 fprintf(stdout, "* NODES for %s\n",suffix);
112 for(node = indsys->nodes; node != NULL; node = node->next) {
113 if (node->type == NORMAL) {
114 new_coords(node->x, node->y, node->z, &x, &y, &z);
115 fprintf(stdout, "%s%s x=%lg y=%lg z=%lg\n", node->name, suffix, x, y, z);
116 }
117 }
118
119 /*do segments */
120 fprintf(stdout, "* Segments for %s\n",suffix);
121 for(seg = indsys->segment; seg != NULL; seg = seg->next) {
122 if (seg->type == NORMAL) {
123 #if SUPERCON == ON
124 fprintf(stdout, "%s%s %s%s %s%s w=%lg h=%lg nhinc=%d nwinc=%d rw=%lg rh=%lg sigma=%lg lambda=%lg",
125 seg->name, suffix, seg->node[0]->name, suffix,
126 seg->node[1]->name, suffix, seg->width,
127 seg->height, seg->hinc,
128 seg->winc, seg->r_width, seg->r_height, seg->sigma, seg->lambda);
129 #else
130 fprintf(stdout, "%s%s %s%s %s%s w=%lg h=%lg nhinc=%d nwinc=%d rw=%lg rh=%lg sigma=%lg",
131 seg->name, suffix, seg->node[0]->name, suffix,
132 seg->node[1]->name, suffix, seg->width,
133 seg->height, seg->hinc,
134 seg->winc, seg->r_width, seg->r_height, seg->sigma);
135 #endif
136 if (seg->widthdir != NULL)
137 fprintf(stdout, " wx=%lg wy=%lg wz=%lg \n", seg->widthdir[XX],
138 seg->widthdir[YY], seg->widthdir[ZZ]);
139 else
140 fprintf(stdout, "\n");
141 }
142 }
143
144 /*do planes */
145 fprintf(stdout, "* Planes for %s\n",suffix);
146 for(gp = indsys->planes; gp != NULL; gp = gp->next) {
147
148 if (is_nonuni_gp(gp)) {
149 fprintf(stdout, "Nonuniform planes not supported for regurgitation at this time!\n");
150 continue;
151 }
152
153 fprintf(stdout, "%s%s \n",gp->name, suffix);
154 i = 0;
155 new_coords(gp->x[i], gp->y[i], gp->z[i], &x, &y, &z);
156 fprintf(stdout, "+ x1=%lg y1=%lg z1=%lg\n",x, y, z);
157
158 i = 1;
159 new_coords(gp->x[i], gp->y[i], gp->z[i], &x, &y, &z);
160 fprintf(stdout, "+ x2=%lg y2=%lg z2=%lg\n",x, y, z);
161
162 i = 2;
163 new_coords(gp->x[i], gp->y[i], gp->z[i], &x, &y, &z);
164 fprintf(stdout, "+ x3=%lg y3=%lg z3=%lg\n",x, y, z);
165
166 fprintf(stdout, "+ seg1=%d seg2=%d\n", gp->seg1, gp->seg2);
167 fprintf(stdout, "+ thick=%lg ", gp->thick);
168 fprintf(stdout, "segwid1=%lg segwid2=%lg ", gp->segwid1, gp->segwid2);
169 fprintf(stdout, "sigma=%lg\n", gp->sigma);
170 #if SUPERCON == ON
171 fprintf(stdout, "lambda=%lg\n", gp->lambda);
172 #endif
173
174 for(nodel = gp->usernode_coords; nodel != NULL; nodel=nodel->next) {
175 fprintf(stdout, "+ %s (%lg, %lg, %lg)\n", nodel->name, nodel->x,
176 nodel->y, nodel->z);
177 }
178
179 if (gp->list_of_holes != NULL)
180 fprintf(stdout, "Holes cannot be regurgitated at this time!\n");
181
182 }
183
184 /* do .equivs */
185 fprintf(stdout, "* .equivs for %s\n",suffix);
186 for(node = indsys->nodes; node != NULL; node = node->next) {
187 if (node->type == NORMAL && node != getrealnode(node)) {
188 fprintf(stdout, ".equiv %s%s %s%s\n", node->name, suffix,
189 getrealnode(node)->name, suffix);
190 }
191 }
192
193 /* do .externals */
194
195 for(ext = indsys->externals; ext != NULL; ext = ext->next) {
196 fprintf(stdout, ".external %s%s %s%s ",
197 getrealnode(ext->source->node[0])->name, suffix,
198 getrealnode(ext->source->node[1])->name, suffix);
199 if (strcmp(ext->portname,"") != 0)
200 fprintf(stdout, "%s%s\n",ext->portname, suffix);
201 else
202 fprintf(stdout, "\n");
203 }
204 }
205
206
207
208
209