From 25f56aa07d101ba24255aabbd60a0ffdd5640507 Mon Sep 17 00:00:00 2001 From: Matt Wala Date: Wed, 4 Dec 2019 22:54:00 -0600 Subject: [PATCH 1/3] Fix names of generate_torus() parameters (closes #12) Also, improve the documentation of generate_torus(). --- doc/images/torus.png | Bin 0 -> 82548 bytes meshmode/mesh/generation.py | 58 ++++++++++++++++++++++++++++-------- 2 files changed, 45 insertions(+), 13 deletions(-) create mode 100644 doc/images/torus.png diff --git a/doc/images/torus.png b/doc/images/torus.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e2e297104bd4bae89d31e93c9a2163dc45a62d GIT binary patch literal 82548 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 M)V^&4@51G+@$ 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 WgJTwN6`YS311QU@%hkwOg#I77o8#;N literal 0 HcmV?d00001 diff --git a/meshmode/mesh/generation.py b/meshmode/mesh/generation.py index 80289cac..7dd04c16 100644 --- a/meshmode/mesh/generation.py +++ b/meshmode/mesh/generation.py @@ -454,13 +454,13 @@ def generate_icosphere(r, order, uniform_refinement_rounds=0): # {{{ generate_torus_and_cycle_vertices -def generate_torus_and_cycle_vertices(r_outer, r_inner, - n_outer=20, n_inner=10, order=1): - a = r_outer - b = r_inner - u, v = np.mgrid[0:2*np.pi:2*np.pi/n_outer, 0:2*np.pi:2*np.pi/n_inner] +def generate_torus_and_cycle_vertices(r_major, r_minor, + n_major=20, n_minor=10, order=1): + a = r_major + b = r_minor + u, v = np.mgrid[0:2*np.pi:2*np.pi/n_major, 0:2*np.pi:2*np.pi/n_minor] - # http://www.math.hmc.edu/~gu/curves_and_surfaces/surfaces/torus.html + # https://web.archive.org/web/20160410151837/https://www.math.hmc.edu/~gu/curves_and_surfaces/surfaces/torus.html # noqa x = np.cos(u)*(a+b*np.cos(v)) y = np.sin(u)*(a+b*np.cos(v)) z = b*np.sin(v) @@ -468,11 +468,11 @@ def generate_torus_and_cycle_vertices(r_outer, r_inner, .transpose(0, 2, 1).copy().reshape(3, -1)) def idx(i, j): - return (i % n_outer) + (j % n_inner) * n_outer + return (i % n_major) + (j % n_minor) * n_major vertex_indices = ([(idx(i, j), idx(i+1, j), idx(i, j+1)) - for i in range(n_outer) for j in range(n_inner)] + for i in range(n_major) for j in range(n_minor)] + [(idx(i+1, j), idx(i+1, j+1), idx(i, j+1)) - for i in range(n_outer) for j in range(n_inner)]) + for i in range(n_major) for j in range(n_minor)]) vertex_indices = np.array(vertex_indices, dtype=np.int32) grp = make_group_from_vertices(vertices, vertex_indices, order) @@ -513,15 +513,47 @@ def generate_torus_and_cycle_vertices(r_outer, r_inner, Mesh( vertices, [grp.copy(nodes=nodes)], is_conforming=True), - [idx(i, 0) for i in range(n_outer)], - [idx(0, j) for j in range(n_inner)]) + [idx(i, 0) for i in range(n_major)], + [idx(0, j) for j in range(n_minor)]) # }}} -def generate_torus(r_outer, r_inner, n_outer=20, n_inner=10, order=1): +def generate_torus(r_major, r_minor, n_major=20, n_minor=10, order=1): + r"""Generate a torus. + + .. figure:: images/torus.png + :align: center + + Shown: A torus with major circle (magenta) and minor circle (red). + Source: https://commons.wikimedia.org/wiki/File:Torus_cycles.svg + (public domain image by Krishnavedala). + + The torus is obtained as the image of the parameter domain + :math:`(u, v) \in [0, 2\pi) \times [0, 2 \pi)` under the map + + .. math:: + \begin{align} + x &= \cos(u) (r_\text{major} + r_\text{minor} \cos(v)) \\ + y &= \sin(u) (r_\text{major} + r_\text{minor} \sin(v)) \\ + z &= r_\text{minor} \sin(v) + \end{align} + + where :math:`r_\text{major}` and :math:`r_\text{minor}` are the radii of the + major and minor circles, respectively. The parameter domain is tiled with + :math:`n_\text{major} \times n_\text{minor}` contiguous rectangles, and then + each rectangle is subdivided into two triangles. + + :arg r_major: radius of the major circle + :arg r_minor: radius of the minor circle + :arg n_major: number of elements along major circle + :arg n_minor: number of elements along minor circle + :arg order: element order + :returns: a :class:`meshmode.mesh.Mesh` of a torus + + """ mesh, a_cycle, b_cycle = generate_torus_and_cycle_vertices( - r_outer, r_inner, n_outer, n_inner, order) + r_major, r_minor, n_major, n_minor, order) return mesh -- GitLab From e34f2954e69e3308517e78e4f2f924ab45b1a63f Mon Sep 17 00:00:00 2001 From: Matt Wala Date: Wed, 4 Dec 2019 23:09:03 -0600 Subject: [PATCH 2/3] Rename params in test --- test/test_chained.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_chained.py b/test/test_chained.py index 76c416f3..21ebbda4 100644 --- a/test/test_chained.py +++ b/test/test_chained.py @@ -68,7 +68,7 @@ def create_discretization(queue, ndim, if mesh_name == "torus": mesh = generate_torus(10.0, 5.0, order=order, - n_inner=nelements, n_outer=nelements) + n_minor=nelements, n_major=nelements) elif mesh_name == "warp": mesh = generate_warped_rect_mesh(ndim, order=order, n=nelements) else: -- GitLab From 9e355168ff9b82f085e95fb3f286e8549626c432 Mon Sep 17 00:00:00 2001 From: Matt Wala Date: Thu, 5 Dec 2019 14:52:46 -0600 Subject: [PATCH 3/3] s/elements/rectangles/ --- meshmode/mesh/generation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meshmode/mesh/generation.py b/meshmode/mesh/generation.py index 7dd04c16..3540dadd 100644 --- a/meshmode/mesh/generation.py +++ b/meshmode/mesh/generation.py @@ -546,8 +546,8 @@ def generate_torus(r_major, r_minor, n_major=20, n_minor=10, order=1): :arg r_major: radius of the major circle :arg r_minor: radius of the minor circle - :arg n_major: number of elements along major circle - :arg n_minor: number of elements along minor circle + :arg n_major: number of rectangles along major circle + :arg n_minor: number of rectangles along minor circle :arg order: element order :returns: a :class:`meshmode.mesh.Mesh` of a torus -- GitLab