changes for PetscMap

2009-10-27 Thread Barry Smith

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




changes for PetscMap

2009-10-27 Thread Matthew Knepley
I wanted that 10 years ago.

  Matt

On Tue, Oct 27, 2009 at 4:37 PM, Barry Smith bsmith at mcs.anl.gov 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
-- next part --
An HTML attachment was scrubbed...
URL: 
http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20091027/4bd34f2c/attachment.html