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