[petsc-users] fieldsplit doesn't pass prefix to inner ksp

Matthew Knepley knepley at gmail.com
Fri Sep 26 09:26:57 CDT 2014


Here is the result for 3.5.2, which looks right to me:

(v3.5.2) *:/PETSc3/petsc/release-petsc-3.5.1/src/snes/examples/tutorials$
./ex19 -bf_pc_type fieldsplit -bf_snes_view -bf_pc_fieldsplit_type schur
-bf_pc_fieldsplit_0_fields 0,1,2 -bf_pc_fieldsplit_1_fields 3
-bf_pc_fieldsplit_schur_factorization_type upper
lid velocity = 0.0625, prandtl # = 1, grashof # = 1
SNES Object:(bf_) 1 MPI processes
  type: newtonls
  maximum iterations=50, maximum function evaluations=10000
  tolerances: relative=1e-08, absolute=1e-50, solution=1e-08
  total number of linear solver iterations=4
  total number of function evaluations=3
  SNESLineSearch Object:  (bf_)   1 MPI processes
    type: bt
      interpolation: cubic
      alpha=1.000000e-04
    maxstep=1.000000e+08, minlambda=1.000000e-12
    tolerances: relative=1.000000e-08, absolute=1.000000e-15,
lambda=1.000000e-08
    maximum iterations=40
  KSP Object:  (bf_)   1 MPI processes
    type: gmres
      GMRES: restart=30, using Classical (unmodified) Gram-Schmidt
Orthogonalization with no iterative refinement
      GMRES: 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:  (bf_)   1 MPI processes
    type: fieldsplit
      FieldSplit with Schur preconditioner, factorization UPPER
      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:        (bf_fieldsplit_0_)         1 MPI processes
          type: gmres
            GMRES: restart=30, using Classical (unmodified) Gram-Schmidt
Orthogonalization with no iterative refinement
            GMRES: 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:        (bf_fieldsplit_0_)         1 MPI processes
          type: ilu
            ILU: out-of-place factorization
            0 levels of fill
            tolerance for zero pivot 2.22045e-14
            using diagonal shift on blocks to prevent zero pivot [INBLOCKS]
            matrix ordering: natural
            factor fill ratio given 1, needed 1
              Factored matrix follows:
                Mat Object:                 1 MPI processes
                  type: seqaij
                  rows=48, cols=48
                  package used to perform factorization: petsc
                  total: nonzeros=576, allocated nonzeros=576
                  total number of mallocs used during MatSetValues calls =0
                    using I-node routines: found 16 nodes, limit used is 5
          linear system matrix = precond matrix:
          Mat Object:          (bf_fieldsplit_0_)           1 MPI processes
            type: seqaij
            rows=48, cols=48
            total: nonzeros=576, allocated nonzeros=576
            total number of mallocs used during MatSetValues calls =0
              using I-node routines: found 16 nodes, limit used is 5
      KSP solver for S = A11 - A10 inv(A00) A01
        KSP Object:        (bf_fieldsplit_temperature_)         1 MPI
processes
          type: gmres
            GMRES: restart=30, using Classical (unmodified) Gram-Schmidt
Orthogonalization with no iterative refinement
            GMRES: 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:        (bf_fieldsplit_temperature_)         1 MPI
processes
          type: ilu
            ILU: out-of-place factorization
            0 levels of fill
            tolerance for zero pivot 2.22045e-14
            using diagonal shift on blocks to prevent zero pivot [INBLOCKS]
            matrix ordering: natural
            factor fill ratio given 1, needed 1
              Factored matrix follows:
                Mat Object:                 1 MPI processes
                  type: seqaij
                  rows=16, cols=16
                  package used to perform factorization: petsc
                  total: nonzeros=64, allocated nonzeros=64
                  total number of mallocs used during MatSetValues calls =0
                    not using I-node routines
          linear system matrix followed by preconditioner matrix:
          Mat Object:          (bf_fieldsplit_temperature_)           1 MPI
processes
            type: schurcomplement
            rows=16, cols=16
              Schur complement A11 - A10 inv(A00) A01
              A11
                Mat Object:                (bf_fieldsplit_temperature_)
            1 MPI processes
                  type: seqaij
                  rows=16, cols=16
                  total: nonzeros=64, allocated nonzeros=64
                  total number of mallocs used during MatSetValues calls =0
                    not using I-node routines
              A10
                Mat Object:                 1 MPI processes
                  type: seqaij
                  rows=16, cols=48
                  total: nonzeros=192, allocated nonzeros=192
                  total number of mallocs used during MatSetValues calls =0
                    not using I-node routines
              KSP of A00
                KSP Object:                (bf_fieldsplit_0_)
  1 MPI processes
                  type: gmres
                    GMRES: restart=30, using Classical (unmodified)
