deposit static method

void deposit(
  1. Float32List g,
  2. int i,
  3. int j,
  4. int xl,
  5. double displacement,
)

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;
}