On Sat, Nov 5, 2011 at 5:44 PM, Brad Aagaard <span dir="ltr"><<a href="mailto:baagaard@usgs.gov">baagaard@usgs.gov</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;">
<div class="im">On 11/5/11 10:25 AM, Jed Brown wrote:<br>
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">
On Sat, Nov 5, 2011 at 11:13, Brad Aagaard <<a href="mailto:baagaard@usgs.gov" target="_blank">baagaard@usgs.gov</a><br></div><div><div></div><div class="h5">
<mailto:<a href="mailto:baagaard@usgs.gov" target="_blank">baagaard@usgs.gov</a>>> wrote:<br>
<br>
    The error is in our inner solve (associated with computing the<br>
    adjustment to the solution based on the friction criterion) for<br>
    cases where not all processors have points on the fault. On<br>
    processors without points on the fault the block size is -1 and the<br>
    local size is 0. For processors with points on the fault, the block<br>
    size is 3.<br>
<br>
<br>
How is this happening? MatSetBlockSize_MPISBAIJ raises an error if you<br>
try to change the block size. Are you messing with the PetscLayout<br>
directly or something?<br>
<br>
<br>
    I tried altering DMMeshCreateMatrix so that it uses a block size of<br>
    1 if bs==-1, but I still get the error. Does the block size need to<br>
    be consistent across all processors, even those a local size of 0?<br>
    Alternatively, is the local size of 0 causing problems?<br>
<br>
<br>
Yes, bs must be the same.<br>
<br>
Since bs must be set for PetscLayoutSetUp() to succeed, the fact that<br>
you have bs=-1 means that function wasn't called. It could be memory<br>
corruption or it could be some manual fiddling with the PetscLayout.<br>
Somehow, you have bypassed several guards in the code that are supposed<br>
to cause errors with invalid input like this.<br>
<br>
The local size of 0 should not cause a problem.<br>
</div></div></blockquote>
<br>
It looks like Matt is calling Sieve layout stuff in DMMeshCreateMatrix(). I don't see any calls to MatSetBlockSize.</blockquote><div><br></div><div>This is now fixed.</div><div><br></div><div>Problem: MatSetBlocksize() would check that blocksize was identical over all processes, but the blocksize passed</div>
<div>               into Mat***SetPreallocation() was not checked.</div><div><br></div><div>Soluion: Put the check into the preallocation functions.</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;">
<font color="#888888"><br>
Brad</font></blockquote></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>