Plot3D Utilities
A python plot3D library for reading, writing, finding connectivity, and post processing for Plot3D data files.
Install Instructions
To install simply do a pip install plot3d
Building the docs
- From the repo root, run pip install uv (if you don't already have uv) then uv sync --extra docs (and commit the refreshed uv.lock) to capture the new Sphinx dependencies.
- Build locally with uv run sphinx-build -b html docs docs/_build/html or use uv run sphinx-autobuild for live previews.
- Push the branch to main, then enable GitHub Pages (Settings → Pages → “GitHub Actions”) so the new workflow can deploy your merged Sphinx docs automatically.
Metis
Metis is used to group the blocks to be evaluated. So say you have 1000 blocks and 8 CPU. The blocks are split up and sent to the CPU or GPU. The split is done with weighting to block size and connectivity this way each processor is evaluating similar number of nodes. Plot3D Library will work without metis but metis functionality wont be available.
Partitioning is backed by metis-rs, a pure Rust reimplementation of METIS with Python bindings. It ships as a prebuilt wheel, so pip install plot3d (which pulls in metis-rs) is all that's needed on Linux, Mac, and Windows — no separate METIS install, no compiler, and no METIS_DLL/LD_LIBRARY_PATH setup required.
Tutorials
Reading Writing and Viewing Plot3D files
Read/Write File Formats (Binary, ASCII, Fortran, Endianness)
Periodicity with axially rotated and copied blocks
Flatten a mesh into a finite-volume graph, and solve on it: a converging-diverging duct
(this notebook's graph comes from plot3d.flatten_mesh — an unstructured, multi-block 3D finite-volume graph; not to be confused with plot3d.meridional_flatten, a different, 2D axisymmetric collapse used internally by the same duct example's Euler solver stage)
Cross-plane connectivity: why some face matches need more than lb/ub
Learning Bash for Automating Tasks
Tips
Never use jupyter notebook unless you are done with your .py file and want to demo code. Jupyter is painful for debugging.
Useful VS Code Extensions
- Better comments https://marketplace.visualstudio.com/items?itemName=aaron-bond.better-comments
- Python syntax highlighting https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance
- Remote Development https://code.visualstudio.com/docs/remote/remote-overview
- Python doc string generator https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring
Contributors
| Name | Position | Dates | Contribution | |
|---|---|---|---|---|
| Paht Juangphanich | Owner | 2021- | Creator | https://github.com/pjuangph |
| David Rigby | Advisor | Fall 2021 | Block splitting help | |
| Christopher Keokot | Intern | Fall 2021 | Plot3D ReactJS GUI | |
| Tim Beach | Advisor | Fall 2021 | Block splitting help |
Connectivity & Orientation
connectivity_fast() finds matching faces between blocks and returns orientation data for each match. When two faces lie on different constant planes (e.g., a K-face connects to a J-face), the varying axes differ and an axis swap may be needed. This is encoded as a permutation_index (0–7) using 3 bits:
| Bit | Flag | Meaning |
|---|---|---|
| 0 | u_reversed |
Flip first varying axis |
| 1 | v_reversed |
Flip second varying axis |
| 2 | swapped |
Transpose u and v axes |
Each face match includes an orientation dict:
face_matches, outer_faces = connectivity_fast(blocks)
# Each match in face_matches has:
# match['orientation'] = {
# 'permutation_index': int, # 0-7
# 'plane': str, # 'in-plane' or 'cross-plane'
# 'permutation_matrix': list # 2x2 signed permutation matrix
# }
The 8 permutation matrices are also available as plot3d.PERMUTATION_MATRICES.
Documentation
- Face Orientation: Cross-Plane Connectivity — why cross-plane face connections need orientation flags beyond lb/ub, and how the 8-permutation system works
- Presentation (PowerPoint) — visual walkthrough of 2D→3D diagonal combinatorics
Rust Version
The rust version is available here. This version of the code is useful for creating CFD solvers in rust Plot3D-RS It has most of the functionality of the python version except for some of the GlennHT pre-processing code.
Funding
The development of this library was supported by NASA AATT (Advance Air Transport Technology). The development is supported by NASA Glenn LTE Branch. Anyone is welcome to contribute by submitting a pull request.
License
Release files for plot3d 1.13.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| plot3d-1.13.0.tar.gz | 77.0 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| plot3d-1.13.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 77.2 MB
Release files / plot3d-1.13.0.tar.gz
| Download URL | plot3d-1.13.0.tar.gz |
|---|---|
| Size | 77.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c0aecf7a35b1274c4f0a91018908a6409f20bb3766f8f69aa8b309363fd6d0dc
|
|
BLAKE2b-256 checksum How to use checksums |
79a2b97189d237e02650f22aecf303b63f7077104f7e650564dc1bc2ee3c5271
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.
Transparency logRelease files / plot3d-1.13.0-py3-none-any.whl
| Download URL | plot3d-1.13.0-py3-none-any.whl |
|---|---|
| Size | 189.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
478f469c459c38ab02268ef8fa567b9a43a7c869c204a88076432e7602c13876
|
|
BLAKE2b-256 checksum How to use checksums |
7325487a43528d9d604cbdc38348f39db66b0630f621c9fe8671cf88f7fff2c2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.
Transparency log