[petsc-users] Preconditioners for KSPSolveTranspose() in linear elasticity

Matthew Knepley knepley at gmail.com
Wed Jan 20 11:47:59 CST 2016


On Wed, Jan 20, 2016 at 11:35 AM, Salazar De Troya, Miguel <
salazardetro1 at llnl.gov> wrote:

> Hello
>
> I am trying to speed up a two dimensional linear elasticity problem with
> isotropic and heterogeneous properties. It is a topology optimization
> problem, therefore some regions have an almost zero stiffness whereas other
> regions have a higher value, making the matrix ill-conditioned. So far,
> from having searched mail lists on similar problems, I have come up with
> the following CL options to pass to the petsc solver (two dimensional
> problem):
>
> -ksp_type cg -pc_type fieldsplit -pc_fieldsplit_block_size 2
> -fieldsplit_pc_type hypre -fieldsplit_pc_hypre_type boomeramg
> -fieldsplit_pc_hypre_boomeramg_strong_threshold 0.7 -pc_fieldsplit_0 0,1
> -pc_fieldsplit_type symmetric_multiplicative -ksp_atol 1e-10
>
> It works reasonably well and shows similar number of iterations for
> different levels of refinement. However, it does not converge when I use
> the same options for KSPSolveTranspose(). I obtain DIVERGED_INDEFINITE_PC
> after three iterations. I believe this has to do with the field split,
> but I do not where to start. I am using libMesh which interfaces with petsc
> through the file petsc_linear solver.C (
> http://libmesh.github.io/doxygen/classlibMesh_1_1PetscLinearSolver.html#a4e66cc138b52e80e93a75e55315245ee)
> The KSPSolveTranspose() is called in adjoint_solve(). Changing that to
> KSPSolve() solves the issue and to me it is not a problem because my matrix
> is symmetric, but I don’t want to have to change it in the libMesh source
> code. So the question is, why do those CL options not work for the
> KSPSolveTranspose() despite having a symmetric matrix?
>

1) Are you sure the matrix itself is symmetric? It could have boundary
conditions that break this symmetry.

2) This sounds like a bug in PCApplyTranspose_FieldSplit() since I am
almost certain it is not tested.

3) Can you send the matrix and rhs? This should be easy by using MatView()
for a binary viewer.

  Thanks,

    Matt


> Thanks
>
-- 
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/20160120/c959ecdf/attachment.html>


More information about the petsc-users mailing list