<div dir="ltr"><div dir="ltr">On Fri, Apr 1, 2022 at 6:50 AM Roland Richter <<a href="mailto:roland.richter@ntnu.no">roland.richter@ntnu.no</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">

  
  <div>
    <p>I re-run my code with a debug version of PETSc, resulting in <br>
    </p>
    <p><span style="font-family:monospace"><span style="font-weight:bold;color:rgb(255,84,84);background-color:rgb(255,255,255)">[0]PETSC
          ERROR: --------------------- Error Message
          --------------------------------------------------------------</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">
        </span><br>
        [0]PETSC ERROR: Corrupt argument:
        <a href="https://petsc.org/release/faq/#valgrind" target="_blank">https://petsc.org/release/faq/#valgrind</a>
        <br>
        [0]PETSC ERROR: Object already free: Parameter # 1
        <br>
        [0]PETSC ERROR: See <a href="https://petsc.org/release/faq/" target="_blank">https://petsc.org/release/faq/</a> for trouble
        shooting.
        <br>
        [0]PETSC ERROR: Petsc Development GIT revision:
        v3.17.0-8-gf6d6129e50  GIT Date: 2022-03-31 18:10:33 +0000
        <br>
        [0]PETSC ERROR: #1 VecGetSize() at
/home/roland/Downloads/git-files/petsc/src/vec/vec/interface/vector.c:670<br>
        0       64
        <br>
        [0]PETSC ERROR: #2 VecDestroy() at
/home/roland/Downloads/git-files/petsc/src/vec/vec/interface/vector.c:375<br>
        0       64
        <br>
        [0]PETSC ERROR: #3 VecGetArray() at
/home/roland/Downloads/git-files/petsc/src/vec/vec/interface/rvector.c:1780<br>
        <br>
      </span></p>
    <p>I do not understand why it tries to access the vector, even
      though it has been set to PETSC_NULL in the previous free-call.</p>
    <p></p></div></blockquote><div>What code is setting that pointer to NULL?</div><div><br></div><div>  Thanks,</div><div><br></div><div>    Matt </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><p>Regards,</p>
    <p>Roland<br>
    </p>
    <div>Am 31.03.22 um 15:50 schrieb Matthew
      Knepley:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">
        <div dir="ltr">On Thu, Mar 31, 2022 at 9:47 AM Roland Richter
          <<a href="mailto:roland.richter@ntnu.no" target="_blank">roland.richter@ntnu.no</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">
            <div>
              <p>The backtrace is</p>
              <p><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">#0
                     </span><span style="color:rgb(24,24,178);background-color:rgb(255,255,255)">0x00007fffeec4ba97</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> in </span><span style="color:rgb(178,104,24);background-color:rgb(255,255,255)">VecGetSize_Seq</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> () from </span><span style="color:rgb(24,178,24);background-color:rgb(255,255,255)">/opt/petsc/lib/libpetsc.so.3.016</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
                  #1  <span style="color:rgb(24,24,178);background-color:rgb(255,255,255)">0x00007fffeec78f5a</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> in </span><span style="color:rgb(178,104,24);background-color:rgb(255,255,255)">VecGetSize</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> () from </span><span style="color:rgb(24,178,24);background-color:rgb(255,255,255)">/opt/petsc/lib/libpetsc.so.3.016</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
                  #2  <span style="color:rgb(24,24,178);background-color:rgb(255,255,255)">0x0000000000410b73</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> in </span><span style="color:rgb(178,104,24);background-color:rgb(255,255,255)">test_ts_arma_with_pure_petsc_preconfigured_clean(unsigned
                    long, unsigned long,
                    arma::Col<std::complex<doubl</span><br>
                  e> > const&,
                  arma::Col<std::complex<double> >&,
                  double, double, double) [clone .constprop.0]<span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">
                    () </span><br>
                  #3  <span style="color:rgb(24,24,178);background-color:rgb(255,255,255)">0x0000000000414384</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> in </span><span style="color:rgb(178,104,24);background-color:rgb(255,255,255)">test_RK4_solvers_clean(unsigned
                    long, unsigned long, unsigned long, bool) [clone
                    .constprop.0]</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">
                    () </span><br>
                  #4  <span style="color:rgb(24,24,178);background-color:rgb(255,255,255)">0x0000000000405c6c</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> in </span><span style="color:rgb(178,104,24);background-color:rgb(255,255,255)">main</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> ()</span></span></p>
            </div>
          </blockquote>
          <div>It looks like you are passing an invalid vector. If you
            compiled in debug mode, it would tell you. I would run</div>
          <div>in debug until my code was running like I expect, then
            switch to optimized. You can do that by using two</div>
          <div>different PETSC_ARCH configures, and switch at runtime
            with that variable.</div>
          <div><br>
          </div>
          <div>  Thanks,</div>
          <div><br>
          </div>
          <div>    Matt </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
            <div>
              <p>Regards,</p>
              <div>Roland Richter</div>
              <div><br>
              </div>
              <div>Am 31.03.22 um 15:35 schrieb Matthew Knepley:<br>
              </div>
              <blockquote type="cite">
                <div dir="ltr">
                  <div dir="ltr">On Thu, Mar 31, 2022 at 9:01 AM Roland
                    Richter <<a href="mailto:roland.richter@ntnu.no" target="_blank">roland.richter@ntnu.no</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">
                      <div>
                        <p>Hei,</p>
                        <p>Thanks for the idea! I added a simple
                          std::cout for both constructor and destructor,
                          and found out that my destructor is called
                          multiple times, while the constructor is
                          called only once. This could explain the error
                          (double free), but I do not know why segfault
                          is thrown even though I explicitly check if
                          the vector has been used. Are there
                          explanations for that?</p>
                      </div>
                    </blockquote>
                    <div>Run with -start_in_debugger and get the stack
                      trace when it faults. Right now, I have no idea
                      where it is faulting.</div>
                    <div><br>
                    </div>
                    <div>  Thanks,</div>
                    <div><br>
                    </div>
                    <div>    Matt</div>
                    <div> <br>
                    </div>
                    <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                      <div>
                        <p>Regards,</p>
                        <p>Roland Richter<br>
                        </p>
                        <div>Am 31.03.22 um 12:14 schrieb Matthew
                          Knepley:<br>
                        </div>
                        <blockquote type="cite">
                          <div dir="ltr">
                            <div dir="ltr">On Thu, Mar 31, 2022 at 5:58
                              AM Roland Richter <<a href="mailto:roland.richter@ntnu.no" target="_blank">roland.richter@ntnu.no</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">
                                <div>
                                  <p>Hei,</p>
                                  <p>For a project I wanted to combine
                                    boost::odeint for timestepping and
                                    PETSc-based vectors and matrices for
                                    calculating the right hand side. As
                                    comparison for both timing and
                                    correctness I set up an
                                    armadillo-based right hand side
                                    (with the main-function being in <b>main.cpp</b>,
                                    and the test code in <b>test_timestepping_clean.cpp</b>)<br>
                                  </p>
                                  <p>In theory, the code works fine, but
                                    I have some issues with cleaning up
                                    afterwards in my struct <i>Petsc_RHS_state_clean</i>.
                                    My initial intention was to set up
                                    all involved matrices and vectors
                                    within the constructor, and free the
                                    memory in the destructor. To avoid
                                    freeing vectors I have not used I
                                    initially set them to <i>PETSC_NULL</i>,
                                    and check if this value has been
                                    changed before calling <i>VecDestroy().</i></p>
                                </div>
                              </blockquote>
                              <div>You do not need to check. Destroy()
                                functions already check for NULL.</div>
                              <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                <div>
                                  <p> However, when doing that I get the
                                    following error:</p>
                                  <p><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">[0]PETSC
                                        ERROR:
                                        ------------------------------------------------------------------------
                                      </span><br>
                                      [0]PETSC ERROR: Caught signal
                                      number 11 SEGV: Segmentation
                                      Violation, probably memory access
                                      out of range <br>
                                      [0]PETSC ERROR: Try option
                                      -start_in_debugger or
                                      -on_error_attach_debugger <br>
                                      [0]PETSC ERROR: or see <a href="https://petsc.org/release/faq/#valgrind" target="_blank">https://petsc.org/release/faq/#valgrind</a>
                                      <br>
                                      [0]PETSC ERROR: or try <a href="http://valgrind.org" target="_blank">http://valgrind.org</a>
                                      on GNU/linux and Apple Mac OS X to
                                      find memory corruption errors <br>
                                      [0]PETSC ERROR: configure using
                                      --with-debugging=yes, recompile,
                                      link, and run  <br>
                                      [0]PETSC ERROR: to get more
                                      information on the crash. <br>
                                      <span style="font-weight:bold;color:rgb(255,84,84);background-color:rgb(255,255,255)">[0]PETSC
                                        ERROR: ---------------------
                                        Error Message
