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.
Ok just for reference for future search on the topic for the others,
here is the correct set of options
./ex3 -pc_type fieldsplit -fieldsplit_1_pc_type lu
-fieldsplit_1_ksp_type preonly -fieldsplit_2_pc_type icc
-fieldsplit_2_ksp_type minres -fieldsplit_2_ksp_rtol 1e-4 -ksp_view
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