Documentation · structural

2D Frame & Beam FEA — methodology & sources

This page describes, module by module, what the solver behind the 2D Frame & Beam FEA Calculator actually computes — precisely enough that a reviewer can check it, and plainly enough that a student meeting the stiffness method for the first time can follow it. Where a statement carries a number, the number is produced by the engine when this page renders, not typed into it.

Method 01

What this tool is

A first-order linear elastic analysis of a plane frame, checked against limits you supply. It computes no resistance.

The calculator solves beams, frames and trusses that lie in one plane, under static loading, assuming the material stays elastic and the displacements stay small. That combination — equilibrium written on the undeformed geometry, linear material, linear kinematics — is linear analysis, LA in the taxonomy of EN 1993-1-14. It is the analysis type behind the vast majority of everyday frame design, and the one whose answers can be checked against closed forms, which is what makes the verification story on this page possible.

What it deliberately is not: a design code. The tool computes reactions, internal actions, deflections and elastic stresses, and compares them against allowables you enter. It applies no partial factor, no buckling reduction factor, no cross-section classification and no code resistance of any kind, and it claims conformity with no standard. Member verification to EN 1993, AISC 360 or an equivalent code remains your work; this page states exactly what the analysis feeding that work does.

17

closed-form benchmarks

5

solver identities

5

pack validation cases

2.8e-10

worst relative error

Method 02

Where it sits on the analysis ladder

EN 1993-1-14 names seven analysis types. This tool performs the first, and says so rather than blurring the line.

Design-by-FE standards organise analyses by which nonlinearities they include. In EN 1993-1-14's vocabulary the ladder runs LA (linear), LBA (linear bifurcation — elastic buckling modes), GNA (geometrically nonlinear), GNIA (geometrically nonlinear with imperfections), MNA (materially nonlinear), GMNA and GMNIA (both at once, the latter with imperfections). Each rung answers a question the previous one cannot: LBA asks at what load factor could this frame buckle elastically; GNA asks how much do the deflections amplify the moments; MNA asks what happens after first yield.

This tool is LA, deliberately. Everything above LA on the ladder is out of scope in this version — stated in full in section 17 — and two advisories watch the boundary from inside: when the peak transverse displacement of a member exceeds about 1/50 of its length, and when any member's axial compression exceeds a quarter of its own Euler load , the tool flags that a first-order analysis is no longer the right instrument, rather than letting the number stand unqualified.

The reference to EN 1993-1-14 is vocabulary, not conformity: the platform's source gate structurally prevents that document — or any documentation-only reference — from backing a computed number. Section 19 spells out the claim contract.

Method 03

Coordinates and sign conventions

Sign convention is the dominant defect class in structural FE software, so this solver defines its convention once, as data, and every consumer reads that one definition.

Global axes are the ones you draw in: X to the right, Y upward, rotation positive counter-clockwise, so gravity acts in −Y and a downward load is a negative . Each member additionally carries a local frame: local x runs from the member's I node to its J node, and local y is local x rotated 90° counter-clockwise. Which end is I matters — it is where “distance from the I end” is measured from — and it is simply the order the member was drawn in.

Global axes, local axes, and where intuition failsFigure 1

Scroll figure horizontally →

Global and member local axesGlobal X points right, Y points up and positive rotation is counter-clockwise. Each member's local x runs from its I node to its J node and local y is local x rotated ninety degrees counter-clockwise, shown for a horizontal member, an inclined member and a vertical column, where local y is horizontal.Global frameMember local framesThe vertical column+X+Y+θz (CCW)gravity acts in −YIJIJlocal xlocal yN is positive in tensionIJlocal xlocal ydrawn I→J upward, local +y points left
Arrow directions are computed from the same direction cosines and local-axis definition the solver assembles elements with. For a vertical column drawn bottom to top, local +y points left — horizontal — which is why a column's moment diagram stands out sideways.

Internal actions follow the classical beam convention: axial force N positive in tension, bending moment M positive when sagging, and shear V defined so that the differential relations hold everywhere:

The relations the extremum finder relies on: M is stationary exactly where V = 0

Positive internal actions on a cutFigure 5

Scroll figure horizontally →

Positive internal actions on a beam sliceOn a slice of member, positive axial force pulls both faces outward, positive shear acts upward on the left face and downward on the right face, and positive sagging moment turns counter-clockwise on the left face and clockwise on the right face.NNVVMMdM/dx = V · dV/dx = q_yN positive in tension · M positive sagging — the pair the extremum finder relies on: M is stationary exactly where V = 0
On a slice of member: N pulls both faces outward (tension positive), positive V acts up on the left face and down on the right face, and positive M is the sagging pair — counter-clockwise on the left face, clockwise on the right.

The one that trips experienced engineers

The N, V, M and δ diagrams plot the signed value against distance from the I end, on a value axis with positive upward. A sagging moment therefore reads positive and is drawn above the axis. This is not the drafting-room practice of drawing the bending moment diagram on the tension face, where the same sagging moment appears below the beam. Both conventions are legitimate and widespread; each is only readable once it is stated. Read the sign, not the side.

Signed ordinate vs tension faceFigure 6

Scroll figure horizontally →

Signed-ordinate plotting versus the tension-face drafting conventionThe same simply supported beam's bending moment diagram drawn twice. This tool plots the signed value with positive upward, so the sagging midspan moment reads positive and sits above the axis. The drafting practice of drawing the diagram on the tension face puts the same sagging moment below the member, and is not what this tool draws.What this tool drawsTension-face drafting convention+67.5 kN·m above the axissagging reads positivesame +67.5 kN·m drawn below — on the tension sidenot what this tool draws — read the sign, not the side
The same simply supported beam's moment diagram, computed live, drawn both ways. The right-hand panel is the tension-face drafting convention — and is not what this tool draws.

The convention below is the exact text rendered as the permanent legend in the workspace and printed in every report's analysis-basis section. This page renders the same data rather than restating it, so the three surfaces cannot drift apart.

