Are you thinking of using PCSetModifyMatrices()? Actually, this brings up another issue (now on petsc-dev).<div>Should this callback be attached to a Mat, instead of a PC?  Then MatGetSubMatrices() can use this callback on each of the extracted submatrices, if necessary.  In the case of a KKT system, it would then set the nontrivial block size on the primal submatrix. </div>

<div><br></div><div>Dmitry.<br><div><br><div class="gmail_quote">On Wed, Apr 11, 2012 at 3:33 PM, Jed Brown <span dir="ltr"><<a href="mailto:jedbrown@mcs.anl.gov">jedbrown@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">

<p>The original matrix might not have blocks, but that does not mean that a submatrix does not have blocks.</p><div class="HOEnZb"><div class="h5">
<div class="gmail_quote">On Apr 11, 2012 3:30 PM, "Mark F. Adams" <<a href="mailto:mark.adams@columbia.edu" target="_blank">mark.adams@columbia.edu</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div style="word-wrap:break-word"><br><div><div>On Apr 11, 2012, at 11:24 AM, Jed Brown wrote:</div><br><blockquote type="cite"><div class="gmail_quote">On Wed, Apr 11, 2012 at 12:01, Mark F. Adams <span dir="ltr"><<a href="mailto:mark.adams@columbia.edu" target="_blank">mark.adams@columbia.edu</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>eed to know the block size (eg, 4).  I get this info by having the user set the block size of the matrix.  This is what you should do for the non-contact test.  This will not work with contact equations ... or at least it does not make sense.  How can I get this info?</div>



<div><br></div><div>1) hard wire it: if I see 7 vectors then bs=4.</div></blockquote><div><br></div><div>Hell no.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div><br></div><div>2) have setNearNullSpace take a block size, and set the vector block size, which I can get like I do from the matrix now.</div></blockquote></div><br><div>No.</div><div><br></div><div>When you call MatGetSubMatrix(), you will get back a matrix that has a near null space (and a block size if that happens to be relevant; there will not be a block size if deformation and thermodynamics are in different spaces). Don't worry about how that is done, just call MatGetSubMatrix().</div>



</blockquote></div><br><div>OK, I don't see how you know that the block size is 4 ... do you call MatSetBlockSize even if there are constraints that are not blocked?</div><div><br></div></div></blockquote></div>
</div></div></blockquote></div><br></div></div>