Explore how slender structures respond as loading changes.
LIVE MODEL
3D portal frame
INITIAL SHAPE
Drag to orbit · Scroll to zoomActual geometry · 1×
↳ Published benchmark portal: 12,000 kN compression plus a 100 kN out-of-plane top-joint load.
INPUTS, ASSUMPTIONS & EVIDENCE
Understand the model behind the picture.
These guided examples show elastic, geometrically nonlinear response. Display amplification changes the picture, never the results.
01 / PORTAL FRAME
A frame free to sway
The 4 m span and 3 m height use 30 frame elements, ten per member. Both bases are fully fixed. The published benchmark applies 12,000 kN compression and a 100 kN out-of-plane force at the top-left joint.
Square section: 250 × 250 mm. E = 32,836,000 kN/m²; G = 13,681,666.67 kN/m². Geometry uses metres and loads use kN. These are the load magnitudes shown in the repository's buckling paper benchmark.
The response curve scales both selected forces together in eleven steps. Each point is a separate equilibrium calculation, not a time step or a critical-load prediction.
02 / COMPRESSED PLATE
Compression becomes a bulge
A 1.5 m wide, 1 m tall plate stands on its bottom edge and uses 192 triangles and 117 nodes. The bottom edge is fixed in translation. The two sides and the top edge are held out of plane and are otherwise free, so the plate buckles into a single doubly curved dome rather than bending like a column. The total compression is shared by the 13 top-edge nodes, half shares at the corners.
E = 210 GPa, ν = 0.3; thickness 10 mm. The buckling mode selector chooses a single dome, two half-waves across, or two half-waves up. Each mode seeds a 1 mm out-of-plane imperfection in that shape and, for the two-wave modes, adds a stiffener line held out of plane along mid-width or mid-height. The stiffener is what makes the higher mode the lowest one: an imperfection alone cannot hold it, because above the single-dome critical load the plate falls back into the single dome whatever shape it started with. Classical critical loads at 10 mm are about 590 kN for the single dome, 1,400 kN for two up, and 2,200 kN for two across, so each mode is shown at a compression past its own critical load: 1,000 kN for the single dome, 2,000 kN for two up, and 3,000 kN for two across.
The response curve scales the compression from 0 to that value in eleven steps. Below the critical load the plate stays nearly flat; above it the bulge grows and carries on into a stable post-buckled state. The material stays elastic; colours show displacement or membrane von Mises stress, not plasticity or failure.
Validation with context
The portal default now matches the buckling paper benchmark definition: 4 m × 3 m, fixed bases, 250 × 250 mm square members, 10 segments per member, 12,000 kN compression and 100 kN out-of-plane load. The paper compares the resulting nonlinear response with Abaqus.
Mesh sensitivity, convergence, and independent engineering checks remain necessary before using a model for design.
Precomputed results
Every result on this page was computed in advance with the Awatif solver, one equilibrium solve per response state. The page ships those results, not the solver, which is why the examples are fixed presets.
To see the solver on your own model, send a representative case and we run it.
The TypeScript interface takes physical model inputs and returns deformed positions and member forces. Shell models can also return membrane stress. Contact Mohamed for solver access.
01 / Initialize and supply the model
The download contains your current inputs. Maps are serialized as entry arrays; restore them before calling the API. Use the import path provided with your solver delivery.
import { initNlPositionsAndForces, getNlPositionsAndForces }
from "./getNlPositionsAndForces";
await initNlPositionsAndForces();
const model = JSON.parse(modelInputJson);
for (const key of ["loads", "supports", "elementsProps"])
model[key] = new Map(model[key]);
if (model.options.prescribedTranslations)
model.options.prescribedTranslations =
new Map(model.options.prescribedTranslations);
02 / Solve and consume results
const result = getNlPositionsAndForces(
model.nodes, model.elements, model.loads,
model.supports, model.elementsProps,
undefined, undefined, model.options,
);
const positions = result.positions; // flattened x, y, z; metres
const forces = result.internalForces; // frame element → N, Vy, Vz, Mx, My, Mz
const stress = result.membraneVonMises; // shell face order; input stress units
Prescribed shell translations use Map<node, [dx, dy, dz]>: values are offsets from the original geometry and null leaves an axis unspecified. Conflicting fixed supports are rejected. Both examples use kN and metres, so the returned stress is kN/m².
Catch rejected initialization and solve errors; a rejected call supplies no results.
Your UI. Our buckling solver. One-time licence. AI can build the interface your team needs; the calculation behind it is the part you cannot delegate. Bring a representative SAP2000, ETABS, SCIA or STAAD.Pro model and we will compare results and agree a fixed one-time price.