[petsc-dev] ISGetIndices

Munson, Todd tmunson at mcs.anl.gov
Wed Nov 8 13:56:00 CST 2017


> We could consider this, but really IS is intended to be a static object, not a dynamic one.
> I think Jed's SegBuffer is supposed to be dynamic, and could underlie a dynamic index
> object.

I could be wrong, but my recollection is that the initial reason for the index sets was the 
bound constrained methods in TAO and the VI methods which dynamically determine the set of 
active and inactive bounds.  Those are inherently dynamic.

> Most of the objects in PETSc are fixed size, and when the size changes you recreate it.

The IS vectors can have a fixed size allocation and changing the local number of 
elements is then a simple assignment.  Its like the preallocation of elements 
in matrices...

> IS objects can be views into other memory, so the object could be created but the backing
> memory could be maintained somewhere else so that there is not a big malloc every time.

What is the overhead of PetscMalloc and how do I tell if its cheap or expensive?

Inside of ISComplement, for example, there is:

  ierr = PetscMalloc1(nmax-nmin-unique,&nindices);CHKERRQ(ierr);
  ierr = ISCreateGeneral(PetscObjectComm((PetscObject)is),cnt,nindices,PETSC_OWN_POINTER,isout);CHKERRQ(ierr);

Many of the other methods allocate with the maximum size.


Anyway, I am okay keeping the IS design as is.  I would not create separate 
implementations for dynamic versus static index sets as these are logically 
the same beasts.

Todd.



More information about the petsc-dev mailing list