--------------------------------------------------------------</span></span></p>
                                  <p>If I comment out that code in
                                    ~Petsc_RHS_state_clean(), the
                                    program runs, but will use ~17 GByte
                                    of RAM during runtime. As the memory
                                    is not used immediately in full, but
                                    rather increases during running, I
                                    assume a memory leak somewhere.
                                    Where does it come from, and how can
                                    I avoid it?</p>
                                </div>
                              </blockquote>
                              <div>It must be that your constructor is
                                called multiple times without calling
                                your destructor. I cannot understand
                                this code in order</div>
                              <div>to see where that happens, but you
                                should just be able to run in the
                                debugger and put a break point at the
                                creation and<br>
                              </div>
                              <div>destruction calls.</div>
                              <div><br>
                              </div>
                              <div>  Thanks,</div>
                              <div><br>
                              </div>
                              <div>      Matt</div>
                              <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                <div>
                                  <p>Thanks!</p>
                                  <p>Regards,</p>
                                  <p>Roland Richter<br>
                                  </p>
                                  <p><span style="font-family:monospace"></span></p>
                                </div>
                              </blockquote>
                            </div>
                            <br clear="all">
                            <div><br>
                            </div>
                            -- <br>
                            <div dir="ltr">
                              <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>
                        </blockquote>
                      </div>
                    </blockquote>
                  </div>
                  <br clear="all">
                  <div><br>
                  </div>
                  -- <br>
                  <div dir="ltr">
                    <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>
              </blockquote>
            </div>
          </blockquote>
        </div>
        <br clear="all">
        <div><br>
        </div>
        -- <br>
        <div dir="ltr">
          <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>
    </blockquote>
  </div>

</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>