1c6583b63SJunchao Zhang #include <petscdmda_kokkos.hpp> 2e907feaaSJunchao Zhang #include <petsc/private/dmdaimpl.h> 3e907feaaSJunchao Zhang #include <petsc/private/kokkosimpl.hpp> 4c6583b63SJunchao Zhang 5ac09b921SBarry Smith /* SUBMANSEC = DMDA */ 6ac09b921SBarry Smith 7ac09b921SBarry Smith /* Use macro instead of inlined function to avoid annoying warnings like: 'dof' may be used uninitialized in this function [-Wmaybe-uninitialized] */ 8c6583b63SJunchao Zhang #define DMDA_VEC_GET_SHAPE(da, vec, xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof) \ 9c6583b63SJunchao Zhang do { \ 109566063dSJacob Faibussowitsch PetscCall(DMDAGetCorners(da, &xs, &ys, &zs, &xm, &ym, &zm)); \ 119566063dSJacob Faibussowitsch PetscCall(DMDAGetGhostCorners(da, &gxs, &gys, &gzs, &gxm, &gym, &gzm)); \ 129566063dSJacob Faibussowitsch PetscCall(DMDAGetInfo(da, &dim, NULL, NULL, NULL, NULL, NULL, NULL, &dof, NULL, NULL, NULL, NULL, NULL)); \ 13c6583b63SJunchao Zhang /* Handle case where user passes in global vector as opposed to local */ \ 149566063dSJacob Faibussowitsch PetscCall(VecGetLocalSize(vec, &N)); \ 15c6583b63SJunchao Zhang if (N == xm * ym * zm * dof) { \ 169371c9d4SSatish Balay gxm = xm; \ 179371c9d4SSatish Balay gym = ym; \ 189371c9d4SSatish Balay gzm = zm; \ 199371c9d4SSatish Balay gxs = xs; \ 209371c9d4SSatish Balay gys = ys; \ 219371c9d4SSatish Balay gzs = zs; \ 2263a3b9bcSJacob Faibussowitsch } else PetscCheck(N == gxm * gym * gzm * dof, PETSC_COMM_SELF, PETSC_ERR_ARG_INCOMP, "Vector local size %" PetscInt_FMT " is not compatible with DMDA local sizes %" PetscInt_FMT " %" PetscInt_FMT, N, xm * ym * zm * dof, gxm * gym * gzm * dof); \ 23c6583b63SJunchao Zhang } while (0) 24c6583b63SJunchao Zhang 259dc7b89cSJunchao Zhang /* -------------------- 1D ---------------- */ 26c6583b63SJunchao Zhang template <class MemorySpace> 27d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecGetKokkosOffsetView_Private(DM da, Vec vec, PetscScalarKokkosOffsetView1DType<MemorySpace> *ov, PetscBool overwrite) 28d71ae5a4SJacob Faibussowitsch { 29c6583b63SJunchao Zhang PetscInt xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof; 30c6583b63SJunchao Zhang PetscScalarKokkosViewType<MemorySpace> kv; 31c6583b63SJunchao Zhang 32c6583b63SJunchao Zhang PetscFunctionBegin; 33c6583b63SJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 34c6583b63SJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 354f572ea9SToby Isaac PetscAssertPointer(ov, 3); 36c6583b63SJunchao Zhang DMDA_VEC_GET_SHAPE(da, vec, xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof); 379dc7b89cSJunchao Zhang PetscCheck(dim == 1, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, "KokkosOffsetView is 1D but DMDA is %dD", (int)dim); 389566063dSJacob Faibussowitsch if (overwrite) PetscCall(VecGetKokkosViewWrite(vec, &kv)); 399566063dSJacob Faibussowitsch else PetscCall(VecGetKokkosView(vec, &kv)); 409dc7b89cSJunchao Zhang /* Construct the unmanaged OffsetView with {begin0,begin1,begins2},{end0,end1,end2} */ 419dc7b89cSJunchao Zhang *ov = PetscScalarKokkosOffsetView1DType<MemorySpace>(kv.data(), {gxs * dof}, {(gxs + gxm) * dof}); 423ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 43c6583b63SJunchao Zhang } 44c6583b63SJunchao Zhang 45c6583b63SJunchao Zhang template <class MemorySpace> 46d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecRestoreKokkosOffsetView_Private(DM da, Vec vec, PetscScalarKokkosOffsetView1DType<MemorySpace> *ov, PetscBool overwrite) 47d71ae5a4SJacob Faibussowitsch { 48c6583b63SJunchao Zhang PetscScalarKokkosViewType<MemorySpace> kv; 49c6583b63SJunchao Zhang 50c6583b63SJunchao Zhang PetscFunctionBegin; 51c6583b63SJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 52c6583b63SJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 534f572ea9SToby Isaac PetscAssertPointer(ov, 3); 54c6583b63SJunchao Zhang kv = ov->view(); /* OffsetView to View */ 559566063dSJacob Faibussowitsch if (overwrite) PetscCall(VecRestoreKokkosViewWrite(vec, &kv)); 569566063dSJacob Faibussowitsch else PetscCall(VecRestoreKokkosView(vec, &kv)); 573ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 58c6583b63SJunchao Zhang } 59c6583b63SJunchao Zhang 60c6583b63SJunchao Zhang template <class MemorySpace> 61d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecGetKokkosOffsetView(DM da, Vec vec, ConstPetscScalarKokkosOffsetView1DType<MemorySpace> *ov) 62d71ae5a4SJacob Faibussowitsch { 63c6583b63SJunchao Zhang PetscInt xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof; 64c6583b63SJunchao Zhang ConstPetscScalarKokkosViewType<MemorySpace> kv; 65c6583b63SJunchao Zhang 66c6583b63SJunchao Zhang PetscFunctionBegin; 67c6583b63SJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 68c6583b63SJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 694f572ea9SToby Isaac PetscAssertPointer(ov, 3); 70c6583b63SJunchao Zhang DMDA_VEC_GET_SHAPE(da, vec, xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof); 719dc7b89cSJunchao Zhang PetscCheck(dim == 1, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, "KokkosOffsetView is 1D but DMDA is %dD", (int)dim); 729566063dSJacob Faibussowitsch PetscCall(VecGetKokkosView(vec, &kv)); 739dc7b89cSJunchao Zhang *ov = ConstPetscScalarKokkosOffsetView1DType<MemorySpace>(kv.data(), {gxs * dof}, {(gxs + gxm) * dof}); 743ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 75c6583b63SJunchao Zhang } 76c6583b63SJunchao Zhang 77c6583b63SJunchao Zhang template <class MemorySpace> 78d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecRestoreKokkosOffsetView(DM da, Vec vec, ConstPetscScalarKokkosOffsetView1DType<MemorySpace> *ov) 79d71ae5a4SJacob Faibussowitsch { 80c6583b63SJunchao Zhang ConstPetscScalarKokkosViewType<MemorySpace> kv; 81c6583b63SJunchao Zhang 82c6583b63SJunchao Zhang PetscFunctionBegin; 83c6583b63SJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 84c6583b63SJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 854f572ea9SToby Isaac PetscAssertPointer(ov, 3); 86c6583b63SJunchao Zhang kv = ov->view(); 879566063dSJacob Faibussowitsch PetscCall(VecRestoreKokkosView(vec, &kv)); 883ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 89c6583b63SJunchao Zhang } 90c6583b63SJunchao Zhang 919dc7b89cSJunchao Zhang /* ============================== 2D ================================= */ 92c6583b63SJunchao Zhang template <class MemorySpace> 93d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecGetKokkosOffsetView_Private(DM da, Vec vec, PetscScalarKokkosOffsetView2DType<MemorySpace> *ov, PetscBool overwrite) 94d71ae5a4SJacob Faibussowitsch { 95c6583b63SJunchao Zhang PetscInt xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof; 96c6583b63SJunchao Zhang PetscScalarKokkosViewType<MemorySpace> kv; 97c6583b63SJunchao Zhang 98c6583b63SJunchao Zhang PetscFunctionBegin; 99c6583b63SJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 100c6583b63SJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 1014f572ea9SToby Isaac PetscAssertPointer(ov, 3); 102c6583b63SJunchao Zhang DMDA_VEC_GET_SHAPE(da, vec, xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof); 1039dc7b89cSJunchao Zhang PetscCheck(dim == 2, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, "KokkosOffsetView is 2D but DMDA is %dD", (int)dim); 1049566063dSJacob Faibussowitsch if (overwrite) PetscCall(VecGetKokkosViewWrite(vec, &kv)); 1059566063dSJacob Faibussowitsch else PetscCall(VecGetKokkosView(vec, &kv)); 1069dc7b89cSJunchao Zhang *ov = PetscScalarKokkosOffsetView2DType<MemorySpace>(kv.data(), {gys * dof, gxs * dof}, {(gys + gym) * dof, (gxs + gxm) * dof}); 1073ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 108c6583b63SJunchao Zhang } 109c6583b63SJunchao Zhang 110c6583b63SJunchao Zhang template <class MemorySpace> 111d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecRestoreKokkosOffsetView_Private(DM da, Vec vec, PetscScalarKokkosOffsetView2DType<MemorySpace> *ov, PetscBool overwrite) 112d71ae5a4SJacob Faibussowitsch { 113c6583b63SJunchao Zhang PetscScalarKokkosViewType<MemorySpace> kv; 114c6583b63SJunchao Zhang 115c6583b63SJunchao Zhang PetscFunctionBegin; 116c6583b63SJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 117c6583b63SJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 1184f572ea9SToby Isaac PetscAssertPointer(ov, 3); 119c6583b63SJunchao Zhang // kv = ov->view(); /* 2D OffsetView => 2D View => 1D View. Why does it not work? */ 120c6583b63SJunchao Zhang kv = PetscScalarKokkosViewType<MemorySpace>(ov->data(), ov->extent(0) * ov->extent(1)); 1219566063dSJacob Faibussowitsch if (overwrite) PetscCall(VecRestoreKokkosViewWrite(vec, &kv)); 1229566063dSJacob Faibussowitsch else PetscCall(VecRestoreKokkosView(vec, &kv)); 1233ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 124c6583b63SJunchao Zhang } 125c6583b63SJunchao Zhang 126c6583b63SJunchao Zhang template <class MemorySpace> 127d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecGetKokkosOffsetView(DM da, Vec vec, ConstPetscScalarKokkosOffsetView2DType<MemorySpace> *ov) 128d71ae5a4SJacob Faibussowitsch { 129c6583b63SJunchao Zhang PetscInt xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof; 130c6583b63SJunchao Zhang ConstPetscScalarKokkosViewType<MemorySpace> kv; 131c6583b63SJunchao Zhang 132c6583b63SJunchao Zhang PetscFunctionBegin; 133c6583b63SJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 134c6583b63SJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 1354f572ea9SToby Isaac PetscAssertPointer(ov, 3); 136c6583b63SJunchao Zhang DMDA_VEC_GET_SHAPE(da, vec, xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof); 1379dc7b89cSJunchao Zhang PetscCheck(dim == 2, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, "KokkosOffsetView is 2D but DMDA is %dD", (int)dim); 1389566063dSJacob Faibussowitsch PetscCall(VecGetKokkosView(vec, &kv)); 1399dc7b89cSJunchao Zhang *ov = ConstPetscScalarKokkosOffsetView2DType<MemorySpace>(kv.data(), {gys * dof, gxs * dof}, {(gys + gym) * dof, (gxs + gxm) * dof}); 1403ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 141c6583b63SJunchao Zhang } 142c6583b63SJunchao Zhang 143c6583b63SJunchao Zhang template <class MemorySpace> 144d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecRestoreKokkosOffsetView(DM da, Vec vec, ConstPetscScalarKokkosOffsetView2DType<MemorySpace> *ov) 145d71ae5a4SJacob Faibussowitsch { 146c6583b63SJunchao Zhang ConstPetscScalarKokkosViewType<MemorySpace> kv; 147c6583b63SJunchao Zhang 148c6583b63SJunchao Zhang PetscFunctionBegin; 149c6583b63SJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 150c6583b63SJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 1514f572ea9SToby Isaac PetscAssertPointer(ov, 3); 152c6583b63SJunchao Zhang kv = ConstPetscScalarKokkosViewType<MemorySpace>(ov->data(), ov->extent(0) * ov->extent(1)); 1539566063dSJacob Faibussowitsch PetscCall(VecRestoreKokkosView(vec, &kv)); 1543ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 155c6583b63SJunchao Zhang } 156c6583b63SJunchao Zhang 1579dc7b89cSJunchao Zhang /* ============================== 3D ================================= */ 1589dc7b89cSJunchao Zhang template <class MemorySpace> 159d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecGetKokkosOffsetView_Private(DM da, Vec vec, PetscScalarKokkosOffsetView3DType<MemorySpace> *ov, PetscBool overwrite) 160d71ae5a4SJacob Faibussowitsch { 1619dc7b89cSJunchao Zhang PetscInt xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof; 1629dc7b89cSJunchao Zhang PetscScalarKokkosViewType<MemorySpace> kv; 1639dc7b89cSJunchao Zhang 1649dc7b89cSJunchao Zhang PetscFunctionBegin; 1659dc7b89cSJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 1669dc7b89cSJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 1674f572ea9SToby Isaac PetscAssertPointer(ov, 3); 1689dc7b89cSJunchao Zhang DMDA_VEC_GET_SHAPE(da, vec, xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof); 1699dc7b89cSJunchao Zhang PetscCheck(dim == 3, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, "KokkosOffsetView is 3D but DMDA is %dD", (int)dim); 1709566063dSJacob Faibussowitsch if (overwrite) PetscCall(VecGetKokkosViewWrite(vec, &kv)); 1719566063dSJacob Faibussowitsch else PetscCall(VecGetKokkosView(vec, &kv)); 1729dc7b89cSJunchao Zhang *ov = PetscScalarKokkosOffsetView3DType<MemorySpace>(kv.data(), {gzs * dof, gys * dof, gxs * dof}, {(gzs + gzm) * dof, (gys + gym) * dof, (gxs + gxm) * dof}); 1733ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1749dc7b89cSJunchao Zhang } 1759dc7b89cSJunchao Zhang 1769dc7b89cSJunchao Zhang template <class MemorySpace> 177d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecRestoreKokkosOffsetView_Private(DM da, Vec vec, PetscScalarKokkosOffsetView3DType<MemorySpace> *ov, PetscBool overwrite) 178d71ae5a4SJacob Faibussowitsch { 1799dc7b89cSJunchao Zhang PetscScalarKokkosViewType<MemorySpace> kv; 1809dc7b89cSJunchao Zhang 1819dc7b89cSJunchao Zhang PetscFunctionBegin; 1829dc7b89cSJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 1839dc7b89cSJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 1844f572ea9SToby Isaac PetscAssertPointer(ov, 3); 1859dc7b89cSJunchao Zhang kv = PetscScalarKokkosViewType<MemorySpace>(ov->data(), ov->extent(0) * ov->extent(1) * ov->extent(2)); 1869566063dSJacob Faibussowitsch if (overwrite) PetscCall(VecRestoreKokkosViewWrite(vec, &kv)); 1879566063dSJacob Faibussowitsch else PetscCall(VecRestoreKokkosView(vec, &kv)); 1883ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1899dc7b89cSJunchao Zhang } 1909dc7b89cSJunchao Zhang 1919dc7b89cSJunchao Zhang template <class MemorySpace> 192d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecGetKokkosOffsetView(DM da, Vec vec, ConstPetscScalarKokkosOffsetView3DType<MemorySpace> *ov) 193d71ae5a4SJacob Faibussowitsch { 1949dc7b89cSJunchao Zhang PetscInt xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof; 1959dc7b89cSJunchao Zhang ConstPetscScalarKokkosViewType<MemorySpace> kv; 1969dc7b89cSJunchao Zhang 1979dc7b89cSJunchao Zhang PetscFunctionBegin; 1989dc7b89cSJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 1999dc7b89cSJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 2004f572ea9SToby Isaac PetscAssertPointer(ov, 3); 2019dc7b89cSJunchao Zhang DMDA_VEC_GET_SHAPE(da, vec, xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof); 2029dc7b89cSJunchao Zhang PetscCheck(dim == 3, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, "KokkosOffsetView is 3D but DMDA is %dD", (int)dim); 2039566063dSJacob Faibussowitsch PetscCall(VecGetKokkosView(vec, &kv)); 2049dc7b89cSJunchao Zhang *ov = ConstPetscScalarKokkosOffsetView3DType<MemorySpace>(kv.data(), {gzs * dof, gys * dof, gxs * dof}, {(gzs + gzm) * dof, (gys + gym) * dof, (gxs + gxm) * dof}); 2053ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 2069dc7b89cSJunchao Zhang } 2079dc7b89cSJunchao Zhang 2089dc7b89cSJunchao Zhang template <class MemorySpace> 209d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecRestoreKokkosOffsetView(DM da, Vec vec, ConstPetscScalarKokkosOffsetView3DType<MemorySpace> *ov) 210d71ae5a4SJacob Faibussowitsch { 2119dc7b89cSJunchao Zhang ConstPetscScalarKokkosViewType<MemorySpace> kv; 2129dc7b89cSJunchao Zhang 2139dc7b89cSJunchao Zhang PetscFunctionBegin; 2149dc7b89cSJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 2159dc7b89cSJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 2164f572ea9SToby Isaac PetscAssertPointer(ov, 3); 2179dc7b89cSJunchao Zhang kv = ConstPetscScalarKokkosViewType<MemorySpace>(ov->data(), ov->extent(0) * ov->extent(1) * ov->extent(2)); 2189566063dSJacob Faibussowitsch PetscCall(VecRestoreKokkosView(vec, &kv)); 2193ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 2209dc7b89cSJunchao Zhang } 2219dc7b89cSJunchao Zhang 222c6583b63SJunchao Zhang /* Function template explicit instantiation */ 223c6583b63SJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetView(DM, Vec, ConstPetscScalarKokkosOffsetView1D *); 224c6583b63SJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetView(DM, Vec, ConstPetscScalarKokkosOffsetView1D *); 2259371c9d4SSatish Balay template <> 226d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetView(DM da, Vec vec, PetscScalarKokkosOffsetView1D *ov) 227d71ae5a4SJacob Faibussowitsch { 2289371c9d4SSatish Balay return DMDAVecGetKokkosOffsetView_Private(da, vec, ov, PETSC_FALSE); 2299371c9d4SSatish Balay } 2309371c9d4SSatish Balay template <> 231d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetView(DM da, Vec vec, PetscScalarKokkosOffsetView1D *ov) 232d71ae5a4SJacob Faibussowitsch { 2339371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetView_Private(da, vec, ov, PETSC_FALSE); 2349371c9d4SSatish Balay } 2359371c9d4SSatish Balay template <> 236d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewWrite(DM da, Vec vec, PetscScalarKokkosOffsetView1D *ov) 237d71ae5a4SJacob Faibussowitsch { 2389371c9d4SSatish Balay return DMDAVecGetKokkosOffsetView_Private(da, vec, ov, PETSC_TRUE); 2399371c9d4SSatish Balay } 2409371c9d4SSatish Balay template <> 241d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewWrite(DM da, Vec vec, PetscScalarKokkosOffsetView1D *ov) 242d71ae5a4SJacob Faibussowitsch { 2439371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetView_Private(da, vec, ov, PETSC_TRUE); 2449371c9d4SSatish Balay } 245c6583b63SJunchao Zhang 246c6583b63SJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetView(DM, Vec, ConstPetscScalarKokkosOffsetView2D *); 247c6583b63SJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetView(DM, Vec, ConstPetscScalarKokkosOffsetView2D *); 2489371c9d4SSatish Balay template <> 249d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetView(DM da, Vec vec, PetscScalarKokkosOffsetView2D *ov) 250d71ae5a4SJacob Faibussowitsch { 2519371c9d4SSatish Balay return DMDAVecGetKokkosOffsetView_Private(da, vec, ov, PETSC_FALSE); 2529371c9d4SSatish Balay } 2539371c9d4SSatish Balay template <> 254d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetView(DM da, Vec vec, PetscScalarKokkosOffsetView2D *ov) 255d71ae5a4SJacob Faibussowitsch { 2569371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetView_Private(da, vec, ov, PETSC_FALSE); 2579371c9d4SSatish Balay } 2589371c9d4SSatish Balay template <> 259d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewWrite(DM da, Vec vec, PetscScalarKokkosOffsetView2D *ov) 260d71ae5a4SJacob Faibussowitsch { 2619371c9d4SSatish Balay return DMDAVecGetKokkosOffsetView_Private(da, vec, ov, PETSC_TRUE); 2629371c9d4SSatish Balay } 2639371c9d4SSatish Balay template <> 264d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewWrite(DM da, Vec vec, PetscScalarKokkosOffsetView2D *ov) 265d71ae5a4SJacob Faibussowitsch { 2669371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetView_Private(da, vec, ov, PETSC_TRUE); 2679371c9d4SSatish Balay } 268c6583b63SJunchao Zhang 2699dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetView(DM, Vec, ConstPetscScalarKokkosOffsetView3D *); 2709dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetView(DM, Vec, ConstPetscScalarKokkosOffsetView3D *); 2719371c9d4SSatish Balay template <> 272d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetView(DM da, Vec vec, PetscScalarKokkosOffsetView3D *ov) 273d71ae5a4SJacob Faibussowitsch { 2749371c9d4SSatish Balay return DMDAVecGetKokkosOffsetView_Private(da, vec, ov, PETSC_FALSE); 2759371c9d4SSatish Balay } 2769371c9d4SSatish Balay template <> 277d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetView(DM da, Vec vec, PetscScalarKokkosOffsetView3D *ov) 278d71ae5a4SJacob Faibussowitsch { 2799371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetView_Private(da, vec, ov, PETSC_FALSE); 2809371c9d4SSatish Balay } 2819371c9d4SSatish Balay template <> 282d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewWrite(DM da, Vec vec, PetscScalarKokkosOffsetView3D *ov) 283d71ae5a4SJacob Faibussowitsch { 2849371c9d4SSatish Balay return DMDAVecGetKokkosOffsetView_Private(da, vec, ov, PETSC_TRUE); 2859371c9d4SSatish Balay } 2869371c9d4SSatish Balay template <> 287d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewWrite(DM da, Vec vec, PetscScalarKokkosOffsetView3D *ov) 288d71ae5a4SJacob Faibussowitsch { 2899371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetView_Private(da, vec, ov, PETSC_TRUE); 2909371c9d4SSatish Balay } 2919dc7b89cSJunchao Zhang 292*45402d8aSJunchao Zhang #if !defined(KOKKOS_ENABLE_UNIFIED_MEMORY) /* Get host views if the default memory space is not host space */ 2939dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetView(DM, Vec, ConstPetscScalarKokkosOffsetView1DHost *); 2949dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetView(DM, Vec, ConstPetscScalarKokkosOffsetView1DHost *); 2959371c9d4SSatish Balay template <> 296d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetView(DM da, Vec vec, PetscScalarKokkosOffsetView1DHost *ov) 297d71ae5a4SJacob Faibussowitsch { 2989371c9d4SSatish Balay return DMDAVecGetKokkosOffsetView_Private(da, vec, ov, PETSC_FALSE); 2999371c9d4SSatish Balay } 3009371c9d4SSatish Balay template <> 301d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetView(DM da, Vec vec, PetscScalarKokkosOffsetView1DHost *ov) 302d71ae5a4SJacob Faibussowitsch { 3039371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetView_Private(da, vec, ov, PETSC_FALSE); 3049371c9d4SSatish Balay } 3059371c9d4SSatish Balay template <> 306d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewWrite(DM da, Vec vec, PetscScalarKokkosOffsetView1DHost *ov) 307d71ae5a4SJacob Faibussowitsch { 3089371c9d4SSatish Balay return DMDAVecGetKokkosOffsetView_Private(da, vec, ov, PETSC_TRUE); 3099371c9d4SSatish Balay } 3109371c9d4SSatish Balay template <> 311d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewWrite(DM da, Vec vec, PetscScalarKokkosOffsetView1DHost *ov) 312d71ae5a4SJacob Faibussowitsch { 3139371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetView_Private(da, vec, ov, PETSC_TRUE); 3149371c9d4SSatish Balay } 3159dc7b89cSJunchao Zhang 3169dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetView(DM, Vec, ConstPetscScalarKokkosOffsetView2DHost *); 3179dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetView(DM, Vec, ConstPetscScalarKokkosOffsetView2DHost *); 3189371c9d4SSatish Balay template <> 319d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetView(DM da, Vec vec, PetscScalarKokkosOffsetView2DHost *ov) 320d71ae5a4SJacob Faibussowitsch { 3219371c9d4SSatish Balay return DMDAVecGetKokkosOffsetView_Private(da, vec, ov, PETSC_FALSE); 3229371c9d4SSatish Balay } 3239371c9d4SSatish Balay template <> 324d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetView(DM da, Vec vec, PetscScalarKokkosOffsetView2DHost *ov) 325d71ae5a4SJacob Faibussowitsch { 3269371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetView_Private(da, vec, ov, PETSC_FALSE); 3279371c9d4SSatish Balay } 3289371c9d4SSatish Balay template <> 329d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewWrite(DM da, Vec vec, PetscScalarKokkosOffsetView2DHost *ov) 330d71ae5a4SJacob Faibussowitsch { 3319371c9d4SSatish Balay return DMDAVecGetKokkosOffsetView_Private(da, vec, ov, PETSC_TRUE); 3329371c9d4SSatish Balay } 3339371c9d4SSatish Balay template <> 334d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewWrite(DM da, Vec vec, PetscScalarKokkosOffsetView2DHost *ov) 335d71ae5a4SJacob Faibussowitsch { 3369371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetView_Private(da, vec, ov, PETSC_TRUE); 3379371c9d4SSatish Balay } 3389dc7b89cSJunchao Zhang 3399dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetView(DM, Vec, ConstPetscScalarKokkosOffsetView3DHost *); 3409dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetView(DM, Vec, ConstPetscScalarKokkosOffsetView3DHost *); 3419371c9d4SSatish Balay template <> 342d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetView(DM da, Vec vec, PetscScalarKokkosOffsetView3DHost *ov) 343d71ae5a4SJacob Faibussowitsch { 3449371c9d4SSatish Balay return DMDAVecGetKokkosOffsetView_Private(da, vec, ov, PETSC_FALSE); 3459371c9d4SSatish Balay } 3469371c9d4SSatish Balay template <> 347d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetView(DM da, Vec vec, PetscScalarKokkosOffsetView3DHost *ov) 348d71ae5a4SJacob Faibussowitsch { 3499371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetView_Private(da, vec, ov, PETSC_FALSE); 3509371c9d4SSatish Balay } 3519371c9d4SSatish Balay template <> 352d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewWrite(DM da, Vec vec, PetscScalarKokkosOffsetView3DHost *ov) 353d71ae5a4SJacob Faibussowitsch { 3549371c9d4SSatish Balay return DMDAVecGetKokkosOffsetView_Private(da, vec, ov, PETSC_TRUE); 3559371c9d4SSatish Balay } 3569371c9d4SSatish Balay template <> 357d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewWrite(DM da, Vec vec, PetscScalarKokkosOffsetView3DHost *ov) 358d71ae5a4SJacob Faibussowitsch { 3599371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetView_Private(da, vec, ov, PETSC_TRUE); 3609371c9d4SSatish Balay } 3619dc7b89cSJunchao Zhang #endif 3629dc7b89cSJunchao Zhang 3639dc7b89cSJunchao Zhang /* ============================== 2D including DOF ================================= */ 3649dc7b89cSJunchao Zhang template <class MemorySpace> 365d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecGetKokkosOffsetViewDOF_Private(DM da, Vec vec, PetscScalarKokkosOffsetView2DType<MemorySpace> *ov, PetscBool overwrite) 366d71ae5a4SJacob Faibussowitsch { 3679dc7b89cSJunchao Zhang PetscInt xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof; 3689dc7b89cSJunchao Zhang PetscScalarKokkosViewType<MemorySpace> kv; 3699dc7b89cSJunchao Zhang 3709dc7b89cSJunchao Zhang PetscFunctionBegin; 3719dc7b89cSJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 3729dc7b89cSJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 3734f572ea9SToby Isaac PetscAssertPointer(ov, 3); 3749dc7b89cSJunchao Zhang DMDA_VEC_GET_SHAPE(da, vec, xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof); 3759dc7b89cSJunchao Zhang PetscCheck(dim == 1, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, "KokkosOffsetView is 2D but DMDA is %dD", (int)dim); 3769566063dSJacob Faibussowitsch if (overwrite) PetscCall(VecGetKokkosViewWrite(vec, &kv)); 3779566063dSJacob Faibussowitsch else PetscCall(VecGetKokkosView(vec, &kv)); 3789dc7b89cSJunchao Zhang *ov = PetscScalarKokkosOffsetView2DType<MemorySpace>(kv.data(), {gxs, 0}, {gxs + gxm, dof}); 3793ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 3809dc7b89cSJunchao Zhang } 3819dc7b89cSJunchao Zhang 3829dc7b89cSJunchao Zhang template <class MemorySpace> 383d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF_Private(DM da, Vec vec, PetscScalarKokkosOffsetView2DType<MemorySpace> *ov, PetscBool overwrite) 384d71ae5a4SJacob Faibussowitsch { 3859dc7b89cSJunchao Zhang PetscScalarKokkosViewType<MemorySpace> kv; 3869dc7b89cSJunchao Zhang 3879dc7b89cSJunchao Zhang PetscFunctionBegin; 3889dc7b89cSJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 3899dc7b89cSJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 3904f572ea9SToby Isaac PetscAssertPointer(ov, 3); 3919dc7b89cSJunchao Zhang kv = PetscScalarKokkosViewType<MemorySpace>(ov->data(), ov->extent(0) * ov->extent(1)); 3929566063dSJacob Faibussowitsch if (overwrite) PetscCall(VecRestoreKokkosViewWrite(vec, &kv)); 3939566063dSJacob Faibussowitsch else PetscCall(VecRestoreKokkosView(vec, &kv)); 3943ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 3959dc7b89cSJunchao Zhang } 3969dc7b89cSJunchao Zhang 3979dc7b89cSJunchao Zhang template <class MemorySpace> 398d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecGetKokkosOffsetViewDOF(DM da, Vec vec, ConstPetscScalarKokkosOffsetView2DType<MemorySpace> *ov) 399d71ae5a4SJacob Faibussowitsch { 4009dc7b89cSJunchao Zhang PetscInt xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof; 4019dc7b89cSJunchao Zhang ConstPetscScalarKokkosViewType<MemorySpace> kv; 4029dc7b89cSJunchao Zhang 4039dc7b89cSJunchao Zhang PetscFunctionBegin; 4049dc7b89cSJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 4059dc7b89cSJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 4064f572ea9SToby Isaac PetscAssertPointer(ov, 3); 4079dc7b89cSJunchao Zhang DMDA_VEC_GET_SHAPE(da, vec, xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof); 4089dc7b89cSJunchao Zhang PetscCheck(dim == 1, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, "KokkosOffsetView is 2D but DMDA is %dD", (int)dim); 4099566063dSJacob Faibussowitsch PetscCall(VecGetKokkosView(vec, &kv)); 4109dc7b89cSJunchao Zhang *ov = ConstPetscScalarKokkosOffsetView2DType<MemorySpace>(kv.data(), {gxs, 0}, {gxs + gxm, dof}); 4113ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 4129dc7b89cSJunchao Zhang } 4139dc7b89cSJunchao Zhang 4149dc7b89cSJunchao Zhang template <class MemorySpace> 415d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF(DM da, Vec vec, ConstPetscScalarKokkosOffsetView2DType<MemorySpace> *ov) 416d71ae5a4SJacob Faibussowitsch { 4179dc7b89cSJunchao Zhang ConstPetscScalarKokkosViewType<MemorySpace> kv; 4189dc7b89cSJunchao Zhang 4199dc7b89cSJunchao Zhang PetscFunctionBegin; 4209dc7b89cSJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 4219dc7b89cSJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 4224f572ea9SToby Isaac PetscAssertPointer(ov, 3); 4239dc7b89cSJunchao Zhang kv = ConstPetscScalarKokkosViewType<MemorySpace>(ov->data(), ov->extent(0) * ov->extent(1)); 4249566063dSJacob Faibussowitsch PetscCall(VecRestoreKokkosView(vec, &kv)); 4253ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 4269dc7b89cSJunchao Zhang } 4279dc7b89cSJunchao Zhang 4289dc7b89cSJunchao Zhang /* ============================== 3D including DOF ================================= */ 4299dc7b89cSJunchao Zhang template <class MemorySpace> 430d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecGetKokkosOffsetViewDOF_Private(DM da, Vec vec, PetscScalarKokkosOffsetView3DType<MemorySpace> *ov, PetscBool overwrite) 431d71ae5a4SJacob Faibussowitsch { 4329dc7b89cSJunchao Zhang PetscInt xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof; 4339dc7b89cSJunchao Zhang PetscScalarKokkosViewType<MemorySpace> kv; 4349dc7b89cSJunchao Zhang 4359dc7b89cSJunchao Zhang PetscFunctionBegin; 4369dc7b89cSJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 4379dc7b89cSJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 4384f572ea9SToby Isaac PetscAssertPointer(ov, 3); 4399dc7b89cSJunchao Zhang DMDA_VEC_GET_SHAPE(da, vec, xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof); 4409dc7b89cSJunchao Zhang PetscCheck(dim == 2, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, "KokkosOffsetView is 3D but DMDA is %dD", (int)dim); 4419566063dSJacob Faibussowitsch if (overwrite) PetscCall(VecGetKokkosViewWrite(vec, &kv)); 4429566063dSJacob Faibussowitsch else PetscCall(VecGetKokkosView(vec, &kv)); 4439dc7b89cSJunchao Zhang *ov = PetscScalarKokkosOffsetView3DType<MemorySpace>(kv.data(), {gys, gxs, 0}, {gys + gym, gxs + gxm, dof}); 4443ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 4459dc7b89cSJunchao Zhang } 4469dc7b89cSJunchao Zhang 4479dc7b89cSJunchao Zhang template <class MemorySpace> 448d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF_Private(DM da, Vec vec, PetscScalarKokkosOffsetView3DType<MemorySpace> *ov, PetscBool overwrite) 449d71ae5a4SJacob Faibussowitsch { 4509dc7b89cSJunchao Zhang PetscScalarKokkosViewType<MemorySpace> kv; 4519dc7b89cSJunchao Zhang 4529dc7b89cSJunchao Zhang PetscFunctionBegin; 4539dc7b89cSJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 4549dc7b89cSJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 4554f572ea9SToby Isaac PetscAssertPointer(ov, 3); 4569dc7b89cSJunchao Zhang kv = PetscScalarKokkosViewType<MemorySpace>(ov->data(), ov->extent(0) * ov->extent(1) * ov->extent(2)); 4579566063dSJacob Faibussowitsch if (overwrite) PetscCall(VecRestoreKokkosViewWrite(vec, &kv)); 4589566063dSJacob Faibussowitsch else PetscCall(VecRestoreKokkosView(vec, &kv)); 4593ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 4609dc7b89cSJunchao Zhang } 4619dc7b89cSJunchao Zhang 4629dc7b89cSJunchao Zhang template <class MemorySpace> 463d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecGetKokkosOffsetViewDOF(DM da, Vec vec, ConstPetscScalarKokkosOffsetView3DType<MemorySpace> *ov) 464d71ae5a4SJacob Faibussowitsch { 4659dc7b89cSJunchao Zhang PetscInt xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof; 4669dc7b89cSJunchao Zhang ConstPetscScalarKokkosViewType<MemorySpace> kv; 4679dc7b89cSJunchao Zhang 4689dc7b89cSJunchao Zhang PetscFunctionBegin; 4699dc7b89cSJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 4709dc7b89cSJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 4714f572ea9SToby Isaac PetscAssertPointer(ov, 3); 4729dc7b89cSJunchao Zhang DMDA_VEC_GET_SHAPE(da, vec, xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof); 4739dc7b89cSJunchao Zhang PetscCheck(dim == 2, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, "KokkosOffsetView is 3D but DMDA is %dD", (int)dim); 4749566063dSJacob Faibussowitsch PetscCall(VecGetKokkosView(vec, &kv)); 4759dc7b89cSJunchao Zhang *ov = ConstPetscScalarKokkosOffsetView3DType<MemorySpace>(kv.data(), {gys, gxs, 0}, {gys + gym, gxs + gxm, dof}); 4763ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 4779dc7b89cSJunchao Zhang } 4789dc7b89cSJunchao Zhang 4799dc7b89cSJunchao Zhang template <class MemorySpace> 480d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF(DM da, Vec vec, ConstPetscScalarKokkosOffsetView3DType<MemorySpace> *ov) 481d71ae5a4SJacob Faibussowitsch { 4829dc7b89cSJunchao Zhang ConstPetscScalarKokkosViewType<MemorySpace> kv; 4839dc7b89cSJunchao Zhang 4849dc7b89cSJunchao Zhang PetscFunctionBegin; 4859dc7b89cSJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 4869dc7b89cSJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 4874f572ea9SToby Isaac PetscAssertPointer(ov, 3); 4889dc7b89cSJunchao Zhang kv = ConstPetscScalarKokkosViewType<MemorySpace>(ov->data(), ov->extent(0) * ov->extent(1) * ov->extent(2)); 4899566063dSJacob Faibussowitsch PetscCall(VecRestoreKokkosView(vec, &kv)); 4903ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 4919dc7b89cSJunchao Zhang } 4929dc7b89cSJunchao Zhang 4939dc7b89cSJunchao Zhang /* ============================== 4D including DOF ================================= */ 4949dc7b89cSJunchao Zhang template <class MemorySpace> 495d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecGetKokkosOffsetViewDOF_Private(DM da, Vec vec, PetscScalarKokkosOffsetView4DType<MemorySpace> *ov, PetscBool overwrite) 496d71ae5a4SJacob Faibussowitsch { 4979dc7b89cSJunchao Zhang PetscInt xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof; 4989dc7b89cSJunchao Zhang PetscScalarKokkosViewType<MemorySpace> kv; 4999dc7b89cSJunchao Zhang 5009dc7b89cSJunchao Zhang PetscFunctionBegin; 5019dc7b89cSJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 5029dc7b89cSJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 5034f572ea9SToby Isaac PetscAssertPointer(ov, 3); 5049dc7b89cSJunchao Zhang DMDA_VEC_GET_SHAPE(da, vec, xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof); 5059dc7b89cSJunchao Zhang PetscCheck(dim == 3, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, "KokkosOffsetView is 4D but DMDA is %dD", (int)dim); 5069566063dSJacob Faibussowitsch if (overwrite) PetscCall(VecGetKokkosViewWrite(vec, &kv)); 5079566063dSJacob Faibussowitsch else PetscCall(VecGetKokkosView(vec, &kv)); 5089dc7b89cSJunchao Zhang *ov = PetscScalarKokkosOffsetView4DType<MemorySpace>(kv.data(), {gzs, gys, gxs, 0}, {gzs + gzm, gys + gym, gxs + gxm, dof}); 5093ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 5109dc7b89cSJunchao Zhang } 5119dc7b89cSJunchao Zhang 5129dc7b89cSJunchao Zhang template <class MemorySpace> 513d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF_Private(DM da, Vec vec, PetscScalarKokkosOffsetView4DType<MemorySpace> *ov, PetscBool overwrite) 514d71ae5a4SJacob Faibussowitsch { 5159dc7b89cSJunchao Zhang PetscScalarKokkosViewType<MemorySpace> kv; 5169dc7b89cSJunchao Zhang 5179dc7b89cSJunchao Zhang PetscFunctionBegin; 5189dc7b89cSJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 5199dc7b89cSJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 5204f572ea9SToby Isaac PetscAssertPointer(ov, 3); 5219dc7b89cSJunchao Zhang kv = PetscScalarKokkosViewType<MemorySpace>(ov->data(), ov->extent(0) * ov->extent(1) * ov->extent(2) * ov->extent(3)); 5229566063dSJacob Faibussowitsch if (overwrite) PetscCall(VecRestoreKokkosViewWrite(vec, &kv)); 5239566063dSJacob Faibussowitsch else PetscCall(VecRestoreKokkosView(vec, &kv)); 5243ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 5259dc7b89cSJunchao Zhang } 5269dc7b89cSJunchao Zhang 5279dc7b89cSJunchao Zhang template <class MemorySpace> 528d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecGetKokkosOffsetViewDOF(DM da, Vec vec, ConstPetscScalarKokkosOffsetView4DType<MemorySpace> *ov) 529d71ae5a4SJacob Faibussowitsch { 5309dc7b89cSJunchao Zhang PetscInt xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof; 5319dc7b89cSJunchao Zhang ConstPetscScalarKokkosViewType<MemorySpace> kv; 5329dc7b89cSJunchao Zhang 5339dc7b89cSJunchao Zhang PetscFunctionBegin; 5349dc7b89cSJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 5359dc7b89cSJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 5364f572ea9SToby Isaac PetscAssertPointer(ov, 3); 5379dc7b89cSJunchao Zhang DMDA_VEC_GET_SHAPE(da, vec, xs, ys, zs, xm, ym, zm, gxs, gys, gzs, gxm, gym, gzm, N, dim, dof); 5389dc7b89cSJunchao Zhang PetscCheck(dim == 3, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, "KokkosOffsetView is 4D but DMDA is %dD", (int)dim); 5399566063dSJacob Faibussowitsch PetscCall(VecGetKokkosView(vec, &kv)); 5409dc7b89cSJunchao Zhang *ov = ConstPetscScalarKokkosOffsetView4DType<MemorySpace>(kv.data(), {gzs, gys, gxs, 0}, {gzs + gzm, gys + gym, gxs + gxm, dof}); 5413ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 5429dc7b89cSJunchao Zhang } 5439dc7b89cSJunchao Zhang 5449dc7b89cSJunchao Zhang template <class MemorySpace> 545d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF(DM da, Vec vec, ConstPetscScalarKokkosOffsetView4DType<MemorySpace> *ov) 546d71ae5a4SJacob Faibussowitsch { 5479dc7b89cSJunchao Zhang ConstPetscScalarKokkosViewType<MemorySpace> kv; 5489dc7b89cSJunchao Zhang 5499dc7b89cSJunchao Zhang PetscFunctionBegin; 5509dc7b89cSJunchao Zhang PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 5519dc7b89cSJunchao Zhang PetscValidHeaderSpecific(vec, VEC_CLASSID, 2); 5524f572ea9SToby Isaac PetscAssertPointer(ov, 3); 5539dc7b89cSJunchao Zhang kv = ConstPetscScalarKokkosViewType<MemorySpace>(ov->data(), ov->extent(0) * ov->extent(1) * ov->extent(2) * ov->extent(3)); 5549566063dSJacob Faibussowitsch PetscCall(VecRestoreKokkosView(vec, &kv)); 5553ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 5569dc7b89cSJunchao Zhang } 5579dc7b89cSJunchao Zhang 5589dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOF(DM, Vec, ConstPetscScalarKokkosOffsetView2D *); 5599dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF(DM, Vec, ConstPetscScalarKokkosOffsetView2D *); 5609371c9d4SSatish Balay template <> 561d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOF(DM da, Vec vec, PetscScalarKokkosOffsetView2D *ov) 562d71ae5a4SJacob Faibussowitsch { 5639371c9d4SSatish Balay return DMDAVecGetKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_FALSE); 5649371c9d4SSatish Balay } 5659371c9d4SSatish Balay template <> 566d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF(DM da, Vec vec, PetscScalarKokkosOffsetView2D *ov) 567d71ae5a4SJacob Faibussowitsch { 5689371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_FALSE); 5699371c9d4SSatish Balay } 5709371c9d4SSatish Balay template <> 571d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOFWrite(DM da, Vec vec, PetscScalarKokkosOffsetView2D *ov) 572d71ae5a4SJacob Faibussowitsch { 5739371c9d4SSatish Balay return DMDAVecGetKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_TRUE); 5749371c9d4SSatish Balay } 5759371c9d4SSatish Balay template <> 576d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOFWrite(DM da, Vec vec, PetscScalarKokkosOffsetView2D *ov) 577d71ae5a4SJacob Faibussowitsch { 5789371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_TRUE); 5799371c9d4SSatish Balay } 5809dc7b89cSJunchao Zhang 5819dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOF(DM, Vec, ConstPetscScalarKokkosOffsetView3D *); 5829dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF(DM, Vec, ConstPetscScalarKokkosOffsetView3D *); 5839371c9d4SSatish Balay template <> 584d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOF(DM da, Vec vec, PetscScalarKokkosOffsetView3D *ov) 585d71ae5a4SJacob Faibussowitsch { 5869371c9d4SSatish Balay return DMDAVecGetKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_FALSE); 5879371c9d4SSatish Balay } 5889371c9d4SSatish Balay template <> 589d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF(DM da, Vec vec, PetscScalarKokkosOffsetView3D *ov) 590d71ae5a4SJacob Faibussowitsch { 5919371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_FALSE); 5929371c9d4SSatish Balay } 5939371c9d4SSatish Balay template <> 594d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOFWrite(DM da, Vec vec, PetscScalarKokkosOffsetView3D *ov) 595d71ae5a4SJacob Faibussowitsch { 5969371c9d4SSatish Balay return DMDAVecGetKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_TRUE); 5979371c9d4SSatish Balay } 5989371c9d4SSatish Balay template <> 599d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOFWrite(DM da, Vec vec, PetscScalarKokkosOffsetView3D *ov) 600d71ae5a4SJacob Faibussowitsch { 6019371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_TRUE); 6029371c9d4SSatish Balay } 6039dc7b89cSJunchao Zhang 6049dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOF(DM, Vec, ConstPetscScalarKokkosOffsetView4D *); 6059dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF(DM, Vec, ConstPetscScalarKokkosOffsetView4D *); 6069371c9d4SSatish Balay template <> 607d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOF(DM da, Vec vec, PetscScalarKokkosOffsetView4D *ov) 608d71ae5a4SJacob Faibussowitsch { 6099371c9d4SSatish Balay return DMDAVecGetKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_FALSE); 6109371c9d4SSatish Balay } 6119371c9d4SSatish Balay template <> 612d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF(DM da, Vec vec, PetscScalarKokkosOffsetView4D *ov) 613d71ae5a4SJacob Faibussowitsch { 6149371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_FALSE); 6159371c9d4SSatish Balay } 6169371c9d4SSatish Balay template <> 617d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOFWrite(DM da, Vec vec, PetscScalarKokkosOffsetView4D *ov) 618d71ae5a4SJacob Faibussowitsch { 6199371c9d4SSatish Balay return DMDAVecGetKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_TRUE); 6209371c9d4SSatish Balay } 6219371c9d4SSatish Balay template <> 622d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOFWrite(DM da, Vec vec, PetscScalarKokkosOffsetView4D *ov) 623d71ae5a4SJacob Faibussowitsch { 6249371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_TRUE); 6259371c9d4SSatish Balay } 6269dc7b89cSJunchao Zhang 627*45402d8aSJunchao Zhang #if !defined(KOKKOS_ENABLE_UNIFIED_MEMORY) /* Get host views if the default memory space is not host space */ 6289dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOF(DM, Vec, ConstPetscScalarKokkosOffsetView2DHost *); 6299dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF(DM, Vec, ConstPetscScalarKokkosOffsetView2DHost *); 6309371c9d4SSatish Balay template <> 631d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOF(DM da, Vec vec, PetscScalarKokkosOffsetView2DHost *ov) 632d71ae5a4SJacob Faibussowitsch { 6339371c9d4SSatish Balay return DMDAVecGetKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_FALSE); 6349371c9d4SSatish Balay } 6359371c9d4SSatish Balay template <> 636d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF(DM da, Vec vec, PetscScalarKokkosOffsetView2DHost *ov) 637d71ae5a4SJacob Faibussowitsch { 6389371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_FALSE); 6399371c9d4SSatish Balay } 6409371c9d4SSatish Balay template <> 641d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOFWrite(DM da, Vec vec, PetscScalarKokkosOffsetView2DHost *ov) 642d71ae5a4SJacob Faibussowitsch { 6439371c9d4SSatish Balay return DMDAVecGetKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_TRUE); 6449371c9d4SSatish Balay } 6459371c9d4SSatish Balay template <> 646d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOFWrite(DM da, Vec vec, PetscScalarKokkosOffsetView2DHost *ov) 647d71ae5a4SJacob Faibussowitsch { 6489371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_TRUE); 6499371c9d4SSatish Balay } 6509dc7b89cSJunchao Zhang 6519dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOF(DM, Vec, ConstPetscScalarKokkosOffsetView3DHost *); 6529dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF(DM, Vec, ConstPetscScalarKokkosOffsetView3DHost *); 6539371c9d4SSatish Balay template <> 654d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOF(DM da, Vec vec, PetscScalarKokkosOffsetView3DHost *ov) 655d71ae5a4SJacob Faibussowitsch { 6569371c9d4SSatish Balay return DMDAVecGetKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_FALSE); 6579371c9d4SSatish Balay } 6589371c9d4SSatish Balay template <> 659d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF(DM da, Vec vec, PetscScalarKokkosOffsetView3DHost *ov) 660d71ae5a4SJacob Faibussowitsch { 6619371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_FALSE); 6629371c9d4SSatish Balay } 6639371c9d4SSatish Balay template <> 664d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOFWrite(DM da, Vec vec, PetscScalarKokkosOffsetView3DHost *ov) 665d71ae5a4SJacob Faibussowitsch { 6669371c9d4SSatish Balay return DMDAVecGetKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_TRUE); 6679371c9d4SSatish Balay } 6689371c9d4SSatish Balay template <> 669d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOFWrite(DM da, Vec vec, PetscScalarKokkosOffsetView3DHost *ov) 670d71ae5a4SJacob Faibussowitsch { 6719371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_TRUE); 6729371c9d4SSatish Balay } 6739dc7b89cSJunchao Zhang 6749dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOF(DM, Vec, ConstPetscScalarKokkosOffsetView4DHost *); 6759dc7b89cSJunchao Zhang template PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF(DM, Vec, ConstPetscScalarKokkosOffsetView4DHost *); 6769371c9d4SSatish Balay template <> 677d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOF(DM da, Vec vec, PetscScalarKokkosOffsetView4DHost *ov) 678d71ae5a4SJacob Faibussowitsch { 6799371c9d4SSatish Balay return DMDAVecGetKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_FALSE); 6809371c9d4SSatish Balay } 6819371c9d4SSatish Balay template <> 682d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOF(DM da, Vec vec, PetscScalarKokkosOffsetView4DHost *ov) 683d71ae5a4SJacob Faibussowitsch { 6849371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_FALSE); 6859371c9d4SSatish Balay } 6869371c9d4SSatish Balay template <> 687d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecGetKokkosOffsetViewDOFWrite(DM da, Vec vec, PetscScalarKokkosOffsetView4DHost *ov) 688d71ae5a4SJacob Faibussowitsch { 6899371c9d4SSatish Balay return DMDAVecGetKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_TRUE); 6909371c9d4SSatish Balay } 6919371c9d4SSatish Balay template <> 692d71ae5a4SJacob Faibussowitsch PETSC_VISIBILITY_PUBLIC PetscErrorCode DMDAVecRestoreKokkosOffsetViewDOFWrite(DM da, Vec vec, PetscScalarKokkosOffsetView4DHost *ov) 693d71ae5a4SJacob Faibussowitsch { 6949371c9d4SSatish Balay return DMDAVecRestoreKokkosOffsetViewDOF_Private(da, vec, ov, PETSC_TRUE); 6959371c9d4SSatish Balay } 6969dc7b89cSJunchao Zhang #endif 697