Source code for ufl.constant

"""Support fpr non-literal values which are constant with respect to a domain."""

# Copyright (C) 2019 Michal Habera
#
# This file is part of UFL (https://www.fenicsproject.org)
#
# SPDX-License-Identifier:    LGPL-3.0-or-later

from ufl.core.terminal import Terminal
from ufl.core.ufl_type import ufl_type
from ufl.domain import as_domain
from ufl.utils.counted import Counted


[docs]@ufl_type() class Constant(Terminal, Counted): """Constant.""" _ufl_noslots_ = True def __init__(self, domain, shape=(), count=None): """Initalise.""" Terminal.__init__(self) Counted.__init__(self, count, Constant) self._ufl_domain = as_domain(domain) self._ufl_shape = shape # Repr string is build in such way, that reconstruction # with eval() is possible self._repr = "Constant({}, {}, {})".format( repr(self._ufl_domain), repr(self._ufl_shape), repr(self._count) ) @property def ufl_shape(self): """Get the UFL shape.""" return self._ufl_shape
[docs] def ufl_domain(self): """Get the UFL domain.""" return self._ufl_domain
[docs] def ufl_domains(self): """Get the UFL domains.""" return (self.ufl_domain(),)
[docs] def is_cellwise_constant(self): """Return True if the function is cellwise constant.""" return True
def __str__(self): """Format as a string.""" return f"c_{self._count}" def __repr__(self): """Representation.""" return self._repr def __eq__(self, other): """Check equality.""" if not isinstance(other, Constant): return False if self is other: return True return ( self._count == other._count and self._ufl_domain == other._ufl_domain and self._ufl_shape == self._ufl_shape ) def _ufl_signature_data_(self, renumbering): """Signature data for constant depends on renumbering.""" return "Constant({}, {}, {})".format( self._ufl_domain._ufl_signature_data_(renumbering), repr(self._ufl_shape), repr(renumbering[self]), )
[docs]def VectorConstant(domain, count=None): """Vector constant.""" domain = as_domain(domain) return Constant(domain, shape=(domain.geometric_dimension(),), count=count)
[docs]def TensorConstant(domain, count=None): """Tensor constant.""" domain = as_domain(domain) return Constant( domain, shape=(domain.geometric_dimension(), domain.geometric_dimension()), count=count )