Instituto Superior Técnico Vector Postprocessor

Instituto Superior Técnico

IST Vector Postprocessor

A desktop tool that turns finite-element solver output into figures, animations, and reproducible scenes — resolution-independent throughout.

Free, with no account required. An Avalonia application in C# / .NET 10, compiled ahead of time with .NET Native AOT into one self-contained executable — no .NET runtime install.

Download for Windows Windows 10 21H2 or 11, x64  ·  signed and timestamped  ·  SHA-256 checksum
IST Vector Postprocessor showing the fracture field on a deformed 3D lattice beam, with localised red fracture zones on the blue lattice between grey face sheets.

Fracture field on a deformed lattice beam — 132,570 nodes, 208,680 elements — field-coloured lattice and plain-grey face sheets in one scene.

Pipeline

One pipeline

Solver output is rarely ready to plot: stresses arrive piecewise-constant on elements, displacements on nodes, tensors as nine loose scalars, and every field carries discretisation noise. IST Vector treats all of it as one pipeline, so the view on screen and the exported file cannot diverge.

Step 1Loadtopology and fields
Step 2Recoveroptional smoothing
Step 3Representfields and glyphs
Step 4Exportscreen · PDF · MP4 · .spp
  • Recovery is applied first. Switch on SPR and the colour bar, the iso-surfaces, the threshold mask and the deformation magnitudes all read the recovered field. Smoothed colour is never painted over unsmoothed data.
  • One scene, four outputs. Screen, PDF, MP4 and saved state share the same scene object — nothing renders on screen that the exporters cannot reproduce, and nothing is exported that was not displayed.
  • Resolution-independent throughout. PDFs are shaded-triangle vector graphics rather than screenshots, MP4s capture the viewport’s physical pixel grid, and HiDPI displays are honoured end to end.

Capabilities

Ordered roughly as they are met in a session. Headings first, detail underneath.

Field recovery

Six methods sit on one card: Zienkiewicz–Zhu SPR (linear least-squares patch fit), quadratic least squares Z2 (ten-term basis, which reproduces quadratic fields exactly), moving least squares with a Wendland-C2 kernel, Taubin λ|μ smoothing (no shrinkage), Perona–Malik anisotropic diffusion (edge-preserving, so fracture fronts and material boundaries survive), and — for node-only point clouds, which have no element patches to fit over — a Gaussian-weighted RBF average. The kernel radius starts at 1/200 of the longest side of the mesh bounding box, and a shared uniform grid keeps neighbour lookup O(K) per point.

Fields derived at load

Every vector field arrives with its three components and its ℓ² and ℓ norms already there. Every tensor arrives with von Mises and Frobenius invariants, hydrostatic pressure, its nine components and its column vectors. Matched nodal and element pairs also seed the a-posteriori Absolute_E error estimator described below.

Scalar fields

Plain shading, banded contours, or 3–30 labelled iso-lines whose labels are placed with a collision check. Dashed separation lines can mark up to eight colour-band boundaries of the fill — log-aware, and baked into the geometry so screen, PDF and MP4 dash identically. There is log10 mapping for fields spanning decades, and a black-and-white mode for print figures, with pure black lines and the field name set as a caption. The Turbo colour map runs through a 256-entry lookup table; NaN samples draw magenta instead of quietly corrupting the range. Auto-range can leave out values that never reach the screen, and per-element fields colour whole elements — contours are never invented from element data, so recover to nodes first if you want to contour them.

Vector fields

Arrows, steady streamlines, and transient pathlines and streaklines, integrated with the adaptive Dormand–Prince DOP853 controller (8th order, with embedded 5th and 3rd-order error estimation). Colour by speed: the speed scale gets its own bar, stacked beside the field’s in the same gutter, on screen, in the PDF and in the video. Element vectors anchor at centroids.

Tensor glyphs

Tensor fields

Principal-axis ellipsoid glyphs. The nine components are assembled into a symmetric 3×3 matrix at each node and decomposed by Jacobi eigendecomposition, so each glyph aligns with the principal directions and its radii scale with the eigenvalues. Asymmetric input is symmetrised first, so any 3×3 field is admissible. Scale sets glyph size as a fraction of mesh diameter and sparsity thins them on a uniform grid — while the derived invariants, components and column vectors feed every scalar and vector representation.

A-posteriori error

Error estimator

