<div dir="ltr">Umnn, I hope this isn&#39;t too obvious, but you&#39;re duplicating your matrix at every time step without freeing it and expecting that to not be a problem?<div><br></div><div>A<br><div><br><div class="gmail_quote">
On Wed, May 16, 2012 at 9:01 AM, Andrew Spott <span dir="ltr">&lt;<a href="mailto:andrew.spott@gmail.com" target="_blank">andrew.spott@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I&#39;m attempting to run some code with a rather large (&gt;1GB) sparse matrix, and I keep getting kicked out of the que for what I believe is using too much memory.  The unfortunate thing is that as the steps go up, the memory usage seems to as well, which would normally indicate a memory leak.<br>

<br>
But I&#39;m not really doing anything that would lead to a memory leak, my jacobian is:<br>
<br>
PetscErrorCode HamiltonianJ(TS timeStepContext, PetscReal t, Vec u, Mat *A, Mat *B, MatStructure *flag, void* context)<br>
{<br>
    Mat h;<br>
    PetscErrorCode  err;<br>
    Context         *cntx = (Context*)context;<br>
    PetscScalar     ef = eField(t, cntx-&gt;params);<br>
    //if (cntx-&gt;rank == 0) std::cout &lt;&lt; &quot;ef: &quot; &lt;&lt; ef;<br>
<br>
<br>
    err = MatDuplicate(cntx-&gt;energy_eigenstates,MAT_COPY_VALUES,&amp;h);<br>
    err = MatAXPY(h, ef, cntx-&gt;dipole_matrix, DIFFERENT_NONZERO_PATTERN);<br>
<br>
        err = MatAssemblyBegin(h, MAT_FINAL_ASSEMBLY);<br>
        err = MatAssemblyEnd(h, MAT_FINAL_ASSEMBLY);<br>
<br>
        *A = h;<br>
    *flag = DIFFERENT_NONZERO_PATTERN;<br>
<br>
    return err;<br>
}<br>
<br>
And my Monitor function is:<br>
<br>
PetscErrorCode Monitor(TS ts, PetscInt step, PetscReal t, Vec u, void *cntx)<br>
{<br>
    Context         *context = (Context*) cntx;<br>
    PetscErrorCode  ierr = 0;<br>
    PetscScalar     ef = eField(t, context-&gt;params);<br>
<br>
    if (context-&gt;rank == 0 &amp;&amp; context-&gt;progress) std::cout &lt;&lt; step &lt;&lt; &quot;: &quot; &lt;&lt; t &lt;&lt; &quot; ef: &quot; &lt;&lt; ef &lt;&lt; std::endl;<br>
<br>
        return ierr;<br>
}<br>
<br>
I looked at it with valgrind, and got a summary of:<br>
<br>
==24941== LEAK SUMMARY:<br>
==24941==    definitely lost: 0 bytes in 0 blocks<br>
==24941==    indirectly lost: 0 bytes in 0 blocks<br>
==24941==      possibly lost: 1,291,626,491 bytes in 4,050 blocks<br>
==24941==    still reachable: 1,795,550 bytes in 88 blocks<br>
==24941==         suppressed: 0 bytes in 0 blocks<br>
<br>
with a bunch of things like this:<br>
<br>
==24937== 757,113,160 bytes in 10 blocks are possibly lost in loss record 1,834 of 1,834<br>
==24937==    at 0x4A05306: memalign (vg_replace_malloc.c:532)<br>
==24937==    by 0x43083C: PetscMallocAlign(unsigned long, int, char const*, char const*, char const*<br>
, void**) (mal.c:30)<br>
==24937==    by 0x434144: PetscTrMallocDefault(unsigned long, int, char const*, char const*, char co<br>
nst*, void**) (mtr.c:196)<br>
==24937==    by 0x8641BF: MatSeqAIJSetPreallocation_SeqAIJ (aij.c:3550)<br>
==24937==    by 0x861DBA: MatSeqAIJSetPreallocation(_p_Mat*, int, int const*) (aij.c:3493)<br>
==24937==    by 0x9201B5: MatMPIAIJSetPreallocation_MPIAIJ (mpiaij.c:3209)<br>
==24937==    by 0x922600: MatMPIAIJSetPreallocation(_p_Mat*, int, int const*, int, int const*) (mpiaij.c:3897)<br>
==24937==    by 0x9315BA: MatAXPY_MPIAIJ(_p_Mat*, std::complex&lt;double&gt;, _p_Mat*, MatStructure) (mpiaij.c:2254)<br>
==24937==    by 0x5A9828: MatAXPY(_p_Mat*, std::complex&lt;double&gt;, _p_Mat*, MatStructure) (axpy.c:39)<br>
==24937==    by 0x405EF7: HamiltonianJ(_p_TS*, double, _p_Vec*, _p_Mat**, _p_Mat**, MatStructure*, void*) (in /home/becker/ansp6066/code/EnergyBasisSchrodingerSolver/bin/propagate)<br>
==24937==    by 0x736441: TSComputeRHSJacobian(_p_TS*, double, _p_Vec*, _p_Mat**, _p_Mat**, MatStructure*) (ts.c:186)<br>
==24937==    by 0x736D68: TSComputeRHSFunctionLinear(_p_TS*, double, _p_Vec*, _p_Vec*, void*) (ts.c:2541)<br>
<br>
I imagine these are not actual memory errors, but I thought I&#39;m not sure what is leaking, so I thought I would bring it to your attention.<br>
<br>
I can attach the full valgrind output, but at 2mb, it is rather large, so I figured I would wait for someone to ask for it.<br>
<br>
Any idea what the memory leak could be?  Am I doing something stupid?<br>
<br>
Thanks for the help, as always.<br>
<span class="HOEnZb"><font color="#888888"><br>
-Andrew</font></span></blockquote></div><br></div></div></div>