Heres the closest I can get to what I think your trying to achieve.
I cant help with the array values themselves, as I dont inderstand what you are doing.
(look at the time-stamp on this post and you'll understand that laugh )
But it think its those calculations that is cancelling out every second vertex.
I tested this by adding in a random value so I THINK Im right.

Take a look and see how its going.
Im looking forward to your reply with interest...
This is an interesting topic.

Code:
#include <acknex.h>
#include <default.c>

var dest[20][20];
var source[20][20];
var tempv;

ENTITY* waterent;

PANEL* skeletonpan =
{
  	pos_x = 0;		pos_y = 0;
	digits( 0,  0, "nexus: %f", "Arial#18b", 1, nexus);
	digits( 0, 20, "tempv: %f", "Arial#18b", 1, tempv);
  	flags =  VISIBLE;
}


function main()
{
	video_mode = 10;
	video_screen = 1;
	level_load("");
	vec_set(camera.x,   vector(0,50,50));
	vec_set(camera.pan, vector(270,-45,0));
	waterent = ent_create("waterent.hmp",nullvector,NULL);



	var iloop=0, eloop=0;
	CONTACT* c;
	//
	// Initialise arrays
	for(iloop=0; iloop<20; iloop++)
	{
		for(eloop=0; eloop<20; eloop++)
		{
			dest[iloop][eloop] 	 = 0;
			source[iloop][eloop] = 0;
		}
	}
	//
	//
	while(1)
	{

		for(iloop=1; iloop<18; iloop++)
		{
			for(eloop=1; eloop<18; eloop++)
			{
				//perform simulation
				dest[iloop+1][eloop+1] = ((source[iloop-1+1][eloop+1]+source[iloop+1+1][eloop+1]+source[iloop+1][eloop-1+1]+source[iloop+1][eloop+1+1])/2)-dest[iloop+1][eloop+1];
				dest[iloop+1][eloop+1] *= 0.95;
				vec_to_mesh(vector(0,0,dest[iloop+1][eloop+1]), waterent, iloop*20+eloop+1);
				//debugging
				tempv = source[iloop+1][eloop+1];
			}
		}
		for(iloop=1; iloop<18; iloop++)
		{
			for(eloop=1; eloop<18; eloop++)
			{
				//perform simulation
				source[iloop+1][eloop+1] = ((dest[iloop-1+1][eloop+1]+dest[iloop+1+1][eloop+1]+dest[iloop+1][eloop-1+1]+dest[iloop+1][eloop+1+1])/2)-source[iloop+1][eloop+1];
				source[iloop+1][eloop+1] *= 0.95;
				vec_to_mesh (vector(0,0,source[iloop][eloop]), waterent, iloop*20+eloop+1);
				//debugging
				//tempv = source[iloop+1][eloop+1];
			}
		}


		//
		if(key_cuu)
		{
			source[10][10]+=30;
			while(key_cuu)wait(1);
		}
		wait(1);
	}
}




"There is no fate but what WE make." - CEO Cyberdyne Systems Corp.
A8.30.5 Commercial