 		rec_deriv = diff * dor;
 	}
     
-    shared float energies[32];
-	shared float3 derivs[32];
-	float this_e = block_sum<float>(energies, rec_energy);
-	float3 deriv = block_sum<float3>(derivs, rec_deriv);
+	float this_e = block_sum<float>(rec_energy);
+	float3 deriv = block_sum<float3>(rec_deriv);
 	if (threadIdx.x == 0)
 	{
 		curl(this_e, (float *) &deriv, v);


	if (nfull_blocks)
		interaction_energy<0>
            <<<dim3(nlig_atoms, nfull_blocks), THREADS_PER_BLOCK, 1>>>
            (*info, 0, slope, v);
	if (nthreads_remain) 
		interaction_energy<1>


global void reduce_energy(force_energy_tup *result) {
	int l = threadIdx.x;
	float e = block_sum<float>(result[l].energy);
	if ( l == 0 ) {
		result[0].energy = e;
	}	
