Lines Matching refs:ctx
19 static PetscErrorCode DMSwarmSortApplyCellIndexSort(DMSwarmSort ctx) in DMSwarmSortApplyCellIndexSort() argument
22 if (ctx->list) qsort(ctx->list, ctx->npoints, sizeof(SwarmPoint), sort_CompareSwarmPoint); in DMSwarmSortApplyCellIndexSort()
28 DMSwarmSort ctx; in DMSwarmSortCreate() local
31 PetscCall(PetscNew(&ctx)); in DMSwarmSortCreate()
32 ctx->isvalid = PETSC_FALSE; in DMSwarmSortCreate()
33 ctx->ncells = 0; in DMSwarmSortCreate()
34 ctx->npoints = 0; in DMSwarmSortCreate()
35 PetscCall(PetscMalloc1(1, &ctx->pcell_offsets)); in DMSwarmSortCreate()
36 PetscCall(PetscMalloc1(1, &ctx->list)); in DMSwarmSortCreate()
37 *_ctx = ctx; in DMSwarmSortCreate()
41 static PetscErrorCode DMSwarmSortSetup(DMSwarmSort ctx, DM dm, PetscInt ncells) in DMSwarmSortSetup() argument
50 if (!ctx) PetscFunctionReturn(PETSC_SUCCESS); in DMSwarmSortSetup()
51 if (ctx->isvalid) PetscFunctionReturn(PETSC_SUCCESS); in DMSwarmSortSetup()
55 if (ncells != ctx->ncells) { in DMSwarmSortSetup()
56 PetscCall(PetscRealloc(sizeof(PetscInt) * (ncells + 1), &ctx->pcell_offsets)); in DMSwarmSortSetup()
57 ctx->ncells = ncells; in DMSwarmSortSetup()
59 PetscCall(PetscArrayzero(ctx->pcell_offsets, ctx->ncells + 1)); in DMSwarmSortSetup()
63 if (npoints != ctx->npoints) { in DMSwarmSortSetup()
64 PetscCall(PetscRealloc(sizeof(SwarmPoint) * npoints, &ctx->list)); in DMSwarmSortSetup()
65 ctx->npoints = npoints; in DMSwarmSortSetup()
67 PetscCall(PetscArrayzero(ctx->list, npoints)); in DMSwarmSortSetup()
72 for (p = 0; p < ctx->npoints; p++) { in DMSwarmSortSetup()
73 ctx->list[p].point_index = p; in DMSwarmSortSetup()
74 ctx->list[p].cell_index = swarm_cellid[p]; in DMSwarmSortSetup()
77 PetscCall(DMSwarmSortApplyCellIndexSort(ctx)); in DMSwarmSortSetup()
80 for (p = 0; p < ctx->npoints; p++) ctx->pcell_offsets[ctx->list[p].cell_index]++; in DMSwarmSortSetup()
84 for (c = 0; c < ctx->ncells; c++) { in DMSwarmSortSetup()
85 tmp = ctx->pcell_offsets[c]; in DMSwarmSortSetup()
86 ctx->pcell_offsets[c] = count; in DMSwarmSortSetup()
89 ctx->pcell_offsets[c] = count; in DMSwarmSortSetup()
91 ctx->isvalid = PETSC_TRUE; in DMSwarmSortSetup()
96 PetscErrorCode DMSwarmSortDestroy(DMSwarmSort *ctx) in DMSwarmSortDestroy() argument
101 if (!ctx) PetscFunctionReturn(PETSC_SUCCESS); in DMSwarmSortDestroy()
102 if (!*ctx) PetscFunctionReturn(PETSC_SUCCESS); in DMSwarmSortDestroy()
103 ictx = *ctx; in DMSwarmSortDestroy()
107 *ctx = NULL; in DMSwarmSortDestroy()
133 DMSwarmSort ctx; in DMSwarmSortGetNumberOfPointsPerCell() local
137 PetscCall(DMSwarmCellDMGetSort(celldm, &ctx)); in DMSwarmSortGetNumberOfPointsPerCell()
138 …PetscCheck(ctx, PetscObjectComm((PetscObject)sw), PETSC_ERR_USER, "The DMSwarmSort context has not… in DMSwarmSortGetNumberOfPointsPerCell()
139 …PetscCheck(ctx->isvalid, PETSC_COMM_SELF, PETSC_ERR_USER, "SwarmPointSort container is not valid. … in DMSwarmSortGetNumberOfPointsPerCell()
140 … ctx->ncells, PETSC_COMM_SELF, PETSC_ERR_USER, "Cell index (%" PetscInt_FMT ") is greater than max… in DMSwarmSortGetNumberOfPointsPerCell()
142 *npoints = ctx->pcell_offsets[cell + 1] - ctx->pcell_offsets[cell]; in DMSwarmSortGetNumberOfPointsPerCell()
168 DMSwarmSort ctx; in DMSwarmSortGetPointsPerCell() local
172 PetscCall(DMSwarmCellDMGetSort(celldm, &ctx)); in DMSwarmSortGetPointsPerCell()
173 …PetscCheck(ctx, PetscObjectComm((PetscObject)sw), PETSC_ERR_USER, "The DMSwarmSort context has not… in DMSwarmSortGetPointsPerCell()
177 pid = ctx->pcell_offsets[cell] + p; in DMSwarmSortGetPointsPerCell()
178 pid_unsorted = ctx->list[pid].point_index; in DMSwarmSortGetPointsPerCell()
252 DMSwarmSort ctx; in DMSwarmSortGetAccess() local
258 PetscCall(DMSwarmCellDMGetSort(celldm, &ctx)); in DMSwarmSortGetAccess()
259 if (!ctx) { in DMSwarmSortGetAccess()
260 PetscCall(DMSwarmSortCreate(&ctx)); in DMSwarmSortGetAccess()
261 PetscCall(DMSwarmCellDMSetSort(celldm, ctx)); in DMSwarmSortGetAccess()
292 PetscCall(DMSwarmSortSetup(ctx, sw, ncells)); in DMSwarmSortGetAccess()
314 DMSwarmSort ctx; in DMSwarmSortRestoreAccess() local
318 PetscCall(DMSwarmCellDMGetSort(celldm, &ctx)); in DMSwarmSortRestoreAccess()
319 if (!ctx) PetscFunctionReturn(PETSC_SUCCESS); in DMSwarmSortRestoreAccess()
320 …PetscCheck(ctx->isvalid, PetscObjectComm((PetscObject)sw), PETSC_ERR_SUP, "You must call DMSwarmSo… in DMSwarmSortRestoreAccess()
321 ctx->isvalid = PETSC_FALSE; in DMSwarmSortRestoreAccess()
343 DMSwarmSort ctx; in DMSwarmSortGetIsValid() local
347 PetscCall(DMSwarmCellDMGetSort(celldm, &ctx)); in DMSwarmSortGetIsValid()
348 if (!ctx) { in DMSwarmSortGetIsValid()
352 *isvalid = ctx->isvalid; in DMSwarmSortGetIsValid()
375 DMSwarmSort ctx; in DMSwarmSortGetSizes() local
379 PetscCall(DMSwarmCellDMGetSort(celldm, &ctx)); in DMSwarmSortGetSizes()
380 if (!ctx) { in DMSwarmSortGetSizes()
385 if (ncells) *ncells = ctx->ncells; in DMSwarmSortGetSizes()
386 if (npoints) *npoints = ctx->npoints; in DMSwarmSortGetSizes()