1 /***********************************************************************/
2 /* Open Visualization Data Explorer                                    */
3 /* (C) Copyright IBM Corp. 1989,1999                                   */
4 /* ALL RIGHTS RESERVED                                                 */
5 /* This code licensed under the                                        */
6 /*    "IBM PUBLIC LICENSE - Open Visualization Data Explorer"          */
7 /***********************************************************************/
8 /*
9  * $Header: /src/master/dx/src/exec/dxmods/stream.h,v 1.7 2001/04/17 15:39:19 gda Exp $:
10  */
11 
12 #ifndef _STREAM_H_
13 #define _STREAM_H_
14 
15 #define DEFAULT_C	0.1
16 
17 typedef struct instanceVars *InstanceVars;
18 typedef struct vectorPart   *VectorPart;
19 typedef struct vectorGrp    *VectorGrp;
20 typedef struct vectorField  *VectorField;
21 
22 struct instanceVars
23 {
24     VectorGrp	currentVectorGrp;
25     Object	currentPartition;
26     int		isRegular;
27 };
28 
29 struct vectorPart
30 {
31     Field  	  field;
32     int           dependency;       /* data dependency: pos or con       */
33     float	  min[3];
34     float	  max[3];
35     Array	  gArray;
36     unsigned short *ghosts;
37 };
38 
39 Error _dxfInitVectorPart(VectorPart, Field);
40 
41 #define DEP_ON_POSITIONS        0x01
42 #define DEP_ON_CONNECTIONS      0x02
43 
44 struct vectorField
45 {
46     VectorGrp	 current;
47     VectorGrp	 *members;
48     int		 nmembers;
49     int		 nDim;
50 };
51 
52 #define POINT_TYPE	double
53 #define VECTOR_TYPE	double
54 
55 struct vectorGrp
56 {
57     InstanceVars (*NewInstanceVars)(VectorGrp);
58     Error        (*FreeInstanceVars)(InstanceVars);
59     int          (*FindElement)(InstanceVars, POINT_TYPE *);
60     int          (*FindMultiGridContinuation)(InstanceVars, POINT_TYPE *);
61     Error        (*Interpolate)(InstanceVars, POINT_TYPE *, VECTOR_TYPE *);
62     Error        (*StepTime)(InstanceVars, double, VECTOR_TYPE *, double *);
63     Error        (*FindBoundary)(InstanceVars,
64 					POINT_TYPE *, VECTOR_TYPE *, double *);
65     int          (*Neighbor)(InstanceVars, VECTOR_TYPE *);
66     Error        (*CurlMap)(VectorGrp, MultiGrid);
67     int          (*Weights)(InstanceVars, POINT_TYPE *);
68     int          (*FaceWeights)(InstanceVars, POINT_TYPE *);
69     Error        (*Delete)(VectorGrp);
70     Error        (*Reset)(VectorGrp);
71     Error        (*Walk)(InstanceVars, POINT_TYPE *, VECTOR_TYPE*, POINT_TYPE *);
72     int          (*Ghost)(InstanceVars, POINT_TYPE *);
73     int          (*ClampToBoundingBox)(InstanceVars, POINT_TYPE *);
74 
75     int          n, nDim, multigrid;
76     VectorPart   *p;
77 };
78 
79 #define WALK_NOT_FOUND	0
80 #define WALK_EXIT	1
81 #define WALK_FOUND	2
82 #define WALK_ERROR	3
83 
84 
85 #define STREAM_BUF_POINTS	32
86 
87 struct stream
88 {
89     float *points;
90     float *vectors;
91     float *time;
92     Array pArray;
93     Array vArray;
94     Array tArray;
95     int   nDim;
96     int   bufKnt, arrayKnt;
97 };
98 
99 
100 typedef struct stream *Stream;
101 
102 Error      _dxfMinMaxBox(Field, float *, float *);
103 int        _dxfIsInBox(VectorPart, POINT_TYPE *, int, int);
104 
105 /* from _irregstream.c */
106 VectorGrp _dxfIrreg_InitVectorGrp(Object, char *);
107 
108 /* from _regstream.c */
109 VectorGrp    _dxfReg_InitVectorGrp(Object, char *);
110 
111 
112 #endif /* _STREAM_H_ */
113