This model simulates wave-like motion on the surface of a pond 
when it is hit by drops of water.  Drops can be released anywhere
above the pond and can different amounts of impact.  The actual
mechanism of wave motion on the surface of a fluid is different
from this simulation, which is more akin to widghts being dropped
on an elastic canvas.  Nontheless, many interesting aspects of
waves are captured by the model.

SETUP initializes the model and GO propagates waves in the water.  
RELEASE-DROP causes a drop of water to be released above the pond.

The DROP-XPOS and DROP-YPOS sliders set the x and y coordinates, 
respectively, of where the drop is released from.  Positive numbers 
for drop-xpos cause the drop to fall further to the right and 
positive numbers for drop-ypos causes it to fall higher up on the 

The FRICTION slider controls the amount of force that pulls the 
water particles back towards ground level, dampening waves.  
SURFACE-TN controls how much effect the neighbors of a water 
particle exert on it vertically.  The greater the surface tension, 
the slower waves travel through the water.  This is implemented 
in the model as a weight coefficient on the difference in height 
between a turtle and its neighbors.  The resulting weighted value 
is added to the turtles current vertical velocity (represented 
by the incremental value dz) and its current position to determine 
its next position.  To now translate the earlier statement, the 
greater the surface tension, the more a particle's neighbors can 
pull it towards them, thus quickening the pace of a wave through the surface.

The IMPACT slider determines how much force a drop carries.  
Drops with greater impact cause larger waves.

The 3D switch allows you to view the pond either from above or 
from an angle set by ANGLE.

Click the SETUP button to set up the pond, then GO to enable motion 
in the water.  Periodically press RELEASE-DROP with different 
DROP-XPOS and DROP-YPOS values to release raindrops and initiate waves.

The pond is made up of a grid of turtles, each of whom, like in 
Wave Machine, behaves like it is connected to its neighbors by 
springs.  Each turtle has a vertical position and velocity, which 
determine how high above the sides of the pond it is or how far 
below, and how much that distance will change at the next time step.   

When drops are released they decrease the vertical velocity of the 
particles under them, causing them to move downwards.  As they fall, 
they pull down their neighbors, who at the same time pull them up.  
This exchange creates a wave within the pond, centered on where the 
drop fell.

As the waves hit the walls, they are reflected back towards the 
middle, as the walls don't move up or down.  Friction causes the 
waves to eventually decline by pulling them closer to the surface 

Try creating multiple drops in the pool to see how they interact.  
Do they cancel each other out or reinforce each other?  

Change the surface tension to see how it affects the speed of 
waves.  Why does water with low surface tension move so slowly?  
What sort of liquids in real life is it similar to?

Set friction to 100 and release some drops.  Do the waves ever 
dissipate?  How can the waves rise above the sides of the pond 
(have positive zpos's) when only downward moving forces are 
exerted on them?  How is a turtle's movement similar to that of 
a spring.  Is the friction used in this model analogous to that 
in a spring?   

This model doesn't take into account water pressure.  When part 
of the water is pushed down on the impact of a drop, the rest of 
the water should feel a push from beneath.  Try adding in this 

The walls in this model don't affect waves at all.  Extend the 
model so that the walls impose friction on waves that brush against 
them, causing them to dampen.

In order to create the visual impression of a wave, it was necessary 
for water above the sides of the pond (above water level) to appear 
more white, while water below would appear more blue.  This was 
accomplished using the "scale-color" primitive, which takes a color 
to assign, a variable, and a minimum and maximum value.  It works 
by comparing the value of the variable for each turtle to the two 
values, and the closer it is to the maximum, the lighter the shade 
of the color assigned to that turtle.

Water particles that fly off the top or bottom of the screen are 
ignored in the model, which is done by using the commands hide-turtle 
(ht) and show-turtles (st).  Hide turtle doesn't cause the turtle 
to die or change in any way, but merely stops it from being drawn 
on the screen.  Show turtle causes it to begin being displayed again. 

For another model that demonstrates how turtles behave as a surface, 
see Wave Machine.  In it, turtles are connected in the same manner 
as outlined above, but their movement is governed by the regular 
sinusoidal motion of part of the surface.