Hello,
I suppose you are using the Newton method available in FEniCS, as we can see in http://fenicsproject.org/documentation/tutorial/nonlinear.html
On the solver, you can define some parameters:
absolute_tolerance
convergence_criterion
error_on_nonconvergence
linear_solver
maximum_iterations
method
preconditioner
relative_tolerance
relaxation_parameter
report
krylov_solver
lu_solver
From what I see, you can define the tolerance for the newton solver by using the following:
problem = NonlinearVariationalProblem(F, u_, bcs, J)
solver = NonlinearVariationalSolver(problem)
prm = solver.parameters
prm['newton_solver']['absolute_tolerance'] = 1E-8
prm['newton_solver']['relative_tolerance'] = 1E-7
Also, you might want to take a look at the "convergence_criterion", which by can be 'residual' (default) or 'incremental'.
If you still can not find your solution, I recommend you develop your netwon solver "manually". Also demonstrated on the same link.
du = Function(V)
u = Function(V) # u = u_k + omega*du
omega = 1.0 # relaxation parameter
eps = 1.0
tol = 1.0E-5
iter = 0
maxiter = 25
while eps > tol and iter < maxiter:
iter += 1
A, b = assemble_system(a, L, bcs_du)
solve(A, du.vector(), b)
eps = numpy.linalg.norm(du.vector().array(), ord=numpy.Inf)
print 'Norm:', eps
u.vector()[:] = u_k.vector() + omega*du.vector()
u_k.assign(u)
Where you can evaluate the value of the variable "eps" from within the newton iteration.