Source code for sympde.topology.datatype
# coding: utf-8
# TODO - add W(p,2) spaces and Sobolev of higher order => needed for high order
# derivatives
from sympy.core import Basic
from sympy.core.singleton import Singleton
#==============================================================================
[docs]
class SpaceType(Basic, metaclass=Singleton):
"""Base class representing function space types"""
pass
[docs]
class H1SpaceType(SpaceType):
name = 'h1'
[docs]
class HcurlSpaceType(SpaceType):
name = 'hcurl'
[docs]
class HdivSpaceType(SpaceType):
name = 'hdiv'
[docs]
class L2SpaceType(SpaceType):
name = 'l2'
[docs]
class UndefinedSpaceType(SpaceType):
name = 'undefined'
H1Space = H1SpaceType()
HcurlSpace = HcurlSpaceType()
HdivSpace = HdivSpaceType()
L2Space = L2SpaceType()
UndefinedSpace = UndefinedSpaceType()
dtype_space_registry = {'h1': H1Space,
'hcurl': HcurlSpace,
'hdiv': HdivSpace,
'l2': L2Space,
'undefined': UndefinedSpace}
#==============================================================================
[docs]
class RegularityType(Basic, metaclass=Singleton):
"""Base class representing the regularity of a space of functions"""
_index = None
@property
def index(self):
return self._index
@property
def name(self):
if self.index is None:
return None
else:
return 'C^{}'.format(self.index)
def __str__(self):
return str(self.name)
def __lt__(self, other):
assert(isinstance(other, RegularityType))
return self.index < other.index
def __le__(self, other):
assert(isinstance(other, RegularityType))
return self.index <= other.index
def __gt__(self, other):
assert(isinstance(other, RegularityType))
return self.index > other.index
def __ge__(self, other):
assert(isinstance(other, RegularityType))
return self.index >= other.index
[docs]
class H1RegularityType(RegularityType):
_index = 0
pass
[docs]
class HcurlRegularityType(RegularityType):
_index = -0.3
pass
[docs]
class HdivRegularityType(RegularityType):
_index = -0.6
pass
[docs]
class L2RegularityType(RegularityType):
_index = -1
pass
H1Regularity = H1RegularityType()
HcurlRegularity = HcurlRegularityType()
HdivRegularity = HdivRegularityType()
L2Regularity = L2RegularityType()
dtype_regularity_registry = {'h1': H1Regularity,
'hcurl': HcurlRegularity,
'hdiv': HdivRegularity,
'l2': L2Regularity}