<div class="gmail_quote">On Wed, Jul 18, 2012 at 5:50 AM, Florian Beck <span dir="ltr"><<a href="mailto:Flo.44@gmx.de" target="_blank">Flo.44@gmx.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
I want to use the petsc library in a shared library which I'm dynamically loading in my main program. Therefore I'm not using the functions to destroy a Vector such as VecDestroy. If I use the function I got an segmentation fault error. </blockquote>
<div><br></div><div>Send the full error message (including stack trace).</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Of course I have a memory leak, because I'm not using the functions to destroy my vectors. Is there a simple example how to use the petsc-library in a program like the following pseudo-code:<br>
</blockquote><div><br></div><div>Is MPI initialized before this is called? Did you plan to do this in parallel? Are you linking PETSc dynamically (as in, you dlopen and dlsym PETSc functions to call them, or perhaps you declare weak symbols in your code), linking your app-specific solver module (you call PETSc normally and use dlsym at a higher level), or something else? Remember to configure PETSc --with-dynamic-loading if necessary.</div>
<div><br></div><div>The best way is to reuse data structures, but if you are going to destroy them each iteration, make sure you destroy all of them. Note that MPI cannot be initialized more than once, but presumably you aren't doing that because the rest of the app needs MPI to formulate the original problem.</div>
<div><br></div><div>Note that doing everything dynamic is more work and defers more errors from compile and link time to run time. It is possible, but it takes more effort and some familiarity with requirements for dynamic loading.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
main{<br>
<br>
 for 1 to 10<br>
<br>
   do_something<br>
<br>
   call function_to_solve_Ax=b_with_petsc<br>
<br>
   do_something<br>
<br>
 end<br>
<br>
}<br>
</blockquote></div><br>