Thanks! There are basically two position arrays for each point, a current position and an old/previous position. The integration uses these when calculating new position each frame.
I initialise them with a few random offsets in one array so that the difference sets off the motion. (If they are the same then there is no motion outside of the force applied, in this case gravity.)
There is also an array of constraints which specifies either exact or minimum distances between points.