Unable to solve linear system using PETSc Krylov solver, Solution failed to converge

hello, everyone!
I’m trying to solve the equation distance to boundary. To reduce memory usage, use the GMRES processing method, and the corresponding code is:

u_0 = Function(V)
F = inner(grad(u), grad(v))*dx - f*v*dx
A, b = assemble_system(lhs(F), rhs(F), bc) solve(A, u_0.vector(), b, "gmres")

After running the code, it reminded me an error shown in the below figure( Unable to solve linear system using PETSc Krylov solver) . What is the problem and how could I solve it?

Thanks ahead!

Please provide a minimal working example that reproduces the error.

my code is :

from dolfin import *

import numpy as np

#set_log_level(DEBUG)

# Primero tienes que decirle al código dónde está tu malla. Por ejemplo,

# mesh_path podría ser algo como ../carpeta/malla.xml.gz

mesh_path = "DATOS.xml"

mesh = Mesh(mesh_path)

out = HDF5File(mesh.mpi_comm(), 'geometry_3d.h5', 'w')

out.write(mesh, 'mesh')

# Vamos a resolver la ecuación de Eikonal con el método de FEM más simple

# de todos. Primero definimos el espacio de elementos finitos Galerkin

# continuo (CG) de orden 2.

V = FunctionSpace(mesh, 'CG', 2)

# Instanciamos unas variables

u = TrialFunction(V)

v = TestFunction(V)

f = Constant(1.0)

# Tenemos que definir la frontera de la malla en donde se imponen las

# condiciones de borde. Para tu caso, hay que considerar toda la frontera.

class Boundary(SubDomain):

def inside(self, x, on_boundary):

return on_boundary

boundary = Boundary()

# Se define la condición de borde

bc = DirichletBC(V, Constant(0.0), boundary)

# Ignora este paso. Como el problema de Eikonal es no lineal, se necesita usar

# un método de Newton-Raphson para resolverlo. Es bueno tener un estimador

# inicial de la solución, y esta ecuación nos entrega eso.

u_0 = Function(V)

F = inner(grad(u), grad(v))*dx - f*v*dx

A, b = assemble_system(lhs(F), rhs(F), bc)

solve(A, u_0.vector(), b, "gmres")

#solve(lhs(F) == rhs(F), u_0, bc,solver_parameters)

# Ahora definimos la ecuación de Eikonal para u_0 en formulación variacional

F =((inner(grad(u_0), grad(u_0)))**0.5)*v*dx - f*v*dx

# La ecuación de Eikonal es muy inestable, así que le sumamos un término de

# estabilización. No es demasiado importante este paso para tu uso.

stab = Constant(mesh.hmax()/25)

F += stab*inner(grad(u_0), grad(v))*dx

# Resolvemos la ecuación

solve(F == 0, u_0, bc)

# Guardamos la solución en un archivo para visualizar en Paraview

distance_file = File("distance_to_boundary.pvd");

distance_file << u_0```

First of all; your code does not have the correct indentation.
Secondly, without the mesh one cannot reproduce the error.
Thirdly, you are solving a Poisson problem. Why not use CG + Hypre (boomeramg)?

This is what is done in:

See: How to solve variational problem by iteration methods - #2 by dokken for how to setup hypre in legacy dolfin.
But note:
Testing weak scalability of parallel solver: cg + hypre_amg - #4 by dokken