Dear all, I'm experiencing some problems setting up weak forms for the system of equations I'm trying to solve. Here's what I'm trying to do: ----- from firedrake import * # Model parameters dt = 5.0e-04 # time step Cn=0.01 # Cahn We=0.45 # Weber Pe=4.5 # Peclet Re=100 # Reynolds g_switch = 0 # switch for gravity 1 = ON, 0 = Off Fr2=0.1 # Froude number squared beta = 2 # stabilising term rho1 = Constant(1) rho2 = Constant(1) drho_hat = Constant(0) drho_hat.assign(0.5*(1 - (rho2/rho1))) # d rho_hat / d phi alpha = (rho2-rho1)/(rho2+rho1) # Create mesh and define function spaces mesh = Mesh("square_mesh.msh") P1 = FunctionSpace(mesh, "Lagrange", 1) P2 = VectorFunctionSpace(mesh, "Lagrange", 2) # Taylor-Hood elements for velocity and pressure, P1-P1 elements for phi and mu W = P2*P1*P1*P1 # Define test functions chi, theta, omega, psi = TestFunctions(W) # Define functions u = Function(W) # current solution u0 = Function(W) # solution from previous converged step # Split mixed functions v, p, phi, mu = split(u) v0, p0, phi0, mu0 = split(u0) # Compute the chemical potential df/dphi phi = variable(phi) f = 0.25*(phi**2 - 1)**2 dfdphi = diff(f, phi) # create a functions for the two definitions of density rho_hat = Function(P1) rho = Function(P1) ex, ey = unit_vectors(2) # Weak statement of the equations a1 = (1/dt)*omega*phi*dx + omega*div(v*phi0)*dx + (1/Pe)*inner(grad(omega),grad(mu))*dx a2 = psi*mu*dx - (beta/Cn)*phi*psi*dx - Cn*inner(grad(phi),grad(psi))*dx - (1/rho_hat)*drho_hat*psi*p*dx a3 = rho*(1/dt)*inner(chi, v)*dx + rho*inner(dot(v0,nabla_grad(v)), chi)*dx +(1/We)*(-p*div(chi) + inner(chi, phi*grad(mu))-(1/rho_hat)*drho_hat*p*inner(chi, grad(phi0)) )*dx + (1/Re)*inner((nabla_grad(v)[i,j] + nabla_grad(v)[j,i]), nabla_grad(chi)[i,j] )*dx - (2/(3*Re))*div(v)*div(chi)*dx a4 = theta*div(v)*dx + (alpha/Pe)*inner(grad(theta), grad(mu))*dx a = a1 + a2 + a3 + a4 L1 = (1/dt)*omega*phi0*dx L2 = - (beta/Cn)*phi0*psi*dx + (1/Cn)*dfdphi*psi*dx L3 = - (g_switch/Fr2)*rho_hat*inner(chi,ey)*dx + rho*(1/dt)*inner(chi, v0)*dx L = L1 + L2 + L3 v0, p0, phi0, mu0 = u0.split() # Initial conditions for phi and velocity phi_ini = Expression('''1 - tanh( ( sqrt( pow(x[0]-x0, 2)+pow(x[1]-y0, 2) ) - r0 )/C*sqrt(2) )- tanh( ( sqrt( pow(x[0]-x1, 2)+pow(x[1]-y1, 2) ) - r1 )/C*sqrt(2) )''', x0=0.4,y0=0.5,r0 = 0.25,x1=0.78,y1=0.5,r1 = 0.1,C=0.01 ) phi0.interpolate(phi_ini) vel_ini = Expression(("0.0", "0.0")) v0.interpolate(vel_ini) # initialise density rho.interpolate( Expression('''0.5*((1+phi_ini) + (rho2/rho1)*(1-phi_ini))''') ) outfile = File("./Results_NSCH/nsch_res.pvd") t = 0 tend = 1.0 outfile.write(u0) while t <= tend: t+=dt ; print t # compute density using algebraic expression rho_hat = 0.5*( (1+phi) + (rho2/rho1)*(1-phi)) rho_hat.interpolate(Expression(' 0.5*( (1+phi0) + (rho2/rho1)*(1-phi0))')) # Solve the system of equations solve(a == L, u) # update rho rho -= dt*div(rho*v0) u0.assign(u) outfile.write(u0) ----- When I try to run the code I get an exception: This integral is missing an integration domain. Traceback (most recent call last): File "navier_stokes_CH.py", line 54, in <module> a3 = rho*(1/dt)*inner(chi, v)*dx + rho*inner(dot(v0,nabla_grad(v)), chi)*dx +(1/We)*(-p*div(chi) + inner(chi, phi*grad(mu))-(1/rho_hat)*drho_hat*p*inner(chi, grad(phi0)) )*dx + (1/Re)*inner((nabla_grad(v)[i,j] + nabla_grad(v)[j,i]), nabla_grad(chi)[i,j] )*dx - (2/(3*Re))*div(v)*div(chi)*dx File "/home/cserv1_a/apps/install/firedrake/2016-03-el7/firedrake/lib/python2.7/site-packages/ufl/measure.py", line 398, in __rmul__ error("This integral is missing an integration domain.") File "/home/cserv1_a/apps/install/firedrake/2016-03-el7/firedrake/lib/python2.7/site-packages/ufl/log.py", line 158, in error raise self._exception_type(self._format_raw(*message)) ufl.log.UFLException: This integral is missing an integration domain. Any help on fixing that would be greatly appreciated I assume that this is not the only bug in my code, so I'd also appreciate other corrections that need to be made. I have attached a pdf with a description of exactly what I want to do. Thanks, Fryderyk