@@ -354,18 +354,19 @@ namespace Portable
354354 ApplyKernel (
355355 Functor func,
356356 const typename MatrixFree<dim, Number>::PrecomputedData gpu_data,
357- Number *const src,
358- Number *dst)
357+ const LinearAlgebra::distributed::Vector<Number, MemorySpace::Default>
358+ &src,
359+ LinearAlgebra::distributed::Vector<Number, MemorySpace::Default> &dst)
359360 : func(func)
360361 , gpu_data(gpu_data)
361- , src(src)
362- , dst(dst)
362+ , src(src.get_values(), src.locally_owned_size() )
363+ , dst(dst.get_values(), dst.locally_owned_size() )
363364 {}
364365
365366 Functor func;
366367 const typename MatrixFree<dim, Number>::PrecomputedData gpu_data;
367- Number * const src;
368- Number * dst;
368+ const DeviceVector<Number> src;
369+ DeviceVector< Number> dst;
369370
370371
371372 // Provide the shared memory capacity. This function takes the team_size
@@ -404,7 +405,8 @@ namespace Portable
404405 &gpu_data,
405406 &shared_data};
406407
407- func (&data, src, dst);
408+ DeviceVector<Number> nonconstdst = dst;
409+ func (&data, src, nonconstdst);
408410 }
409411 };
410412 } // namespace internal
@@ -1017,7 +1019,7 @@ namespace Portable
10171019 Kokkos::AUTO);
10181020
10191021 internal::ApplyKernel<dim, Number, Functor> apply_kernel (
1020- func, get_data (color), src. get_values () , dst. get_values () );
1022+ func, get_data (color), src, dst);
10211023
10221024 Kokkos::parallel_for (" dealii::MatrixFree::serial_cell_loop" ,
10231025 team_policy,
@@ -1062,7 +1064,7 @@ namespace Portable
10621064 Kokkos::AUTO);
10631065
10641066 internal::ApplyKernel<dim, Number, Functor> apply_kernel (
1065- func, get_data (0 ), src. get_values () , dst. get_values () );
1067+ func, get_data (0 ), src, dst);
10661068
10671069 Kokkos::parallel_for (
10681070 " dealii::MatrixFree::distributed_cell_loop_0" ,
@@ -1085,7 +1087,7 @@ namespace Portable
10851087 Kokkos::AUTO);
10861088
10871089 internal::ApplyKernel<dim, Number, Functor> apply_kernel (
1088- func, get_data (1 ), src. get_values () , dst. get_values () );
1090+ func, get_data (1 ), src, dst);
10891091
10901092 Kokkos::parallel_for (
10911093 " dealii::MatrixFree::distributed_cell_loop_1" ,
@@ -1113,7 +1115,7 @@ namespace Portable
11131115 Kokkos::AUTO);
11141116
11151117 internal::ApplyKernel<dim, Number, Functor> apply_kernel (
1116- func, get_data (2 ), src. get_values () , dst. get_values () );
1118+ func, get_data (2 ), src, dst);
11171119
11181120 Kokkos::parallel_for (
11191121 " dealii::MatrixFree::distributed_cell_loop_2" ,
@@ -1146,7 +1148,7 @@ namespace Portable
11461148 Kokkos::AUTO);
11471149
11481150 internal::ApplyKernel<dim, Number, Functor> apply_kernel (
1149- func, get_data (i), src. get_values () , dst. get_values () );
1151+ func, get_data (i), src, dst);
11501152
11511153 Kokkos::parallel_for (
11521154 " dealii::MatrixFree::distributed_cell_loop_" +
@@ -1183,10 +1185,7 @@ namespace Portable
11831185 Kokkos::AUTO);
11841186
11851187 internal::ApplyKernel<dim, Number, Functor> apply_kernel (
1186- func,
1187- get_data (i),
1188- ghosted_src.get_values (),
1189- ghosted_dst.get_values ());
1188+ func, get_data (i), ghosted_src, ghosted_dst);
11901189
11911190 Kokkos::parallel_for (
11921191 " dealii::MatrixFree::distributed_cell_loop_" +
0 commit comments