When the solver writes a field both ways — smooth on nodes and piecewise on elements — IST Vector pairs the two by longest common name prefix and forms Absolute_E = |fnodal − proj(felem)|, the gap between the nodal field and its element projection. That gap is the familiar a-posteriori error indicator: pick a pair and a projection direction and it becomes a scalar field like any other — coloured, thresholded, iso-lined, and taken from the recovered field whenever a recovery filter is on.

Deformed configuration

Warp by any vector field, magnification 0–20. The scrub drives a single shader uniform, so it is O(1) in mesh size. An undeformed outline keeps the reference shape visible, and mesh-quality statistics can be recomputed on the deformed configuration.

Visibility composition

Threshold erosion (mean, max or min node→element reduction; >, <, =, ≠ relations, with a ±0.5%-of-range tolerance for continuous fields and exact matching for integer material IDs), X/Y/Z section planes with flip, and part or material masks — all composed in a single element-visibility pass.

Iso-surfaces

Volume cells are decomposed to tetrahedra and marched in 3-D, with a per-cell range test to skip elements that cannot bracket the level. A slider scrubs the iso-value live, and a count of 1–10 extracts nested equispaced surfaces in one pass — optionally keeping the part outline for reference.

Symmetry expansion

X/Y/Z mirrors and 1–16 rotational copies about any axis rebuild a whole body from the sector you modelled. Colour fields, and the undeformed outline, are carried onto every copy, and the mirrored silhouette can render in neutral grey or polished steel. Expansion stops at 100 million expanded nodes.

Transient playback

60 Hz interpolation between solver steps: Catmull–Rom (C1) when the topology is fixed, and on adaptive remeshes — where no node correspondence exists — a self-timed offscreen cross-fade of 32–250 ms dissolves every visible layer together. There are playback sub-ranges, ease-in and ease-out envelopes, and a badge showing the solver’s own step numbers; the interpolation allocates nothing per tick. Disk-backed transients stream through a field-major background preloader — only the fields you are displaying, across all steps — so a resident step swaps in by pointer assignment instead of a disk read.

Camera and tours

Best View maximises Vázquez viewpoint entropy over 192 Fibonacci-sphere candidate directions; Pack View runs the same search for the tightest frame fill, scoring silhouette area × zoom-to-fit scale² with the colour-bar gutter reserved. One click on View Tour flies a scripted ten-second pass: a steadicam arrival at a hero pose, one full 360° orbit with elevation crane and dolly-in, and an exact return to where the camera started, under a material sheen and a travelling key-light highlight. Waypoint tours ride subject-locked steadicam paths — centripetal Catmull–Rom pan and zoom, squad quaternion rotation, level horizon, arc-length reparameterised for constant visual speed — and the recorder replays that same flight into the MP4, frame for frame.

Probes and mesh statistics

Ctrl+click reports a node’s coordinates and every active field value; Ctrl+Shift+click reports an element’s type, centroid and field values. The mesh-quality card gives per-type counts, edge-length statistics, aspect-ratio extrema, signed area and volume distributions, and inverted-element counts.

Screenshots

One model, several representations

The bundled Stanford Happy Buddha in three representations — colour field, streamlines, print-mode iso-lines — and the fracture field from a lattice-beam damage run. Click any image for the full-size version; each scene exports as it stands to PDF and MP4. The Happy Buddha model is © Stanford University Computer Graphics Laboratory, from the Stanford 3D Scanning Repository, credited as its terms require.

Examples

Example exports

Every file below is unedited program output. Surfaces are PDF Type-4 Gouraud-shaded triangle meshes and lines are stroked paths, so they hold up at any zoom — there is no raster layer to pixelate. Scenes built on public datasets carry their attribution line printed with the figure; full credits are under the grid.

Dataset credits — Happy Buddha and Armadillo models: © Stanford University Computer Graphics Laboratory, from the Stanford 3D Scanning Repository. Stanford permits research use and published images provided credit is given to the Stanford Computer Graphics Laboratory; commercial use of the models requires Stanford’s permission. 2-D pressure field: pyvista/vtk-data (Apache-2.0), originally from VTK’s test suite (BSD-3-Clause). Everything else is the author’s own finite-element results and procedurally generated surfaces.

Formats

Reads what your solver writes

