diff --git a/README.rst b/README.rst index a704c122..46afa2ba 100644 --- a/README.rst +++ b/README.rst @@ -24,7 +24,7 @@ implementations for: - Profiling ``arraycontext`` started life as an array abstraction for use with the -`meshmode `__ unstrucuted discretization +`meshmode `__ unstructured discretization package. Distributed under the MIT license. diff --git a/arraycontext/impl/pyopencl/__init__.py b/arraycontext/impl/pyopencl/__init__.py index e2deea52..350f14ac 100644 --- a/arraycontext/impl/pyopencl/__init__.py +++ b/arraycontext/impl/pyopencl/__init__.py @@ -325,9 +325,31 @@ def transform_loopy_program(self, t_unit): all_inames = default_entrypoint.all_inames() + # FIXME: This could be much smarter. inner_iname = None - if "i0" in all_inames: + from meshmode.transform_metadata import FirstAxisIsElementsTag + + if (len(default_entrypoint.instructions) == 1 + and isinstance(default_entrypoint.instructions[0], lp.Assignment) + and any(isinstance(tag, FirstAxisIsElementsTag) + # FIXME: Firedrake branch lacks kernel tags + for tag in getattr(default_entrypoint, "tags", ()))): + stmt, = default_entrypoint.instructions + + out_inames = [v.name for v in stmt.assignee.index_tuple] + assert out_inames + outer_iname = out_inames[0] + if len(out_inames) >= 2: + inner_iname = out_inames[1] + + elif "iel" in all_inames: + outer_iname = "iel" + + if "idof" in all_inames: + inner_iname = "idof" + + elif "i0" in all_inames: outer_iname = "i0" if "i1" in all_inames: diff --git a/requirements.txt b/requirements.txt index a4cb4025..f5d46d74 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,3 +7,5 @@ git+https://github.com/inducer/islpy.git#egg=islpy git+https://github.com/inducer/loopy.git#egg=loopy git+https://github.com/inducer/pytato.git#egg=pytato + +git+https://github.com/inducer/meshmode.git#egg=meshmode