Heat equation program not converging

Hello dear all,

I am looking at program to solve heat equation in fenics book and error gets WORSE not better when i make time step smaller or make mesh more finer.

This is very odd… what is going on?

Find below program:

from fenics import *
import numpy as np
T = 2.0
# final time
num_steps = 40
# number of time steps
dt = T / num_steps # time step size
alpha = 3
# parameter alpha
beta = 1.2
# parameter beta
# Create mesh and define function space
nx = ny = 40
mesh = UnitSquareMesh(nx, ny)
V = FunctionSpace(mesh, 'P', 1)
# Define boundary condition
u_D = Expression('1 + x[0]*x[0] + alpha*x[1]*x[1] + beta*t',
degree=2, alpha=alpha, beta=beta, t=0)

def boundary(x, on_boundary):
    return on_boundary

bc = DirichletBC(V, u_D, boundary)
# Define initial value
u_n = interpolate(u_D, V)
#u_n = project(u_D, V)
# Define variational problem
u = TrialFunction(V)
v = TestFunction(V)
f = Constant(beta - 2 - 2*alpha)
F = u*v*dx + dt*dot(grad(u), grad(v))*dx - (u_n + dt*f)*v*dx
a, L = lhs(F), rhs(F)
# Time-stepping
u = Function(V)
t = 0
for n in range(num_steps):
# Update current time
    t += dt
    u_D.t = t
    # Compute solution
    solve(a == L, u, bc)
    # Plot solutionplot(u)
    # Compute error at vertices
    u_e = interpolate(u_D, V)
    error = np.abs(u_e.vector().get_local() - u.vector().get_local()).max()
    print('t = %.2f: error = %.3g' % (t, error))
    u_n.assign(u)

As you haven’t provided any printout of the values you used and associated errors, I can only go by my gut feeling and run a few examples.

It seems like all errors are of order 1e-13 which is fairly close to machine precision.