On Thu, Mar 1, 2012 at 5:14 PM, Vaclav Hapla <span dir="ltr"><<a href="mailto:vaclav.hapla@vsb.cz">vaclav.hapla@vsb.cz</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<u></u>

  
    
  
  <div bgcolor="#ffffff" text="#000000">
    This is what I used before for a long time until now when I updated
    PETSc and it started to complain "New nonzero caused a malloc!" when
    I wanted to add </div></blockquote><div><br></div><div>You can turn off this message using MatSetOption(). We put it there so people know when allocation is being done since it</div><div>can be slow.</div><div><br></div>
<div>  Thanks,</div><div><br></div><div>    Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="#ffffff" text="#000000">some new nonzero outside of the original
    nnz-pattern. MatDuplicate is always retaining the pattern, isn't it?<br>
    Vaclav<br>
    <br>
    On 03/02/2012 12:06 AM, Matthew Knepley wrote:
    <blockquote type="cite">On Thu, Mar 1, 2012 at 5:03 PM, Vaclav Hapla <span dir="ltr"><<a href="mailto:vaclav.hapla@vsb.cz" target="_blank">vaclav.hapla@vsb.cz</a>></span>
      wrote:<br>
      <div class="gmail_quote">
        <blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          Dear PETSc team,<br>
          why I am not able to do this:<br>
          <br>
          ...<br>
          MatCreate(PETSC_COMM_SELF, &Kreg);<br>
          MatSetSizes(Kreg,m,n,m,n);<br>
          MatSetType(Kreg, MATSEQAIJ);<br>
          MatSeqAIJSetPreallocation(Kreg,0,nnz);<br>
          MatAssemblyBegin(Kreg, MAT_FINAL_ASSEMBLY);<br>
          MatAssemblyEnd(   Kreg, MAT_FINAL_ASSEMBLY);<br>
          PetscFree(nnz);<br>
          {<br>
             PetscInt nz_Kreg;<br>
             MatGetRow(Kreg, 0, &nz_Kreg, PETSC_IGNORE,
          PETSC_IGNORE);<br>
             PetscPrintf(PETSC_COMM_SELF, "nnz %d  Kreg %d\n", nnz[0],
          nz_Kreg);  // prints nnz 11  Kreg 0 !!!<br>
          }<br>
          MatCopy(K_loc, Kreg, DIFFERENT_NONZERO_PATTERN); //fails: New
          nonzero at (0,0) caused a malloc!<br>
        </blockquote>
        <div><br>
        </div>
        <div>I think you want</div>
        <div><br>
        </div>
        <div><a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatDuplicate.html" target="_blank">http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatDuplicate.html</a></div>
        <div><br>
        </div>
        <div>which does it in one line.</div>
        <div><br>
        </div>
        <div>   Matt</div>
        <div> </div>
        <blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <br>
          PETSc complains about new nonzero - not surprisingly because
          MatAssemblyBegin/End filters zeros as I understand.<br>
          But when I comment out MatAssemblyBegin/End, MatCopy complains
          that it is only for assembled matrices.<br>
          <br>
          I think that to call MatSetValues on all allocated nonzeros
          just to make them survive MatAssemblyBegin/End or to replace
          MatCopy call by loop over raw array is both quite awkward.<br>
          Maybe one should be able to turn the filter in
          MatAssemblyBegin/End off. Or is there any other way out?<br>
          <br>
          BTW, what I need is to make a copy Kreg of given matrix K_loc
          but with few additional preallocated positions which are
          filled later. Is there some other convenient solution?<br>
          <br>
          Cheers,<br>
          Vaclav Hapla<br>
        </blockquote>
      </div>
      <br>
      <br clear="all"><span class="HOEnZb"><font color="#888888">
      <div><br>
      </div>
      -- <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>
    </font></span></blockquote><span class="HOEnZb"><font color="#888888">
    <br>
    <br>
    <div>-- <br>
      <p style="font-size:11pt;font-family:Verdana,sans-serif">
        Vaclav Hapla<br>
        Research assistant<br>
        <a href="http://spomech.vsb.cz/" target="_blank">SPOMECH project</a><br>
        <a href="http://www.it4i.eu/" target="_blank">Centre of Excellence
          IT4Innovations</a>
      </p>
      <p style="font-size:11pt;font-family:Verdana,sans-serif">
        tel.: <a href="tel:%28%2B420%29%2059%20732%206291" value="+420597326291" target="_blank">(+420) 59 732 6291</a><br>
        VSB-Technical University of Ostrava<br>
        17.listopadu 15/2172<br>
        708 33 Ostrava-Poruba<br>
        Czech Republic<br>
      </p>
    </div>
  </font></span></div>

</blockquote></div><br><br clear="all"><div><br></div>-- <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>