diff --git a/FIAT/dual_set.py b/FIAT/dual_set.py index 26759ba7..dd26381d 100644 --- a/FIAT/dual_set.py +++ b/FIAT/dual_set.py @@ -8,11 +8,11 @@ class DualSet(object): - def __init__(self, nodes, ref_el, entity_ids): + def __init__(self, nodes, ref_el, entity_ids, entity_block_sizes=[1, 1, 1, 1]): self.nodes = nodes self.ref_el = ref_el self.entity_ids = entity_ids - + self.entity_block_sizes = entity_block_sizes # Compute the nodes on the closure of each sub_entity. self.entity_closure_ids = {} for dim, entities in ref_el.sub_entities.items(): @@ -54,6 +54,9 @@ def to_riesz(self, poly_set): return self.mat + def get_entity_block_sizes(self): + return self.entity_block_sizes + def make_entity_closure_ids(ref_el, entity_ids): entity_closure_ids = {} diff --git a/FIAT/nedelec.py b/FIAT/nedelec.py index bb7bdb21..af08b15f 100644 --- a/FIAT/nedelec.py +++ b/FIAT/nedelec.py @@ -198,7 +198,7 @@ def __init__(self, ref_el, degree): num_internal_dof = sd * Pkm1_at_qpts.shape[0] entity_ids[2][0] = list(range(cur, cur + num_internal_dof)) - super(NedelecDual2D, self).__init__(nodes, ref_el, entity_ids) + super(NedelecDual2D, self).__init__(nodes, ref_el, entity_ids, [1, 1, 2, -1]) class NedelecDual3D(dual_set.DualSet): @@ -273,7 +273,7 @@ def __init__(self, ref_el, degree): num_internal_dof = Pkm2_at_qpts.shape[0] * sd entity_ids[3][0] = list(range(cur, cur + num_internal_dof)) - super(NedelecDual3D, self).__init__(nodes, ref_el, entity_ids) + super(NedelecDual3D, self).__init__(nodes, ref_el, entity_ids, [1, 1, 2, 3]) class Nedelec(finite_element.CiarletElement): diff --git a/FIAT/raviart_thomas.py b/FIAT/raviart_thomas.py index 01ce4dc2..218550d8 100644 --- a/FIAT/raviart_thomas.py +++ b/FIAT/raviart_thomas.py @@ -124,7 +124,12 @@ def __init__(self, ref_el, degree): degree - 1) entity_ids[sd][0] = list(range(cur, cur + num_internal_nodes * sd)) - super(RTDualSet, self).__init__(nodes, ref_el, entity_ids) + if sd == 2: + entity_block_sizes = [1, 1, 2, -1] + else: + entity_block_sizes = [1, 1, 1, 3] + + super(RTDualSet, self).__init__(nodes, ref_el, entity_ids, entity_block_sizes) class RaviartThomas(finite_element.CiarletElement):