<div>Hi </div><div><br></div><div>I am trying to use a PETSc snes shell object (with hopes of using it as the 'preconditioner' in athother snes ngmres object). I've upgraded to petsc3.3 but when I compile my code it complains that </div>
<div>/home/mica/kenway/hg/SUmb/src/NKsolver/setupNKSolver2.F90:47: undefined reference to `snesshellsetsolve_'</div><div><br></div><div>The code is fortran. I tried compiling ex35.c in the snes/examples directory and that went fine. I then looked at all the linking flags and split them out, one per line and compared it to the flags I'm using to compile my code. The two files are attached. (one.txt is my code and two is from 'make ex35'). A quick diff shows they are precisely identical.</div>
<div><br></div><div>After a little more poking around, I found the snesshellf.c file in /src/snes/impls/shell/ftn-auto. From looking at that file, it appears the only function that actually got wrapped was:</div><div><br>
</div><div><div>/* Definitions of Fortran Wrapper routines */</div><div>#if defined(__cplusplus)</div><div>extern "C" {</div><div>#endif</div><div>void PETSC_STDCALL  snesshellsetcontext_(SNES snes,void*ctx, int *__ierr ){</div>
<div>*__ierr = SNESShellSetContext(</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>(SNES)PetscToPointer((snes) ),ctx);</div><div>}</div><div>#if defined(__cplusplus)</div><div>}</div><div>#endif</div>
</div><div><br></div><div>This function, does in fact work. But all the other shell functions to not. </div><div><br></div><div>Is is the snesshell functionality not implemented in fortran? What determines when bfort includes a file in the wrapper? </div>
<div><br></div><div>Thanks,</div><div><br></div><div>Gaetan</div>