From 4e97cc81220e1ad1ed30baa80e0696261a96ee8f Mon Sep 17 00:00:00 2001 From: Ben Sepanski <ben_sepanski@baylor.edu> Date: Mon, 1 Jun 2020 18:53:13 -0500 Subject: [PATCH] Added some docs about interop --- doc/images/firedrake_mesh_design.gv | 25 ++++++++ doc/images/firedrake_mesh_design.png | Bin 0 -> 43833 bytes doc/index.rst | 1 + doc/interop.rst | 91 +++++++++++++++++++++++++++ 4 files changed, 117 insertions(+) create mode 100755 doc/images/firedrake_mesh_design.gv create mode 100755 doc/images/firedrake_mesh_design.png create mode 100644 doc/interop.rst diff --git a/doc/images/firedrake_mesh_design.gv b/doc/images/firedrake_mesh_design.gv new file mode 100755 index 00000000..b5465390 --- /dev/null +++ b/doc/images/firedrake_mesh_design.gv @@ -0,0 +1,25 @@ +// created with graphviz2.38 dot + +digraph{ + // NODES + + top [label="Topological\nMesh"]; + ref [label="Reference\nElement"]; + fspace [label="Function Space"]; + coordless [label="Coordinateless\nFunction"]; + geo [label="Geometric\nMesh"]; + withgeo [label="With\nGeometry"]; + + // EDGES + + top -> fspace; + ref -> fspace; + + fspace -> coordless; + + top -> geo; + coordless -> geo [label="Mesh\nCoordinates"]; + + fspace -> withgeo; + geo -> withgeo; +} diff --git a/doc/images/firedrake_mesh_design.png b/doc/images/firedrake_mesh_design.png new file mode 100755 index 0000000000000000000000000000000000000000..f394f9e7f3d56138ff15850311e6bcd6dcdd7bbe GIT binary patch literal 43833 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 literal 0 HcmV?d00001 diff --git a/doc/index.rst b/doc/index.rst index 3a7a2ba7..0beee875 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -9,6 +9,7 @@ Contents: mesh discretization connection + interop misc Indices and tables diff --git a/doc/interop.rst b/doc/interop.rst new file mode 100644 index 00000000..f621b49b --- /dev/null +++ b/doc/interop.rst @@ -0,0 +1,91 @@ +interop +======= + +Interfacing with data outside of :mod:`meshmode`. + + +fiat +---- + +.. automodule:: meshmode.interop.fiat.simplex_cell + + +FInAT +----- + +.. automodule:: meshmode.interop.FInAT.lagrange_element + + +Firedrake +--------- + + +Firedrake Function Space Design +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +.. note:: + *(If you are just an end-user, you probably don't need to know this)* + + In firedrake, meshes and function spaces have a close relationship. + In particular, due to some structure described in this + `firedrake pull request <http://github.com/firedrakeproject/firedrake/pull/627>`_. + ``fd2mm`` mimics this firedrake design style. + + In short, it is the idea + that every function space should have a mesh, and the coordinates of the mesh + should be representable as a function on that same mesh, which must live + on some function space on the mesh... etc. + Under the hood, we divide between topological and geometric objects, + roughly as so + + (1) A reference element defined using :mod:`FInAT` and :mod:`fiat` + is used to define what meshmode calls the unit nodes and unit + vertices. It is worth noting that :mod:`firedrake` does + not require a positive orientation of elements and that its + reference traingle is different than specified in :mod:`modepy`. + + (2) A ``MeshTopology`` which holds information about connectivity + and other topological properties, but nothing about geometry/coordinates + etc. + + (3) A ``FunctionSpace`` created from a ``FInAT`` element and a + ``MeshTopology`` which allows us to define functions + mapping the nodes (defined by the ``FInAT`` element) of + each element in the ``MeshTopology`` to some values + + (4) A ``CoordinatelessFunction`` (in the sense that its + *domain* has no coordinates) which is a function + in a ``FunctionSpace`` + + (5) A ``MeshGeometry`` created from a ``FunctionSpace`` + and a ``CoordinatelessFunction`` in that ``FunctionSpace`` + which maps each dof to its geometric coordinates. + + (6) A ``WithGeometry`` which is a ``FunctionSpace`` together + with a ``MeshGeometry``. This is the object returned + usually returned to the user by a call + to the :mod:`firedrake` function :func:`FunctionSpace`. + + (7) A ``Function`` is defined on a ``WithGeometry`` + + Thus, by the coordinates of a mesh geometry we mean + + (a) On the hidden back-end: a ``CoordinatelessFunction`` *f* on some function + space defined only on the mesh topology + (b) On the front-end: A ``Function`` with the values of *f* but defined + on a ``WithGeometry`` created from the ``FunctionSpace`` *f* lives in + and the ``MeshGeometry`` *f* defines. + + Basically, it's this picture (where a->b if b depends on a) + + .. warning:: + + In general, the ``FunctionSpace`` of the coordinates function + of a ``WithGeometry`` may not be the same ``FunctionSpace`` + as for functions which live in the ``WithGeometry``. + This picture + only shows how the class definitions depend on each other. + + + .. image:: images/firedrake_mesh_design.png -- GitLab