Global axes
is positive to the right, is positive upward, and rotation is positive counter-clockwise. Gravity acts in , so downward loads are entered as negative (the interface does this for you when you pick a downward direction).
Member local axes
Local runs from the member's I node to its J node; local is local rotated counter-clockwise. Member results are reported in this local frame.
Axial force
Axial force is positive in tension and negative in compression.
Bending moment
Bending moment is positive when sagging (tension on the local- face) and negative when hogging. The relations and hold throughout.
Diagram plotting
The , , and diagrams plot the signed value against distance from the member's I end, on a value axis with positive upward. A sagging moment therefore reads positive and is drawn above the zero line. This is the ordinate convention, not the drafting practice of drawing the bending-moment diagram on the tension face — read the sign, not the side.
Reactions
Support reactions are reported in the global frame as the forces the supports apply to the structure. For a structure carrying only downward load, vertical reactions are therefore positive.
Internal units
All calculations are performed in a consistent SI set — millimetres, newtons, and megapascals — and converted only for display. Switching the unit system never re-runs the analysis.

Method 04

The element

One two-node, six-DOF prismatic frame element, written once in shear-flexible form so that a single implementation serves both beam theories.

Every member is one element: two nodes, three degrees of freedom each — axial translation, transverse translation, rotation. The axial terms use linear interpolation; bending uses the Hermite cubics of section 7. Because internal actions are later recovered from statics rather than from the element field (section 9), one element per member is exact for the loading this tool accepts, and subdividing members is never required for accuracy.

The 6-DOF element and its local stiffnessFigure 2
The six element degrees of freedomA two-node member with degrees of freedom one to three at node I — axial translation, transverse translation and rotation — and four to six at node J, in the order the stiffness matrix rows use.IJ1 · u_I2 · v_I3 · θ_I4 · u_J5 · v_J6 · θ_Jelement DOF order [u_I, v_I, θ_I, u_J, v_J, θ_J]

Euler–Bernoulli form, Φ = 0. In the shear-flexible form every bending entry divides by (1+Φ) and the diagonal rotation terms become (4+Φ) and (2−Φ) — lib/fea/element.ts.

DOF numbering matches the matrix rows and columns. This is the local stiffness matrix the solver assembles from; the header row and column name the displacement each entry couples.

Timoshenko as the general case

The matrix is coded once, in the shear-flexible form, using the shear-deformation parameter

Φ compares bending stiffness against shear stiffness over the member length

With Φ present, the bending entries become and , and the rotational diagonal and coupling terms become and . Setting Φ = 0 recovers Euler–Bernoulli exactly — not approximately — so the beam-theory toggle selects a parameter value, not a second code path that could drift from the first. Φ is also forced to zero whenever the section has no effective shear area, so shear flexibility is only ever added when it can be computed from real inputs.

When shear deformation mattersFigure 8

Scroll figure horizontally →

Shear flexibility against span-to-depth ratioThe ratio of the Timoshenko tip deflection to the Euler–Bernoulli tip deflection for a rectangular cantilever, solved by the engine under both theories at each span-to-depth ratio. The ratio is large for stubby members and approaches one as the member becomes slender.1.001.19span ÷ depth (L/d)δ_Timoshenko ÷ δ_Euler–Bernoulli25101520+5% — crossed near L/d ≈ 4.0L/d = 2: ratio 1.19 · Φ = 0.78L/d = 5: ratio 1.03 · Φ = 0.12every point is two live solves — the same model under each theory — with Φ = 12EI/(G·A_s·L²) from the engine
Each point is two live solves of the same rectangular cantilever — one per beam theory — so this curve is measured from the engine, not sketched. Shear flexibility is a fifth of the answer at a span-to-depth of two and noise beyond ten.

Euler–Bernoulli is the default because for ordinary proportions it is the right model, not because it is easier: shear deformation below the few-percent level is smaller than the uncertainty in any support condition. The tool watches the boundary for you — any member with a span-to-depth ratio under 10 raises an advisory suggesting the Timoshenko setting.

Method 05

Transformation, assembly, restraints and skew supports

Element matrices rotate into the global frame and assemble by degree of freedom. Two decisions here are worth understanding, because they shape how failures present.

c and s are the member's direction cosines from global +X

Restraints are eliminated, not penalised

Many solvers model a support by adding an enormous spring to the restrained degree of freedom. This one removes the DOF from the system entirely: the reduced matrix contains only free DOFs. That choice buys two things. Conditioning — no artificial 10¹² stiffness sits beside real member stiffnesses, so the factorisation's health reflects the structure, not the trick. And honest reactions — a reaction is recovered from the equilibrium equation at the restrained DOF, a real equilibrium quantity, rather than read off a stiff spring whose force is only approximately the reaction.

Skew supports rotate the nodal basis

An inclined roller restrains one direction that is neither X nor Y. Rather than approximating it, the solver rotates that node's basis by the skew angle and solves in the rotated frame, folding the rotation into the element transformation as one effective matrix:

One transform per member, so there is no second pass to keep in step

Method 06

End releases and static condensation

A pin, an axial slide or a shear release is an end through which the member transmits no such action. The solver removes it exactly, by condensation — not with a soft spring.

Partition the element's six DOFs into kept (K) and released (R) sets and impose that the released actions are zero. Solving the released rows and substituting back gives a condensed element that is exact, with no stiffness left on the released DOFs at all:

Both the stiffness AND the fixed-end forces are condensed

The alternative — a very soft rotational spring at the pin — is approximate, pollutes the conditioning, and leaks a small moment through every “pin”. Condensation matters most for a truss, where every member is pinned at both ends: after condensation no member contributes any rotational stiffness anywhere, which is exactly the physics, and the joint rotations are handled as described in section 8.

Supports and releasesFigure 9

Scroll figure horizontally →

