[petsc-users] [PATCH 2/2] Call KSPSetFromOptions before setting fieldsplit-specific options

Umut Tabak u.tabak at tudelft.nl
Sun Sep 8 08:32:49 CDT 2013


On 09/08/2013 03:00 PM, Matthew Knepley wrote:
>
>
> If you want to solve hard systems, you must learn to debug a solver 
> yourself. What does "just hangs" mean? Start with a full
> Schur complement factorization with LU on block 1 and a tiny tolerance 
> on block 2. This will converge in 1 iterate. Then
> start slowly making the preconditioner weaker.
Hi Matt,

Thanks for the suggestion but I did not completely understand the 
options to use for this, I am still learning the fieldsplit interface. 
It was my mistake to not to give more in formation on what 'Just hangs' 
means, sorry.

For the previous message: that meant extremely slow iterations, the 
iteration process was not advancing at all.

After your reply and looking at the fieldsplit options a bit more, I 
came up with these set of options, now iterations are going fast but the 
decrease in relative residual is so slow. But apparently this does not 
converge in 1 iteration, I am still mistaken at some point.

./ex3 -pc_type fieldsplit -pc_fieldsplit_type schur 
-fieldsplit_1_pc_type lu -fieldsplit_1_ksp_type preonly 
-fieldsplit_1_pc_type icc -fieldsplit_2_ksp_type minres 
-fieldsplit_2_ksp_rtol 1e-8 -pc_fieldsplit_schur_factorization_type full 
-ksp_monitor_true_residual

Maybe you can help me at this point again.

Thanks.
Umut

>
>    Matt
>
>     The system is a symmetric system in this case given as
>
>     A =
>     A11 C
>     C^T A22
>
>     C is of size 1490X2432
>
>     Could you please comment on this point for me, do I still have an
>     error on the problem setup or on the usage of the options?
>
>     BR,
>     Umut
>
>
>          
>          ISCreateBlock(PETSC_COMM_SELF,bs,n1,inputindices,PETSC_COPY_VALUES,&is_row1);
>          
>          ISCreateBlock(PETSC_COMM_SELF,bs,n2,inputindices,PETSC_COPY_VALUES,&is_row2);
>
>         We could check for this case, but it would require a little
>         code and
>         isn't currently done.  This is probably what you wanted:
>
>         diff --git i/ex2.c w/ex2.c
>         index 94cea2c..0cce3e6 100644
>         --- i/ex2.c
>         +++ w/ex2.c
>         @@ -45,7 +45,7 @@ int main(int argc,char **args)
>             PetscInt bs = 2, n1=1, n2=1, inputindices[]={0,1}; /*
>         block size is 2 */
>                  
>         ISCreateBlock(PETSC_COMM_SELF,bs,n1,inputindices,PETSC_COPY_VALUES,&is_row1);
>         -
>          ISCreateBlock(PETSC_COMM_SELF,bs,n2,inputindices,PETSC_COPY_VALUES,&is_row2);
>         +
>          ISCreateBlock(PETSC_COMM_SELF,bs,n2,inputindices+n1,PETSC_COPY_VALUES,&is_row2);
>               ISView(is_row1,PETSC_VIEWER_STDOUT_SELF);
>             ISView(is_row2,PETSC_VIEWER_STDOUT_SELF);
>
>
>
>
>
> -- 
> What most experimenters take for granted before they begin their 
> experiments is infinitely more interesting than any results to which 
> their experiments lead.
> -- Norbert Wiener

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20130908/767f3e58/attachment.html>


More information about the petsc-users mailing list