From 101422c7abd23017227d75ab426ac26f74d0cfc7 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Wed, 8 Jul 2020 15:37:42 -0500 Subject: [PATCH] Expose nodal reductions in eager interface --- examples/wave/wave-eager.py | 3 ++- grudge/eager.py | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/examples/wave/wave-eager.py b/examples/wave/wave-eager.py index e7821431..7450f435 100644 --- a/examples/wave/wave-eager.py +++ b/examples/wave/wave-eager.py @@ -163,7 +163,8 @@ def main(): fields = rk4_step(fields, t, dt, rhs) if istep % 10 == 0: - print(istep, t, discr.norm(fields[0])) + print(f"step: {istep} t: {t} L2: {discr.norm(fields[0])} " + f"sol max: {discr.nodal_max('vol', fields[0])}") vis.write_vtk_file("fld-wave-eager-%04d.vtu" % istep, [ ("u", fields[0]), diff --git a/grudge/eager.py b/grudge/eager.py index 07cb0f04..71a01873 100644 --- a/grudge/eager.py +++ b/grudge/eager.py @@ -166,6 +166,19 @@ class EagerDGDiscretization(DGDiscretizationWithBoundaries): def norm(self, vec, p=2): return self._norm(p)(arg=vec) + @memoize_method + def _nodal_reduction(self, operator, dd): + return bind(self, operator(dd)(sym.var("arg")), local_only=True) + + def nodal_sum(self, dd, vec): + return self._nodal_reduction(sym.NodalSum, dd)(arg=vec) + + def nodal_min(self, dd, vec): + return self._nodal_reduction(sym.NodalMin, dd)(arg=vec) + + def nodal_max(self, dd, vec): + return self._nodal_reduction(sym.NodalMax, dd)(arg=vec) + @memoize_method def connected_ranks(self): from meshmode.distributed import get_connected_partitions -- GitLab