@@ -619,7 +619,9 @@ void polympo_setMeshOnSurfDispIncr_f(MPMesh_ptr p_mpmesh, const int nComps, cons
619619 // check mpMesh is valid
620620 checkMPMeshValid (p_mpmesh);
621621 auto p_mesh = ((polyMPO::MPMesh*)p_mpmesh)->p_mesh ;
622- kkViewHostU<const double *[vec2d_nEntries]> arrayHost (array,nVertices);
622+ kkViewHostU<const double **> arrayHost (array,nComps,nVertices);
623+ Kokkos::View<double **> array_d (" meshDispIncrDevice" ,nComps,nVertices);
624+ Kokkos::deep_copy (array_d, arrayHost);
623625
624626 auto vtxField = p_mesh->getMeshField <polyMPO::MeshF_OnSurfDispIncr>();
625627
@@ -628,14 +630,18 @@ void polympo_setMeshOnSurfDispIncr_f(MPMesh_ptr p_mpmesh, const int nComps, cons
628630 PMT_ALWAYS_ASSERT (static_cast <size_t >(nVertices*vec2d_nEntries)==vtxField.size ());
629631
630632 // copy the host array to the device
631- Kokkos::deep_copy (vtxField,arrayHost);
633+ Kokkos::parallel_for (" set mesh dispIncr" , nVertices, KOKKOS_LAMBDA (const int iVtx){
634+ vtxField (iVtx,0 ) = array_d (0 ,iVtx);
635+ vtxField (iVtx,1 ) = array_d (1 ,iVtx);
636+ });
632637}
633638
634639void polympo_getMeshOnSurfDispIncr_f (MPMesh_ptr p_mpmesh, const int nComps, const int nVertices, double * array) {
635640 // check mpMesh is valid
636641 checkMPMeshValid (p_mpmesh);
637642 auto p_mesh = ((polyMPO::MPMesh*)p_mpmesh)->p_mesh ;
638- kkVec2dViewHostU arrayHost (array,nVertices);
643+ kkDbl2dViewHostU arrayHost (array,nComps,nVertices);
644+ Kokkos::View<double **> array_d (" meshDispIncrDevice" ,nComps,nVertices);
639645
640646 auto vtxField = p_mesh->getMeshField <polyMPO::MeshF_OnSurfDispIncr>();
641647
@@ -645,7 +651,11 @@ void polympo_getMeshOnSurfDispIncr_f(MPMesh_ptr p_mpmesh, const int nComps, cons
645651 PMT_ALWAYS_ASSERT (static_cast <size_t >(nVertices*vec2d_nEntries)==vtxField.size ());
646652
647653 // copy the device array to the host
648- Kokkos::deep_copy (arrayHost, vtxField);
654+ Kokkos::parallel_for (" get mesh dispIncr" , nVertices, KOKKOS_LAMBDA (const int iVtx){
655+ array_d (0 ,iVtx) = vtxField (iVtx,0 );
656+ array_d (1 ,iVtx) = vtxField (iVtx,1 );
657+ });
658+ Kokkos::deep_copy (arrayHost, array_d);
649659}
650660
651661void polympo_push_f (MPMesh_ptr p_mpmesh){
0 commit comments