Support and end-release galleryThe support types — fixed, pinned, two roller directions, a skewed roller, and an elastic spring — each listed with the degrees of freedom it restrains, followed by the three member end releases: moment, axial and shear.Fixedux · uy · rzPinnedux · uyRoller — slides in XuyRoller — slides in YuxSkewed rolleruy′ in a frame rotated αSpringelastic k — not a restraintMember end releases — the member transmits no such action thereMoment release (pin)M = 0 at this endAxial releaseN = 0 at this endShear releaseV = 0 at this endrestraint lists generated by expandSupport() — releasing the same action at both ends disconnects the member and is refused
Each support glyph lists the DOFs it restrains, generated from the same restraint definitions the solver uses. A release pattern that disconnects the member — the same action released at both ends — is refused as a modelling error. On the canvas, a joint where every framing member is moment-released collapses to a single hinge ring, because 'this joint transmits no moment' is one fact about the node, not one per member.

Method 07

Loads and fixed-end forces from Betti

A member load must become equivalent nodal loads. Most tools look those up in a table of standard cases. This one derives them from the element's own shape functions — and that is a better idea than it first sounds.

A load applied along a member — a UDL, a partial trapezoid, a point force between nodes — cannot enter the nodal equations directly. The classical bridge is the fixed-end force vector: the forces the member's ends would carry if both were fully fixed. By Betti's reciprocal theorem each component is the work-conjugate integral of the load against the element's own interpolation functions:

One integral, evaluated by 4-point Gauss quadrature, exact for the degree-4 integrand

The interpolation functions are the Hermite cubics (in shear-flexible form when Φ is active; at Φ = 0 they reduce to the classics):

ξ = x/L. These carry v_I, θ_I, v_J, θ_J respectively — figure 3 plots them from the implementation

The Hermite shape functionsFigure 3

Scroll figure horizontally →

Hermite transverse shape functionsThe four transverse interpolation functions over the normalised member coordinate. N one starts at one and falls to zero and carries the I-end deflection; N three is its mirror and carries the J-end deflection; the two dashed curves carry the end rotations and peak near one seventh of the deflection curves.01ξ = 0ξ = 1N₁ — carries v_IN₃ — carries v_JN₂ — carries θ_IN₄ — carries θ_Jsampled from transverseShapeFunctions() with Φ = 0 and L = 1
Sampled from the solver's own shape functions at Φ = 0 with L = 1. Each curve is one at its own DOF and zero at the other three — the property that makes the Betti integral give each end exactly its share of the load.

Why derive instead of tabulate

For a full-span UDL the integral collapses to the numbers every engineer knows. Take the end-moment component, with the load acting downward at intensity w:

the worked line — ∫(ξ − 2ξ² + ξ³)dξ over [0,1] is 1/2 − 2/3 + 1/4 = 1/12

A table of standard cases reproduces that too. What the table cannot do is generalise: the same integral with different limits is a partial-span load; with a linearly varying intensity it is a trapezoid; with the Φ-modified shape functions it is the Timoshenko fixed-end force set, for which no common table exists. One code path, no transcription errors, and the benchmark suite asserts the classical values — wL²/12, Pab²/L² and the rest — are reproduced exactly.

Fixed-end forces from the shape-function integralFigure 4

Scroll figure horizontally →

Fixed-end forces derived from the shape functionsA uniform load on a fixed-ended member produces end shears of w L over two and end moments of w L squared over twelve, evaluated by the engine's shape-function integral rather than a table. The same integral applied to a partial-span trapezoidal load produces the four end actions shown, with no separate table case.Full-span UDLPartial-span trapezoid — same integralwwL/2 = 30.0 kNwL/2 = 30.0 kNwL²/12 = 30.0 kN·m-30.0 kN·mL = 6 m · w = 10 N/mm — engine values shownw₁w₂abV_I = 16.08 kN · M_I = 23.39 kN·mV_J = 21.42 kN · M_J = -28.17 kN·mw from 5 to 20 N/mm over [1.5 m, 4.5 m]
Left: the full-span UDL, whose integral collapses to wL/2 and wL²/12 — the values shown are the engine's own fixed-end-force output. Right: a partial-span trapezoid through the identical code path; the four end actions are computed, not tabulated.

The load vocabulary

The solver accepts nodal forces and moments, member point forces and moments at any position, linearly varying distributed loads over any sub-span, uniform and through-depth temperature changes, prescribed support displacements, and self weight computed from each member's own ρ·A·g. Two details are worth pausing on. A distributed load in a global direction on an inclined member can be measured per unit member length or per unit projected (plan) length — snow and plan-area loads are the latter — and on a 3-4-5 member the two readings differ by 20%. The tool never infers which you meant; the choice is an explicit part of every distributed load.

Load types, and the projected-load trapFigure 10

Scroll figure horizontally →

Load typesThe load types the solver accepts: nodal force and moment, member point force, member moment, a linearly varying distributed load over part of a span, uniform and gradient temperature, prescribed support displacement, and self weight. A final panel shows the difference between an intensity per unit member length and an intensity projected on plan for an inclined member.FM_zNodal force · momentP at aaMember point forceM at aMember momentw₁w₂[a, b]Distributed w₁ → w₂ΔT uniform — strainΔT gradient — curvatureTemperatureδ imposedSupport settlementw = ρ·A·gSelf weight, −Ydirection: global X/Yor the member's local x/yframe is always explicitNever inferredIntensity per member lengthtotal = w · L_memberProjected on plan — snow, plan-area loadstotal = w · L_planon a 3-4-5 member the twodiffer by cos α = 0.80 —a 20% error if confused
Every load type the model accepts. Bottom: the same numeric intensity on the same inclined member, read per member length and per plan length — the totals differ by cos α, and the tool makes the choice explicit rather than guessing.

And temperature: a thermal load is a temperature difference, so it converts between °C and °F by ratio alone — the +32 of the absolute conversion belongs to the datum and cancels. The platform carries a distinct unit kind for temperature differences because applying the absolute formula turned a US user's 50 °C rise into 122 units and flipped cooling into heating. Thermal fixed-end forces are self-equilibrating: a restrained bar develops stress and no net reaction, a free bar develops strain and no stress, and benchmark B13 asserts both.

Method 08

Solving: elimination, LDLᵀ and conditioning

The global system factorises once — the stiffness does not depend on the loading — and every case and combination reuses that one factorisation.