FormatWhat it carries
.caseEnSight Gold, with .geo / .scl / .vec / .ens sidecars — multi-part topology, transient steps (wildcard and arithmetic time sets), scalar, vector and tensor fields (symmetric and asymmetric), ghost cells, iblanking. ASCII and binary.
.vtuVTK XML UnstructuredGrid — topology plus per-point and per-cell fields. Inline ASCII, base64 and zlib-compressed payloads.
.vtpVTK XML PolyData — verts, lines, polys and strips.
.vtmVTK XML MultiBlock — the block tree is walked, nested .vtm included, and every referenced .vtu / .vtp / .vtk block loads into one multi-part scene.
.vtkVTK legacy, ASCII or binary — UnstructuredGrid, PolyData, StructuredGrid, RectilinearGrid, StructuredPoints.
.pvdParaView collection — a time-series index of .vtu / .vtp / .vtm / .vtk files. timestep attributes are honoured, and per-step fields are stitched by name union across all steps, so a field that first appears mid-run still loads.
.stl / .objReference geometry only, no fields. OBJ triangles and quads load directly; longer faces are fan-triangulated.
.sppAn IST Vector project — the whole scene state plus the mesh reference in one shareable file. Both an input and an output.

Fields may be nodal or per-element; scalar, vector or tensor; steady or transient. Format detection reads the leading bytes of the file, so a mislabelled extension still reaches the right parser. Files open by drag-and-drop, by Ctrl+O, or from the recent-files flyout.

Element types

Internal typeNodesDimQuadratic variant read
point10-D
bar221-Dbar3
tria332-Dtria6
quad442-Dquad8, quad9
tetra443-Dtetra10
pyramid553-Dpyramid13
penta663-Dpenta15 (aliases prism6, wedge6)
hexa883-Dhexa20

Every parsed cell collapses to one of these eight corner-only types; quadratic mid-edge and mid-face nodes are read past and discarded. VTK strips are unrolled, polygons with five or more vertices are fan-triangulated, VTK_VOXEL and VTK_PIXEL corner order is corrected, and structured grids unroll to hexa8 (or quad4 for slabs). General polygons and polyhedra (nsided, nfaced) are read but not rendered, and ghost cells are skipped. A node-only point cloud draws its nodes as round dots at a diameter you choose — the same in the live view, the PDF and the MP4 — and the RBF recovery filter smooths fields over it.

Exports

OutputDetails
Scene PDF Surfaces are written as PDF Type-4 (free-form) Gouraud-shaded triangles; contour and feature lines as stroked polylines; colour bar, axis triad, labels and dimension callouts keep their on-screen relative positions. Text is set in Latin Modern Roman Bold with the CFF font program embedded in every file (Type1C) and a ToUnicode CMap, so figures match a LaTeX document, pass journal archival preflight, and let values be copied out of the figure. An ultra-fine mode re-evaluates Lambert + GGX shading on an N2 barycentric subdivision of each lit face, keeping hotspots and gradients below element size.
Batch contour PDFs One contour figure per scalar field that varies at the current step, written in a single pass, with uniform fields skipped. Also a two-up geometry reference page, and a one-sheet collage of your saved-views library.
MP4 H.264 through FFmpeg / libx264, with Windows Media Foundation as a fallback. Frames are captured at the viewport’s physical pixel size and the stream is tagged BT.709, so players decode the colour space the same way. The recorder is driven by the same camera closure as the live tours, so the clip reproduces the on-screen motion frame for frame. There is an optional cinematic pass: FXAA, soft-knee bloom, Reinhard tone-mapping, vignette, grain.
Project .spp The complete scene state — active fields, ranges, recovery filter, iso, threshold and section state, symmetry, hidden parts, probes, time, camera — plus the mesh reference, resolved relative to the project when you reopen it. It round-trips losslessly.
Figure recipe .json Camera and every display setting, without the mesh binding: a portable figure specification you can apply to other data (absent fields are simply skipped) or ship beside a paper. Saved views keep the same snapshot as named entries in a per-user library.

Performance

Scale and performance

Strategy is selected from the mesh size, not configured. The tiers, and what changes at each:

TierNodes / elementsBehaviour
Standard≤ 500,000Every derived field computed eagerly at load.
Optimized≤ 2,000,000Still eager; the element-centroid cache turns lazy.
Large≤ 10,000,000Components, norms and invariants are built on demand (there is a force-derive control) to keep memory bounded.
Very large≤ 50,000,000Also skips jagged-node materialisation, and a warning chip appears in the status bar.
Above that> 50,000,000Declined at load, with the reason stated.

Case bundles load fully into memory when the file total fits in 85% of available RAM; larger transients stream lazily — step 0 up front, while a field-major background preloader brings in the displayed fields across every step, so playback swaps in resident arrays instead of parsing from disk.

Representative costs

