On 17/12/15 14:34, Angwenyi David wrote:
Dear all,
I have had an error while trying to solve the Helmholtz eqn on Icosahedral grids. The code used is:
from firedrake import * m = IcosahedralSphereMesh(radius=3, refinement_level=3) mesh = ExtrudedMesh(m, 5, layer_height=0.1, extrusion_type='radial') horiz_elt = FiniteElement("CG", triangle, 1) vert_elt = FiniteElement("CG", interval, 1) elt = OuterProductElement(horiz_elt, vert_elt) V = FunctionSpace(mesh, elt) u = TrialFunction(V) v = TestFunction(V) f = Function(V) f.interpolate(Expression("(2*x[0])+(sin(3*x[1]))+(cos(0.5*x[2]))")) Coefficient(FunctionSpace(Mesh(OuterProductVectorElement(OuterProductElement(FiniteElement('Lagrange', triangle, 1), FiniteElement('Lagrange', interval, 1), OuterProductCell(triangle, interval)), dim=3), 4), OuterProductElement(FiniteElement('Lagrange', triangle, 1), FiniteElement('Lagrange', interval, 1), OuterProductCell(triangle, interval))), 3) a = (dot(grad(v), grad(u)) + v * u) * dx L = f * v * dx solve(a == L, u, solver_parameters={'ksp_type': 'cg'}) ...
RuntimeError: Expecting second argument to be a Coefficient
You need to redefine "u" to be a Function (or Coefficient) rather than a TrialFunction: u = Function(V) solve(a == L, u, ...) should work. Cheers, Lawrence