Skip to content

Commit 9e2830c

Browse files
committed
change quad orderin based on given cell, add cg3 to fuse tests
1 parent 571128d commit 9e2830c

File tree

3 files changed

+33
-21
lines changed

3 files changed

+33
-21
lines changed

firedrake/cython/dmcommon.pyx

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -368,15 +368,18 @@ cdef inline PetscInt _reorder_plex_cone(PETSc.DM dm,
368368
# 0 2
369369
# | |
370370
# +---3---+
371-
plex_cone_new[0] = plex_cone_old[0]
372-
plex_cone_new[1] = plex_cone_old[2]
373-
plex_cone_new[2] = plex_cone_old[1]
374-
plex_cone_new[3] = plex_cone_old[3]
375-
# print("SWITCHING")
376-
#plex_cone_new[0] = plex_cone_old[0]
377-
#plex_cone_new[1] = plex_cone_old[3]
378-
#plex_cone_new[2] = plex_cone_old[2]
379-
#plex_cone_new[3] = plex_cone_old[1]
371+
if "fuse" in dm.name:
372+
# FUSE rules
373+
plex_cone_new[0] = plex_cone_old[0]
374+
plex_cone_new[1] = plex_cone_old[3]
375+
plex_cone_new[2] = plex_cone_old[2]
376+
plex_cone_new[3] = plex_cone_old[1]
377+
else:
378+
# UFC rules
379+
plex_cone_new[0] = plex_cone_old[0]
380+
plex_cone_new[1] = plex_cone_old[2]
381+
plex_cone_new[2] = plex_cone_old[1]
382+
plex_cone_new[3] = plex_cone_old[3]
380383
elif dm.getCellType(p) == PETSc.DM.PolytopeType.HEXAHEDRON:
381384
# UFCHexahedron: +-------+ +-------+
382385
# /. | / 5 /|
@@ -1180,7 +1183,7 @@ def entity_orientations(mesh,
11801183
entity_cone_map[i] = entity_cone_list[i]
11811184
for i in range(len(entity_cone_list_offset)):
11821185
entity_cone_map_offset[i] = entity_cone_list_offset[i]
1183-
#
1186+
11841187
dm = mesh.topology_dm
11851188
dim = dm.getDimension()
11861189
numCells = cell_closure.shape[0]
@@ -1517,6 +1520,7 @@ def get_cell_nodes(mesh,
15171520
perm_offset += ceil_ndofs[i] * num_orientations_c[i]
15181521
else:
15191522
# FInAT element must eventually add entity_permutations() method
1523+
15201524
if extruded_periodic_1_layer:
15211525
for j in range(ceil_ndofs[i]):
15221526
cell_nodes[cell, flat_index[k]] = off + j % offset[flat_index[k]]

firedrake/mesh.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,7 @@ def local_facet_orientation_dat(self):
335335
local_facet_start = offsets[-3]
336336
local_facet_end = offsets[-2]
337337
map_from_cell_to_facet_orientations = self.mesh.entity_orientations[:, local_facet_start:local_facet_end]
338+
338339
# Make output data;
339340
# this is a map from an exterior/interior facet to the corresponding local facet orientation/orientations.
340341
# Halo data are required by design, but not actually used.
@@ -1264,21 +1265,19 @@ def cell_closure(self):
12641265
assert tdim == cell.topological_dimension()
12651266
# plex.viewFromOptions("-dm_view")
12661267
closure, _ = plex.getTransitiveClosure(0)
1268+
if hasattr(cell, "to_fiat"):
1269+
plex.setName('firedrake_default_topology_fuse')
1270+
12671271
if self.submesh_parent is not None:
12681272
return dmcommon.submesh_create_cell_closure_cell_submesh(plex,
12691273
self.submesh_parent.topology_dm,
12701274
cell_numbering,
12711275
self.submesh_parent._cell_numbering,
12721276
self.submesh_parent.cell_closure)
1273-
elif cell.is_simplex():
1274-
topology = FIAT.ufc_cell(cell).get_topology()
1275-
entity_per_cell = np.zeros(len(topology), dtype=IntType)
1276-
for d, ents in topology.items():
1277-
entity_per_cell[d] = len(ents)
1278-
return dmcommon.closure_ordering(plex, vertex_numbering,
1279-
cell_numbering, entity_per_cell)
12801277
# elif hasattr(cell, "to_fiat"):
1281-
# # TODO
1278+
# breakpoint()
1279+
# plex.setName('firedrake_default_topology_fuse')
1280+
# # TODO find better way of branching here
12821281
# topology = cell.to_fiat().topology
12831282
# # entity_per_cell = np.zeros(len(topology), dtype=IntType)
12841283
# # for d, ents in topology.items():
@@ -1287,7 +1286,15 @@ def cell_closure(self):
12871286
# # cell_numbering, entity_per_cell)
12881287
# topology = FIAT.ufc_cell(cell).get_topology()
12891288
# closureSize = sum([len(ents) for _, ents in topology.items()])
1289+
# breakpoint()
12901290
# return dmcommon.create_cell_closure(plex, cell_numbering, closureSize)
1291+
elif cell.is_simplex():
1292+
topology = FIAT.ufc_cell(cell).get_topology()
1293+
entity_per_cell = np.zeros(len(topology), dtype=IntType)
1294+
for d, ents in topology.items():
1295+
entity_per_cell[d] = len(ents)
1296+
return dmcommon.closure_ordering(plex, vertex_numbering,
1297+
cell_numbering, entity_per_cell)
12911298
elif cell.cellname() == "quadrilateral":
12921299
from firedrake_citations import Citations
12931300
Citations().register("Homolya2016")

tests/firedrake/regression/test_fuse.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from test_helmholtz import helmholtz
22
from test_poisson_strong_bcs import run_test
3+
from fuse.cells import firedrake_triangle
34
import pytest
45
import numpy as np
56

@@ -15,9 +16,9 @@ def test_poisson_analytic(params, degree, quadrilateral):
1516

1617
@pytest.mark.parametrize(['conv_num', 'degree'],
1718
[(p, d)
18-
for p, d in zip([1.8, 2.8], [1, 2])])
19-
# 3.8, 3
20-
def test_helmholtz(conv_num, degree):
19+
for p, d in zip([1.8, 2.8, 3.8], [1, 2, 3])])
20+
def test_helmholtz(mocker, conv_num, degree):
21+
# mocker.patch('firedrake.mesh.as_cell', return_value=firedrake_triangle().to_ufl("triangle"))
2122
diff = np.array([helmholtz(i, degree=degree)[0] for i in range(3, 6)])
2223
print("l2 error norms:", diff)
2324
conv = np.log2(diff[:-1] / diff[1:])

0 commit comments

Comments
 (0)