Is it possible that recent changes make this solution easier? DMKSP/SNES/TS is now a PETSc object. Should we be attaching context-appropriate pointers there so that they can be copied along with this context?
There's also the last-ditch approach I took to having a SNESShell properly take an implementation-specific fortran pointer, which was to compose it with the object (yeah yeah string lookups) https://bitbucket.org/petsc/petsc-dev/src/d646bb69827f0fe12031068d40b072920e0212b4/src/snes/impls/shell/ftn-custom/zsnesshellf.c?at=default - Peter On Tue, Dec 4, 2012 at 4:43 PM, Jed Brown <jedbrown at mcs.anl.gov> wrote: > As usual, anything that is duplicated and not checked by the compiler is > broken. > > $ grep PetscObjectAllocateFortranPointers src/**/*.c > > > src/dm/impls/da/ftn-custom/zda2f.c: > PetscObjectAllocateFortranPointers(*da,6); > src/dm/impls/da/ftn-custom/zda2f.c: > PetscObjectAllocateFortranPointers(*da,6); > src/dm/impls/shell/ftn-custom/zdmshellf.c: > PetscObjectAllocateFortranPointers(*dm,2); > src/dm/impls/shell/ftn-custom/zdmshellf.c: > PetscObjectAllocateFortranPointers(*dm,2); > > 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. > > 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. > > 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. > > What should we do? The current state is a disaster. > > src/ksp/ksp/impls/gmres/fgmres/ftn-custom/zmodpcff.c: > PetscObjectAllocateFortranPointers(*ksp,3); > src/ksp/ksp/interface/ftn-custom/zitfuncf.c: > PetscObjectAllocateFortranPointers(*ksp,FTN_MAX); > src/ksp/ksp/interface/ftn-custom/zitfuncf.c: > PetscObjectAllocateFortranPointers(*ksp,FTN_MAX); > src/ksp/pc/impls/mg/ftn-custom/zmgfuncf.c: > PetscObjectAllocateFortranPointers(*mat,1); > src/ksp/pc/impls/shell/ftn-custom/zshellpcf.c: > PetscObjectAllocateFortranPointers(*pc,5); > src/ksp/pc/impls/shell/ftn-custom/zshellpcf.c: > PetscObjectAllocateFortranPointers(*pc,5); > src/ksp/pc/impls/shell/ftn-custom/zshellpcf.c: > PetscObjectAllocateFortranPointers(*pc,5); > src/ksp/pc/impls/shell/ftn-custom/zshellpcf.c: > PetscObjectAllocateFortranPointers(*pc,5); > src/ksp/pc/impls/shell/ftn-custom/zshellpcf.c: > PetscObjectAllocateFortranPointers(*pc,5); > src/mat/impls/mffd/ftn-custom/zmffdf.c: > PetscObjectAllocateFortranPointers(*mat,2); > src/mat/impls/shell/ftn-custom/zshellf.c: > PetscObjectAllocateFortranPointers(*mat,11); > src/mat/interface/ftn-custom/zmatrixf.c: > PetscObjectAllocateFortranPointers(*sp,1); > src/snes/interface/ftn-custom/zsnesf.c: > PetscObjectAllocateFortranPointers(*snes,14); > src/snes/interface/ftn-custom/zsnesf.c: > PetscObjectAllocateFortranPointers(*snes,14); > src/snes/interface/ftn-custom/zsnesf.c: > PetscObjectAllocateFortranPointers(*snes,14); > src/snes/interface/ftn-custom/zsnesf.c: > PetscObjectAllocateFortranPointers(*snes,14); > src/snes/interface/ftn-custom/zsnesf.c: > PetscObjectAllocateFortranPointers(*snes,14); > src/snes/linesearch/impls/shell/ftn-custom/zlinesearchshellf.c: > PetscObjectAllocateFortranPointers(*linesearch,3); > src/snes/linesearch/interface/ftn-custom/zlinesearchf.c: > PetscObjectAllocateFortranPointers(*linesearch,3); > src/snes/linesearch/interface/ftn-custom/zlinesearchf.c: > PetscObjectAllocateFortranPointers(*linesearch,3); > src/sys/draw/utils/ftn-custom/zzoomf.c: > PetscObjectAllocateFortranPointers(*draw,1); > src/ts/interface/ftn-custom/ztsf.c: > PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); > src/ts/interface/ftn-custom/ztsf.c: > PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); > src/ts/interface/ftn-custom/ztsf.c: > PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); > src/ts/interface/ftn-custom/ztsf.c: > PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); > src/ts/interface/ftn-custom/ztsf.c: > PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); > src/ts/interface/ftn-custom/ztsf.c: > PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); > src/ts/interface/ftn-custom/ztsf.c: > PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20121204/3a789d9e/attachment.html>
