Source code for finat.mtw
import FIAT
from gem import ListTensor
from finat.fiat_elements import FiatElement
from finat.physically_mapped import Citations, identity, PhysicallyMappedElement
from finat.piola_mapped import normal_tangential_edge_transform
from copy import deepcopy
[docs]
class MardalTaiWinther(PhysicallyMappedElement, FiatElement):
def __init__(self, cell, degree=3):
if Citations is not None:
Citations().register("Mardal2002")
super().__init__(FIAT.MardalTaiWinther(cell, degree))
reduced_dofs = deepcopy(self._element.entity_dofs())
sd = cell.get_spatial_dimension()
fdofs = sd + 1
reduced_dofs[sd][0] = []
for f in reduced_dofs[sd-1]:
reduced_dofs[sd-1][f] = reduced_dofs[sd-1][f][:fdofs]
self._entity_dofs = reduced_dofs
self._space_dimension = fdofs * len(reduced_dofs[sd-1])
[docs]
def entity_dofs(self):
return self._entity_dofs
[docs]
def space_dimension(self):
return self._space_dimension