Gram-Schmidt Orthogonalization with no iterative refinement
                    GMRES: 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:                (bf_fieldsplit_0_)
  1 MPI processes
                  type: ilu
                    ILU: out-of-place factorization
                    0 levels of fill
                    tolerance for zero pivot 2.22045e-14
                    using diagonal shift on blocks to prevent zero pivot
[INBLOCKS]
                    matrix ordering: natural
                    factor fill ratio given 1, needed 1
                      Factored matrix follows:
                        Mat Object:                         1 MPI processes
                          type: seqaij
                          rows=48, cols=48
                          package used to perform factorization: petsc
                          total: nonzeros=576, allocated nonzeros=576
                          total number of mallocs used during MatSetValues
calls =0
                            using I-node routines: found 16 nodes, limit
used is 5
                  linear system matrix = precond matrix:
                  Mat Object:                  (bf_fieldsplit_0_)
        1 MPI processes
                    type: seqaij
                    rows=48, cols=48
                    total: nonzeros=576, allocated nonzeros=576
                    total number of mallocs used during MatSetValues calls
=0
                      using I-node routines: found 16 nodes, limit used is 5
              A01
                Mat Object:                 1 MPI processes
                  type: seqaij
                  rows=48, cols=16
                  total: nonzeros=192, allocated nonzeros=192
                  total number of mallocs used during MatSetValues calls =0
                    using I-node routines: found 16 nodes, limit used is 5
          Mat Object:          (bf_fieldsplit_temperature_)           1 MPI
processes
            type: seqaij
            rows=16, cols=16
            total: nonzeros=64, allocated nonzeros=64
            total number of mallocs used during MatSetValues calls =0
              not using I-node routines
    linear system matrix = precond matrix:
    Mat Object:     1 MPI processes
      type: seqaij
      rows=64, cols=64, bs=4
      total: nonzeros=1024, allocated nonzeros=1024
      total number of mallocs used during MatSetValues calls =0
        using I-node routines: found 16 nodes, limit used is 5
Number of SNES iterations = 2

  Thanks,

     Matt


On Fri, Sep 26, 2014 at 8:52 AM, Matthew Knepley <knepley at gmail.com> wrote:

