From ff799e1651339aa9a6bf4633ae967f4a0f2d06b7 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Wed, 22 Feb 2017 16:11:27 -0600
Subject: [PATCH] Add support for element_shrink_factor in visualizer

---
 meshmode/discretization/visualization.py | 33 +++++++++++++++++++++---
 test/test_meshmode.py                    |  2 +-
 2 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/meshmode/discretization/visualization.py b/meshmode/discretization/visualization.py
index 660e78d3..1021d8f4 100644
--- a/meshmode/discretization/visualization.py
+++ b/meshmode/discretization/visualization.py
@@ -104,11 +104,16 @@ class Visualizer(object):
     .. automethod:: write_vtk_file
     """
 
-    def __init__(self, connection):
+    def __init__(self, connection, element_shrink_factor=None):
         self.connection = connection
         self.discr = connection.from_discr
         self.vis_discr = connection.to_discr
 
+        if element_shrink_factor is None:
+            element_shrink_factor = 1
+
+        self.element_shrink_factor = element_shrink_factor
+
     def _resample_and_get(self, queue, vec):
         from pytools.obj_array import with_object_array_or_scalar
 
@@ -117,6 +122,8 @@ class Visualizer(object):
 
         return with_object_array_or_scalar(resample_and_get_one, vec)
 
+    # {{{ vis sub-element connectivity
+
     @memoize_method
     def _vis_connectivity(self):
         """
@@ -207,6 +214,10 @@ class Visualizer(object):
 
         return result
 
+    # }}}
+
+    # {{{ mayavi
+
     def show_scalar_in_mayavi(self, field, **kwargs):
         import mayavi.mlab as mlab
 
@@ -256,6 +267,10 @@ class Visualizer(object):
         if do_show:
             mlab.show()
 
+    # }}}
+
+    # {{{ vtk
+
     def write_vtk_file(self, file_name, names_and_fields, compressor=None,
             real_only=False):
 
@@ -287,6 +302,16 @@ class Visualizer(object):
 
         # }}}
 
+        nodes = nodes
+        if self.element_shrink_factor != 1:
+            for vgrp in self.vis_discr.groups:
+                nodes_view = vgrp.view(nodes)
+                el_centers = np.mean(nodes_view, axis=-1)
+                nodes_view[:] = (
+                        (self.element_shrink_factor * nodes_view)
+                        + (1-self.element_shrink_factor)
+                        * el_centers[:, :, np.newaxis])
+
         grid = UnstructuredGrid(
                 (self.vis_discr.nnodes,
                     DataArray("points",
@@ -314,7 +339,7 @@ class Visualizer(object):
             AppendedDataXMLGenerator(compressor)(grid).write(outf)
 
 
-def make_visualizer(queue, discr, vis_order):
+def make_visualizer(queue, discr, vis_order, element_shrink_factor=None):
     from meshmode.discretization import Discretization
     from meshmode.discretization.poly_element import (
             PolynomialWarpAndBlendElementGroup,
@@ -331,7 +356,9 @@ def make_visualizer(queue, discr, vis_order):
     from meshmode.discretization.connection import \
             make_same_mesh_connection
 
-    return Visualizer(make_same_mesh_connection(vis_discr, discr))
+    return Visualizer(
+            make_same_mesh_connection(vis_discr, discr),
+            element_shrink_factor=element_shrink_factor)
 
 # }}}
 
diff --git a/test/test_meshmode.py b/test/test_meshmode.py
index 38b153e1..5178cf40 100644
--- a/test/test_meshmode.py
+++ b/test/test_meshmode.py
@@ -496,7 +496,7 @@ def test_merge_and_map(ctx_getter, visualize=False):
         discr = Discretization(cl_ctx, mesh3, discr_grp_factory)
 
         from meshmode.discretization.visualization import make_visualizer
-        vis = make_visualizer(queue, discr, 3)
+        vis = make_visualizer(queue, discr, 3, element_shrink_factor=0.8)
         vis.write_vtk_file("merged.vtu", [])
 
 # }}}
-- 
GitLab