changes for PetscMap

Dima Karpeyev karpeev at
Tue Oct 27 16:56:52 CDT 2009

What about a different name?  I vote for PetscLayout, because that's what it is.

On Tue, Oct 27, 2009 at 4:44 PM, Matthew Knepley <knepley at> wrote:
> I wanted that 10 years ago.
>   Matt
> On Tue, Oct 27, 2009 at 4:37 PM, Barry Smith <bsmith at> wrote:
>>   PetscMap is a strange beast in PETSc.
>> 1) it is not a PetscObject (that is it has no PETSc header)
>> 2) it is used as a PetscMap* instead of PetscMap like most objects
>> 3) it does not have a PetscMapCreate() instead it has a
>> PetscMapInitialize() which is like a create except it does not malloc its
>> memory
>> 4) It does have a PetscMapDestroy() that DOES free the space.
>> 5) Sometimes a PetscMalloc() is called before PetscMapInitialize() and
>> sometimes a PetscMap is declared and a & of the variable is passed in
>>    In this case it will crash if one calls PetscMapDestroy() is called on
>> it. So instead one must call PetscFree(map->range); to free the interior
>> space.
>>  This strange creature evolved over time because I did not want PetscMap
>> to be a full heavy weight object, but it pretty much ended up being one
>> anyways (for example it has reference counting). For a long time I hid
>> PetscMap in the less public part of PETSc didn't want most people to have to
>> deal with it.
>>   I still don't want it to be something most PETSc users need ever see,
>> but it is time to fix it up and make it more consistent with other objects.
>> So I propose to make a PetscMap just like other PETSc objects, with
>> create(), destroy(), opaque definition except I will still not make it have
>> a PETSc header. This will not require much change in the code but will
>> simplify its usage.
>>  Any comments.
>>   Barry
> --
> 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

More information about the petsc-dev mailing list