#include "petscis.h" PetscErrorCode ISRegister(const char sname[], PetscErrorCode (*function)(IS))Not Collective
| name | - The name of a new user-defined creation routine | |
| create_func | - The creation routine itself | 
    ISRegister("my_is_name",  MyISCreate);
Then, your vector type can be chosen with the procedural interface via
    ISCreate(MPI_Comm, IS *);
    ISSetType(IS,"my_is_name");
or at runtime via the option
    -is_type my_is_name
This is no ISSetFromOptions() and the current implementations do not have a way to dynamically determine type, so dynamic registration of custom IS types will be of limited use to users.