Skip to content

Commit a0581b1

Browse files
committed
Merge branch 'knepley/fix-swarm-add-point' into 'main'
Swarm: Initial size is -1, so addition function were wrong See merge request petsc/petsc!8541
2 parents 3c36942 + 670292f commit a0581b1

File tree

2 files changed

+3
-2
lines changed

2 files changed

+3
-2
lines changed

src/dm/impls/swarm/data_bucket.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,14 +538,15 @@ PetscErrorCode DMSwarmDataBucketZeroPoint(const DMSwarmDataBucket db, const Pets
538538
PetscErrorCode DMSwarmDataBucketAddPoint(DMSwarmDataBucket db)
539539
{
540540
PetscFunctionBegin;
541-
PetscCall(DMSwarmDataBucketSetSizes(db, db->L + 1, DMSWARM_DATA_BUCKET_BUFFER_DEFAULT));
541+
PetscCall(DMSwarmDataBucketSetSizes(db, PetscMax(db->L, 0) + 1, DMSWARM_DATA_BUCKET_BUFFER_DEFAULT));
542542
PetscFunctionReturn(PETSC_SUCCESS);
543543
}
544544

545545
/* decrement */
546546
PetscErrorCode DMSwarmDataBucketRemovePoint(DMSwarmDataBucket db)
547547
{
548548
PetscFunctionBegin;
549+
PetscCheck(db->L > 0, PetscObjectComm((PetscObject)db), PETSC_ERR_ARG_WRONG, "Swarm has no points to be removed");
549550
PetscCall(DMSwarmDataBucketSetSizes(db, db->L - 1, DMSWARM_DATA_BUCKET_BUFFER_DEFAULT));
550551
PetscFunctionReturn(PETSC_SUCCESS);
551552
}

src/dm/impls/swarm/swarm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1772,7 +1772,7 @@ PetscErrorCode DMSwarmAddNPoints(DM dm, PetscInt npoints)
17721772
PetscFunctionBegin;
17731773
PetscCall(PetscLogEventBegin(DMSWARM_AddPoints, 0, 0, 0, 0));
17741774
PetscCall(DMSwarmDataBucketGetSizes(swarm->db, &nlocal, NULL, NULL));
1775-
nlocal = nlocal + npoints;
1775+
nlocal = PetscMax(nlocal, 0) + npoints;
17761776
PetscCall(DMSwarmDataBucketSetSizes(swarm->db, nlocal, DMSWARM_DATA_BUCKET_BUFFER_DEFAULT));
17771777
PetscCall(PetscLogEventEnd(DMSWARM_AddPoints, 0, 0, 0, 0));
17781778
PetscFunctionReturn(PETSC_SUCCESS);

0 commit comments

Comments
 (0)