Hi everyone,
Currently I am trying to debug one of a simulation of a time dependent 3D heat equation on a fine cylindrical mesh. I am using very small time steps (0.01 seconds) for this problem due to the fast dynamics of the system, and whilst my code appears to run well for half of the time steps with the residual norm decreasing steadily, but then suddenly, I get a error message:
Error: Unable to solve linear system using PETSc Krylov solver.
*** Reason: Solution failed to converge in 87 iterations (PETSc reason DIVERGED_DTOL, residual norm ||r|| = 6.781851e+12).
*** Where: This error was encountered inside PETScKrylovSolver.cpp.
*** Process: 8
***
*** DOLFIN version: 2019.2.0.dev0
*** Git changeset: unknown
I should note that this code compiles fully in less dynamic systems (those that change on the order of seconds).
What is causing this error and how can it be fixed?
Below are the parameters for the solver I have used for this system, which I suspect are causing the problem.
problem = NonlinearVariationalProblem(F, T, [], Gain)
solver = NonlinearVariationalSolver(problem)
solver.parameters["newton_solver"]["relative_tolerance"] = 1E-5
solver.parameters["newton_solver"]["absolute_tolerance"] = 1E-5
solver.parameters["newton_solver"]["convergence_criterion"] = "residual"
solver.parameters["newton_solver"]["error_on_nonconvergence"] = True
solver.parameters["newton_solver"]["linear_solver"] = "bicgstab"
#solver.parameters["newton_solver"]["lu_solver"]["symmetric"] = True
solver.parameters["newton_solver"]["maximum_iterations"] = 100
solver.parameters["newton_solver"]["preconditioner"] = "jacobi"
#solver.parameters["newton_solver"]["relaxation_parameter"] = 1.05
solver.parameters["newton_solver"]["report"] = True
solver.parameters["newton_solver"]["krylov_solver"]["nonzero_initial_guess"] = True
solver.parameters["newton_solver"]["krylov_solver"]["relative_tolerance"] = 1E-5
solver.parameters["newton_solver"]["krylov_solver"]["absolute_tolerance"] = 1E-5
solver.parameters["newton_solver"]["krylov_solver"]["monitor_convergence"] = True
solver.parameters["newton_solver"]["krylov_solver"]["maximum_iterations"] = 100000