1*27d4e10aSPierre Jolivet #include <petscsys.h> 2*27d4e10aSPierre Jolivet #include <petscviewer.h> 3*27d4e10aSPierre Jolivet #include <petsc/private/deviceimpl.h> 4*27d4e10aSPierre Jolivet 5*27d4e10aSPierre Jolivet /* implementations for <include/petscdevice.h> */ 6*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceCreate(PETSC_UNUSED PetscDeviceType type, PETSC_UNUSED PetscInt devid, PetscDevice *device) 7*27d4e10aSPierre Jolivet { 8*27d4e10aSPierre Jolivet PetscFunctionBegin; 9*27d4e10aSPierre Jolivet PetscAssertPointer(device, 3); 10*27d4e10aSPierre Jolivet *device = NULL; 11*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 12*27d4e10aSPierre Jolivet } 13*27d4e10aSPierre Jolivet 14*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceDestroy(PetscDevice *device) 15*27d4e10aSPierre Jolivet { 16*27d4e10aSPierre Jolivet PetscFunctionBegin; 17*27d4e10aSPierre Jolivet PetscAssertPointer(device, 1); 18*27d4e10aSPierre Jolivet if (*device) *device = NULL; 19*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 20*27d4e10aSPierre Jolivet } 21*27d4e10aSPierre Jolivet 22*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceConfigure(PETSC_UNUSED PetscDevice device) 23*27d4e10aSPierre Jolivet { 24*27d4e10aSPierre Jolivet PetscFunctionBegin; 25*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 26*27d4e10aSPierre Jolivet } 27*27d4e10aSPierre Jolivet 28*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceView(PETSC_UNUSED PetscDevice device, PetscViewer viewer) 29*27d4e10aSPierre Jolivet { 30*27d4e10aSPierre Jolivet PetscFunctionBegin; 31*27d4e10aSPierre Jolivet if (viewer) PetscValidHeaderSpecific(viewer, PETSC_VIEWER_CLASSID, 2); 32*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 33*27d4e10aSPierre Jolivet } 34*27d4e10aSPierre Jolivet 35*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceGetType(PETSC_UNUSED PetscDevice device, PetscDeviceType *type) 36*27d4e10aSPierre Jolivet { 37*27d4e10aSPierre Jolivet PetscFunctionBegin; 38*27d4e10aSPierre Jolivet PetscAssertPointer(type, 2); 39*27d4e10aSPierre Jolivet *type = PETSC_DEVICE_DEFAULT(); 40*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 41*27d4e10aSPierre Jolivet } 42*27d4e10aSPierre Jolivet 43*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceGetDeviceId(PETSC_UNUSED PetscDevice device, PetscInt *id) 44*27d4e10aSPierre Jolivet { 45*27d4e10aSPierre Jolivet PetscFunctionBegin; 46*27d4e10aSPierre Jolivet PetscAssertPointer(id, 2); 47*27d4e10aSPierre Jolivet *id = 0; 48*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 49*27d4e10aSPierre Jolivet } 50*27d4e10aSPierre Jolivet 51*27d4e10aSPierre Jolivet PetscDeviceType PETSC_DEVICE_DEFAULT(void) 52*27d4e10aSPierre Jolivet { 53*27d4e10aSPierre Jolivet return PETSC_DEVICE_HOST; 54*27d4e10aSPierre Jolivet } 55*27d4e10aSPierre Jolivet 56*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceSetDefaultDeviceType(PetscDeviceType type) 57*27d4e10aSPierre Jolivet { 58*27d4e10aSPierre Jolivet PetscFunctionBegin; 59*27d4e10aSPierre Jolivet PetscCheck(type == PETSC_DEVICE_HOST, PETSC_COMM_SELF, PETSC_ERR_USER_INPUT, "PetscDevice is disabled but specified PetscDeviceType %s is different than %s", PetscDeviceTypes[type], PetscDeviceTypes[PETSC_DEVICE_HOST]); 60*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 61*27d4e10aSPierre Jolivet } 62*27d4e10aSPierre Jolivet 63*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceInitialize(PETSC_UNUSED PetscDeviceType type) 64*27d4e10aSPierre Jolivet { 65*27d4e10aSPierre Jolivet PetscFunctionBegin; 66*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 67*27d4e10aSPierre Jolivet } 68*27d4e10aSPierre Jolivet 69*27d4e10aSPierre Jolivet PetscBool PetscDeviceInitialized(PetscDeviceType type) 70*27d4e10aSPierre Jolivet { 71*27d4e10aSPierre Jolivet return (type == PETSC_DEVICE_HOST) ? PETSC_TRUE : PETSC_FALSE; 72*27d4e10aSPierre Jolivet } 73*27d4e10aSPierre Jolivet 74*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextCreate(PetscDeviceContext *dctx) 75*27d4e10aSPierre Jolivet { 76*27d4e10aSPierre Jolivet PetscFunctionBegin; 77*27d4e10aSPierre Jolivet PetscAssertPointer(dctx, 1); 78*27d4e10aSPierre Jolivet *dctx = NULL; 79*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 80*27d4e10aSPierre Jolivet } 81*27d4e10aSPierre Jolivet 82*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextDestroy(PetscDeviceContext *dctx) 83*27d4e10aSPierre Jolivet { 84*27d4e10aSPierre Jolivet PetscFunctionBegin; 85*27d4e10aSPierre Jolivet PetscAssertPointer(dctx, 1); 86*27d4e10aSPierre Jolivet if (*dctx) *dctx = NULL; 87*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 88*27d4e10aSPierre Jolivet } 89*27d4e10aSPierre Jolivet 90*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextSetStreamType(PETSC_UNUSED PetscDeviceContext dctx, PETSC_UNUSED PetscStreamType type) 91*27d4e10aSPierre Jolivet { 92*27d4e10aSPierre Jolivet PetscFunctionBegin; 93*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 94*27d4e10aSPierre Jolivet } 95*27d4e10aSPierre Jolivet 96*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextGetStreamType(PETSC_UNUSED PetscDeviceContext dctx, PetscStreamType *type) 97*27d4e10aSPierre Jolivet { 98*27d4e10aSPierre Jolivet PetscFunctionBegin; 99*27d4e10aSPierre Jolivet PetscAssertPointer(type, 2); 100*27d4e10aSPierre Jolivet *type = PETSC_STREAM_DEFAULT; 101*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 102*27d4e10aSPierre Jolivet } 103*27d4e10aSPierre Jolivet 104*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextSetDevice(PETSC_UNUSED PetscDeviceContext dctx, PETSC_UNUSED PetscDevice device) 105*27d4e10aSPierre Jolivet { 106*27d4e10aSPierre Jolivet PetscFunctionBegin; 107*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 108*27d4e10aSPierre Jolivet } 109*27d4e10aSPierre Jolivet 110*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextGetDevice(PETSC_UNUSED PetscDeviceContext dctx, PetscDevice *device) 111*27d4e10aSPierre Jolivet { 112*27d4e10aSPierre Jolivet PetscFunctionBegin; 113*27d4e10aSPierre Jolivet PetscAssertPointer(device, 2); 114*27d4e10aSPierre Jolivet *device = NULL; 115*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 116*27d4e10aSPierre Jolivet } 117*27d4e10aSPierre Jolivet 118*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextGetDeviceType(PETSC_UNUSED PetscDeviceContext dctx, PetscDeviceType *type) 119*27d4e10aSPierre Jolivet { 120*27d4e10aSPierre Jolivet PetscFunctionBegin; 121*27d4e10aSPierre Jolivet PetscAssertPointer(type, 2); 122*27d4e10aSPierre Jolivet *type = PETSC_DEVICE_DEFAULT(); 123*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 124*27d4e10aSPierre Jolivet } 125*27d4e10aSPierre Jolivet 126*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextSetUp(PETSC_UNUSED PetscDeviceContext dctx) 127*27d4e10aSPierre Jolivet { 128*27d4e10aSPierre Jolivet PetscFunctionBegin; 129*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 130*27d4e10aSPierre Jolivet } 131*27d4e10aSPierre Jolivet 132*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextDuplicate(PETSC_UNUSED PetscDeviceContext dctx, PetscDeviceContext *dctxdup) 133*27d4e10aSPierre Jolivet { 134*27d4e10aSPierre Jolivet PetscFunctionBegin; 135*27d4e10aSPierre Jolivet PetscAssertPointer(dctxdup, 2); 136*27d4e10aSPierre Jolivet *dctxdup = NULL; 137*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 138*27d4e10aSPierre Jolivet } 139*27d4e10aSPierre Jolivet 140*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextQueryIdle(PETSC_UNUSED PetscDeviceContext dctx, PetscBool *idle) 141*27d4e10aSPierre Jolivet { 142*27d4e10aSPierre Jolivet PetscFunctionBegin; 143*27d4e10aSPierre Jolivet PetscAssertPointer(idle, 2); 144*27d4e10aSPierre Jolivet *idle = PETSC_TRUE; 145*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 146*27d4e10aSPierre Jolivet } 147*27d4e10aSPierre Jolivet 148*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextWaitForContext(PETSC_UNUSED PetscDeviceContext dctxa, PETSC_UNUSED PetscDeviceContext dctxb) 149*27d4e10aSPierre Jolivet { 150*27d4e10aSPierre Jolivet PetscFunctionBegin; 151*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 152*27d4e10aSPierre Jolivet } 153*27d4e10aSPierre Jolivet 154*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextForkWithStreamType(PETSC_UNUSED PetscDeviceContext dctx, PETSC_UNUSED PetscStreamType stype, PetscInt n, PetscDeviceContext **dsub) 155*27d4e10aSPierre Jolivet { 156*27d4e10aSPierre Jolivet PetscFunctionBegin; 157*27d4e10aSPierre Jolivet PetscAssertPointer(dsub, 4); 158*27d4e10aSPierre Jolivet PetscAssert(n >= 0, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Number of contexts merged %" PetscInt_FMT " < 0", n); 159*27d4e10aSPierre Jolivet PetscCall(PetscMalloc1(n, dsub)); 160*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 161*27d4e10aSPierre Jolivet } 162*27d4e10aSPierre Jolivet 163*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextFork(PetscDeviceContext dctx, PetscInt n, PetscDeviceContext **dsub) 164*27d4e10aSPierre Jolivet { 165*27d4e10aSPierre Jolivet PetscFunctionBegin; 166*27d4e10aSPierre Jolivet PetscCall(PetscDeviceContextForkWithStreamType(dctx, PETSC_STREAM_DEFAULT, n, dsub)); 167*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 168*27d4e10aSPierre Jolivet } 169*27d4e10aSPierre Jolivet 170*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextJoin(PETSC_UNUSED PetscDeviceContext dctx, PetscInt n, PetscDeviceContextJoinMode joinMode, PetscDeviceContext **dsub) 171*27d4e10aSPierre Jolivet { 172*27d4e10aSPierre Jolivet PetscFunctionBegin; 173*27d4e10aSPierre Jolivet PetscAssertPointer(dsub, 4); 174*27d4e10aSPierre Jolivet PetscAssert(n >= 0, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Number of contexts merged %" PetscInt_FMT " < 0", n); 175*27d4e10aSPierre Jolivet if (joinMode == PETSC_DEVICE_CONTEXT_JOIN_DESTROY) PetscCall(PetscFree(*dsub)); 176*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 177*27d4e10aSPierre Jolivet } 178*27d4e10aSPierre Jolivet 179*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextSynchronize(PETSC_UNUSED PetscDeviceContext dctx) 180*27d4e10aSPierre Jolivet { 181*27d4e10aSPierre Jolivet PetscFunctionBegin; 182*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 183*27d4e10aSPierre Jolivet } 184*27d4e10aSPierre Jolivet 185*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextSetFromOptions(PETSC_UNUSED MPI_Comm comm, PETSC_UNUSED PetscDeviceContext dctx) 186*27d4e10aSPierre Jolivet { 187*27d4e10aSPierre Jolivet PetscFunctionBegin; 188*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 189*27d4e10aSPierre Jolivet } 190*27d4e10aSPierre Jolivet 191*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextView(PETSC_UNUSED PetscDeviceContext dctx, PETSC_UNUSED PetscViewer viewer) 192*27d4e10aSPierre Jolivet { 193*27d4e10aSPierre Jolivet PetscFunctionBegin; 194*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 195*27d4e10aSPierre Jolivet } 196*27d4e10aSPierre Jolivet 197*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextViewFromOptions(PETSC_UNUSED PetscDeviceContext dctx, PetscObject obj, const char name[]) 198*27d4e10aSPierre Jolivet { 199*27d4e10aSPierre Jolivet PetscFunctionBegin; 200*27d4e10aSPierre Jolivet if (obj) PetscValidHeader(obj, 2); 201*27d4e10aSPierre Jolivet PetscAssertPointer(name, 3); 202*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 203*27d4e10aSPierre Jolivet } 204*27d4e10aSPierre Jolivet 205*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextGetCurrentContext(PetscDeviceContext *dctx) 206*27d4e10aSPierre Jolivet { 207*27d4e10aSPierre Jolivet PetscFunctionBegin; 208*27d4e10aSPierre Jolivet PetscAssertPointer(dctx, 1); 209*27d4e10aSPierre Jolivet *dctx = NULL; 210*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 211*27d4e10aSPierre Jolivet } 212*27d4e10aSPierre Jolivet 213*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextSetCurrentContext(PETSC_UNUSED PetscDeviceContext dctx) 214*27d4e10aSPierre Jolivet { 215*27d4e10aSPierre Jolivet PetscFunctionBegin; 216*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 217*27d4e10aSPierre Jolivet } 218*27d4e10aSPierre Jolivet 219*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextGetStreamHandle(PETSC_UNUSED PetscDeviceContext dctx, void **handle) 220*27d4e10aSPierre Jolivet { 221*27d4e10aSPierre Jolivet PetscFunctionBegin; 222*27d4e10aSPierre Jolivet PetscAssertPointer(handle, 2); 223*27d4e10aSPierre Jolivet *handle = NULL; 224*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 225*27d4e10aSPierre Jolivet } 226*27d4e10aSPierre Jolivet 227*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceAllocate_Private(PETSC_UNUSED PetscDeviceContext dctx, PetscBool clear, PETSC_UNUSED PetscMemType mtype, size_t n, PETSC_UNUSED size_t alignment, void **PETSC_RESTRICT ptr) 228*27d4e10aSPierre Jolivet { 229*27d4e10aSPierre Jolivet PetscFunctionBegin; 230*27d4e10aSPierre Jolivet PetscAssertPointer(ptr, 6); 231*27d4e10aSPierre Jolivet PetscCall(PetscMallocA(1, clear, __LINE__, PETSC_FUNCTION_NAME, __FILE__, n, ptr)); 232*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 233*27d4e10aSPierre Jolivet } 234*27d4e10aSPierre Jolivet 235*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceDeallocate_Private(PETSC_UNUSED PetscDeviceContext dctx, void *PETSC_RESTRICT ptr) 236*27d4e10aSPierre Jolivet { 237*27d4e10aSPierre Jolivet PetscFunctionBegin; 238*27d4e10aSPierre Jolivet PetscCall(PetscFree(ptr)); 239*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 240*27d4e10aSPierre Jolivet } 241*27d4e10aSPierre Jolivet 242*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceMemcpy(PETSC_UNUSED PetscDeviceContext dctx, void *PETSC_RESTRICT dest, const void *PETSC_RESTRICT src, size_t n) 243*27d4e10aSPierre Jolivet { 244*27d4e10aSPierre Jolivet PetscFunctionBegin; 245*27d4e10aSPierre Jolivet PetscCall(PetscMemcpy(dest, src, n)); 246*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 247*27d4e10aSPierre Jolivet } 248*27d4e10aSPierre Jolivet 249*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceMemset(PETSC_UNUSED PetscDeviceContext dctx, PETSC_UNUSED void *ptr, PetscInt v, size_t n) 250*27d4e10aSPierre Jolivet { 251*27d4e10aSPierre Jolivet PetscFunctionBegin; 252*27d4e10aSPierre Jolivet memset(ptr, (unsigned char)v, n); 253*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 254*27d4e10aSPierre Jolivet } 255*27d4e10aSPierre Jolivet 256*27d4e10aSPierre Jolivet /* implementations for <include/petsc/private/deviceimpl.h> */ 257*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceInitializeFromOptions_Internal(PETSC_UNUSED MPI_Comm comm) 258*27d4e10aSPierre Jolivet { 259*27d4e10aSPierre Jolivet PetscFunctionBegin; 260*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 261*27d4e10aSPierre Jolivet } 262*27d4e10aSPierre Jolivet 263*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceGetDefaultForType_Internal(PETSC_UNUSED PetscDeviceType type, PetscDevice *device) 264*27d4e10aSPierre Jolivet { 265*27d4e10aSPierre Jolivet PetscFunctionBegin; 266*27d4e10aSPierre Jolivet PetscAssertPointer(device, 2); 267*27d4e10aSPierre Jolivet *device = NULL; 268*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 269*27d4e10aSPierre Jolivet } 270*27d4e10aSPierre Jolivet 271*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceContextGetNullContext_Internal(PetscDeviceContext *dctx) 272*27d4e10aSPierre Jolivet { 273*27d4e10aSPierre Jolivet PetscFunctionBegin; 274*27d4e10aSPierre Jolivet PetscAssertPointer(dctx, 1); 275*27d4e10aSPierre Jolivet *dctx = NULL; 276*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 277*27d4e10aSPierre Jolivet } 278*27d4e10aSPierre Jolivet 279*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceRegisterMemory(const void *PETSC_RESTRICT ptr, PetscMemType mtype, PETSC_UNUSED size_t size) 280*27d4e10aSPierre Jolivet { 281*27d4e10aSPierre Jolivet PetscFunctionBegin; 282*27d4e10aSPierre Jolivet if (PetscMemTypeHost(mtype)) PetscAssertPointer(ptr, 1); 283*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 284*27d4e10aSPierre Jolivet } 285*27d4e10aSPierre Jolivet 286*27d4e10aSPierre Jolivet PetscErrorCode PetscDeviceGetAttribute(PETSC_UNUSED PetscDevice device, PETSC_UNUSED PetscDeviceAttribute attr, void *value) 287*27d4e10aSPierre Jolivet { 288*27d4e10aSPierre Jolivet PetscFunctionBegin; 289*27d4e10aSPierre Jolivet PetscAssertPointer(value, 3); 290*27d4e10aSPierre Jolivet *(int *)value = 0; 291*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 292*27d4e10aSPierre Jolivet } 293*27d4e10aSPierre Jolivet 294*27d4e10aSPierre Jolivet PetscErrorCode PetscGetMarkedObjectMap_Internal(size_t *nkeys, PetscObjectId **keys, PetscMemoryAccessMode **modes, size_t **ndeps, PetscEvent ***dependencies) 295*27d4e10aSPierre Jolivet { 296*27d4e10aSPierre Jolivet PetscFunctionBegin; 297*27d4e10aSPierre Jolivet PetscAssertPointer(nkeys, 1); 298*27d4e10aSPierre Jolivet PetscAssertPointer(keys, 2); 299*27d4e10aSPierre Jolivet PetscAssertPointer(modes, 3); 300*27d4e10aSPierre Jolivet PetscAssertPointer(ndeps, 4); 301*27d4e10aSPierre Jolivet PetscAssertPointer(dependencies, 5); 302*27d4e10aSPierre Jolivet *nkeys = 0; 303*27d4e10aSPierre Jolivet *keys = NULL; 304*27d4e10aSPierre Jolivet *modes = NULL; 305*27d4e10aSPierre Jolivet *ndeps = NULL; 306*27d4e10aSPierre Jolivet *dependencies = NULL; 307*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 308*27d4e10aSPierre Jolivet } 309*27d4e10aSPierre Jolivet 310*27d4e10aSPierre Jolivet PetscErrorCode PetscRestoreMarkedObjectMap_Internal(size_t nkeys, PETSC_UNUSED PetscObjectId **keys, PETSC_UNUSED PetscMemoryAccessMode **modes, PETSC_UNUSED size_t **ndeps, PETSC_UNUSED PetscEvent ***dependencies) 311*27d4e10aSPierre Jolivet { 312*27d4e10aSPierre Jolivet PetscFunctionBegin; 313*27d4e10aSPierre Jolivet PetscAssertPointer(keys, 2); 314*27d4e10aSPierre Jolivet PetscAssertPointer(modes, 3); 315*27d4e10aSPierre Jolivet PetscAssertPointer(ndeps, 4); 316*27d4e10aSPierre Jolivet PetscAssertPointer(dependencies, 5); 317*27d4e10aSPierre Jolivet if (*keys) *keys = NULL; 318*27d4e10aSPierre Jolivet if (*modes) *modes = NULL; 319*27d4e10aSPierre Jolivet if (*ndeps) *ndeps = NULL; 320*27d4e10aSPierre Jolivet if (*dependencies) *dependencies = NULL; 321*27d4e10aSPierre Jolivet PetscFunctionReturn(PETSC_SUCCESS); 322*27d4e10aSPierre Jolivet } 323