Source code for ufl.integral_domain

"""Integral domains."""

from abc import ABC, abstractmethod

from ufl.cell import AbstractCell
from ufl.finiteelement import AbstractFiniteElement


class AbstractIntegralDomain(ABC):
    """Abstract base class for integral domain."""

    def __hash__(self) -> int:
        """Hash."""
        return hash(self.__repr__())

    @abstractmethod
    def __repr__(self) -> str:
        """Representation."""

    @property
    @abstractmethod
    def integral_type(self) -> str:
        """Integral type."""


[docs] class DxIntegralDomain(AbstractIntegralDomain): """Integral domain for dx.""" def __init__(self, coordinate_element: AbstractFiniteElement): """Initialise.""" self.coordinate_element = coordinate_element def __repr__(self) -> str: """Representation.""" return f"DxIntegralDomain({self.coordinate_element!r})" @property def integral_type(self) -> str: """Integral type.""" return "cell"
[docs] class DsIntegralDomain(AbstractIntegralDomain): """Integral domain for ds.""" def __init__(self, coordinate_element: AbstractFiniteElement, facet_type: AbstractCell): """Initialise.""" self.coordinate_element = coordinate_element self.facet_type = facet_type def __repr__(self) -> str: """Representation.""" return f"DsIntegralDomain({self.coordinate_element!r}, {self.facet_type!r})" @property def integral_type(self) -> str: """Integral type.""" return "exterior_facet"
[docs] class DSIntegralDomain(AbstractIntegralDomain): """Integral domain for dS.""" def __init__( self, coordinate_element_positive_side: AbstractFiniteElement, coordinate_element_negative_side: AbstractFiniteElement, facet_type: AbstractCell, ): """Initialise.""" self.coordinate_element_positive_side = coordinate_element_positive_side self.coordinate_element_negative_side = coordinate_element_negative_side self.facet_type = facet_type def __repr__(self) -> str: """Representation.""" return ( f"DSIntegralDomain({self.coordinate_element_positive_side!r}, " f"{self.coordinate_element_negative_side!r}, {self.facet_type!r})" ) @property def integral_type(self) -> str: """Integral type.""" return "interior_facet"