The solve pipelineFigure 11

Scroll figure horizontally →

The solve pipelineValidate the model, prepare geometry and element matrices, condense member releases, build fixed-end forces and load vectors, eliminate restrained degrees of freedom, factorise once, solve every case and combination, recover internal actions from exact statics, recover stresses, and publish the checks and the verification record.solveModel() — pure, no I/O, identical in the worker and the PDF path1 · Validatelib/fea/validate.tserrors stop the solvewarnings never hidden2 · Preparelib/fea/assemble.tsT_eff = T · Rᵀk_local per member3 · Condense releaseslib/fea/releases.tsstiffness ANDfixed-end forces4 · Loads → FEFlib/fea/loads.tsloadVector.tsBetti + exact quadrature5 · Reducefree DOFs onlyno penalty terms6 · Factorise oncelib/fea/linalg.tsLDLᵀ, no pivotingfailed pivot → named DOF7 · Solve every caselib/fea/solve.tsone factorisation,one back-substitution each8 · Recoverlib/fea/recover.tsexact statics N·V·Mintegrated deflection9 · Stresseslib/fea/stress.tsσ = N/A ± My/Iτ = V(Q/t)/I10 · Checks & verification recordpack layer — checks/, qaRecord.tsequilibrium · mesh study · conditioningEvery case reuses the one factorisationstiffness is load-independent, so combinationscost a back-substitution, not a re-solve
Each step names the module that implements it. The identical pure pipeline runs in the browser's worker and in the server-side PDF path, so the screen and the report cannot disagree about a number.

The reduced stiffness matrix of a stable structure is symmetric positive definite, so it is factorised as without pivoting. That choice is not only about speed. When a model is a mechanism, the factorisation fails at a specific pivot, and that pivot maps back to a specific node and direction — so the tool can say “node B can rotate freely — add a support or connect another member” instead of surfacing a linear algebra error. For a user still learning frame behaviour, the named mechanism is the most valuable output the solver has.

Zero-stiffness DOFs, or: why a truss just works

In a pin-jointed truss no member resists rotation at any joint, so every joint-rotation DOF has an empty stiffness row. That is not a modelling error — it is the physics of a pin joint — so the solver constrains those DOFs automatically when they carry no load, reports that it did, and changes no result. The exception is deliberate: a load applied to a zero-stiffness DOF (a moment on a fully pinned joint) has genuinely nothing to carry it, and is refused as an error rather than absorbed.

The conditioning estimate

The factorisation's largest-to-smallest pivot ratio is reported with every solve as a cheap conditioning proxy — it is not a 2-norm condition number and is never described as one. A healthy frame sits around 10⁵, simply because axial stiffness EA/L and bending stiffness 12EI/L³ differ by that much in any ordinary member; the warning threshold sits at 10¹², where double precision genuinely starts to erode. A huge ratio means wildly mismatched stiffnesses, a near-mechanism, or a unit error — the results are still exact for the model as stated, but the model deserves a second look.

Method 09

Recovery: exact statics and the integrated deflected shape

Diagrams here are not differentiated shape functions. They are statics — which is why one element per member gives the same curve as fifty.

Internal actions from equilibrium of the cut

Once the member's end forces are known, N, V and M at any interior position follow from equilibrium of the free body between the I end and a cut at x — the member's own end actions plus whatever load acts on the segment. The load intensity is linear on each smooth interval, so V is quadratic, M cubic, and the polynomial coefficients are carried analytically; there is no numerical integration in the recovery path and no quadrature error.

The consequence is the headline verification property of this solver: the diagrams are mesh-independent. A tool that differentiates the element displacement field gets a mesh-dependent approximation — the cubic Hermite field can only produce linear moment between nodes — and needs the user to think about element counts. Here mesh density is purely a plotting resolution. Solver identity I1 asserts the one-element and fifty-element models agree to machine precision, and every solve re-measures the property on your actual model (section 15). Peak positions come from the same mathematics: M is stationary where V = 0, which is solved in closed form per segment, so a peak is reported at its true position — 5L/8 on a propped cantilever, L/√3 under a triangular load — rather than at the nearest plot station.

The deflected shape integrates the curvature

Integrated analytically per segment; θ is the integral of curvature and v follows, with the shear term entering through V's own sign convention

Integrating the recovered moment field picks up, for free, the three things nodal interpolation misses: the particular solution of the member's own load, the shear contribution when Φ is active, and thermal curvature. The classic web-FEA bug is to interpolate the two nodal displacements with the Hermite functions alone — the nodal values are right, so the curve looks plausible, and the midspan of a uniformly loaded single-element beam is simply wrong. Benchmark B4 exists to catch exactly this: a one-element simply supported beam has zero displacement at both nodes, so only a recovery that integrates the load's particular solution can produce 5wL⁴/384EI at midspan.

That cross-check runs on every solve, not only in the tests: integrating the curvature from the I end must reproduce the solved displacement and rotation at the J end, and the worst disagreement is reported as the recovery residual (section 15). Two independent routes to the same quantity — the global solve and the analytic integration — agreeing to machine precision is a stronger statement than either alone.

Method 10

Stress recovery

Elastic beam-theory stresses from the recovered actions and the section properties — reported with their sampling locations stated, including the one an I-section reader should know about.

Engineer's theory of bending, the shear-flow formula, and the distortion-energy criterion

The quantity Q/t — first moment of the area beyond the neutral axis, divided by the width of the cut there — is a section property, supplied per section and exact for the outline when the section is generated from one (section 11). That is a deliberate separation: the effective shear area is a convention with several defensible values, and it affects only the average shear stress and the optional Φ term. The governing peak shear stress comes from Q/t and is never contaminated by the choice of .

Von Mises stress is evaluated at three competing locations: the extreme fibre, where the normal stress peaks and the transverse shear is essentially zero; the neutral axis, where the bending stress vanishes and the shear peaks; and — on a section generated from a flanged outline — the step where the flange gives way to the web. All three are computed and the largest governs, because which one wins depends on the section and the action ratio.

