 
   printf("trying kokkos cuda\n");
 
+
   //Warmpup
-  contractFieldFieldTensorKokkos<Kokkos::Cuda, cuda_input_view_t, cuda_output_view_t, cuda_input_host_t, cuda_output_host_t> 
+  contractFieldFieldTensorKokkos1D<Kokkos::Cuda, cuda_input_view_t,
+  cuda_output_view_t, cuda_input_host_t, cuda_output_host_t> 
     (cuda_hostOut, cuda_hostLeft, cuda_hostRight, cuda_kokkosOut,
-     cuda_kokkosLeft, cuda_kokkosRight);
+     cuda_kokkosLeft, cuda_kokkosRight, c, l, r, p, d1, d2);
   clock_gettime(CLOCK_MONOTONIC, &tic);
 
   //repeat the calculation 5 times so we can average out some randomness
   for(int i = 0; i < 5; ++i){
-    contractFieldFieldTensorKokkos<Kokkos::Cuda, cuda_input_view_t, cuda_output_view_t, cuda_input_host_t, cuda_output_host_t> 
+    contractFieldFieldTensorKokkos1D<Kokkos::Cuda, cuda_input_view_t, cuda_output_view_t, cuda_input_host_t, cuda_output_host_t> 
       (cuda_hostOut, cuda_hostLeft, cuda_hostRight, cuda_kokkosOut,
-       cuda_kokkosLeft, cuda_kokkosRight);
+       cuda_kokkosLeft, cuda_kokkosRight, c, l, r, p, d1, d2);
   }
 
   clock_gettime(CLOCK_MONOTONIC, &toc);


  printf("trying kokkos openmp\n");

  //Warmpup
  contractFieldFieldTensorKokkos<Kokkos::OpenMP, omp_input_view_t, omp_output_view_t, omp_input_host_t, omp_output_host_t> 
    (omp_hostOut, omp_hostLeft, omp_hostRight, omp_kokkosOut,

      }
    }
  }
  #endif

  contractFieldFieldTensorKokkos1D<Kokkos::OpenMP, omp_input_view_t,
  omp_output_view_t, omp_input_host_t, omp_output_host_t>(omp_hostOut, omp_hostLeft, omp_hostRight, omp_kokkosOut,
     omp_kokkosLeft,omp_kokkosRight, c, l, r, p, d1, d2); clock_gettime(CLOCK_MONOTONIC, &tic);

  //repeat the calculation 5 times so we can average out some randomness
  for(int i = 0; i < 5; ++i){
    contractFieldFieldTensorKokkos1D<Kokkos::OpenMP, omp_input_view_t, omp_output_view_t, omp_input_host_t, omp_output_host_t> 
      (omp_hostOut, omp_hostLeft, omp_hostRight, omp_kokkosOut, omp_kokkosLeft,
       omp_kokkosRight, c, l, r, p, d1, d2);
  }

  clock_gettime(CLOCK_MONOTONIC, &toc);
  const double elapsedTime_kokkos = getElapsedTime(tic, toc);

  // Copy out from kokkos output view (NOT timing this)
  for (int cl = 0; cl < c; ++cl) {
    for (int lbf = 0; lbf < l; ++lbf) {
      for (int rbf = 0; rbf < r; ++rbf) {
        out1_c_l_r(cl, lbf, rbf) = omp_hostOut(lbf*r*c + rbf*c + cl);
      }
    }
  }





  rst::subtract(&out1_c_l_r[0], &out2_c_l_r[0], out2_c_l_r.size());
