<div class="gmail_extra">On Wed, Dec 5, 2012 at 6:03 AM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div id=":6rb">  I think you mean that DMDASNESSetFunctionLocal() sets a function pointer specific to DMSNES_DA (I don't think you mean to talk about plain "DM" here (yes I use the wrong object for a fortran function pointer recently but that was because I was lazy).<br>

<br>
    Anyways, the cure is that each PetscObject has two fortran pointer arrays; the current one that handles the methods for the base class of the PetscObject (for example DMSNESSetFunction()) and the other specific for the subclass (for example DMDASNESSetFunctionLocal()). When a subclass gets changed with XXXSetType() the second fortran pointer array is deleted so you don't get "left over" wrong function pointers. Each subclass manages its own enums for the subclass so the base class fortran stuff doesn't need to know about the subclasses.<br>

<br>
   Does that work?</div></blockquote></div><br>What about derived classes? Must we have the subtype create set the number of required Fortran pointers?</div>