xref: /petsc/src/dm/impls/da/kokkos/dagetov.kokkos.cxx (revision b7b2c57cd5aa9b14d54c296fd363923a566b256d)
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>
DMDAVecGetKokkosOffsetView_Private(DM da,Vec vec,PetscScalarKokkosOffsetView1DType<MemorySpace> * ov,PetscBool overwrite)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>
DMDAVecRestoreKokkosOffsetView_Private(DM da,Vec vec,PetscScalarKokkosOffsetView1DType<MemorySpace> * ov,PetscBool overwrite)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>
DMDAVecGetKokkosOffsetView(DM da,Vec vec,ConstPetscScalarKokkosOffsetView1DType<MemorySpace> * ov)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>
DMDAVecRestoreKokkosOffsetView(DM da,Vec vec,ConstPetscScalarKokkosOffsetView1DType<MemorySpace> * ov)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>
DMDAVecGetKokkosOffsetView_Private(DM da,Vec vec,PetscScalarKokkosOffsetView2DType<MemorySpace> * ov,PetscBool overwrite)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>
DMDAVecRestoreKokkosOffsetView_Private(DM da,Vec vec,PetscScalarKokkosOffsetView2DType<MemorySpace> * ov,PetscBool overwrite)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>
DMDAVecGetKokkosOffsetView(DM da,Vec vec,ConstPetscScalarKokkosOffsetView2DType<MemorySpace> * ov)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>
DMDAVecRestoreKokkosOffsetView(DM da,Vec vec,ConstPetscScalarKokkosOffsetView2DType<MemorySpace> * ov)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>
DMDAVecGetKokkosOffsetView_Private(DM da,Vec vec,PetscScalarKokkosOffsetView3DType<MemorySpace> * ov,PetscBool overwrite)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>
DMDAVecRestoreKokkosOffsetView_Private(DM da,Vec vec,PetscScalarKokkosOffsetView3DType<MemorySpace> * ov,PetscBool overwrite)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>
DMDAVecGetKokkosOffsetView(DM da,Vec vec,ConstPetscScalarKokkosOffsetView3DType<MemorySpace> * ov)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>
DMDAVecRestoreKokkosOffsetView(DM da,Vec vec,ConstPetscScalarKokkosOffsetView3DType<MemorySpace> * ov)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 <>
DMDAVecGetKokkosOffsetView(DM da,Vec vec,PetscScalarKokkosOffsetView1D * ov)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 <>
DMDAVecRestoreKokkosOffsetView(DM da,Vec vec,PetscScalarKokkosOffsetView1D * ov)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 <>
DMDAVecGetKokkosOffsetViewWrite(DM da,Vec vec,PetscScalarKokkosOffsetView1D * ov)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 <>
DMDAVecRestoreKokkosOffsetViewWrite(DM da,Vec vec,PetscScalarKokkosOffsetView1D * ov)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 <>
DMDAVecGetKokkosOffsetView(DM da,Vec vec,PetscScalarKokkosOffsetView2D * ov)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 <>
DMDAVecRestoreKokkosOffsetView(DM da,Vec vec,PetscScalarKokkosOffsetView2D * ov)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 <>
DMDAVecGetKokkosOffsetViewWrite(DM da,Vec vec,PetscScalarKokkosOffsetView2D * ov)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 <>
DMDAVecRestoreKokkosOffsetViewWrite(DM da,Vec vec,PetscScalarKokkosOffsetView2D * ov)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 <>
DMDAVecGetKokkosOffsetView(DM da,Vec vec,PetscScalarKokkosOffsetView3D * ov)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 <>
DMDAVecRestoreKokkosOffsetView(DM da,Vec vec,PetscScalarKokkosOffsetView3D * ov)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 <>
DMDAVecGetKokkosOffsetViewWrite(DM da,Vec vec,PetscScalarKokkosOffsetView3D * ov)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 <>
DMDAVecRestoreKokkosOffsetViewWrite(DM da,Vec vec,PetscScalarKokkosOffsetView3D * ov)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 <>
DMDAVecGetKokkosOffsetView(DM da,Vec vec,PetscScalarKokkosOffsetView1DHost * ov)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 <>
DMDAVecRestoreKokkosOffsetView(DM da,Vec vec,PetscScalarKokkosOffsetView1DHost * ov)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 <>
DMDAVecGetKokkosOffsetViewWrite(DM da,Vec vec,PetscScalarKokkosOffsetView1DHost * ov)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 <>
DMDAVecRestoreKokkosOffsetViewWrite(DM da,Vec vec,PetscScalarKokkosOffsetView1DHost * ov)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 <>
DMDAVecGetKokkosOffsetView(DM da,Vec vec,PetscScalarKokkosOffsetView2DHost * ov)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 <>
DMDAVecRestoreKokkosOffsetView(DM da,Vec vec,PetscScalarKokkosOffsetView2DHost * ov)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 <>
DMDAVecGetKokkosOffsetViewWrite(DM da,Vec vec,PetscScalarKokkosOffsetView2DHost * ov)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 <>
DMDAVecRestoreKokkosOffsetViewWrite(DM da,Vec vec,PetscScalarKokkosOffsetView2DHost * ov)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 <>
DMDAVecGetKokkosOffsetView(DM da,Vec vec,PetscScalarKokkosOffsetView3DHost * ov)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 <>
DMDAVecRestoreKokkosOffsetView(DM da,Vec vec,PetscScalarKokkosOffsetView3DHost * ov)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 <>
DMDAVecGetKokkosOffsetViewWrite(DM da,Vec vec,PetscScalarKokkosOffsetView3DHost * ov)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 <>
DMDAVecRestoreKokkosOffsetViewWrite(DM da,Vec vec,PetscScalarKokkosOffsetView3DHost * ov)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>
DMDAVecGetKokkosOffsetViewDOF_Private(DM da,Vec vec,PetscScalarKokkosOffsetView2DType<MemorySpace> * ov,PetscBool overwrite)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>
DMDAVecRestoreKokkosOffsetViewDOF_Private(DM da,Vec vec,PetscScalarKokkosOffsetView2DType<MemorySpace> * ov,PetscBool overwrite)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>
DMDAVecGetKokkosOffsetViewDOF(DM da,Vec vec,ConstPetscScalarKokkosOffsetView2DType<MemorySpace> * ov)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>
DMDAVecRestoreKokkosOffsetViewDOF(DM da,Vec vec,ConstPetscScalarKokkosOffsetView2DType<MemorySpace> * ov)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>
DMDAVecGetKokkosOffsetViewDOF_Private(DM da,Vec vec,PetscScalarKokkosOffsetView3DType<MemorySpace> * ov,PetscBool overwrite)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>
DMDAVecRestoreKokkosOffsetViewDOF_Private(DM da,Vec vec,PetscScalarKokkosOffsetView3DType<MemorySpace> * ov,PetscBool overwrite)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>
DMDAVecGetKokkosOffsetViewDOF(DM da,Vec vec,ConstPetscScalarKokkosOffsetView3DType<MemorySpace> * ov)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>
DMDAVecRestoreKokkosOffsetViewDOF(DM da,Vec vec,ConstPetscScalarKokkosOffsetView3DType<MemorySpace> * ov)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>
DMDAVecGetKokkosOffsetViewDOF_Private(DM da,Vec vec,PetscScalarKokkosOffsetView4DType<MemorySpace> * ov,PetscBool overwrite)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>
DMDAVecRestoreKokkosOffsetViewDOF_Private(DM da,Vec vec,PetscScalarKokkosOffsetView4DType<MemorySpace> * ov,PetscBool overwrite)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>
DMDAVecGetKokkosOffsetViewDOF(DM da,Vec vec,ConstPetscScalarKokkosOffsetView4DType<MemorySpace> * ov)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>
DMDAVecRestoreKokkosOffsetViewDOF(DM da,Vec vec,ConstPetscScalarKokkosOffsetView4DType<MemorySpace> * ov)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 <>
DMDAVecGetKokkosOffsetViewDOF(DM da,Vec vec,PetscScalarKokkosOffsetView2D * ov)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 <>
DMDAVecRestoreKokkosOffsetViewDOF(DM da,Vec vec,PetscScalarKokkosOffsetView2D * ov)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 <>
DMDAVecGetKokkosOffsetViewDOFWrite(DM da,Vec vec,PetscScalarKokkosOffsetView2D * ov)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 <>
DMDAVecRestoreKokkosOffsetViewDOFWrite(DM da,Vec vec,PetscScalarKokkosOffsetView2D * ov)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 <>
DMDAVecGetKokkosOffsetViewDOF(DM da,Vec vec,PetscScalarKokkosOffsetView3D * ov)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 <>
DMDAVecRestoreKokkosOffsetViewDOF(DM da,Vec vec,PetscScalarKokkosOffsetView3D * ov)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 <>
DMDAVecGetKokkosOffsetViewDOFWrite(DM da,Vec vec,PetscScalarKokkosOffsetView3D * ov)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 <>
DMDAVecRestoreKokkosOffsetViewDOFWrite(DM da,Vec vec,PetscScalarKokkosOffsetView3D * ov)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 <>
DMDAVecGetKokkosOffsetViewDOF(DM da,Vec vec,PetscScalarKokkosOffsetView4D * ov)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 <>
DMDAVecRestoreKokkosOffsetViewDOF(DM da,Vec vec,PetscScalarKokkosOffsetView4D * ov)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 <>
DMDAVecGetKokkosOffsetViewDOFWrite(DM da,Vec vec,PetscScalarKokkosOffsetView4D * ov)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 <>
DMDAVecRestoreKokkosOffsetViewDOFWrite(DM da,Vec vec,PetscScalarKokkosOffsetView4D * ov)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 <>
DMDAVecGetKokkosOffsetViewDOF(DM da,Vec vec,PetscScalarKokkosOffsetView2DHost * ov)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 <>
DMDAVecRestoreKokkosOffsetViewDOF(DM da,Vec vec,PetscScalarKokkosOffsetView2DHost * ov)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 <>
DMDAVecGetKokkosOffsetViewDOFWrite(DM da,Vec vec,PetscScalarKokkosOffsetView2DHost * ov)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 <>
DMDAVecRestoreKokkosOffsetViewDOFWrite(DM da,Vec vec,PetscScalarKokkosOffsetView2DHost * ov)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 <>
DMDAVecGetKokkosOffsetViewDOF(DM da,Vec vec,PetscScalarKokkosOffsetView3DHost * ov)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 <>
DMDAVecRestoreKokkosOffsetViewDOF(DM da,Vec vec,PetscScalarKokkosOffsetView3DHost * ov)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 <>
DMDAVecGetKokkosOffsetViewDOFWrite(DM da,Vec vec,PetscScalarKokkosOffsetView3DHost * ov)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 <>
DMDAVecRestoreKokkosOffsetViewDOFWrite(DM da,Vec vec,PetscScalarKokkosOffsetView3DHost * ov)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 <>
DMDAVecGetKokkosOffsetViewDOF(DM da,Vec vec,PetscScalarKokkosOffsetView4DHost * ov)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 <>
DMDAVecRestoreKokkosOffsetViewDOF(DM da,Vec vec,PetscScalarKokkosOffsetView4DHost * ov)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 <>
DMDAVecGetKokkosOffsetViewDOFWrite(DM da,Vec vec,PetscScalarKokkosOffsetView4DHost * ov)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 <>
DMDAVecRestoreKokkosOffsetViewDOFWrite(DM da,Vec vec,PetscScalarKokkosOffsetView4DHost * ov)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