From 9995589b1e56707644f83a84fb9bfd123856cd1a Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Sat, 5 Jul 2014 14:26:50 -0500
Subject: [PATCH] Improve IO user interface around force_ambient_dim

---
 meshmode/mesh/io.py | 29 ++++++++++++++++++++++-------
 1 file changed, 22 insertions(+), 7 deletions(-)

diff --git a/meshmode/mesh/io.py b/meshmode/mesh/io.py
index af83e49..3c59122 100644
--- a/meshmode/mesh/io.py
+++ b/meshmode/mesh/io.py
@@ -162,27 +162,27 @@ class GmshMeshReceiver(GmshMeshReceiverBase):
 # }}}
 
 
-def read_gmsh(filename, force_ambient_dimension=None):
+def read_gmsh(filename, force_ambient_dim=None):
     """Read a gmsh mesh file from *filename* and return a
     :class:`meshmode.mesh.Mesh`.
 
-    :arg force_dimension: if not None, truncate point coordinates to
+    :arg force_ambient_dim: if not None, truncate point coordinates to
         this many dimensions.
     """
     from meshpy.gmsh_reader import read_gmsh
     recv = GmshMeshReceiver()
-    read_gmsh(recv, filename, force_dimension=force_ambient_dimension)
+    read_gmsh(recv, filename, force_dimension=force_ambient_dim)
     return recv.get_mesh()
 
 
 def generate_gmsh(source, dimensions, order=None, other_options=[],
-        extension="geo", gmsh_executable="gmsh", force_ambient_dimension=None):
+        extension="geo", gmsh_executable="gmsh", force_ambient_dim=None):
     """Run :cmd:`gmsh` on the input given by *source*, and return a
     :class:`meshmode.mesh.Mesh` based on the result.
 
     :arg source: an instance of either :class:`FileSource` or
         :class:`LiteralSource`
-    :arg force_ambient_dimension: if not None, truncate point coordinates to
+    :arg force_ambient_dim: if not None, truncate point coordinates to
         this many dimensions.
     """
     recv = GmshMeshReceiver()
@@ -193,6 +193,21 @@ def generate_gmsh(source, dimensions, order=None, other_options=[],
             other_options=other_options, extension=extension,
             gmsh_executable=gmsh_executable) as runner:
         parse_gmsh(recv, runner.output_file,
-                force_dimension=force_ambient_dimension)
+                force_dimension=force_ambient_dim)
 
-    return recv.get_mesh()
+    mesh = recv.get_mesh()
+
+    if force_ambient_dim is None:
+        AXIS_NAMES = "xyz"
+
+        dim = mesh.vertices.shape[0]
+        for idim in range(dim):
+            if (mesh.vertices[idim] == 0).all():
+                from warnings import warn
+                warn("all vertices' %s coordinate is zero--perhaps you want to pass "
+                        "force_ambient_dim=%d (pass any fixed value to "
+                        "force_ambient_dim to silence this warning)" % (
+                            AXIS_NAMES[idim], idim))
+                break
+
+    return mesh
-- 
GitLab