The third one is the one a two-point tool misses, and it is not a small miss. At the step the first moment has barely fallen while the width of the cut has collapsed from the flange to the web, so the shear is close to its peak at the same time as the bending stress is still most of its extreme-fibre value. Over a band of M/V of roughly one to three times the section depth — a short way in from a support — that combination beats both of the obvious points. Sampling only the fibre and the neutral axis understates the equivalent stress across this tool's section catalogue by up to 22% (worst: UC 356×368×129; UB 20%, HEA 19%, IPE 17%, SHS 14%), and by around 26% on a sharp-cornered welded girder, whose lack of a root fillet puts the step closer to the flange.

Three points are enough, and that is a result rather than a hope. Within any run of constant thickness the equivalent stress can only peak at one of the run's ends — its interior stationary point is a minimum — and the ends of the runs are exactly these three positions. A solid or circular section has no step and no interior run to worry about, so for those two the first two points are provably sufficient. The engine asserts this against an exact evaluation at twenty thousand positions through the depth.

Method 11

Section properties, including the fillets

Catalogue sections store dimensions, not properties. Everything the solver needs is derived from the outline — including the root fillets most simple tools drop.

A section can be typed as raw properties or generated from a dimensioned outline — rectangle, I-section, RHS or CHS — in which case A, I, , Q/t and the fibre distances are derived by first principles. The catalogue of 194 standard profiles stores nominal dimensions only and goes through the identical derivation, so a catalogued IPE and a hand-typed outline can never disagree about the same shape. Editing any derived number releases the section from its outline rather than leaving the two to contradict each other.

What the outline derivation includesFigure 7

Scroll figure horizontally →

Section property derivationLeft: a rolled I-section with its depth, flange width, flange and web thickness and root radius annotated, and the four fillet regions at the web-to-flange junctions shaded. Middle: the same section with the area above the neutral axis shaded, whose first moment gives Q over t. Right: a rectangular hollow section drawn as the difference of an outer and an inner rounded rectangle, keeping the wall thickness constant around the corner.Dimensions and root filletsQ/t — first moment above the NAHollow section — a differenceb_fdt_ft_wr — root fillet4 fillets ⇒ +3.6% A · +4.3% I (IPE 300)NAQ = ∫ y dA over the shaded half · τ_max = V(Q/t)/Ir_or_i = r_o − ttwall stays exactly t around the corner
Left: the fillet regions between web and flange — for the IPE 300 they contribute 3.6% of the area and 4.3% of the second moment, recomputed here from the catalogue dimensions. Middle: the shaded half-area whose first moment gives Q/t. Right: a hollow section as the difference of two rounded rectangles, which keeps the wall exactly t around the corner. Fillet radii are drawn exaggerated for legibility.

The fillet mathematics

Each root fillet is a square minus a quarter disc: area per fillet, centroid from the sharp corner. The I-section's second moment is then

The fillet's own second moment about its centroid is five orders of magnitude down and is neglected

Omitting the fillets models a rolled beam as 4.3% more flexible than it is — the wrong direction for a deflection check to err in, and invisible because the answer merely comes out slightly low. A hollow section is handled as the difference of two rounded rectangles with , which is how the tube is actually formed; rounding only the outside overstates stiffness by roughly 3% on a typical cold-formed square, again unsafely.

The accuracy is measured rather than asserted: every catalogue entry stores its published nominal mass per metre — the one property quoted everywhere — and the derived area must reproduce it through ρ·A. Recomputed at this render, the worst deviation across the metric open sections and circular tubes (IPE, HEA, HEB, HEM, UB, UC, CHS) is 0.64%; across the AISC W shapes, whose dimensions and nominal masses are both rounded imperial values, 1.87%; and across the rectangular hollow sections 3.47%. Hollow sections are the weakest case by construction — their corner radius is a convention rather than part of the designation, so a specific mill's table can differ by a couple of percent, and a supplier's data governs. For the rolled European I-sections, the test suite additionally holds the derived area and second moment against published reference values for a spread of IPE, HEA and HEB sizes, where the agreement runs to hundredths of a percent.

Method 12

Materials: elastic constants only

The material picker offers typical elastic constants as a starting point. No strength value appears anywhere in it — a catalogue of resistances would quietly turn a stated assumption into an implied code check.

A material here is five numbers: E and G set stiffness, ν relates them, ρ sets self-weight, α sets thermal strain. For an isotropic material the constants are not independent — — which makes every isotropic entry self-checkable, and the test suite checks each one against its own identity.

Every value the picker offers is an editable default, reported in the output as the value actually used, beside the assumption that you confirmed it against the project specification. The concrete entries are short-term secant moduli on the gross uncracked section — cracking, creep and shrinkage are outside a linear elastic analysis, so a cracked or long-term stiffness is yours to enter as a reduced E.

Method 13

Load cases, combinations and envelopes

Combinations are factored sums of case solutions. That is exact here — and only here: it is a property of linear analysis, not of analysis in general.

Load cases group loads that act together; combinations scale and sum cases with factors like 1.35 and 1.50. Under linear analysis superposition is exact, so a combination's response is the factored sum of its cases' responses — to machine precision, asserted as solver identity I3. This is why combinations are computationally near-free: the stiffness never changes, so each one costs a back-substitution against the single factorisation. It is also a boundary worth naming: a second-order analysis could not combine this way, because amplification depends on the total load level. The cheapness of combinations is a fact about LA, and it leaves the ladder with the analysis type.

From cases to combinations to the envelopeFigure 12

Scroll figure horizontally →

Load cases, combinations and the envelopeTwo load cases combine by factored superposition into two combinations, whose bending moment curves bound an envelope band. The upper bound is governed by the gravity combination and the lower bound by the uplift combination, and every envelope value names its governing combination.Case GPermanent10 N/mm downCase WWind uplift9 N/mm up1.35 Gfactoredsuperposition0.90 G + 1.50 WfactoredsuperpositionM_max bound — governed by “1.35 G” · peak 108.0 kN·mM_min bound — governed by “0.90 G + 1.50 W”each bound carries the name of the combination that produced it
A live two-case model: gravity and wind uplift combine into two factored combinations whose moment curves bound the envelope. Each bound names its governing combination — the label is read from the computed envelope, not written into the figure.

