Hello Lawrence, Any luck finding the appropriate patch? Thanks, Pierre
> On 20 Mar 2020, at 10:53 PM, Lawrence Mitchell <[email protected]> wrote: > > > On Fri, 20 Mar 2020 at 21:07, Pierre Jolivet <[email protected] > <mailto:[email protected]>> wrote: > > >> On 19 Mar 2020, at 7:56 PM, Matthew Knepley <[email protected] >> <mailto:[email protected]>> wrote: >> >> On Fri, Mar 13, 2020 at 11:20 AM Pierre Jolivet <[email protected] >> <mailto:[email protected]>> wrote: >> >> >>> On 13 Mar 2020, at 2:36 PM, Matthew Knepley <[email protected] >>> <mailto:[email protected]>> wrote: >>> >>> On Fri, Mar 13, 2020 at 3:19 AM Pierre Jolivet <[email protected] >>> <mailto:[email protected]>> wrote: >>> >>> >>>> On 12 Mar 2020, at 11:40 PM, Matthew Knepley <[email protected] >>>> <mailto:[email protected]>> wrote: >>>> >>>> On Thu, Mar 12, 2020 at 5:59 PM Jed Brown <[email protected] >>>> <mailto:[email protected]>> wrote: >>>> Pierre Jolivet <[email protected] >>>> <mailto:[email protected]>> writes: >>>> >>>> > Hello, >>>> > Has there been any follow-up on this >>>> > https://lists.mcs.anl.gov/pipermail/petsc-users/2015-January/024020.html >>>> > <https://lists.mcs.anl.gov/pipermail/petsc-users/2015-January/024020.html> >>>> > >>>> > <https://lists.mcs.anl.gov/pipermail/petsc-users/2015-January/024020.html >>>> > >>>> > <https://lists.mcs.anl.gov/pipermail/petsc-users/2015-January/024020.html>>? >>>> > Given a 3x3 MatNest A = [A_00,0,0 ; 0,A_11,0 ; 0,0,A_22], I’d like to >>>> > setup a two-way fieldsplit coupling [A_00,0 ; 0,A_11] and [A_22] but I >>>> > can’t figure out the proper options. >>>> >>>> Are you looking for a Schur split or additive/multiplicative? >>> >>> Don’t know yet which will perform best, do you have a specific solution in >>> mind for one scenario or the other? >>> I was mostly wondering if it was possible in a general context, not taking >>> -pc_fieldsplit_type into account. >>> >>>> -pc_fieldsplit_field_0 0,1 -pc_fieldsplit_field_1 2 -pc_fieldsplit_type >>>> schur >>> >>> These flags, used with my .cpp, yield: >>> [0]PETSC ERROR: Arguments are incompatible >>> [0]PETSC ERROR: To use Schur complement preconditioner you must have >>> exactly 2 fields >>> If I use -pc_fieldsplit_%d_fields <a,b,..> as advocated in the manual >>> (instead of -pc_fieldsplit_field_%d as you suggested), I get the same error. >>> >>> Okay it is -pc_fieldsplit_%d_fields. When you use this, how many fields >>> does it think you have? >> >> Three. >> In case it’s not clear, the MWE is at the bottom of my first email >> (nest.cpp). >> $ mpicxx nest.cpp -I$PETSC_DIR/$PETSC_ARCH/include -I$PETSC_DIR/include >> -L$PETSC_DIR/$PETSC_ARCH/lib -lpetsc >> $ ./a.out -pc_type fieldsplit -pc_fieldsplit_0_fields 0,1 >> -pc_fieldsplit_1_fields 2 -pc_fieldsplit_type schur >> […] >> [0]PETSC ERROR: Arguments are incompatible >> [0]PETSC ERROR: To use Schur complement preconditioner you must have exactly >> 2 fields >> […] >> Split info: >> Split number 0 Defined by IS >> Split number 1 Defined by IS >> Split number 2 Defined by IS >> […] >> >> I see now. If you call PCFieldsplitSetIS(), this overrides anything else. We >> do not even try to discover the split. If you want >> a split determined by command line arguments, you have to defer the split. >> It looks like it can get splits from the MatNest, >> so just do not call SetIS(). > > So, I’ve commented the three PCFieldSplitSetIS. > $ ./a.out -pc_type fieldsplit -pc_fieldsplit_0_fields 0,1 > -pc_fieldsplit_1_fields 2 -pc_fieldsplit_block_size 3 > is starting to give me something meaningful in the KSPView, i.e.: > […] > Split number 0 Fields 0, 1 > […] > Split number 1 Fields 2 > But it’s surrounded by a bunch of errors such as: > [0]PETSC ERROR: Arguments are incompatible > [0]PETSC ERROR: Could not find index set > > Do I need some other command-line options? > > If you have a flat 3x3 matnest, the index set matching will not find a subset > that is anything other than a 1-field split. I have a patch lying around that > i think fixes this. I can try and dig it out on Monday. > > Lawrence
