{"id":19763866,"url":"https://github.com/glvis/glvis","last_synced_at":"2026-02-07T00:04:54.396Z","repository":{"id":33706457,"uuid":"37359728","full_name":"GLVis/glvis","owner":"GLVis","description":"Lightweight OpenGL tool for accurate and flexible finite element visualization","archived":false,"fork":false,"pushed_at":"2025-05-14T23:27:26.000Z","size":6306,"stargazers_count":285,"open_issues_count":20,"forks_count":52,"subscribers_count":31,"default_branch":"master","last_synced_at":"2025-05-16T06:07:07.110Z","etag":null,"topics":["computational-science","data-viz","finite-elements","opengl","radiuss","visualization"],"latest_commit_sha":null,"homepage":"http://glvis.org","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GLVis.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2015-06-13T05:48:13.000Z","updated_at":"2025-05-07T21:00:12.000Z","dependencies_parsed_at":"2023-01-15T02:15:24.764Z","dependency_job_id":"ab2ec2ee-01b8-4756-9dd2-bb921ed1d06f","html_url":"https://github.com/GLVis/glvis","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GLVis%2Fglvis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GLVis%2Fglvis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GLVis%2Fglvis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GLVis%2Fglvis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GLVis","download_url":"https://codeload.github.com/GLVis/glvis/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254478190,"owners_count":22077676,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["computational-science","data-viz","finite-elements","opengl","radiuss","visualization"],"created_at":"2024-11-12T04:11:23.614Z","updated_at":"2026-02-07T00:04:54.383Z","avatar_url":"https://github.com/GLVis.png","language":"C++","readme":"                           GLVis visualization tool\n\n                     _/_/_/  _/      _/      _/  _/\n                  _/        _/      _/      _/        _/_/_/\n                 _/  _/_/  _/      _/      _/  _/  _/_/\n                _/    _/  _/        _/  _/    _/      _/_/\n                 _/_/_/  _/_/_/_/    _/      _/  _/_/_/\n\n                             https://glvis.org\n\n\u003ca href=\"https://github.com/GLVis/glvis/releases/latest\"\u003e\u003cimg alt=\"Release\" src=\"https://img.shields.io/badge/release-v4.5-success.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/GLVis/glvis/actions/workflows/builds.yml\"\u003e\u003cimg alt=\"Build\" src=\"https://github.com/GLVis/glvis/actions/workflows/builds.yml/badge.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/glvis/glvis/blob/master/LICENSE\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/badge/License-BSD-success.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://glvis.github.io/releases/glvis-macOS.dmg\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/badge/Download-Mac-success.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://glvis.github.io/releases/glvis-Windows.zip\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/badge/Download-Windows-success.svg\"\u003e\u003c/a\u003e\n\n[GLVis](https://glvis.org) is an OpenGL tool for visualization of finite element\nmeshes and functions. It is a multiplatform application that can be built on\nLinux/Unix systems, including macOS, and under Windows. It can also be used in a\nJupyter notebook, or in a web browser, see https://glvis.org/live.\n\n- For building instructions, see [INSTALL](INSTALL).\n\n- The GLVis [key commands](#key-commands) and [mouse functions](#mouse-functions)\n  are documented below.\n\n- GLVis is distributed under the terms of the BSD-3 license. All new contributions\n  must be made under this license. See [LICENSE](LICENSE) and [NOTICE](NOTICE) for details.\n\nWe welcome contributions and feedback from the community. Please see the file\n[CONTRIBUTING.md](CONTRIBUTING.md) for additional details about our development\nprocess.\n\nWhen started without any options, glvis starts a server which waits for a socket\nconnections (on port `19916` by default) and visualizes any received data. This\nway the results of simulations on a remote (parallel) machine can be visualized\non the local user desktop.\n\nGLVis can also be used to visualize a mesh with or without a finite element\nfunction (solution), as in\n\n```\nglvis -m cube.mesh3d\n```\n\nFor parallel computations, GLVis supports input from several parallel socket\nconnections as well as the visualization of parallel meshes and grid functions\nsaved in separate files from the command line as in\n\n```\nglvis -np 4 -m mesh -g solution\n```\n\nWhen given parallel input, GLVis will stitch the results to show the global mesh\nand solution. GLVis can also run a batch sequence of commands (GLVis scripts),\nor display previously saved socket streams.\n\nFor a complete list of command line options, type\n\n```\nglvis -h\n```\n\nDepending on the data type, variety of manipulations can be performed by using\nthe mouse and by typing (case sensitive) keystrokes in the GLVis window. Below\nis a partial list of the available functionality. Some of these keys can also be\nprovided as input, using the `-k` command-line option and the `keys` script\ncommand.\n\nFor high-order meshes and/or solution data, GLVis performs element subdivision\nto try to represent the data more accurately. However, for highly-varying data\nor large meshes, the auto-selected subdivision factor (see the\n[Auto-refinement](#auto-refinement) section below) may not be sufficient -- use\nthe keys \u003ckbd\u003eo\u003c/kbd\u003e / \u003ckbd\u003eO\u003c/kbd\u003e, described below, to manually adjust the\nsubdivision factor.\n\nSPDX-License-Identifier: BSD-3-Clause \u003cbr\u003e\nLLNL Release Number: LLNL-CODE-443271 \u003cbr\u003e\nDOI: 10.11578/dc.20171025.1249\n\n\nMouse functions\n===============\n\n## Basic\n\n- \u003ckbd\u003eLeft\u003c/kbd\u003e – Rotate the viewpoint\n- \u003ckbd\u003eRight\u003c/kbd\u003e – Zoom in (up) / Zoom out (down)\n- \u003ckbd\u003eMiddle\u003c/kbd\u003e – Translate the viewpoint\n- \u003ckbd\u003eLeft\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e – Start spinning the viewpoint (according to the dragging vector)\n\n## Advanced\n\n- \u003ckbd\u003eLeft\u003c/kbd\u003e + \u003ckbd\u003eAlt\u003c/kbd\u003e – Tilt\n- \u003ckbd\u003eLeft\u003c/kbd\u003e + \u003ckbd\u003eCtrl\u003c/kbd\u003e – Spherical rotation\n- \u003ckbd\u003eLeft\u003c/kbd\u003e + \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e – `z`-spinning\n- \u003ckbd\u003eRight\u003c/kbd\u003e + \u003ckbd\u003eCtrl\u003c/kbd\u003e – Object scaling (see also \u003ckbd\u003e[\u003c/kbd\u003e and \u003ckbd\u003e]\u003c/kbd\u003e)\n- \u003ckbd\u003eRight\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e  – Change light source position (see \u003ckbd\u003e\\\\\u003c/kbd\u003e)\n- \u003ckbd\u003eMiddle\u003c/kbd\u003e + \u003ckbd\u003eCtrl\u003c/kbd\u003e – Object translation (moves the camera left/right/up/down)\n- \u003ckbd\u003eMiddle\u003c/kbd\u003e + \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eAlt\u003c/kbd\u003e – Moves the camera forward/backward (vertical mouse motion) and tilts the camera left/right (horizontal mouse motion)\n- \u003ckbd\u003eMiddle\u003c/kbd\u003e + \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e – Object translation (turns the camera left/right/up/down)\n\n\nKey commands\n============\n\n## Basic\n\n- \u003ckbd\u003eh\u003c/kbd\u003e – Print a short help message in the terminal\n- \u003ckbd\u003er\u003c/kbd\u003e – Reset the plot to 3D view\n- \u003ckbd\u003eR\u003c/kbd\u003e – Cycle through the six 2D projections (camera looking above/below in `x`/`y`/`z` directions)\n- \u003ckbd\u003ej\u003c/kbd\u003e – Turn on/off perspective\n- \u003ckbd\u003es\u003c/kbd\u003e – Turn on/off unit cube scaling\n- \u003ckbd\u003eA\u003c/kbd\u003e – Turn on/off the use of anti-aliasing/multi-sampling\n- \u003ckbd\u003eL\u003c/kbd\u003e – Turn on/off logarithmic scale\n- \u003ckbd\u003ec\u003c/kbd\u003e – Toggle the colorbar and caption display state\n- \u003ckbd\u003eC\u003c/kbd\u003e – Change the main plot caption\n- \u003ckbd\u003ep\u003c/kbd\u003e / \u003ckbd\u003eP\u003c/kbd\u003e – Cycle forward/backwards through color palettes (lots of options, use \u003ckbd\u003eF6\u003c/kbd\u003e for a menu)\n- \u003ckbd\u003et\u003c/kbd\u003e – Cycle materials and lights (5 states)\n- \u003ckbd\u003ei\u003c/kbd\u003e – Toggle cutting plane (different options in 2D and 3D, see below)\n- \u003ckbd\u003eo\u003c/kbd\u003e / \u003ckbd\u003eO\u003c/kbd\u003e – Control element subdivisions (different options in 2D and 3D, see below)\n- \u003ckbd\u003el\u003c/kbd\u003e – Turn on/off the light\n- \u003ckbd\u003eg\u003c/kbd\u003e – Toggle background color (white/black)\n- \u003ckbd\u003ea\u003c/kbd\u003e – Toggle the bounding box *axes*. The options are:\n  - none\n  - bounding box with coordinates of the corners\n  - bounding box without coordinates\n  - red, green, blue colored main `x`, `y`, `z` axes + dashed axes\n- \u003ckbd\u003em\u003c/kbd\u003e – Toggle the *mesh* state. The options are:\n  - no mesh or level lines\n  - draw the element edges (i.e. the mesh)\n  - draw the level lines (use \u003ckbd\u003eF5 \u003c/kbd\u003e to modify the level lines)\n- \u003ckbd\u003ee\u003c/kbd\u003e – Toggle the *elements* state (see below for vector functions). The options are:\n  - show surface elements (corresponding to the function)\n  - show no surface elements\n  - (2D only) show element attributes\n  - (2D only) show element `det(J)`\n  - (2D only) show element `1/det(J)`\n  - (2D only) show element `\\kappa`\n  - (2D only) show element `\\kappa + 1/\\kappa`\n- \u003ckbd\u003eS\u003c/kbd\u003e – Take an image snapshot or record a movie (in spinning mode). By\n  default, the screenshots are taken in `png` format, using libpng. When GLVis\n  is compiled with `libtiff` support (see [INSTALL](INSTALL)) then the\n  screenshots are taken internally and saved in TIFF format (`.tif`\n  extension). If both of these options are disabled during the build process,\n  GLVis will use `SDL` to take screenshots in `bmp` format, which it will then\n  convert to `png` if ImageMagick's `convert` tool is available.\n- \u003ckbd\u003eG\u003c/kbd\u003e – 3D scene export to [glTF format](https://www.khronos.org/gltf)\n- \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003ep\u003c/kbd\u003e – Print to a PDF file using `gl2ps`. Other\n  vector formats (SVG, EPS) are also possible, but keep in mind that the\n  printing takes a while and the generated files are big.\n- \u003ckbd\u003eQ\u003c/kbd\u003e – Cycle between representations of the visualized *quadrature data*. The options are:\n  - piece-wise constant refined (LOR)\n  - L2 element dof collocation (interpolation)\n  - L2 element projection (L2 projection)\n- \u003ckbd\u003eQ\u003c/kbd\u003e – Cycle between representations of the visualized *complex data*. The options are:\n  - magnitude\n  - phase\n  - real part\n  - imaginary part\n- \u003ckbd\u003eq\u003c/kbd\u003e – Exit\n\n## Advanced\n\n- \u003ckbd\u003ef\u003c/kbd\u003e – Change the shading type (the way the elements and mesh are drawn). The options are:\n  - one triangle / quad per element with a constant normal\n  - one triangle / quad per element with normals averaged at the vertices\n  - multiple triangles / quads per element, also allowing for the visualization of discontinuous\n    functions and curvilinear elements (use \u003ckbd\u003eo\u003c/kbd\u003e / \u003ckbd\u003eO\u003c/kbd\u003e to control subdivisions)\n- \u003ckbd\u003e\\\\\u003c/kbd\u003e – Set light source position (see \u003ckbd\u003eRight\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e)\n- \u003ckbd\u003e*\u003c/kbd\u003e / \u003ckbd\u003e/\u003c/kbd\u003e – Zoom in/out\n- \u003ckbd\u003e+\u003c/kbd\u003e / \u003ckbd\u003e-\u003c/kbd\u003e – Stretch/compress in `z`-direction\n- \u003ckbd\u003e[\u003c/kbd\u003e / \u003ckbd\u003e]\u003c/kbd\u003e – Shrink/enlarge the bounding box (relative to the colorbar)\n- \u003ckbd\u003e(\u003c/kbd\u003e / \u003ckbd\u003e)\u003c/kbd\u003e – Shrink/enlarge the visualization window\n- \u003ckbd\u003e.\u003c/kbd\u003e – Start/stop `z`-spinning (speed/direction can be controlled with \u003ckbd\u003e0\u003c/kbd\u003e / \u003ckbd\u003eEnter\u003c/kbd\u003e)\n- \u003ckbd\u003e←\u003c/kbd\u003e, \u003ckbd\u003e→\u003c/kbd\u003e, \u003ckbd\u003e↑\u003c/kbd\u003e, \u003ckbd\u003e↓\u003c/kbd\u003e – Manual rotation\n- \u003ckbd\u003e1\u003c/kbd\u003e, \u003ckbd\u003e2\u003c/kbd\u003e, \u003ckbd\u003e3\u003c/kbd\u003e, \u003ckbd\u003e4\u003c/kbd\u003e, \u003ckbd\u003e5\u003c/kbd\u003e, \u003ckbd\u003e6\u003c/kbd\u003e, \u003ckbd\u003e7\u003c/kbd\u003e, \u003ckbd\u003e8\u003c/kbd\u003e, \u003ckbd\u003e9\u003c/kbd\u003e – Manual rotation along coordinate axes\n- \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003ea\u003c/kbd\u003e – Set axes number format\n- \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003ec\u003c/kbd\u003e – Set colorbar number format\n- \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003e←\u003c/kbd\u003e, \u003ckbd\u003e→\u003c/kbd\u003e, \u003ckbd\u003e↑\u003c/kbd\u003e, \u003ckbd\u003e↓\u003c/kbd\u003e – Translate the viewpoint\n- \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eo\u003c/kbd\u003e – Toggle an element ordering curve\n- \u003ckbd\u003en\u003c/kbd\u003e / \u003ckbd\u003eN\u003c/kbd\u003e – Cycle through numbering: `None` → `Elements` → `Edges` → `Vertices` → `DOFs`\n- \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003en\u003c/kbd\u003e – Toggle parallel numbering: `local` to each MPI rank (default) or `global`\n- \u003ckbd\u003e`\u003c/kbd\u003e – Toggle a ruler, with initial origin at the center of the bounding box. The origin can be later moved with \u003ckbd\u003e~\u003c/kbd\u003e. The options are:\n  - none\n  - coordinate axes lines\n  - coordinate axes planes\n- \u003ckbd\u003e~\u003c/kbd\u003e - Enter new ruler origin\n- \u003ckbd\u003ek\u003c/kbd\u003e / \u003ckbd\u003eK\u003c/kbd\u003e - Adjust the transparency level. The balance of\n  transparency can be further adjusted with \u003ckbd\u003e,\u003c/kbd\u003e and \u003ckbd\u003e\u003c\u003c/kbd\u003e.\n- \u003ckbd\u003e!\u003c/kbd\u003e - Toggle the use of (1D) texture (smooth interpolation of colors). The options are:\n  - use discrete texture, the number of colors used depends on the current palette\n  - use smooth texture (interpolated from current palette)\n- \u003ckbd\u003eF5\u003c/kbd\u003e – Change the range and number of the level lines\n- \u003ckbd\u003eF6\u003c/kbd\u003e – Palette menu (negative repeat number flips the palette)\n- \u003ckbd\u003eF7\u003c/kbd\u003e – Change the minimum and maximum values\n- \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003eF7\u003c/kbd\u003e – Set the bounding box from the terminal\n- \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003ea\u003c/kbd\u003e – Cycle through the auto-scaling options:\n  - `off`: do not change the bounding box and the value range\n  - `on` (default): recompute both the bounding box and the value range\n  - `value`: recompute only the value range\n  - `mesh`: recompute only the bounding box\n- \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003e.\u003c/kbd\u003e – Start/stop harmonic complex phase animation (speed can be controlled with \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003e0\u003c/kbd\u003e / \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eEnter\u003c/kbd\u003e)\n\n## 2D scalar data\n\n- \u003ckbd\u003ei\u003c/kbd\u003e – Toggle cutting (clipping) plane in 2D\n- \u003ckbd\u003ey\u003c/kbd\u003e / \u003ckbd\u003eY\u003c/kbd\u003e – Rotate cutting plane (`\\theta`) in 2D\n- \u003ckbd\u003ez\u003c/kbd\u003e / \u003ckbd\u003eZ\u003c/kbd\u003e – Translate cutting plane in 2D\n- \u003ckbd\u003eo\u003c/kbd\u003e / \u003ckbd\u003eO\u003c/kbd\u003e – Control element subdivisions in 2D\n  - there are two subdivision factors in this case: element (`s1`) and boundary (`s2`).\n  - \u003ckbd\u003eO\u003c/kbd\u003e cycles through the following \"subdivision functions\", (prints a message in the terminal when changed):\n    - Increase element subdivision factor: `s1 += s2`\n    - Decrease element subdivision factor: `s1 -= s2`\n    - Increase boundary subdivision factor: `s2++`\n    - Decrease boundary subdivision factor: `s2--`\n  - \u003ckbd\u003eo\u003c/kbd\u003e – performs the currently selected function\n- \u003ckbd\u003eb\u003c/kbd\u003e – Toggle the boundary in 2D scalar mode. The options are:\n  - no boundary\n  - black boundary\n  - boundary colored with the boundary attribute\n  - Use \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003eF9\u003c/kbd\u003e / \u003ckbd\u003eF10\u003c/kbd\u003e to cycle through the boundary attributes.\n- \u003ckbd\u003eF3\u003c/kbd\u003e / \u003ckbd\u003eF4\u003c/kbd\u003e – Shrink/Zoom each element towards its center, in order to better visualize the different element shapes\n- \u003ckbd\u003eF8\u003c/kbd\u003e – List of material subdomains to show\n- \u003ckbd\u003eF9\u003c/kbd\u003e / \u003ckbd\u003eF10\u003c/kbd\u003e – Walk through material subdomains\n- \u003ckbd\u003eF11\u003c/kbd\u003e / \u003ckbd\u003eF12\u003c/kbd\u003e – Shrink/Zoom material subdomains (to the centers of the attributes)\n\n## 3D scalar data\n\n- \u003ckbd\u003ei\u003c/kbd\u003e – Toggle cutting (clipping) plane in 3D. The options are:\n  - none\n  - cut through the elements\n  - show only elements behind the cutting plane\n- \u003ckbd\u003eI\u003c/kbd\u003e – Toggle the cutting plane algorithm used when the option *cut through the elements* is selected. The two algorithms are:\n  - slower, more accurate algorithm for curved meshes (default)\n  - faster algorithm suitable for meshes with planar faces\n- \u003ckbd\u003ex\u003c/kbd\u003e / \u003ckbd\u003eX\u003c/kbd\u003e – Rotate cutting plane (`\\phi`) in 3D\n- \u003ckbd\u003ey\u003c/kbd\u003e / \u003ckbd\u003eY\u003c/kbd\u003e – Rotate cutting plane (`\\theta`) in 3D\n- \u003ckbd\u003ez\u003c/kbd\u003e / \u003ckbd\u003eZ\u003c/kbd\u003e – Translate cutting plane in 3D\n- \u003ckbd\u003eE\u003c/kbd\u003e – Display/Hide the elements in the cutting plane\n- \u003ckbd\u003eM\u003c/kbd\u003e – Display/Hide the mesh in the cutting plane\n- \u003ckbd\u003eo\u003c/kbd\u003e / \u003ckbd\u003eO\u003c/kbd\u003e – Refine/de-refine elements in 3D\n- \u003ckbd\u003eu\u003c/kbd\u003e / \u003ckbd\u003eU\u003c/kbd\u003e – Move level surface value up/down\n- \u003ckbd\u003ev\u003c/kbd\u003e / \u003ckbd\u003eV\u003c/kbd\u003e – Add/Delete a level surface value\n- \u003ckbd\u003ew\u003c/kbd\u003e / \u003ckbd\u003eW\u003c/kbd\u003e – Move boundary elements up/down in direction of\n  the normal (i.e. \"plot\" the boundary values in normal direction)\n- \u003ckbd\u003eF3\u003c/kbd\u003e / \u003ckbd\u003eF4\u003c/kbd\u003e – Shrink/Zoom boundary elements (to the centers of the attributes)\n- \u003ckbd\u003eF8\u003c/kbd\u003e – List of boundary subdomains to show\n- \u003ckbd\u003eF9\u003c/kbd\u003e / \u003ckbd\u003eF10\u003c/kbd\u003e – Walk through boundary subdomains\n- \u003ckbd\u003eF11\u003c/kbd\u003e / \u003ckbd\u003eF12\u003c/kbd\u003e – Shrink/Zoom material subdomains (to the centers of the attributes)\n\n## 2D vector data\n\n- \u003ckbd\u003ev\u003c/kbd\u003e – Toggle the *vector* state (uses vector subdivision factor, accept \u003ckbd\u003eu\u003c/kbd\u003e / \u003ckbd\u003eU\u003c/kbd\u003e). The options are:\n  - do not show vectors\n  - show vectors as displacement\n  - show vector field; vectors are uniformly scaled; the color varies with the\n    magnitude (or the current *vector-to-scalar function*, see keys \u003ckbd\u003eu\u003c/kbd\u003e / \u003ckbd\u003eU\u003c/kbd\u003e)\n  - show vector field as above, but the vectors are scaled proportionally to their magnitude\n  - show vector field; vectors are uniformly scaled; the color is gray; arrows are above the surface\n  - show vector field as above, but the vectors are scaled proportionally to their magnitude\n- \u003ckbd\u003eV\u003c/kbd\u003e – Change the scaling of the vectors relative to the default\n- \u003ckbd\u003ed\u003c/kbd\u003e – Toggle the *displaced mesh* state: (see also keys \u003ckbd\u003en\u003c/kbd\u003e / \u003ckbd\u003eb\u003c/kbd\u003e). The options are:\n  - do not show displaced mesh\n  - show displaced mesh\n  - assuming displacement field show deformation using Cartesian lines\n  - assuming displacement field show deformation using polar lines\n- \u003ckbd\u003en\u003c/kbd\u003e – Increase the displacement amount in 10% steps, wraps around from 100% to 0%\n- \u003ckbd\u003eb\u003c/kbd\u003e – Decrease the displacement amount in 10% steps, wraps around from 0% to 100%\n- \u003ckbd\u003eB\u003c/kbd\u003e – Toggle the boundary in 2D vector mode\n- \u003ckbd\u003ee\u003c/kbd\u003e – Toggle the *elements* state (vector data version). The options are:\n  - show surface elements corresponding to the current *vector-to-scalar function*\n  - do not show surface elements\n  - assuming a displacement field show `det(J)/det(J_d)`\n  - assuming a displacement field show `det(J_d)/det(J)`\n- \u003ckbd\u003eu\u003c/kbd\u003e / \u003ckbd\u003eU\u003c/kbd\u003e – Change the *vector-to-scalar function* and the vector subdivision factor\n- \u003ckbd\u003eU\u003c/kbd\u003e – Toggle the functionality of \u003ckbd\u003eu\u003c/kbd\u003e (prints a message in the terminal when changed). The options are:\n  - Increase the vector subdivision factor\n  - Decrease the vector subdivision factor\n  - Cycle through *vector-to-scalar functions* choices:\n     - magnitude: `\\sqrt{v_x^2+v_y^2}`\n     - direction from `-\\pi` to `\\pi`: `atan2(v_y,v_x)`\n     - `x`-component: `v_x`\n     - `y`-component: `v_y`\n     - divergence: `div(v)`\n     - curl: `curl(v)` [skipped for H(div) elements]\n     - anisotropy in `grad(v)`  [skipped for H(div) elements]\n\n## 3D vector data\n\n- \u003ckbd\u003ev\u003c/kbd\u003e – Toggle the *vector* state. The options are:\n   - do not show vectors\n   - show vectors as displacement\n   - show vector field; vectors are uniformly scaled; the color varies with the\n     magnitude (or the current *vector-to-scalar function*, see key \u003ckbd\u003eF\u003c/kbd\u003e)\n   - show vector field as above, but the vectors are scaled proportionally to\n     their magnitude\n   - show the subset of the vector field with scalar function around a given\n     value (adjusted with keys \u003ckbd\u003eu\u003c/kbd\u003e / \u003ckbd\u003eU\u003c/kbd\u003e and \u003ckbd\u003ew\u003c/kbd\u003e / \u003ckbd\u003eW\u003c/kbd\u003e)\n   - show the vector field restricted to the boundary of the domain\n- \u003ckbd\u003eV\u003c/kbd\u003e – Cycle the *vector* state in the opposite direction of \u003ckbd\u003ev\u003c/kbd\u003e\n- \u003ckbd\u003eu\u003c/kbd\u003e / \u003ckbd\u003eU\u003c/kbd\u003e – Move the level field vectors (in the appropriate *vector* state)\n- \u003ckbd\u003ew\u003c/kbd\u003e / \u003ckbd\u003eW\u003c/kbd\u003e – Add/Delete level field vector (in the appropriate *vector* state)\n- \u003ckbd\u003ed\u003c/kbd\u003e – Toggle the *displaced mesh* state (see also keys \u003ckbd\u003en\u003c/kbd\u003e / \u003ckbd\u003eb\u003c/kbd\u003e). The options are:\n  - do not show displaced mesh\n  - show displaced mesh\n- \u003ckbd\u003en\u003c/kbd\u003e – Increase the displacement amount in 10% steps, wraps around from 100% to 0%\n- \u003ckbd\u003eb\u003c/kbd\u003e – Decrease the displacement amount in 10% steps, wraps around from 0% to 100%\n- \u003ckbd\u003eF\u003c/kbd\u003e – Change the *vector-to-scalar function*. The options are:\n  - magnitude: `\\sqrt{v_x^2+v_y^2+v_z^2}`\n  - `x`-component: `v_x`\n  - `y`-component: `v_y`\n  - `z`-component: `v_z`\n\n## Auto-refinement\n\nThe GLVis auto-refinement algorithm selects a subdivision factor trying to\nachieve an accurate representation of high-order meshes and solution data while\nkeeping the initial time to visualize the data reasonable. The algorithm can be\nsummarized as follows:\n- GLVis draws surface elements; the number of drawn elements, `ne`, is either:\n  - the number of elements in the mesh for 2D meshes (including surface meshes,\n    i.e. 2D meshes embedded in 3D space), or\n  - the number of boundary mesh elements described by the mesh in 3D.\n- A tentative upper limit on the number of vertices to be drawn is defined based\n  on the maximum order of the mesh and the solution, `max_order`:\n  ```\n  max_vert = ne * (max_order + 1) * (max_order + 1)\n  ```\n- To allow more accurate representation for small meshes, this number is\n  potentially increased:\n  ```\n  max_vert = max(max_vert, 100 000)\n  ```\n- To keep the time to initially visualize the data reasonable, this number is\n  potentially reduced:\n  ```\n  max_vert = min(max_vert, 2 000 000)\n  ```\n- Finally, the subdivision factor `ref` is chosen to be the largest number such\n  that:\n  - the number of vertices needed to draw the `ne` surface elements with `ref`\n    subdivisions does not exceed `max_vert`:\n    ```\n    ne * (ref + 1) * (ref + 1) \u003c= max_vert\n    ```\n  - for large meshes where the above limit cannot be satisfied, set `ref = 1`\n  - for small meshes, avoid excessive refinements:\n    ```\n    ref \u003c= 16\n    ```\n\nNote that, for highly-varying data or large meshes, this auto-selected\nsubdivision factor may not be sufficient for accurate representation. In such\ncases the subdivision can be manually adjusted using the keys \u003ckbd\u003eo\u003c/kbd\u003e /\n\u003ckbd\u003eO\u003c/kbd\u003e, described above.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglvis%2Fglvis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fglvis%2Fglvis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglvis%2Fglvis/lists"}