+void advection(Clouds *cs) {
+ Clouds ncs = *cs;
+
+ for (int i = 0; i < CLOUD_DIM_X; i++) {
+ for (int j = 0; j < CLOUD_DIM_Y; j++) {
+ for (int k = 0; k < CLOUD_DIM_Z; k++) {
+ int v = cs->vz[k];
+ ncs.hum[i][j][k] = i - v > 0 ? cs->hum[i - v][j][k] : 0;
+ ncs.cld[i][j][k] = i - v > 0 ? cs->cld[i - v][j][k] : 0;
+ ncs.act[i][j][k] = i - v > 0 ? cs->act[i - v][j][k] : 0;
+ }
+ }
+ }
+
+ *cs = ncs;
+}
+