OperationTypical
Open EnSight case, binary (parallel parser)1–3 s / 100 MB
Transient step swap5–20 ms
Field switch (min/max memoised per array)10–50 ms
Deformation or iso-value scrub (shader-side)independent of mesh size
Contour regeneration (cached per state key)15–40 ms
Scene PDF export0.5–3 s
MP4 export, 1080p, 8 s clip5–15 s

From the Reference Manual §7.2. During rotation and zoom the viewport renders to a half-resolution buffer and upscales, returning to full resolution on release. NaN and ±∞ are skipped in every reduction, so one bad sample cannot collapse a colour range or hide the mesh.

Limitations

Limitations and requirements

Stated here rather than left to be discovered. Most carry their workaround in the same sentence.

  • Windows only. Windows 10 21H2 or Windows 11, x64, on a CPU meeting the x86-64-v2 baseline (SSE 4.2 and POPCNT) — a startup preflight checks this and reports a failure. There is no macOS or Linux build. Displays from 1280×768 to 7680×4320 are supported.
  • 15 GB of RAM or more recommended. Below that the application says so at startup and runs large transients in lazy-streaming mode rather than refusing them.
  • A postprocessor, not a solver. It displays results; it does not compute them. Bring output from your own solver, or start from one of the bundled example datasets.
  • Contours need nodal data. Per-element fields colour whole elements, and contours are never invented from them. Apply a recovery filter to move the field to nodes first, and everything downstream follows.
  • Corner nodes only. Quadratic elements load, but mid-edge and mid-face nodes are read past, so display and export use the corner-only element. General polygons and polyhedra (nsided, nfaced) load but are not rendered.
  • Meshes above 50 million nodes are declined at load, with the reason stated, rather than accepted and then thrashing.
  • STL and OBJ carry geometry only. Useful as reference shapes; fields must come from an EnSight or VTK file.

Engineering

Engineering notes

  • A headless core. The parsers, the recovery mathematics, the scene builder, the software rasteriser and the PDF writer live in a library that needs neither a window nor a GPU, so the whole pipeline can run — and be tested — without a display. The vector writer is written here rather than delegated to GL2PS or a similar OpenGL feedback-buffer library.
  • The same scene gives the same bytes. Depth sorting and shading are byte-stable, so PDF and frame output reproduce across runs and thread counts, and regression tests compare against pinned baselines.
  • Tested against real solver output. The suite runs a corpus of EnSight, VTK, OBJ and STL files on every push, alongside fuzz fixtures — truncated, mislabelled and non-finite input.
  • Playback allocates nothing. Per-tick field interpolation alternates two scratch buffers, and coordinates are stored structure-of-arrays so hot loops stream one component at a time.
  • Native AOT. A self-contained, fully trimmed executable, with source-generated JSON for all persistence, written atomically. OpenGL calls stay on the UI thread, and GPU caches rebuild from generation counters rather than explicit invalidation.
  • Signed and timestamped. Release builds are Authenticode-signed with an Individual Validation (IV) code-signing certificate through signtool (SHA-256 file digest) and RFC 3161 countersigned, with DigiCert, Sectigo and GlobalSign timestamp fallback. The desktop executable, the first-party DLLs and the installer are each signed, so the signature still verifies after the certificate expires and SmartScreen passes the download without a warning.

Documentation

Manuals

DocumentDownload
Reference Manual · 20 pages
The pipeline; the recovery mathematics (SPR, Z2, MLS, Taubin, Perona–Malik); every representation card with its control ranges and defaults; camera, tours and saved state; export internals; the element catalogue; performance tables and system requirements.
PDF  ·  1.0 MB
Inputs & Outputs · 3 pages
The file contract: each input format and what it carries, the fields derived at load, the four outputs, and the reproducible-state formats (.spp, saved views, figure recipes).
PDF  ·  310 KB
Architecture & Developer Guide · 8 pages
Solution layout; the mesh and field data model; the load-to-render pipeline; concurrency and caching contracts; Native AOT constraints; test strategy; extension recipes.
PDF  ·  380 KB

Get IST Vector Postprocessor

Download the Windows installer and open your first .case, .vtu or .vtk file — or start from a bundled example dataset. The installer and every executable it carries are signed with an Authenticode Individual Validation (IV) code-signing certificate and RFC 3161 timestamped, so Windows SmartScreen runs them without a warning. Verify the download against its SHA-256 checksum.

Download for Windows Free  ·  no account  ·  Windows 10 21H2 or 11, x64  ·  SHA-256

Questions, a file that will not open, or a missing feature: pedro.areias@tecnico.ulisboa.pt.