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?

Thanks


Reply via email to