 
   printf("trying kokkos openmp\n");
 
+
+  #if 0
   //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,

  }

  std::cout << "cuda kokkos no-copy speedup of " << elapsedTime_serial/elapsedTime_kokkos_noCopyCuda << std::endl;
  Kokkos::finalize();

  return 0;
}

  }
};




template<class DeviceType, class LeftViewType, class RightViewType, class OutputViewType>
struct ContractFieldFieldTensorFunctor1D {
  typedef DeviceType device_type;
  LeftViewType _leftFields;
  RightViewType _rightFields;
  OutputViewType _outputFields;
  int _numLeftFields;
  int _numRightFields;
  int _numPoints;
  int _dim1Tensor;
  int _dim2Tensor;
  int _numCells;

  ContractFieldFieldTensorFunctor1D(LeftViewType leftFields,
				  RightViewType rightFields,
				  OutputViewType outputFields,
				  int numLeftFields,
				  int numRightFields,
				  int numPoints,
				  int dim1Tensor,
				  int dim2Tensor,
				  int numCells) :
    _leftFields(leftFields),
    _rightFields(rightFields),
    _outputFields(outputFields),
    _numLeftFields(numLeftFields),
    _numRightFields(numRightFields),
    _numPoints(numPoints),
    _dim1Tensor(dim1Tensor),
    _dim2Tensor(dim2Tensor),
    _numCells(numCells)
  {
    // Nothing to do
  }

  KOKKOS_INLINE_FUNCTION
  void operator()(const unsigned int elementIndex) const {

    for (int lbf = 0; lbf < _numLeftFields; lbf++) {
      for (int rbf = 0; rbf < _numRightFields; rbf++) {
        double tmpVal = 0;
        for (int qp = 0; qp < _numPoints; qp++) {
          for (int iTens1 = 0; iTens1 < _dim1Tensor; iTens1++) {
            for (int iTens2 = 0; iTens2 < _dim2Tensor; iTens2++) {
              tmpVal +=
	      _leftFields(lbf*_numPoints*_dim1Tensor*_dim2Tensor*_numCells +
	      qp*_dim1Tensor*_dim2Tensor*_numCells +
	      iTens1*_dim2Tensor*_numCells + iTens2*_numCells + elementIndex)
	      *_rightFields(rbf*_numPoints*_dim1Tensor*_dim2Tensor*_numCells +
	      qp*_dim1Tensor*_dim2Tensor*_numCells +
	      iTens1*_dim2Tensor*_numCells + iTens2*_numCells + elementIndex);
            } // D2-loop
          } // D1-loop
        } // P-loop
        _outputFields(lbf*_numRightFields*_numCells +
	rbf*_numCells + elementIndex) = tmpVal;
      } // R-loop
    } // L-loop
  }
};





// Serial contractFieldFieldTensor.  Contracts FieldContainers of doubles.
void contractFieldFieldTensorSerial(FieldContainer<double> &  outputFields,
			      const FieldContainer<double> &              leftFields,
