<p>If you make a consistent RHS, then ICC with a positive definite shift might be fine. You could certainly define a dynamic ordering that puts the &quot;good&quot; blocks first. If the transformation can identify the bad blocks, you could solve the embedded problem with PCREDISTRIBUTE.</p>

<div class="gmail_quote">On Jan 9, 2012 6:24 PM, &quot;Geoffrey Irving&quot; &lt;<a href="mailto:irving@naml.us">irving@naml.us</a>&gt; wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Mon, Jan 9, 2012 at 3:20 PM, Geoffrey Irving &lt;<a href="mailto:irving@naml.us">irving@naml.us</a>&gt; wrote:<br>
&gt; Ah, right.  I&#39;m using incomplete Cholesky as a preconditioner, which<br>
&gt; usually won&#39;t be stable on the subspace.  The subspace is derived from<br>
&gt; freezing the normal velocity of points involved in collisions, so it<br>
&gt; has no useful algebraic properties.<br>
&gt;<br>
&gt; It&#39;s not too difficult to symbolically apply P to A (it won&#39;t change<br>
&gt; the sparsity), but unfortunately that would make the sparsity pattern<br>
&gt; change each iteration, which would significantly increase the cost of<br>
&gt; ICC.<br>
<br>
Sorry, that sentence was poorly phrased.  I meant that it&#39;s not too<br>
difficult to symbolically eliminate the relevant subspace from A, but<br>
that this would produce a matrix whose size changes each time around.<br>
I could also replace A with PAP directly without changing the sparsity<br>
pattern, but I imagine incomplete Cholesky might choke on the result,<br>
which would be a 3x3 block matrix with a lot of singular diagonal<br>
blocks.<br>
<br>
Geoffrey<br>
</blockquote></div>