Instituto Superior Técnico
A desktop tool that turns finite-element solver output into figures, animations, and reproducible scenes — resolution-independent throughout.
An Avalonia-based C# / .NET 10 application compiled ahead-of-time with .NET Native AOT — one self-contained native executable, no .NET runtime install required.
Solver output is rarely visualisation-ready: stresses arrive piecewise-constant per element, displacements live on nodes, tensors come as nine loose scalars, and every field carries discretisation noise. IST Vector treats postprocessing as a single pipeline:
.sppFive methods on one card: Zienkiewicz–Zhu SPR (linear least-squares patch fit), quadratic least squares Z2 (ten-term basis; reproduces quadratic fields exactly), moving least squares with a Wendland-C2 kernel, Taubin λ|μ smoothing (shrinkage-free), and Perona–Malik anisotropic diffusion (edge-preserving — fracture fronts and material boundaries survive). The kernel radius defaults to 1/200 of the mesh bounding box’s longest side; a shared uniform grid keeps neighbour lookup O(K) per point.
Every vector field gains its three components and its ℓ² and ℓ∞
norms; every tensor gains von Mises and Frobenius invariants, hydrostatic pressure, its
nine components, and its column vectors. Matched nodal/element field pairs additionally seed the
a-posteriori Absolute_E error estimator described below.
Plain shading, banded contours, or 3–30 labelled iso-lines with collision-checked label placement; log10 mapping for fields spanning decades; a B/W mode for print figures (pure black lines, field name set as a caption). Turbo colour map, 256-entry LUT; NaN samples render magenta rather than corrupting the range.
Arrows, steady streamlines, and transient pathlines and streaklines, integrated with the adaptive Dormand–Prince DOP853 controller (8th order, embedded 5th/3rd-order error estimation); optional colour-by-speed. Element vectors anchor at centroids.
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’s axes align 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; sparsity thins them on a uniform grid. Alongside the glyphs, principal-stress trajectory lines integrate the eigenvector field with an adaptive Runge–Kutta 5(4) scheme — with evenly-spaced-line and 3-D tube options.
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 finite-element
practitioner’s a-posteriori error indicator: pick a pair and a projection direction and
it becomes a scalar field — coloured, thresholded, and iso-lined like any other, and taken
from the recovered field whenever a recovery filter is active.
Warp by any vector field with magnification 0–20. The scrub drives a single shader uniform, so it is O(1) in mesh size; an undeformed-outline overlay keeps the reference shape visible; mesh-quality statistics can be recomputed on the deformed configuration.
Threshold erosion (mean / max / 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 / material masks — all composed in one element-visibility pass.
Volume cells are decomposed to tetrahedra and marched in 3-D; a per-cell range test skips 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 with the part outline kept for reference.
X/Y/Z mirrors and 1–16 rotational copies about any axis reconstruct a full body from a modelled sector; colour fields are carried onto the copies, and the mirror silhouette renders in neutral grey or polished steel. Expansion is capped at 100 million expanded nodes.
60 Hz interpolation between solver steps: Catmull–Rom (C1) when the topology is fixed; on adaptive remeshes, where no node correspondence exists, a self-timed offscreen cross-fade (32–250 ms) dissolves every visible layer uniformly. Playback sub-ranges, ease-in/out envelopes, and a step badge; interpolation is allocation-free.
Best View maximises Vázquez viewpoint entropy over 192 Fibonacci-sphere candidate directions. Tours interpolate waypoints with squad quaternion rotation (C1) and Catmull–Rom pan/zoom, arc-length reparameterised for constant perceptual speed; the recorder replays the identical camera path into the MP4, frame for frame.
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 / volume distributions, and inverted-element counts.
| Format | What it carries |
|---|---|
.case | EnSight Gold, with .geo / .scl / .vec / .ens sidecars — multi-part topology, transient steps (wildcard and arithmetic time sets), scalar / vector / tensor fields (symmetric and asymmetric), ghost cells, iblanking. ASCII & binary. |
.vtu | VTK XML UnstructuredGrid — topology plus per-point / per-cell fields. Inline ASCII, base64, and zlib-compressed payloads. |
.vtp | VTK XML PolyData — verts, lines, polys, and strips. |
.vtk | VTK legacy, ASCII or binary — UnstructuredGrid, PolyData, StructuredGrid, RectilinearGrid, StructuredPoints. |
.pvd | ParaView collection — time-series index of .vtu / .vtp files; timestep attributes honoured. |
.stl / .obj | Reference geometry only, no fields. OBJ triangles and quads load directly; longer faces are fan-triangulated. |
.spp | IST Vector project — the full 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, Ctrl+O, or the recent-files flyout.
| Internal type | Nodes | Dim | Quadratic variant read |
|---|---|---|---|
point | 1 | 0-D | — |
bar2 | 2 | 1-D | bar3 |
tria3 | 3 | 2-D | tria6 |
quad4 | 4 | 2-D | quad8, quad9 |
tetra4 | 4 | 3-D | tetra10 |
pyramid5 | 5 | 3-D | pyramid13 |
penta6 | 6 | 3-D | penta15 (aliases prism6, wedge6) |
hexa8 | 8 | 3-D | hexa20 |
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 / VTK_PIXEL corner order is
corrected, and structured grids unroll to hexa8 (quad4 for slabs).
General polygons / polyhedra (nsided, nfaced) are read but not rendered;
ghost cells are skipped.
| Output | Details |
|---|---|
| Scene PDF | Surfaces emit as PDF Type-4 (free-form) Gouraud-shaded triangles; contour and feature lines as stroked polylines; colour bar, axis triad, labels, and dimension callouts at their on-screen relative positions. Text is base-14 Helvetica-Bold with a ToUnicode CMap, so values copy 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 at sub-element resolution. |
| Batch contour PDFs | One contour figure per scalar field that varies at the current step, written in a single pass; uniform fields are skipped. Also: a two-up geometry reference page and a one-sheet collage of the saved-views library. |
| MP4 | H.264 via FFmpeg / libx264, with Windows Media Foundation as fallback. Frames are captured at the viewport’s physical pixel size and the stream is tagged BT.709, so players decode the colour space deterministically. The recorder is driven by the same camera closure as the live tours — the clip reproduces the on-screen motion frame-identically. 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 / section state, symmetry, hidden parts, probes, time, camera — plus the mesh reference, resolved relative to the project on re-open. Round-trips losslessly. |
Figure recipe .json |
Camera plus every display setting, without the mesh binding: a portable figure specification to apply to other data (absent fields are skipped) or to ship beside a paper. Saved views store the same snapshot as named entries in a per-user library. |
| Tier | Nodes / elements | Behaviour |
|---|---|---|
| Standard | ≤ 500,000 | Every derived field computed eagerly at load. |
| Optimized | ≤ 2,000,000 | Eager derivation; element-centroid cache becomes lazy. |
| Large | ≤ 10,000,000 | Components, norms, and invariants built on demand (force-derive control) to bound memory. |
| Very large | ≤ 50,000,000 | Additionally skips jagged-node materialisation; status-bar warning chip. |
| Above | > 50,000,000 | Rejected 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, the rest on demand with a ±2-step background prefetch.
| Operation | Typical |
|---|---|
| Open EnSight case, binary (parallel parser) | 1–3 s / 100 MB |
| Transient step swap | 5–20 ms |
| Field switch (min/max memoised per array) | 10–50 ms |
| Deformation / iso-value scrub (shader-side) | O(1) in mesh size |
| Contour regeneration (cached per state key) | 15–40 ms |
| Scene PDF export | 0.5–3 s |
| MP4 export, 1080p, 8 s clip | 5–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 idle. NaN and ±∞ are skipped in every reduction, so a single bad sample cannot collapse a colour range or hide the mesh.
Windows 10 21H2 / Windows 11, x64, on a CPU meeting the x86-64-v2 baseline (SSE 4.2 + POPCNT), checked by a startup preflight. 15 GB of RAM or more is recommended; below that the application warns at startup and large transients run in lazy-streaming mode. Displays from 1280×768 to 7680×4320 are supported.
signtool (SHA-256 file digest) and
RFC 3161 countersigned, with DigiCert / Sectigo / GlobalSign timestamp
fallback. The desktop executable, the first-party DLLs, and the installer are each signed, so the
signature keeps verifying after the certificate expires and Windows SmartScreen admits the
download with no warning.| Document | Download |
|---|---|
| Reference Manual · 20 pages The pipeline; the recovery mathematics (SPR, Z2, MLS, Taubin, Perona–Malik); every representation card with 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, 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 / field data model; the load-to-render pipeline; concurrency and caching contracts; Native AOT constraints; test strategy; extension recipes. |
PDF · 380 KB |
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.