#include <math.h>
inline
plane_down(elim_eqn, ivar, idim, old_plane, new_plane)
float elim_eqn[], old_plane[], new_plane[];
int ivar, idim;
{
	register float crit;
 	register int i;

	crit = old_plane[ivar]/elim_eqn[ivar];
	for(i=0; i<ivar; i++)  {
		new_plane[i] = old_plane[i] - elim_eqn[i]*crit;
	}
	for(i=ivar+1; i<=idim; i++)  {
		new_plane[i-1] = old_plane[i] - elim_eqn[i]*crit;
	}
/* the following is an experiment in loop unraveling
	switch(ivar) {
		case 3:
			new_plane[2] = old_plane[2] - elim_eqn[2]*crit;
		case 2:
			new_plane[1] = old_plane[1] - elim_eqn[1]*crit;
		case 1:
			new_plane[0] = old_plane[0] - elim_eqn[0]*crit;
	}
	switch(idim) {
		case 3:
			switch(ivar) {
			case 0:
				new_plane[0] = old_plane[1] - elim_eqn[1]*crit;
			case 1:
				new_plane[1] = old_plane[2] - elim_eqn[2]*crit;
			case 2:
				new_plane[2] = old_plane[3] - elim_eqn[3]*crit;
			}
			break;
		case 2:
			switch(ivar) {
			case 0:
				new_plane[0] = old_plane[1] - elim_eqn[1]*crit;
			case 1:
				new_plane[1] = old_plane[2] - elim_eqn[2]*crit;
			}
			break;
		case 1:
			switch(ivar) {
			case 0:
				new_plane[0] = old_plane[1] - elim_eqn[1]*crit;
			}
	}
*/
}
