Modeling Approach
To start out, I created a rectangular grid of points to serve as the base of each cylinder. Then, I made a top grid directly over the base grid, but slightly higher (controlled by a z-value slider). Next, I created a pebble location to serve as the attractor point.
Once these three elements were created, I calculated the cylinder height. To do this, I calculated the distance from each point on the base grid to the pebble. Then, I input this distance (times a frequency multiplier) into the sine function. Next, I multiplied the sine function output by an amplification factor and divided this product by a value dependent on the distance calculated earlier. This caused the ripples to diminish as the wave got farther away from the pebble. Lastly, I added a base offset to the sine wave to ensure each cylinder had a height greater than zero.
Then, I applied this sine wave to the top grid height using the Geometry.Translate function. After that, I created cylinders in Dynamo using the Cylinder.ByPointsRadius function. Lastly, I created matching cylinders in Revit using the FamilyInstance.ByPoint function.