<div dir="ltr">I'd be interested in implementing this, I think I should have some time to spend on it in a few weeks. I suppose the ISSubset function should determine which ISs were used to make up a third IS? Can this be done by having ISSum attach a list of pointers to the constituent ISs to the summed IS for retrieval by ISSubset?<div><br></div><div>thanks</div><div>Colin </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 12, 2015 at 1:15 AM, Jed Brown <span dir="ltr"><<a href="mailto:jed@jedbrown.org" target="_blank">jed@jedbrown.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">Colin McAuliffe <<a href="mailto:cjm2176@columbia.edu">cjm2176@columbia.edu</a>> writes:<br>
<br>
> Dear all, I have a four field problem with dof structure stored in a DM<br>
> shell. The matrix is a MatNest. This works fine except for when I try to<br>
> group fields.<br>
<br>
</span>Colin, MatGetSubMatrix_Nest does not implement the case of unions of<br>
index sets.  The relevant comparison code is in the private function<br>
MatNestFindIS(), just before the line on which your error message was<br>
generated.  It's possible to make this function check whether the given<br>
index set is a union of basic index sets constituting the MatNest.  But<br>
checking for equality with every subset is not scalable in the number of<br>
blocks, so we'd need something like an ISSubset() function.<br>
<br>
If you just want to get your work done, I recommending not using<br>
MatNest.  If you want to contribute an interesting feature to PETSc, we<br>
can offer guidance on the implementation.<br>
<div class="HOEnZb"><div class="h5"><br>
> For example the following commands<br>
><br>
> -ksp_type gmres<br>
>    -pc_type fieldsplit<br>
>    -pc_fieldsplit_type multiplicative<br>
>       -pc_fieldsplit_0_fields 0,1<br>
>           -fieldsplit_0_ksp_type preonly<br>
>           -fieldsplit_0_pc_type lu<br>
>        -pc_fieldsplit_1_fields 2,3<br>
>           -fieldsplit_1_ksp_type preonly<br>
>           -fieldsplit_1_pc_type ilu<br>
><br>
> results in the following error<br>
><br>
> [0]PETSC ERROR: --------------------- Error Message<br>
> --------------------------------------------------------------<br>
> [0]PETSC ERROR: Arguments are incompatible<br>
> [0]PETSC ERROR: Could not find index set<br>
> [0]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html" target="_blank">http://www.mcs.anl.gov/petsc/documentation/faq.html</a> for<br>
> trouble shooting.<br>
> [0]PETSC ERROR: Petsc Release Version 3.5.2, Sep, 08, 2014<br>
> [0]PETSC ERROR:<br>
> /Users/Christina/Desktop/COLIN/Work/feapver83/ver83/parfeap/feap on a<br>
> gnu-dbg named new-host.home by christina Mon Jan 12 00:36:52 2015<br>
> [0]PETSC ERROR: Configure options --with-debugging=1<br>
> --with-shared-libraries=0 --with-mpi-dir=/usr/local<br>
> --with-parmetis-dir=/usr/local --with-metis-dir=/usr/local<br>
> --with-hypre-dir=/usr/local --download-suitesparse<br>
> --with-external-packages-dir=/usr/local<br>
> [0]PETSC ERROR: #1 MatNestFindIS() line 310 in<br>
> /Users/Christina/Desktop/COLIN/Work/petsc-3.5.2/src/mat/impls/nest/matnest.c<br>
> [0]PETSC ERROR: #2 MatNestFindSubMat() line 371 in<br>
> /Users/Christina/Desktop/COLIN/Work/petsc-3.5.2/src/mat/impls/nest/matnest.c<br>
> [0]PETSC ERROR: #3 MatGetSubMatrix_Nest() line 387 in<br>
> /Users/Christina/Desktop/COLIN/Work/petsc-3.5.2/src/mat/impls/nest/matnest.c<br>
> [0]PETSC ERROR: #4 MatGetSubMatrix() line 7345 in<br>
> /Users/Christina/Desktop/COLIN/Work/petsc-3.5.2/src/mat/interface/matrix.c<br>
> [0]PETSC ERROR: #5 PCSetUp_FieldSplit() line 559 in<br>
> /Users/Christina/Desktop/COLIN/Work/petsc-3.5.2/src/ksp/pc/impls/fieldsplit/fieldsplit.c<br>
> [0]PETSC ERROR: #6 PCSetUp() line 902 in<br>
> /Users/Christina/Desktop/COLIN/Work/petsc-3.5.2/src/ksp/pc/interface/precon.c<br>
> [0]PETSC ERROR: #7 KSPSetUp() line 305 in<br>
> /Users/Christina/Desktop/COLIN/Work/petsc-3.5.2/src/ksp/ksp/interface/itfunc.c<br>
> [0]PETSC ERROR: #8 KSPSolve() line 417 in<br>
> /Users/Christina/Desktop/COLIN/Work/petsc-3.5.2/src/ksp/ksp/interface/itfunc.c<br>
><br>
> My guess is that petsc is expecting a MatNest corresponding to the outer<br>
> field groupings instead of individual submatrices. Is it possible to<br>
> resolve this, preferably from the command line?<br>
><br>
> I should also mention that grouping and recursive field split works fine<br>
> with the same DM shell and a MATAIJ, however a significant amount of time<br>
> is spent copying the submatrices and I'd prefer to avoid that.<br>
><br>
> Thanks and all the best,<br>
> Colin<br>
</div></div></blockquote></div><br></div>