[petsc-users] Confusing Schur preconditioner behaviour

Dave May dave.mayhem23 at gmail.com
Mon Mar 18 17:53:33 CDT 2019


On Mon, 18 Mar 2019 at 20:14, Cotter, Colin J via petsc-users <
petsc-users at mcs.anl.gov> wrote:

> 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.
>

In the KSP view your sent I see lines
"Preconditioner for the Schur complement formed from A11"
which indicates your custom Schur complement preconditioner is not being
used.

It doesn't exactly explain what you observe but the solver appears to not
be configured as you described / expected.


Thanks
Dave



> 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/57210073/attachment-0001.html>


More information about the petsc-users mailing list