Envelopes answer the question a designer actually has — the worst value at every position, and which combination causes it. Every envelope bound carries its governing combination's name, at every station and for every peak, because an envelope value that cannot be attributed cannot be checked. Combinations marked serviceability drive the deflection check; strength combinations drive the stress checks; an unmarked combination counts for both. One honest limitation: envelopes are taken at matched station positions, and a case that has no station at a given x is dropped from that station's bounds — see section 18.

Method 14

Validation and diagnostics

The difference between a frame tool that teaches and one that frustrates is what it says when the model is not yet right.

Before anything is solved, the model is swept for the problems that produce wrong answers silently. Errors stop the solve: members referencing missing nodes, zero-length members, non-positive section or material values, loads placed beyond the end of their member, imposed displacements on unrestrained directions, groups of members connected to no support — each reported at the altitude the user works at (“these four members form a group with no support”), not as a matrix condition. Warnings let the solve run but flag meaning: duplicate nodes at one location, members that cross without sharing a node (the single most common real modelling mistake — they look connected and transmit nothing), springs made inert by a rigid restraint on the same DOF, distributed loads truncated at a member end.

Non-finite input gets its own sweep. A not-a-number value does not crash a solver — it propagates, defeats every downstream comparison, and once produced a model that reported itself stable while its moments were unrepresentable. A blank or unparseable spreadsheet cell now refuses the solve by name, before any arithmetic happens.

Method 15

The verification record — what every solve measures about itself

Five measurements accompany every analysis. Anything not measured says so rather than showing a zero — because zero is the best possible value for all of them.

1 · Factorisation

Did LDLᵀ complete with every pivot positive? If yes, the structure is stable under the stated restraints and the count of free DOFs is reported. If no, the failed pivot is attributed to its node and direction and nothing downstream pretends to be an analysis.

2 · Equilibrium residual

The applied loads plus the solved reactions must sum to zero. The applied resultant is integrated directly from the load definitions, independently of the fixed-end-force path used to solve — summing the equivalent nodal loads instead would test the solver against itself and silently assume the FEF derivation is right, which is precisely the part most worth testing. Agreement here therefore exercises the load derivation, the assembly and the solve at once.

The subtlety is the normalisation. A settlement on a statically determinate structure is a rigid-body movement: no load, no reaction, no strain — both sides of the balance are floating-point noise, and dividing noise by a near-zero scale once reported a residual of 9.2×10⁻³ against a model that is exactly in equilibrium. Components now only count once they exceed an absolute floor set five orders above machine noise and eleven below any real load, so the artefact is suppressed without any ability to hide a genuine disagreement.

3 · Recovery residual

Integrating the recovered curvature from the I end of each member must land on the solved displacement and rotation at the J end (section 9). The disagreement is normalised by the magnitude of the terms that had to cancel — normalising by the end value itself was a real bug, because a simply supported member's end displacement is exactly zero by construction, and dividing a last-bit cancellation error by nearly nothing declared a perfect analysis untrustworthy. A residual above 10⁻⁶ raises a warning that names the results unverified.

4 · Mesh independence

The model is re-solved with every member subdivided, and the relative change in peak displacement is reported. Exact statics recovery says this should be ~0, and rather than asserting that, the solver measures it on your actual model every time. The comparison is built carefully — shared nodes plus each member's analytically located transverse extremum, which is mesh-invariant, because refinement inserts interior nodes the coarse model cannot report and comparing against those would measure the mesh rather than the answer.

Above 600 free DOFs the study is skipped — the second solve costs about eight times the first — and it is then reported as not measured, never as zero. That distinction was a real defect: an unmeasured delta initialised to 0 rendered as a green pass captioned as though the study had run.

5 · Condition estimate

The pivot ratio of section 8, printed with its honest description: a proxy, around 10⁵ for a healthy frame, worth attention above 10¹².

The verification chainFigure 13

Scroll figure horizontally →

The verification chainOne benchmark register defines every case as data. The automated test suite asserts each case against its closed form on every build, and the public verification page solves the identical objects when it renders, so neither consumer can drift from the other.Benchmark register — the single sourcelib/fea/benchmarks/cases.tsB1–B17 closed forms · I1–I5 identitiesD1–D7 specified diagnosessigned expected values · peak locations tooTest suite — every buildtests/fea-benchmarks.test.tsnpm run verify fails on any divergencea drifted register cannot shipPublic page — every render/docs/frame-fea-2d/verificationsolves the same objects at render timeprints computed · analytical · errorthe page cannot publish a case the suite does not run, and cannot print an agreement figure that was typed in by hand
One register defines every benchmark as data — models, signed closed forms, peak locations, specified diagnoses. The automated suite asserts it on every build; the public page solves the identical objects at render time. Neither can drift from the other, and neither can publish a transcribed number.

Alongside the per-solve measurements stands the solver's own record: 17 closed-form benchmarks, 5 solver identities and 5 pack validation cases, every one solved live on the verification record with computed value, analytical value and measured error side by side. Expected values are signed — a register that compared magnitudes would wave a flipped convention straight through — and peak locations are asserted as quantities in their own right. Comparing a solver against closed-form solutions is code verification in the sense of ASME V&V 10: evidence the equations are solved correctly. It is not validation against physical experiment, and it is not a claim about any particular model you build.

The seven checks

Three checks interrogate the analysis itself and run whether or not you have entered a single allowable; four compare the output against limits you supply.

