HPCU Bi-Weekly Challenge It Depends: Precipitate Solution by Aaron Weeden, April 21, 2014 main: Step 1 has no dependencies. Step 2 depends on step 1. Step 3 has no dependencies. Step 4 depends on the number of time steps being set in readData step 3. Step 4a depends on step 2 for the first iteration, and step 4c of the previous iteration for each successive iteration. Step 4b depends on step 4a. Step 4c depends on step 4b. Step 4d depends on step 4c. readData: Steps 1-4 have no dependencies. randomizePositions: Step 1 depends on number of particles being set in readData step 2. Step 1a depends on width of container being set in readData step 1 and width of particle being set in readData step 2. Step 1b depends on the random number being set in step 1a. Step 1c depends on height of container being set in readData step 1 and height of particle being set in readData step 2. Step 1d depends on the random number being set in step 1c. pickDirections: Step 1 depends on number of particles being set in readData step 2. Step 1a depends on the state of the particle being set, which is not done anywhere initially (this is an error in the algorithm), but is done in step 1a3, step 1b of moveParticles, or steps 1a1b or 1a2 of checkCollisions. Step 1a1 has no dependencies but is only executed if step 1a is true. Step 1a2 depends on the random number being set in step 1a1. Step 1a3 depends on the return value of tryMove in step 1a2. tryMove: Step 1 depends on the direction and the particle's x and y positions being set. Step 2 depends on the direction, the particle's x and y positions, and the x and y positions of all the other particles being set. Also, if step 1 returned false, this step will not be executed. Step 3 depends on steps 1 and 2 not returning false. moveParticles: Step 1 depends on the number of particles being set in readData step 2. Step 1a depends on the state of the particle being set in step 1a3 of pickDirections, step 1b, step 1a1b of checkCollisions, or step 1a2 of checkCollisions. Step 1a1 depends on the particle's direction being set in step 1a3 of pickDirections, step 1a1b of checkCollisions, or step 1a2 of checkCollisions. Step 1b depends on step 1a evaluating to false. checkCollisions: Step 1 depends on the number of particles being set in readData step 2. Step 1a depends on step 1. Step 1a1 depends on the x and y positions of the particles being set in the moveParticles function. Step 1a1a has no dependencies. Step 1a1b depends on the random number in step 1a1a and the percent change being set in readData step 4. Step 1a2 depends on the state of the particles being set in step 1a1b or the moveParticles function, as well as the x and y positions of the particles being set in the moveParticles function. checkPrecipitate: Step 1 depends on the y position of the particle being set by moveParticles step 1a1, and the height of the container being set in readData step 1. Step 2 depends on the particle being set and the number of particles being set in readData step 2. Step 2a depends on the state of the other particle being set in pickDirections step 1a3, moveParticles step 1b, checkCollisions step 1a1b, or checkCollisions step 1a2. It also depends on both particles' x and y positions being set in moveParticles. Step 3 is only called if steps 1 and 2 did not return true.