> On Fri, Sep 26, 2014 at 7:29 AM, anton <popov at uni-mainz.de> wrote:
>
>> Create preconditioner:
>>
>> PCCreate(PETSC_COMM_WORLD, &pc);
>> PCSetOptionsPrefix(pc, "bf_");
>> PCSetFromOptions(pc);
>>
>> Define fieldsplit options:
>>
>> -bf_pc_type fieldsplit
>> -bf_pc_fieldsplit_type SCHUR
>> -bf_pc_fieldsplit_schur_factorization_type UPPER
>>
>> Works OK.
>>
>> Set options for the first field solver:
>>
>> -bf_fieldsplit_0_ksp_type preonly
>> -bf_fieldsplit_0_pc_type lu
>>
>> Doesn't work (ignored), because "bf_" prefix isn't pass to inner solver
>> ksp (checked in the debugger).
>>
>> Indeed, the following works:
>>
>> -fieldsplit_0_ksp_type preonly
>> -fieldsplit_0_pc_type lu
>>
>> Observed with 3.5 but not with 3.4
>>
>
> I just tried this with master on SNES ex19, and got the correct result:
>
> knepley/feature-parallel-partition
> *$:/PETSc3/petsc/petsc-dev/src/snes/examples/tutorials$ ./ex19 -bf_pc_type
> fieldsplit -bf_snes_view
> ./ex19 -bf_pc_type fieldsplit -bf_snes_view
> lid velocity = 0.0625, prandtl # = 1, grashof # = 1
> SNES Object:(bf_) 1 MPI processes
>   type: newtonls
>   maximum iterations=50, maximum function evaluations=10000
>   tolerances: relative=1e-08, absolute=1e-50, solution=1e-08
>   total number of linear solver iterations=13
>   total number of function evaluations=3
>   SNESLineSearch Object:  (bf_)   1 MPI processes
>     type: bt
>       interpolation: cubic
>       alpha=1.000000e-04
>     maxstep=1.000000e+08, minlambda=1.000000e-12
>     tolerances: relative=1.000000e-08, absolute=1.000000e-15,
> lambda=1.000000e-08
>     maximum iterations=40
>   KSP Object:  (bf_)   1 MPI processes
>     type: gmres
>       GMRES: restart=30, using Classical (unmodified) Gram-Schmidt
> Orthogonalization with no iterative refinement
>       GMRES: 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:  (bf_)   1 MPI processes
>     type: fieldsplit
>       FieldSplit with MULTIPLICATIVE composition: total splits = 4
>       Solver info for each split is in the following KSP objects:
>       Split number 0 Defined by IS
>       KSP Object:      (bf_fieldsplit_x_velocity_)       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:      (bf_fieldsplit_x_velocity_)       1 MPI processes
>         type: ilu
>           ILU: out-of-place factorization
>           0 levels of fill
>           tolerance for zero pivot 2.22045e-14
>           using diagonal shift on blocks to prevent zero pivot [INBLOCKS]
>           matrix ordering: natural
>           factor fill ratio given 1, needed 1
>             Factored matrix follows:
>               Mat Object:               1 MPI processes
>                 type: seqaij
>                 rows=16, cols=16
>                 package used to perform factorization: petsc
>                 total: nonzeros=64, allocated nonzeros=64
>                 total number of mallocs used during MatSetValues calls =0
>                   not using I-node routines
>         linear system matrix = precond matrix:
>         Mat Object:        (bf_fieldsplit_x_velocity_)         1 MPI
> processes
>           type: seqaij
>           rows=16, cols=16
>           total: nonzeros=64, allocated nonzeros=64
>           total number of mallocs used during MatSetValues calls =0
>             not using I-node routines
>       Split number 1 Defined by IS
>       KSP Object:      (bf_fieldsplit_y_velocity_)       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:      (bf_fieldsplit_y_velocity_)       1 MPI processes
>         type: ilu
>           ILU: out-of-place factorization
>           0 levels of fill
>           tolerance for zero pivot 2.22045e-14
>           using diagonal shift on blocks to prevent zero pivot [INBLOCKS]
>           matrix ordering: natural
>           factor fill ratio given 1, needed 1
>             Factored matrix follows:
>               Mat Object:               1 MPI processes
>                 type: seqaij
>                 rows=16, cols=16
>                 package used to perform factorization: petsc
>                 total: nonzeros=64, allocated nonzeros=64
>                 total number of mallocs used during MatSetValues calls =0
>                   not using I-node routines
>         linear system matrix = precond matrix:
>         Mat Object:        (bf_fieldsplit_y_velocity_)         1 MPI
> processes
>           type: seqaij
>           rows=16, cols=16
>           total: nonzeros=64, allocated nonzeros=64
>           total number of mallocs used during MatSetValues calls =0
>             not using I-node routines
>       Split number 2 Defined by IS
>       KSP Object:      (bf_fieldsplit_Omega_)       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:      (bf_fieldsplit_Omega_)       1 MPI processes
>         type: ilu
>           ILU: out-of-place factorization
>           0 levels of fill
>           tolerance for zero pivot 2.22045e-14
>           using diagonal shift on blocks to prevent zero pivot [INBLOCKS]
>           matrix ordering: natural
>           factor fill ratio given 1, needed 1
>             Factored matrix follows:
>               Mat Object:               1 MPI processes
>                 type: seqaij
>                 rows=16, cols=16
>                 package used to perform factorization: petsc
>                 total: nonzeros=64, allocated nonzeros=64
>                 total number of mallocs used during MatSetValues calls =0
>                   not using I-node routines
>         linear system matrix = precond matrix:
>         Mat Object:        (bf_fieldsplit_Omega_)         1 MPI processes
>           type: seqaij
>           rows=16, cols=16
>           total: nonzeros=64, allocated nonzeros=64
>           total number of mallocs used during MatSetValues calls =0
>             not using I-node routines
>       Split number 3 Defined by IS
>       KSP Object:      (bf_fieldsplit_temperature_)       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:      (bf_fieldsplit_temperature_)       1 MPI processes
>         type: ilu
>           ILU: out-of-place factorization
>           0 levels of fill
>           tolerance for zero pivot 2.22045e-14
>           using diagonal shift on blocks to prevent zero pivot [INBLOCKS]
>           matrix ordering: natural
>           factor fill ratio given 1, needed 1
>             Factored matrix follows:
>               Mat Object:               1 MPI processes
>                 type: seqaij
>                 rows=16, cols=16
>                 package used to perform factorization: petsc
>                 total: nonzeros=64, allocated nonzeros=64
>                 total number of mallocs used during MatSetValues calls =0
>                   not using I-node routines
>         linear system matrix = precond matrix:
>         Mat Object:        (bf_fieldsplit_temperature_)         1 MPI
> processes
>           type: seqaij
>           rows=16, cols=16
>           total: nonzeros=64, allocated nonzeros=64
>           total number of mallocs used during MatSetValues calls =0
>             not using I-node routines
>     linear system matrix = precond matrix:
>     Mat Object:     1 MPI processes
>       type: seqaij
>       rows=64, cols=64, bs=4
>       total: nonzeros=1024, allocated nonzeros=1024
>       total number of mallocs used during MatSetValues calls =0
>         using I-node routines: found 16 nodes, limit used is 5
> Number of SNES iterations = 2
>
> I will try with 3.5.2.
>
>   Thanks,
>
>     Matt
>
>
>> Thanks.
>> Anton
>>
>
>
>
> --
> 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
>



-- 
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/20140926/919fa0b6/attachment-0001.html>


More information about the petsc-users mailing list