Thanks Lawrence - it's running fine now and I'll make the change you've suggested too… J ----------------------------------------------------------------------------------------------------- I think this is because your firedrake is not up-to-date enough. The Expressions with user-defined variables arrived on 20th of May. If you do git branch --contains 2ad90e5 you can see if your local firedrake branch has it (you may not be up-to-date enough). Running with current firedrake master this test case works for me. I also note that that script is not making best use of the user-defined variables. You can define the Expression before the timestepping loop and then just update values inside it (rather than redefining the Expression): e.g. uexpr = Expression(..., t=t, T0=T0) u = project(uexpr, V) while t < T: uexpr.t = t u.project(uexpr) Cheers, Lawrence