On Fri, Feb 17, 2012 at 1:46 PM, Blaise Bourdin <bourdin at lsu.edu> wrote:
> Hi, > > Is there an easy way to gather all values of an IS across all processes in > a communicator while removing duplicates? > > Basically, I want to go from > [0] Number of indices in set 2 > [0] 0 1 > [0] 1 2 > [1] Number of indices in set 2 > [1] 0 2 > [1] 1 3 > > to > [0] Number of indices in set 3 > [0] 0 1 > [0] 1 2 > [0] 2 3 > [1] Number of indices in set 3 > [1] 0 1 > [1] 1 2 > [1] 2 3 > > The way I do it right now is > ierr = ISGetTotalIndices(csIS,&labels);CHKERRQ(ierr); > ierr = ISGetSize(csIS,&num_cs_global);CHKERRQ(ierr); > I would violate PETSc semantics here since you are going to destroy csIS anyway: PetscSortRemoveDupsInt(&num_cs_global, labels); ISCreateGeneral(comm, num_cs_global, labels, PETSC_COPY_VALUES, &csIS_global); > ierr = ISRestoreTotalIndices(csIS,&labels);CHKERRQ(ierr); > Matt > > Blaise > -- > Department of Mathematics and Center for Computation & Technology > Louisiana State University, Baton Rouge, LA 70803, USA > Tel. +1 (225) 578 1612, Fax +1 (225) 578 4276 > http://www.math.lsu.edu/~bourdin > > > > > > > > -- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120217/a2587f90/attachment-0001.htm>
