<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>For MatIS, I would be fine with creating a new MatIS using the same local matrices on a subcommunicator, then MatConvert'ing it to AIJ (that will do assembly), and discarding the temporary subcomm MatIS.</div>


</blockquote></div><br>So, I need to implement MatConvert_MATIS_AIJ.<br><br>I need such a procedure to create a new MATIS representing the BDDC coarse matrix, not to assemble a parallel matrix. Note that the converted matrix should be SEQAIJ for actual implementation of PETSc MATIS. It seems to me that the best logic should then be<br>
<br>if(im_active_on_the_next_level) MatCreateSEQAIJ(PETSC_COMM_SELF,A_MATIS_NEW...<br>MatConvert(A_MATIS,MATAIJ,MAT_REUSE_MATRIX,&A_MATIS_NEW)<br><br>Mat_Convert_MATIS_AIJ should than detect the only process having already created the converted matrix. In case you need a parallel AIJ matrix , then the call should be<br>
<br>MatConvert(A_MATIS,MATAIJ,MAT_INITIAL_MATRIX,&A_MATIS_NEW)<br>
<br>and A_MATIS_NEW should than be created by the procedure and take the same comm of A_MATIS. Is it fine for you? <br clear="all"><br>-- <br>Stefano<br>