ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/QuickHull/stat.h
Revision: 1138
Committed: Tue May 29 22:51:00 2007 UTC (18 years ago) by chuckv
Content type: text/plain
File size: 12258 byte(s)
Log Message:
Addded QuickHull to cvs.

File Contents

# User Rev Content
1 chuckv 1138 /*<html><pre> -<a href="qh-stat.htm"
2     >-------------------------------</a><a name="TOP">-</a>
3    
4     stat.h
5     contains all statistics that are collected for qhull
6    
7     see qh-stat.htm and stat.c
8    
9     copyright (c) 1993-2003, The Geometry Center
10    
11     recompile qhull if you change this file
12    
13     Integer statistics are Z* while real statistics are W*.
14    
15     define maydebugx to call a routine at every statistic event
16    
17     */
18    
19     #ifndef qhDEFstat
20     #define qhDEFstat 1
21    
22    
23     /*-<a href="qh-stat.htm#TOC"
24     >-------------------------------</a><a name="KEEPstatistics">-</a>
25    
26     qh_KEEPstatistics
27     0 turns off statistic gathering (except zzdef/zzinc/zzadd/zzval/wwval)
28     */
29     #ifndef qh_KEEPstatistics
30     #define qh_KEEPstatistics 1
31     #endif
32    
33     /*-<a href="qh-stat.htm#TOC"
34     >-------------------------------</a><a name="statistics">-</a>
35    
36     Zxxx for integers, Wxxx for reals
37    
38     notes:
39     be sure that all statistics are defined in stat.c
40     otherwise initialization may core dump
41     can pick up all statistics by:
42     grep '[zw].*_[(][ZW]' *.c >z.x
43     remove trailers with query">-</a>
44     remove leaders with query-replace-regexp [ ^I]+ (
45     */
46     #if qh_KEEPstatistics
47     enum statistics { /* alphabetical after Z/W */
48     Zacoplanar,
49     Wacoplanarmax,
50     Wacoplanartot,
51     Zangle,
52     Wangle,
53     Wanglemax,
54     Wanglemin,
55     Zangletests,
56     Wareatot,
57     Wareamax,
58     Wareamin,
59     Zavoidold,
60     Wavoidoldmax,
61     Wavoidoldtot,
62     Zback0,
63     Zbestcentrum,
64     Zbestdist,
65     Zbestlower,
66     Zbestlowerv,
67     Zcentrumtests,
68     Zcheckpart,
69     Zcomputefurthest,
70     Zconcave,
71     Wconcavemax,
72     Wconcavetot,
73     Zconcaveridges,
74     Zconcaveridge,
75     Zcoplanar,
76     Wcoplanarmax,
77     Wcoplanartot,
78     Zcoplanarangle,
79     Zcoplanarcentrum,
80     Zcoplanarhorizon,
81     Zcoplanarinside,
82     Zcoplanarpart,
83     Zcoplanarridges,
84     Wcpu,
85     Zcyclefacetmax,
86     Zcyclefacettot,
87     Zcyclehorizon,
88     Zcyclevertex,
89     Zdegen,
90     Wdegenmax,
91     Wdegentot,
92     Zdegenvertex,
93     Zdelfacetdup,
94     Zdelridge,
95     Zdelvertextot,
96     Zdelvertexmax,
97     Zdetsimplex,
98     Zdistcheck,
99     Zdistconvex,
100     Zdistgood,
101     Zdistio,
102     Zdistplane,
103     Zdiststat,
104     Zdistvertex,
105     Zdistzero,
106     Zdoc1,
107     Zdoc2,
108     Zdoc3,
109     Zdoc4,
110     Zdoc5,
111     Zdoc6,
112     Zdoc7,
113     Zdoc8,
114     Zdoc9,
115     Zdoc10,
116     Zdoc11,
117     Zdoc12,
118     Zdropdegen,
119     Zdropneighbor,
120     Zdupflip,
121     Zduplicate,
122     Wduplicatemax,
123     Wduplicatetot,
124     Zdupridge,
125     Zdupsame,
126     Zflipped,
127     Wflippedmax,
128     Wflippedtot,
129     Zflippedfacets,
130     Zfindbest,
131     Zfindbestmax,
132     Zfindbesttot,
133     Zfindcoplanar,
134     Zfindfail,
135     Zfindhorizon,
136     Zfindhorizonmax,
137     Zfindhorizontot,
138     Zfindjump,
139     Zfindnew,
140     Zfindnewmax,
141     Zfindnewtot,
142     Zfindnewjump,
143     Zfindnewsharp,
144     Zgauss0,
145     Zgoodfacet,
146     Zhashlookup,
147     Zhashridge,
148     Zhashridgetest,
149     Zhashtests,
150     Zinsidevisible,
151     Zintersect,
152     Zintersectfail,
153     Zintersectmax,
154     Zintersectnum,
155     Zintersecttot,
156     Zmaxneighbors,
157     Wmaxout,
158     Wmaxoutside,
159     Zmaxridges,
160     Zmaxvertex,
161     Zmaxvertices,
162     Zmaxvneighbors,
163     Zmemfacets,
164     Zmempoints,
165     Zmemridges,
166     Zmemvertices,
167     Zmergeflipdup,
168     Zmergehorizon,
169     Zmergeinittot,
170     Zmergeinitmax,
171     Zmergeinittot2,
172     Zmergeintohorizon,
173     Zmergenew,
174     Zmergesettot,
175     Zmergesetmax,
176     Zmergesettot2,
177     Zmergesimplex,
178     Zmergevertex,
179     Wmindenom,
180     Wminvertex,
181     Zminnorm,
182     Zmultiridge,
183     Znearlysingular,
184     Zneighbor,
185     Wnewbalance,
186     Wnewbalance2,
187     Znewfacettot,
188     Znewfacetmax,
189     Znewvertex,
190     Wnewvertex,
191     Wnewvertexmax,
192     Znoarea,
193     Znonsimplicial,
194     Znowsimplicial,
195     Znotgood,
196     Znotgoodnew,
197     Znotmax,
198     Znumfacets,
199     Znummergemax,
200     Znummergetot,
201     Znumneighbors,
202     Znumridges,
203     Znumvertices,
204     Znumvisibility,
205     Znumvneighbors,
206     Zonehorizon,
207     Zpartangle,
208     Zpartcoplanar,
209     Zpartflip,
210     Zparthorizon,
211     Zpartinside,
212     Zpartition,
213     Zpartitionall,
214     Zpartnear,
215     Zpbalance,
216     Wpbalance,
217     Wpbalance2,
218     Zpostfacets,
219     Zpremergetot,
220     Zprocessed,
221     Zremvertex,
222     Zremvertexdel,
223     Zrenameall,
224     Zrenamepinch,
225     Zrenameshare,
226     Zretry,
227     Wretrymax,
228     Zridge,
229     Wridge,
230     Wridgemax,
231     Zridge0,
232     Wridge0,
233     Wridge0max,
234     Zridgemid,
235     Wridgemid,
236     Wridgemidmax,
237     Zridgeok,
238     Wridgeok,
239     Wridgeokmax,
240     Zsearchpoints,
241     Zsetplane,
242     Ztestvneighbor,
243     Ztotcheck,
244     Ztothorizon,
245     Ztotmerge,
246     Ztotpartcoplanar,
247     Ztotpartition,
248     Ztotridges,
249     Ztotvertices,
250     Ztotvisible,
251     Ztricoplanar,
252     Ztricoplanarmax,
253     Ztricoplanartot,
254     Ztridegen,
255     Ztrimirror,
256     Ztrinull,
257     Wvertexmax,
258     Wvertexmin,
259     Zvertexridge,
260     Zvertexridgetot,
261     Zvertexridgemax,
262     Zvertices,
263     Zvisfacettot,
264     Zvisfacetmax,
265     Zvisvertextot,
266     Zvisvertexmax,
267     Zwidefacet,
268     Zwidevertices,
269     ZEND};
270    
271     /*-<a href="qh-stat.htm#TOC"
272     >-------------------------------</a><a name="ZZstat">-</a>
273    
274     Zxxx/Wxxx statistics that remain defined if qh_KEEPstatistics=0
275    
276     notes:
277     be sure to use zzdef, zzinc, etc. with these statistics (no double checking!)
278     */
279     #else
280     enum statistics { /* for zzdef etc. macros */
281     Zback0,
282     Zbestdist,
283     Zcentrumtests,
284     Zcheckpart,
285     Zconcaveridges,
286     Zcoplanarhorizon,
287     Zcoplanarpart,
288     Zcoplanarridges,
289     Zcyclefacettot,
290     Zcyclehorizon,
291     Zdelvertextot,
292     Zdistcheck,
293     Zdistconvex,
294     Zdistzero,
295     Zdoc1,
296     Zdoc2,
297     Zdoc3,
298     Zdoc11,
299     Zflippedfacets,
300     Zgauss0,
301     Zminnorm,
302     Zmultiridge,
303     Znearlysingular,
304     Wnewvertexmax,
305     Znumvisibility,
306     Zpartcoplanar,
307     Zpartition,
308     Zpartitionall,
309     Zprocessed,
310     Zretry,
311     Zridge,
312     Wridge,
313     Wridgemax,
314     Zridge0,
315     Wridge0,
316     Wridge0max,
317     Zridgemid,
318     Wridgemid,
319     Wridgemidmax,
320     Zridgeok,
321     Wridgeok,
322     Wridgeokmax,
323     Zsetplane,
324     Ztotmerge,
325     ZEND};
326     #endif
327    
328     /*-<a href="qh-stat.htm#TOC"
329     >-------------------------------</a><a name="ztype">-</a>
330    
331     ztype
332     the type of a statistic sets its initial value.
333    
334     notes:
335     The type should be the same as the macro for collecting the statistic
336     */
337     enum ztypes {zdoc,zinc,zadd,zmax,zmin,ZTYPEreal,wadd,wmax,wmin,ZTYPEend};
338    
339     /*========== macros and constants =============*/
340    
341     /*-<a href="qh-stat.htm#TOC"
342     >--------------------------------</a><a name="MAYdebugx">-</a>
343    
344     MAYdebugx
345     define as maydebug() to be called frequently for error trapping
346     */
347     #define MAYdebugx
348    
349     /*-<a href="qh-stat.htm#TOC"
350     >--------------------------------</a><a name="zdef_">-</a>
351    
352     zzdef_, zdef_( type, name, doc, -1)
353     define a statistic (assumes 'qhstat.next= 0;')
354    
355     zdef_( type, name, doc, count)
356     define an averaged statistic
357     printed as name/count
358     */
359     #define zzdef_(stype,name,string,cnt) qhstat id[qhstat next++]=name; \
360     qhstat doc[name]= string; qhstat count[name]= cnt; qhstat type[name]= stype
361     #if qh_KEEPstatistics
362     #define zdef_(stype,name,string,cnt) qhstat id[qhstat next++]=name; \
363     qhstat doc[name]= string; qhstat count[name]= cnt; qhstat type[name]= stype
364     #else
365     #define zdef_(type,name,doc,count)
366     #endif
367    
368     /*-<a href="qh-stat.htm#TOC"
369     >--------------------------------</a><a name="zinc_">-</a>
370    
371     zzinc_( name ), zinc_( name)
372     increment an integer statistic
373     */
374     #define zzinc_(id) {MAYdebugx; qhstat stats[id].i++;}
375     #if qh_KEEPstatistics
376     #define zinc_(id) {MAYdebugx; qhstat stats[id].i++;}
377     #else
378     #define zinc_(id) {}
379     #endif
380    
381     /*-<a href="qh-stat.htm#TOC"
382     >--------------------------------</a><a name="zadd_">-</a>
383    
384     zzadd_( name, value ), zadd_( name, value ), wadd_( name, value )
385     add value to an integer or real statistic
386     */
387     #define zzadd_(id, val) {MAYdebugx; qhstat stats[id].i += (val);}
388     #define wwadd_(id, val) {MAYdebugx; qhstat stats[id].r += (val);}
389     #if qh_KEEPstatistics
390     #define zadd_(id, val) {MAYdebugx; qhstat stats[id].i += (val);}
391     #define wadd_(id, val) {MAYdebugx; qhstat stats[id].r += (val);}
392     #else
393     #define zadd_(id, val) {}
394     #define wadd_(id, val) {}
395     #endif
396    
397     /*-<a href="qh-stat.htm#TOC"
398     >--------------------------------</a><a name="zval_">-</a>
399    
400     zzval_( name ), zval_( name ), wwval_( name )
401     set or return value of a statistic
402     */
403     #define zzval_(id) ((qhstat stats[id]).i)
404     #define wwval_(id) ((qhstat stats[id]).r)
405     #if qh_KEEPstatistics
406     #define zval_(id) ((qhstat stats[id]).i)
407     #define wval_(id) ((qhstat stats[id]).r)
408     #else
409     #define zval_(id) qhstat tempi
410     #define wval_(id) qhstat tempr
411     #endif
412    
413     /*-<a href="qh-stat.htm#TOC"
414     >--------------------------------</a><a name="zmax_">-</a>
415    
416     zmax_( id, val ), wmax_( id, value )
417     maximize id with val
418     */
419     #define wwmax_(id, val) {MAYdebugx; maximize_(qhstat stats[id].r,(val));}
420     #if qh_KEEPstatistics
421     #define zmax_(id, val) {MAYdebugx; maximize_(qhstat stats[id].i,(val));}
422     #define wmax_(id, val) {MAYdebugx; maximize_(qhstat stats[id].r,(val));}
423     #else
424     #define zmax_(id, val) {}
425     #define wmax_(id, val) {}
426     #endif
427    
428     /*-<a href="qh-stat.htm#TOC"
429     >--------------------------------</a><a name="zmin_">-</a>
430    
431     zmin_( id, val ), wmin_( id, value )
432     minimize id with val
433     */
434     #if qh_KEEPstatistics
435     #define zmin_(id, val) {MAYdebugx; minimize_(qhstat stats[id].i,(val));}
436     #define wmin_(id, val) {MAYdebugx; minimize_(qhstat stats[id].r,(val));}
437     #else
438     #define zmin_(id, val) {}
439     #define wmin_(id, val) {}
440     #endif
441    
442     /*================== stat.h types ==============*/
443    
444    
445     /*-<a href="qh-stat.htm#TOC"
446     >--------------------------------</a><a name="intrealT">-</a>
447    
448     intrealT
449     union of integer and real, used for statistics
450     */
451     typedef union intrealT intrealT; /* union of int and realT */
452     union intrealT {
453     int i;
454     realT r;
455     };
456    
457     /*-<a href="qh-stat.htm#TOC"
458     >--------------------------------</a><a name="qhstat">-</a>
459    
460     qhstat
461     global data structure for statistics
462    
463     notes:
464     access to qh_qhstat is via the "qhstat" macro. There are two choices
465     qh_QHpointer = 1 access globals via a pointer
466     enables qh_saveqhull() and qh_restoreqhull()
467     = 0 qh_qhstat is a static data structure
468     only one instance of qhull() can be active at a time
469     default value
470     qh_QHpointer is defined in qhull.h
471    
472     allocated in stat.c
473     */
474     typedef struct qhstatT qhstatT;
475     #if qh_QHpointer
476     #define qhstat qh_qhstat->
477     extern qhstatT *qh_qhstat;
478     #else
479     #define qhstat qh_qhstat.
480     extern qhstatT qh_qhstat;
481     #endif
482     struct qhstatT {
483     intrealT stats[ZEND]; /* integer and real statistics */
484     unsigned char id[ZEND+10]; /* id's in print order */
485     char *doc[ZEND]; /* array of documentation strings */
486     short int count[ZEND]; /* -1 if none, else index of count to use */
487     char type[ZEND]; /* type, see ztypes above */
488     char printed[ZEND]; /* true, if statistic has been printed */
489     intrealT init[ZTYPEend]; /* initial values by types, set initstatistics */
490    
491     int next; /* next index for zdef_ */
492     int precision; /* index for precision problems */
493     int vridges; /* index for Voronoi ridges */
494     int tempi;
495     realT tempr;
496     };
497    
498     /*========== function prototypes ===========*/
499    
500     void qh_allstatA(void);
501     void qh_allstatB(void);
502     void qh_allstatC(void);
503     void qh_allstatD(void);
504     void qh_allstatE(void);
505     void qh_allstatE2(void);
506     void qh_allstatF(void);
507     void qh_allstatG(void);
508     void qh_allstatH(void);
509     void qh_allstatI(void);
510     void qh_allstatistics (void);
511     void qh_collectstatistics (void);
512     void qh_freestatistics (void);
513     void qh_initstatistics (void);
514     boolT qh_newstats (int index, int *nextindex);
515     boolT qh_nostatistic (int i);
516     void qh_printallstatistics (FILE *fp, char *string);
517     void qh_printstatistics (FILE *fp, char *string);
518     void qh_printstatlevel (FILE *fp, int id, int start);
519     void qh_printstats (FILE *fp, int index, int *nextindex);
520     realT qh_stddev (int num, realT tot, realT tot2, realT *ave);
521    
522     #endif /* qhDEFstat */