<div dir="ltr">Richard, it's better to mail the list. No, we haven't reworked subtype Fortran pointers yet, but I think we know what needs to be done.</div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Mon, Jan 7, 2013 at 1:42 PM, Richard Tran Mills <span dir="ltr"><<a href="mailto:rtm@eecs.utk.edu" target="_blank">rtm@eecs.utk.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    <div>Hi Jed,<br>
      <br>
      I am back at work after some extended time away and I need to
      start messing with DMShell so that I can use it to set operations
      like LocalToGlobal and GlobalToLocal updates from inside PFLOTRAN.<br>
      <br>
      Did this issue of handling the Fortran function pointers get
      resolved somehow?  Is there something I need to change in how I am
      doing the Fortran bindings?<br>
      <br>
      Cheers,<br>
      Richard<div><div class="h5"><br>
      <br>
      On 12/4/12 5:43 PM, Jed Brown wrote:<br>
    </div></div></div><div><div class="h5">
    <blockquote type="cite">
      <div>As usual, anything that is duplicated and not checked by the
        compiler is broken.<br>
        <br>
        <font face="courier new, monospace">$ grep
          PetscObjectAllocateFortranPointers src/**/*.c                
                                                                       
                                             </font></div>
      <div><font face="courier new, monospace">src/dm/impls/da/ftn-custom/zda2f.c:
           PetscObjectAllocateFortranPointers(*da,6);</font></div>
      <div><font face="courier new, monospace">src/dm/impls/da/ftn-custom/zda2f.c:
           PetscObjectAllocateFortranPointers(*da,6);</font></div>
      <div><font face="courier new, monospace">src/dm/impls/shell/ftn-custom/zdmshellf.c:
           PetscObjectAllocateFortranPointers(*dm,2);</font></div>
      <div><font face="courier new, monospace">src/dm/impls/shell/ftn-custom/zdmshellf.c:
           PetscObjectAllocateFortranPointers(*dm,2);</font></div>
      <div><br>
      </div>
      <div>Note that changing the type does not reset the function
        pointers, thus having a DMSHELL, calling DMSetType(dm,DMDA), and
        then setting a DMDA local function will cause memory corruption.</div>
      <div><br>
      </div>
      <div>I cannot express how much I hate this system. The full-blown
        solution is that for each type, we register a (global) token
        which is the index of that function pointer. That doesn't have
        any false dependencies, but is more "initialize" code.</div>
      <div><br>
      </div>
      <div>An alternative, used in the TS and KSP code below, is to have
        a common enum that lists all the Fortran functions. It's a false
        header dependency, but not a binary dependency.</div>
      <div><br>
      </div>
      <div>
        What should we do? The current state is a disaster.</div>
      <div><br>
      </div>
      <div><font face="courier new, monospace">src/ksp/ksp/impls/gmres/fgmres/ftn-custom/zmodpcff.c:
           PetscObjectAllocateFortranPointers(*ksp,3);</font></div>
      <div><font face="courier new, monospace">src/ksp/ksp/interface/ftn-custom/zitfuncf.c:
           PetscObjectAllocateFortranPointers(*ksp,FTN_MAX);</font></div>
      <div><font face="courier new, monospace">src/ksp/ksp/interface/ftn-custom/zitfuncf.c:
           PetscObjectAllocateFortranPointers(*ksp,FTN_MAX);</font></div>
      <div><font face="courier new, monospace">src/ksp/pc/impls/mg/ftn-custom/zmgfuncf.c:
             PetscObjectAllocateFortranPointers(*mat,1);</font></div>
      <div><font face="courier new, monospace">src/ksp/pc/impls/shell/ftn-custom/zshellpcf.c:
           PetscObjectAllocateFortranPointers(*pc,5);</font></div>
      <div><font face="courier new, monospace">src/ksp/pc/impls/shell/ftn-custom/zshellpcf.c:
           PetscObjectAllocateFortranPointers(*pc,5);</font></div>
      <div><font face="courier new, monospace">src/ksp/pc/impls/shell/ftn-custom/zshellpcf.c:
           PetscObjectAllocateFortranPointers(*pc,5);</font></div>
      <div><font face="courier new, monospace">src/ksp/pc/impls/shell/ftn-custom/zshellpcf.c:
           PetscObjectAllocateFortranPointers(*pc,5);</font></div>
      <div><font face="courier new, monospace">src/ksp/pc/impls/shell/ftn-custom/zshellpcf.c:
           PetscObjectAllocateFortranPointers(*pc,5);</font></div>
      <div><font face="courier new, monospace">src/mat/impls/mffd/ftn-custom/zmffdf.c:
           PetscObjectAllocateFortranPointers(*mat,2);</font></div>
      <div><font face="courier new, monospace">src/mat/impls/shell/ftn-custom/zshellf.c:
           PetscObjectAllocateFortranPointers(*mat,11);</font></div>
      <div><font face="courier new, monospace">src/mat/interface/ftn-custom/zmatrixf.c:
           PetscObjectAllocateFortranPointers(*sp,1);</font></div>
      <div><font face="courier new, monospace">src/snes/interface/ftn-custom/zsnesf.c:
           PetscObjectAllocateFortranPointers(*snes,14);</font></div>
      <div><font face="courier new, monospace">src/snes/interface/ftn-custom/zsnesf.c:
           PetscObjectAllocateFortranPointers(*snes,14);</font></div>
      <div><font face="courier new, monospace">src/snes/interface/ftn-custom/zsnesf.c:
           PetscObjectAllocateFortranPointers(*snes,14);</font></div>
      <div><font face="courier new, monospace">src/snes/interface/ftn-custom/zsnesf.c:
           PetscObjectAllocateFortranPointers(*snes,14);</font></div>
      <div><font face="courier new, monospace">src/snes/interface/ftn-custom/zsnesf.c:
           PetscObjectAllocateFortranPointers(*snes,14);</font></div>
      <div><font face="courier new, monospace">src/snes/linesearch/impls/shell/ftn-custom/zlinesearchshellf.c:
           PetscObjectAllocateFortranPointers(*linesearch,3);</font></div>
      <div><font face="courier new, monospace">src/snes/linesearch/interface/ftn-custom/zlinesearchf.c:
           PetscObjectAllocateFortranPointers(*linesearch,3);</font></div>
      <div><font face="courier new, monospace">src/snes/linesearch/interface/ftn-custom/zlinesearchf.c:
           PetscObjectAllocateFortranPointers(*linesearch,3);</font></div>
      <div><font face="courier new, monospace">src/sys/draw/utils/ftn-custom/zzoomf.c:
           PetscObjectAllocateFortranPointers(*draw,1);</font></div>
      <div><font face="courier new, monospace">src/ts/interface/ftn-custom/ztsf.c:
           PetscObjectAllocateFortranPointers(*ts,OUR_COUNT);</font></div>
      <div><font face="courier new, monospace">src/ts/interface/ftn-custom/ztsf.c:
           PetscObjectAllocateFortranPointers(*ts,OUR_COUNT);</font></div>
      <div><font face="courier new, monospace">src/ts/interface/ftn-custom/ztsf.c:
             PetscObjectAllocateFortranPointers(*ts,OUR_COUNT);</font></div>
      <div><font face="courier new, monospace">src/ts/interface/ftn-custom/ztsf.c:
             PetscObjectAllocateFortranPointers(*ts,OUR_COUNT);</font></div>
      <div><font face="courier new, monospace">src/ts/interface/ftn-custom/ztsf.c:
           PetscObjectAllocateFortranPointers(*ts,OUR_COUNT);</font></div>
      <div><font face="courier new, monospace">src/ts/interface/ftn-custom/ztsf.c:
           PetscObjectAllocateFortranPointers(*ts,OUR_COUNT);</font></div>
      <div><font face="courier new, monospace">src/ts/interface/ftn-custom/ztsf.c:
           PetscObjectAllocateFortranPointers(*ts,OUR_COUNT);</font></div>
    </blockquote>
    <br>
    <br>
    </div></div><span class="HOEnZb"><font color="#888888"><pre cols="74">-- 
Richard Tran Mills, Ph.D.
Computational Earth Scientist      | Joint Assistant Professor
Hydrogeochemical Dynamics Team     | EECS and Earth & Planetary Sciences
Oak Ridge National Laboratory      | University of Tennessee, Knoxville
E-mail: <a href="mailto:rmills@ornl.gov" target="_blank">rmills@ornl.gov</a>  V: <a href="tel:865-241-3198" value="+18652413198" target="_blank">865-241-3198</a> <a href="http://climate.ornl.gov/~rmills" target="_blank">http://climate.ornl.gov/~rmills</a>
</pre>
  </font></span></div>

</blockquote></div><br></div>