malt-wr
points.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define MINIMUM_ALPHA_DIVIDER   720
 

Functions

void readinit (void)
 
int addpoint (double *, double *)
 

Variables

int dim
 
int var
 
int * yield
 
int pin
 
int * xyz
 
int pntcount
 
PARAMETER_SETparameter_list
 
double * startpnt
 
double * centerpnt
 
double * lower
 
double * upper
 
double * scale
 
double * delta
 
double ** hullpnts
 
char(* names )[NAME_LENGTH]
 

Macro Definition Documentation

#define MINIMUM_ALPHA_DIVIDER   720

Definition at line 5 of file points.h.

Function Documentation

int addpoint ( double *  ,
double *   
)

Definition at line 40 of file points.c.

41 {
42  FILE *fp;
43  double dum, dist=0.0, inveffcenter;
44  int x, concave;
45  char errmsg[LINE_LENGTH];
46  char system_call[LINE_LENGTH];
47 
48  if ((fp=fopen(LIMITS_FILE,"w")) == NULL) {
49  strcpy(errmsg, "Can't write to the '");
50  strcat(errmsg, LIMITS_FILE);
51  strcat(errmsg, "' file.\n");
52  nrerror(errmsg);
53  }
54 /* load zeroeth element with unscaled value for accuracy */
55  for (x=1; dim >= x; ++x)
56  dist += (pc[x]-po[x])*(pc[x]-po[x])*scale[x]*scale[x];
57  dist = sqrt(dist);
58 
59  inveffcenter = fabs(pc[1]-po[1])/(dist*centerpnt[1]);
60  for (x=2; dim >= x; ++x)
61  if((dum = fabs(pc[x]-po[x])/(dist*centerpnt[x])) > inveffcenter)
62  inveffcenter = dum;
63 /* in 1-D, X=(pc[]-po[])/centerpnt[ ] */
64 /* in 2-D, pick effcenter such that above holds for each dimension */
65  fprintf(fp,"pc[0]=0\npo[0]=%f\n",dist*inveffcenter);
66 /* pc on plane, po on the boundary */
67 /* unscale it */
68  for (x=1; dim >= x; ++x) {
69  fprintf(fp, "pc[%i]=%f\n", x, pc[x]*scale[x]);
70  fprintf(fp, "po[%i]=%f\n", x, po[x]*scale[x]);
71  }
72 /* print the circuit and circnumber names */
73  fprintf(fp, "set circuit = '%s'\n", param.circuit_name);
74  fprintf(fp, "set opt_num = '%s'\n", param.opt_num);
75  fclose(fp);
76 
77  strcpy(system_call, param.spice_name);
78  strcat(system_call, BOUNDARY_CALL);
79  system(system_call);
80 
81  if ((fp=fopen(POINT_FILE,"r")) == NULL) {
82  strcpy(errmsg, "Can't read the '");
83  strcat(errmsg, POINT_FILE);
84  strcat(errmsg, "' file.\n");
85  nrerror(errmsg);
86  }
87  fscanf(fp, "%d", &concave);
88 
89 /* read in and scale the new point */
90  if (!concave) {
91  ++pntcount;
92 
93  /* throw away the zeroeth array element */
94  fscanf(fp, "%lf",&dum);
95  for (x=1; dim >= x; ++x) {
96  fscanf(fp, "%lf", *(hullpnts+pntcount)+x);
97  hullpnts[pntcount][x] /= scale[x];
98  }
99 
100  for (x=0; dim >= x; ++x)
101  fscanf(fp, "%lf", &delta[x]);
102  }
103 
104  fclose(fp);
105  return(!concave);
106 }
double * scale
Definition: points.c:14
char circuit_name[NAME_LENGTH]
Definition: constype.h:184
#define LIMITS_FILE
Definition: filenames.h:8
int dim
Definition: points.c:11
int pntcount
Definition: points.c:12
PARAMETERS param
Definition: init.c:10
double ** hullpnts
Definition: points.c:14
double * delta
Definition: points.c:14
void nrerror(char *error_text)
Definition: lineread.c:7
char spice_name[NAME_LENGTH]
Definition: constype.h:152
char opt_num[NAME_LENGTH]
Definition: constype.h:196
double * centerpnt
Definition: points.c:14
#define BOUNDARY_CALL
Definition: filenames.h:25
#define LINE_LENGTH
Definition: constype.h:4
#define POINT_FILE
Definition: filenames.h:7
void readinit ( void  )

Definition at line 159 of file points.c.