CheckWhat it reports
fea.stabilityStability & solvabilityWhether the stiffness matrix factorises, and where it does not, the degree of freedom the structure is still free to move in.
fea.equilibriumEquilibrium residualApplied loads against solved reactions, integrated independently of the fixed-end forces used to solve, and reported as a relative residual.
fea.mesh-independenceMesh independenceHow far the peak displacement moves when every member is subdivided and the model is re-solved — and, above the size limit where that study is skipped, that it was not measured.
fea.deflectionDeflection vs span limitPeak transverse deflection against the span/limit ratio you supply.
fea.normal-stressCombined normal stressPeak at the extreme fibres against the allowable you supply — and, where a section states no extreme-fibre distance, alone for a member carrying no bending stress measurable against this model's stress scale, or nothing at all for a member that does.
fea.shear-stressShear stressPeak at the neutral axis against the allowable you supply.
fea.von-misesvon Mises equivalent stressPeak at the extreme fibre, the neutral axis, and the web/flange step where the section has one, against the allowable you supply.

Method 16

Worked examples

Three models you can check by hand, with the tool's numbers taken from live solves at this render — the same models ship as templates.

Simply supported beam — hand calculation beside the toolFigure 14
Simply supported beam under a uniform loadA six metre simply supported beam carrying a uniform downward load, pinned at one end and on a roller at the other — the model behind the worked comparison table beside it.w = 15 N/mmL = 6 mthe “Simply supported beam” template, solved live
QuantityClosed formBy handThis tool
Midspan deflection5.51 mm5.51 mm
Midspan moment67.5 kN·m67.5 kN·m
End shear45.0 kN45.0 kN
Support reaction45.0 kN45.0 kN
Bending stress at midspan61.7 MPa61.7 MPa
Peak shear stress at the support14.8 MPa14.8 MPa
The shipped template, solved when this page rendered. Both columns are computed here: the closed forms from the section constants, the tool column from the solver — a transcription cannot drift.
Pinned-base portal frame under 1.35 GFigure 15
Pinned-base portal frame — bending moment diagram under 1.35 GThe template portal frame with its bending moment diagram drawn on the structure. The knees carry hogging moments and the rafter midspan carries the sagging peak; each ordinate is offset toward the member's local y axis, so the rafter's diagram stands above and below it and the columns' diagrams stand out horizontally.-40.4 kN·m-40.4 kN·m+89.2 kN·m

The statics must recompose

The rafter behaves like a simply supported span whose free moment is redistributed by the knees: |M_knee| + M_mid must recover .

40.4 + 89.2 = 129.6 kN·m ↔ 1.35·wL²/8 = 129.6 kN·m

The knee joint balances

No external moment is applied at the knee, so the moment the rafter carries into the joint must be the moment the column carries out of it.

column top -40.4 kN·m ↔ rafter end -40.4 kN·m

The template portal's bending moment diagram on the structure, ordinates offset toward each member's local +y. The knee and midspan moments must recompose the free-span moment, and the knee joint must balance — both checks shown with the solved numbers.
Pin-jointed truss — axial only, by condensationFigure 16
Pin-jointed triangular trussA triangular truss with every member moment-released at both ends, carrying a downward load at the apex. The diagonals are in compression, the bottom chord in tension, and no member carries any bending moment.P = 20.0 kNN = +6.67 kN (tension)N = -12.02 kN(compression)R_y = 10.00 kN

Joint equilibrium at the support

At the left joint only the diagonal has a vertical component, so the reaction must equal the vertical component of its axial force: R_y = −N_diag · sin θ.

−(-12.02) × 0.8321 = 10.00 kN ↔ R_y = 10.00 kN

Pin-jointed means axial only

Every member is moment-released at both ends by static condensation, so no member can carry bending. The largest |M| anywhere in the solved model is 0.0e+0 N·mm — machine noise, asserted as zero in benchmark B10. The joint rotations carry no stiffness at all, so the solver constrains them automatically and says so in a diagnostic.

Benchmark B10's model, solved live. Pinned-both-ends members carry pure axial force; the support joint's vertical equilibrium cross-checks the diagonal force against the reaction.

Method 17

Limits, measured performance, and scope

Free to use, and honest about capacity: there are hard caps, and the dense solver is slow well below them.

Models are accepted up to 600 nodes, 900 members and 600 loads per case. Every result is free and no account is needed to see them; only the PDF export asks for a free sign-in. Within those caps, performance is governed by the dense LDLᵀ factorisation — O(n³) in the free DOF count — and by the mesh-independence study's second solve:

NodesMembersFree DOFSolveSolve + mesh study
18733652859 ms0.9 s
273500780119 ms7.5 s
40575411701.6 s37.7 s
46585413022.2 s55.6 s

Measured on rectangular moment frames, July 2026, single browser thread. This is why the mesh study is bounded at 600 free DOFs: beyond it the study costs far more than the analysis it verifies, so it is skipped and reported as not measured. The analysis itself still runs to the caps — the largest accepted model solves in a couple of seconds without the study.

Out of scope in this version

The scope statements below are permanent and printed with every report — a reader must not have to infer the tool's boundary from the absence of a number. On the EN 1993-1-14 ladder of section 2, everything above LA is on this list.

Second-order and stability analysis
Equilibrium is formed on the undeformed geometry. and effects, notional loads, stiffness reduction and linear buckling (LBA) are not performed. Roadmap, not omitted silently.
Material and geometric non-linearity
The material model is linear elastic with no yield surface. Plastic hinges, plastic capacity, large displacements and contact are outside this analysis type.
Dynamics, modal analysis and fatigue
Static analysis only. Natural frequencies, mode shapes, response spectra, time history and fatigue life are not computed. For a fatigue assessment of a detail, use the Fatigue Spectrum Analyzer.
Element library
Two-node prismatic plane frame elements only. Plate, shell, solid, cable, spring-element and tension-only members are not available, and no through-thickness or local stress field is produced.
Out-of-plane behaviour
The model is planar: minor-axis bending, torsion, warping and lateral–torsional buckling are not represented. A member that is unrestrained out of plane needs a separate check.
Code member and connection checks
No design-code member check is performed — no cross-section classification, no buckling reduction factor, no partial factors, no connection or base-plate design. This tool produces analysis output and compares it against the limits you supply. Member and connection verification to EN 1993, AISC 360 or equivalent remains yours.

Method 18

Known limitations

