Makes perfect sense.
Thanks,
Pierre

> On 5 Nov 2017, at 2:52 AM, Jed Brown <j...@jedbrown.org> wrote:
> 
> PCSetUp_Composite propagates the outer matrices to the inner PCs.
> 
>  while (next) {
>    ierr = PCSetDM(next->pc,dm);CHKERRQ(ierr);
>    ierr = PCSetOperators(next->pc,pc->mat,pc->pmat);CHKERRQ(ierr);
>    next = next->next;
>  }
> 
> 
> You can get the desired behavior by calling PCSetUp before
> PCCompositeGetPC.
> 
> Perhaps the code should be changed to only propagate the outer matrices
> if they haven't been set yet.  But propagating matrices like this is a
> poor abstraction in general because it conflates configuration with the
> supply of problem information.  We don't want the FormJacobian in a time
> integrator to need to reach into the SNES -> KSP -> PCComposite to set a
> different operator; it doesn't even have enough information to do that.
> 
> Pierre Jolivet <pierre.joli...@enseeiht.fr> writes:
> 
>> I’d like to use PCCOMPOSITE to define a preconditioner as the sum of two 
>> preconditioners with different operators.
>> My current code works with a PCSHELL, but I don’t know how to setup the 
>> PCCOMPOSITE appropriately to get the same results.
>> Attached is a reproducer (using complex scalars).
>> $ ./SHELL_v_COMPOSITE -fSp S.bin -fMp Mp.bin -fLp Lp.bin -ksp_view -pc_type 
>> shell -ksp_type preonly 
>> $ ./SHELL_v_COMPOSITE -fSp S.bin -fMp Mp.bin -fLp Lp.bin -ksp_view -ksp_type 
>> preonly -pc_type composite -pc_composite_type additive -prefix_push sub_0_ 
>> -pc_type ksp -ksp_ksp_type preonly -ksp_pc_type jacobi -prefix_pop 
>> -prefix_push sub_1_ -pc_type ksp -ksp_ksp_type preonly -ksp_pc_type jacobi 
>> -prefix_pop
>> What looks weird to me is that for the PCSHELL, the operators for both PCs 
>> are of the correct size (36588 and 36814 nonzeros respectively), while for 
>> the PCCOMPOSITE, it looks like the same operator is duplicated (-ksp_view 
>> tells me that both have 36814 nonzeros which is not what I get with 
>> -mat_view ::ascii_info).
>> Any idea on how to fix this?
>> 
>> Thanks,
>> Pierre

Reply via email to