<div dir="ltr">Thanks, that helps! After fixing that, now I get this error:<div><br></div><div><div>[1]PETSC ERROR: Petsc has generated inconsistent data</div><div>[1]PETSC ERROR: MPIAIJ Matrix was assembled but is missing garray</div></div><div><br></div><div>Any suggestions about what may be wrong now? I'll try the debugger tomorrow.</div><div><br></div><div>Thanks,</div><div>David</div><div><br></div><div><br></div><div><br></div><div class="gmail_extra"><div class="gmail_quote">On Sun, Feb 22, 2015 at 5:45 PM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
 Do not call for SeqAIJ matrix. Do not call before the first time you have preallocated and put entries in the matrix and done the MatAssemblyBegin/End()<br>
<br>
  If it still crashes you'll need to try the debugger<br>
<span class="HOEnZb"><font color="#888888"><br>
  Barry<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
> On Feb 22, 2015, at 4:09 PM, David Knezevic <<a href="mailto:david.knezevic@akselos.com">david.knezevic@akselos.com</a>> wrote:<br>
><br>
> Hi Barry,<br>
><br>
> Thanks for your help, much appreciated.<br>
><br>
> I added a prototype for MatDisAssemble_MPIAIJ:<br>
> PETSC_INTERN PetscErrorCode MatDisAssemble_MPIAIJ(Mat);<br>
><br>
> and I added a call to MatDisAssemble_MPIAIJ before MatMPIAIJSetPreallocation. However, I get a segfault on the call to MatDisAssemble_MPIAIJ. The segfault occurs in both serial and parallel.<br>
><br>
> FYI, I'm using Petsc 3.5.2, and I'm not using a non-debug build (though I could rebuild PETSc in debug mode if you think that would help figure out what's happening here).<br>
><br>
> Thanks,<br>
> David<br>
><br>
><br>
><br>
> On Sun, Feb 22, 2015 at 1:13 PM, Barry Smith <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br>
><br>
>   David,<br>
><br>
>    This is an obscure little feature of MatMPIAIJ,   each time you change the sparsity pattern before you call the MatMPIAIJSetPreallocation you need to call  MatDisAssemble_MPIAIJ(Mat mat).    This is a private PETSc function so you need to provide your own prototype for it above the function you use it in.<br>
><br>
>   Let us know if this resolves the problem.<br>
><br>
>    Barry<br>
><br>
> We never really intended that people would call MatMPIAIJSetPreallocation() AFTER they had already used the matrix.<br>
><br>
><br>
> > On Feb 22, 2015, at 6:50 AM, David Knezevic <<a href="mailto:david.knezevic@akselos.com">david.knezevic@akselos.com</a>> wrote:<br>
> ><br>
> > Hi all,<br>
> ><br>
> > I've implemented a solver for a contact problem using SNES. The sparsity pattern of the jacobian matrix needs to change at each nonlinear iteration (because the elements which are in contact can change), so I tried to deal with this by calling MatSeqAIJSetPreallocation and MatMPIAIJSetPreallocation during each iteration in order to update the preallocation.<br>
> ><br>
> > This seems to work fine in serial, but with two or more MPI processes I run into the error "nnz cannot be greater than row length", e.g.:<br>
> > nnz cannot be greater than row length: local row 528 value 12 rowlength 0<br>
> ><br>
> > This error is from the call to<br>
> > MatSeqAIJSetPreallocation(b->B,o_nz,o_nnz); in MatMPIAIJSetPreallocation_MPIAIJ.<br>
> ><br>
> > Any guidance on what the problem might be would be most appreciated. For example, I was wondering if there is a problem with calling SetPreallocation on a matrix that has already been preallocated?<br>
> ><br>
> > Some notes:<br>
> > - I'm using PETSc via libMesh<br>
> > - The code that triggers this issue is available as a PR on the libMesh github repo, in case anyone is interested: <a href="https://github.com/libMesh/libmesh/pull/460/" target="_blank">https://github.com/libMesh/libmesh/pull/460/</a><br>
> > - I can try to make a minimal pure-PETSc example that reproduces this error, if that would be helpful.<br>
> ><br>
> > Many thanks,<br>
> > David<br>
> ><br>
><br>
><br>
<br>
</div></div></blockquote></div><br></div></div>