On 09/08/2013 03:38 PM, Dave May wrote:
Remove the option -fieldsplit_1_pc_type iccIt is clobbering the LU option Matt suggested you try first ( -fieldsplit_1_pc_type lu)
Dear Dave,
I also realized this but and changed that with -fieldsplit_2_pc_type icc but thanks for looking at that, need a break I guess ;-)
When debigging such solvers, you should always run with -ksp_view to check your solver is configured correctly.
Thanks for this
On 8 September 2013 15:32, Umut Tabak <[email protected] <mailto:[email protected]>> wrote: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. UmutMatt 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 theirexperiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener
