def __init__(self, coordinate_element, ufl_id=None, cargo=None): self._ufl_id = self._init_ufl_id(ufl_id) # Store reference to object that will not be used by UFL self._ufl_cargo = cargo if cargo is not None and cargo.ufl_id() != self._ufl_id: error("Expecting cargo object (e.g. dolfin.Mesh) to have the same ufl_id.") # No longer accepting coordinates provided as a Coefficient from ufl.coefficient import Coefficient if isinstance(coordinate_element, Coefficient): error("Expecting a coordinate element in the ufl.Mesh construct.") # Accept a cell in place of an element for brevity Mesh(triangle) if isinstance(coordinate_element, AbstractCell): from ufl.finiteelement import VectorElement cell = coordinate_element coordinate_element = VectorElement("Lagrange", cell, 1, dim=cell.geometric_dimension()) # Store coordinate element self._ufl_coordinate_element = coordinate_element # Derive dimensions from element gdim, = coordinate_element.value_shape() tdim = coordinate_element.cell().topological_dimension() AbstractDomain.__init__(self, tdim, gdim)
def __init__(self, coordinate_element, ufl_id=None, cargo=None): self._ufl_id = self._init_ufl_id(ufl_id) # Store reference to object that will not be used by UFL self._ufl_cargo = cargo if cargo is not None and cargo.ufl_id() != self._ufl_id: error( "Expecting cargo object (e.g. dolfin.Mesh) to have the same ufl_id." ) # No longer accepting coordinates provided as a Coefficient from ufl.coefficient import Coefficient if isinstance(coordinate_element, Coefficient): error("Expecting a coordinate element in the ufl.Mesh construct.") # Accept a cell in place of an element for brevity Mesh(triangle) if isinstance(coordinate_element, AbstractCell): from ufl.finiteelement import VectorElement cell = coordinate_element coordinate_element = VectorElement("Lagrange", cell, 1, dim=cell.geometric_dimension()) # Store coordinate element self._ufl_coordinate_element = coordinate_element # Derive dimensions from element gdim, = coordinate_element.value_shape() tdim = coordinate_element.cell().topological_dimension() AbstractDomain.__init__(self, tdim, gdim)
def _has_higher_order_geometry(o): if isinstance(o, Integral): P1 = VectorElement("P", o.ufl_domain().ufl_cell(), 1) return o.ufl_domain().ufl_coordinate_element() != P1 elif isinstance(o, Form): P1 = VectorElement("P", o.ufl_cell(), 1) return any(d.ufl_coordinate_element() != P1 for d in o.ufl_domains()) elif isinstance(o, (list, tuple)): return any(_has_higher_order_geometry(itg) for itg in o) else: raise NotImplementedError
def affine_mesh(cell, ufl_id=None): "Create a Mesh over a given cell type with an affine geometric parameterization." from ufl.finiteelement import VectorElement cell = as_cell(cell) gdim = cell.geometric_dimension() degree = 1 coordinate_element = VectorElement("Lagrange", cell, degree, dim=gdim) return Mesh(coordinate_element, ufl_id=ufl_id)
def VectorConstant(domain, dim=None, count=None): """UFL value: Represents a globally constant vector valued coefficient.""" domain = as_domain(domain) element = VectorElement("Real", domain.ufl_cell(), 0, dim) fs = FunctionSpace(domain, element) return Coefficient(fs, count=count)
def __init__(self, domain, dim=None, count=None): e = VectorElement("Real", domain, 0, dim) ConstantBase.__init__(self, e, count) ufl_assert(self._repr is None, "Repr should not have been set yet!") self._repr = "VectorConstant(%r, %r, %r)" % (e.domain(), e.value_shape()[0], self._count)