[petsc-users] Confusing Schur preconditioner behaviour
Cotter, Colin J
colin.cotter at imperial.ac.uk
Mon Mar 18 15:14:48 CDT 2019
Dear petsc-users,
I'm solving a 2x2 block system, for which I can construct the Schur complement analytically (through compatible FEM stuff),
which I can pass as the preconditioning matrix.
When using gmres on the outer iteration, and preonly+lu on the inner iterations with a Schur complement preconditioner,
I see convergence in 1 iteration as expected. However, when I set gmres+lu on the inner iteration for S, I see several iterations.
This seems strange to me, as the first result seems to confirm that I have an exact Schur complement, but the second result
implies not.
What could be going on here?
I've appended output to the bottom of this message, first the preonly+lu and then for gmres+lu.
all the best
--Colin
Linear firedrake_0_fieldsplit_1_ solve converged due to CONVERGED_ITS iterations 1
Residual norms for firedrake_0_ solve.
0 KSP preconditioned resid norm 4.985448866758e+00 true resid norm 1.086016610848e-03 ||r(i)||/||b|| 1.000000000000e+00
Linear firedrake_0_fieldsplit_1_ solve converged due to CONVERGED_ITS iterations 1
1 KSP preconditioned resid norm 1.245615753306e-13 true resid norm 2.082000915439e-14 ||r(i)||/||b|| 1.917098591903e-11
KSP Object: (firedrake_0_) 1 MPI processes
type: gmres
restart=30, using Classical (unmodified) Gram-Schmidt Orthogonalization with no iterative refinement
happy breakdown tolerance 1e-30
maximum iterations=10000, initial guess is zero
tolerances: relative=1e-07, absolute=1e-50, divergence=10000.
left preconditioning
using PRECONDITIONED norm type for convergence test
PC Object: (firedrake_0_) 1 MPI processes
type: fieldsplit
FieldSplit with Schur preconditioner, factorization FULL
Preconditioner for the Schur complement formed from A11
Split info:
Split number 0 Defined by IS
Split number 1 Defined by IS
KSP solver for A00 block
KSP Object: (firedrake_0_fieldsplit_0_) 1 MPI processes
type: preonly
maximum iterations=10000, initial guess is zero
tolerances: relative=1e-05, absolute=1e-50, divergence=10000.
left preconditioning
using NONE norm type for convergence test
PC Object: (firedrake_0_fieldsplit_0_) 1 MPI processes
type: lu
out-of-place factorization
tolerance for zero pivot 2.22045e-14
matrix ordering: nd
factor fill ratio given 5., needed 1.
Factored matrix follows:
Mat Object: 1 MPI processes
type: seqaij
rows=6144, cols=6144
package used to perform factorization: petsc
total: nonzeros=18432, allocated nonzeros=18432
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 2048 nodes, limit used is 5
linear system matrix = precond matrix:
Mat Object: (firedrake_0_fieldsplit_0_) 1 MPI processes
type: seqaij
rows=6144, cols=6144
total: nonzeros=18432, allocated nonzeros=18432
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 2048 nodes, limit used is 5
KSP solver for S = A11 - A10 inv(A00) A01
KSP Object: (firedrake_0_fieldsplit_1_) 1 MPI processes
type: preonly
maximum iterations=10000, initial guess is zero
tolerances: relative=1e-05, absolute=1e-50, divergence=10000.
left preconditioning
using NONE norm type for convergence test
PC Object: (firedrake_0_fieldsplit_1_) 1 MPI processes
type: lu
out-of-place factorization
tolerance for zero pivot 2.22045e-14
matrix ordering: nd
factor fill ratio given 5., needed 5.09173
Factored matrix follows:
Mat Object: 1 MPI processes
type: seqaij
rows=15360, cols=15360
package used to perform factorization: petsc
total: nonzeros=1360836, allocated nonzeros=1360836
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 5120 nodes, limit used is 5
linear system matrix followed by preconditioner matrix:
Mat Object: (firedrake_0_fieldsplit_1_) 1 MPI processes
type: schurcomplement
rows=15360, cols=15360
Schur complement A11 - A10 inv(A00) A01
A11
Mat Object: (firedrake_0_fieldsplit_1_) 1 MPI processes
type: seqaij
rows=15360, cols=15360
total: nonzeros=267264, allocated nonzeros=267264
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 5120 nodes, limit used is 5
A10
Mat Object: 1 MPI processes
type: seqaij
rows=15360, cols=6144
total: nonzeros=73728, allocated nonzeros=73728
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 5120 nodes, limit used is 5
KSP of A00
KSP Object: (firedrake_0_fieldsplit_0_) 1 MPI processes
type: preonly
maximum iterations=10000, initial guess is zero
tolerances: relative=1e-05, absolute=1e-50, divergence=10000.
left preconditioning
using NONE norm type for convergence test
PC Object: (firedrake_0_fieldsplit_0_) 1 MPI processes
type: lu
out-of-place factorization
tolerance for zero pivot 2.22045e-14
matrix ordering: nd
factor fill ratio given 5., needed 1.
Factored matrix follows:
Mat Object: 1 MPI processes
type: seqaij
rows=6144, cols=6144
package used to perform factorization: petsc
total: nonzeros=18432, allocated nonzeros=18432
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 2048 nodes, limit used is 5
linear system matrix = precond matrix:
Mat Object: (firedrake_0_fieldsplit_0_) 1 MPI processes
type: seqaij
rows=6144, cols=6144
total: nonzeros=18432, allocated nonzeros=18432
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 2048 nodes, limit used is 5
A01
Mat Object: 1 MPI processes
type: seqaij
rows=6144, cols=15360
total: nonzeros=73728, allocated nonzeros=73728
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 2048 nodes, limit used is 5
Mat Object: (firedrake_0_fieldsplit_1_) 1 MPI processes
type: seqaij
rows=15360, cols=15360
total: nonzeros=267264, allocated nonzeros=267264
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 5120 nodes, limit used is 5
linear system matrix followed by preconditioner matrix:
Mat Object: (firedrake_0_) 1 MPI processes
type: nest
rows=21504, cols=21504
Matrix object:
type=nest, rows=2, cols=2
MatNest structure:
(0,0) : type=seqaij, rows=15360, cols=15360
(0,1) : type=seqaij, rows=15360, cols=6144
(1,0) : type=seqaij, rows=6144, cols=15360
(1,1) : type=seqaij, rows=6144, cols=6144
Mat Object: (firedrake_0_) 1 MPI processes
type: nest
rows=21504, cols=21504
Matrix object:
type=nest, rows=2, cols=2
MatNest structure:
(0,0) : prefix="firedrake_0_fieldsplit_1_", type=seqaij, rows=15360, cols=15360
(0,1) : type=seqaij, rows=15360, cols=6144
(1,0) : type=seqaij, rows=6144, cols=15360
(1,1) : prefix="firedrake_0_fieldsplit_0_", type=seqaij, rows=6144, cols=6144
=====
Residual norms for firedrake_0_fieldsplit_1_ solve.
0 KSP preconditioned resid norm 8.819238435108e-02 true resid norm 1.797571993221e-01 ||r(i)||/||b|| 1.000000000000e+00
1 KSP preconditioned resid norm 1.025167319984e-02 true resid norm 3.340583874349e-02 ||r(i)||/||b|| 1.858386694356e-01
2 KSP preconditioned resid norm 1.235104644359e-03 true resid norm 8.148396804822e-03 ||r(i)||/||b|| 4.533001646417e-02
3 KSP preconditioned resid norm 1.624748553125e-04 true resid norm 1.612221957927e-03 ||r(i)||/||b|| 8.968886720573e-03
4 KSP preconditioned resid norm 2.233373761266e-05 true resid norm 3.292437172839e-04 ||r(i)||/||b|| 1.831602397710e-03
5 KSP preconditioned resid norm 1.895393184017e-06 true resid norm 4.091207337005e-05 ||r(i)||/||b|| 2.275962994770e-04
6 KSP preconditioned resid norm 1.699212495729e-07 true resid norm 3.851173419652e-06 ||r(i)||/||b|| 2.142430697728e-05
Linear firedrake_0_fieldsplit_1_ solve converged due to CONVERGED_RTOL iterations 6
KSP Object: (firedrake_0_) 1 MPI processes
type: preonly
maximum iterations=10000, initial guess is zero
tolerances: relative=1e-05, absolute=1e-50, divergence=10000.
left preconditioning
using NONE norm type for convergence test
PC Object: (firedrake_0_) 1 MPI processes
type: fieldsplit
FieldSplit with Schur preconditioner, factorization FULL
Preconditioner for the Schur complement formed from A11
Split info:
Split number 0 Defined by IS
Split number 1 Defined by IS
KSP solver for A00 block
KSP Object: (firedrake_0_fieldsplit_0_) 1 MPI processes
type: preonly
maximum iterations=10000, initial guess is zero
tolerances: relative=1e-05, absolute=1e-50, divergence=10000.
left preconditioning
using NONE norm type for convergence test
PC Object: (firedrake_0_fieldsplit_0_) 1 MPI processes
type: lu
out-of-place factorization
tolerance for zero pivot 2.22045e-14
matrix ordering: nd
factor fill ratio given 5., needed 1.
Factored matrix follows:
Mat Object: 1 MPI processes
type: seqaij
rows=6144, cols=6144
package used to perform factorization: petsc
total: nonzeros=18432, allocated nonzeros=18432
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 2048 nodes, limit used is 5
linear system matrix = precond matrix:
Mat Object: (firedrake_0_fieldsplit_0_) 1 MPI processes
type: seqaij
rows=6144, cols=6144
total: nonzeros=18432, allocated nonzeros=18432
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 2048 nodes, limit used is 5
KSP solver for S = A11 - A10 inv(A00) A01
KSP Object: (firedrake_0_fieldsplit_1_) 1 MPI processes
type: gmres
restart=30, using Classical (unmodified) Gram-Schmidt Orthogonalization with no iterative refinement
happy breakdown tolerance 1e-30
maximum iterations=10000, initial guess is zero
tolerances: relative=1e-05, absolute=1e-50, divergence=10000.
left preconditioning
using PRECONDITIONED norm type for convergence test
PC Object: (firedrake_0_fieldsplit_1_) 1 MPI processes
type: lu
out-of-place factorization
tolerance for zero pivot 2.22045e-14
matrix ordering: nd
factor fill ratio given 5., needed 5.09173
Factored matrix follows:
Mat Object: 1 MPI processes
type: seqaij
rows=15360, cols=15360
package used to perform factorization: petsc
total: nonzeros=1360836, allocated nonzeros=1360836
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 5120 nodes, limit used is 5
linear system matrix followed by preconditioner matrix:
Mat Object: (firedrake_0_fieldsplit_1_) 1 MPI processes
type: schurcomplement
rows=15360, cols=15360
Schur complement A11 - A10 inv(A00) A01
A11
Mat Object: (firedrake_0_fieldsplit_1_) 1 MPI processes
type: seqaij
rows=15360, cols=15360
total: nonzeros=267264, allocated nonzeros=267264
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 5120 nodes, limit used is 5
A10
Mat Object: 1 MPI processes
type: seqaij
rows=15360, cols=6144
total: nonzeros=73728, allocated nonzeros=73728
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 5120 nodes, limit used is 5
KSP of A00
KSP Object: (firedrake_0_fieldsplit_0_) 1 MPI processes
type: preonly
maximum iterations=10000, initial guess is zero
tolerances: relative=1e-05, absolute=1e-50, divergence=10000.
left preconditioning
using NONE norm type for convergence test
PC Object: (firedrake_0_fieldsplit_0_) 1 MPI processes
type: lu
out-of-place factorization
tolerance for zero pivot 2.22045e-14
matrix ordering: nd
factor fill ratio given 5., needed 1.
Factored matrix follows:
Mat Object: 1 MPI processes
type: seqaij
rows=6144, cols=6144
package used to perform factorization: petsc
total: nonzeros=18432, allocated nonzeros=18432
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 2048 nodes, limit used is 5
linear system matrix = precond matrix:
Mat Object: (firedrake_0_fieldsplit_0_) 1 MPI processes
type: seqaij
rows=6144, cols=6144
total: nonzeros=18432, allocated nonzeros=18432
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 2048 nodes, limit used is 5
A01
Mat Object: 1 MPI processes
type: seqaij
rows=6144, cols=15360
total: nonzeros=73728, allocated nonzeros=73728
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 2048 nodes, limit used is 5
Mat Object: (firedrake_0_fieldsplit_1_) 1 MPI processes
type: seqaij
rows=15360, cols=15360
total: nonzeros=267264, allocated nonzeros=267264
total number of mallocs used during MatSetValues calls =0
using I-node routines: found 5120 nodes, limit used is 5
linear system matrix followed by preconditioner matrix:
Mat Object: (firedrake_0_) 1 MPI processes
type: nest
rows=21504, cols=21504
Matrix object:
type=nest, rows=2, cols=2
MatNest structure:
(0,0) : type=seqaij, rows=15360, cols=15360
(0,1) : type=seqaij, rows=15360, cols=6144
(1,0) : type=seqaij, rows=6144, cols=15360
(1,1) : type=seqaij, rows=6144, cols=6144
Mat Object: (firedrake_0_) 1 MPI processes
type: nest
rows=21504, cols=21504
Matrix object:
type=nest, rows=2, cols=2
MatNest structure:
(0,0) : prefix="firedrake_0_fieldsplit_1_", type=seqaij, rows=15360, cols=15360
(0,1) : type=seqaij, rows=15360, cols=6144
(1,0) : type=seqaij, rows=6144, cols=15360
(1,1) : prefix="firedrake_0_fieldsplit_0_", type=seqaij, rows=6144, cols=6144
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20190318/78068b9c/attachment-0001.html>
More information about the petsc-users
mailing list