What this tool does not do, and what it is known to do imperfectly. Every entry that could be closed has been: two review passes since launch cleared twelve of them, including three that turned out to be wrong numbers rather than the visible limitations they had been recorded as. What is left is four things that are genuinely bounded rather than merely unfixed, and each says what it costs you.

  • Von Mises on a hand-typed section. The web/flange step is derived from the section's outline, so a section whose properties were typed in rather than generated is sampled at the extreme fibre and the neutral axis only — and if it is really flanged, its equivalent stress at the step can be about a fifth higher (section 10). The check says when this applies. Sections generated from an outline or taken from the catalogue evaluate all three points.
  • Very large models cannot be shared as a link. A link carries the whole model, and a few hundred nodes makes a URL longer than the roughly 8,000 characters many servers and mail clients will pass on intact. The tool now checks before offering the link and warns you when it is that long, and a model outside what a link can encode at all is refused with the reason rather than minted and left to fail at the other end. Send the report instead when you see that warning.
  • Large-model reports. A report plots at most 72 diagrams. Beyond that the diagrams are bounded — members are plotted worst-first by peak bending moment, every member's values still appear in full in the result tables, and each section states how many of its diagrams were left out. The cap is by design; what was fixed is that the notice used to disappear along with the diagrams it described.
  • Browsers. Chrome is driven directly in testing. Firefox and Safari are not, and no amount of static checking is the same thing as opening the tool in them. What is checked automatically is the part that can be: the build fails if either of the two patterns that previously shipped Safari- and Firefox-only defects here reappears — a wheel handler bound through React, which is attached passively so it cannot cancel scrolling, and a pointer capture taken on an element a re-render can remove mid-drag — and if any of eleven runtime APIs with a support floor above the rest of the code is introduced.

Closed since launch, and named here because they were published on this page as accepted limitations: an empty combination that zeroed every envelope row, two members re-pointed onto the same pair of nodes, envelope stations that dropped a load case, a spring made inert by the releases around it, duplicate entity ids, a cleared field committing zero, pins outliving their load case, the empty-model report wording, a hardcoded benchmark count, von Mises sampled at two points where a flanged section needs three, and a share link that could be minted in a form its own reader rejects. Each now either produces the right number or refuses and says why, and each carries a regression test that fails against the code as it stood.

The pattern across the fixed defects is worth stating: almost none were physics; they were measures — a normalisation, a renderer, a unit conversion, a zero treated as a value. That is exactly why the verification record insists on measuring rather than asserting.

Method 19

References, and the claim contract

Metadata only — no standard text is reproduced anywhere in this product. Two kinds of reference, doing two different jobs.

Sources that back computed numbers

Every number this tool produces traces to public-domain mechanics, or to a value you supplied. These carry no code coefficients and no safety factors.

Matrix structural analysis — direct stiffness method

Public mechanics

Assembly of element stiffness matrices in a global frame, elimination of restrained degrees of freedom, and solution of by symmetric factorisation. Public-domain structural mechanics; no code coefficients are involved.

Euler–Bernoulli and Timoshenko beam theory

Public mechanics

Two-node plane frame element with linear axial and Hermitian bending interpolation, written in shear-flexible form with . Setting recovers Euler–Bernoulli exactly, so one element formulation serves both theories.

Statics — equilibrium of a rigid body

Public mechanics

, , . Used both to recover internal actions along a member from its end forces and to cross-check the solved reactions against the applied loading.

Engineer's theory of bending

Public mechanics

at the extreme fibres of a prismatic section that remains plane and elastic. Public-domain mechanics of materials.

Shear stress distribution in beams

Public mechanics

at the neutral axis, with reported alongside it. Public-domain mechanics of materials; is derived from the section outline, not tabulated.

Distortion-energy (von Mises) equivalent stress

Public mechanics

for the plane stress state carried by a beam element. Evaluated at the extreme fibre and at the neutral axis, because the two locations are governed by different quantities.

User-supplied acceptance criteria

Engineer supplied

Every limit this pack compares against — the deflection span ratio and the normal, shear and equivalent-stress allowables — is entered by the engineer and reported as theirs. Xarpis supplies no resistance value, partial factor or code limit of its own.

Standards referenced for framing only

These shape how the analysis is described, reported and verified. None of them backs a computed number, and the platform's verify:standards gate enforces that structurally: a documentation-only reference cannot justify an implemented check, so the restriction is a build failure, not a policy.

EN 1993-1-14 · 2025

Documentation only

Design of steel structures — design assisted by finite element analysis. Defines the analysis taxonomy (LA, LBA, GNA, GNIA, MNA, GMNA, GMNIA) and the content an analysis record is expected to carry. This tool performs a linear analysis, LA in that terminology, and reports the analysis record content that part describes. Referenced for vocabulary and reporting structure only — no clause is implemented and no compliance is claimed.

ASME V&V 10

Documentation only

Standard for verification and validation in computational solid mechanics. Supplies the vocabulary for the distinction this pack relies on: comparing the solver against closed-form analytical solutions is code verification. Referenced for that framing only.

NAFEMS QSS001

Documentation only

Quality system supplement to ISO 9001 for finite element analysis. Referenced as the framing for publishing a benchmark register and a per-analysis quality record rather than asserting correctness.

NAFEMS R0064

Documentation only

Quality assurance procedures for engineering analysis. Referenced as the framing for the pre-solve model diagnostics and the equilibrium and mesh-independence records reported with every analysis.

AISC 360 Chapter C / Appendix 1

Documentation only

Direct analysis and second-order elastic analysis. Named here only to state what this v1 does NOT do: no second-order analysis, no notional loads, no stiffness reduction. Roadmap reference, not an implemented basis.

DNV-RP-C208

Documentation only

Determination of structural capacity by non-linear finite element methods. Named here only to state what this v1 does NOT do: no material or geometric non-linearity. Roadmap reference, not an implemented basis.

All internal calculation runs in canonical SI — newtons, millimetres, megapascals — and converts only at the display boundary. Switching the unit toggle re-renders numbers; it never re-runs the analysis.

2D Frame & Beam FEA Calculator — methodology & sources · Xarpis