<div dir="ltr"><div dir="ltr">On Mon, Jul 8, 2019 at 9:53 PM Jakub Kruzik via petsc-dev <<a href="mailto:petsc-dev@mcs.anl.gov">petsc-dev@mcs.anl.gov</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Just to clarify, the suggested solution is a plug-in sitting anywhere in <br>
the PETSc source tree with postponed compilation and using <br>
__attribute__((constructor)) to register (as in libCEED) for static <br>
libraries?<br>
<br>
I could try to do that for the computation of eigenvector-based <br>
deflation space for PCDeflation next week.<br></blockquote><div><br></div><div>Jakub, I am also interested in doing this. I want it to be as easy as possible. Let me know what you are doing.</div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Jakub<br>
<br>
On 7/8/19 5:49 PM, Smith, Barry F. via petsc-dev wrote:<br>
>     Sorry for the confusion surrounding this issue. Your code needs to go in its own standalone library that links against both PETSc and SLEPc. You can just the mechanism Jed suggested to have your library call PCRegister() when it is utilized (see previous emails/discussion). You could perhaps look at how the ctetgen package utilizes the PETSc compile system and copy that for your makefile and SLEPc, of course.<br>
><br>
>      Once you have the "framework" that does this you could make a PR labeled something like WIP and ask for help in getting the details right.<br>
><br>
>     Barry<br>
><br>
><br>
>> On Jul 8, 2019, at 9:58 AM, Pierre Jolivet via petsc-dev <<a href="mailto:petsc-dev@mcs.anl.gov" target="_blank">petsc-dev@mcs.anl.gov</a>> wrote:<br>
>><br>
>> Hello,<br>
>> I’m not sure what’s the status about this issue.<br>
>> I’m trying to register a PC that is using EPSSolve during PCSetUp, but it’s falling because of undefined references to EPSSomething when linking libpetsc.so<br>
>> How could I fix this, appart from removing my PC from PETSc and compiling this as a separate library (the idea would be to merge my PC in PETSc, so that would be rather counterproductive in the end)?<br>
>><br>
>> Thanks,<br>
>> Pierre<br>
>><br>
>>> On 27 Jun 2019, at 1:04 AM, Matthew Knepley via petsc-dev <<a href="mailto:petsc-dev@mcs.anl.gov" target="_blank">petsc-dev@mcs.anl.gov</a>> wrote:<br>
>>><br>
>>> On Wed, Jun 26, 2019 at 4:11 PM Jed Brown <<a href="mailto:jed@jedbrown.org" target="_blank">jed@jedbrown.org</a>> wrote:<br>
>>> Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>> writes:<br>
>>><br>
>>>> On Wed, Jun 26, 2019 at 3:42 PM Jed Brown via petsc-dev <<br>
>>>> <a href="mailto:petsc-dev@mcs.anl.gov" target="_blank">petsc-dev@mcs.anl.gov</a>> wrote:<br>
>>>><br>
>>>>> "Smith, Barry F." <<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>> writes:<br>
>>>>><br>
>>>>>>> On Jun 26, 2019, at 1:53 PM, Jed Brown <<a href="mailto:jed@jedbrown.org" target="_blank">jed@jedbrown.org</a>> wrote:<br>
>>>>>>><br>
>>>>>>> "Smith, Barry F." <<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>> writes:<br>
>>>>>>><br>
>>>>>>>>   It is still a PC, it may as part of its computation solve an<br>
>>>>> eigenvalue problem but its use is as a PC, hence does not belong in SLEPc.<br>
>>>>>>> Fine; it does not belong in src/ksp/pc/.<br>
>>>>>>    Why not? From the code mangement point of view that is the perfect<br>
>>>>> place for it. It just depends on an external package in the same way that<br>
>>>>> PCHYPRE depends on an external library. Having it off in some other<br>
>>>>> directory src/plugins would serve no purpose. Of course making sure it<br>
>>>>> doesn't get compiled into -lpetsc may require a tweak to the make<br>
>>>>> infrastructure. Make could, for example, skip plugin subdirectories for<br>
>>>>> example.<br>
>>>>><br>
>>>>> I think it's confusing to have code that is part of libpetsc.so<br>
>>>>> alongside code that is not (e.g., won't be accessible to users unless<br>
>>>>> they also build SLEPc and link the plugin).<br>
>>>>><br>
>>>>>>    BTW: Matt's perverse use of SNES from DMPLEx could also be fixed to<br>
>>>>>>    work this way instead of the disgusting PetscObject casting used to<br>
>>>>>>    cancel the SNES object.<br>
>>>>> That code could be part of libpetscsnes.so.<br>
>>>>><br>
>>>> What? I thought I moved everything to SNES a long time ago.<br>
>>> I thought there was a place where SNES was cast to PetscObject.  There<br>
>>> is DMAddField, but it's different.<br>
>>><br>
>>> I can't find it right now. Yeah, AddField is waiting for a true Discretization object.<br>
>>> I think its spelled G-O-D-O-T.<br>
>>>   <br>
>>> PetscViewerVTKAddField is another example of code that uses PetscObject<br>
>>> to avoid depending on a higher level type like Vec.<br>
>>><br>
>>> Viewer is a weird mixin with everything.<br>
>>><br>
>>>     Matt<br>
>>><br>
>>> -- <br>
>>> What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
>>> -- Norbert Wiener<br>
>>><br>
>>> <a href="https://www.cse.buffalo.edu/~knepley/" rel="noreferrer" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br>
<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>