Source code for dolfin.mesh

import ufl
import dolfin.cpp as cpp
from . import svgtools

# Functions to extend cpp.mesh.Mesh with


def ufl_cell(self):
    return ufl.Cell(self.cell_name(),
                    geometric_dimension=self.geometry().dim())


def ufl_coordinate_element(self):
    """Return the finite element of the coordinate vector field of this
    domain.

    """
    cell = self.ufl_cell()
    degree = self.geometry().degree()
    return ufl.VectorElement("Lagrange", cell, degree,
                             dim=cell.geometric_dimension())


def ufl_domain(self):
    """Returns the ufl domain corresponding to the mesh."""
    # Cache object to avoid recreating it a lot
    if not hasattr(self, "_ufl_domain"):
        self._ufl_domain = ufl.Mesh(self.ufl_coordinate_element(),
                                    ufl_id=self.ufl_id(),
                                    cargo=self)
    return self._ufl_domain


def geometric_dimension(self):
    """Returns geometric dimension for ufl interface"""
    return self.geometry().dim()


def _repr_html_(self):
    return cpp.io.X3DOM.html(self)


def _repr_svg_(self):
    return svgtools.mesh2svg(self)


# Extend cpp.mesh.Mesh class, and clean-up
cpp.mesh.Mesh.ufl_cell = ufl_cell
cpp.mesh.Mesh.ufl_coordinate_element = ufl_coordinate_element
cpp.mesh.Mesh.ufl_domain = ufl_domain
cpp.mesh.Mesh.geometric_dimension = geometric_dimension

cpp.mesh.Mesh._repr_html_ = _repr_html_
cpp.mesh.Mesh._repr_svg_ = _repr_svg_

del ufl_cell, ufl_coordinate_element, ufl_domain, geometric_dimension, _repr_html_, _repr_svg_