--- /dev/null
+#define CLOUD_DIM_X 64
+#define CLOUD_DIM_Y 16
+#define CLOUD_DIM_Z 64
+
+/* #define CLOUD_DIM_X 16 */
+/* #define CLOUD_DIM_Y 16 */
+/* #define CLOUD_DIM_Z 16 */
+
+#define P_EXT 0.1
+#define P_HUM 0.1
+#define P_ACT 0.001
+
+struct Clouds {
+ // TODO: make more efficient
+ bool hum[CLOUD_DIM_X][CLOUD_DIM_Y][CLOUD_DIM_Z];
+ bool cld[CLOUD_DIM_X][CLOUD_DIM_Y][CLOUD_DIM_Z];
+ bool act[CLOUD_DIM_X][CLOUD_DIM_Y][CLOUD_DIM_Z];
+ float p_ext[CLOUD_DIM_X][CLOUD_DIM_Y][CLOUD_DIM_Z];
+ float p_hum[CLOUD_DIM_X][CLOUD_DIM_Y][CLOUD_DIM_Z];
+ float p_act[CLOUD_DIM_X][CLOUD_DIM_Y][CLOUD_DIM_Z];
+ /** Wind velocity
+ * Called vz in the paper, but here our z axis is y
+ */
+ float vy[CLOUD_DIM_Y];
+ /** continuous distribution */
+ float q[CLOUD_DIM_X][CLOUD_DIM_Y][CLOUD_DIM_Z];
+};
+
+void initClouds(Clouds *cs);
+
+void stepClouds(Clouds *cs);