160 {
161  FILE *fp;
162  char filename[LINE_LENGTH];
163  int x,k,temp;
164  char in_buffer[LONG_LINE_LENGTH],errmssg[LINE_LENGTH+30];
165  int line_num=0;
166 
167 /* string out the input file name */
168  strcpy(filename, param.input_dir);
169  strcat(filename, param.circuit_name);
170  strcat(filename, param.init_ext);
171  strcat(filename, param.opt_num);
172 
173 /* string out the error message */
174  strcpy(errmssg, "Can't read the '");
175  strcat(errmssg, filename);
176  strcat(errmssg, "'file.\n");
177 
178 /* read init file */
179  if ((fp=fopen(filename, "r")) == NULL)
180  nrerror(errmssg);
181 
182  do {
183  if(!read_long_line(fp, in_buffer, &line_num))
184  unexpctd_eof(filename);
185  } while(in_buffer[0]=='*');
186  if(sscanf(in_buffer, "%d", &dim)!=1)
187  error_in_line(filename, line_num, in_buffer);
188 
189 /* initialize */
190  startpnt = vector(1,dim);
191  centerpnt = vector(1,dim);
192  lower = vector(1,dim);
193  upper = vector(1,dim);
194  scale = vector(1,dim);
195  yield = ivector(1,dim);
196  names = (char(*)[NAME_LENGTH])calloc(dim, NAME_LENGTH);
197  delta = (double *)calloc(dim+1, sizeof(double));
198 
199 /* read some more */
200 
201  /* parameter names */
202  do {
203  if(!read_long_line(fp, in_buffer, &line_num))
204  unexpctd_eof(filename);
205  } while((in_buffer[0]=='*') || blank_line(in_buffer));
206  k=0;
207  for (x=0; dim > x; ++x) {
208  if(sscanf(&in_buffer[k], "%s", names[x])!=1)
209  error_in_line(filename, line_num, in_buffer);
210  k+=skip_arg(&in_buffer[k], 1);
211  }
212 
213  /* nominal values */
214  do {
215  if(!read_long_line(fp, in_buffer, &line_num))
216  unexpctd_eof(filename);
217  } while((in_buffer[0]=='*') || blank_line(in_buffer));
218  k=0;
219  for (x=1; dim >= x; ++x) {
220  if(sscanf(&in_buffer[k], "%lf", centerpnt+x)!=1)
221  error_in_line(filename, line_num, in_buffer);
222  k+=skip_arg(&in_buffer[k], 1);
223  }
224 
225  /* minimum parameter search values */
226  do {
227  if(!read_long_line(fp, in_buffer, &line_num))
228  unexpctd_eof(filename);
229  } while((in_buffer[0]=='*') || blank_line(in_buffer));
230  k=0;
231  for (x=1; dim >= x; ++x) {
232  if(sscanf(&in_buffer[k], "%lf", lower+x)!=1)
233  error_in_line(filename, line_num, in_buffer);
234  k+=skip_arg(&in_buffer[k], 1);
235  }
236 
237  /* maximum parameter search values */
238  do {
239  if(!read_long_line(fp, in_buffer, &line_num))
240  unexpctd_eof(filename);
241  } while((in_buffer[0]=='*') || blank_line(in_buffer));
242  k=0;
243  for (x=1; dim >= x; ++x) {
244  if(sscanf(&in_buffer[k], "%lf", upper+x)!=1)
245  error_in_line(filename, line_num, in_buffer);
246  k+=skip_arg(&in_buffer[k], 1);
247  }
248 
249  if(param.program == OPT_PROGRAM) {
250  /* percent variations */
251  do {
252  if(!read_long_line(fp, in_buffer, &line_num))
253  unexpctd_eof(filename);
254  } while((in_buffer[0]=='*') || blank_line(in_buffer));
255  k=0;
256  for (x=1; dim >= x; ++x) {
257  if(sscanf(&in_buffer[k], "%lf", scale+x)!=1)
258  error_in_line(filename, line_num, in_buffer);
259  k+=skip_arg(&in_buffer[k], 1);
260  }
261 
262  /* yield */
263  do {
264  if(!read_long_line(fp, in_buffer, &line_num))
265  unexpctd_eof(filename);
266  } while((in_buffer[0]=='*') || blank_line(in_buffer));
267  k=0;
268  for (x=1; dim >= x; ++x) {
269  if(sscanf(&in_buffer[k], "%d", yield+x)!=1)
270  error_in_line(filename, line_num, in_buffer);
271  k+=skip_arg(&in_buffer[k], 1);
272 
273  if (yield[x]) ++var;
274  }
275 
276  /* static */
277  do {
278  if(!read_long_line(fp, in_buffer, &line_num))
279  unexpctd_eof(filename);
280  } while(in_buffer[0]=='*');
281  k=0;
282  for (x=1; dim >= x; ++x) {
283  if(sscanf(&in_buffer[k], "%d", &temp)!=1)
284  error_in_line(filename, line_num, in_buffer);
285  k+=skip_arg(&in_buffer[k], 1);
286 
287  if (temp) ++pin;
288  }
289  xyz = ivector(1,pin);
290  pin=0;
291  k=0;
292  for (x=1; dim >= x; ++x) {
293  if(sscanf(&in_buffer[k], "%d", &temp)!=1)
294  error_in_line(filename, line_num, in_buffer);
295  k+=skip_arg(&in_buffer[k], 1);
296 
297  if (temp)
298  xyz[++pin]=x;
299  }
300  } /* endif OPT_PROGRAM */
301 
302 
303  /* 2D - mapping (optional) */
305  PARAMETER_SET *tmp;
306 
307  while(read_long_line(fp, in_buffer, &line_num)) {
308  if((in_buffer[0]=='*') || blank_line(in_buffer))
309  continue;
310  tmp=(PARAMETER_SET*)calloc(1, sizeof(PARAMETER_SET));
311  if(sscanf(in_buffer, "%d %d %d", &tmp->x,
312  &tmp->y,
313  &tmp->points_nr)!=3) {
314  free(tmp);
315  error_in_line(filename, line_num, in_buffer);
316  }
317  else {
318  if((tmp->points_nr<4) || (tmp->x<1) || (tmp->y<1) ||
319  (tmp->x>dim) || (tmp->y>dim) || (tmp->x==tmp->y))
320  error_in_line(filename, line_num, in_buffer);
321  }
322  add_parameter_set(tmp);
323  }
324  } /* endif TWO_SET */
325 
327  for (x=1; dim >= x; ++x)
328  scale[x] = 1.0;
329 /* scale it */
330  for (x=1; dim >= x; ++x) {
331  scale[x] *= fabs(centerpnt[x]);
332  centerpnt[x] /= scale[x];
333  lower[x] /= scale[x];
334  upper[x] /= scale[x];
335  startpnt[x] = centerpnt[x];
336  }
337 
338  fclose(fp);
339 }
int * ivector(int nl, int nh)
Definition: qnrutil.c:8
int var
Definition: points.c:11
static double * temp
Definition: optimize.c:40
double * scale
Definition: points.c:14
char circuit_name[NAME_LENGTH]
Definition: constype.h:184
static int blank_line(char *line)
Definition: points.c:134
int input_options
Definition: constype.h:199
#define LONG_LINE_LENGTH
Definition: constype.h:5
static void unexpctd_eof(char *filename)
Definition: points.c:127
int * yield
Definition: points.c:11
int dim
Definition: points.c:11
#define TWO_SET
Definition: constype.h:27
PARAMETERS param
Definition: init.c:10
double * delta
Definition: points.c:14
void nrerror(char *error_text)
Definition: lineread.c:7
int * xyz
Definition: points.c:11
#define NAME_LENGTH
Definition: constype.h:3
static void error_in_line(char *filename, int line_num, char *line)
Definition: points.c:120
char init_ext[NAME_LENGTH]
Definition: constype.h:175
double * lower
Definition: points.c:14
char opt_num[NAME_LENGTH]
Definition: constype.h:196
double * vector(int nl, int nh)
Definition: qnrutil.c:16
int program
Definition: constype.h:193
double * upper
Definition: points.c:14
char input_dir[NAME_LENGTH]
Definition: constype.h:143
static void add_parameter_set(PARAMETER_SET *new)
Definition: points.c:146
double * centerpnt
Definition: points.c:14
double * startpnt
Definition: points.c:14
#define OPT_PROGRAM
Definition: constype.h:246
#define LINE_LENGTH
Definition: constype.h:4
#define HS_PROGRAM
Definition: constype.h:243
#define MARG_PROGRAM
Definition: constype.h:245
char(* names)[NAME_LENGTH]
Definition: points.c:15
static int read_long_line(FILE *fp, char *line, int *line_no)
Definition: points.c:108
static char filename[LINE_LENGTH]
Definition: optimize.c:35
static int skip_arg(char *line, int arg_num)
Definition: points.c:20
int pin
Definition: points.c:11

Variable Documentation

double * centerpnt

Definition at line 14 of file points.c.

double * delta

Definition at line 14 of file points.c.

int dim

Definition at line 11 of file points.c.

double ** hullpnts

Definition at line 14 of file points.c.

double * lower

Definition at line 14 of file points.c.

char(* names)[NAME_LENGTH]

Definition at line 15 of file points.c.

PARAMETER_SET* parameter_list

Definition at line 17 of file points.c.

int pin

Definition at line 11 of file points.c.

int pntcount

Definition at line 12 of file points.c.

double * scale

Definition at line 14 of file points.c.

double* startpnt

Definition at line 14 of file points.c.

double * upper

Definition at line 14 of file points.c.

int var

Definition at line 11 of file points.c.

int * xyz

Definition at line 11 of file points.c.

int * yield

Definition at line 11 of file points.c.