The bug is in FFC's jit, easy to spot but I don't have time to elaborate. Martin
On Tue, Apr 21, 2009 at 10:53 AM, Kent Andre <[email protected]> wrote: > > I now try: > > > > class TensorFunctionSpace(FunctionSpaceBase): > > def __init__(self, mesh, family, degree, shape=None, symmetry=None): > > > # Create subspaces > if shape == None: > dim = mesh.topology().dim() > shape = (dim, dim) > cell = dim2domain[mesh.topology().dim()] > element = ufl.TensorElement(family, cell, degree, shape, > symmetry) > > # Initialize base class > FunctionSpaceBase.__init__(self, mesh, element) > > > but I get, > > Traceback (most recent call last): > File "test_fung.py", line 8, in <module> > fe = TensorFunctionSpace(mesh, 'CG', 1) > File > "/home/kent-and/local/src/dolfin-dev/local/lib/python2.5/site-packages/dolfin/ufl/functionspace.py", > line 291, in __init__ > FunctionSpaceBase.__init__(self, mesh, element) > File > "/home/kent-and/local/src/dolfin-dev/local/lib/python2.5/site-packages/dolfin/ufl/functionspace.py", > line 43, in __init__ > ufc_element, ufc_dofmap = jit(self._element) > File > "/home/kent-and/local/src/dolfin-dev/local/lib/python2.5/site-packages/dolfin/ufl/jit.py", > line 65, in jit > return jit_compile(form, options) > File "/usr/local/lib/python2.5/site-packages/ffc/jit/jit.py", line 64, > in jit > return jit_element(object, options, use_ufl) > File "/usr/local/lib/python2.5/site-packages/ffc/jit/jit.py", line > 143, in jit_element > form = UFLTestFunction(element)[0]*UFLdx > File "/usr/local/lib/python2.5/site-packages/ufl/integral.py", line > 75, in __rmul__ > % (integrand.rank(), integrand.free_indices())) > File "/usr/local/lib/python2.5/site-packages/ufl/assertions.py", line > 20, in ufl_assert > condition or error(*message) > File "/usr/local/lib/python2.5/site-packages/ufl/log.py", line 97, in > error > raise UFLException(self._format_raw(*message)) > ufl.log.UFLException: Trying to integrate expression of rank 1 with free > indices > > Kent > > > On ti., 2009-04-21 at 03:03 +0200, Johan Hake wrote: >> On Monday 20 April 2009 22:59:19 Martin Sandve Alnæs wrote: >> > See TensorElement in UFL, there should be a natural correspondence >> > FiniteElement <-> FunctionSpace >> > MixedElement <-> MixedFunctionSpace >> > VectorElement <-> VectorFunctionSpace >> > TensorElement <-> TensorFunctionSpace >> >> I think we have a problem here. >> >> The value_shape of the mixed element in your TensorFunctionSpace is probably >> not computed correct here Kent. This is done in the TensorElement construtor, >> which is not called in your case. >> >> We could let TensorFunctionSpace inherit FunctionSpaceBase instead of >> MixedFunctionSpace. Then in the constructor of TensorFunctionSpace we can: >> >> element = TensorElement(...) >> >> and pass the element to FunctionSpaceBase. Unfortunaltely we break the >> inheritance correlation with ufl. And some of the implemented PyDOLFIN >> functions such as split, check the provided functionspace for beeing a >> MixedFunctionSpace. this could be changed to check for the element of the >> provided FunctionSpace to be a MixedElement. >> >> We still needs to construct the SubSpaces though, which could be done in the >> TensorFunctionSpace constructor similare to what is done in the >> MixedFunctionSpace constructor? >> >> Not sure if this approach covers all bases? >> >> >> Johan >> >> >> > Martin >> > >> > On Mon, Apr 20, 2009 at 10:30 PM, <[email protected]> wrote: >> > > Are there any thoughts on how to implement TensorFunctionSpace in Dolfin >> > > ? >> > > >> > > Copying code for VectorFunctionSpace it could be something like: >> > > >> > > >> > > class TensorFunctionSpace(MixedFunctionSpace): >> > > "VectorFunctionSpace represents a vector-valued finite element >> > > function space." >> > > >> > > def __init__(self, mesh, family, degree, dim=None): >> > > """Create tensor-valued finite element function space. The >> > > function space >> > > may be created by >> > > >> > > V = TensorFunctionSpace(mesh, family, domain, degree, >> > > dim=None) >> > > >> > > mesh : a Mesh >> > > family : a string specifying the element family >> > > degree : the degree of the element >> > > dim : an optional argument specifying the number of >> > > components >> > > >> > > If the dim argument is not provided, the dimension will be deduced >> > > from >> > > the dimension of the mesh. >> > > """ >> > > >> > > # Create subspaces >> > > dim = dim or mesh.geometry().dim() >> > > spaces = dim*[VectorFunctionSpace(mesh, family, degree, dim)] >> > > >> > > # Initialize base class >> > > MixedFunctionSpace.__init__(self, spaces) >> > > >> > > >> > > >> > > But then I get the following when in use: >> > > >> > > condition or error(*message) >> > > File "/usr/local/lib/python2.5/site-packages/ufl/log.py", line 97, in >> > > error raise UFLException(self._format_raw(*message)) >> > > ufl.log.UFLException: Transposed is only defined for rank 2 tensors. >> > > >> > > Any thoughts ? >> > > >> > > >> > > Kent >> > > >> > > >> > > >> > > _______________________________________________ >> > > DOLFIN-dev mailing list >> > > [email protected] >> > > http://www.fenics.org/mailman/listinfo/dolfin-dev >> > >> > _______________________________________________ >> > DOLFIN-dev mailing list >> > [email protected] >> > http://www.fenics.org/mailman/listinfo/dolfin-dev >> >> > > _______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
