- elbeem.h header file was missing
[blender.git] / intern / elbeem / extern / elbeem.h
1 /******************************************************************************
2  *
3  * El'Beem - Free Surface Fluid Simulation with the Lattice Boltzmann Method
4  * All code distributed as part of El'Beem is covered by the version 2 of the 
5  * GNU General Public License. See the file COPYING for details.
6  * Copyright 2003-2005 Nils Thuerey
7  *
8  * API header
9  */
10 #ifndef ELBEEM_API_H
11 #define ELBEEM_API_H
12
13
14 /*! blender types for mesh->type */
15 //#define OB_FLUIDSIM_DOMAIN      2
16 #define OB_FLUIDSIM_FLUID       4
17 #define OB_FLUIDSIM_OBSTACLE    8
18 #define OB_FLUIDSIM_INFLOW      16
19 #define OB_FLUIDSIM_OUTFLOW     32
20
21 #define FLUIDSIM_OBSTACLE_NOSLIP     1
22 #define FLUIDSIM_OBSTACLE_PARTSLIP   2
23 #define FLUIDSIM_OBSTACLE_FREESLIP   3
24
25
26 // global settings for the simulation
27 typedef struct elbeemSimulationSettings {
28   /* version number */
29   short version;
30
31         /* geometrical extent */
32         float geoStart[3], geoSize[3];
33
34   /* resolutions */
35   short resolutionxyz;
36   short previewresxyz;
37   /* size of the domain in real units (meters along largest resolution x,y,z extent) */
38   float realsize;
39
40   /* fluid properties */
41   double viscosity;
42   /* gravity strength */
43   float gravity[3];
44   /* anim start end time */
45   float animStart, aniFrameTime;
46         /* no. of frames to simulate & output */
47         short noOfFrames;
48   /* g star param (LBM compressibility) */
49   float gstar;
50   /* activate refinement? */
51   short maxRefine;
52   /* amount of particles to generate (0=off) */
53   float generateParticles;
54
55   /* store output path, and file prefix for baked fluid surface */
56   char outputPath[160+80];
57
58         /* channel for frame time, visc & gravity animations */
59         int channelSizeFrameTime;
60         float *channelFrameTime;
61         int channelSizeViscosity;
62         float *channelViscosity;
63         int channelSizeGravity;
64         float *channelGravity;  // vector
65
66         /* boundary types and settings for domain walls */
67         short obstacleType;
68         float obstaclePartslip;
69         /* generate speed vectors for vertices (e.g. for image based motion blur)*/
70         short generateVertexVectors;
71         /* strength of surface smoothing */
72         float surfaceSmoothing;
73
74         /* global transformation to apply to fluidsim mesh */
75         float surfaceTrafo[4*4];
76 } elbeemSimulationSettings;
77
78
79 // a single mesh object
80 typedef struct elbeemMesh {
81   /* obstacle,fluid or inflow... */
82   short type;
83
84         /* vertices */
85   int numVertices;
86         float *vertices; // = float[][3];
87
88         /* triangles */
89         int   numTriangles;
90   int   *triangles; // = int[][3];
91
92         /* animation channels */
93         int channelSizeTranslation;
94         float *channelTranslation;
95         int channelSizeRotation;
96         float *channelRotation;
97         int channelSizeScale;
98         float *channelScale;
99         
100         /* active channel */
101         int channelSizeActive;
102         float *channelActive;
103         /* initial velocity channel (e.g. for inflow) */
104         int channelSizeInitialVel;
105         float *channelInitialVel; // vector
106         /* use initial velocity in object coordinates? (e.g. for rotation) */
107         short localInivelCoords;
108         /* boundary types and settings */
109         short obstacleType;
110         float obstaclePartslip;
111
112         /* name of the mesh, mostly for debugging */
113         char *name;
114 } elbeemMesh;
115
116 // API functions
117
118 #ifdef __cplusplus
119 extern "C"  {
120 #endif // __cplusplus
121  
122 // reset elbeemSimulationSettings struct with defaults
123 void elbeemResetSettings(struct elbeemSimulationSettings*);
124  
125 // start fluidsim init
126 int elbeemInit(struct elbeemSimulationSettings*);
127
128 // reset elbeemMesh struct with zeroes
129 void elbeemResetMesh(struct elbeemMesh*);
130
131 // add mesh as fluidsim object
132 int elbeemAddMesh(struct elbeemMesh*);
133
134 // do the actual simulation
135 int elbeemSimulate(void);
136
137
138 // helper function - simplify animation channels
139 // returns if the channel and its size changed
140 int elbeemSimplifyChannelFloat(float *channel, int *size);
141 int elbeemSimplifyChannelVec3(float *channel, int *size);
142
143 #ifdef __cplusplus
144 }
145 #endif // __cplusplus
146
147 /******************************************************************************/
148 // internal defines, do not use for setting up simulation
149
150 /*! fluid geometry init types */
151 #define FGI_FLAGSTART   16
152 #define FGI_FLUID                         (1<<(FGI_FLAGSTART+ 0))
153 #define FGI_NO_FLUID      (1<<(FGI_FLAGSTART+ 1))
154 #define FGI_BNDNO                         (1<<(FGI_FLAGSTART+ 2))
155 #define FGI_BNDFREE               (1<<(FGI_FLAGSTART+ 3))
156 #define FGI_BNDPART               (1<<(FGI_FLAGSTART+ 4))
157 #define FGI_NO_BND                (1<<(FGI_FLAGSTART+ 5))
158 #define FGI_MBNDINFLOW  (1<<(FGI_FLAGSTART+ 6))
159 #define FGI_MBNDOUTFLOW (1<<(FGI_FLAGSTART+ 7))
160
161 #define FGI_ALLBOUNDS ( FGI_BNDNO | FGI_BNDFREE | FGI_BNDPART | FGI_MBNDINFLOW | FGI_MBNDOUTFLOW )
162
163
164 #endif // ELBEEM_API_H