[firedrake] Extracting components of FieldSplit preconditioner

Eike Mueller e.mueller at bath.ac.uk
Fri Mar 20 16:23:53 GMT 2015


Dear firedrakers,

I’m trying to extract the components of the field split preconditioner to time them individually, but it fails. I suspect that I’mnot setting up some things, but it’s not obvious what to do. For example, if I do 

        ksp = up_solver.snes.getKSP()
        ksp.setUp()
        ksp_hdiv, ksp_schur = ksp.getPC().getFieldSplitSubKSP()

        # HDiv space
        ksp_hdiv.setUp()
        op_hdiv, op_pc_hdiv = ksp_hdiv.getOperators()
        pc_hdiv = ksp_hdiv.getPC()
        print pc_hdiv.getType()
        ndof = op_hdiv.getSizes()[0][0]
        x = PETSc.Vec()
        x.create()
        x.setSizes((ndof, None))
        x.setFromOptions()
        x.setArray(np.random.rand(ndof))
        y = x.duplicate()
        x.setArray(np.zeros(ndof))
        pc_hdiv.apply(x,y)
        with timed_region('pc_hdiv'):
            pc_hdiv.apply(x,y)

I get:

bjacobi
Traceback (most recent call last):
  File "driver.py", line 557, in <module>
    main(parameter_filename)
  File "driver.py", line 499, in main
    pc_hdiv.apply(x,y)
  File "PC.pyx", line 187, in petsc4py.PETSc.PC.apply (src/petsc4py.PETSc.c:132142)
petsc4py.PETSc.Error: error code 71
[0] PCApply() line 449 in /Users/eikemueller/PostDocBath/EllipticSolvers/petsc/src/ksp/pc/interface/precon.c
[0] PCApply_BJacobi_Singleblock() line 670 in /Users/eikemueller/PostDocBath/EllipticSolvers/petsc/src/ksp/pc/impls/bjacobi/bjacobi.c
[0] KSPSolve() line 542 in /Users/eikemueller/PostDocBath/EllipticSolvers/petsc/src/ksp/ksp/interface/itfunc.c
[0] KSPSetUp() line 330 in /Users/eikemueller/PostDocBath/EllipticSolvers/petsc/src/ksp/ksp/interface/itfunc.c
[0] PCSetUp() line 918 in /Users/eikemueller/PostDocBath/EllipticSolvers/petsc/src/ksp/pc/interface/precon.c
[0] PCSetUp_ILU() line 232 in /Users/eikemueller/PostDocBath/EllipticSolvers/petsc/src/ksp/pc/impls/factor/ilu/ilu.c
[0] MatLUFactorNumeric() line 2945 in /Users/eikemueller/PostDocBath/EllipticSolvers/petsc/src/mat/interface/matrix.c
[0] MatLUFactorNumeric_SeqAIJ() line 566 in /Users/eikemueller/PostDocBath/EllipticSolvers/petsc/src/mat/impls/aij/seq/aijfact.c
[0] MatPivotCheck() line 664 in /Users/eikemueller/PostDocBath/EllipticSolvers/petsc/include/petsc-private/matimpl.h
[0] MatPivotCheck_none() line 645 in /Users/eikemueller/PostDocBath/EllipticSolvers/petsc/include/petsc-private/matimpl.h
[0] Zero pivot in LU factorization: http://www.mcs.anl.gov/petsc/documentation/faq.html#ZeroPivot
[0] Zero pivot row 0 value 0 tolerance 2.22045e-14

so it looks to me like the PC is not set up correctly.

I use

                 'fieldsplit_0_ksp_type': 'preonly',
                 'fieldsplit_0_pc_type': 'bjacobi',
                 'fieldsplit_0_sub_pc_type': 'ilu’,

So I suspect the ILU has not been set up correctly

Thanks,

Eike

The solver parameters are:

 sparams={'pc_type': 'fieldsplit',
                 'pc_fieldsplit_type': 'schur',
                 'ksp_type': 'gmres',
                 'ksp_max_it': 100,
                 'ksp_rtol':self._tolerance,
                 'pc_fieldsplit_schur_fact_type': 'FULL',
                 'pc_fieldsplit_schur_precondition': 'selfp',
                 'fieldsplit_0_ksp_type': 'preonly',
                 'fieldsplit_0_pc_type': 'bjacobi',
                 'fieldsplit_0_sub_pc_type': 'ilu',
                 'fieldsplit_1_ksp_type': 'preonly',
                 'fieldsplit_1_pc_type': 'gamg',
                 'fieldsplit_1_mg_levels_ksp_type': 'chebyshev',
                 'fieldsplit_1_mg_levels_ksp_chebyshev_estimate_eigenvalues': True,
                 'fieldsplit_1_mg_levels_ksp_chebyshev_estimate_eigenvalues_random': True,
                 'fieldsplit_1_mg_levels_ksp_max_it': 1,
                 'fieldsplit_1_mg_levels_pc_type': 'bjacobi',
                 'fieldsplit_1_mg_levels_sub_pc_type': 'ilu',
                 'ksp_monitor': False}




More information about the firedrake mailing list