 	}
 }
 
-__global__ void wholeTriangle(REAL *right, REAL *left)
+__global__ void wholeDiamond(REAL *right, REAL *left)
 {
 
 	int base = THREADBLK + 2;

	//Wind it up!

	int itr = 2;
	int itr2 = height+2;

	__syncthreads();




	//Wind it down!
	for (int k = 0; k<height; k++)
	{
		// This tells you if the current row is the first or second.
		shft_wr = (k & 1);
		// Read and write are opposite rows.
		shft_rd = base*((shft_wr+1) & 1);
		//Block 0 is split so it needs a different algorithm.  This algorithm
		//is slightly different than top triangle as described in the note above.

		if (tid < (THREADBLK-k) && tid > k)
		{
			temper[tidp + ((THREADBLK+2)*shft_wr)] = fo * (temper[tid+shft_rd] + temper[tid+shft_rd+2]) + (1.f-2.f*fo) * temper[tidp+shft_rd];
		}
	}

	//Make sure the threads are synced
	__syncthreads();

	//Now thread 0 in each block (which never computes a value) is used to
	//fill the shared right and left arrays with the relevant values.
	//This grabs the top and bottom edges on the iteration when the top
	//row is written.
	if (shft_wr && tid < 4)
	{
		sL[k+itr+tid] = temper[(tid/2*(THREADBLK-1))+(tid-1)+k];
		sR[k+itr+tid] = temper[((tid+2)/2*(THREADBLK-1))+(tid&1)-k];
		itr += 2;
	}

	__syncthreads();

}

