PyGLVis is an interactive Jupyter widget for visualizing finite element meshes and functions, built on-top of the GLVis library.
The GLVis Jupyter widget is installed using pip. To install the latest version from the repository:
git clone https://github.com/GLVis/pyglvis.git
cd pyglvis
pip install .Or, install directly from PyPi,
pip install glvisPyGLVis requires the Python wrapper for MFEM, PyMFEM, which can be installed with
pip install mfemfrom glvis import glvis
# Create a `glvis` object
g = glvis(data, width=640, height=480)
# Run a cell with `g` as the last statement to display the widget
gThe data object can be one of:
Mesh, defined in PyMFEM(Mesh, GridFunction)tuple, defined in PyMFEMstr, in the format of*.savedfiles used by MFEM and GLVis. See examples/basic.ipynb for an example.
GLVis has many keyboard commands that can be used to customize the visualization. A few of the most common are listed below. See the GLVis README for a full list.
r- reset the viewc- toggle the colorbarj- toggle perspectivel- toggle the lightg- toggle the background color (white/black)a- cycle through bounding box axes statesm- cycle through mesh statesp- cycle through color palettest- cycle through materials and lights0- begin rotating around z-axis.- pause rotation*//- zoom in/out
These can be set using the keys argument when creating a glvis object.
glvis(data, keys='rljgac//0')This combination of keys would: r reset the view, l toggle the light, j toggle perspective, g toggle the background color to black (default is white), a show the bounding box, c show the colorbar, // zoom out twice, and 0 begin rotating around the z-axis:
Alternatively, keys can be typed directly into the widget after it has been created:
Once you have a glvis object there are a few methods that can used to update the
visualization, besides using keys:
# Show a new Mesh/GridFunction, resets keys
g.plot(data)
# Show an updated visualization with the same data, preserving keys
g.update(data)
# Change the image size
g.set_size(width, height)
# Force the widget to render. If the widget isn't the last statement in a cell it
# will not be shown without this. See ex9.ipynb
g.render()See the examples directory for additional examples. To test those locally, start a Jupyter lab server with
jupyter lab
This widget was originally developed using the jupyter widget cookiecutter; however, recent changes to the Jupyter ecosystem have broken a lot of functionality, leading to a rewrite using anywidget. If you encounter any problems, please consider supporting development by opening an issue.
graph TD;
A[mfem] --> B[pymfem];
A --> C[glvis];
C --> D[glvis-js];
Ext1[emscripten] --> D;
D-.-E["glvis-js (esm)"]
B & E --> G[pyglvis];
Ext2[jupyter] --> G;
pyglvis is most directly dependent on PyMFEM and glvis-js. PyMFEM is a Python wrapper of the finite element library, MFEM, while glvis-js is a JavaScript/WebAssembly port of glvis.
glvis-js is hosted on github and mirrored on npm. esm.sh allows pyglvis to pull the latest version of glvis-js directly from npm. This can be seen in the first line of glvis/widget.js:
import glvis from "https://esm.sh/glvis";
You can specify a different version of glvis-js by adding @x.y.z to the end of this import statement, where x.y.z matches a version number available on npm, e.g.
import glvis from "https://esm.sh/[email protected]";
To publish a new version of glvis-js, follow the instructions on the repo.
-
Update
__version__inglvis/__about__.py -
git addandgit commitchanges
You will need twine to publish to PyPI, install with pip.
python -m hatch build
twine upload dist/*
git tag -a X.X.X -m 'comment'
git push --tags

