deposit static method
Deposit a particle at a vertex.
Implementation
static void deposit(Float32List g, int i, int j, int xl, double displacement) {
int currentKey = j * xl + i;
// Pick a random neighbor.
for (int k = 0; k < 3; k++) {
int r = (math.Random().nextDouble() * 8).floor();
switch (r) {
case 0: i++; break;
case 1: i--; break;
case 2: j++; break;
case 3: j--; break;
case 4: i++; j++; break;
case 5: i++; j--; break;
case 6: i--; j++; break;
case 7: i--; j--; break;
}
final neighborKey = j * xl + i;
// If the neighbor is lower, move the particle to that neighbor and re-evaluate.
if (g.get(neighborKey) != null) {
if (g.get(neighborKey) < g.get(currentKey)) {
deposit(g, i, j, xl, displacement);
return;
}
}
// Deposit some particles on the edge.
else if (math.Random().nextDouble() < 0.2) {
g[g.getK(currentKey)] += displacement;
return;
}
}
g[g.getK(currentKey)] += displacement;
}