@@ -1627,6 +1627,7 @@ def __init__(self, form, local_knl, subdomain_id, all_integer_subdomain_ids, dia
16271627 self ._constants = _FormHandler .iter_constants (form , local_knl .kinfo )
16281628 self ._active_exterior_facets = _FormHandler .iter_active_exterior_facets (form , local_knl .kinfo )
16291629 self ._active_interior_facets = _FormHandler .iter_active_interior_facets (form , local_knl .kinfo )
1630+ self ._active_orientations_cell = _FormHandler .iter_active_orientations_cell (form , local_knl .kinfo )
16301631 self ._active_orientations_exterior_facet = _FormHandler .iter_active_orientations_exterior_facet (form , local_knl .kinfo )
16311632 self ._active_orientations_interior_facet = _FormHandler .iter_active_orientations_interior_facet (form , local_knl .kinfo )
16321633
@@ -1649,6 +1650,7 @@ def build(self):
16491650 assert_empty (self ._constants )
16501651 assert_empty (self ._active_exterior_facets )
16511652 assert_empty (self ._active_interior_facets )
1653+ assert_empty (self ._active_orientations_cell )
16521654 assert_empty (self ._active_orientations_exterior_facet )
16531655 assert_empty (self ._active_orientations_interior_facet )
16541656
@@ -1846,6 +1848,17 @@ def _as_global_kernel_arg_interior_facet(_, self):
18461848 return op2 .DatKernelArg ((2 ,), m ._global_kernel_arg )
18471849
18481850
1851+ @_as_global_kernel_arg .register (kernel_args .OrientationsCellKernelArg )
1852+ def _ (_ , self ):
1853+ mesh = next (self ._active_orientations_cell )
1854+ if mesh is self ._mesh :
1855+ return op2 .DatKernelArg ((1 ,))
1856+ else :
1857+ m , integral_type = mesh .topology .trans_mesh_entity_map (self ._mesh .topology , self ._integral_type , self ._subdomain_id , self ._all_integer_subdomain_ids )
1858+ assert integral_type == "cell"
1859+ return op2 .DatKernelArg ((1 ,), m ._global_kernel_arg )
1860+
1861+
18491862@_as_global_kernel_arg .register (kernel_args .OrientationsExteriorFacetKernelArg )
18501863def _ (_ , self ):
18511864 mesh = next (self ._active_orientations_exterior_facet )
@@ -1917,6 +1930,7 @@ def __init__(self, form, bcs, local_knl, subdomain_id,
19171930 self ._constants = _FormHandler .iter_constants (form , local_knl .kinfo )
19181931 self ._active_exterior_facets = _FormHandler .iter_active_exterior_facets (form , local_knl .kinfo )
19191932 self ._active_interior_facets = _FormHandler .iter_active_interior_facets (form , local_knl .kinfo )
1933+ self ._active_orientations_cell = _FormHandler .iter_active_orientations_cell (form , local_knl .kinfo )
19201934 self ._active_orientations_exterior_facet = _FormHandler .iter_active_orientations_exterior_facet (form , local_knl .kinfo )
19211935 self ._active_orientations_interior_facet = _FormHandler .iter_active_orientations_interior_facet (form , local_knl .kinfo )
19221936
@@ -2182,6 +2196,17 @@ def _as_parloop_arg_interior_facet(_, self):
21822196 return op2 .DatParloopArg (mesh .interior_facets .local_facet_dat , m )
21832197
21842198
2199+ @_as_parloop_arg .register (kernel_args .OrientationsCellKernelArg )
2200+ def _ (_ , self ):
2201+ mesh = next (self ._active_orientations_cell )
2202+ if mesh is self ._mesh :
2203+ m = None
2204+ else :
2205+ m , integral_type = mesh .topology .trans_mesh_entity_map (self ._mesh .topology , self ._integral_type , self ._subdomain_id , self ._all_integer_subdomain_ids )
2206+ assert integral_type == "cell"
2207+ return op2 .DatParloopArg (mesh .local_cell_orientation_dat , m )
2208+
2209+
21852210@_as_parloop_arg .register (kernel_args .OrientationsExteriorFacetKernelArg )
21862211def _ (_ , self ):
21872212 mesh = next (self ._active_orientations_exterior_facet )
@@ -2278,6 +2303,14 @@ def iter_active_interior_facets(form, kinfo):
22782303 mesh = all_meshes [i ]
22792304 yield mesh
22802305
2306+ @staticmethod
2307+ def iter_active_orientations_cell (form , kinfo ):
2308+ """Yield the form cell orientations referenced in ``kinfo``."""
2309+ all_meshes = extract_domains (form )
2310+ for i in kinfo .active_domain_numbers .orientations_cell :
2311+ mesh = all_meshes [i ]
2312+ yield mesh
2313+
22812314 @staticmethod
22822315 def iter_active_orientations_exterior_facet (form , kinfo ):
22832316 """Yield the form exterior facet orientations referenced in ``kinfo``."""
0 commit comments