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