Every relation this app uses, the assumptions behind it, where it stops being valid, and what it does at the edges. One entry per screen, in the order the app presents them.
Everything here is generated from the same specification file the app reads, so a relation shown here is the relation the app evaluates. Values are in newtons and millimetres throughout, which is the unit set the whole app works in.
Contents
Scope, and how to read this manual
Notation, sign conventions and axes
Solution methods used throughout
Choices, and where each one lives
How the results were verified
Statics — Force Systems & Resultants, Support Reactions, Determinacy & Stability
This manual states, for every calculation the app performs, what relation is being evaluated, what it assumes, how it is solved, and where it stops being trustworthy. It is written to be consulted rather than read through: each module is self-contained, and nothing later depends on anything earlier except the conventions set out in the next two chapters.
It is not a textbook. It does not teach structural analysis from first principles, it does not work exercises, and it assumes a reader who has met the subject before and wants to know precisely what this particular program does. Where a derivation is given it is given to fix the assumptions, not to instruct.
Every module entry has the same shape, in the same order:
Basis names the principle the relation rests on. Derivation shows how the working relation follows from it, including the steps where a choice was made. Assumptions lists what must be true for the result to mean anything, each stated so that its failure is recognisable. Takes and Gives tabulate the symbols with their units and meanings. Choices you have to make appears where a relation has more than one branch and the app puts a control on the screen rather than picking for you; Cases this screen covers without asking appears where a branch is settled by the numbers already entered or by both sides being shown at once, and the chapter on choices below says how each of those is presented and how to see which case you are in. What must always be true here lists the invariants. Each one is a record in the specification that the test suite turns into a test of its own, so the test count moves when the canon moves. Every current invariant, trend and boundary has an executable checker; the former deferred registry is empty. Where it stops gives the limits and singular points. Solution method says how it is actually computed, closed form or otherwise. Limitations says what the answer does not cover. Reading the result is about interpretation, and is where the common mistakes are named.
The formulas, symbols, units, invariants, boundaries and guards are generated directly from the same specification file the app itself loads at launch. A relation printed here is therefore the relation the app evaluates — not a description of it that could fall out of step. There is one module where that does not hold, the frame effective length, and its entry says so in the place a reader would look. The prose sections are written by hand and checked against the code by a gate that requires each entry to name the functions it describes and verifies those functions exist.
Numbers on screen and numbers in a file are not written to the same precision, and comparing a reading against this manual requires knowing which is which. The screen shows four significant figures, because that is what the printed tables this app replaces carry and because a reader cannot act on more. An exported table carries seventeen — the shortest count that reproduces a double-precision number exactly — so a value taken out as a comma-separated file and read back into a spreadsheet or a script is bit for bit the value that was on the screen, not a rounded copy of it. Figures leave as an image or as true vector, in which strokes stay strokes and text stays text at any magnification. The plain-text copy that rides on the clipboard is the exception and is written at the screen's four figures, because a person reads it.
This document is delivered twice from one source: as these pages, and inside the app itself, where the same generated markup is parsed and drawn with the platform's own text views. The app embeds no web browser, which is a consequence of a rule it holds elsewhere — it makes no network request of any kind, and on this platform a sandboxed application cannot show even a purely local document in a web view without asking for permission to open outgoing connections. The document you are reading and the one in the Help menu are therefore the same document, generated once.
Notation, sign conventions and axes
Conventions are not facts, and most disagreements between two correct calculations are disagreements about convention. This chapter fixes the ones this app uses. Where a convention differs from another common choice, the difference is stated rather than assumed away.
Axes. A right-handed set with x to the right and y upward. Angles are measured anticlockwise from the positive x axis. Moments and rotations are positive anticlockwise, so a positive moment about the origin turns the positive x axis toward the positive y axis.
Direct stress. Tension is positive. This is the ordinary convention in mechanics of materials and the opposite of the one usual in soil mechanics and in some concrete design work; the retaining-wall module notes where it works compression-positive instead, because that is how base pressures are read.
Shear force and bending moment. A bending moment is positive when it causes sagging — compression in the top fibre, tension in the bottom. Shear is positive when the left-hand part of a cut tends to move up relative to the right-hand part. These two choices are related: with them, the moment is the integral of the shear, and the shear is the integral of the load, both without a sign correction. Choosing the other convention for either one breaks that.
Section properties. Second moments are taken about centroidal axes unless the symbol says otherwise. I_x bends about the x axis, so it governs bending in the vertical plane. A section modulus is second moment over extreme-fibre distance, and where the section is unsymmetric the app gives one for each face rather than one number that silently means the worse of them.
Member forces. Axial tension in a member is positive; a strut carries a negative axial force. Some published tables print magnitudes with the word "strut" or "tie" instead of a sign, and where a value in this project was taken from such a table the sign is this project's, not the source's.
Units. Newtons and millimetres throughout, which makes stresses come out in newtons per square millimetre — numerically identical to megapascals. Second moments are then in mm⁴, which produces large numbers; the app displays them in scientific notation rather than rounding them. Nothing in the app carries a unit system that switches, because a unit switch is a class of defect that testing finds late and users find first.
Solution methods used throughout
Most of the app is closed form: a relation with a known solution, evaluated directly. Where that is not possible, one of a small number of numerical methods is used, and they are described here once rather than in every module that depends on them.
Direct evaluation. The default. Nothing iterates, and the result carries the precision of the arithmetic rather than of a tolerance. Where an expression is ill-conditioned — a difference of two nearly equal large quantities — it is rewritten algebraically rather than evaluated as written. The high-precision verification layer exists partly to confirm that such rewrites still compute the quantity they claim to.
Bracketed root finding. Used where a relation is transcendental, such as the fixed-pinned column condition or an elastic restraint. A bracket is established from the physics — two values known to straddle the root, with a sign change guaranteed between them — and bisected. Bracketing from the physics rather than searching from a guess is what makes the result deterministic: the method cannot wander to a different root, because no other root lies inside the bracket.
Direct stiffness solution. Used for every framed structure. Element stiffnesses are formed in local axes, transformed to global axes, assembled into a system matrix, restrained, and solved by hand-written elimination rather than a general linear-algebra library. Discretisation contributes a modelling error — a coarse mesh answers a slightly different question exactly — but the elimination itself is not error-free: a slender member's axial and bending terms can differ by many orders of magnitude in the same matrix, and eliminating one against the other subtracts nearly equal numbers, which is real numerical error rather than a modelling one. The solver reports a condition measure alongside the result for exactly this reason, because both that cancellation and a structure nearly a mechanism produce it, and a reader cannot tell the two apart from the displacements alone.
Eigenvalue extraction. Used for buckling of a discretised model, and the name is the general term rather than this app's method: no eigensolver runs. The geometric stiffness is formed proportional to the current member forces, and the combined stiffness is factorised at a trial load factor and its negative pivots counted — Sylvester's law of inertia, which gives the number of buckling modes already passed without naming any of them. The smallest critical factor follows from bisecting on whether that count is still zero, needing nothing but the same factorisation the direct stiffness solution already performs. The result is a bifurcation load for a perfect structure, which is an upper bound that no real structure attains.
Numerical integration. Used where a distributed quantity must be accumulated along a member, and the rule is chosen case by case rather than once. In the energy methods the degree of the integrand is known before the integration starts — a straight virtual moment diagram against a parabolic real one is a cubic — and the rule chosen integrates that degree exactly, so what comes back carries no quadrature error at all; the square of a parabola is a quartic and gets a second rule for the same reason. The deflection-by-integration screen is the exception, and its own entry says so: its integrand has no fixed degree, and it is accumulated by the trapezium rule over four hundred equal steps, so the number it returns is a discretised value rather than an exact one.
Guard values. Functions signal an input outside their domain rather than raising, and the signal is chosen case by case rather than fixed to one value. A negative length or a negative area, which have no physical reading at all, get a not-a-number. A zero length in a stiffness relation, by contrast, is a real limit rather than an invalid state — a member shrunk to nothing is infinitely stiff — so the frame elements return signed infinity there, the same choice made wherever a genuine physical limit is being approached rather than a domain violated: a column loaded exactly at its critical load, a shaft delivering power at standstill. A modulus of zero behaves according to where it appears: as a multiplying factor it correctly gives zero stiffness, and where it would appear in a denominator instead the relation is guarded to not-a-number rather than returning the infinity that raw division would give, because a material with no stiffness at all is being treated as an invalid input there rather than a limit worth reporting. What every one of these has in common is deliberateness: the value returned is chosen for what it means, lets an invalid or limiting intermediate propagate visibly to the screen instead of stopping the whole calculation, and makes the edge case testable in the same way as an ordinary one.
Choices, and where each one lives
A relation with more than one branch is where a reader most easily walks away with a wrong answer and no way to know it. The specification records twenty-nine such branches across the forty-five screens, and each one carries a statement of how it is presented — which is checked by a gate rather than described here and left to drift. This chapter says what those presentations are, so that the two headings printed under each module entry can be read for what they mean.
Seventeen of the twenty-nine appear as a control of their own, in a panel headed Choices, each with the reason the options differ printed beside it — a control offering two names and no reason is a control the reader takes the first item from. Those seventeen are the ones listed under Choices you have to make in the entries below. An eighteenth is a control as well, but not one of its own: on the matrix screen the choice between a bar element and a frame element is made by picking a truss shape or a frame shape, so it is the shape picker every structural screen already carries. Because the lists below are grouped by whether a branch drives a field of its own, that one appears under the second heading; it is the single exception, and it is named here rather than left to be found.
Moving a control moves something the reader can see. On the state each screen opens on, thirteen of the seventeen move a number: choose a sphere instead of a cylinder and the hoop stress halves, choose a closed cell instead of an open section and the torsion constant rises by two orders of magnitude, choose sway instead of braced and the effective length crosses from below the storey height to above it. The other four move the relation printed beside the reading and not the reading itself, and in each case that is the point of the branch rather than a control that does nothing. Two are theorems: the unit-load method and Castigliano's theorem agree to the last digit on a linear elastic structure, and the four routes through a beam's own moment diagram are one integration written four ways. One is a property of the opening shape: a beam carried on ground is not held at a node, so putting a spring at that node changes nothing, and the relation beside the reaction says exactly that. And on the classical-methods screen the slope-deflection and force-method routes reach the same end moments, which is what the branch exists to demonstrate. A reading in this app is a number together with the relation that produced it, and a control that moves only the second half is still moving something the reader can check.
The remaining twelve are listed under Cases this screen covers without asking. One of the twelve is the element-type choice described above, which does have a control — the shape picker — and is under that heading only because it drives no field of its own. Silence is not the same as absence, so each of the other eleven is presented some other way, and there are three ways.
Five are decided by numbers the reader has already entered, and a control beside them could only be set to contradict them. The rosette a strain gauge is, is the three gauge angles and nothing else; whether a force system reduces to a single force, a couple, or nothing is what its two components and its moment already say; whether a section is bearing over its whole base or lifting is which side of the core the resultant sits on, and the resultant is the load and the moment already typed; whether a gravity wall's base is in full contact is fixed by the base width and the height. In every one of these the screen names the case in the relation printed beside the affected reading — the route that ran, the case that holds, the formula that produced the pressure — so the case appears on the screen rather than in a document the reader does not have. The fifth of them is a span load's direction in the matrix screen, where no shape this release offers puts a span load on a tilted member, so the two options are two names for the same load; the distinction is carried in the composition layer and will need a control the day a pitched member gains one.
Three are outputs rather than questions. Whether a structure is a mechanism, determinate or redundant is a property of what the reader drew, and a selector would let them assert that a collapsing frame is determinate and be shown a determinate answer; the counts and the solver's verdict are on the screen instead. Where the largest bending moment sits — at a stationary point or at a load — is found by searching for both, so a control could only switch one of the searches off. The number of half-waves a plate buckles into is the count that minimises the coefficient, found by search and printed as a row of its own, because two aspect ratios either side of a crossing buckle into different shapes with the same coefficient and only the printed count makes that visible.
Two are cases where one side of the branch is what ships, and the honest thing is to say which. The inelastic column shows both the tangent-modulus and the reduced-modulus loads side by side and always will: they bracket the real answer from below and above, the width of the bracket is the reading, and a control could only hide one end of it and leave a bound looking like an answer. The bending-stress screen evaluates only the principal-axis case, because it takes two second moments and no product of area, and it says so in the relation beside the neutral-axis angle. Each carries a written condition for when the exemption expires — a product of inertia becoming an input, or the two bracketing loads ceasing to be shown together — so the reason is a claim that can be tested later rather than a decision that outlives its own justification. The transformed section is no longer in this list: uncracked and cracked are now a visible choice, and the neutral axis, inertia and both stresses follow that choice together.
How the results were verified
Five independent kinds of check are used here, and they do not all reach the same distance. The layers are independent in a specific sense worth stating: each is capable of catching a class of error the others cannot, so a quantity that has passed all five stands on ground that a quantity passing only one does not. How far each layer actually reaches is stated with it below, because a layer's coverage is part of what its verdict means — and the two layers that catch the most are the two that reach least far.
Layer 1 — printed values. Worked examples and tables transcribed from reference works, at the precision those works print. Seventeen files of them, one per module reached. This layer catches a formula transcribed wrongly, or a quantity computed in the wrong units. It cannot catch a misreading of the source, because it is the reading of the source.
Layer 2 — high precision. The same relations recomputed at sixty digits of working precision using arbitrary-precision arithmetic and stored to twenty significant figures, by a program that does not import the app's code. Twenty-nine files, and the widest of the five layers. This layer catches conditioning problems and cancellation — the cases where an algebraically correct expression loses its significant digits. The generating scripts are forbidden from importing the package they check, for the obvious reason: a fixture produced by the program under test agrees with it forever and proves nothing.
Layer 3 — symbolic. Where the app uses a closed-form solution to an implicit relation, a symbolic algebra system verifies the closed form actually satisfies that relation. This catches an error no numerical comparison can: a plausible formula that is not the root of the equation it claims to solve. It is also the narrowest layer here: one module is covered, the principal second moments, whose pair of closed forms is proved to satisfy the characteristic equation and to leave the two tensor invariants and the vanishing product of area exact for arbitrary symbols. The other implicit relations in the app — the tangent condition, the elastic restraint, the secant formula — are bracketed and bisected rather than solved in closed form, so there is no closed form for this layer to check.
Layer 4 — properties. Invariants and monotonic trends checked over whole parameter ranges by generated inputs rather than at chosen points. Every claim in a module's "What must always be true here" is registered as one of these and all current records run. This layer catches errors that hide between the points a person would think to test.
Cross-language conformance. Not a sixth layer of physics, and it is listed here because it is what makes every layer above mean something on the device a reader actually holds. Two independent implementations exist — one in Python, which is where the five layers above run, and one in Swift, which is what ships. Nothing above would catch a relation that had been translated wrongly between them, and this project has twice found a module that existed on one side and simply not on the other, invisible to every fixture because a fixture nobody wrote compares nothing. So both sides are run over the same inputs and compared directly. As this manual was generated the comparison covered 542 kernel relations against the sixty-digit reference at a tolerance of five parts in a hundred thousand billion, 5245 screen readings across all forty-five screens, and 1898 guardrail quantities and display decisions; both sides load a specification with the same fingerprint, which is compared as part of the same run.
That last count is new, and its absence had been costing something specific. Until it existed nothing compared the two implementations' guardrails or their display decisions at all — the numbers agreed and the sentences beside them were unchecked. It found a disagreement on its first run, which turned out not to be a translation error but a quantity two ways of computing it can legitimately differ on near zero; it is now compared with a named absolute floor and with the decision itself compared exactly. The screen-reading count moved from 4373 to 5245 over the same period, and the increase is mostly capabilities that had been written, fixture-checked, and never wired to a screen: a spherical pressure vessel, a delta strain rosette, a closed thin-walled section, a per-member breakdown, a joint-by-joint equilibrium check.
Layer 5 — independent sources. Values published in the public-domain engineering literature, compared against the app's results. This is the only layer independent of the primary references, and therefore the only one that can catch a misreading of them. It is also the layer with the least coverage, and that is stated rather than left to be inferred: thirty-seven comparisons across ten of the forty-five modules. The remaining thirty-five have layers 1 to 4 and no outside check at all. The shortfall is not for want of looking — the five public-domain manuals used here were searched module by module, and for several subjects, the strain rosette and the assumed-shape buckling methods among them, they carry no worked example in any spelling. Where a module below carries no row in the verification chapter, that is what it means.
On the reliability of published sources. Layer 5 has repeatedly found the published value to be the one at fault. Of the closed-form worked examples examined in the aerospace structures literature used here, several print answers that do not follow from their own printed equations — in one case a deflection wrong by a factor of eighteen, in another a stated root that does not satisfy the stated equation, in another a table whose printed total disagrees with the sum of its own printed terms. Each disagreement is recorded and adjudicated in writing, with the reasoning, rather than resolved by adjusting the app until it matched. Where this manual states a limit or an anomaly, it is because something was found, not because the possibility was imagined.
Statics
Force Systems & Resultants
Resolve a single coplanar force into its resultant magnitude and direction, and find the perpendicular offset of its line of action from a reference point.
A system of coplanar forces is statically equivalent to a single resultant force acting on a definite line, or — in one exceptional case — to a couple with no line of action at all. Equivalence here means something precise: the two systems produce the same vector sum and the same moment about every point in the plane. Both conditions are required, and the second is the one readers skip.
Derivation
Resolve each force into components along two perpendicular axes and add them independently. The resultant's components are the sums, and its magnitude and direction follow from them. This much is vector addition and carries no mechanics. The screen instantiates this for exactly one applied force: with a single term in the sum, the resultant's components are just F_x and F_y themselves, and the magnitude and direction the reader sees are that one force's own polar form.
The line of action is where the mechanics enters, and it is where a single force stops being trivial. Position is not carried by the components at all — a force moved parallel to itself has the same F_x and F_y and is not the same load. What position is recovered from is the moment sum. Taking moments about the origin and requiring the resultant to produce that same moment gives the perpendicular offset of its line from the origin: the one quantity in this module that genuinely depends on where the force is applied, not merely on what it is.
A system of two or more forces can reduce to a couple — a moment with no resultant and so no line of action anywhere — when the component sums vanish while the moment sum does not. That case cannot arise from a single force: if F_x and F_y are both zero the moment about any point is zero as well, so there is no configuration of one force that is a couple. The kernel carries a predicate for the general case, reduces_to_a_couple, precisely because dividing a moment by a resultant that is merely small rather than exactly zero gives a line of action racing to infinity instead of the finite couple that is actually there — but this screen never calls it, because the case it guards against does not arise here. What the screen does show at F_x = F_y = 0 is the kernel's own floor: an undefined direction and an infinite offset, reported directly rather than diagnosed.
R=√(F_x^2+F_y^2), θ_R=atan2(F_y,F_x)
M_O=xF_y-yF_x
d=(M_O)/(R)
Assumptions
The force lies in the plane and the moment axis is perpendicular to it.
The force is applied to a single rigid body, so it may be slid along its own line of action without changing the effect.
Position is measured in the same frame as the force, and angles are measured anticlockwise from the positive x axis.
Takes
Unit
Meaning
F_x
N
Horizontal component of an applied force.
F_y
N
Vertical component of an applied force.
x
mm
Horizontal position, measured from whatever origin the screen names — the left-hand end of a member, or the point a force acts through.
y
mm
Vertical position, measured from whatever origin the screen names — the centroidal axis when a stress is wanted, or the point a force acts through.
Gives
Unit
Meaning
R_resultant
N
Magnitude of the resultant of the force system.
theta_resultant
rad
Direction of the resultant of the force system.
d_line
mm
Perpendicular distance from the chosen point to the resultant's line of action.
M_about
N·mm
Moment of the force system about the chosen point.
Cases this screen covers without asking. Both sides of each of these are handled by the code, so there is no control for them:
single force, couple, balanced — These three outcomes look alike numerically near the transition; picking one silently hides a couple.
What must always be true here. Each of these is a test in the suite, not a remark:
The resultant of a force system is unchanged by the order in which the forces are combined.
Taking moments about any two different points gives the same line of action for the resultant.
If the resultant vanishes, the moment sum is the same about every point in the plane.
Adding a force parallel to the existing resultant changes its magnitude but not its direction.
Moving the moment centre along the resultant's line of action leaves the moment unchanged at zero.
Where it stops.
A force system that reduces to a couple has zero resultant but non-zero moment; the line of action is at infinity and must be reported as a couple, not as a force at a very large distance.
Solution method
Closed form throughout; there is nothing to iterate, and the result carries the precision of the arithmetic rather than of a tolerance.
Two details in the implementation are worth knowing because each avoids a failure that looks like a correct answer. The direction is taken with a two-argument arctangent rather than as the arctangent of a ratio: a force pointing straight up has no ratio to take, and a force pointing down and left has the same ratio as one pointing up and right. The quadrant survives only if both components are passed separately.
The moment is accumulated as a cross product of position and force — x times F_y minus y times F_x — rather than as a magnitude times a perpendicular distance found by inspection. The two are equivalent, but the second requires the reader to have found the perpendicular distance already, and finding it is the part that goes wrong.
The offset divides that moment by the resultant unconditionally: no test for a vanishing resultant runs first, because this screen's one-force input can only reach a zero resultant exactly (F_x = F_y = 0 typed directly), never by the near-cancelling sum that makes an exact-zero test unsafe for a general system. At that exact input the arithmetic itself returns an infinite offset and an undefined direction, which is what a reader sees rather than a diagnosed couple.
Limitations
The offset is the perpendicular distance from the origin, not a coordinate; moving the reference point moves the number without moving the line.
Equivalence is a statement about external effect only — a statically equivalent system produces different internal forces and different deflections, and this module says nothing about either.
Nothing here decides whether a body is in equilibrium; it reports the resultant and line of action of the one force entered, which is a different question.
Only a single force is entered here. Reducing several forces to one resultant, and the couple that can result when their component sums cancel, are real cases the kernel can express (couple_moment, reduces_to_a_couple) but this screen does not exercise, since it never sums more than one force's components.
Reading the result
The most common misreading, carried over from a textbook chapter that covers several forces at once, is to expect a zero resultant here to mean a couple. It cannot: with one force entered, F_x = F_y = 0 is simply no force at all, and its moment about the origin is zero too — there is no configuration of a single force that produces a couple's non-zero moment with a vanishing resultant. That case belongs to systems of two or more forces, which is a reduction this screen does not perform; see the limitations above.
The next is to compare offsets computed about different origins. The line of action is a property of the system; the offset is a property of the line and the origin together. Two correct calculations of the same system will report different offsets if they took moments about different points, and neither is wrong.
The third is subtler and worth stating because it recurs throughout the subject. Static equivalence is a statement about what a system does to a body from outside. Replacing a distributed load by its resultant leaves every reaction unchanged and changes the bending moment everywhere under the load. That is not an approximation that improves with care — the two systems are exactly equivalent externally and exactly different internally. Use the resultant to find reactions; never use it to find what happens inside the member.
Solve the reactions at every support of a planar beam or frame for any combination of loads.
Σ F_x=0, Σ F_y=0, Σ M_O=0
Basis
For a planar rigid body the conditions of equilibrium are three: the force components in two independent directions sum to zero, and the moments about any one point sum to zero. This screen never needs all three. It restricts itself to a single-span beam carrying transverse load only, so there is no horizontal component anywhere in the model and the third equation — horizontal equilibrium — is trivially satisfied by having nothing in it to balance. What remains is vertical equilibrium and one moment equation, which is exactly enough to find the reactions of the two support arrangements this screen offers.
Derivation
The beam is one of two shapes. Simply supported, it carries a pin at each end and two unknown vertical reactions. Cantilevered, it is built in at the left and carries one unknown vertical reaction plus one unknown fixing moment — still two unknowns, arrived at differently. The load is one of two shapes too: a single point load at a stated position, or a uniformly distributed load over the whole span. Neither loading has a horizontal component, so neither support arrangement is ever asked to supply a horizontal reaction.
For the simply supported case, taking moments about the left support isolates the right reaction directly — the total moment the load exerts about that point, divided by the span — and vertical equilibrium then gives the left reaction as whatever is left of the total load. This is the same moment-then-force-sum sequence a reader performs by hand, chosen so the intermediate quantity shown is the one a reader would check first.
For the cantilever, nothing needs isolating: the single support carries the entire load, so the vertical reaction is just the load's total, and the fixing moment is that load's moment about the support — a restatement of the same two equilibrium equations rather than a different method.
A distributed load enters both equations as its resultant and centroid — the total value integrated over the span, acting through the span's midpoint — which is legitimate here for the same reason it is legitimate in the previous module: reactions are an external effect, and the resultant is externally equivalent to the distribution it replaces. The bending moment inside the span, on the beam-diagrams screen one step on from here, is not externally equivalent to it and must use the distribution itself.
two supports: R_(right)=(M_(about left))/(L), R_(left)=W_(total)-R_(right)
The beam is a single span carrying transverse load only — no axial load and no horizontal reaction are modelled.
Supports are idealised — a pin carries no moment, and the built-in end of a cantilever carries no rotation.
Exactly one load is present at a time: a single point load, or a single uniformly distributed load over the whole span, never a combination of the two.
Takes
Unit
Meaning
L
mm
Length of the member along its own axis, support to support.
supports_type
—
The support arrangement — pinned both ends, fixed one end, propped cantilever, and so on.
load_type
—
The kind of load applied — point, uniform, linearly varying, or applied moment.
W
N
Total load on the span, whether it arrives as one force or spread out.
a
mm
Distance from the left-hand support to the point being described.
q
N/mm
Distributed load intensity — force per unit length along the member.
Gives
Unit
Meaning
R_vec
N
Reaction forces and moments at every restrained degree of freedom.
status_det
—
Whether the structure is a mechanism, statically determinate, or statically indeterminate.
Choices you have to make. The app shows these rather than picking one:
simply supported at both ends, cantilever, built in at the left — A cantilever of the same span under the same load carries four times the moment of a simply supported beam and deflects nine and a half times as far. Nothing on the screen says which one the numbers are for unless this does.
uniform over the whole span, a single point load at a — The same total load spread out and put at one place are different problems: the point load fixes the largest moment at a, the uniform load puts it where the shear crosses zero, and a is read only by one of them.
What must always be true here. Each of these is a test in the suite, not a remark:
The sum of all reaction components equals the sum of all applied load components, reversed in sign.
The moment of the reactions about any point balances the moment of the loads about the same point.
A load applied directly over a support is carried entirely by that support.
Moving a single point load toward one support increases that support's reaction and decreases the other.
Where it stops.
A structure with fewer reaction components than equilibrium equations is a mechanism and has no reaction solution; it must be reported as such, not solved approximately.
Solution method
Closed form throughout, and the same two equations regardless of which support arrangement or load shape is selected: supports_type picks between the pin pair and the cantilever, load_type picks between the point load and the uniform load, and both are read once to build the beam before the reactions are found.
Because this idealisation never models a horizontal reaction, it always has exactly two unknowns — the two vertical reactions of a simply supported beam, or the vertical reaction and fixing moment of a cantilever — against exactly two equilibrium equations that apply to it. Two against two is determinate for every combination this screen's own inputs can build; there is no arrangement of supports_type, load_type, W, a and q that produces a mechanism or a redundancy, so the degree of static indeterminacy shown is the constant that arithmetic actually gives rather than a per-case count. An earlier version of this screen computed it as a conditional whose two branches both reduced to the same number, reporting one degree of indeterminacy this idealisation can never have; the count is now the constant it always was underneath that conditional, made explicit.
Questions this screen cannot ask — three or more supports, a frame rather than a single span, a genuine redundancy or mechanism — belong to the determinacy and matrix-solve screens, which model the horizontal direction and the arrangement of members that this one deliberately leaves out.
Limitations
Single span only: three or more supports, or a beam that is part of a larger frame, need the determinacy and matrix-solve screens instead.
No horizontal load or horizontal reaction is modelled at all, so this screen cannot represent a support that resists sliding, only one that resists lifting.
Exactly one load is entered — a combination of a point load and a distributed load on the same span is not representable here.
The reactions are exact for the idealised supports, and idealised supports do not exist — a real pin has friction and a real built-in end is never perfectly rigid.
The degree of indeterminacy this screen reports is always zero, because its own inputs can never build anything else; it is not a general determinacy count and should not be read as one for a structure this screen cannot represent.
Reading the result
The reported degree of indeterminacy is always zero here, and that is a fact about what this screen can build rather than a verdict about beams in general. A real structure with three or more supports, or one that is part of a rigid frame, can be a mechanism or redundant in ways this screen's two-unknown model cannot represent at all — that question belongs to the determinacy screen, which counts members, joints and reactions for the structure actually drawn rather than assuming the always-determinate case this one is built around.
Reactions in a determinate structure do not depend on the material or the section, and this screen is a fast way to see that directly: change the modulus and the reactions do not move, because they come from equilibrium alone.
A negative reaction is not an error. It means the support is pulling rather than pushing — holding the beam down — which a real pin or built-in end can do but a real roller cannot. When a reaction comes out negative for a support that was meant to be a roller, the model has outrun the support it describes, and the answer is correct for a support that can pull and wrong for the one on site.
Error. This structure is a mechanism, or so close to one that it cannot be solved. Add restraint or a member.
Implemented by reactions, total_load, moment_of_loads_about, udl_resultant, udl_centroid.
Determinacy & Stability
Classify the model as a mechanism, statically determinate, or indeterminate, and say by how much.
truss: m+r-2j, frame: 3m+r-3n-c
Basis
Counting compares how many unknown forces a structure has against how many independent equilibrium equations are available to find them. The difference is the degree of static indeterminacy: negative is a mechanism, zero is determinate by count, positive is the number of redundant restraints.
Derivation
For a pin-jointed plane truss each joint supplies two equilibrium equations and each member carries one unknown axial force, with the support reactions adding their own unknowns. Comparing the two totals gives the truss count. A perfect frame — determinate and just rigid — therefore needs a member count fixed by the number of joints alone.
For a rigid-jointed plane frame the accounting changes on both sides. Each member carries three internal force components rather than one, and each node supplies three equilibrium equations rather than two. Internal releases such as a hinge remove one equation apiece. The frame count follows.
Both counts share a limitation that no amount of arithmetic removes. They compare totals, and totals cannot see arrangement. A structure with the right number of members can still have them in the wrong places — a redundant panel here, a mechanism there — and the count returns zero, which is why this module reports the count and the solver's verdict side by side rather than either alone.
truss: m+r-2j
frame: 3m+r-3n-c
perfect truss: m=2j-3
Assumptions
Truss members are pin-ended and carry axial force only.
Frame members are rigidly connected except where a release is declared.
The structure is planar; the three-dimensional counts differ and are out of scope.
Takes
Unit
Meaning
nodes
mm
Node coordinates of the model.
members
—
Which two nodes each member connects, and which section and material it uses.
supports
—
Which degrees of freedom are held, and any settlement imposed on them.
Gives
Unit
Meaning
status_det
—
Whether the structure is a mechanism, statically determinate, or statically indeterminate.
n_redundant
—
Degree of static indeterminacy — how many forces you would have to guess before statics could finish the job.
topology_ok
—
Whether the model is connected and restrained well enough to be solved at all.
mode_shape
—
The deflected shape the structure takes as it buckles.
Cases this screen covers without asking. Both sides of each of these are handled by the code, so there is no control for them:
mechanism, determinate, indeterminate — Indeterminate and mechanism differ only in the sign of the same count. Choosing one silently is the fastest way to hand a student a wrong answer.
What must always be true here. Each of these is a test in the suite, not a remark:
The count and the rank of the equilibrium matrix must agree; where they disagree the structure is critically formed and the rank governs.
Adding one member between two existing nodes raises the degree of indeterminacy by exactly one, or removes exactly one mechanism.
Removing any support component moves the count one step toward mechanism.
Where it stops.
A count of zero can still be a mechanism when members are collinear or concurrent; the rank test is the one that decides, and the count alone must never be reported as the answer.
Solution method
Integer arithmetic, and deliberately reported as a number rather than a verdict. A count of zero is not a certificate: it means the equations balance the unknowns, not that the structure stands. The screen therefore shows the count next to the result of actually attempting the solution, so the two can disagree in front of the reader.
For the frame count no source in the public-domain literature this project uses prints the counting formula, so it is stated here as the equilibrium argument it is — three equations per node against three unknowns per member — rather than attributed.
Limitations
Counting sees totals, not arrangement: a structure with a redundant panel and a mechanism elsewhere counts as determinate.
The count says nothing about geometric stability — concurrent or parallel reactions defeat it.
A determinate count does not imply the structure is well conditioned; near-mechanisms count as determinate and solve badly.
Reading the result
The classification vocabulary is worth stating exactly, because one of the works consulted while building this app contradicts its own figures on the point. Here a mechanism is deficient — too few members to be rigid, count negative. A redundant structure has more restraint than equilibrium requires, count positive. Determinate is the boundary, count zero.
Treat a zero count as permission to try statics, not as proof that statics will work. The count and the solver answer different questions, and this screen shows both because the interesting cases are the ones where they disagree. A count of zero with a solver that reports a mechanism means the members are in the wrong places. A count of zero with a solver that succeeds but reports poor conditioning means the arrangement is nearly wrong.
The degree of indeterminacy is worth reading as a cost as well as a property. It is the number of additional conditions that must come from compatibility rather than equilibrium — which is to say, the number of places where the answer starts depending on the stiffness of things rather than only on their arrangement. A determinate structure has reactions that a change of material cannot move; every redundancy is one more way the material can change the answer.
Implemented by determinacy_planar_truss, determinacy_planar_frame, perfect_truss_members, concurrency_measure.
Sections
Section Builder & Properties
Geometric properties of a rectangular, solid circular, or hollow circular section from its dimensions.
A=∫_A dA, I_x=∫_A y^2 dA, I_y=∫_A x^2 dA, J_(circle)=I_x+I_y
Basis
Every geometric property of a cross-section is a moment of its area about an axis: the zeroth moment is the area, the first locates the centroid, the second resists bending. Because these integrate over a region rather than over its material, Green's theorem converts each of them into a circuit of the boundary — and a boundary of straight edges integrates exactly, edge by edge. A polygon's properties are closed form, not approximations.
Derivation
Choose the two boundary functions so that the integrand collapses in turn to 1, to y squared, to x squared and to xy, and each area integral becomes a sum over the edges. Along a straight edge both coordinates are linear in the parameter, so each edge contributes a low-order polynomial that integrates in closed form. All four sums are weighted by the same cross term — the signed doubled area of the triangle the edge makes with the origin — and differ only in what it multiplies.
Those moments are about whatever origin the vertices were written in, so the last step shifts them to the section's own axes by subtracting the area times the square of the centroid offset. That is the parallel-axis rule run backwards: exact algebra performed in inexact arithmetic, and the only place in this module where precision is at stake.
Winding needs one decision, made here so no caller repeats it. The edge sum is signed — anticlockwise positive, clockwise negative — and the area takes its magnitude. The product of area is odd in the winding as well as in the coordinates, so its origin-form value is negated when the signed area is negative, while the centroid correction uses the magnitude. The consequence is that reversing the vertex order changes no reported number, which is a property test rather than a hope.
The rest is definitional: the section modulus is the second moment over the distance to a chosen fibre, so an unsymmetric section has two; the radius of gyration is the distance at which the whole area could sit and give the same second moment. The polar second moment of a circular annulus is the one relation here that is not a polygon sum.
The screen supplies one of three parametric presets: a rectangle, a solid circle or a concentric circular tube. The polygon relations are used internally for the rectangle; the circles use their exact closed forms.
The section is one homogeneous material, because these are properties of area alone and carry no modulus; a section of two materials must be transformed to one before it is entered.
x runs to the right and y runs up, and I_x integrates y squared — the second moment resisting bending about the horizontal axis, which is the opposite of the convention some finite-element literature attaches to that subscript.
The circular presets are concentric. An eccentric bore or a built-up section is not represented by these inputs.
Takes
Unit
Meaning
shape
—
Which supported parametric outline the calculation uses.
b
mm
Width of a rectangular part of the cross-section, measured across the bending axis.
h
mm
Height (depth) of a rectangular part of the cross-section, measured along the bending axis.
d
mm
Outside diameter of a circular section.
d_i
mm
Inside diameter of a hollow circular section.
Gives
Unit
Meaning
A
mm²
Cross-sectional area — the amount of material you would see if you sliced the member straight across.
x_c
mm
Horizontal position of the centroid, measured from the origin you picked.
y_c
mm
Vertical position of the centroid, measured from the origin you picked.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
I_y
mm⁴
Second moment of area about the vertical centroidal axis.
I_xy
mm⁴
Product of area — non-zero when the section is lopsided about its own axes, and the reason bending can push a beam sideways.
r_x
mm
Radius of gyration about the horizontal axis — the distance at which all the area could sit and give the same bending resistance.
r_y
mm
Radius of gyration about the vertical axis.
Z_t
mm³
Elastic section modulus for the top fibre — second moment of area divided by the distance to that fibre.
Z_b
mm³
Elastic section modulus for the bottom fibre.
J
mm⁴
Torsion constant — the section's resistance to twisting, equal to the polar second moment only for circular shapes.
Choices you have to make. The app shows these rather than picking one:
rectangle, solid circle, hollow circle — Each preset uses different dimensions and a different torsion relation. Choosing the outline must change the properties, not merely redraw the figure.
What must always be true here. Each of these is a test in the suite, not a remark:
The sum of the second moments about any two perpendicular centroidal axes is the same whichever pair you pick.
Shifting the reference origin changes the second moment by exactly the area times the shift squared.
Reversing the winding order of the polygon flips the sign of the area integral and nothing else, so the magnitude must be identical.
A hollow section with wall thickness approaching zero has both its area and its second moment approaching zero, in proportion to the wall; what approaches a finite limit is the second moment per unit area, which is the radius of gyration of a thin ring.
Translating the whole section leaves every centroidal second moment unchanged; only the arithmetic that finds it degrades, and that degradation is measured rather than assumed.
Section modulus, radius of gyration and the polar second moment follow from the area and the second moment by definition, so each has a value that can be written down without arithmetic.
Moving material away from the bending axis raises the second moment about it, faster than linearly.
Doubling every dimension of a section multiplies its area by four and its second moments by sixteen.
Where it stops.
A polygon with a repeated or self-intersecting edge has no well-defined area and must be rejected at input, not integrated.
Dividing by a zero lever arm or a zero width returns infinity, which is what the formula says and is also the signal that the input was not a section.
Solution method
Closed form, one pass over the edges per quantity. Nothing iterates and nothing is sampled.
The number worth carrying away concerns the centroidal shift. The kernel forms the second moment about the caller's origin and subtracts the area times the squared offset; for a section far from that origin the two terms are nearly equal and the answer is what survives. The relative error grows with the square of the offset over the section's own size, and it has been measured rather than assumed: on a 20 mm square the result is exact to 1.4e-16 at the origin, 1.5e-12 at an offset of 1e3, 1.2e-8 at 1e5 and 4.8e-3 at 1e6 — roughly two digits lost per decade of offset. A test asserts the loss is still there, so a rearrangement that quietly removed it would fail rather than pass. The remedy is to re-centre the polygon before calling, never to widen a tolerance.
The annulus is factored for the same reason in the other direction: a difference of fourth powers subtracts two nearly equal large numbers for any thin wall, while the factored form never constructs that difference.
Nothing raises. Fewer than three vertices, mismatched coordinate lists or a zero enclosed area return nan; a section modulus asked for a fibre on the neutral axis returns infinity, which is what the relation says and is also the signal that the input was not a section.
Limitations
A self-intersecting outline is not detected: the edge sum returns a number for a figure-of-eight, and that number is the difference of the two lobes rather than their sum.
The polar second moment equals the torsion constant only for a circular outline; used on an open shape it overstates torsional stiffness by orders of magnitude, and a slit tube is the standard demonstration.
Fillets, root radii, eccentric holes and rolled profiles are outside the three presets; the screen does not promise a user-drawn outline.
All three presets are symmetric about both displayed axes, so the product of area reported here is exactly zero. A lopsided section belongs on the principal-axes screen as entered properties rather than as a shape drawn here.
For the rectangle J is the Saint-Venant torsion constant from the non-circular closed form; for either circular preset it is the exact polar second moment. The active shape decides every output together.
These are properties of area, so nothing here knows about a load, a material or a stress.
Reading the result
Two section moduli are reported and the smaller governs. For a shape symmetric about the bending axis they are equal and readers stop looking; for a tee they are not, and quoting the larger overstates the moment the section can carry.
The centroid is reported in the frame the outline was entered in, so it moves when the outline moves. Every second moment beside it does not, being already about the section's own axes — which is why a computed second moment can be checked against a handbook and a computed centroid cannot. Before making that comparison, check which axis the handbook means by I_x: the two conventions differ by a swap, and a number alone cannot tell them apart.
A product of area of exactly zero is a claim about symmetry, not an artefact of rounding. It holds for every supported preset: the rectangle, solid circle and concentric tube are all symmetric about both displayed axes. A non-zero product belongs to the principal-axes screen, which accepts section properties directly.
Advisory. Every axis of this section is a principal axis, so the principal angle has no unique value.
The two axes about which the section bends without twisting sideways, and the circle that produces them.
I_(1,2)=(I_x+I_y)/(2)±√(((I_x-I_y)/(2))^2+I_(xy)^2), tan 2α_p=(-2I_(xy))/(I_x-I_y)
Basis
A second moment belongs to an axis, not to a section on its own. Rotate the reference axes and the three quantities describing the section transform as a symmetric second-rank tensor. There is one rotation at which the off-axis term vanishes, and the axes it produces are the principal ones: bend a member about a principal axis and it deflects in the plane of the applied moment; bend it about any other and it does not.
Derivation
Write the second moments about axes rotated anticlockwise by an angle. Both the axis values and the product of area become the same two ingredients in different combinations: a mean independent of the angle, and sinusoids in twice the angle whose amplitude is fixed by how lopsided the section is. Setting the transformed product of area to zero gives one condition with one solution per quarter turn.
Read as a locus, the transformed pair traces a circle as the angle sweeps: centre at the mean of the two axis values, radius the hypotenuse of half their difference and the product of area. The principal values are the two ends of a diameter, which is why the larger is never below either input and the smaller never above either. Zero radius means the circle has collapsed to a point and every axis of the section is principal.
Two quantities survive the rotation untouched, and both are checked. The trace is the one everyone knows. The determinant — the product of the axis values less the square of the product of area — matters more here: a sign error in the discriminant leaves the trace perfectly intact and moves the determinant, so a trace check alone would pass over exactly the mistake most easily made.
The angle is a two-argument arctangent of numerator and denominator separately, then halved. A ratio would discard the quadrant of the doubled angle, and halving a quadrant-less answer names whichever principal axis the ratio happened to land on. As written it always names the major axis: a section with its larger second moment about the vertical returns exactly a quarter turn rather than zero.
The three inputs are taken about one common origin, and for the answer to be the section's principal axes that origin must be its centroid.
Both axis values are second moments of a real area and so are positive; the relations still evaluate for other inputs, but the results are not a section's.
Angles are in radians, measured anticlockwise from the reference axes, and name an axis rather than a direction — an angle and that angle plus a half turn describe the same axis.
The section is prismatic and of one material: these are principal axes of area, and for a composite section they are the principal axes of the transformed section instead.
Takes
Unit
Meaning
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
I_y
mm⁴
Second moment of area about the vertical centroidal axis.
I_xy
mm⁴
Product of area — non-zero when the section is lopsided about its own axes, and the reason bending can push a beam sideways.
Gives
Unit
Meaning
I_1
mm⁴
Larger of the two principal second moments of area.
I_2
mm⁴
Smaller of the two principal second moments of area.
alpha_p
rad
Angle from the reference axes to the principal axes of the section.
What must always be true here. Each of these is a test in the suite, not a remark:
The sum of the two principal second moments equals the sum of the second moments about any perpendicular pair.
The product of area about the principal axes is zero.
The larger principal value is never smaller than either input second moment, and the smaller is never larger than either.
The principal angle approaches forty-five degrees as the two axis values approach each other.
Three angles can be read off without arithmetic: zero and a quarter turn when the section is already principal, and exactly forty-five degrees when the two second moments are equal.
Increasing the product of area at fixed axis values pushes the two principal values further apart.
Where it stops.
When the two second moments are equal and the product of area is zero, every axis is principal and the angle is genuinely undefined; the screen must say so rather than return a number.
Solution method
Closed form. The circle radius is a hypotenuse, the principal values are its centre plus and minus that radius, and the angle is a two-argument arctangent halved.
The degenerate case is handled by a separate question rather than by a guard buried inside the angle. When the circle collapses to a point the angle has no meaning, and the arctangent of two zeros is zero — a number, and a misleading one. So the kernel offers a predicate asking whether the radius has fallen below a tolerance times the mean second moment. Scaling by the mean makes the test dimensionless, so the verdict does not change when the same section is measured in millimetres rather than metres; the app uses a relative threshold of 1e-9 and raises an advisory saying every axis is principal. A section with no area answers no rather than yes, having no axes to be indeterminate about.
The angle function itself still returns zero there. That is deliberate: a kernel reports what the relation gives and does not decide what the reader should be told, which is the decision layer's job and is made once for both front ends rather than twice.
Limitations
The screen takes the three second moments as numbers and cannot check they were computed about a common centroidal origin; a set taken about an arbitrary origin yields a well-formed answer to a different question.
These are principal axes of area only — they say nothing about a material yielding at different stresses on the two faces, and nothing about a section built from two materials.
Which principal axis governs depends on the direction of the applied moment; this screen reports the axes rather than any stress.
The indeterminacy test is a threshold, and a section just outside it returns an angle that is precise arithmetic on an ill-conditioned input: the number is right, and the axis it names is barely distinguishable from its neighbours.
Reading the result
The commonest misreading is to assume the reported angle points at the stronger axis only when it is small. It always names the major axis. If the vertical axis value is the larger and the product of area is zero, the answer is exactly ninety degrees, not zero — the axes were already principal, and the major one is the vertical.
The second is to dismiss a small product of area. Its effect on the two principal values goes as the hypotenuse, so a product small against the difference of the axis values barely moves them. Its effect on the angle does not: when the two axis values are equal, the angle is exactly forty-five degrees for any non-zero product of area, however small. A nearly circular section therefore has principal axes that are strongly rotated and almost indistinguishable in value.
The check to run before trusting anything else is the trace: the two principal values must sum to the two inputs to the last few digits. If they do not, the inputs were not a consistent set about one origin.
Advisory. Every axis of this section is a principal axis, so the principal angle has no unique value.
Implemented by inertia_circle_radius, principal_inertia_major, principal_inertia_minor, principal_angle, principal_axes_are_indeterminate.
Shear Flow & Shear Centre
How shear travels around a thin-walled section, and the one point a load must pass through to avoid twist.
Transverse shear is carried because the bending stress changes along the beam. Cut a slice along a line parallel to the axis: the axial force on the piece beyond the cut differs between the slice's two faces, and the only thing that can balance that difference is shear on the cut itself. The working relation follows from that statement alone — no assumption about how shear strain is distributed is needed.
Derivation
On each face of a slice of length dx the axial force beyond the cut is the bending moment times the first moment of the area beyond it, over the second moment. The faces carry moments differing by dM, so the cut carries that difference; dividing by dx, and using the fact that the rate of change of moment is the shear force, gives the shear flow. Dividing again by the thickness at the cut gives the average shear stress.
That first moment is of the area lying beyond the cut, about the centroidal axis: the part of the section the shear has to drag along. It is largest at the centroidal axis and exactly zero at a free edge, where there is no area beyond to drag. The shear stress must therefore vanish at the extreme fibres, and a non-zero value there is an integration error rather than a result. For a rectangle it is a parabola in the level, so the stress is parabolic and peaks at mid-depth at exactly three halves of the average, whatever the proportions. Being independent of both dimensions makes that the cleanest single check on the whole derivation, so the kernel writes it out as its own relation and a test requires the two routes to agree.
The shear centre is the same integral asked a different question. In a channel the flange flow rises linearly from the tip, so each flange carries a resultant proportional to the square of the flange width; the two are equal, opposite and separated by the web depth, making a couple while the web carries the shear. A transverse load twists the member unless it acts at the offset where its own moment matches that couple — three flange widths squared over six flange widths plus the depth, a point behind the web and off the material altogether. Load a channel through its centroid and it twists; the point it does not twist about is not on the section.
The beam is prismatic and bends about a principal axis, so the bending stress used in the equilibrium argument is the linear one.
The material is homogeneous and linearly elastic; a section of two materials must be transformed before its first moment means anything.
The shear stress is taken as uniform across the thickness at the cut — a thin-wall statement, which is a good average in a narrow web and a poor one across a wide flange.
The shear-centre and warping relations are written for a thin-walled open channel, with the walls' own second moments about their own axes dropped.
The member is straight and the load applied slowly; nothing here covers curved or tapered members.
Takes
Unit
Meaning
V
N
Shear force at the section under consideration.
t
mm
Wall thickness of a thin part — a flange, a web, a tube wall, a plate.
b
mm
Width of a rectangular part of the cross-section, measured across the bending axis.
h
mm
Height (depth) of a rectangular part of the cross-section, measured along the bending axis.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
s
mm
Distance measured along the wall of a thin-walled section, from a chosen starting edge.
Gives
Unit
Meaning
Q
mm³
First moment of the area lying beyond the cut, about the centroidal axis — the part of the section the shear has to drag along.
q_flow
N/mm
Shear flow — force per unit length running along the wall of the section.
tau
MPa
Shear stress at the point under consideration.
e_sc
mm
Shear centre offset — the distance from the centroid to the point a transverse load must pass through if the member is not to twist.
C_w
mm⁶
Warping constant — the section's resistance to the axial stretching that accompanies twist in an open thin-walled shape.
What must always be true here. Each of these is a test in the suite, not a remark:
Shear flow entering any junction of walls equals the shear flow leaving it.
The shear flow integrated over the whole section equals the applied shear force.
For a section with an axis of symmetry the shear centre lies on that axis.
In a rectangle the peak shear stress is exactly three halves of the average, whatever the proportions -- the cleanest single check available on the whole shear derivation.
The general first-moment formula evaluated at the centroidal axis and the closed form for a rectangle are two routes to one number, and must return it.
Shear stress is largest at the centroidal axis for a solid section and falls to zero at the free edges.
Thinning the wall at fixed depth halves the shear flow and leaves the shear stress where it was, because this screen builds the section as a rectangle: the first moment falls with the wall just as fast as the divisor does. The peak stress rises in inverse proportion only on a section whose flanges hold the first moment up while the web thins, and this release does not build one.
Where it stops.
At a free edge the first moment beyond the cut is zero, so the shear flow must be exactly zero there and any non-zero value is an integration error.
Solution method
Closed form throughout. The level is measured from the centroidal axis, and a level outside the section returns nan rather than a negative first moment, which would read as a shear stress of the wrong sign. The flow returns nan for a non-positive second moment; the stress form returns infinity where the thickness goes to zero, which is what the relation says and is also the signal that the outline narrows to a point.
The channel's second moment printed beside the shear centre is deliberately the thin-walled one, each flange contributing only its area times the square of its lever arm. The dropped term is 3.4e-4 of the total for a 60 by 200 by 8 channel and falls with the square of the wall thickness. The two expressions must be written to the same assumption, because the shear-centre closed form is exact against the thin-walled second moment and only nearly so against the composite one.
Built-up profiles are represented as vertical rectangular layers. Their first moments and local widths produce both one-sided stresses at a width step, while two-point Gaussian integration is exact because the flow is quadratic within each layer and returns the applied shear force.
Both the shear centre and the warping constant are verified against their definitions rather than another closed form — the first by integrating the flange flow and taking moments about the web centreline, the second by the sectorial integral about that shear centre. A closed form checked against itself is one nobody has checked.
Limitations
The first moment is computed for a rectangle whose width is the entered thickness and whose depth is not entered at all — the screen carries only the shear force, the thickness, the second moment and the level. For a flanged section the area beyond a cut in the web includes the flanges, so pairing a flanged second moment with a rectangular first moment gives a shear stress that is too small.
The shear-centre and warping relations are the thin-walled channel's, and they return nan for inputs that are not a channel rather than detecting that the numbers describe some other shape.
The channel the shear centre and the warping constant are taken on is not described on this screen. Its flange width and web depth come from the screen's opening state and have no fields, so only the thickness moves them; the two are consistent with each other, and neither is a channel the reader chose. Both are the same section, so the pair can be trusted against each other rather than against anything the reader entered.
The stress reported is the average across the thickness at the cut, not the peak: across a wide flange the real distribution varies and this value is its mean.
The canon points a thin-wall advisory at this screen — the one that says the thin-walled relations lose accuracy once the width-to-thickness ratio of the thinnest element falls below five — and it cannot fire here. The ratio is formed from a width and a thickness, and this screen carries a thickness and no width, so the guard has nothing to judge and stays silent. It does fire on the non-circular torsion screen, which carries both. Judging whether the thin-wall idealisation is reasonable for the channel behind these numbers is the reader's, and the channel is not on this screen either.
Reading the result
The peak shear stress in a rectangle is three halves of the average, not the average: a reader who divides the shear force by the area is a third low, and that is the most common error on this screen.
The peak shear and the peak bending stress are never at the same place: shear peaks on the centroidal axis where the bending stress is zero, bending peaks at the extreme fibres where the shear stress is zero. A section checked only at its extreme fibre has not been checked for shear at all.
The shear-centre offset is a distance with a convention, not a coordinate: measured from the web centreline, away from the flanges. For a channel it is always less than the flange width, and it moves toward the web as the web deepens — a channel that is nearly all web has its shear centre on the web, nothing being left to make a couple with. Watching that happen means changing the flange width or the web depth, and this screen offers neither; the relation is on the torsional-buckling screen's inputs instead, where the offset is entered rather than computed.
The flow is per unit length and decides fastener spacing in a built-up beam; the stress is per unit area at a point. The thickness at the cut is what separates them.
Advisory. The thin-walled torsion formulas lose accuracy for stocky elements like this one.
Advisory. Two idealisations of the same b, h and t are on this screen at once. Q, q_flow and tau are the solid rectangle's, worked from the area beyond the cut. e_sc and C_w are a thin-walled channel's, and a channel's shear centre lies outside the section entirely -- which is the whole reason the quantity is taught, and not a number the rectangle above has.
In the elastic range the bending stress varies linearly across the depth, so at first yield only the extreme fibre has reached the yield stress and everything inside it is still below capacity. Raise the moment and the yielded zone spreads inward from both faces. In the limit — a material that yields at a fixed stress and keeps going, in a section detailed well enough to get there — every fibre is at yield and the section can carry no more.
Derivation
At full plasticity the stress is the yield stress in tension over one part of the section and in compression over the other, with nothing in between. Axial equilibrium requires the two forces to cancel, and with one yield stress on both sides that means the two areas must be equal: the fully plastic neutral axis is the equal-area axis.
This is the point worth slowing down on. The elastic neutral axis passes through the centroid, where the first moments balance; the plastic one splits equal areas. Those are different conditions and in general different places, coinciding only when the section is symmetric about the bending axis — every rectangle, every circle, every rolled I-section — so the distinction is invisible in exactly the cases most people learn it on.
The moment is the couple made by the two forces: the yield stress times half the area times the distance between the half-centroids. As a section property that is the sum of the first moments of the two halves about the equal-area axis — the plastic modulus — and the plastic moment is the yield stress times it. For a rectangle each half has its centroid a quarter of the depth from the axis, so the plastic modulus is width times depth squared over four; against the elastic six the ratio is exactly three halves, for any proportions. A solid round gives diameter cubed over six, and sixteen over three pi, 1.6977.
That pair of numbers is the whole content of the shape factor: it measures how much material sits near the neutral axis, contributing little elastically and full duty once plastic. A round has the most and the largest factor, a rectangle less, an I-section least at roughly 1.15. At the end of that progression it turns exact — with all the area at the extreme fibres, elastic and plastic moduli are the same expression and the factor is one. That limit, not a quoted rolled-section number, is what the tests anchor on.
The material is elastic-perfectly-plastic: one yield stress, no strain hardening, and the same value in tension and compression — an unequal pair moves the axis off the equal-area position.
The section can actually reach the fully plastic state, which needs enough ductility and enough restraint that no flange or web buckles locally and the member does not trip sideways first.
The moment acts alone: axial force and shear both shift the neutral axis and lower the plastic moment, and neither is included.
Bending is about a principal axis of the section, and the member is prismatic.
Residual stresses are ignored, which is exact for the plastic moment itself — they are self-equilibrating and change only where first yield occurs, not the fully plastic limit.
Takes
Unit
Meaning
shape
—
Which supported parametric outline the calculation uses.
b
mm
Width of a rectangular part of the cross-section, measured across the bending axis.
h
mm
Height (depth) of a rectangular part of the cross-section, measured along the bending axis.
d
mm
Outside diameter of a circular section.
sigma_y
MPa
Yield stress — where the material stops springing back.
Gives
Unit
Meaning
x_na
mm
Depth of the neutral axis below the compression face.
Z_p
mm³
Plastic section modulus — the first moment of the two equal areas about the equal-area axis.
f_shape
—
Shape factor — how much more moment the section carries once fully plastic than when it first yields.
M_p
N·mm
Plastic moment — the moment the section carries once every fibre has yielded.
Choices you have to make. The app shows these rather than picking one:
rectangle, solid circle — The plastic modulus and shape factor depend on where the area lies relative to the bending axis; a rectangle and a solid circle therefore have different reserves past first yield.
What must always be true here. Each of these is a test in the suite, not a remark:
The equal-area axis divides the section into two exactly equal areas.
For a section symmetric about the bending axis the equal-area axis and the centroidal axis coincide.
The shape factor is never less than one.
Concentrating area near the bending axis raises the shape factor.
The shape factor of a rectangle is larger than that of an I section of the same depth.
Where it stops.
A section made of disconnected parts can have an equal-area axis in a gap where no material exists. This release offers connected symmetric presets only, so it does not present a disconnected outline as though one of those answers applied.
Solution method
Closed form for the rectangle and the solid round, which are the shapes the kernel carries. Four relations — plastic modulus, equal-area axis, shape factor, plastic moment — each guarded: a non-positive width or depth returns nan, and a shape factor asked for with no elastic modulus returns nan rather than an infinity that would read as an enormous reserve.
A general polygon's equal-area axis is not a formula but a root to be found, and that search is not in this version. The kernel deliberately carries no polygon form of it, and a test asserts no such function exists — so adding the name without the search behind it fails rather than quietly shipping. The canon's edge case of a section in two disconnected parts, whose equal-area axis can fall in the gap where no material is, is honoured by the screen declining rather than by a relation returning a plausible number.
The printed shape factors checked against — three halves for a rectangle, 1.7 for a solid round — come from a NASA structures manual, a public-domain United States Government work. The high-precision layer carries sixteen over three pi to twenty figures alongside, so nothing is lost to the printed value's two.
Limitations
Only the rectangle and solid circle are offered on the screen; rolled and built-up sections have to be reduced to an equivalent one by hand, and their shape factors are commonly lower.
No interaction with axial force or shear is modelled, and both reduce the plastic moment of a real member.
Nothing here checks that the section can reach its plastic moment: a slender web or an unrestrained compression flange buckles first, and this module has no way to see that.
The shape factor is a section property, not a structural one — how much a whole structure gains past first yield depends on whether it can redistribute, which is a different question and a different screen.
This is not a design check: no partial factors, no code, and no allowance for the strain the fully plastic state actually demands.
Reading the result
The shape factor of a rectangle is exactly 1.5 for any width and any depth. If the screen shows anything else, the elastic modulus it was given was not that rectangle's — the fastest sanity check available here.
The plastic moment is a capacity of the section under an idealised material, not a design value: it says what the section could carry with every fibre at yield, not that the member will get there.
The equal-area axis is reported as a depth, and for a symmetric section it lands on the centroid — the case that hides its meaning. Carrying that habit to an unsymmetric section, and using the elastic centroid for a plastic calculation, is the standard error this quantity exists to prevent.
Across shapes the ordering is the useful part: whatever wastes the most material near the neutral axis elastically has the most left to give plastically. A round's 1.698 against a rectangle's 1.5 is that comparison, and an I-section's 1.15 or so is why the shape everyone actually uses gains least from being taken past first yield.
Implemented by plastic_modulus_rectangle, plastic_modulus_circle, shape_factor, plastic_moment, equal_area_axis_rectangle.
Stress & Strain
Axial Members
Stress, strain and stretch in a bar, including bars sharing a load and bars held against temperature change.
σ=P/A, ε=(σ)/(E), δ=(PL)/(AE), ε_(th)=α_T Δ T
Basis
A bar pulled along its own axis carries the load as a direct stress spread evenly over any section far enough from the ends. Strain follows from the stress by a linear law, and the extension is that strain accumulated over the length. Three relations, one quantity each; the rest of the module is what happens when two bars are put in series or in parallel with each other.
Derivation
Cut the bar and require the resultant of the stress on the cut face to equal the applied force. That gives the total, not the distribution. Taking the stress as uniform is an added assumption, and it is the one that fails first: uniformity comes from the bar being prismatic, the material homogeneous, and the cut being far from where the load was introduced.
A linear elastic material then gives the strain, and multiplying by the length gives the extension. Written out, the extension has each of the three quantities a designer can change appearing exactly once, which is why it is worth being its own relation rather than two calls.
Temperature enters as a strain a free bar simply takes up, carrying no stress for it. Stress appears only when the strain is prevented. Hold the bar so its total strain is zero and the elastic strain must cancel the thermal one exactly, so the stress is minus the modulus times the thermal strain. The minus sign is the whole content: a bar heated and prevented from growing goes into compression, not tension.
Two bars sharing a load divide it in one of two ways, decided only by how they are connected. In parallel the extensions are forced equal, so the forces divide in proportion to axial stiffness — area times modulus, not area and not strength. In series the force is common and the extensions add. The modular ratio, one modulus over another, is what lets a section of two materials be replaced by an equivalent area of a single one, and it is the same number that fixes the parallel split when the areas are equal.
σ = P/A, ε = (σ)/(E), δ = (PL)/(AE)
ε_(th) = α_T Δ T, σ_(restrained) = -E α_T Δ T
(P_1)/(P) = (A_1E_1)/(A_1E_1 + A_2E_2)
n = (E_1)/(E_2)
Assumptions
The section is far enough from the load introduction, and from any change of section, that the stress is uniform across it.
The material is homogeneous and linearly elastic over the range being used, so strain is proportional to stress.
The bar is straight and the load acts through the centroid; any eccentricity puts bending into the member, and nothing here sees it.
The area dividing the force is the undeformed one, which is an approximation rather than an identity.
Takes
Unit
Meaning
P
N
Axial force in the member — positive in tension unless the screen says otherwise.
A
mm²
Cross-sectional area — the amount of material you would see if you sliced the member straight across.
L
mm
Length of the member along its own axis, support to support.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
alpha_T
1/K
Coefficient of thermal expansion — fractional length change per degree.
DT
K
Temperature change from the state in which the member was stress-free.
Gives
Unit
Meaning
sigma
MPa
Direct stress — force per unit area acting perpendicular to the cut.
eps
—
Direct strain — fractional change in length.
delta
mm
Deflection — how far a point has moved from where it started.
What must always be true here. Each of these is a test in the suite, not a remark:
In bars sharing a load in parallel, the extensions are equal and the forces divide in proportion to axial stiffness.
In bars in series the force is common and the extensions add.
A fully restrained bar has zero net strain, so its thermal strain and its elastic strain must cancel exactly.
Doubling the length at fixed force and area doubles the extension.
Doubling the area at fixed force halves both stress and extension.
Where it stops.
As the area approaches zero the stress diverges; the input must be bounded away from zero rather than allowed to produce an infinite result.
Solution method
Closed form, one relation per function, nothing to iterate. The guards are the part worth knowing. Direct stress returns infinity at zero area rather than raising, because that is what the relation says and it is also the reason a section cannot narrow to nothing; a negative area returns not-a-number, since it was never a section. Extension returns not-a-number for a non-positive area or modulus, and the parallel split returns it when the two stiffnesses sum to zero.
The screen adds the free thermal strain to the elastic strain, and the free thermal extension to the elastic one, so the extension reported is what an unrestrained bar does when it is both loaded and heated. The restrained case is a separate relation because it answers a different question: not how far the bar moves, but what it costs to stop it.
Limitations
Nothing here checks buckling: a bar in compression is reported at its full stress whether or not it is slender enough to have already gone sideways.
The uniform-stress result is wrong near a hole, a notch, a fillet or the load itself, where the peak can be several times the average.
Linear elasticity is assumed rather than verified; past the proportional limit the real extension exceeds the reported one and nothing signals the crossing.
The two-bar relations cover two members sharing a load, not a general composite section with its own neutral axis.
Reading the result
Stress and extension answer different questions and respond differently to the same change, which is why both are shown. Stress decides the material; extension decides the detailing — the clearance, the gap, the sag. Doubling the area halves both; doubling the length moves only the extension.
Two things go wrong more often than the rest. The first is the sign of the thermal case: a restrained bar that is heated goes into compression, because the stress opposes the strain that was prevented. The second is dividing a shared load by area. Two bars of equal area whose moduli differ by a factor of fifteen take fifteen sixteenths and one sixteenth of the load, not half each, and the ratio of the two answers is the modular ratio itself.
Units are newtons and millimetres throughout, so a modulus entered as 210 GPa is 210 000 in the numbers the relations see. A conversion applied twice is the quietest error in this subject: the answer is a thousand times out, which reads as a modelling mistake rather than an arithmetic one.
Implemented by axial_stress, axial_strain, elongation, thermal_strain, thermal_stress_restrained, modular_ratio, parallel_share.
Plane Stress & Mohr's Circle
Turn a state of stress to any angle you like, and read the principal values straight off the circle.
σ_(1,2)=(σ_x+σ_y)/(2)±√(((σ_x-σ_y)/(2))^2+τ_(xy)^2), tan 2θ_p=(2τ_(xy))/(σ_x-σ_y)
Basis
The state of stress at a point is one object, not a set of numbers attached to whichever axes happened to be drawn. Choose different axes and the components change, in a way fixed entirely by equilibrium of a wedge cut at the new angle. Traced out as the angle sweeps, the pair of components moves round a circle, and every result on this screen is a coordinate on that circle.
Derivation
Cut a wedge whose inclined face has its normal at an angle from the x axis. The three faces have areas in a fixed ratio, so resolving forces along and across the inclined face gives two equations with no material property in them at all. The direct stress on the plane is the mean of the two direct stresses, plus half their difference times the cosine of twice the angle, plus the shear times the sine of twice the angle; the shear on the same plane follows in the same form.
Square both and add. The angle disappears and what is left is the equation of a circle: centred on the direct-stress axis at the mean stress, with radius the hypotenuse of half the difference of the direct stresses and the shear. That one line of algebra is the whole construction. The principal stresses are the two ends of the horizontal diameter, mean plus and minus radius. The largest shear is the radius. The principal planes are where the vertical coordinate vanishes, which is where the tangent of twice the angle equals twice the shear over the difference of the direct stresses.
The factor of two causes the most trouble and is not an artefact. Angles on the circle are twice angles in the material, because every component returns to itself after a rotation of a hundred and eighty degrees rather than three hundred and sixty. Two checkable consequences follow. Planes at right angles in the material sit diametrically opposite on the circle, so their direct stresses sum to the constant diameter. And the plane of maximum shear is a quarter turn round the circle from the principal point — forty-five degrees in the material, always, for every state.
(σ_θ - c)^2 + τ_θ^2 = R^2, c = (σ_x+σ_y)/(2), R = √(((σ_x-σ_y)/(2))^2 + τ_(xy)^2)
σ_(1,2) = c ± R, τ_(max) = R
θ_p = ½atan2(2τ_(xy), σ_x-σ_y)
Assumptions
The state is plane stress: the third principal stress is zero, which is true on a free surface and not in general elsewhere.
The state is taken at a point; nothing here knows where in the body it came from or whether that body is in equilibrium.
The material is continuous at the scale of the point, so one stress tensor describes it.
The shear on the two perpendicular faces is equal, which is moment equilibrium of the element and is assumed rather than entered.
Takes
Unit
Meaning
sigma_x
MPa
Direct stress in the horizontal direction.
sigma_y_stress
MPa
Direct stress in the vertical direction.
tau_xy
MPa
Shear stress on the faces of the element you are looking at.
theta_cut
rad
Angle of the plane you want the stress components on, measured from the reference axes.
Gives
Unit
Meaning
sigma_1
MPa
Largest principal stress — the biggest direct stress on any plane through the point, with no shear on that plane.
sigma_2
MPa
Second principal stress.
tau_max
MPa
Largest shear stress on any plane through the point.
theta_p
rad
Angle from the reference axes to the planes on which the principal stresses act.
sigma_theta
MPa
Direct stress on the plane you chose, pushing at right angles to it.
tau_theta
MPa
Shear stress on the plane you chose, sliding along it.
What must always be true here. Each of these is a test in the suite, not a remark:
The stress on the chosen plane lies on the circle: its distance from the centre is the circle's radius, at every angle.
The sum of the two direct stresses is the same on every pair of perpendicular planes.
The largest shear stress equals half the difference of the principal stresses.
The planes of maximum shear sit forty-five degrees from the principal planes, always.
Equal direct stresses with no shear give a circle of zero radius: every plane sees the same stress and none sees shear.
Raising the shear component at fixed direct stresses spreads the principal stresses apart symmetrically.
Where it stops.
Hydrostatic plane stress collapses the circle to a point and the principal directions become undefined; the screen must say so instead of returning an arbitrary angle.
Solution method
Closed form. Two choices in the code each remove a failure a reader would otherwise meet. The radius is taken as a hypotenuse rather than the square root of a sum of squares, so it neither overflows nor loses accuracy when one component dwarfs the other. The principal angle is a halved two-argument arctangent, not the arctangent of a ratio: the ratio form divides by zero for pure shear — the state a reader is most likely to type — and discards the quadrant, so it cannot tell the major plane from the minor one.
Degeneracy is tested rather than divided through. When the circle collapses to a point every plane is principal and the angle means nothing. The test compares the radius against a tolerance times the mean stress, so it carries no unit and no scale, and answers yes for a state of nothing at all without dividing by a zero mean. A second guard, measured against the sixty-digit reference, fires when the two direct stresses agree to within a millionth of their size: the principal values stay accurate there and the direction does not, and a reader told only one number would trust both.
Limitations
The reported maximum shear is the largest shear in the plane. With the third principal stress zero and both in-plane principals of the same sign, the largest shear at the point is half the larger principal value, on a plane out of the sheet, and it exceeds the number reported here.
Near a hydrostatic state the principal direction is poorly determined however carefully it is computed, and no rewriting of the formula recovers it — the information has already gone from the inputs.
Transformation says nothing about safety; whether the state yields is a separate question with more than one answer.
Plane stress is assumed, so applying this to an interior point with a non-zero third stress gives two correct in-plane values inside a picture that is missing a dimension.
Reading the result
The conventions decide whether the answer is the one you want, and this module fixes them once. Shear is positive when it acts on the positive-x face in the positive y direction; angles are anticlockwise from the x axis; and a plane at a given angle is the plane whose normal points that way, not the plane itself. That last one is the trap. Some finite-element output names the plane rather than its normal, and reading the principal angle the other way puts the answer a right angle out — where it still looks plausible, because a right angle out is the other principal plane, a real plane with a real stress on it.
Circle-drawing conventions plot shear downwards; this module returns numbers rather than a drawing, so the sign of the shear on a rotated plane is whatever the transformation gives.
Two checks cost nothing and catch most errors. The two principal stresses sum to the two entered direct stresses, on every state, and the maximum shear is exactly half their difference. If either fails the transformation is wrong, and no amount of checking the inputs will find it.
Advisory. This state is the same on every plane, so there is no unique principal direction.
Advisory. The two direct stresses are nearly equal, so the principal directions are poorly determined however carefully they are computed. The principal values themselves remain accurate.
Implemented by stress_circle_centre, stress_circle_radius, stress_transform_normal, stress_transform_shear, principal_stress_major, principal_stress_minor, principal_stress_angle, stress_state_is_hydrostatic.
Strain Rosette
Work back from three gauge readings to the full strain state, then to the stresses that caused it.
A strain gauge measures one number: the direct strain along its own axis. A plane strain state has three independent components. Three gauges pointing three different ways therefore give three equations in three unknowns, and a rosette is nothing more than that determined linear system. The closed forms below are that system already solved for the two standard layouts; the general route solves the same equations for every other independent set of angles.
Derivation
Strain transforms with the same shape as stress, with one difference that accounts for most of the errors made with rosettes: the shear term carries a half. The direct strain in a direction is the mean of the two direct strains, plus half their difference times the cosine of twice the angle, plus half the engineering shear strain times the sine of twice the angle. The engineering shear strain is the total change of a right angle; the tensor component is half of it. Every relation here takes and returns the engineering value, and the halving happens inside, once, where a test can see it.
For a rectangular rosette at zero, forty-five and ninety degrees the algebra collapses. The first gauge lies on the x axis and the third on the y axis, so each reading is a direct strain outright; at forty-five degrees the cosine term vanishes and the sine term is one, so the middle reading is the mean of the two direct strains plus half the shear, and the shear is twice that reading minus the other two. That factor of two is the whole difficulty of rosettes. For a delta rosette only the first gauge lands on an axis, and solving the remaining pair gives the forms below. Both standard layouts are written out separately, and the general inverse is checked independently, so a fixture can hit all three routes.
The principal strains come off the same circle as the principal stresses, with half the engineering shear in place of the shear stress. The principal direction is where the tangent of twice the angle is the engineering shear over the difference of the direct strains — with no half in it, because the halves in numerator and denominator cancel. That asymmetry is real: the magnitude relation carries the half, the angle relation does not, and tidying one to match the other breaks it. Finally, for an isotropic material the principal strain and principal stress directions coincide, so each principal stress follows from the pair of principal strains by the plane-stress law.
The gauge is on a free surface, so the state is plane stress and the strain normal to the surface is a consequence rather than an input.
The material is isotropic and linearly elastic, which is what makes the principal strain directions and the principal stress directions the same directions.
The gauge directions are exactly the layout's nominal ones, and the three gauge factors are equal.
The readings have already been corrected for transverse sensitivity and thermal output; this module treats them as pure mechanical strain.
Takes
Unit
Meaning
eps_a
—
Strain read by the first gauge of a rosette.
eps_b
—
Strain read by the second gauge of a rosette.
eps_c
—
Strain read by the third gauge of a rosette.
theta_a
rad
Direction of the first rosette gauge, from the reference axis.
theta_b
rad
Direction of the second rosette gauge.
theta_c
rad
Direction of the third rosette gauge.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
nu
—
Poisson's ratio — how much a material narrows sideways when you stretch it.
Gives
Unit
Meaning
eps_1
—
Largest principal strain.
eps_2
—
Smallest principal strain.
gamma
—
Shear strain — the change in angle between two lines that started perpendicular.
theta_p
rad
Angle from the reference axes to the planes on which the principal stresses act.
sigma_1
MPa
Largest principal stress — the biggest direct stress on any plane through the point, with no shear on that plane.
sigma_2
MPa
Second principal stress.
Cases this screen covers without asking. Both sides of each of these are handled by the code, so there is no control for them:
rectangular 0/45/90, delta 0/60/120, arbitrary angles — The first two use their closed forms; every other nonsingular three-angle layout uses the general three-equation inverse.
What must always be true here. Each of these is a test in the suite, not a remark:
The sum of the direct strains is the same on every perpendicular pair of directions.
Feeding the recovered strain state back through the transformation must reproduce all three gauge readings.
For an equal-angle rosette the sum of the three readings is one and a half times the sum of the principal strains.
Three equal readings mean equal biaxial strain and no shear, whatever the gauge directions.
Where it stops.
Two gauges at the same angle make the system singular; the input must be rejected rather than least-squares fitted into a meaningless answer.
Solution method
Closed form for both standard layouts, with nothing to invert numerically: the inversion was done once, algebraically.
Which of the two runs is decided by the three gauge angles, and this is the part of the screen most recently repaired. The angles are read, the spacings between them are compared against the two layouts the kernel has closed forms for, and the matching reduction is used; the relation printed beside every reading names which one ran, "rectangular rosette" or "delta rosette". The comparison is made on the spacings rather than on the absolute angles — the second gauge forty-five degrees from the first and the third ninety, or sixty and a hundred and twenty — so a rosette glued on at a slant is still recognised as the rosette it is. A gauge is allowed a thousandth of a radian either way, about a twentieth of a degree, which is tighter than anyone can glue a gauge and looser than the rounding in a typed decimal. Three angles that match neither layout are the canon's third case. The three direction equations are inverted directly; no least-squares fit is needed because three independent readings determine exactly three strain components. The relation beside each result names this route "general rosette".
Until recently nothing read the angles at all. Every rosette was reduced with the rectangular closed form whatever the reader had typed, with the typed angles still on screen beside the answer, and both closed forms already in the kernel. The size of that is easy to state on the state the screen opens on: the same three readings of 3.0e-4, 1.5e-4 and −1.0e-4 reduce to a major principal strain of 3.062e-4 and an engineering shear strain of 1.000e-4 as a rectangular rosette, and to 3.500e-4 and 2.887e-4 as a delta one. A reader with a delta gauge was being shown a major principal strain an eighth below the truth, a shear strain about a third of it, and a principal direction of 0.122 radians against 0.333 — all of it silent, and none of it distinguishable from the right answer by anything on the screen.
The canon records the layout as an explicit branch and marks two gauges at the same angle as singular. A duplicate direction is the same equation written twice, so the inverse returns no result instead of inventing an underdetermined state. The branch has no picker, and should not have one: the rosette this is, is the three angles and nothing else, so a selector beside them could only be set to disagree with them, and a reader who typed a delta layout and then chose "rectangular" would be handed an answer belonging to neither. The angles are the control, and the relation beside each reading is how the screen reports which way it read them.
The test guarding the whole module is a round trip. A known strain state is pushed forward through the transformation at the three gauge angles to make readings, and the reduction is then asked to recover a state it was never given. That is the only construction which catches a factor of two shared by both directions — and the invariant that the direct strains sum to a constant does not catch it, because halving the shear leaves that sum untouched.
Limitations
Rectangular and delta layouts use their closed forms; every other nonsingular three-angle layout uses the exact three-equation inverse. Duplicate or linearly dependent directions cannot determine the full state and return no result.
The layout is recognised from the angles alone. Three readings taken on a delta gauge but entered against rectangular angles are reduced as rectangular, correctly for the angles given and wrongly for the gauge, and nothing in the numbers can reveal it.
The stresses are only as good as the elastic constants: the strains are measured, but the stresses are the modulus times them, so an error in the modulus passes through at full size.
A gauge averages over its grid length, so a steep strain gradient beneath it — near a hole or a weld toe — is smoothed away rather than reported.
The public-domain manuals this project searched contain no strain rosette at all, in any spelling, so there is no independent second source for this reduction; it is anchored on the round trip and on the invariants instead of on a printed answer.
Reading the result
Two conventions decide whether the answer is right, and they fail differently. The first is engineering against tensor shear strain. Halving the engineering value before it reaches the circle gives a circle of exactly half the correct radius: the principal strains come out too close together, the state looks milder than it is, and the sum of the direct strains is still correct, so the cheapest invariant is blind to it. Regenerating the middle gauge reading is what exposes it.
The second is the direction the principal angle names, which is the plane's normal, measured anticlockwise from the first gauge. The magnitudes do not depend on that choice; the angle does, and reading it the other way reflects the answer about the gauge axis.
Instruments report microstrain: 450 microstrain is 450 millionths here, and the bare number gives principal stresses a million times too large. And three equal readings mean equal biaxial strain with no shear, whatever the gauge directions were — a state with no principal direction at all, which the screen says rather than returning an arbitrary angle.
Read the relation beside each value to see which reduction ran. A rectangular or delta spacing uses its recognisable closed form; every other independent spacing is labelled as a general rosette. Duplicate directions return no result because the missing component cannot be inferred from the readings.
Advisory. This state is the same on every plane, so there is no unique principal direction.
Advisory. The two direct stresses are nearly equal, so the principal directions are poorly determined however carefully they are computed. The principal values themselves remain accurate.
Advisory. The three gauge angles are inverted directly. Duplicate or otherwise linearly dependent directions cannot determine all three strain components and return no result.
Give any two isotropic constants and get the other two, plus the plane stress and plane strain matrices.
G=(E)/(2(1+ν)), K_b=(E)/(3(1-2ν))
Basis
An isotropic linearly elastic solid has exactly two independent elastic constants. Every other modulus is an algebraic combination of any two of them. Isotropy does all the work here: the general linear elastic solid needs twenty-one constants, and the single requirement that no direction be distinguishable from any other collapses that to two.
Derivation
Start from the isotropic law: a direct stress along one axis produces a strain along it equal to the stress over the modulus, and a contraction across it equal to the lateral contraction ratio times that strain. Superposing three such states gives the three-dimensional law, and everything below is that law at one particular state.
For the bulk modulus, apply the same stress in all three directions. Each direction gets its own extension less two lateral contractions, so the volumetric strain is three times the stress times one minus twice the ratio, over the modulus. Dividing pressure by that gives the bulk modulus. At a ratio of exactly one half the volumetric strain is zero for any pressure at all: the material is incompressible and the bulk modulus unbounded — an edge of the elastic model, not a failure of arithmetic.
For the shear modulus, take pure shear, which is equal tension and compression on planes at forty-five degrees. Compute the direct strain along the tension direction from those two stresses and relate it to the change of the right angle: the result is the modulus over twice one plus the ratio. It is unbounded at a ratio of minus one, and the two poles bracket the admissible range in which both moduli stay positive.
Both inverses are written out as relations of their own rather than rearranged at the call site, so a round trip through any pair is a test rather than a comment. The plane-stress relation belongs here for the same reason: invert the two-dimensional law with no stress through the thickness and the factor of one over one minus the ratio squared appears. That factor is the lateral restraint, and it is why a plate held in its own plane is stiffer in this sense than a bar.
G = (E)/(2(1+ν)), K = (E)/(3(1-2ν))
ν = (E)/(2G) - 1, E = 2G(1+ν)
σ_(along) = (E(ε_(along) + ν ε_(across)))/(1-ν^2)
-1 < ν < ½
Assumptions
The material is isotropic; a rolled, drawn, extruded or laid-up material is not, and two constants cannot describe it.
The material is linearly elastic over the range in use, and nothing here knows where the yield point is.
The material is homogeneous at the scale of the part, so one set of constants stands for all of it.
The four values describe one material at one temperature; nothing here interpolates between temperatures or between alloys.
Takes
Unit
Meaning
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
nu
—
Poisson's ratio — how much a material narrows sideways when you stretch it.
G
MPa
Shear modulus — how much shear stress it takes to produce a given angular distortion.
given_pair
—
Which two elastic constants you are supplying; the other two are worked out from them.
Gives
Unit
Meaning
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
nu
—
Poisson's ratio — how much a material narrows sideways when you stretch it.
G
MPa
Shear modulus — how much shear stress it takes to produce a given angular distortion.
K_bulk
MPa
Bulk modulus — how much all-round pressure it takes to produce a given volume change.
Choices you have to make. The app shows these rather than picking one:
E and nu, E and G, G and nu — An isotropic material has two independent constants and four common names for them, and which two you were handed depends on how the material was measured: a tensile test gives E and nu, a torsion test gives G. Every pair fixes the other two exactly, so there is no approximation in the choice -- but there is no way to guess it either, and a screen that assumed one silently would ignore whichever boxes the reader actually filled in.
What must always be true here. Each of these is a test in the suite, not a remark:
Whichever two constants you start from, the other two come out the same.
Converting a full round trip through any pair returns the original values.
The shear modulus is always smaller than the tensile modulus for a positive lateral contraction ratio.
As the ratio of lateral to axial strain approaches one half the bulk modulus diverges: the material becomes incompressible.
Where it stops.
A lateral contraction ratio of exactly one half makes the bulk modulus infinite, and a value of minus one makes the shear modulus infinite; both are edges of physical validity and must be flagged, not computed through.
Solution method
Closed form. Both moduli return infinity where their denominator is exactly zero rather than raising, so a contraction ratio of one half puts an infinity symbol on the screen with the canon's own sentence beside it — an answer, not an error.
Conditioning is the real subject. One minus twice the contraction ratio is not an ill-conditioned formula; it is a subtraction performed on the input. At a ratio of 0.4999999 its condition number is about five million, so roughly seven digits are gone before any division happens, and no rewriting recovers them — unlike a cancellation inside a formula, where regrouping can. The exact difference was lost when the ratio became a double.
Two things follow from admitting that. The canon warns once one minus twice the ratio drops below a thousandth, saying the accuracy of the bulk modulus is set by how precisely the ratio is known and not by the arithmetic. And the tolerance for that case is derived rather than chosen: machine epsilon times the condition number, near a billionth, against a measured disagreement near thirty trillionths.
Limitations
Two constants fix the other two only for an isotropic material; feeding in a measured modulus, shear modulus and contraction ratio for anything anisotropic will not close, and this module cannot say which of the three to distrust.
Admissibility is not enforced in the relations themselves: a contraction ratio outside the range from minus one to one half returns a negative modulus rather than a complaint, and only the domain declared on the input keeps a reader inside it.
A contraction ratio measured on a real specimen carries two significant figures at best; this module will still return a shear modulus to four, and the extra figures are arithmetic rather than knowledge.
The plane-stress relation assumes no stress through the thickness, so applying it to a thick section under lateral restraint understates the stress.
Reading the result
The quickest sanity check is the ratio of the shear modulus to the tensile one. For ordinary metals the contraction ratio sits between about a quarter and about a third, which puts the shear modulus between roughly thirty-seven and forty per cent of the tensile modulus. A pair that puts it above one half implies a negative contraction ratio, and the input is far likelier to be wrong than the material to be auxetic.
This module has an independent check worth naming, public domain and freely quotable. MIL-HDBK-5J prints, for a drawn aluminium alloy tube, a tensile modulus, a compressive modulus, a shear modulus and a contraction ratio, and prints elsewhere the relation tying them together. Feeding its own four numbers into its own relation reproduces the shear modulus to within 0.4 per cent and the contraction ratio to within 1.5 per cent — both inside the two significant figures the table carries, and both recorded as a disagreement so the size of the gap stays on the record. That row is the only one in this project's independent-source set which asks whether four measured numbers satisfy a physical relation, rather than whether a second source computed something correctly. If it turns red, look at the table before the code.
Warning. This material is close to incompressible, so the bulk modulus is the ratio of two numbers that nearly cancel. Its accuracy is limited by how precisely the contraction ratio is known, not by the arithmetic.
Implemented by shear_modulus, bulk_modulus, poisson_from_modulus_and_shear, modulus_from_shear_and_poisson, stress_from_strain_plane_stress.
Yield Criteria
Compare a stress state against four different pictures of failure, and see how close each says you are.
A yield criterion is a surface in principal stress space. It reduces three numbers to one yes-or-no, and how they are combined is a modelling choice, not a fact about the material. Two dominate for ductile metals: yield begins when the distortion energy reaches its value at yield in simple tension, or when the largest shear stress does. They agree exactly in tension and disagree by a fixed ratio in shear.
Derivation
Both rest on one experimental observation: a ductile metal does not yield under hydrostatic pressure. Squeeze it equally from every side and it gets smaller, not weaker. So a criterion must ignore the mean stress and depend only on the part of the state that distorts.
The maximum-shear criterion follows at once. The largest shear stress at a point is half the difference of the largest and smallest principal stress, which in simple tension at yield is half the yield stress. So the criterion is that the extreme principal stresses differ by the yield stress, and the code takes maximum minus minimum rather than assuming an ordering — which is what makes unsorted input safe.
The distortion-energy criterion splits the state into a mean part and a deviatoric part and takes the strain energy stored in the latter. That energy is proportional to the sum of the squared differences of the principal stresses, so setting it equal to its value in simple tension gives the square root of half that sum. Written entirely in differences, as the code writes it, hydrostatic invariance is exact: adding five hundred to all three changes the last bit, not the answer.
Where they disagree can be computed once and remembered. Pure shear has principal stresses of plus the shear, minus the shear, and zero: maximum shear gives twice the shear, distortion energy the square root of three times it. The ratio is exactly two over the square root of three, about 1.155, for every shear stress, and the two coincide only when two of the three principal stresses are equal — which covers every uniaxial and every equal-biaxial state and nothing else. Two further criteria cover materials that pair describes badly: one which parts rather than slides is governed by the largest principal stress in magnitude, and one with different strengths each way becomes a utilisation ratio.
pure shear: σ_(eq)^T = 2τ, σ_(eq)^(vM) = √3 τ, ratio = (2)/(√3)
(σ_1)/(σ_t) - (σ_3)/(σ_c) = 1 (different strengths each way)
n = (σ_y)/(|σ_(eq)|)
Assumptions
The three values entered are principal stresses; nothing sorts them into a physical order and nothing checks that they are principal rather than components on some arbitrary frame.
For the two shear-based criteria the material is ductile and isotropic, and yields at the same stress in tension as in compression.
The loading is monotonic and static: no cycling, no rate effect, no creep and no temperature history.
Yield is the limit being tested, and yield is not failure — a ductile part goes on carrying load well past first yield.
Takes
Unit
Meaning
sigma_1
MPa
Largest principal stress — the biggest direct stress on any plane through the point, with no shear on that plane.
sigma_2
MPa
Second principal stress.
sigma_3
MPa
Smallest principal stress.
sigma_y
MPa
Yield stress — where the material stops springing back.
sigma_yc
MPa
Compressive strength — how much the material takes in compression, which for stone, concrete and cast iron is several times what it takes in tension.
criterion
—
Which failure criterion is being applied.
Gives
Unit
Meaning
sigma_eq
MPa
Equivalent stress — the single number a failure criterion compares against the yield stress.
FoS
—
Factor of safety — how much bigger the resistance is than the demand.
Choices you have to make. The app shows these rather than picking one:
maximum shear, distortion energy, maximum normal stress, Mohr-Coulomb — These disagree by up to fifteen per cent in shear-dominated states. Showing one number without naming the criterion hides that spread.
What must always be true here. Each of these is a test in the suite, not a remark:
Under pure hydrostatic stress the distortion-energy and maximum-shear measures are both exactly zero.
For uniaxial tension every criterion reduces to the applied stress itself.
The maximum-shear measure is never smaller than the distortion-energy measure for the same state.
In pure shear the maximum-shear criterion predicts yield about fifteen per cent earlier than distortion energy.
Adding equal amounts to all three principal stresses leaves both shear-based criteria unchanged.
Where it stops.
A zero yield stress makes the factor of safety undefined; the input must be positive.
Solution method
Closed form throughout, with no iteration. The choice of criterion is an explicit branch the reader makes rather than a default the screen picks, and that is the decision this module turns on: four numbers that can differ by fifteen per cent, reported as one without saying which, hide exactly the thing worth seeing. The factor of safety returns infinity at zero demand — an unloaded member, not an error — and divides by the magnitude of the equivalent stress, so a compressive demand still gives a positive factor.
There is no independent second source here: the public-domain manuals this project searched print both criteria and never a worked number for either. What stands in its place is two ratios needing no arithmetic — exactly one in uniaxial tension, exactly two over the square root of three in pure shear — which beat any single printed case, since a constant error in either moves one.
Limitations
Both shear-based criteria are for ductile metals; applied to cast iron, concrete or a composite they predict yield where the material has already broken, or the reverse.
Nothing here describes what happens after yield — no hardening, no plastic strain, no redistribution and no collapse load.
Fatigue is outside the scope entirely: a state comfortably inside every surface here will still fail if it is applied a million times.
Residual stress from welding, forming or heat treatment is not included, and it is in the part before any load is applied.
A factor of safety inherits the error of the criterion it came from, so quoting three figures of it from a yield stress known to two is arithmetic rather than knowledge.
Reading the result
Which criterion is conservative has a definite answer: the maximum-shear one, everywhere. It never returns less than the distortion-energy measure for the same state, and returns up to about 15.5 per cent more. A design passing maximum shear passes distortion energy; the reverse does not follow. So the two are interchangeable only when the margin is wider than that gap, and the states where the gap is widest — a shaft in torsion, a bolt, a web panel — are the ones people size here. In pure shear they put yield at one half and at 0.577 of the yield stress, which for a solid shaft moves the diameter by five per cent, since the stress goes as its cube.
The equivalent stress is a comparison number, not a stress anywhere: nothing in the part is at that value, on any plane. Reading it as one is the commonest misuse, and it matters because uniform hydrostatic compression at five hundred megapascals gives exactly zero by both shear criteria — the correct answer, the whole content of the criterion, and it reads like a fault. The factor of safety, likewise, is against first yield at the point entered: not against collapse, not fracture, and not the load being larger than assumed.
Implemented by von_mises, tresca, maximum_normal, mohr_coulomb, factor_of_safety.
Thin-Walled Pressure Vessel
Hoop and axial stress in a pressurised cylinder or sphere, combined with any torque and end load.
A shell thin enough that the stress may be taken as uniform through its wall carries internal pressure by membrane stress alone, with no bending anywhere. The membrane stresses follow from equilibrium of a cut piece and nothing else — no modulus, no contraction ratio, no compatibility condition. For the same geometry and pressure, these stresses are identical in steel and in rubber.
Derivation
Cut a length of cylinder along a plane through its axis and ask what holds the two halves together. The pressure acts on the projected area, diameter times length — projected, because the components at right angles to the cut cancel around the curve — and two wall sections resist it. That gives the hoop stress as pressure times diameter over twice the thickness.
Now cut across instead. The pressure acts on the end area, a full circle, and the wall resists over a thin annulus, giving the longitudinal stress as pressure times diameter over four times the thickness — exactly half the hoop stress. This is why a pressurised tube splits along its length rather than around it: the crack parallel to the axis is the one the larger stress pulls open. A sphere has no distinguished direction, so any cut through its centre repeats the transverse case and the membrane stress is the same in every direction — half the cylinder's hoop stress for the same diameter and wall, which is the entire argument for spherical or hemispherical ends.
Add a torque and the two membrane directions stop being principal directions. A closed circular tube carries torque as a shear flow uniform round the wall, so the state there is two direct stresses and a shear — exactly what the stress circle was built for, and the app feeds all three into the same principal relations the plane-stress screen uses. With no torque the shear is zero and the hoop and axial directions come back as the principal directions — the check before trusting the rest.
The wall is thin enough that the stress is uniform through it; the canon puts the reminder at a diameter-to-thickness ratio of twenty.
The point is far from ends, joints, nozzles, saddles and changes of thickness — a membrane solution carries no bending, and every one of those introduces some.
The cylinder is closed at both ends, since the longitudinal stress comes entirely from pressure acting on them; an open tube in a press has hoop stress and no longitudinal stress at all.
The pressure entered is the difference across the wall, not the absolute internal pressure.
The tube is a closed circular section for the torsion part; a slit tube or any non-circular outline has a torsion constant nothing like the polar second moment.
Takes
Unit
Meaning
p
MPa
Internal pressure in a vessel.
d
mm
Outside diameter of a circular section.
t
mm
Wall thickness of a thin part — a flange, a web, a tube wall, a plate.
T
N·mm
Torque carried by the member.
P
N
Axial force in the member — positive in tension unless the screen says otherwise.
vessel_shape
—
Which vessel this is: a cylinder, whose hoop stress is twice its axial one, or a sphere, whose two membrane stresses are equal and half the cylinder's hoop.
Gives
Unit
Meaning
sigma_hoop
MPa
Hoop stress — the stress running around the circumference of a pressure vessel wall.
sigma_long
MPa
Longitudinal stress — the stress running along the axis of a pressure vessel.
tau
MPa
Shear stress at the point under consideration.
sigma_1
MPa
Largest principal stress — the biggest direct stress on any plane through the point, with no shear on that plane.
sigma_2
MPa
Second principal stress.
tau_max
MPa
Largest shear stress on any plane through the point.
Choices you have to make. The app shows these rather than picking one:
cylinder, sphere — The two differ by a factor of two in hoop stress; a silent default would be wrong half the time.
What must always be true here. Each of these is a test in the suite, not a remark:
Under internal pressure alone, with no end load, the hoop stress in a closed cylinder is exactly twice the longitudinal stress.
In a sphere the two membrane stresses are equal.
With no torque the hoop and longitudinal directions are the principal directions.
Halving the wall thickness doubles both membrane stresses.
Adding torque rotates the principal directions away from the vessel axis and raises the maximum shear.
Where it stops.
The thin-wall assumption fails once the diameter to thickness ratio drops below about twenty; below that the screen must warn that the membrane result understates the inner-surface stress.
Solution method
Closed form, guarded on thickness: a non-positive wall returns not-a-number rather than raising.
The shear is where the code does something the displayed formula does not say. Rather than evaluating the thin-limit expression, the app builds the exact polar second moment of a circular annulus whose bore is the entered diameter and whose outside is that diameter plus two walls, and takes the shear at the outside radius. So the entered diameter is the bore, and the shear reported is the exact hollow-shaft value — right on a thick tube too, converging on the thin-limit formula as the wall goes to zero. That polar moment is computed in factored form rather than as a difference of fourth powers, which for any thin wall subtracts two nearly equal large numbers: at a wall of one part in a thousand the direct form loses about three digits.
The sphere is a control on the screen, and picking it changes the model rather than applying a factor. On a sphere both membrane stresses become the single membrane value, which is exactly the cylinder's longitudinal stress, so what the reader sees is the hoop stress halving while the longitudinal stress stays where it was — the entire argument for spherical heads, visible in two rows. On the state the screen opens on, a 1200 mm bore with an 8 mm wall at 1.5 MPa, the cylinder gives 112.5 MPa hoop and 56.25 MPa longitudinal, and the sphere gives 56.25 MPa in both directions. The principal stresses and the maximum shear follow, because all three are computed from whichever pair of membrane stresses the choice produced.
That the choice exists is recent, and the shape of the defect is worth recording because everything except the wiring was already in place. The canon had declared the branch since the specification was written and carries an invariant for each side of it — the cylinder's hoop is twice its longitudinal, the sphere's two membrane stresses are equal — and a public-domain second-source fixture covers the hemispherical head. None of it reached a screen: every vessel was answered as a cylinder, which for a sphere is twice the truth, in the direction that flatters the design, with nothing on screen to say a choice had been made.
The diameter-to-thickness ratio is still not among the outputs, so a reader who wants the number forms it from the two inputs. It is now computed behind the screen for one purpose: the advisory that fires below a ratio of about twenty, where the membrane result begins to understate the stress at the inner surface. That advisory could not fire at all until recently — the guard was looked up by the canon's own phrase for the ratio while the only caller handed over a dictionary keyed by symbol, so the two never met, and a vessel with a ratio of five sat silently under a guard watching for anything below twenty.
Limitations
Membrane only, so this is wrong precisely where vessels actually fail — at discontinuities, where local bending can be several times the membrane stress.
Compressive membrane stress from external pressure is reported at full value, and a thin shell under external pressure buckles long before it yields; nothing here checks for that.
The membrane result understates the stress at the inner surface: at a diameter-to-thickness ratio of twenty the understatement is about five per cent, and it grows quickly below that.
This is not a design check. Pressure vessel design is governed by national codes with their own allowable stresses, joint efficiencies, corrosion allowances and inspection requirements, and none of them is applied anywhere in this app.
The torsion result assumes the wall is unbroken all the way round; a longitudinal slit destroys the shear flow, and the stiffness with it.
The two shapes offered are the closed cylinder and the sphere. A hemispherical head on a cylindrical shell is two different walls meeting at a discontinuity, and evaluating each separately says nothing about the bending at the junction, which is where such vessels are actually designed.
The torsion result is the cylinder's whether or not the sphere is selected; a sphere has no axis for a torque to be applied about, and the row is left showing what the same tube would carry.
The diameter-to-thickness ratio the whole membrane result rests on is not among this screen's outputs, so the reader has to form it from the two inputs rather than read it. It is computed behind the screen, but only to decide whether the advisory below a ratio of twenty should appear.
Reading the result
Two identities are exact in the code and cost nothing to check. Hoop stress is exactly twice longitudinal stress for a closed cylinder. And a sphere of the same diameter and wall carries exactly half the cylinder's hoop stress, which the screen now shows directly: switch the shape and watch the hoop value fall onto the longitudinal one while that one does not move. Both are invariants in the canon and tests in the suite, so the screen is showing something that is checked rather than something that merely looks tidy.
Check which shape is selected before quoting either number. The two differ by a factor of two and both look entirely reasonable, and the relation printed beside each membrane stress names the one that produced it. A head of a different wall thickness from its shell is two evaluations rather than one, and the entry above says why that is still not the whole story.
Which diameter is entered matters more than it looks. The app takes the bore and builds the outside as the bore plus two walls, so entering an outside diameter instead raises every reported stress by roughly twice the thickness over the diameter — ten per cent at a ratio of twenty, negligible at two hundred — and nothing tells the app which arrived.
The independent public-domain check here can be named. A worked sample in the Air Force Flight Dynamics Laboratory's Stress Analysis Manual, AFFDL-TR-69-42, takes a cylinder with hemispherical heads and prints twelve thousand psi hoop, six thousand psi meridional, and ten thousand psi in the head; this app reproduces all three. The head line carries a lesson: its printed working divides by twice the cylinder wall, giving six thousand, while the printed answer of ten thousand needs the head's own thinner wall. Value right, working wrong — recorded as an agreement carrying a printing fault rather than forced into agree or dispute.
Advisory. Below a diameter to thickness ratio of about twenty the membrane result understates the stress at the inner surface.
Cut a beam anywhere and the piece you keep must still be in equilibrium. What holds it there is whatever the discarded piece was doing to it: an axial force, a shear force, a bending moment, a torque. A diagram is one of those plotted against position. Because the same argument applies at every cut the four are not independent — differentiating the equilibrium of a thin slice ties load, shear and moment together, and it is those two derivatives, not the cuts, that make the diagrams drawable rather than merely computable.
Derivation
Take a slice of length dx. Vertical equilibrium says the shear leaving differs from the shear entering by the load on the slice, so the derivative of shear is minus the load intensity. Moment equilibrium about one face says the derivative of moment is the shear, the load's own moment on the slice being second order. Integrating gives the two rules a reader draws with: the change in shear between two sections is the area under the load, and the change in moment is the area under the shear.
Discrete loads make those integrals awkward, and the Macaulay bracket removes the awkwardness. It is zero to the left of its station and an ordinary power to the right, so one expression covers the whole span: a beam with five loads has one moment function rather than six pieces matched at their joins, and integrating a bracket raises its power exactly as an ordinary term does.
The signs are a convention and nothing more. Here x runs from the left end, downward loads are positive, shear is the resultant of everything left of the cut taken positive upwards, and moment is sagging positive. Nothing measurable changes if all four are flipped; what changes is whether two numbers from two sources can be compared. Reference works do not all choose the same way, which is why the convention is stated on the screen rather than assumed.
One relation deserves stating on its own: why the shear's zero locates the largest moment. Since the derivative of moment is the shear, the moment is stationary exactly where the shear vanishes — but only where the shear is continuous. At a point load the shear jumps across zero without ever equalling it, the moment has a corner rather than a stationary point, and the peak sits at the load. A search for a stationary point there finds nothing; one that differentiates across the jump finds the jump. Both are treated as candidates.
(dV)/(dx)=-q(x), (dM)/(dx)=V(x)
⟨ x-a⟩^n=0 (x<a), ⟨ x-a⟩^n=(x-a)^n (x≥ a)
M(x)=Σ_i C_i ⟨ x-a_i⟩^(n_i)
M(x_2)-M(x_1)=∫_(x_1)^(x_2)V dx
Δ V=-W at a point load, Δ M=-M_0 at a couple
Assumptions
The member is straight, prismatic and loaded in one plane, and its supports do not move.
Equilibrium is written on the undeflected shape, so the lever arms are the ones the beam had before it bent.
The arrangement is statically determinate — two simple supports, one built-in end, or the fixed-hinge-roller Gerber preset — so the reactions follow from statics alone and no material property enters.
Self-weight is not added anywhere; it appears only if it is entered as a load.
Every load is one of the kinds the screen offers, and a load of any other kind is rejected rather than quietly dropped.
Takes
Unit
Meaning
L
mm
Length of the member along its own axis, support to support.
supports_type
—
The support arrangement — pinned both ends, fixed one end, propped cantilever, and so on.
load_type
—
The kind of load applied — point, uniform, linearly varying, or applied moment.
W
N
Total load on the span, whether it arrives as one force or spread out.
q
N/mm
Distributed load intensity — force per unit length along the member.
a
mm
Distance from the left-hand support to the point being described.
release
—
Which member ends are released so they carry no moment.
Gives
Unit
Meaning
diagram_N
N
Axial force along the member.
diagram_V
N
Shear force along the member.
diagram_M
N·mm
Bending moment along the member.
diagram_T
N·mm
Torque along the member.
M_max
N·mm
Largest bending moment anywhere along the member.
x_contra
mm
Positions along the member where the bending moment passes through zero.
Choices you have to make. The app shows these rather than picking one:
simply supported at both ends, cantilever, built in at the left — A cantilever of the same span under the same load carries four times the moment of a simply supported beam and deflects nine and a half times as far. Nothing on the screen says which one the numbers are for unless this does.
uniform over the whole span, a single point load at a — The same total load spread out and put at one place are different problems: the point load fixes the largest moment at a, the uniform load puts it where the shear crosses zero, and a is read only by one of them.
continuous member with the selected end supports, Gerber beam: fixed left, roller right, midspan internal hinge — An internal hinge forces its bending moment to zero. The released preset also supplies the fixed left end and right roller needed to keep the beam stable; inserting the same hinge into a pin-pin beam would make a mechanism rather than a solvable beam.
Cases this screen covers without asking. Both sides of each of these are handled by the code, so there is no control for them:
where the shear passes through zero, at a load, where the shear jumps across zero — Both happen and they are different questions. Under distributed load the shear crosses zero and the moment has a stationary point. Under point loads alone the shear jumps across zero, there is no stationary point anywhere, and the largest moment sits at the load. A search for a stationary point finds nothing on the second kind of beam, and differentiating across the jump finds the jump.
What must always be true here. Each of these is a test in the suite, not a remark:
The shear diagram jumps by exactly the size of each point load, and the moment diagram jumps by exactly the size of each applied couple.
The area under the shear diagram between two sections equals the change in moment between them.
The moment is zero at a free end, at a simple end support, and at every internal hinge.
Under uniform load the moment diagram is parabolic and the shear diagram is straight.
Moving a point load toward midspan increases the maximum moment on a simply supported beam.
Where it stops.
The largest moment sits where the shear passes through zero, but on a beam with a point load the shear crosses zero by jumping rather than by passing through it; the search must treat the jump as a candidate and never differentiate across it.
Solution method
The kernel answers one narrow question — what does this one load do at this one station — and decides nothing. The composition layer sums those contributions after finding the reactions, and returns not-a-number for two coincident supports, which is a mechanism and not a beam. Both one-sided values at a discontinuity come from the same code path: the left-hand value is evaluated at the next representable number below the station.
Extremes come from a candidate list, not from differentiation: the stations where a diagram can change character, the shear zeros, and both one-sided moments wherever they differ. Shear zeros are found by bisection, eighty halvings, segment by segment, with segments split at the interior sign change of any linearly varying load so the shear is monotone within each. Bisection rather than interpolation, because under a triangular load the shear is quadratic and the moment cubic: a linear crossing once put the largest moment a third of a span out of place.
The internal-release choice is a stable Gerber preset: fixed at the left, roller supported at the right, with a hinge at midspan. Moments of the right-hand loads about the hinge give the roller reaction; applying that reaction to the full member gives the same shear and moment diagrams and makes the hinge moment zero by construction. The fixed end is essential: adding a hinge to the pin-pin arrangement would create a mechanism, not another solvable diagram.
Contraflexure splits the segments at the shear zeros as well, and that is not an optimisation. Within one segment the moment can rise through zero and fall back, so a sign check at the two ends sees the same sign at both and reports nothing — which is what a beam with an overhang at each end does, and the first version returned an empty list for it. An empty list looks like an answer.
Limitations
Only determinate arrangements are drawn; a continuous or propped beam without the Gerber release has reactions that statics cannot supply, and belongs to the classical or matrix screens.
The diagrams are first-order: no axial force is fed back into the moment, so a member carrying significant compression is understated here.
Where a diagram jumps, a single value at that station does not exist, and any consumer of one value has made a choice this layer refuses to make silently.
The largest sagging and the largest hogging moment are both reported because which of them governs depends on the material, which this layer does not know.
A moment of zero at a free end or a simple support is a boundary condition, not a point of contraflexure, and is deliberately not labelled as one.
This screen builds its beam from support arrangement, load kind and release selectors: simply supported or cantilever while continuous, or the fixed-hinge-roller Gerber preset when released, carrying a single uniformly distributed load or a single point load. The composition layer beneath it can sum any number of loads on a beam with overhangs, but this screen has no way to enter a second load.
Reading the result
Read the sign convention before the numbers. Sagging positive is a choice, not a fact about the beam, and a moment carried in from elsewhere has to be checked against it first.
Do not assume the largest moment sits where the shear crosses zero. On a beam carrying only point loads there is no shear zero anywhere: the shear steps across zero at the load, and that is where the peak is. Both the largest sagging and the largest hogging value are reported with their positions, and a beam with an overhang generally has both.
A zero of the moment at the end of the beam is the support condition, not a point of contraflexure. One independent check costs nothing: the change in moment between two sections equals the area under the shear diagram between them, which uses the shear rather than the loads, so the two disagree if either is wrong.
Advisory. This model ignores shear deformation, so a stubby member will read stiffer than it really is.
Plane sections remain plane. If a cross-section stays flat as the beam bends, the axial strain of a fibre is proportional to its distance from the one surface that does not change length, and for a linear elastic material the stress follows. Two integrals over the section then fix everything: requiring no net axial force places the neutral axis at the centroid, and requiring the internal moment to match the applied one fixes the constant of proportionality. Every restriction on the flexure formula is a restriction on one of those two sentences.
Derivation
Bend a straight beam to a radius. A fibre at distance y from the unstrained surface stretches by y over that radius, so its stress is the modulus times that. The axial resultant is the first moment of area about the surface, scaled; setting it to zero forces the first moment to vanish, and the only axis about which it does is the one through the centroid. The internal moment is the second moment of area, scaled the same way. Eliminating the radius between the two gives the stress relation and the curvature relation at once — the expression this screen prints as a stress is the one the deflection screens integrate. Folding the distance to the extreme fibre into the section property gives the section modulus, which is what a section table lists; its inverse, the moment of resistance, is the relation the whole of elastic beam design is written in.
Bending about two axes superposes term by term, for one specific reason: both terms are linear in position measured in the same neutral plane. It holds only once the axes really are principal, that is, once the product of area vanishes. Applied about axes that are not, it drops the coupling term and understates the stress.
The neutral axis is where the trouble is. For an inclined moment the neutral axis is not perpendicular to the moment vector: it rotates further than the moment does, toward the weak axis, by a factor equal to the ratio of the two second moments, and the two coincide only when those are equal. What follows surprises people the first time — the section bends out of the plane it is loaded in, and the peak stress sits at the point furthest from the actual neutral axis, which is not in general the extreme fibre of the reference axes. Reporting the extreme fibre instead is the standard way to understate a stress and feel confident doing it.
(σ)/(y)=(M)/(I_x)=E/R
Z=(I_x)/(c), σ=M/Z, M_R=σ Z
κ=1/R=(M)/(EI_x)
tanβ=(I_x)/(I_y)tanα
Assumptions
Plane sections remain plane and normal to the axis: the member is slender and shear deformation is neglected, which fails for a short deep beam whose sections warp.
The material is linear elastic, homogeneous, and behaves the same in tension and compression up to the stress reached.
The beam is straight before loading and prismatic through the region of interest; a sharply curved bar has its neutral axis away from the centroid and needs a different relation.
Bending is the only action considered: any shear stress present is superposed from the shear screen rather than accounted for here.
The reference axes are the principal axes of the section, because the screen takes the two second moments but no product of area.
The section is symmetric about the vertical axis, because the screen takes one lateral fibre distance and uses it on both sides; a channel or an unequal-flange section has two different lateral distances and only the larger of them is honoured here.
Takes
Unit
Meaning
M_x
N·mm
Bending moment about the horizontal axis.
M_y
N·mm
Bending moment about the vertical axis.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
I_y
mm⁴
Second moment of area about the vertical centroidal axis.
c_t
mm
Distance from the centroid to the top fibre of the section.
c_b
mm
Distance from the centroid to the bottom fibre of the section.
c_z
mm
Distance from the centroid to the extreme fibre in the second cross-section direction — the one the sideways moment bends about.
Gives
Unit
Meaning
sigma_max
MPa
Largest direct stress anywhere in the section.
sigma_min
MPa
Smallest direct stress anywhere in the section, negative where the section is in compression.
beta_na
rad
Angle from the reference axes to the neutral axis under the applied moment — the line across the section where the bending stress is zero.
kappa
1/mm
Curvature — how sharply the member is bending, one over the radius of the bent shape.
Cases this screen covers without asking. Both sides of each of these are handled by the code, so there is no control for them:
about a principal axis, about a non-principal axis — The second case moves the neutral axis and the point of peak stress. Defaulting to the first silently understates the stress.
What must always be true here. Each of these is a test in the suite, not a remark:
The direct force on the section from bending alone integrates to zero.
The stress is zero on the neutral axis and varies linearly with distance from it.
For a section symmetric about the bending axis the top and bottom peak stresses are equal and opposite.
Doubling the moment doubles every stress in the section.
For a fixed moment, moving material away from the neutral axis lowers the peak stress.
Where it stops.
When bending is about a non-principal axis the neutral axis is not perpendicular to the moment vector; reporting the peak stress at the extreme fibre of the reference axes is then wrong, and the extreme point must be found on the actual neutral axis.
Solution method
Closed form throughout, with the degenerate cases decided rather than left to the arithmetic. Dividing by the second moment of area returns not-a-number for a section with no bending stiffness; dividing by the section modulus returns infinity for a vanishing modulus, which is a section with nothing at its extreme fibre — a real answer rather than a failure. The neutral-axis angle is taken with a two-argument arctangent of the two products rather than as a ratio of tangents, so a moment acting along one axis is a value rather than a division by zero, and the quadrant survives.
Distance is measured upwards from the neutral axis and tension is positive everywhere in this package, so a sagging moment puts the fibres above the axis into compression and they come back negative. The screen therefore reports the bottom-fibre stress as the maximum and the top-fibre stress as the minimum: a pairing correct for a sagging moment, and the wrong thing to read as largest-and-smallest in magnitude. The curvature output uses the same relation with the reader's global modulus, and is the identical quantity the deflection screens integrate rather than a second one.
The biaxial relation is what the screen evaluates, and the extreme is found by scanning rather than by assumption. Three fibre distances are taken — c_t above the neutral axis, c_b below it, and c_z to either side — and the superposed relation is evaluated at all four corners they define. The largest of the four is reported as sigma_max and the smallest as sigma_min. Scanning matters because which corner governs depends on the signs of both moments: reverse M_y and the governing corner moves to the diagonally opposite one, so a rule of thumb picked on one sign is wrong on the other. Four evaluations cost nothing and cannot be got wrong by a sign.
The size of what that fixes is worth stating, because this screen used to report the strong-axis answer under the biaxial formula. On the opening section — a 150 by 300 joist, I_x = 3.375e8 mm⁴, I_y = 8.4375e7 mm⁴, c_t = c_b = 150 mm, c_z = 75 mm — a moment of 4.5e7 N·mm about the horizontal axis alone gives ±20.0 MPa. Adding an equal moment about the vertical axis gives ±60.0 MPa, and doubling that moment gives ±100.0 MPa, while the neutral axis swings from zero through 1.326 to 1.446 radians. Reporting 20.0 MPa in all three states is a five-fold understatement at the third of them, in the unsafe direction, and with nothing on the screen to say so. The distance the second term needs — c_z — is now an input, which is what the fix consisted of.
Degeneracy is decided rather than left to the arithmetic. A non-positive second moment about either axis makes the corner relation return not-a-number, and the largest of a list containing one is whichever value happened to be first. So if any corner is not a number both stresses are reported as dashes, with the canon's own boundary sentence printed beside them: an input that is not a section has no peak stress, and saying so is the honest answer rather than returning a number picked by list order.
Limitations
The biaxial relation is correct only when the reference axes are the principal ones; for an angle or a channel, take the principal values from the section screen first and enter those. The screen cannot detect that they are not: it takes I_x and I_y and no product of area, so it has nothing to test the claim against.
One lateral fibre distance is taken and applied to both sides of the section. A section with different distances to its two lateral extremes — a channel, an unequal-flange girder — is scanned at the wrong corner on one side unless the larger distance is entered, which then overstates the other side.
The corner scan finds the extreme of the four corners, not the extreme of the outline. For a section whose extreme point is not a corner of the bounding rectangle — a circle, a rolled section with a fillet — the true peak lies between the corners scanned and can be a little below the value reported; the error is conservative but real.
Nothing here checks yield. Past the elastic limit the distribution stops being linear and the formula returns a stress the material is not carrying.
The answer is local to the section described: it says nothing about where along the member the worst section is.
Stress concentrations at holes, notches, welds and abrupt changes of section are outside the formula entirely, and are where beams actually fail.
Residual stresses from rolling or welding are not included, and in a stocky member they can be a large fraction of the yield stress before any load is applied.
Reading the result
The two stress outputs are a ranking rather than a pair of positions: sigma_max is the algebraically largest of the four corners and sigma_min the smallest. That is not the same as largest and smallest in magnitude — under a hogging moment on a symmetric section sigma_min is the larger number to a designer, because it is the compressive one. Read the sign first, then the size. Which corner each value came from is not printed, and for a section with unequal fibre distances that is worth working out before quoting either.
For a section not symmetric about the bending axis the two distances to the extreme fibres differ, and so do the two section moduli. Which governs depends on the sign of the moment, so a member whose moment reverses along the span has to be checked at both faces and at both signs. Checking the larger modulus only is a mistake that survives every arithmetic check.
The neutral-axis angle is worth a look even when it seems irrelevant. A tall thin section under a moment a few degrees off its strong axis develops a neutral axis tens of degrees away, and a stress much larger than the strong-axis calculation suggests. Entering a small M_y on the opening section and watching beta_na swing while the stresses climb is the demonstration; the two move together, and the stress moves faster than the angle looks like it should.
The canon declares a choice between bending about a principal axis and bending about one that is not, and this screen offers no control for it. That is not the screen resolving the choice quietly: only the first case ships, and the screen says which case it is in on the row it governs — the relation printed beside beta_na reads "neutral_axis_angle, reference axes taken as principal". The input set is what fixes it, since a screen that takes no product of inertia has been handed principal axes by construction. A reader whose section is lopsided finds its principal values on the principal-axes screen first and enters those.
Implemented by flexure_stress, flexure_stress_from_modulus, moment_of_resistance, curvature, flexure_stress_biaxial, neutral_axis_angle, section_modulus.
Transverse Shear Stress
How shear stress varies through the depth, and how far apart the fasteners of a built-up beam can go.
Where the bending moment varies along a beam, the direct stresses on the two faces of a thin slice are unequal, so the part of the slice beyond any level carries a net longitudinal force it cannot balance by itself. It is held by shear running along the cut that separates it from the rest, and by the complementary property of shear stress the longitudinal and transverse values at a point are equal. So the transverse shear stress in a beam is deduced from the variation of the bending stress, never measured independently of it.
Derivation
Isolate the part of a slice of length dx lying beyond a chosen level. The direct force on its left face is the moment times the first moment of that area about the neutral axis, divided by the second moment; on the right face the moment is larger by dM. The difference has nowhere to go but the cut at the base of the piece, so the force per unit length along that cut is the shear force times the first moment over the second moment. That is the shear flow, and it is what the fasteners or the glue line of a built-up beam have to carry. Dividing it by the width of the cut gives the stress.
Two consequences fall out of the shape of the first moment. At the extreme fibres the isolated area is nothing, so the first moment is zero and the shear stress vanishes top and bottom — which it must, since a free surface can carry no complementary shear. The first moment is largest at the neutral axis, so that is where the stress peaks; for a rectangle the distribution is a parabola and the peak is exactly three halves of the average, independent of the proportions.
The division by the width is where the honesty of the formula lives. The result is not the shear stress at a point; it is the stress averaged across the width of the cut, and the derivation says nothing about how it varies across that width. For a narrow web the distinction never matters. For a wide flange it does: the true distribution across a wide rectangle rises toward the sides, and the average understates them by a margin that grows as the width approaches the depth — which is why the formula is trusted in webs and treated with suspicion in flanges. At a step change in width the first moment is the same on both sides and the width is not, so the stress jumps by the ratio of the two widths; both values are real.
q_(flow)=(VQ)/(I_x), τ=(VQ)/(I_x t)
Q=∫_(A^*) y dA
τ_(max)=(3V)/(2A) (rectangle)
s_f=(q_(allow))/(q_(flow))
Assumptions
The shear stress is uniform across the width of the cut. This is the formula's weakest assumption: fair for a narrow web, poor for a wide flange, and worse as the width grows relative to the depth.
The shear stress acts parallel to the sides of the section, and the cut is taken perpendicular to them.
The section has an axis of symmetry in the plane of loading, or the load passes through the shear centre, so the member does not twist.
The material is linear elastic and homogeneous, and the beam is prismatic and long compared with its depth.
The bending moment varies along the beam — with no varying moment there is no shear force and no shear stress to compute.
Takes
Unit
Meaning
V
N
Shear force at the section under consideration.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
Q
mm³
First moment of the area lying beyond the cut, about the centroidal axis — the part of the section the shear has to drag along.
t
mm
Wall thickness of a thin part — a flange, a web, a tube wall, a plate.
q_allow
N
Load one fastener can carry.
Gives
Unit
Meaning
tau
MPa
Shear stress at the point under consideration.
tau_max
MPa
Largest shear stress on any plane through the point.
q_flow
N/mm
Shear flow — force per unit length running along the wall of the section.
s_fast
mm
Spacing between fasteners along a built-up member.
What must always be true here. Each of these is a test in the suite, not a remark:
Integrating the shear stress over the section returns the applied shear force.
For a rectangle the peak shear stress is exactly one and a half times the average.
Halving the web thickness doubles the peak shear stress.
Widening the flanges at fixed depth barely changes the peak shear stress in the web.
Where it stops.
The shear stress is zero at the top and bottom fibres of the section.
At a sudden change in width the shear stress jumps, because the formula divides by the local width; both values are real and both must be shown.
Solution method
One division, guarded at both degeneracies. A section with no second moment returns not-a-number; a cut of zero width returns infinity, which is what the formula says and is also why a section narrowing to a point is not a section. A fastener spacing computed from a vanishing flow returns infinity too: a joint carrying nothing needs no fasteners, and that is an answer rather than an error.
The rectangle's peak is computed from its own relation — three halves of the mean shear stress over the gross area — rather than by evaluating the general formula at the neutral axis. Two routes to one number, agreeing only if both the first moment and the general formula are right.
The scalar screen can still accept a first moment directly. The composition layer also accepts a vertical stack of centred rectangular parts, derives its centroid, second moment, first moment and one-sided local width, and integrates the resulting shear flow exactly through the depth. At a width step the same flow is divided by the two real local widths, exposing both stress values.
Limitations
The scalar route still accepts a first moment directly; use the layered profile route when the section is built up and the geometry should determine it.
The peak-stress output is the rectangle's three-halves result and is not the peak in an I-section, where the peak sits in the web and is close to the shear divided by the web area alone.
Within about one depth of a concentrated load, a support or a sudden change of section, the real stress field is not what any of this describes.
An open thin-walled section loaded through its centroid rather than its shear centre twists, and the torsional shear can exceed everything computed here.
There is no buckling check: a slender web can buckle in shear well below its shear yield, and no shear-stress calculation shows that.
Reading the result
The fastener spacing is the number most often misused, and always the same way. The shear flow varies along the span because the shear force does, so a spacing worked out where the shear is smallest is the loosest on the member and the wrong place to work from. On a simply supported beam under uniform load the flow is largest at the supports and zero at midspan; a spacing taken at midspan is unbounded and means nothing. It is also a maximum from shear flow alone, and says nothing about edge distance or bearing on the fastener.
The general stress and the rectangle's peak answer different questions: the first is the stress at the cut described by the first moment and width entered, the second is the peak of a rectangle. On an I-section neither is usually what is wanted, and the shear divided by the web area is closer to the truth than either.
Last, resist comparing a shear stress with a bending stress and concluding that shear does not matter. In a long shallow beam it usually does not. In a short deep one, in a thin-webbed member, and at every glued or bolted interface, it governs.
Two materials bonded into one section bend as one section, so the strain diagram is continuous across the interface; it is the stress diagram that steps. Since stress is stiffness times strain, a strip of the stiffer material carries a fixed multiple of what an equal strip of the other would carry at the same level. Widening every strip of one material by that multiple gives a section made entirely of the other with the same force and moment at every level. Ordinary bending theory then applies, and the stress in the material swapped out is recovered by undoing the swap.
Derivation
At a given level the strain is fixed by the curvature alone, whatever material happens to be there. The force on a strip is stiffness times strain times width times height. Replacing one material's stiffness with the other's while multiplying the width by the ratio of the two leaves the product of stiffness and width unchanged, so every strip force and moment is unchanged — and therefore so are the neutral axis, the curvature and the total moment.
Width only. Changing a vertical dimension would change the lever arm as well as the stiffness, and the equivalent section would no longer stand for the same beam. This is the one step whose wrong answer looks entirely reasonable. Recovering the stress is the other thing easily forgotten: the equivalent section reports what the substitute material would carry, and the material really there carries the ratio times as much. Skipping it reports a steel stress under timber's name, and the two differ by a factor of twenty or thirty.
The cracked case changes the problem rather than the arithmetic. Concrete in the tension zone is taken to carry nothing, so the active area now depends on where the neutral axis is, and the axis is no longer the centroid of anything known in advance. Equating the first moment of the rectangular compression block to that of the transformed reinforcement, both about the unknown axis, gives a quadratic in the depth whose positive root is the answer. The second moment follows from that depth, and the internal lever arm is the effective depth less one third of it, the compression resultant sitting at the centroid of a triangular stress block.
Before cracking the whole rectangle remains active. The transformed area is the base rectangle plus the additional area (n minus one) times the reinforcement area, because the physical reinforcement has already displaced the same area of the base material. First moments of those two parts give the uncracked neutral axis; the rectangle's centroidal second moment, both parallel-axis terms and the additional reinforcement term give the uncracked second moment. This branch uses the full section depth h, which the cracked branch deliberately does not.
The two materials are bonded so that no slip occurs at the interface, which is what makes the strain continuous across it.
Both materials are linear elastic at the stress reached, and the modular ratio is a constant rather than a function of stress, time or temperature.
Plane sections remain plane across both materials together, not across each separately.
The transformation changes width only, so the geometry in the direction of bending is untouched.
In the cracked branch the weaker material carries no tension whatever — a modelling decision taken in advance, not a result the calculation arrives at.
Takes
Unit
Meaning
E_1
MPa
Young's modulus of the first material in a two-material member.
E_2
MPa
Young's modulus of the second material in a two-material member.
b
mm
Width of a rectangular part of the cross-section, measured across the bending axis.
h
mm
Height (depth) of a rectangular part of the cross-section, measured along the bending axis.
A_s
mm²
Area of steel reinforcement in the tension zone.
d_eff
mm
Effective depth — from the compression face to the centre of the tension reinforcement.
M
N·mm
Bending moment at the section under consideration.
section_state
—
Whether the whole transformed section remains active or the tensile material has cracked and is omitted.
Gives
Unit
Meaning
n_ratio
—
Modular ratio — one material's stiffness divided by the other's, used to swap one for an equivalent area of the other.
x_na
mm
Depth of the neutral axis below the compression face.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
sigma_kept
MPa
Direct stress in the material the section is written in, at its furthest fibre from the neutral axis.
sigma_replaced
MPa
Direct stress in the material that was swapped out for an equivalent area — recovered by undoing the swap, so it is the stress that material really carries.
Choices you have to make. The app shows these rather than picking one:
uncracked, whole section active, cracked, tension zone ignored — The two give different neutral axis depths and different stresses. Defaulting silently to the cracked model is wrong below the cracking moment.
What must always be true here. Each of these is a test in the suite, not a remark:
Strain is continuous across the interface between the two materials, so the strain diagram has no step even though the stress diagram does.
The stress ratio at the interface equals the ratio of the two moduli.
The direct force on the transformed section integrates to zero.
Raising the modular ratio pulls the neutral axis toward the stiffer material.
Adding reinforcement area lowers the neutral axis and reduces the steel stress.
Where it stops.
The cracked solution takes the tensile material out of the section entirely; near the cracking moment the two models give very different neutral axis depths and the transition must be a visible choice, not an automatic one.
Solution method
Closed form, with the quadratic's positive root written directly. A non-positive width, reinforcement area, effective depth or modular ratio returns not-a-number: a section with no reinforcement has nothing holding the tension and must not be handed a cracked solution. The second moment is computed from the neutral-axis depth the same routine returned, so the two cannot disagree about where the axis is. The uncracked and cracked branches are a visible choice rather than an automatic one, because near the cracking moment they give substantially different depths and no arithmetic test decides between them.
The two stress outputs are deliberately not named as a maximum and a minimum. They are stresses in two different materials, not the two extremes of one stress field. Under the borrowed names the screen once showed a maximum of about minus four megapascals beside a minimum of about plus ninety-six — which reads as a bug and is really a mislabel, since on every other screen those symbols mean the top and bottom fibre of one material. Here one is the compressive stress in the material the section is written in; the other is the stress in the material swapped out, already multiplied back by the modular ratio.
Limitations
This is elastic-theory mechanics and not a code check: no partial factors, no permissible stresses, no design standard is applied anywhere, and the outputs are stresses rather than verdicts.
Creep and shrinkage are outside it. A concrete member's long-term stiffness is a fraction of its short-term value, and a short-term modular ratio under sustained load overstates the concrete's share of the moment.
The cracked branch treats the crack as complete; real behaviour near the cracking moment lies between the two branches, because uncracked concrete between cracks still carries tension.
The app does not choose the branch from the applied moment: tensile strength and cracking history are not inputs, so the reader must choose uncracked or cracked explicitly.
Nothing checks whether the reinforcement has yielded or whether the section is over-reinforced, and beyond yield none of the elastic theory applies.
Only a rectangular compression zone with one layer of reinforcement is solved; a flanged or doubly reinforced section needs the neutral-axis equation rewritten.
Reading the result
The two stresses live in two different materials, so comparing them with each other means nothing. Compare each with its own material's limit. A comfortable steel stress and an uncomfortable concrete stress are entirely consistent with one another and with the same moment.
Get the direction of the modular ratio right, and check it rather than trusting it. It is the stiffness of the material being replaced over the stiffness of the material the equivalent section is written in — so replacing steel by an equivalent area of concrete gives a number around fifteen, not around one fifteenth. Inverting it moves the neutral axis the wrong way, and the check is the trend rather than the value: raising the ratio must pull the axis toward the stiffer material, and adding reinforcement area must push it down.
The lever arm is worth a glance as a sanity check: for a normally proportioned reinforced section it lands between about eighty and ninety per cent of the effective depth, and a value well outside that usually means the reinforcement area or the effective depth went in wrong.
Advisory. These are teaching curves from the research literature, not a design code check. No national or regional standard is applied anywhere in this app.
Direct stress and bending stress are both linear in the applied actions and both act on the same fibres in the same direction, so they add. That is the whole principle. Its practical form comes from the equivalence rule of statics: a force applied at an eccentricity is statically equivalent to the same force at the centroid together with a couple equal to force times eccentricity — the same resultant and the same moment about every point — and it is that second form the relation evaluates.
Derivation
Superposing the uniform stress from the force and the linear stress from each moment gives a distribution that is still linear across the section. Evaluating it at a corner is a matter of choosing the sign of each bending term, which is why one expression with two sign flags serves all four corners.
Eccentricity changes only the slope of that line and where it crosses zero. Push the load far enough from the centroid and the zero moves inside the section, and part of it goes into tension. For a bolted joint or a solid steel member that is unremarkable. For a footing on soil, for masonry, for any interface that cannot pull, it is not: the material simply leaves, and the formula has quietly returned a negative stress where there is no longer anything to carry it. That number looks plausible and means nothing.
The core answers the resulting question — how far out the load may sit before any part of the section goes into tension. Setting the stress at the far face to zero equates the direct term with the bending term, and the force cancels: the limit is the section modulus divided by the area, a property of the section alone that does not move when the load changes. For a rectangle that is one sixth of the depth, the middle-third rule; for a solid circle it is one eighth of the diameter, a different fraction entirely. With eccentricity in both directions the two limits are not checked separately, because the core of a rectangle is a rhombus: the two eccentricities trade against each other and their fractions of the respective limits must sum to no more than one. Checking them one at a time passes loads that lift a corner.
σ=P/A±(M_x)/(Z_x)±(M_y)/(Z_y), M=Pe
e_(core)=Z/A
rectangle: e≤d/6, solid circle: e≤d/8
(|e_x|)/(c_x)+(|e_y|)/(c_y)≤ 1
Assumptions
The member is short enough that its own deflection does not add to the moment; once the product of force and deflection matters the problem is second-order and this screen understates it.
The section is fully effective and the material carries tension as readily as compression, unless the contact branch says otherwise.
Both contributions are elastic, and the eccentricities are measured from the centroid in the principal directions.
The load is applied where it is stated: an uncertain eccentricity propagates directly into the peak stress, because the two are proportional.
For the contact question the supporting medium is taken as unable to carry any tension at all, which is a conservative idealisation and not a measured property.
Takes
Unit
Meaning
P
N
Axial force in the member — positive in tension unless the screen says otherwise.
M_x
N·mm
Bending moment about the horizontal axis.
M_y
N·mm
Bending moment about the vertical axis.
A
mm²
Cross-sectional area — the amount of material you would see if you sliced the member straight across.
Z_t
mm³
Elastic section modulus for the top fibre — second moment of area divided by the distance to that fibre.
Z_b
mm³
Elastic section modulus for the bottom fibre.
Gives
Unit
Meaning
sigma_max
MPa
Largest direct stress anywhere in the section.
sigma_min
MPa
Smallest direct stress anywhere in the section, negative where the section is in compression.
core
mm
The outline inside which the load must land if no part of the section is to go into tension.
e_res
mm
Eccentricity of the resultant force where it crosses the base.
Cases this screen covers without asking. Both sides of each of these are handled by the code, so there is no control for them:
whole section in contact, partial contact, section lifting — The linear formula quietly returns a negative stress where the material cannot pull; that number looks plausible and is meaningless.
What must always be true here. Each of these is a test in the suite, not a remark:
With no eccentricity the stress is uniform and equal to force over area.
The stress distribution stays linear however the load is placed, as long as the section stays fully active.
A load placed exactly on the core boundary makes the stress at the opposite face exactly zero.
For a rectangle the core is a rhombus whose diagonals are one third of each side.
Moving the load further from the centroid raises the peak stress and lowers the minimum.
Where it stops.
Once the load leaves the core the section lifts and the linear formula no longer applies; the result must switch to the reduced-contact distribution and say that it has.
Solution method
Closed form, with one deliberate omission that has to be stated. The combined stress relation carries no sign convention of its own. It adds force over area to two bending terms, and whatever sign the caller gave the force comes back in the answer: enter a compressive load as negative and compression comes out negative. This is written down because a claimed convention the function does not enforce would be worse than no claim at all.
The core shown is the section modulus over the area on the entered face — a property of the section alone, not a verdict on the case entered. The verdict is beside it. The kernel's rhombus check, stays_in_contact, trades the two eccentricities against the two core limits the way the derivation above describes, and the screen now calls it: the relation printed beside core reads either that the resultant is inside it and the whole section bears, or that it is outside it and sigma_min is material that cannot pull. This screen carries a section modulus about one axis only, so the second eccentricity is passed as zero rather than inventing a core half-width the screen does not have, and the rhombus test reduces to the single comparison the two rows on screen already show. A separate advisory appears once the resultant is outside the core, saying which distribution is being shown and for what kind of section it is wrong: a base, a masonry joint, an unreinforced footing.
Both of those are recent, and what they replace is worth recording. The canon's branch between whole-section contact and partial lifting reached nothing: the screen printed the eccentricity and the core beside each other and left the comparison to the reader. The advisory that did point at this screen was the retaining wall's, which says that the reduced-contact distribution is being used — and on this screen that sentence is false, because the linear distribution is what is shown and always was. A guard asserting a behaviour the screen does not have is worse than none, so the two were separated: the wall keeps its own, and this screen has one that describes what it actually does.
The rectangle's one-sixth form is provided separately in the kernel because it is the version a reader checks by eye, and because the rectangle is the section the rule is always quoted for, but it is not called here — core is core_limit's general section-modulus form regardless of the section shape entered. The reported resultant eccentricity is the moment divided by the force — where the resultant of the entered actions crosses the section — and it returns not-a-number for a vanishing force, whose moment cannot fix a distance at all; it is computed from M_x alone, and the eccentricity entry offered beside it is not read back into anything below, which the screen says in an advisory of its own rather than leaving a field that quietly does nothing.
The screen carries one section modulus per face rather than one per axis, so a biaxial case is evaluated with the same modulus for both moment terms. Where the two axes genuinely differ, evaluate one axis at a time and superpose by hand.
Limitations
There is no buckling check anywhere here. A slender strut under an eccentric load fails by instability well below the load that first reaches a stress limit, and that is a different screen.
Partial contact is a change of model, not a correction: once part of the section lifts the stress redistributes over what remains bearing, and the redistributed peak is higher than the linear formula's — so treating the linear result as conservative is backwards.
The core is drawn for the section entered and says nothing about whether the material can carry the resulting stress, only about whether any of it goes into tension.
Biaxial cases use one section modulus per face, which is exact only where the two axes give the same modulus.
Nothing here considers the strength of the supporting medium, which for a footing usually governs long before any stress in the footing does.
The contact state is reported, not acted on. The screen says which side of the core the resultant is and warns when it is outside, and it still shows the linear distribution — which is the right answer for a section that can carry tension and the wrong one for a section that cannot. Redistributing over the part still bearing is a different model and is not carried here.
The contact test is made on one axis. The kernel trades both eccentricities against both core limits, but this screen has one section modulus, so a case eccentric in both directions is judged on the first alone and can be shown as bearing when the rhombus check would say it lifts.
Reading the result
Find the tensile face before anything else, and to do that you have to know which sign convention the numbers were entered in. This relation carries none of its own: it adds force over area to the bending terms and gives back whatever sign the force was given. Under this manual's convention, tension positive, a compressive load is entered negative and the tensile face is whichever of the two stresses is positive — on the opening state that is sigma_max at +4.44 MPa, against sigma_min at −17.78 MPa, which is compression. Enter the same case compression-positive, as the printed tables in this subject do, and the two swap roles. On a section that cannot pull, a stress on the tensile side is not a small tension to be shrugged at: it is the signal that the linear model no longer applies at this load position, and that every number on the screen came from a relation whose assumption has failed.
One caution about the sentence the screen prints beside the core. It names sigma_min as the material that cannot pull, which is right when the load has been entered compression-positive and wrong when it has been entered the way this app's own opening state enters it. Read the signs rather than the row name.
The comparison that answers the practical question is between the resultant eccentricity and the core limit, not between the two stresses, and the screen now makes it for you: the words beside the core say which side of it the resultant is on. Inside the core the whole section bears; outside it, part lifts. That single comparison is what a bearing check comes down to, and it does not depend on the size of the load at all — which is why moving the load is a far more effective remedy than shrinking it. The screen opens with the resultant outside the core, so the sentence a reader most needs to recognise is the one they meet first.
The middle third is a rule for a rectangle, and it gets applied to circles, I-sections and annular bases where section modulus over area is a quite different fraction of the depth. Compute the limit from the section rather than recalling the fraction.
Advisory. The resultant sits outside the core, so one face of this section is in tension. What is shown is the linear distribution that follows — right for a section that can carry tension, and wrong for one that cannot: a base, a masonry joint, an unreinforced footing.
Implemented by combined_stress, core_limit, rectangle_core_half_width, stays_in_contact, moment_arm.
Deflection — Standard Cases
Slope and deflection for the standard span, support and load combinations, superposed as you like.
δ_(max)=c (W L^3)/(EI_x), c=(δ_(max)EI_x)/(WL^3) from the closed-form solution
Basis
The moment-curvature relation, integrated twice with the support conditions imposed, gives a closed expression for the deflected shape of any beam whose moment function is known. For the recurring span, support and load combinations that integration has been done once and for all, and the result collapses into a single coefficient multiplying load times span cubed over bending stiffness. Because the underlying relation is linear the cases superpose: a beam under several loads deflects by the sum of the deflections they cause separately.
Derivation
Every case here is that double integration carried out and then reduced. A simply supported span carrying a total load spread uniformly gives five three-hundred-and-eighty-fourths. The same total load concentrated at midspan gives one forty-eighth — eight fifths as much, which says that concentrating a load costs sixty per cent more deflection than spreading it. Building in both ends under uniform load gives exactly one fifth of the simply supported value, the strongest single argument for continuity in a floor; with a central point load it is a quarter rather than a fifth. A cantilever loaded at its tip is one third, sixteen times the simply supported central case, which is the comparison that explains why cantilevers are deep. Every coefficient is written for the total load on the span, not for an intensity: mixing the two is a factor equal to the span, and it is the most frequent transcription error in this subject.
Two cases are not simple fractions. Under an off-centre point load the maximum does not sit under the load: it sits at the root of a cubic, at the extreme a distance of the span over the square root of three from the far support, which is under a tenth of the span from midspan however far out the load goes. The deflection under the load is a different and smaller number, and the two coincide for a central load — which is precisely why they get confused.
The propped cantilever under uniform load is the other, and this app's closed form for it is a kernel relation checked against fixtures rather than a case this screen offers — see the limitations below for what the screen's own two selectors can and cannot reach. Its maximum is commonly quoted with a denominator of one hundred and eighty-five, and that is a rounding: the maximum sits at a root of a cubic, about 0.4215 of the span from the prop, and the closed form evaluates the deflected shape there instead of carrying the rounded constant. A constant was carried at first, guessed from a plausible closed form, and came out three times too small — caught immediately by the printed coefficient it was checked against.
Deflections are small: the curvature is taken as the second derivative of the deflection, which is the linearised form, and the beam's length along its own axis does not change.
The bending stiffness is constant along the span; a tapered or haunched member is none of these cases.
Shear deformation is ignored, which costs a fraction of a per cent for a span more than about ten times its depth and considerably more for a short deep or thin-webbed member.
The material is linear elastic and the supports do not settle; a support that moves adds a rigid-body displacement none of these expressions contains.
The load symbol is the total load on the span, not an intensity.
Takes
Unit
Meaning
L
mm
Length of the member along its own axis, support to support.
supports_type
—
The support arrangement — pinned both ends, fixed one end, propped cantilever, and so on.
load_type
—
The kind of load applied — point, uniform, linearly varying, or applied moment.
W
N
Total load on the span, whether it arrives as one force or spread out.
a
mm
Distance from the left-hand support to the point being described.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
h
mm
Height (depth) of a rectangular part of the cross-section, measured along the bending axis.
Gives
Unit
Meaning
delta_max
mm
Largest deflection anywhere along the member.
delta_pos
mm
Position along the member where the largest deflection occurs.
theta_rot
rad
Rotation of the cross-section, the slope of the bent member at that point.
delta
mm
Deflection — how far a point has moved from where it started.
Choices you have to make. The app shows these rather than picking one:
simply supported at both ends, cantilever, built in at the left — A cantilever of the same span under the same load carries four times the moment of a simply supported beam and deflects nine and a half times as far. Nothing on the screen says which one the numbers are for unless this does.
uniform over the whole span, a single point load at a — The same total load spread out and put at one place are different problems: the point load fixes the largest moment at a, the uniform load puts it where the shear crosses zero, and a is read only by one of them.
What must always be true here. Each of these is a test in the suite, not a remark:
The deflection from several loads acting together equals the sum of the deflections they cause separately.
By the reciprocal theorem, the deflection at one point from a load at a second equals the deflection at the second from the same load at the first.
Deflection grows with the cube of the span under either load, because W here is the total on the span rather than an intensity: the fourth power a reader remembers belongs to the intensity form.
Fixing both ends of a uniformly loaded span cuts the midspan deflection to one fifth of the simply supported value.
Where it stops.
Deflection is zero at every simple or fixed support, and slope is zero at every fixed support.
A cantilever has zero deflection only at the root, so the position of maximum deflection is the free end and must not be searched for as an interior stationary point.
Solution method
Closed form, one function per case, each guarded so that a zero span, a section with no stiffness, or a load positioned off the beam returns not-a-number rather than a number. This screen reads two selectors — support arrangement and load kind — and a position. Three support arrangements are offered, simply supported, cantilever and built in at both ends, each with a uniform load or a point load, which is six combinations; the position then places the point load along the span, so the simply supported point-load case is the general off-centre one and not only the midspan special case.
The position is read, and that is recent. It used to be drawn and ignored: a reader could walk the load from 500 to 5500 mm and watch the deflection stay at 1.2698 mm, the midspan value, throughout. The four relations that answer the general case were already in the kernel and verified to sixty digits, reachable from nothing but their own tests. On the opening span with the load 2000 mm from the left support the screen now reports a maximum of 1.0923 mm at 2734 mm from that support, a deflection under the load itself of 1.0033 mm, and an end rotation of 6.271e-4 radians — three different numbers where there used to be one, and the distinction between the first two is most of what the case is for. Put the load back at midspan and all three collapse to the central values, 1.2698 mm and 6.349e-4 radians, which is the check worth making on any screen whose general case has a special case inside it.
The end slope follows both selectors as well. It used to be the simply supported uniform value unconditionally, so five of the six combinations reported a slope belonging to a different beam — a wrong number wearing the right units, which no invariant catches. For the built-in-both-ends case it is reported as an exact zero with the support named as the reason rather than as a relation, because that is what it is.
The propped cantilever remains out of reach from here. Its closed form is carried in the kernel for the same reason every case here is — no rounded coefficient appears anywhere in the code, propped cantilever included, whose maximum is computed from the exact root and the shape evaluated there rather than the commonly quoted rounding — but there is no fourth support state to select it.
Downward loads are positive and downward deflection is positive here — the opposite of the beam kernel, where displacement is measured with the coordinate axis and is negative under gravity. A reader asking how far it sags wants a positive number, and every reference table in the subject is written that way; the composition layer negates when handing these into a coordinate system.
The coefficients are computed rather than listed. A printed table gives the coefficient to four figures for a handful of cases; transcribing those numbers would copy protected expression and limit the app to that handful. Instead each case carries its own closed form and the coefficient is recovered from the computed deflection, so the printed column becomes a fixture that checks this code rather than content the app carries.
Limitations
Superposition holds only while everything is linear. Once any fibre yields, or the axial force is large enough to matter, the cases may not be added.
The propped and fixed-end cases are closed forms for those particular arrangements, not a general solver for indeterminate beams.
Support settlement, temperature gradient, creep and shrinkage all produce deflections that nothing here computes.
The end-slope output follows the same two selectors the deflection does, and is exactly zero for the built-in-both-ends case by definition of that support rather than by a formula.
Each evaluation covers one support arrangement with one load kind; several loads at once is superposition the reader performs, or the integration screen.
Three support arrangements are offered, and the propped cantilever is not among them. Its closed form is carried in the kernel and checked against fixtures, but no state of this screen's support selector reaches it.
On a cantilever the position places the load but not the maximum: beyond the load the beam is straight, so the tip stays the worst point and the position row does not follow the load. That is the physics rather than an omission, and it is why the two rows disagree there.
The depth is taken so that the span-to-depth ratio can be judged, and for nothing else. It does not enter any deflection: the stiffness comes from I_x alone, and entering a depth inconsistent with that second moment changes the advisory and no number.
Reading the result
The number is elastic and instantaneous. A timber or concrete member under sustained load ends up at some multiple of it, and no coefficient here knows about time.
Deflection is far more sensitive to span than to anything else on offer: the cube of the span for a fixed total load, the fourth power for a fixed intensity. Doubling the span multiplies the deflection by eight or by sixteen; doubling the second moment of area only halves it. That asymmetry is why a serviceability problem is nearly always solved by depth and hardly ever by material.
The screen now takes a depth, and the only thing it does is decide whether ignoring shear deformation was reasonable. Below a span-to-depth ratio of about ten an advisory appears saying that a stubby member reads stiffer here than it really is. It is deliberately an advisory and not a limit: deflection limits are code values, and this app applies none. The opening state is a 300 deep joist on a six-metre span, a ratio of twenty, so the advisory is quiet until the span is shortened below three metres — which is what a guardrail that means something looks like.
The position of the maximum is not the position of the load, and the screen shows both so that the difference is visible rather than assumed. On a simply supported span with the load 2000 mm along a six-metre span the largest deflection sits at 2734 mm, three quarters of the way from the load toward midspan: the maximum drifts toward the middle and stays within about a tenth of the span of it however far out the load goes, while the deflection under the load itself is a different and smaller number. The two coincide only for a central load, which is exactly why they are confused. On a cantilever the maximum is always at the free end, because a cantilever has zero deflection only at its root and there is no interior stationary point to look for; the position row there does not follow the load, and that is the answer rather than a fault.
Advisory. This model ignores shear deformation, so a stubby member will read stiffer than it really is.
Advisory. A beam's deflection is fixed by E and I_x, so the depth h is not read into delta, delta_max or theta_rot. It is on the screen because slenderness is what decides whether ignoring shear deformation is safe, and that is a judgement rather than a term in the formula.
The same moment-curvature relation as the standard cases, but integrated for the beam in front of you instead of for a case somebody catalogued. Bending stiffness times the second derivative of the deflection equals the bending moment at that station. The moment function comes from the beam's own loads and reactions; integrating once gives the slope, twice gives the shape, and the two constants of integration are fixed by the support conditions. Every method in the family — plain double integration, singularity functions, moment-area, conjugate beam — is that one relation with different bookkeeping.
Derivation
The exact curvature of a curve is its second derivative divided by a factor involving the slope. For a beam whose slope stays small compared with one that factor is one to within a fraction of a per cent, and the relation linearises. That linearisation, not the material law, is what limits this method to small deflections.
Integrating once gives the slope plus a constant; twice gives the deflection plus that constant times position plus a second constant. The constants are not decoration — they carry all of the support information. A simply supported beam has zero deflection at both ends; a cantilever has zero deflection and zero slope at the root. For any statically determinate beam exactly two conditions are available and they fix the two constants uniquely.
Discontinuous loading is what makes plain double integration painful and what the bracket notation removes. Written piecewise, a beam with five loads has six segments and ten constants matched pairwise at the joins. Written with brackets that vanish to the left of their station it has one moment function and two constants — the matching happens by itself, because both the bracket and its integral are zero at the join. An internal hinge is the one thing it does not absorb: it breaks slope continuity while leaving deflection continuous, so the beam needs a third condition — the moment there is zero — imposed rather than inferred.
Moment-area and conjugate beam are the same integration in different clothes, and are easier by hand: the first reads the change of slope between two points as the area of the moment-over-stiffness diagram between them, the second loads a fictitious beam with that diagram and reads its shear and moment as the real beam's slope and deflection.
EI_x(d^2v)/(dx^2)=M(x)
EI_x(dv)/(dx)=∫ M dx+C_1, EI_x v=∫∫ M dx dx+C_1 x+C_2
∫⟨ x-a⟩^ndx=(⟨ x-a⟩^(n+1))/(n+1)
M(x)=Σ_i C_i ⟨ x-a_i⟩^(n_i)
θ_B-θ_A=∫_A^B(M)/(EI_x) dx
Assumptions
Slopes are small enough that the linearised curvature holds; the result degrades as the slope stops being small compared with one.
The bending stiffness is a single constant along the span, since the integration divides by one value.
The beam is statically determinate, so the moment function is fully known before any deflection is computed.
Shear deformation is neglected and no axial force acts, so the shape comes from bending alone.
The support conditions used are those of the arrangement selected on the screen, and none of them is a settling support.
Takes
Unit
Meaning
L
mm
Length of the member along its own axis, support to support.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
load_type
—
The kind of load applied — point, uniform, linearly varying, or applied moment.
W
N
Total load on the span, whether it arrives as one force or spread out.
a
mm
Distance from the left-hand support to the point being described.
method
—
Which of the module's solution routes is being used.
h
mm
Height (depth) of a rectangular part of the cross-section, measured along the bending axis.
Gives
Unit
Meaning
delta
mm
Deflection — how far a point has moved from where it started.
theta_rot
rad
Rotation of the cross-section, the slope of the bent member at that point.
delta_max
mm
Largest deflection anywhere along the member.
delta_pos
mm
Position along the member where the largest deflection occurs.
Choices you have to make. The app shows these rather than picking one:
double integration, singularity functions, moment-area, conjugate beam — All four give the same answer, and seeing which one is running is the point of the screen.
uniform over the whole span, a single point load at a — The same total load spread out and put at one place are different problems: the point load fixes the largest moment at a, the uniform load puts it where the shear crosses zero, and a is read only by one of them.
What must always be true here. Each of these is a test in the suite, not a remark:
Slope and deflection are continuous everywhere along a beam with no internal hinge, even where the load is not.
The two constants of integration are fixed uniquely by the two support conditions, for any statically determinate beam.
Integrating the standard cases by this route reproduces the closed-form coefficients exactly.
Refining the number of load segments changes nothing: the solution is analytic within each segment.
Doubling the second moment of area halves every deflection.
Where it stops.
An internal hinge breaks slope continuity but not deflection continuity; the extra condition is that the moment is zero there, and it must be imposed rather than inferred.
Solution method
It is worth being exact about which part of this is analytic and which is not, because the two are easy to assume the wrong way round.
The moment function and both integrations are analytic. Load ends, point loads, couples and supports define the segment boundaries. Within each segment the moment is reconstructed as its exact cubic polynomial, then integrated in closed form once for slope and twice for deflection. Adding extra segment boundaries therefore changes no value. The two rigid-line constants are solved from either the two simple-support deflections or the fixed-end deflection and rotation.
For the stable Gerber preset the moment is first required to be zero at the hinge. The two sides then receive separate rotation constants while sharing one deflection there; slope may jump and deflection may not. Closed-form uniform-load and tip-load cases independently reproduce the analytic curve.
The uniform load is this screen's own W, divided by the span. It used to be read from an intensity symbol the screen offers no field for, left over in the opening state, while the W the reader could see did nothing at all under a uniform load. Both screens now take the total load on the span, which is what every coefficient in this subject is written for.
The route selector moves what is printed, not what is computed, and that is the canon's own reason for the branch: all four routes give the same answer, and seeing which one is running is the point. The relation printed beside every reading names both halves — the route the reader asked for and the operation that carried it out, so choosing moment-area gives "moment_at as moment-area, integrated twice". Singularity functions are a way of writing the moment function that goes into the integral, and moment-area and the conjugate beam are two ways of writing the double integral of moment over stiffness, so naming the route beside the operation is a description rather than a claim about a second algorithm. Before this, the picker moved and nothing on the screen changed at all, which for whoever chose any of the last three was a silence that read as agreement.
The end rotation is negated on its way out. The integration runs with upward positive, so a downward load leaves a negative rotation at the left end here and a positive one on the closed-form screen: the same beam, the same symbol, the same units, opposite signs, and a reader comparing the two routes with no way to tell which was the error. The sign is fixed here rather than left for the reader to reconcile.
Limitations
The curve itself is analytic within each load segment; only the reported position of its maximum is selected from a display search grid rather than from a polynomial root.
An internal hinge is supported for the stable fixed-left, roller-right Gerber form; a pin-pin beam with an added hinge is a mechanism and is not converted into a curve.
A step change of section would put a jump in the moment-over-stiffness diagram, which the method allows in principle but a single bending stiffness cannot express.
Only determinate arrangements can be handled, since the moment function has to be known before the integration starts.
One route runs, always. The canon declares a choice of four — plain double integration, singularity functions, moment-area, conjugate beam — and the selector names which one the reader meant, but the screen performs the integration one way: the Macaulay moment function, integrated numerically twice. The selector moves the relation printed beside every reading and not the number, which is what the canon's own reason for the branch asks for, and the derivation above describes the other three as hand methods rather than as second algorithms.
The depth is taken so that the span-to-depth ratio can be judged, and enters no deflection; the stiffness is I_x alone.
The deflection reported at the position is taken at the nearest of the four hundred stations rather than at the position itself, so a position between two grid points is answered a few millimetres away from where it was asked.
Reading the result
The rotation reported is the slope at the left-hand end, not the largest slope on the beam. On a simply supported span those are the same thing; on anything else they are not.
The position input does double duty here, and that catches people. It places the point load when a point load is selected, and it also selects the station at which the deflection is reported. On a uniformly loaded beam it does only the second job, so a reader who moves it expecting the load to move will see the deflection change for a reason they have not identified.
The check to make first is against the standard-cases screen, and it is now worth making as the two screens open. Both take the total load on the span, both take the same span, stiffness and position, and both offer a uniform load and a point load, so the same numbers describe the same beam. Opened as they come they agree to about one part in a hundred thousand on the largest deflection and on the end rotation. Compare the rows that answer the same question: this screen's largest deflection against that screen's largest deflection. The row labelled as the deflection is a station reading here and the case's own answer there, so under a uniform load with the position anywhere but midspan those two rows differ for a reason that has nothing to do with either screen being wrong — 0.689 mm here at the 2000 mm station against 0.794 mm there at the crown.
That was not true until recently, and the way it failed is worth knowing because this manual invited the comparison throughout. This screen read its uniform load from an intensity symbol it has no field for while ignoring the load the reader could see, so the two screens opened 4.50 times apart — 0.794 mm against 3.571 mm — and the ratio was exactly intensity times span over total load. They were describing different beams, not disagreeing about one.
Once the beams do match, the agreement is real evidence: the two share no relation, one integrating a moment diagram and the other evaluating a closed coefficient. Finally, a deflected shape that looks right is no evidence that the moment diagram was right: integration smooths, and two integrations turn a sizeable local error in the moment into a barely visible one in the shape.
Advisory. This model ignores shear deformation, so a stubby member will read stiffer than it really is.
Advisory. A beam's deflection is fixed by E and I_x, so the depth h is not read into delta, delta_max or theta_rot. It is on the screen because slenderness is what decides whether ignoring shear deformation is safe, and that is a judgement rather than a term in the formula.
Get the movement of one chosen point by putting a unit load there, or by differentiating the strain energy.
δ=Σ(N n L)/(AE), δ=∫_0^L(M m)/(EI_x) dx, δ=(∂ U)/(∂ P)
Basis
The principle of virtual work. A structure in equilibrium, given any small displacement field compatible with its supports, does the same external work through that field as the internal forces do through the corresponding internal deformations. Read one way it produces equilibrium equations. Read the other way — with a virtual force system doing work through the real deformations — it produces displacements, one at a time, at whatever point and direction you choose. That is the unit-load method, and it is the only routine way to get the movement of one chosen point out of forces already known.
Derivation
Put a single unit force on the structure at the point and in the direction whose movement is wanted, and nothing else. Solve for the internal forces that unit load alone causes. Now let the structure undergo the real deformations, the ones the real loads produce. The external virtual work is one times the displacement sought; the internal virtual work is the sum over the members of each member's virtual force times its real deformation — extension over stiffness for an axial member, the integral of the product of the two moment diagrams over bending stiffness for a bent one. Equating the two gives the displacement directly.
The virtual system is not the real one, and that is the entire power of the method. The virtual forces need satisfy equilibrium with the unit load and nothing else; the real deformations need satisfy compatibility and nothing else; neither has to know anything about the other. Two consequences follow. On an indeterminate structure the virtual system may be taken from any released determinate form of it and the answer is unchanged, because the redundants do no virtual work on a compatible real structure. And a unit load bearing no relation to the actual loading still answers a question about the actual loading, because the pairing is an identity rather than a physical superposition.
Castigliano is the second route: the displacement under a load is the derivative of the stored strain energy with respect to that load, and the load need not already be there — a dummy, differenced about zero, does the job. The two routes share nothing but the solver, so when they agree they agree for reasons that do not overlap.
δ=Σ(N n L)/(AE), δ=∫_0^L(M m)/(EI_x) dx, δ=(∂ U)/(∂ P)
U=Σ(N^2L)/(2AE)+∫(M^2)/(2EI_x) dx, W=½Pδ
∫_0^L a b dx=L/6(a_1 b_1+4 a_m b_m+a_2 b_2)
(∂ U)/(∂ P)=(U(P+h)-U(P-h))/(2h) (exact when U is quadratic)
f_(AB)=f_(BA) (reciprocal theorem)
Assumptions
The structure is linear elastic and displacements are small, so the strain energy is a quadratic form in the loads; neither route is exact otherwise.
Only axial and bending flexibility are counted — shear and torsional strain energy are not in the sum.
Span loads along a member are uniform. A point or triangular load along a member makes the closed integration rules inexact, and it is refused with a reason rather than sampled.
Members are prismatic between nodes and the supports do not move.
The unit load acts at a node of the model and along one of that node's own degrees of freedom.
Takes
Unit
Meaning
nodes
mm
Node coordinates of the model.
members
—
Which two nodes each member connects, and which section and material it uses.
loads
N
Node loads and member loads making up the load case.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
A
mm²
Cross-sectional area — the amount of material you would see if you sliced the member straight across.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
dof
—
The single degree of freedom the answer is asked about — one node and one direction, which is exactly what a unit load picks out.
method
—
Which of the module's solution routes is being used.
Gives
Unit
Meaning
delta
mm
Deflection — how far a point has moved from where it started.
theta_rot
rad
Rotation of the cross-section, the slope of the bent member at that point.
U_energy
N·mm
Strain energy — the work stored in the material as it deforms, and the same number as the work the loads did putting it there.
Choices you have to make. The app shows these rather than picking one:
along x, along y — The unit load picks the point and the direction together, and the same node gives a different answer for each. A reader who does not choose deliberately reads a sideways movement as a downward one.
unit load, Castigliano — They share nothing but the solver: one sums a product of two force systems, the other differences a stored energy. For a linear elastic structure they agree to the last digit, and flipping between them on a structure the reader built is the check -- a single number would have to be taken on trust.
What must always be true here. Each of these is a test in the suite, not a remark:
The unit-load result and the derivative-of-energy result agree exactly for a linear elastic structure, because the energy is quadratic in the loads and a central difference of a quadratic has no truncation error at all.
The unit-load displacement equals the one the stiffness solution already carries for the same structure, and neither route uses any part of the other.
The cross-influence coefficients are symmetric: a unit load at A moves B exactly as far as the same load at B moves A.
The strain energy stored equals the work done by the loads as they are applied gradually, which is half the product of each load and the movement under it.
Members with the largest product of real force and virtual force dominate the answer, so making every member stiffer reduces every displacement -- in exact proportion for a pin-jointed structure.
Doubling every load doubles every displacement and quadruples the stored energy, which is the whole content of the structure being linear.
Where it stops.
The method returns the movement of exactly one point in exactly one direction, so asking about a direction the support holds gives exactly zero -- an answer, and a different thing from a small number.
A member carrying no force under either the real or the virtual system contributes nothing, however slender it is.
The closed integration rules are exact for a uniform load along a member and for nothing else, so a point or triangular span load is refused with a reason rather than sampled and hoped over.
Solution method
The virtual model is built from the real one with the same nodes, members, supports and releases and a single unit nodal load. A virtual system differing anywhere else would not be a virtual system for that structure.
Both integrals are closed form. The virtual system carries no span loads, so its moment diagram along a member is a straight line; a real member under a uniform load has a parabolic one; their product is a cubic, and Simpson's rule integrates cubics exactly — so the displacement needs no stations, no step size and no convergence check. The square of a parabola, which the strain energy needs, is a quartic, and Simpson does not integrate quartics exactly. Hence two rules rather than one: using Simpson for both looks right, is wrong by a fixed fraction of the uniformly loaded part, and cannot be caught by loosening a tolerance.
Castigliano's step size is chosen backwards from the usual rule. Because the energy is quadratic a central difference has no truncation error at all, so a larger dummy load is more accurate rather than less, until it swamps the real loads and the base structure's own contribution is lost in the subtraction. In the same spirit, a cancelling sum is returned as exactly zero when it falls below a bound derived from the term count and the machine precision.
Limitations
One point, one direction, one number per evaluation; asking about a direction a support holds returns exactly zero, which is an answer and a different thing from a small number.
A rotation asked of a truss joint is refused rather than answered, because pinned members turn independently there and no single rotation exists.
Shear deformation is outside the sum, so for a deep member the reported movement is smaller than the true one.
The work-of-loads check covers nodal loads only: a load spread along a member does work against a deflected shape rather than against one number, so a model carrying a span load returns not-a-number rather than a partial sum that would turn a check into a coincidence.
Neither route sees geometric nonlinearity, so a structure approaching its buckling load moves further than either says.
Reading the result
The sign means one thing: motion along the unit load. Reverse the unit load and the sign reverses without the magnitude changing. Because the unit load fixes the point and the direction together, the same node returns a different answer for each direction, and a reader who does not choose deliberately will read a sideways movement as a downward one.
Read the agreement rather than any one number. This screen opens on a frame, not a truss, and offers a route the truss screen does not: the unit-load sum shown by default, or Castigliano's theorem — the energy derivative — in its place, picked by the same control that names the route in the row beside delta. The check is to switch the route and watch delta stay where it was, because the two routes share almost no algebra. The stiffness solution is computed alongside both but is not among this screen's outputs — the truss-displacement screen is the one that shows it as u_vec beside the sum — so on this screen the comparison is between the two energy routes rather than against the solver. Agreement is the result and not a formality.
Both of those routes are pickers on the screen rather than assumptions in the code, and so is the direction. The canon declares three branches here — which node, which direction, which route — and each of the last two is drawn as a control whose effect is visible: changing the direction changes delta by orders of magnitude on a loaded beam, and changing the route changes the relation printed beside delta from "unit load at node n, along y" to "Castigliano at node n, along y" while the number stays put. A reading on this screen is a number and the relation that produced it, and the route control moves the second half of it. That the number does not move is the theorem, not a broken control: for a linear elastic structure the two routes agree to the last digit, and a screen that exists to show them agreeing has to be able to show it.
Under the results there is now a member-by-member table, and it is the method written out. For a truss shape it carries one row per member — real force, virtual force, extension, the term, the member's stored energy — and the fourth column sums to the delta above it, which is what the unit-load method is. A reader who sees only the total cannot tell whether two members carry all of the movement or whether the one they were worried about contributes nothing. This screen opens on a frame, where there are no rows to give: a frame member carries bending as well, so its share is an integral along the member rather than one number, and the table says exactly that instead of showing a blank panel. Choose a truss shape and the rows appear. The routine behind those rows had been written, tested at sixty digits and ported to Swift, and until recently was called by nothing at all — which for a reader is the same as not existing.
One caution about checking this against published worked calculations, even good ones. The unit-load result was verified against a worked elastic deflection in a public-domain NASA structures manual, and the printed value differs by about a seventh of a per cent from the closed-form value computed from that same manual's own printed stiffness and section properties — more than its printed precision can absorb. This project locked the disagreement rather than choosing a side: the test asserts that the app does not reproduce the printed number, so anyone later tuning the code toward it will be told.
Member forces in a statically determinate truss, by joints and by tension coefficients.
Σ F_x=0, Σ F_y=0 at each joint; t_(ij)=(N_(ij))/(L_(ij)), Σ t_(ij)(x_j-x_i)+F_x=0
Basis
A pin-jointed frame carries load in the lines of its members and nowhere else. Every joint is then a particle in equilibrium under the member forces meeting there and whatever load is applied at it: two scalar equations in the plane, three in space. Count those against the unknowns — one axial force per member plus the reaction components — and a determinate truss has exactly as many equations as things to find. Every method below is a different order of eliminating them, not a different mechanics.
Derivation
The method of joints takes one joint at a time. Find a joint with at most two unknown member forces, write its two equations, solve; those forces are known at the next joint and the sweep continues. The whole method is a sequencing problem rather than an algebraic one, which is why a reader doing it by hand spends most of the effort deciding where to start.
For hand checking, the method of sections cuts through the truss instead of walking around it. The part on either side of the cut is a rigid body under three equilibrium equations, so a cut through three members that are not all concurrent settles all three at once, without touching anything else. Choosing the moment centre is what makes it fast: take moments about the point where two of the cut members meet and the third stands alone. Two consequences are worth carrying as independent checks. In a parallel-flange girder a chord force is the bending moment at the node opposite it divided by the depth — the truss carries moment as a couple in its chords. And a diagonal takes the panel shear through its vertical component, so its force is the shear over the sine of its inclination. Both are one line and both bound a full solution.
Tension coefficients are the third route and the one that scales. Define t = N / L for each member. The component of that member's force along any axis is then t times the coordinate difference along that axis — no angle and no square root, and the same expression whether the frame is plane or spatial. Each joint contributes equations linear in the coefficients, and the forces come back at the end by multiplying each coefficient by its own length. The intermediate looks like a needless step in two dimensions and stops being one in three.
The shipped headless routes are the joints sweep and tension coefficients. The section formulas remain useful independent checks, but the user-defined cut belonged to the cancelled drawing surface and is not offered as an executable route.
Joints are frictionless pins, so a member carries axial force and no moment.
Loads are applied at the joints; a load part-way along a member bends it, and this module does not see that.
Members are straight and their self-weight is either neglected or already lumped at the joints.
Displacements are small enough that equilibrium may be written on the geometry as drawn.
Tension is positive throughout, in every route, so a negative answer is a strut.
Takes
Unit
Meaning
nodes
mm
Node coordinates of the model.
members
—
Which two nodes each member connects, and which section and material it uses.
supports
—
Which degrees of freedom are held, and any settlement imposed on them.
loads
N
Node loads and member loads making up the load case.
method
—
Which of the module's solution routes is being used.
Gives
Unit
Meaning
N_forces
N
Axial force in each member of the truss, tension positive.
zero_members
—
Members carrying no force under this load case.
R_vec
N
Reaction forces and moments at every restrained degree of freedom.
Choices you have to make. The app shows these rather than picking one:
method of joints, tension coefficients — Seeing which route produced a number is most of the teaching value; a single unlabelled answer teaches nothing.
What must always be true here. Each of these is a test in the suite, not a remark:
Every joint is in equilibrium in both directions once the member forces are known.
The joints forces and the forces rebuilt from tension coefficients agree for a determinate truss.
Raising the depth of a parallel-chord truss at fixed span and load lowers the chord forces in inverse proportion.
Where it stops.
A joint with three members, two of them collinear and no load, always leaves the third member with zero force.
A truss that is statically indeterminate has no joint-by-joint solution at all; the screen must send the user to the matrix route rather than solving a subset and calling it the answer.
Solution method
One solve stands behind the two routes the selector offers, and the routes differ in what they report rather than in how the truss was resolved. Choosing the joints method gives the largest member force from the joints sweep. Choosing tension coefficients gives the largest coefficient — force divided by member length, a different quantity in different units, which is the whole reason the route is worth showing separately. The method-of-sections formulas remain in the theory as checks, but no selector promises a user-defined cut. Read the unit column with care on the coefficient route: the row is labelled for a force, because the specification declares it as one, and the number under it is a force per unit length. The screen carries a notice of its own saying that the three routes share one solve.
The sweep keeps the order in which the joints fell, because finding that order is half of doing the method by hand, but the order is held in the solution rather than reported: the results table shows the largest member force, the count of zero-force members and the largest reaction, and nothing that names a joint.
Under the results there is now a joint-by-joint table, and it answers a different question from any of them. Each row is one joint with the two sums that ought to vanish there, the loads and reactions and member forces acting on it added up along each axis. Every row reads zero when the truss has been solved correctly, so the table is the check the method has to pass rather than a second answer to it: the results table can say what the largest member force is, and it cannot say whether the sweep that produced it actually closed. "The routine returned" and "the truss balances" are different claims, and only the second is worth anything to a reader. The routine behind the rows had been written and fixture-checked and called by nothing at all.
Each pass scans for a joint with at most two unknown members. With one unknown the equation is taken along whichever axis carries the larger direction cosine, so a member nearly perpendicular to one axis is never divided by a cosine on its way to zero. With two unknowns the two by two system is solved through its normal equations, because this package's solver takes symmetric matrices; the cost is nothing, since two members at a joint are nearly parallel only when the truss is nearly a mechanism, which the determinacy count has already had its say about.
An indeterminate truss is refused outright rather than solved in part: a sweep on a redundant frame stalls partway, and reporting what it found first would be answering a different problem. A complex truss, where no joint ever has as few as two unknowns, comes back with a named stall rather than a number.
Zero-force members are found afterwards by comparing each force against the largest force in the truss rather than against zero, so the verdict carries no unit and does not change when the model is re-entered in different ones.
Limitations
Only determinate trusses are solved here; a redundant one needs a compatibility condition and belongs to the matrix screen.
A complex truss is refused rather than approximated, and the refusal names the stall rather than returning a partial set of forces.
Member forces say nothing about buckling: a strut reported at 200 kN may fail at 40, and slenderness is a separate question this module never asks.
The forces are those of the undeformed geometry, so a truss that moves enough to change its own angles is outside this model.
The two selectable routes rest on one solve. The joints sweep produces the forces; tension coefficients are those forces divided by member length. A user-defined method-of-sections cut is outside scope because its drawing surface was cancelled.
On the tension-coefficient route the reported quantity is a force per unit length while the row's unit is the force the specification declares for it, so the label and the number disagree there.
The order the joints were resolved in is computed and not shown. It is the part of the method a reader has to work out for themselves, and this screen reports the forces rather than the sequence that found them.
The joint table shows residuals, not forces. It says whether each joint balances; which member carries what is the model's own drawing, and there is no per-member row on this screen.
When the sweep does not close, the joint table has nothing to report and says why instead of showing rows of zeros — an empty table and a balanced truss must not look alike.
Reading the result
A zero-force member is not a useless member. It carries nothing under this load case, will carry something under the next, and may be the only thing holding a long compression chord to its length. Removing it because a screen called it zero is the classic misreading, and it is why the count of them is reported rather than a list of members to delete.
The second misreading treats the determinacy count as a certificate. It compares totals and cannot see arrangement or geometry, so a truss can count as determinate and still be a mechanism; the count and the solver's verdict are shown together for that reason.
Read the joint table as zeros, not as small numbers. The residuals are the difference of terms of the order of the applied loads, so on a truss loaded in tens of kilonewtons a residual of a few thousandths of a newton is round-off and a residual of one newton is not. A row that is not small compared with the loads means the sweep closed on something that does not balance, and every force above it should be treated as unproven.
The reported member force is the largest by magnitude and keeps its sign. Check it against the chord and diagonal one-liners above: a chord force that is not roughly the moment over the depth means the geometry or the load was entered differently from the way it was pictured.
Error. This structure is a mechanism, or so close to one that it cannot be solved. Add restraint or a member.
Construct reciprocal member-force vectors and a closed equilibrium polygon at every resolvable joint.
Σ F_j= 0, l_(ab)=s |N_(ab)|
Basis
Two figures are reciprocal when every line of one is parallel to a line of the other, and every closed polygon of one corresponds to a point of the other. For a loaded truss the space diagram and the force diagram are such a pair: each member appears once in each, the two lines are parallel, and the length in the force diagram is the member force at whatever scale the drawing was set to. A joint being in equilibrium and a polygon closing are the same statement.
Derivation
Start from the joint. Its member forces and its applied load sum to zero, so laid head to tail they form a closed polygon. Each member's force vector is its magnitude times its own unit vector, which is exactly the tension coefficient times the coordinate difference along the member: N times (dx, dy) over L is t times (dx, dy). So the force polygon around a joint is that joint's members, each drawn parallel to itself and stretched by its own coefficient.
That is the whole reciprocity, and it says what the tension coefficient is for. It is not an intermediate on the way to a force; it is the scale factor between a member's line in the space diagram and the same member's line in the force diagram. Two members with the same coefficient draw to lengths in the same ratio as their real lengths. Doubling every load doubles every coefficient, so the force diagram grows uniformly and no direction in it changes — the shape of the force diagram belongs to the geometry alone, and the load only sets its size.
Building the diagram economically is the other half of the classical construction. Label the spaces between the external forces and between the members rather than the members themselves, so each member is named by the pair of spaces it separates; the force diagram then has one point per space, and each member's line is the segment between its two points. Every member is drawn once even though it belongs to two joints, which is what makes the whole diagram smaller than the sum of its polygons.
The construction inherits the sequencing constraint of the method of joints, because it is that method drawn rather than written: each new polygon can be closed only if it has at most two unknown directions left. A truss with no such starting joint has no drawing order, and the construction stops at a nameable joint rather than producing a wrong figure.
N_(ij)=N_(ij) e_(ij)=t_(ij) (x_j-x_i, y_j-y_i)
\|ab\| ∝ |N_(ab)|
Σ_(at a joint) N + P = 0 ⇔ the polygon closes
t_(ij)=(N_(ij))/(L_(ij))=(length in the force diagram)/(length in the space diagram)
Assumptions
The truss is planar, pin-jointed and determinate, so that a drawing order exists at all.
Loads act at joints, since a load along a member has no single line in the force diagram.
The two figures are drawn at fixed scales, one for length and one for force, and every reading depends on both.
Tension is positive, and which way round a member's line is traversed is what carries that sign.
Takes
Unit
Meaning
nodes
mm
Node coordinates of the model.
members
—
Which two nodes each member connects, and which section and material it uses.
loads
N
Node loads and member loads making up the load case.
Gives
Unit
Meaning
force_diagram
N/mm
The largest tension coefficient (force over member length) among the truss members, the same quantity the drawing colours by.
N_forces
N
Axial force in each member of the truss, tension positive.
What must always be true here. Each of these is a test in the suite, not a remark:
Every member appears exactly once in the force diagram, and its length there is proportional to its force.
The polygon around each joint closes, because the joint is in equilibrium.
Forces read off the diagram match the analytic solution to within the stated drawing scale.
Scaling every load by the same factor scales the whole diagram by that factor and changes no direction.
Where it stops.
The construction only works for a truss whose joints can be resolved one at a time; a complex truss stalls, and the screen must say which joint it stalled at.
Solution method
The composition layer constructs one scaled force vector per member and one head-to-tail equilibrium polygon per joint. It first requires a valid joints sweep, so a complex truss reports the same named stall rather than receiving a partial diagram. Every member-vector length is the analytic member-force magnitude times the requested drawing scale, and every joint polygon includes its applied load and reaction vectors before its member vectors.
The coefficients come from the solved axial forces rather than from a drawing, so the numbers on this screen carry the precision of the solution and not the precision of a construction. That is the right way round: a graphical answer's accuracy is set by the sharpness of the pencil, and there is no reason to inherit that when the same relations can be evaluated.
Limitations
The reciprocal polygons are available as headless vector data; their final screen rendering remains part of interface acceptance rather than mechanics verification.
The construction, and therefore the reasoning behind this screen, applies only to a truss whose joints resolve one at a time; a complex truss has no drawing order.
Nothing here handles loads applied between joints, which have no single line in either figure.
Reading a force from a graphical construction carries the error of the scale and the drawing; the classical method is worth about three significant figures at best, and that is a property of the method rather than of this implementation.
Reading the result
The commonest error is a scale error, and it is silent. A force diagram is two scales at once, and a line measured with the length scale instead of the force scale gives a plausible number in the wrong units. On this screen that error is impossible because nothing is measured, which is also the reason the screen cannot teach the discipline of keeping the two apart.
The second is expecting the diagram to change shape when the load changes size. It does not: scale every load by the same factor and the whole diagram scales with it. If the shape does change, the load pattern changed, not its magnitude — and that distinction is the fastest way to check that a model was edited the way it was meant to be.
How far a chosen joint moves, from the member forces you already have.
δ=Σ_i (N_i n_i L_i)/(A_i E_i)
Basis
The principle of virtual work says that for any force system in equilibrium and any displacement field that is compatible with the supports, the external work of the first through the second equals the internal work of the first through the second. The two systems need have nothing to do with each other, and that freedom is the whole method: choose the force system to be a single unit load at the point and in the direction you want an answer for, and the equation reads off the displacement there.
Derivation
Put a unit force at the chosen joint, in the chosen direction, and nothing else on the structure. Call the resulting member forces n; they are in equilibrium with that unit load by construction. Take the real structure's extensions, e = N L / (A E), as the compatible displacement field. Virtual work then reads: one times the displacement equals the sum over members of n times e. So the displacement is the sum of N n L / (A E). No differential equation is solved and no calculus appears — the result rests on equilibrium and compatibility alone, which is why it works on a truss of any shape rather than on the handful of spans that have printed formulas.
The shape of the term says which members matter. It is a product, so a member contributes only if it works in both systems: one carrying nothing in either adds exactly nothing however slender it is, and the members that dominate are those loaded hard in both, not those that happen to be long.
The second route is energy. Strain energy is a quadratic form in the applied loads, and its derivative with respect to a load at a point is the displacement of that point along that load. The load need not already be there: adding a dummy load of plus and minus h and differencing about zero gives the same answer. And because the energy is quadratic, a central difference has no truncation error at all — its error term involves the third derivative, and a quadratic has none. The derivative is exact to round-off, not accurate to a step size.
The third route reads the movement straight off the solved displacement vector. Three routes, one number, sharing only the geometry.
δ=Σ_i (N_i n_i L_i)/(A_i E_i)
e_i=(N_i L_i)/(A_i E_i)
U=Σ_i (N_i^2L_i)/(2A_iE_i)=Σ_i ½ N_i e_i=Σ_j ½ P_jδ_j
δ=(∂ U)/(∂ P) ≈ (U(+h)-U(-h))/(2h) (exact for a quadratic)
Assumptions
The material is linear elastic and the structure returns to where it started, since both routes rest on the energy being a quadratic form.
Members are pin-ended and carry axial force only, so a member's contribution is one term rather than an integral.
Displacements are small: the virtual forces are those of the undeformed geometry, and the answer is used on that same geometry.
The virtual system is the same structure — same nodes, same members, same supports, same releases — carrying only the unit load. A virtual system that differed anywhere else would answer no question at all.
The unit load fixes both the point and the direction, and a positive answer is a movement along it.
Takes
Unit
Meaning
members
—
Which two nodes each member connects, and which section and material it uses.
N_forces
N
Axial force in each member of the truss, tension positive.
A
mm²
Cross-sectional area — the amount of material you would see if you sliced the member straight across.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
L
mm
Length of the member along its own axis, support to support.
dof
—
The single degree of freedom the answer is asked about — one node and one direction, which is exactly what a unit load picks out.
Gives
Unit
Meaning
delta
mm
Deflection — how far a point has moved from where it started.
u_vec
mm
Displacements of every free degree of freedom in the model.
U_energy
N·mm
Strain energy — the work stored in the material as it deforms, and the same number as the work the loads did putting it there.
W_ext
N·mm
Work done by the applied loads as they are put on gradually, which is half what their full value times the movement would suggest.
Choices you have to make. The app shows these rather than picking one:
along x, along y — A joint moves in two directions at once and a unit load reports only one of them. Which one is a choice the reader has to make, and a reader who does not make it deliberately will read a horizontal movement as a vertical one.
What must always be true here. Each of these is a test in the suite, not a remark:
The virtual-work displacement matches the matrix-stiffness displacement exactly for the same truss, and the two routes share only the geometry.
The energy stored in the members equals the work the joint loads do as they are put on gradually, and the same energy comes out again from force and extension instead of from force alone.
A rigid-body translation of the whole truss produces no member extension and no relative displacement.
Doubling every member area halves every displacement, because each term carries the area in its denominator and nothing else changes.
Members with the largest force and the smallest axial stiffness dominate the movement, so raising every member force in proportion raises the displacement in the same proportion.
Where it stops.
Members with zero force under both the real and virtual load cases contribute nothing, however slender they are.
A joint held by a support does not move that way, and the sum returns exactly zero rather than the round-off of a near-cancellation.
Solution method
The unit-load case is the real model with its loads replaced by a single unit force, solved by the same routine. There is no guard on that second solve: it differs from the first only in its right-hand side, and whether a solve succeeds depends on the supports and the stiffness matrix, so it succeeds exactly when the real one did.
The terms are summed and compared against a noise floor, which is a bound rather than a tolerance somebody picked. Summing a list has a rounding error no larger than the count times the machine epsilon times the sum of the magnitudes, and each term here is a product or quotient of five numbers, so anything smaller than that bound is made entirely of round-off and is returned as exactly zero. The interesting cases are the cancelling ones: a movement that is zero by symmetry is a cancellation of terms very much larger, and printed raw it reads as a tiny answer rather than as no answer.
A direction a support holds is answered zero and labelled held. A continuous beam is held vertically at every node it has, and a reader who opens a deflection screen on one and sees zeros everywhere is looking at a correct answer.
The sum is the method: real force times virtual force times extension, added across every member. That breakdown is now under the results, one row per member — real force, virtual force, extension, the term, the member's stored energy — and the fourth column sums to the displacement above it. The rows are where a reader sees that two members carry all of the movement, or that the one they were worried about contributes nothing at all, neither of which a single number can say. On the shape this screen opens on there are seventeen of them.
The direction is a control rather than an assumption. The same joint gives a different answer along each axis, often by orders of magnitude, and the table's own heading names the node and the direction the rows were computed for, so a table read out of context still says what question it answered.
Limitations
Axial deformation only. Shear deformation of the members is not included, which understates the movement of a very stubby truss.
One direction at a time: a joint moves in two at once, and a unit load reports only the one it was applied along.
Joint slip, bolt take-up and connection flexibility are not modelled, and in a real bolted truss they are frequently larger than the elastic term computed here.
The answer is exact for the model, not for the truss: it inherits every idealisation of the pin joints and of the member areas entered.
The member table is a truss idea. On a frame shape a member carries bending as well, so its share of the movement is an integral along its length rather than one row, and the table says so instead of showing rows.
Reading the result
Read the sign against the unit load, not against the page. Reversing the unit load reverses the sign without changing the size, so a negative number means the joint moved opposite to the direction asked about and nothing more.
This module is one of the few here with an independent second source, and the cross-check is worth knowing about because of how it failed. A public-domain US Air Force structures manual prints a worked truss with a table of the individual member terms and their total. The terms are right and reproduce here to their printed three figures. The total is not: the listed terms sum to 10.44 thousandths of an inch, and the total beneath them reads 9.44. The project stores the items and the total as separate fixture rows for that reason — a fixture comparing only totals would have condemned this code, and one comparing only items would have found nothing at all.
The two routes agreeing is the result, not a formality. delta, the unit-load sum, and u_vec, the stiffness solution, have almost no algebra in common, so when they land on the same number the model has been checked, and when they do not the disagreement points at the assembly rather than at the sum. A third route exists in the kernel -- Castigliano's theorem, the energy derivative -- but it is the energy-methods screen that offers it as a switchable second way to compute delta; this screen always takes the unit-load sum.
Choose a structural family and set its parameters; the nodes, members, supports and loads follow from the shape.
topology: e↦(n_i,n_j,section,material)
Basis
To a matrix method a structure is a graph carrying numbers: node coordinates, members each naming two of those nodes with a material and a section, which directions are held at which nodes, and loads. Every later result derives from that description and from nothing else, so it has to be well formed before there is any point asking what the structure does. This module is where it is made and where it is checked.
Derivation
Well formed means three things at once. Every member names two distinct nodes that exist. No two nodes share coordinates, because a member of zero length has infinite stiffness and there is nothing useful to do with that afterwards. And the count of directions the structure can move in follows from the node count and the model type alone -- three per node for a frame, two for a bar model -- less the directions the supports hold.
The screen's name says canvas and there is no drawing surface behind it. The app offers ten parametric families instead: a continuous beam of N spans, a simply supported beam cut into segments, a beam bedded on the ground, a pin-ended column, a portal frame, and five plane trusses -- three-bar, Pratt, Howe, Warren and cantilever. A reader picks a shape and gives it three or four numbers; the nodes, members, supports and loads follow from the shape. A structure outside those ten is not expressible, and the app names the ten rather than implying it takes anything.
Generation disposes of part of the well-formedness question outright. A builder writes member indices it has just created, so a dangling reference cannot arise. Every length a family declares is meant to carry a positive lower bound in its own parameter -- five hundred millimetres for a span, three hundred for a height -- but that bound is a declared default range, not an enforced one: the field that reads it is a free-form number entry with no clamp of its own, and the builder does not re-check the number it is handed against the range that suggested it. A span of zero is accepted and produces exactly the coincident nodes the paragraph above says cannot arise. What does run is a separate, coarser check -- literally zero or negative, not below the suggested minimum -- shown as an orange caption beside the family picker; it does not block construction, and a reader can still see a report built from the degenerate model beneath it. The report itself is not dangerous: the free-degree-of-freedom arithmetic below still runs, and a solve attempted on a coincident-node model is caught downstream as a mechanism rather than returned as a plausible number -- but the rejection this derivation describes as happening "at the moment of typing" does not, in fact, happen there.
What is left to report is the free degree-of-freedom count, and the interesting thing is what it cannot see. It is arithmetic on holds, not on stiffness. A released member end does not lower it: the release is condensed into that member's element matrix, and the node's rotation survives as a degree of freedom held by whatever else reaches the node. A spring does not lower it either -- a sprung direction is free and merely carries a diagonal term. The count describes the model; it does not judge it.
The structure is planar, and every node carries the same directions as every other: two for a bar model, three for a frame.
Members are straight between their two nodes, so a curved member has to be described as several straight ones.
Geometry is described in the plane the loads act in, with x to the right, y up, and rotations anticlockwise.
Material and section belong to the member rather than to the node, so a change of section along a span is a change of member.
Takes
Unit
Meaning
nodes
mm
Node coordinates of the model.
members
—
Which two nodes each member connects, and which section and material it uses.
supports
—
Which degrees of freedom are held, and any settlement imposed on them.
loads
N
Node loads and member loads making up the load case.
Gives
Unit
Meaning
topology_ok
—
Whether the model is connected and restrained well enough to be solved at all.
n_dof
—
Number of degrees of freedom in the model.
What must always be true here. Each of these is a test in the suite, not a remark:
Every member refers to two distinct existing nodes.
The degree-of-freedom count equals three times the node count for a frame and two for a truss, before supports are applied.
Deleting a node deletes every member that referred to it, leaving no dangling reference.
Adding a node without adding a member raises the degree-of-freedom count and creates a mechanism.
Where it stops.
Two nodes at the same coordinates give a member of zero length and an infinite stiffness; the input must be rejected at the moment of drawing, not at the moment of solving.
Solution method
Each family declares its own parameters with a range, and a count is clamped inside the range that family declares rather than a shared one. Not pedantry: every family happened to reuse the same panel-count parameter, so a family declaring a different range would have been quietly clamped to somebody else's, and the node and member caps were left unreachable because the shared range already sat inside them.
The caps are forty nodes and eighty members, and a model that would exceed them is refused outright -- not solved coarsely, not silently reduced to fit. A model reduced to fit answers a question nobody asked, and the reader cannot tell it was substituted. The refusal reaches the interface as a column of dashes labelled "too large", deliberately not the same label as "not yet": one is a limit the app declares, the other is work that has not been done. The caps also bound the solver, whose factorisation is dense and hand-written so that it transliterates into the Apple implementation; at forty nodes that costs nothing.
Limitations
Only the ten families can be described; an arbitrary shape has no representation here at all.
The degree-of-freedom count knows about supports but not about releases, springs or geometry, so it cannot tell a stable structure from a mechanism.
A model over the node or member cap is refused rather than approximated, and no partial answer is offered for it.
The report says a model exists; it does not say the model is the one the reader meant.
A family's declared parameter range is a suggestion to the reader, not an enforced bound: the number field accepts anything, and construction does not re-check what it is given. A span or height of exactly zero or below is caught by a separate, visible warning; a small positive value far below the suggested range is not, and produces a real but extreme model rather than a refusal.
Reading the result
Read this as a report on the description, not a verdict on the structure. It answers two questions -- does this shape exist, and how many directions is it free to move in -- and the second is not a stability measure. A free count above zero is normal; a free count of zero is a legitimate structure, since a span built in at both ends has no free node at all. Whether the thing stands up is the solver's answer, reached by a different mechanism.
The trap is the direction the count moves in. Adding a node without adding a member raises the free count and makes the structure worse: the new node can move and nothing resists it. A rising number here is not progress. And the refusal message is about the caps, not the physics -- a panel count the app declines is one above forty nodes, not a truss that cannot stand.
Implemented by build, refusal, parameters_for, opening_for, member_length, evaluate_structure.
Linear Solve & Results
Assemble, restrain, solve and recover: displacements, reactions, member end forces and every diagram.
Equilibrium is written at every degree of freedom, and every member's end forces are written as a linear function of that member's end displacements. That substitution -- force expressed through displacement -- turns the structural problem into one square system whose size is the number of degrees of freedom. It is also why indeterminacy stops mattering: the equations count directions the structure can move in, not redundant restraints, so a beam with one redundant and a beam with nine cost the same.
Derivation
In its own directions a bar element has one number, EA/L. A frame element has five: EA/L along the member, 12EI/L cubed and 6EI/L squared tying transverse movement to itself and to rotation, and 4EI/L and 2EI/L for rotation at the near and far ends. The direction cosine and sine come from the node coordinates and the length, and the element in global directions is the triple product of the transformation with the local matrix. Assembly adds each element into the rows and columns its own degrees of freedom occupy; a spring at a support adds one diagonal term, having only one end free to move.
A load applied along a member is not a nodal load. Uniform, concentrated and triangular each become the equivalent nodal forces that would hold the member's ends if they were built in, added to the right-hand side; the end shears follow from statics on that pair rather than from a second published coefficient per shape. The half that is easy to forget is the second: the same vector is subtracted again when that member's end forces are recovered. Omit it and the moment diagram is exactly right at every node and wrong everywhere between -- a straight line where the parabola belongs, and on a uniformly loaded simple span the peak moment disappears altogether, both end moments being zero with nothing left in between. The give-away is precisely that the nodes are right.
A release is a hinge in one member at one end, and it belongs to the member rather than the node: three bars meeting at a point with one of them pinned is an ordinary detail no node-level flag can describe. A released member gets the propped entries -- 3EI/L cubed, 3EI/L squared, 3EI/L, a quarter of the transverse stiffness and three quarters of the rotational -- with a zero row and column at the released rotation, so whatever else meets the node sets it. Its fixed-end moments carry over exactly rather than being looked up: releasing an end applies the opposite of its moment there, and half arrives at the other end.
A support on a sloping plane is held perpendicular to the plane and free along it, and neither is a global direction. Rather than invent a support type, that node's own axes are turned: matrix and load vector are pre- and post-multiplied by a rotation that is the identity except at this node's two translational directions, the system is solved in the turned axes, and the displacements and reactions are turned back before being shown. Held directions are moved to the right-hand side rather than struck out, which is what makes a prescribed settlement produce reactions in an indeterminate structure and none in a determinate one.
Three of the four paragraphs above describe the assembly rather than this screen, and the difference matters to a reader trying to reproduce them. A structural screen's inputs are the chosen shape's — a span count, a span, an intensity, a modulus, a section — and none of the ten shapes on offer declares a release, a sloping support, a settlement, or a span load that is anything but uniform. So the release entries, the rotated axes and the point and triangular fixed-end moments are carried, fixture-checked and reachable through the library, and are not reachable from this screen. The two choices the canon declares here — bar against frame element, and span load perpendicular against vertical — are in the same position: every shape offered is built as one or the other, and the controls beside them do not move it.
Ku=f, R=Ku-f
K_e^g=G^(T)K_eG, c=(x_j-x_i)/(L), s=(y_j-y_i)/(L)
K'=R_θ^(T)KR_θ, f'=R_θ^(T)f
s_e=K_eGu_e-f_e^( 0)
(3EI_x)/(L^3), (3EI_x)/(L^2), (3EI_x)/(L) in place of (12EI_x)/(L^3), (6EI_x)/(L^2), (4EI_x)/(L)
Assumptions
Displacements are small enough that equilibrium may be written on the undeformed shape, and the material is linearly elastic, so responses superpose and loads may be scaled.
Plane sections remain plane and shear deformation is neglected, which is what makes a member's transverse stiffness 12EI/L cubed rather than something smaller.
Each member is prismatic between its two nodes, because the element entries are integrals of constants along it.
Joints are rigid except where a release is declared on a member, and a support is either free or held, with no friction in between.
Loads are applied slowly enough that no inertia enters, and self weight appears only if entered as a load.
Takes
Unit
Meaning
nodes
mm
Node coordinates of the model.
members
—
Which two nodes each member connects, and which section and material it uses.
supports
—
Which degrees of freedom are held, and any settlement imposed on them.
loads
N
Node loads and member loads making up the load case.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
A
mm²
Cross-sectional area — the amount of material you would see if you sliced the member straight across.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
release
—
Which member ends are released so they carry no moment.
q
N/mm
Distributed load intensity — force per unit length along the member.
theta_s
rad
Slope of a support's held direction, measured anticlockwise from horizontal. Zero is an ordinary support; anything else is a roller on a ramp.
Gives
Unit
Meaning
u_vec
mm
Displacements of every free degree of freedom in the model.
R_vec
N
Reaction forces and moments at every restrained degree of freedom.
diagram_N
N
Axial force along the member.
diagram_V
N
Shear force along the member.
diagram_M
N·mm
Bending moment along the member.
K_g
N/mm
Global stiffness matrix — the assembled relation between every displacement and every force in the model.
cond
—
Condition number of the solved matrix — how much the answer can move for a small change in the input.
Cases this screen covers without asking. Both sides of each of these are handled by the code, so there is no control for them:
bar, two degrees of freedom per node, frame, three degrees of freedom per node — A bar model of a frame silently drops all bending; the answers differ by orders of magnitude.
perpendicular to the member, vertical — On a tilted member the two are different loads. Self weight and floor load are vertical; wind and snow on a slope act on the surface. Choosing silently would put a roof load in the wrong direction on every pitched member.
What must always be true here. Each of these is a test in the suite, not a remark:
The reactions balance the applied loads in both directions and in moment about any point.
The stiffness matrix is symmetric, and positive definite for any properly restrained structure.
The work done by the applied loads on the solved displacements equals twice the strain energy stored.
For a statically determinate structure the matrix solution reproduces the statics solution exactly.
A load applied along a member is replaced by equivalent nodal forces to solve with and added back when the member's end forces are recovered, so the moment diagram curves between the nodes rather than running straight between them.
A released member end carries no moment, while other members meeting at the same node still do.
A support on a sloping plane reacts normal to that plane and the node moves along it; global equilibrium still closes in both directions.
Stiffening one member draws load toward it and away from the others.
Imposing a support settlement produces reactions in a determinate structure of exactly zero, and non-zero reactions in an indeterminate one.
Releasing a member end lowers its transverse stiffness to a quarter and its rotational stiffness to three quarters, so the structure deflects more.
Where it stops.
Slender members put the axial and bending stiffness terms many orders of magnitude apart in the same matrix; the condition number must be reported and a warning raised before the displacements lose their significant digits.
An unrestrained or under-restrained model gives a singular matrix, and a nearly singular one gives huge displacements that look like output; both must be caught before the solution is shown.
A model with no free degree of freedom is a legitimate one -- a built-in span is exactly that -- and must return its reactions and member end forces rather than only a status.
Solution method
The system is factorised by hand into a unit lower triangle and a diagonal -- the indefinite factorisation, because a model with a released end or an unheld direction is not positive definite and that state must be survived and described rather than crashed on. A zero pivot is left as zero rather than nudged, so the solve returns not-a-numbers and a status of mechanism instead of displacements of order ten to the fifteenth that look exactly like results.
Two numbers travel with every answer: the smallest pivot over the largest, and its reciprocal as a condition estimate -- a lower bound, never larger than the truth. Above ten to the tenth the status becomes ill-conditioned. That is a status and not an error because nothing failed: the equations were solved, and what has gone is the meaning of the small digits. Two situations produce it. A slender member puts EA/L many orders of magnitude above 12EI/L cubed in the same matrix, so the elimination subtracts nearly equal numbers and the bending digits are lost long before anything looks wrong. A structure a hair away from being a mechanism has one pivot that nearly cancels, so the ratio explodes although no pivot is exactly zero. Both transitions are gradual, which is why a number saying how far along one you are beats a verdict.
A model with every degree of freedom held is legitimate -- a span built in at both ends is exactly that -- and returns reactions and end forces, not only a status. A reaction is a cancelling sum of two large and nearly equal terms, so a true zero returns as whatever is left over; anything under a derived round-off floor is set to exactly zero, being no force rather than a small one.
Limitations
This is a first-order analysis: axial force does not change a member's bending stiffness, so a heavily compressed member is treated as being as stiff as an unloaded one.
The condition estimate is a lower bound from the factorisation diagonal, so a comfortable value is not proof of a well-conditioned matrix -- only an alarming one is proof of a bad one.
Member end forces are exact at the nodes, and exact between them only for the span-load shapes the fixed-end relations cover; anything else has to be posed as more members.
A support on a spring produces no entry in the reactions vector at all, because that direction is free rather than held.
Models above forty nodes or eighty members are refused, so a finer mesh is not available as a way of improving an answer.
Releases, sloping supports, prescribed settlements and non-uniform span loads are assembly capabilities rather than screen ones. The structure comes from one of ten parametric shapes, and none of them declares any of the four, so the paragraphs above that describe them describe what the solver would do rather than what this screen can be made to do.
The element type and the span-load direction are declared as choices in the canon and shown as controls, but each shape is built as one or the other and the controls do not move it: a truss shape solves as a bar model and a beam or frame shape as a frame model, and a member load is applied perpendicular to its own member.
Reading the result
The reactions vector answers one question -- what force does a held direction carry -- and a support on a spring holds nothing. That direction is free, so the vector has no reaction there, only the residue of a cancelling sum: read alone it says a beam on springs carries nothing, in a convincing five times ten to the minus eight rather than an obvious blank. What holds a node is asked separately, as the reaction where the direction is held and the spring rate times the movement, opposite in sign, where it is sprung.
If the moment runs straight between the nodes of a member carrying a distributed load, the equivalent nodal forces were put on and never taken back off, and the diagnostic is that the node values are exactly right. Signs are fixed throughout, tension and sagging positive, and the displacement reported keeps its sign, because a magnitude and a signed value must never share a symbol between screens.
Ill-conditioned does not mean wrong. It means the small numbers here have lost their significant digits, and the remedy is almost never a looser tolerance. It is the model: a member orders of magnitude too slender for the frame it is in, or a structure so nearly a mechanism that it would be better fixed than solved.
Advisory. This model ignores shear deformation, so a stubby member will read stiffer than it really is.
Warning. Axial and bending stiffness in this model differ by so much that the displacements have lost accuracy. Check member proportions before trusting the small numbers.
Error. This structure is a mechanism, or so close to one that it cannot be solved. Add restraint or a member.
Two different things answer to the description "a support that gives", and keeping them apart is most of this module. A spring at a node resists one point moving: one rate, one entry, one direction. The ground under a beam resists every point of the member moving, in proportion to how far that particular point settles -- a distributed restraint, and therefore a matrix rather than a number. Both rest on the same premise, that the restraint is elastic and proportional to displacement, and they enter the assembled system in completely different places.
Derivation
A spring to ground connects a node to a point that does not move, so only one of its ends is a degree of freedom: a single term on that direction's diagonal and nothing off it. A held direction ignores its spring, because something that cannot move cannot stretch one. Two limits make it a support at all: as the rate grows without bound the result converges on the rigidly supported case, and as it falls to zero, on the unsupported one.
The ground is the bedded-beam model: pressure under the beam proportional to the settlement at that point, with a modulus in force per unit length of beam per unit settlement. Substituting it into the bending relation gives a fourth-order equation in which the ground term appears undifferentiated, and it is that equation, not a support condition, that governs.
Two routes follow. The element route integrates the restraint over each member using the same cubic shape functions the beam element itself uses, giving a consistent matrix added to the member's own entries. Sharing those shape functions is what makes the two compatible -- and what makes the same matrix inapplicable to a released member, whose shape functions are not those cubics. The combination is refused rather than silently dropped: a released member with a foundation returns a full matrix of not-a-number, which propagates to every screen built on it as a dash with a named reason, the same treatment this layer gives every other combination it cannot model. No shipping family produces the pair, so a reader building from the offered shapes will not meet it, but a canvas that let the two be drawn together would need to show the refusal rather than a number. Where it does apply, the foundation touches the four bending degrees of freedom and none of the axial ones: the ground resists the beam settling into it, not sliding along it.
The closed-form route answers a different beam -- an infinite one under a single concentrated load -- and answers it exactly. Everything is written in one decay parameter, the fourth root of the bedding modulus over four times the bending stiffness. Under the load the deflection is the load times that parameter over twice the bedding modulus, and the moment is the load over four times it: one-line values no transcription slip inside the bracketed factor can reproduce, which is why they are the anchor. The moment's sign is derived from the second derivative of the deflection rather than copied, because printed forms take the load as a magnitude and the deflection as positive downwards, flipping it twice.
The fourth root is the first surprise: sixteen times the bedding modulus only doubles the decay parameter and only halves the length over which the beam spreads its load, so soil stiffness is a weak lever on everything. The two zeros are the second. The moment first changes sign at a quarter pi over the decay parameter, and the beam first lifts off at three quarters pi over it -- three times as far -- so it is hogging over two thirds of the length it is still pressing down on, which is why a raft needs top steel. Neither distance depends on the load.
EI_x (d^4y)/(dx^4) + k_f y = q, β_f=⁴√((k_f)/(4EI_x))
The ground is a bed of independent springs: the pressure at a point depends on the settlement at that point and on nothing happening anywhere else, so no soil is dragged along beside the load.
The ground pulls down as readily as it pushes up, because the analysis is linear and the beam is never allowed to leave it.
The bedding modulus is constant along a member, and the member is prismatic.
A spring is linear, has no free play, and has the same rate in both directions.
The closed form describes a beam of infinite length carrying one concentrated load; the element route describes whatever was actually built.
Takes
Unit
Meaning
nodes
mm
Node coordinates of the model.
members
—
Which two nodes each member connects, and which section and material it uses.
loads
N
Node loads and member loads making up the load case.
k_spring
N/mm
Stiffness of a discrete spring support — force per unit movement, or moment per unit rotation.
k_found
MPa
Foundation modulus — force per unit length of beam per unit settlement.
L
mm
Length of the member along its own axis, support to support.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
support_kind
—
How the structure is held: rigidly, on springs, or by the ground under it.
Gives
Unit
Meaning
u_vec
mm
Displacements of every free degree of freedom in the model.
delta
mm
Deflection — how far a point has moved from where it started.
R_vec
N
Reaction forces and moments at every restrained degree of freedom.
beta_f
1/mm
Foundation decay parameter — the reciprocal of the length over which a disturbance dies away.
diagram_M
N·mm
Bending moment along the member.
M_x
N·mm
Bending moment about the horizontal axis.
x_lift
mm
Distance from the load at which a beam on soil first lifts clear of the ground.
Choices you have to make. The app shows these rather than picking one:
rigid supports, supports on springs — A support that gives is not a support that does not, and the difference is not small: putting a real bearing stiffness under a continuous beam can multiply its deflection by four figures. The ground under a beam is a third thing again -- it resists every point of the member rather than one node -- and it belongs to the shape rather than to this choice, because a beam bedded on soil is a different structure and not a differently supported one.
What must always be true here. Each of these is a test in the suite, not a remark:
As the spring stiffness grows without bound the result converges to the rigidly supported case.
As the spring stiffness falls to zero the result converges to the unsupported case.
The total upward force from the foundation equals the total downward load, whether it is summed over the elements or integrated under the closed form.
On a beam long enough for its ends not to matter, the element route and the infinite-beam closed form give the same deflection under the load.
The beam lifts off at three times the distance at which its moment first changes sign, so it is hogging over two thirds of the length it is still pressing down on.
A softer foundation spreads the load over a longer stretch of beam, which is a longer lever arm and therefore a larger moment -- so the peak moment falls as the foundation gets stiffer, in exact proportion to the fourth root of the modulus.
The decay parameter grows with the fourth root of the foundation modulus, so soil stiffness has a weak effect on the influence length: sixteen times the modulus halves it.
Where it stops.
The closed form answers the infinite beam, so it is refused below a threshold on the product of decay parameter and length; the element route answers any length and the screen says which one produced the number.
A beam in the air has no decay parameter at all, because there is nothing for a disturbance to decay into; the value is absent rather than infinite.
Solution method
The element route needs nothing beyond the extra matrix. The closed form is not solved but sampled: every quantity in it is a closed expression, so the stations are places to look and never places the accuracy depends on, which is what makes it legitimate to draw both routes on the same axes and mean something by the gap.
It is offered only where it answers the same question. The test is the decay parameter times the length, which is how long the beam is in its own units: a metre of rail and a metre of raft are not the same length to the ground under them. The threshold is pi rather than a rounder number, because that is where the closed form's own first deflection zero sits -- a beam that has not lifted off even once cannot be pretending to be infinite. Below it the values are named as absent rather than approximated, and where nothing is bedded there is no decay parameter at all: absent rather than infinite, since "there is no ground" and "the ground is infinitely soft" are different answers and only one is a number.
The same quantity drives an advisory in the other direction. Above a decay parameter times length of six the two ends of the beam no longer interact, and the screen says so: the semi-infinite solution is what is being used, and it is used to avoid the overflow that the full finite-length form runs into once the exponentials grow. The screen opens above that threshold, at about 12.4, so the notice is showing from the first moment — shorten the span to a third and it goes quiet. Until recently it could not appear at all: the guard was looked up by the canon's phrase for the quantity while the only caller handed over a dictionary keyed by symbol, so nothing ever compared the two.
The check the whole route rests on is that the soil must be carrying the entire load. It is the two translational rows of the foundation matrix times the solved displacements, member by member, from the same consistent matrix the solve used -- not a rule laid over the answer afterwards, which would agree with the beam it was reading and disagree with the beam that was solved. That number is wrong if the element count was too coarse, if the foundation entries went to the wrong degrees of freedom, or if the ends are still taking some of the load: three things at once, and no element count can fudge it.
Limitations
The bed-of-springs idealisation gives the soil no shear continuity, so it cannot show settlement spreading sideways beyond the beam.
There is no lift-off: past the contact length the model has the ground holding the beam down, which no soil does, and the moments there are wrong accordingly.
The closed form covers one concentrated load on an infinite beam only; a distributed load, a second load, or a short beam must go through the element route.
Below a decay parameter times length of pi the closed form is refused outright rather than approximated.
The bedding modulus is site data rather than a material property, and a value from a plate test does not transfer to a beam of a different width.
Reading the result
Read the total ground force against the total applied load first. If they differ, nothing else on the screen is worth reading -- and because that one number is wrong for three separate reasons, it is also the most informative thing there.
Element count matters here and nowhere else on a beam. On a beam in the air the element is exact for a uniformly loaded member, so cutting a span finer adds places to ask about and never adds accuracy. On a bedded beam the exact shape is not a cubic, the consistent foundation matrix is an approximation, and refining the cut genuinely does move the answer. A reader who learned on the first case will assume the second behaves the same way.
Choosing supports on springs while looking at the bedded shape changes nothing, and that is not a fault: that shape has no vertical hold to convert into a spring, the soil being what holds it up. The spring reaction, where there is one, is not in the reactions vector -- a sprung direction is free.
Two results reliably surprise people. How soon the hogging starts: less than a quarter of a characteristic length from the load, the moment has already changed sign. And which way the moment moves: a softer bed gives larger moments, not smaller, because it spreads the load over a longer stretch of beam, and a longer spread is a longer lever arm.
Advisory. This beam is long enough on this soil that the two ends no longer interact; the semi-infinite solution is being used to avoid overflow.
An indeterminate structure has more unknown forces than equilibrium can decide, and the equations that make up the difference are always compatibility statements: assertions about how the structure still fits together after it has deformed. There are two ways to supply them and they are duals. Take the displacements as unknown and write equilibrium in terms of them -- slope- deflection. Take the redundant forces as unknown and write compatibility in terms of them -- the force method. Both are here because a reader who can only get an answer one way has no means of telling a right answer from a plausible one.
Derivation
Slope-deflection writes the end moments of a prismatic member built into its joints as a linear function of the two end rotations and of the relative transverse movement of the ends. Three terms do the work. The near rotation appears twice, because it both bends the member and returns as a carry-over; the far rotation appears once, which is that carry-over; and the sway term subtracts the rigid-body rotation of the chord, so the rotations are measured from the member's own line rather than from the ground. The fixed-end moment is added last, being what the member would carry if its ends did not move at all.
Where those numbers come from is what makes this a check rather than a repetition. The end rotations are the ones the solver already found -- a rotation is the same number in either frame and needs no transformation, while the transverse movement is not and is resolved into the member's own directions. The fixed-end moments are not re-derived from the load shape: they are the equivalent nodal loads the assembly already forms, negated, because those are what the load puts on the structure and a fixed-end moment is what the structure puts on the member. Deriving them twice would be a second place to be wrong.
So slope-deflection cannot catch a wrong displacement; it uses the same ones. What it catches is a wrong recovery -- a sign flipped in the rotation transform, a fixed-end moment added where it should have been subtracted. A narrow check, but a real one, taken as a relative gap against the largest moment in the structure so that a member carrying nothing cannot dominate the number.
The force method goes the other way and shares almost nothing with the solver. Remove enough restraints to leave a structure statics can handle -- the primary structure. Under the real load alone each released point moves some distance; under a unit force at one released point, every released point moves some distance. Superposition then requires the redundants to put each released point back exactly where its support holds it, which is one linear system whose matrix is made of those unit-load displacements. Every coefficient in it is a displacement of the released structure, so the method introduces no new mechanics -- only the same question asked once per redundant.
That is what catches the errors the first check cannot. It never forms the whole structure's stiffness matrix; it solves a different structure several times and arrives at the same reactions, so a wrong stiffness entry survives the first check and not the second. It carries an internal check too: the matrix of unit-load displacements is symmetric by the reciprocal theorem, a statement about the released structure rather than about the arithmetic that follows.
M_(AB)=(2EI_x)/(L)(2θ_A+θ_B-(3Δ)/(L))+M^F_(AB)
Σ_j f_(ij)X_j+Δ_(i0)=0
f_(ij)=f_(ji)
R=R_0+Σ_i X_i R_i^((1))
Assumptions
The material is linearly elastic and displacements are small, so responses superpose -- the force method is nothing but superposition and is unavailable otherwise.
Members are prismatic and rigidly built into their joints, which is the only member the slope-deflection relation describes.
The chosen redundants leave a stable primary structure; releasing into a mechanism is a modelling error rather than a numerical one.
Sign conventions match the matrix route's member end forces exactly, so the two can be compared with no convention standing between them.
Only vertical holds are released to form the primary structure, so the redundants available are vertical reactions.
Takes
Unit
Meaning
nodes
mm
Node coordinates of the model.
members
—
Which two nodes each member connects, and which section and material it uses.
loads
N
Node loads and member loads making up the load case.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
method
—
Which of the module's solution routes is being used.
release_choice
—
Which set of redundants the force method releases — the answer must not depend on it.
Gives
Unit
Meaning
M_x
N·mm
Bending moment about the horizontal axis.
u_vec
mm
Displacements of every free degree of freedom in the model.
R_vec
N
Reaction forces and moments at every restrained degree of freedom.
n_redundant
—
Degree of static indeterminacy — how many forces you would have to guess before statics could finish the job.
Choices you have to make. The app shows these rather than picking one:
slope-deflection, force method — Two routes that share almost nothing: one writes each end moment from the joint rotations the solver already found, the other never forms a stiffness matrix at all and solves the released structure once per redundant. They must agree, and watching them agree is the check.
What must always be true here. Each of these is a test in the suite, not a remark:
The slope-deflection solution and the matrix solution agree to machine precision for the same model.
The force method result is independent of which redundants you choose to release.
The flexibility matrix is symmetric, which is Maxwell's theorem and therefore a check on the released structure rather than on the arithmetic that follows.
The force method reaches the same reactions as the stiffness solution without ever forming the structure's stiffness matrix.
Scaling every member's stiffness together leaves every moment exactly where it was and divides every displacement by the same factor: in a structure of uniform stiffness the moments depend on the ratios of the members' stiffnesses and not on their size, which is why a redundant frame can be analysed before its sections are chosen.
Releasing a redundant that carries little force barely changes the compatibility equations, and doubling every load doubles every redundant, because the structure is linear.
Where it stops.
Choosing a set of redundants whose release turns the structure into a mechanism makes the flexibility matrix singular; the choice must be checked before the equations are formed, and the screen reports the refusal rather than a number.
The slope-deflection equation describes a member built into its joints, so a member with a hinge in it has no end moment to report and returns nothing rather than a number that looks like one.
The slope-deflection equation is written for a member carried only at its ends, so a member on an elastic foundation has no end moment it can report: the ground carries part of what the equation would attribute to the joints, and the error is a couple of per cent rather than a factor -- small enough to read as round-off.
Solution method
Slope-deflection is one scalar evaluation per member end, taken from the solved displacements. It returns nothing rather than a number that looks like one in two cases: a hinged end carries no moment, and a member bedded on the ground has no end moment the relation can give, the ground carrying part of what the relation attributes to the joints. The second is the dangerous one, wrong by a couple of per cent rather than by a factor and so small enough to read as round-off. It was caught only because agreement between the two routes is required to nine decades -- a tolerance loose enough to feel comfortable would have shipped a classical relation quietly answering a different beam.
The force method builds the primary structure by removing vertical holds only. A support that also stops the beam sliding sideways keeps doing that, because releasing it would make the structure a mechanism in a direction the load never asks about, and the resulting singularity would have nothing to do with the redundants being chosen badly. The unit-load matrix is built one column at a time and transposed on the way out, a unit load being applied at one place and read at many: one solve per redundant rather than one per pair.
The singularity test is the elimination itself rather than a pivot ratio taken beforehand -- an earlier pre-check never fired, because a singular matrix makes that ratio zero rather than not-a-number, and the real detection was the finiteness check underneath it.
Three release choices are offered, and the third is a trap on purpose: it releases every vertical hold there is, leaving the beam floating and the matrix singular. It is offered rather than prevented because releasing too much is the mistake this method invites, and a declared boundary a reader cannot reach is only a sentence in a manual.
Limitations
Only vertical holds can be released, so a redundant member force or a redundant internal moment is not a choice this screen offers.
The force method reports the vertical reactions at the held nodes; horizontal reactions and end moments are not part of what it returns.
Slope-deflection reports nothing for a released member or a bedded one, and a structure made entirely of such members produces no moment at all.
Both routes are linear elastic and say nothing about what happens once a section yields.
Agreement between the routes is evidence that the recovery is right; it is not evidence that the model is the one the reader meant.
Reading the result
The content of this screen is the agreement, not either number alone. Flipping the route swaps both readings to the other method and neither moves. If they do disagree, look at the recovery rather than the solve: slope-deflection reads the same displacements the matrix route produced, so a disagreement is downstream of them.
A dash here always carries its reason, and the reasons are not interchangeable. "No member here carries a moment to report" means every member is released or bedded. "Releasing those leaves a mechanism" means the third release choice was taken. "Nothing to release: already determinate" means the beam has no redundant to find.
The thing most often got wrong about the force method is that the answer might depend on which redundants were released. It does not. Two readers releasing different supports on the same beam get the same beam, and if they do not, one of them released into a mechanism.
The thing most often got wrong about the moments is the role of stiffness. Scaling every member's stiffness together leaves every moment exactly where it was and divides every displacement by the same factor: in a structure of uniform stiffness the moments depend on the ratios between members, not on their size. That is why a redundant frame can be analysed before its sections are chosen -- and why "the moments moved when I changed the modulus" means something else moved with it.
Shear stress, twist and transmitted power in a round shaft, including stepped and doubly fixed ones.
τ=(T d)/(2J), φ=(TL)/(GJ), T=(power)/(ω)
Basis
A shaft of circular section twisted about its axis deforms so that plane sections stay plane and radii stay straight. That is not an approximation but a consequence of symmetry: every diameter is an axis of symmetry and the section looks the same after any rotation about the axis, so there is no direction in which the section could warp without breaking a symmetry the loading has. Once plane sections stay plane the strain distribution is fixed by geometry alone, and the material law is applied afterwards.
Derivation
Two sections a distance L apart rotate relative to each other through an angle phi. A line on the surface at radius r is sheared through r phi / L, so the shear strain — and with a linear material the shear stress — is proportional to the radius: zero on the axis, largest at the outside.
Integrating the moment of that stress over the section gives the torque. Writing the stress as G r phi / L and taking moments gives T equal to G phi / L times the integral of r squared over the area, which is the polar second moment J. Rearranged, the two working relations fall out together: the twist is T L / G J and the stress at any radius is T r / J.
For a circular section, and only for one, that J is both the polar second moment of the area and the torsion constant of the section. Every other outline warps, and there the polar second moment is not the torsion constant; using it overstates the stiffness badly. That is a different problem with different relations, and it is why there is a second torsion module rather than a correction factor here.
Two compositions follow directly. Segments in series carry the same torque and their twists add, so a stepped shaft is a sum. A shaft built in at both ends is two paths in parallel: the twist at the loaded section is common, so the torque divides in proportion to the torsional stiffness G J / L of each side — not in proportion to length and not to diameter, which is the guess a reader makes first. Finally, a rotating shaft's torque is what it delivers divided by how fast it turns.
τ=(T r)/(J), τ_(max)=(T d)/(2J)
φ=(T L)/(G J), k=(GJ)/(L)
J=(π(d^4-d_i^4))/(32)
(T_1)/(T)=(k_1)/(k_1+k_2) (both ends held)
T=(P)/(ω), ω=(2π n)/(60)
Assumptions
The section is circular, solid or annular, and constant along each segment.
The material is homogeneous, isotropic and linear elastic, with the shear stress below the proportional limit everywhere.
The result applies away from the ends and away from where the torque is introduced; near a keyway, a shoulder or a coupling the distribution is different and higher.
The twist is small enough that the geometry is unchanged by it, and angles are in radians throughout.
There is no axial load and no bending; a shaft carrying both belongs to the combined module.
Takes
Unit
Meaning
T
N·mm
Torque carried by the member.
d
mm
Outside diameter of a circular section.
d_i
mm
Inside diameter of a hollow circular section.
L
mm
Length of the member along its own axis, support to support.
G
MPa
Shear modulus — how much shear stress it takes to produce a given angular distortion.
power
W
Power transmitted through a rotating shaft.
omega
rad/s
Rotational speed of a shaft, in radians per second.
Gives
Unit
Meaning
tau_max
MPa
Largest shear stress on any plane through the point.
phi
rad
Angle of twist between the two ends of a shaft.
J
mm⁴
Torsion constant — the section's resistance to twisting, equal to the polar second moment only for circular shapes.
diagram_T
N·mm
Torque along the member.
What must always be true here. Each of these is a test in the suite, not a remark:
Shear stress varies linearly from zero at the axis to its peak at the outer surface.
In a shaft fixed at both ends the two end torques sum to the applied torque, and the twist at the applied point is the same computed from either side.
For segments in series the twists add and the torque is shared unchanged.
Peak stress falls with the cube of the diameter at fixed torque.
Hollowing out the middle third of a shaft removes about one per cent of its torsional stiffness.
Where it stops.
As the inner diameter approaches the outer, both the torsion constant and the stiffness approach zero; the ratio must be bounded below one at input.
Solution method
Closed form throughout. The one piece of care is in the torsion constant, which is evaluated factored — pi over 32, times the difference of the diameters, times their sum, times the sum of their squares — rather than as the difference of their fourth powers. This is not cosmetic. For any thin wall the fourth powers are two nearly equal large numbers, and subtracting them throws digits away: at a wall of one part in a thousand, three go, and the measured error of the naive form was of the order of two hundred units in the last place. The factored form never makes that difference, and the difference of the diameters is itself exact because the two are within a factor of two of each other.
The screen takes the torque directly, or computes it from power and speed when both are entered, in which case the entered torque is ignored and the row says so. The kernel relation power divided by speed genuinely is infinite at standstill -- any torque at all delivers no power there, which is a correct answer and not an error -- but this screen never reaches it: the switch to power-and-speed mode requires speed to be non-zero as well as power, so a shaft entered as turning at zero speed falls back to the directly entered torque rather than reporting an infinite one. That is a deliberate boundary of this screen rather than an oversight -- it declares a nan boundary and no inf one, on the view that a shaft has no route to an infinite stress worth explaining to a reader -- and the practical effect is that switching a shaft already in power-and-speed mode down to zero speed does not flag the torque shown as stale, since nothing in the row's own wording changes.
A bore reaching the outside diameter is refused, since the torsion constant and the stiffness both go to zero there. Short of that, the canon carries an advisory for a thin wall: the answer is genuinely sensitive to the two diameters, so a change in the last digit of the bore moves the result by a few hundred times as much. It is right for the numbers entered — enter them precisely.
Limitations
Circular sections only. Applying these relations to a square, a channel or an angle overstates the torsional stiffness by a wide margin, and the error is silent.
St Venant torsion of a prismatic shaft: stress concentrations at fillets, keyways and splines are not included, and they are often the thing that fails.
Elastic behaviour only; once the outer fibre yields the linear distribution is wrong and the shaft carries more torque than this predicts.
Nothing here is a fatigue calculation. A rotating shaft under a steady torque and a bending moment sees a fully reversed direct stress, which is a different question.
A shaft in power-and-speed mode with the speed set to zero shows the torque last entered directly rather than an infinite one; the row's own wording does not change to flag it, so a reader who only watches the number can mistake it for a fresh result.
Reading the result
The stress is proportional to the radius, so the material near the axis is carrying almost nothing. Boring out the middle third of a shaft removes about eleven per cent of its area and about one per cent of its torsion constant, which is the entire argument for hollow shafting and is checkable in one line.
The twist is in radians. It is also proportional to length, so comparing the twist of two shafts is meaningless unless they are the same length — compare the twist per unit length, or compare the stiffness G J / L, which is the quantity that actually decides how a torque divides between two paths.
The misreading worth naming is treating the built-in-at-both-ends case as an even split. It is a split in proportion to G J / L on each side, so a stiff short length in parallel with a soft long one takes nearly all of the torque, and the far end may see very little of what was applied.
Advisory. The wall is thin enough that the torsion constant is sensitive to the diameters themselves: a change in the last digit of the bore moves the answer by a few hundred times as much. The result is right for the numbers entered; enter them precisely.
Warning. At this torque the linear elastic model implies a surface shear strain past anything a structural metal stays elastic through, so the stress and the twist angle below are both outside the range the relations were derived for. The bar would have yielded long before reaching them. Reduce the torque, or read these numbers as the elastic extrapolation they are rather than as a prediction.
Implemented by shear_stress, twist_angle, torsional_stiffness, torque_from_power, power_from_torque, speed_from_revolutions, parallel_share, polar_moment_circular.
Non-Circular & Thin-Walled Torsion
Rectangles, open thin sections and closed cells — three very different ways of resisting twist.
Only a circular section is free of warping. Twist any other outline and its plane sections do not stay plane: the section warps out of itself, and the constant in the torque-twist relation is no longer the polar second moment of the area. It is a separate property, the torsion constant, and for a thin open section it is smaller than the polar second moment by orders of magnitude. That is why this module exists rather than a shape factor in the circular one.
Derivation
Three outlines, and the important thing is that they are three mechanisms rather than three coefficients.
A solid rectangle resists twist by shear circulating within the section. The classical solution is a series, and the app evaluates it in a closed form that carries its own checks: as the rectangle gets thin it tends to b t cubed over three, and at square it gives 0.14083 t to the fourth against the published 0.1406, high by about a sixth of a per cent. A table of coefficients against b over t has no such anchors — every entry must be trusted separately, and reading the wrong row is invisible.
A thin open section — an angle, a channel, a rolled I, a slit tube — is a set of narrow strips, each carrying torque as shear reversing across its own thickness. The constants add, so J is the sum of b t cubed over three. Thickness enters as a cube, so halving a wall costs seven eighths of the stiffness, and the peak stress, going as T t over J, is in the thickest element rather than the widest.
A closed thin cell works differently: torque runs as a shear flow round the wall. Equilibrium of a strip of wall between two cuts requires the flow — stress times thickness — to be the same at both, so it is constant all the way round however the thickness varies. The moment of that flow about any interior point makes the torque twice the flow times the area enclosed by the wall mid-line. Stress is flow over local thickness, so it is largest where the wall is thinnest. Equating the work done by the torque to the energy stored round the circuit gives the second relation, a torsion constant of four times the enclosed area squared times the thickness, over the developed length.
Put the last two side by side. A closed cell's torsion constant divided by that of the same wall slit open is twelve times the enclosed area squared, over the developed length squared and the thickness squared. For a circular tube of mid-line radius r that is exactly three times r over t, squared. A tube whose wall is a fiftieth of its radius is seven and a half thousand times stiffer closed than slit — same material, same weight, one saw cut down its length.
(J_(closed))/(J_(slit))=(12A_m^2)/(s^2t^2)=3(r/t)^2 for a circular tube
Assumptions
Warping is unrestrained: the ends are free to move out of plane, which is what makes this pure St Venant torsion. A section held against warping is stiffer than this, sometimes far stiffer.
For the shear-flow relations the wall is thin enough that the stress may be taken as constant across it.
The closed branch is a single cell. A multi-cell box divides the flow between its cells and needs a different calculation.
The enclosed area is bounded by the wall mid-line, not by the outside of the section.
The material is linear elastic and the section is prismatic along the length twisted.
Takes
Unit
Meaning
T
N·mm
Torque carried by the member.
b
mm
Width of a rectangular part of the cross-section, measured across the bending axis.
t
mm
Wall thickness of a thin part — a flange, a web, a tube wall, a plate.
A_m
mm²
Area enclosed by the mid-line of a closed thin-walled section.
L
mm
Length of the member along its own axis, support to support.
G
MPa
Shear modulus — how much shear stress it takes to produce a given angular distortion.
shape
—
Which supported parametric outline the calculation uses.
Gives
Unit
Meaning
J
mm⁴
Torsion constant — the section's resistance to twisting, equal to the polar second moment only for circular shapes.
tau_max
MPa
Largest shear stress on any plane through the point.
phi
rad
Angle of twist between the two ends of a shaft.
q_flow
N/mm
Shear flow — force per unit length running along the wall of the section.
Choices you have to make. The app shows these rather than picking one:
solid rectangle, thin open section, closed thin-walled cell — These three differ by orders of magnitude for the same outline. This is the single largest silent error available in torsion.
What must always be true here. Each of these is a test in the suite, not a remark:
Shear flow is constant all the way round a single closed cell.
Cutting a closed section open leaves the same material and collapses the torsion constant by orders of magnitude.
For a thin open section the peak shear stress occurs in the thickest element.
The torsion constant of an open section grows with the cube of the wall thickness.
Closing a thin section raises its torsional stiffness by roughly the square of the ratio of cell size to wall thickness.
Where it stops.
The thin-wall formulas lose accuracy once the width to thickness ratio of any element drops below about five; the screen must warn rather than extrapolate silently.
Solution method
One control selects the mechanism, not a coefficient, and it now offers all three outlines the canon declares: solid rectangle, thin open section, closed cell. Each has its own relation. The solid rectangle takes the series solution in closed form; the thin open section takes the narrow-strip limit, width times thickness cubed over three, which is the relation a reader meets first and the one the series tends to; the closed cell takes the two Bredt relations. The name of whichever ran is printed beside every value, which is how a reader can tell the three apart at a glance rather than by remembering what they selected.
Two defects met here, and both are worth recording because they compound. The control was bound to a symbol this screen does not carry, so it never moved off its first position and the screen answered every section as a solid rectangle. Underneath that, the dispatch compared the selection against a single threshold — one or more meant closed — while the canon declares three options, so the middle one, "thin open section", would have been handed the closed cell's answer. On the state the screen opens on, a 200 by 10 wall enclosing 7854 square millimetres, the thin open section's torsion constant is 66 667 mm⁴ and the closed cell's is 6 168 532 mm⁴: ninety-two times larger, with the twist angle ninety-two times smaller and the peak shear stress smaller by a factor of twenty-four. Repairing the binding without repairing the comparison would have delivered that error to the reader instead of hiding it from them.
The standalone thin-strip function is also what the open-to-closed ratio is built from, and that ratio is worth evaluating once for its own sake: for a circular tube it is three times the radius-over-thickness ratio, squared.
On the closed branch the enclosed area is its own input field and the developed length of the wall is taken as twice the entered width. The two are therefore not derived from one drawn outline, and it is possible to enter an area and a width that no single section has. That is a limitation of this screen rather than of the relations, which take area, perimeter and thickness independently.
The canon carries an advisory when the width-to-thickness ratio of the thinnest element falls below about five. The thin-wall relations lose accuracy there and the screen says so rather than extrapolating in silence.
Limitations
Restrained warping is not modelled. An I-section built into a support carries torque partly by differential bending of its flanges, and is stiffer than the St Venant answer given here.
Single closed cells only; a multi-cell box is not solved.
The stress reported is the St Venant peak in a smooth wall. Re-entrant corners, welds and cut-outs concentrate it, and an open section's corners are where it actually cracks.
The rectangle expression is the series in closed form and carries about a sixth of a per cent of error at its worst proportion, which is the square.
The three outlines are a choice the reader makes, and nothing checks it against the numbers entered. Selecting the closed cell for a section that is actually slit gives a torsion constant two orders of magnitude too large, and every input is still admissible.
The shear flow row is a closed-cell quantity. On either open outline it is reported as a dash with the reason beside it, because an open section has no flow running round it — the same name for a different thing.
Reading the result
The largest silent error available in this whole subject is reading the wrong branch. The same outline with the same wall gives two answers that can differ by three orders of magnitude, and both of them look entirely reasonable printed on a screen. Check which mechanism produced the number before reading it: the relation's name is printed beside every value and says which of the three ran, and the shear-flow row is a second signal, since only the closed cell has one.
The two peak-stress rules are opposites and are easy to swap. In a closed section the flow is constant, so the stress peaks in the thinnest wall. In an open section the stress goes as the local thickness over the torsion constant, so it peaks in the thickest element. A reader who has met only one of these will look in exactly the wrong place on the other.
The last thing worth internalising is what closing a section buys. Doubling the enclosed area quadruples the torsion constant; doubling the wall only doubles it. Torsional stiffness is bought with enclosed area far more cheaply than with material, which is why every torsionally loaded structure that can be a box is one.
Advisory. The thin-walled torsion formulas lose accuracy for stocky elements like this one.
Warning. At this torque the linear elastic model implies a surface shear strain past anything a structural metal stays elastic through, so the stress and the twist angle below are both outside the range the relations were derived for. The bar would have yielded long before reaching them. Reduce the torque, or read these numbers as the elastic extrapolation they are rather than as a prediction.
Implemented by torsion_constant_thin_open, torsion_constant_rectangle, shear_stress_thin_open, shear_flow_closed, shear_stress_closed, torsion_constant_closed, open_to_closed_ratio, twist_angle.
Combined Bending + Torsion
A shaft that bends and twists at once: principal stresses, and the pure moment that would match them.
M_e=½(M+√(M^2+T^2)), T_e=√(M^2+T^2)
Basis
A shaft that bends and twists at once has, at its outermost fibre, a direct stress from the bending and a shear stress from the torque acting on the same element of material. The element is in plane stress with one direct component and one shear component, which is the simplest non-trivial stress state there is. Its principal stresses and its maximum shear follow from the stress circle, and the two equivalent moments are those two answers rewritten as the pure loadings that would produce them.
Derivation
For a solid round shaft the section modulus in bending is the second moment over the outer radius, and the polar section modulus in torsion is the polar second moment over the same radius. Because the polar second moment of a circle is twice the diametral one, the polar section modulus is exactly twice the bending one. So the direct stress is M over Z and the shear stress is T over 2Z, with the same Z in both — which is what makes the algebra below collapse so neatly.
The stress circle for a state with one direct stress and one shear has its centre at half the direct stress and a radius equal to the root of the square of that half plus the square of the shear. The principal stresses are the centre plus and minus the radius; the maximum shear stress is the radius itself.
Now ask what pure bending moment would give the same largest principal stress. Substituting the two shaft stresses into the circle and collecting the common 1 over 2Z gives a largest principal stress of one over 2Z times M plus the root of M squared plus T squared. Setting that equal to an equivalent moment over Z gives the equivalent moment as half of M plus the root of M squared plus T squared. Ask what pure torque would give the same maximum shear stress, and the same substitution gives the equivalent torque as the root of M squared plus T squared.
Those two are not two estimates of one quantity. They are the maximum principal stress theory and the maximum shear stress theory, written as moments for this one section shape. Which of them governs depends on the material, and neither is a refinement of the other. A NASA structures handbook prints both theories in their general stress form; putting the bending and torsion stresses of a round shaft into them is what produces these two expressions, so they are the theories rather than two additional formulas to remember.
σ=(32M)/(π d^3), τ=(16T)/(π d^3)
σ_(1,2)=(σ)/(2)±√(((σ)/(2))^2+τ^2)
τ_(max)=√(((σ)/(2))^2+τ^2)
M_e=½(M+√(M^2+T^2)), T_e=√(M^2+T^2)
σ_1=(M_e)/(Z), τ_(max)=(T_e)/(2Z), Z=(π d^3)/(32)
Assumptions
The section is solid and circular, so the bending peak and the torsion peak occur at the same point on the surface. On any other outline they generally do not, and the equivalents are then wrong.
There is no axial force, and the transverse shear force is neglected — at the outer fibre in bending it contributes nothing anyway.
The material is linear elastic and the stresses are below yield, since the circle is a linear transformation of a linear stress state.
The loading is static. A rotating shaft under steady bending sees a fully reversed direct stress, and that is a fatigue problem with a different governing quantity.
There are no stress concentrations: fillets, keyways and cross-holes raise both stresses locally and are not in this.
Takes
Unit
Meaning
M
N·mm
Bending moment at the section under consideration.
T
N·mm
Torque carried by the member.
d
mm
Outside diameter of a circular section.
Gives
Unit
Meaning
sigma_1
MPa
Largest principal stress — the biggest direct stress on any plane through the point, with no shear on that plane.
sigma_2
MPa
Second principal stress.
tau_max
MPa
Largest shear stress on any plane through the point.
M_e
N·mm
Equivalent bending moment — the pure bending that would produce the same peak stress as the combined bending and torsion.
T_e
N·mm
Equivalent torque — the pure torsion that would produce the same peak shear as the combined bending and torsion.
What must always be true here. Each of these is a test in the suite, not a remark:
With zero torque the equivalent moment equals the applied moment.
With zero moment the equivalent torque equals the applied torque.
The principal stresses recovered from the equivalent moment match those from the raw stress state.
Adding torque to a bent shaft always raises the maximum shear stress and rotates the principal directions away from the axis.
Where it stops.
When bending and torque are comparable the two principal stresses have opposite signs, and a criterion based on the larger one alone underestimates the demand.
Solution method
Closed form, with one deliberate piece of reuse. The screen builds the polar second moment with the same factored routine the round-shaft screen uses, forms the bending section modulus from it rather than from a second expression in the diameter, and hands the resulting direct and shear stresses to the same stress circle functions the plane-stress screen uses. The equivalents come from the same torsion kernel that the plain torsion screen calls.
That matters more than it sounds. This screen is the circular torsion screen and the plane stress screen asked a different question, and writing a second implementation of either would create a second place for them to disagree — which in this project is the shape of failure that has recurred most often. Every number here is produced by a function some other screen also depends on.
Limitations
Solid circular sections only. For a hollow shaft the relations hold with the annular section modulus, but the screen takes a single diameter.
The equivalents are elastic constructions and say nothing about a section that has begun to yield.
Neither equivalent is a failure criterion for a ductile material under a general stress state; both are two-dimensional special cases, and the distortion energy criterion gives a third answer between them.
Fatigue, which is what actually limits most rotating shafts, is out of scope here entirely.
Reading the result
The result that surprises everyone is that the equivalent torque does not vanish when the applied torque does. With no torque at all, the equivalent torque equals the applied bending moment — and it should, because a shaft in pure bending carries a maximum shear stress of half its direct stress, on planes at forty-five degrees. The equivalent torque is answering the shear question, and pure bending has a shear answer.
The second is the sign structure. As soon as any torque acts, the two principal stresses have opposite signs: one tensile, one compressive, whatever the bending does. A check that looks only at the larger of them underestimates the demand, and the amount by which it does grows as the torque approaches the bending.
The last is what to do with the two equivalents. They are not to be averaged and the larger is not automatically the answer. They belong to two different failure theories, and the app reports both rather than choosing, because choosing is a material question this app deliberately does not answer — no design code is applied anywhere in it.
A straight elastic column under axial compression is in equilibrium at every load. At certain loads it is also in equilibrium in a slightly bent shape, and the smallest of those loads is the critical one. This is a bifurcation, not a strength: nothing in the material is exceeded, nothing breaks, and the column simply acquires a second equilibrium configuration adjacent to the first. What the theory hands back is the load at which that happens and the shape it happens in — never the size of the deflection, which the small-deflection theory leaves undetermined.
Derivation
Write moment equilibrium on the column as it has moved rather than as drawn. At a section displaced sideways by y, the axial load has a lever arm y about it, so the internal bending moment must equal P y. With the elastic curvature relation this is a linear equation with constant coefficients whose solutions are sines and cosines of x times the square root of P over EI.
Requiring the deflection to vanish at both pinned ends kills the cosine and forces the sine's argument to be a whole number of half-waves over the length. That single condition produces everything: the load is n squared times pi squared EI over L squared, the shape is a half sine for the first mode, and the amplitude never appears — it cancels, which is exactly what a bifurcation load should do.
Other end conditions change the boundary conditions and not the differential equation, so every other case is the pinned case with the length replaced by an effective length: the distance between the points of contraflexure, where the moment on the buckled shape passes through zero. Both ends built in puts those points at the quarter points, so the middle half behaves as a pin-ended column and the factor is exactly one half. Built in at one end and free at the other is a half-wave stretched over twice the length, so the factor is exactly two and the critical load is one sixteenth of the fixed-fixed value at the same length.
Two cases are not round numbers. Built in at one end and pinned at the other leaves a condition that reduces to the tangent of an argument equalling the argument itself; its smallest positive root is 4.4934094579, so the factor is pi over that — 0.699156, not the 0.7 quoted everywhere. The rounding is about a quarter of a per cent in the critical load, and it is on the safe side: 0.7 is larger than the true factor, and a larger effective length predicts a lower load. An end held by a rotational spring gives a second transcendental condition whose smallest root runs from pi at no restraint to 4.4934 at full fixity, a load coefficient climbing from 9.87 to 20.19 as the spring stiffens.
The remaining two cases are the ones a drawing cannot distinguish. Both ends built in with the top free to translate has a factor of exactly one against one half for the same end conditions braced: four times the critical load. Built in and pinned free to sway is exactly two against 0.699 braced: eight times. Whether the frame can sway is not a property of the column, and the column does not know it.
EI(d^2y)/(dx^2)+Py=0
P_(cr)=(n^2π^2EI)/((K L)^2), y=Asin(nπ x)/(L)
λ=(KL)/(r), σ_(cr)=(π^2E)/(λ^2)
tan x = x, x_1=4.4934094579, K=(π)/(x_1)=0.699156
tan x = (c x)/(c+x^2), c=(β L)/(EI)
Assumptions
The column is perfectly straight before loading and the load passes exactly through the centroid of every section.
The material is linearly elastic at the critical stress, homogeneous, and the section is prismatic along the whole length.
Deflections are small enough that the second derivative stands for the curvature and the axial force stays constant along the member.
The column fails by bending in one principal plane; it is held against twisting and against local buckling of its own plate elements.
The end conditions are the idealised ones named, and the sway condition is known from the structure rather than inferred from the column.
Takes
Unit
Meaning
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
L
mm
Length of the member along its own axis, support to support.
supports_type
—
The support arrangement — pinned both ends, fixed one end, propped cantilever, and so on.
A
mm²
Cross-sectional area — the amount of material you would see if you sliced the member straight across.
mode_n
—
Which buckling mode is being shown, counting up from the lowest.
Gives
Unit
Meaning
P_cr
N
Critical load — the axial force at which the member stops being straight and bows out.
sigma_cr
MPa
Critical stress — the average stress in the member at the moment it buckles.
K_eff
—
Effective length factor — the fraction of the real length that behaves like a pin-ended column.
lambda_s
—
Slenderness ratio — effective length divided by radius of gyration.
mode_shape
—
The deflected shape the structure takes as it buckles.
Choices you have to make. The app shows these rather than picking one:
pinned-pinned, fixed-fixed, fixed-pinned, fixed-free, fixed-fixed with sway, pinned-fixed with sway, elastically restrained — The effective length factor spans a factor of four across these, and the critical load a factor of sixteen. Two pairs share their end conditions and differ only in whether the frame can sway, which a drawing of the column does not show and the column itself does not know.
What must always be true here. Each of these is a test in the suite, not a remark:
The critical load of the nth mode is n squared times that of the first.
Halving the effective length quadruples the critical load.
The critical load is independent of the material strength and depends only on stiffness and geometry.
A column free at one end and fixed at the other has an effective length factor of two, so its critical load is a sixteenth of the fixed-fixed value at the same length.
Adding rotational restraint at an end always raises the critical load and lowers the effective length factor.
The critical stress falls with the square of the slenderness ratio.
Where it stops.
The elastic result is only valid while the critical stress stays below the proportional limit; above the transition slenderness it overestimates the strength and must be handed to the inelastic screen.
A column of no effective length carries any load at all, so the critical load is unbounded. Braced at close enough centres, buckling stops being the thing that limits the column and squashing takes over.
Solution method
Closed form for the six named end conditions. The two transcendental cases are bisected rather than typed in, so the number in the code is derived from the equation it solves. The tangent condition is bracketed between pi and three halves of pi, where the tangent climbs from zero to infinity and crosses the line exactly once. The elastic-restraint root is bracketed between pi and 4.4934 — the pinned answer at one end of the interval, the fully fixed answer at the other — so a sign change is guaranteed for any positive restraint, and the nearest pole of the tangent, at 4.712, lies outside. Both facts are properties of the bracket rather than of the input, which is why the search can be written without a convergence test that might not converge.
The restraint condition itself has no guard on the tangent's poles, and that is a decision rather than an omission: the cosine of a double is never exactly zero near a pole — the cosine of pi over two evaluates to 6e-17 — so a test for an exact zero would never fire and the pole would never be landed on. The protection belongs at the bracket, and that is where it is.
The kernel does not raise. A column of no effective length returns an unbounded critical load, which is the right answer: braced at close enough centres, buckling stops being what limits the column and squashing takes over. A negative length or a negative stiffness returns nothing rather than a plausible number.
Limitations
The critical load is an upper bound that nothing real reaches; every other module in this family exists because of a way the ideal column fails.
The elastic result holds only while the critical stress stays below the proportional limit — above the transition slenderness it overestimates the strength and belongs to the strength-curve screen.
Nothing here sees twisting or local plate buckling, and a thin open section can fail by either at a load well below this one.
Higher modes are unreachable unless the column is braced at the nodes of that shape; the mode number is a statement about bracing, not a free choice.
The elastically restrained option is evaluated at a restraint ratio of one, because this screen carries no field for the spring stiffness; the relation behind it accepts any value.
Reading the result
Read the effective length, not the length. The slenderness printed here is built from K times L, and nothing in the number itself says which was used — a fixed-ended column and a pin-ended one of the same length differ by a factor of two in slenderness and four in critical load. Using the real length is the most common mistake in this subject and it is invisible in the answer.
The second thing to notice is what is absent from the relation: the material's strength. A slender column of mild steel and one of high-strength steel, same section and same length, buckle at the same load. Buying a stronger grade of steel to fix a slender column buys nothing at all. That is the single most surprising fact in the subject and the reason the strength curve on the next screen exists.
Finally, read the sway branch before reading the number. Two of the options here share their end conditions with two others and differ only in whether the frame can translate. A drawing of the column is identical in each pair, and the loads differ by four and by eight.
Two accounts of column failure each cover part of the range and neither covers the middle. A stocky column squashes: it reaches its yield stress and goes no further. A slender one buckles elastically at a stress far below yield. In between, part of the section has already yielded before the column becomes unstable, and neither account applies. The strength curve is the single curve that carries a column from one regime to the other with the transition marked.
Derivation
Plot the elastic critical stress — pi squared E over slenderness squared — against slenderness. It is a hyperbola, and as the slenderness goes to zero it goes to infinity, which is nonsense: no column carries more than the load that squashes it. So the curve has to be capped at the yield stress.
A horizontal cap meeting a hyperbola is also wrong, and for a physical reason rather than an aesthetic one. Rolling and welding leave residual stresses in a section: parts of it are already in compression before any load is applied. Those fibres reach yield at an applied stress well below the nominal yield, and once they have yielded they contribute no stiffness. The section therefore loses bending stiffness gradually as the load rises, and a column in the middle slenderness range falls below both the yield cap and the elastic hyperbola.
The classical account replaces the corner with a parabola. The general Bleich form writes the maximum compressive residual stress sigma_r explicitly. It starts at yield and intersects Euler at the proportional limit sigma_y minus sigma_r. The transition slenderness is therefore pi times the square root of E over that proportional-limit stress, and the parabola subtracts sigma_r times that same stress times slenderness squared over pi squared E.
The familiar CRC compromise sets sigma_r to one half of sigma_y. That choice reduces the general relation to Eq. (1.140), makes the transition stress one half of yield, and makes the two branches tangent as well as coincident there. The screen opens on that published compromise but leaves sigma_r visible, so the reader can see which assumption makes the curve move.
The join is worth checking rather than trusting. At the transition the elastic branch gives half the yield stress; substituting the transition slenderness into the parabola gives the yield stress minus half of it, which is the same number. The two branches also share a slope there, and the parabola has zero slope at the origin, so the composite curve leaves the yield line smoothly and rejoins the hyperbola smoothly. That is what makes it one curve rather than two curves drawn end to end.
The transition moves in a direction that surprises people. Raising the yield stress lowers the transition slenderness, because the elastic curve is unchanged and the level it has to fall to is higher. A stronger material therefore helps a stocky column, helps a middling one less, and does nothing whatever for a slender one.
σ_(cr)=(π^2E)/(λ^2) (λ>λ_c)
σ_(cr)=σ_y-(σ_r(σ_y-σ_r))/(π^2E)λ^2 (λ≤λ_c)
λ_c=π√((E)/(σ_y-σ_r)), σ_(cr)(λ_c)=σ_y-σ_r
σ_r=½σ_y ⇒ σ_(cr)=σ_y-(σ_y^2)/(4π^2E)λ^2
P_(cr)=σ_(cr)A
Assumptions
The section is represented by the idealized residual-stress family behind the Bleich parabola; sigma_r is limited to zero through one half of yield.
The material has a definite yield stress and the stocky limit is squashing at that stress rather than any other failure.
The column is centrally loaded and straight; imperfection is not in this curve, it is on the adjacent screens.
The slenderness entered is the effective one, and the same effective length applies to both branches.
Takes
Unit
Meaning
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
sigma_y
MPa
Yield stress — where the material stops springing back.
lambda_s
—
Slenderness ratio — effective length divided by radius of gyration.
sigma_r
MPa
Residual stress — stress locked into the section by rolling or welding, before any load is applied.
Gives
Unit
Meaning
sigma_cr
MPa
Critical stress — the average stress in the member at the moment it buckles.
lambda_c
—
Transition slenderness — where the elastic and inelastic column curves meet.
P_cr
N
Critical load — the axial force at which the member stops being straight and bows out.
What must always be true here. Each of these is a test in the suite, not a remark:
The elastic and inelastic branches meet at the proportional-limit stress sigma_y - sigma_r; for the CRC choice sigma_r = 0.5 sigma_y they also have the same slope.
At zero slenderness the strength equals the yield stress.
The parabolic branch is everywhere below the yield line; at the CRC choice sigma_r = 0.5 sigma_y it is tangent to the elastic curve where they meet.
Raising the yield stress lowers the transition slenderness, so higher-strength steel helps stocky columns and not slender ones.
Residual compression in the flange tips lowers the strength most in the middle slenderness range, where neither branch governs cleanly.
Where it stops.
This screen plots research strength curves for teaching. It is not a code check, and the screen says so.
At zero slenderness the elastic formula diverges; the curve must be capped at the yield stress rather than plotted to infinity.
Solution method
Closed form on both branches, with the transition computed first and used as the switch. At or below the transition slenderness the parabola runs; above it the elastic relation runs. Which branch produced the number is reported alongside it, because the two are different physical accounts — one is about yielding with residual stress, the other about elastic instability — and a single stress gives no hint which one is speaking. The predicate that decides is exposed on its own so the interface can ask rather than recompute the transition and compare, which is how the label and the value are kept from disagreeing.
A zero or negative yield stress makes the transition undefined, and the whole curve is then absent rather than partly evaluated.
Limitations
This is a teaching curve from the research literature, not a design code check; no national or regional standard is applied anywhere in the app.
Changing sigma_r moves the idealized Bleich parabola; it does not reconstruct an arbitrary measured residual-stress field.
The parabolic branch is an idealized family for hot-rolled or welded shapes; a cold-formed or heat-treated member can have a different residual pattern and a different curve.
At zero slenderness the elastic expression diverges, so the curve must be capped rather than plotted, and the cap is a modelling decision rather than a computed value.
The curve gives a stress, not a capacity: it contains no partial factors, no load factors and no allowance for how the column is actually made.
Reading the result
Read which branch is in force before reading the number. The two say different things about what would have to change to make the column stronger. On the elastic branch the answer depends on E and on the slenderness and on nothing else, so the fixes are geometric: a shorter effective length, a fatter section, a brace. On the parabolic branch the yield stress is doing most of the work and a stronger grade helps.
The transition slenderness itself is the most useful number on the screen and the one most often skipped. It is the boundary between two different design conversations, and where a column sits relative to it determines which levers exist.
The commonest misreading is to treat the curve as a capacity. It is a critical stress for an idealised member — straight, centrally loaded, with an assumed residual pattern — and a real column of the same slenderness will be below it.
Advisory. These are teaching curves from the research literature, not a design code check. No national or regional standard is applied anywhere in this app.
Implemented by transition_slenderness, parabolic_strength, strength_curve, governs_elastically, euler_stress, critical_load_from_stress.
Imperfect Columns
A column that was never quite straight: how the bow grows, and how a test plot gives up the critical load.
No column is straight. A column that starts with a bow deflects from the first increment of load applied, and there is no sudden event anywhere on its load-deflection curve — the bifurcation of the ideal column has been replaced by a continuous growth. The critical load does not thereby stop being meaningful. It stops being a load the column reaches and becomes the load its deflection is measured against, which is a more useful thing for it to be.
Derivation
Let the unloaded shape be a half sine of amplitude equal to the initial bow. The same equilibrium argument applies, with one change: the lever arm of the axial load at a section is now the total displacement, initial plus additional, so the governing equation carries the initial shape as a forcing term.
Because that forcing term is itself a half sine — the shape of the buckling mode — the algebra collapses. Assume the additional deflection is a half sine too and match coefficients: the additional deflection is the initial bow times the load ratio over one minus the load ratio, and the total midspan deflection is the initial bow divided by one minus the load ratio.
That factor, one over one minus P over the Euler load, is the whole of this family of screens. It is one at no load, two at half the critical load, and unbounded at it. An initial crookedness, an eccentricity and a transverse load are all magnified by it, and none of them needs a version of its own.
The peak stress follows by adding the axial stress to the bending stress at the extreme fibre. The bending moment at midspan is the load times the total deflection; dividing the resulting fibre stress by the axial stress and using the fact that the second moment is the area times the radius of gyration squared leaves a bracket containing the amplification multiplied by a single dimensionless group: the initial bow times the distance to the extreme fibre, over the radius of gyration squared. That group is the imperfection ratio, and it is the one number that says how much a given crookedness costs a given section. A deep section tolerates far more bow than a slender one, and the ratio is why.
One consequence is worth deriving because it turns the relation into a measurement. Rearranging the deflection relation for the additional deflection gives that deflection divided by the load as a straight line in the deflection itself, with slope one over the critical load and intercept the initial bow over the critical load. Plotting a test that way recovers the critical load from readings taken nowhere near it, and recovers the initial bow as a by-product.
EI(d^2y)/(dx^2)+P(y+y_0)=0, y_0=e_0sin(π x)/(L)
δ=(e_0)/(1-P/P_E), amp=(1)/(1-P/P_E)
σ_(max)=P/A[1+(e_0c)/(r^2)·(1)/(1-P/P_E)]
(δ_a)/(P)=(δ_a)/(P_E)+(e_0)/(P_E)
Assumptions
The initial bow has the shape of the first buckling mode; a bow of any other shape decomposes into modes that amplify at different rates and this relation follows only the first.
The material stays elastic everywhere, so the amplification is free to run away where a real column would have yielded at its extreme fibre first.
Deflections are small enough for the linear curvature relation, which is why the answer diverges at the critical load rather than turning over.
The load passes through the centroid: this screen describes crookedness, not eccentricity, and the two produce different relations.
The ends are pinned; the critical load on this screen is built with an effective length factor of one.
Takes
Unit
Meaning
e_0
mm
Initial bow — how far the member is already out of straight before any load is applied.
L
mm
Length of the member along its own axis, support to support.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
A
mm²
Cross-sectional area — the amount of material you would see if you sliced the member straight across.
P
N
Axial force in the member — positive in tension unless the screen says otherwise.
c_t
mm
Distance from the centroid to the top fibre of the section.
r_x
mm
Radius of gyration about the horizontal axis — the distance at which all the area could sit and give the same bending resistance.
Gives
Unit
Meaning
delta
mm
Deflection — how far a point has moved from where it started.
sigma_max
MPa
Largest direct stress anywhere in the section.
P_cr
N
Critical load — the axial force at which the member stops being straight and bows out.
amp
—
Amplification factor — how much the axial force magnifies a deflection that bending alone would have caused.
What must always be true here. Each of these is a test in the suite, not a remark:
As the initial bow goes to zero the response goes to the perfect column: no deflection until the critical load.
The plot of deflection against deflection over load is a straight line whose slope is the critical load.
The deflection is always larger than the initial bow, for any load above zero.
The imperfect column starts deflecting the instant load is applied, unlike the ideal one.
Doubling the initial bow doubles the deflection at every load level but leaves the critical load unchanged.
Where it stops.
The amplification diverges as the load approaches the Euler load; the curve must be plotted as an asymptote, and the load input bounded below the critical value.
Solution method
Closed form, and the whole screen is one factor evaluated three times. The amplification returns an unbounded value exactly at the critical load and nothing at all beyond it — past the critical load the small-deflection theory this comes from has nothing to say, and a negative number would look like an answer. That is the reason for refusing rather than returning: the expression stays perfectly finite and quietly changes sign, so an unguarded evaluation above the critical load reports a deflection pointing the wrong way with no indication anything is wrong.
The peak stress is computed by evaluating the amplification first and testing it before it is used, so a divergent factor propagates as a divergent stress rather than as an arithmetic accident inside a larger expression.
Limitations
The amplification is not defined above the critical load, so the screen bounds the load input below it rather than plotting past the asymptote.
Nothing here yields: in a real column the extreme fibre reaches its limit well before the deflection runs away, so the peak stress governs and the deflection curve is only the route to it.
The ends are pinned on this screen; a bow in a column with other end conditions amplifies against that column's own critical load, which this screen does not compute.
The initial bow is an input the reader must supply, and it is the least well known quantity in the whole calculation — a fabrication tolerance, not a measurement.
The straight-line test relation applies to the deflection measured from the initial bow, not to the total deflection this screen reports.
Reading the result
Doubling the initial bow doubles the deflection at every load level and leaves the critical load exactly where it was. That separation is the point of the screen: imperfection changes the response, not the stability boundary. A reader who expects a bigger bow to lower the critical load has confused the load the column fails at with the load the column is measured against.
The deflection is always larger than the initial bow, for any load above zero. There is no threshold to cross and no event to watch for, which is the whole difference between this screen and the ideal column next door.
The trap in the test relation is the subtraction. The straight line whose slope gives the critical load is plotted with the deflection measured from the initial bow, not from the straight axis. The deflection reported here is the total, initial bow included. Feeding the total into the plot shifts the intercept and distorts the slope, and the resulting critical load looks entirely plausible.
Warning. Above nine tenths of the critical load the series form of the amplification is no longer accurate; the exact form is being used and the answer is very sensitive to the axial force.
Implemented by amplification, deflection_initial_crookedness, perry_robertson_stress, euler_load.
Eccentric Columns
A load that misses the centroid, and the load you can allow once a stress limit is set.
A load applied a distance from the centroid is a load and a moment, both present from the instant the load is applied. Like the crooked column there is no bifurcation, but unlike the crooked column the answer is not an approximation: the governing equation with a constant end moment has a closed solution, and the secant formula is that solution rather than an estimate of it.
Derivation
The equilibrium equation on the deflected shape now carries a constant term — the end moment, load times eccentricity — on the right. Its solution is the same sines and cosines plus a particular constant, and imposing zero deflection at both ends produces a midspan deflection equal to the eccentricity times the secant of half the argument, less one.
Adding the axial stress to the extreme-fibre bending stress and using the second moment as the area times the radius of gyration squared gives the working relation: the average stress multiplied by one plus the eccentricity ratio times a secant. The eccentricity ratio here is the same dimensionless group as on the crooked-column screen — eccentricity times the distance to the extreme fibre over the radius of gyration squared — which is why the two screens can be read against each other at all.
The argument of the secant is half the length over the radius of gyration, times the square root of the average stress over the modulus. It is worth separating out, because it reaches a right angle at exactly the Euler load and at no other load. That is not a coincidence to be checked numerically; it is the statement that the secant formula contains the perfect column as a limit rather than resembling it. The perfect column is the case where the eccentricity is zero: the bracket collapses to one, the stress is the average stress, and the deflection is zero at every load below critical — an ideal column, recovered from the eccentric solution rather than assumed separately.
The secant formula and the amplification factor are different objects and part company where it matters. Expanding the secant in its argument and expanding the amplification in the load ratio, the leading corrections differ by a factor of pi squared over eight — about twenty-three per cent — and the gap widens as the pole is approached. The amplification is a one-mode magnifier applied to a deflection already present; the secant is the exact answer to a specific load case. Both are offered because a reader ought to see the difference rather than be told about it.
EI(d^2y)/(dx^2)+Py=-Pe
u=(L)/(2r)√((P)/(EA))=L/2√((P)/(EI))
δ=e(sec u-1)
σ_(max)=P/A[1+(ec)/(r^2)sec u]
u→(π)/(2)⇔ P→(π^2EI)/(L^2)
Assumptions
The eccentricity is equal and on the same side at both ends, so the column bends in single curvature and the maximum moment is at midspan.
The material stays elastic to the peak stress; the relation runs to infinity where a real column would have yielded locally first.
The ends are pinned and the critical load used for the search is built with an effective length factor of one.
The column is otherwise straight — the eccentricity accounts for the whole imperfection, and initial bow is a separate screen.
Small-deflection curvature applies, which is what makes the closed solution trigonometric rather than elliptic.
Takes
Unit
Meaning
e
mm
Eccentricity — how far the load sits from the centroid.
c_t
mm
Distance from the centroid to the top fibre of the section.
r_x
mm
Radius of gyration about the horizontal axis — the distance at which all the area could sit and give the same bending resistance.
L
mm
Length of the member along its own axis, support to support.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
A
mm²
Cross-sectional area — the amount of material you would see if you sliced the member straight across.
sigma_allow
MPa
Allowable stress you have chosen to design to.
Gives
Unit
Meaning
P
N
Axial force in the member — positive in tension unless the screen says otherwise.
delta
mm
Deflection — how far a point has moved from where it started.
sigma_max
MPa
Largest direct stress anywhere in the section.
P_cr
N
Critical load — the axial force at which the member stops being straight and bows out.
What must always be true here. Each of these is a test in the suite, not a remark:
With zero eccentricity the relation collapses to the perfect column and the deflection is zero at every load below critical.
The load that satisfies a given peak stress is unique in the interval below the Euler load.
The load-deflection curve approaches the Euler load as an asymptote, never reaching it.
Doubling the eccentricity roughly doubles the deflection at low load but has less effect near the critical load.
Where it stops.
The secant has a pole where the argument reaches a right angle, which is exactly the Euler load; the root search for the allowable load must bracket strictly below it and never straddle the pole.
Solution method
The screen inverts the relation rather than evaluating it. The reader supplies an allowable stress and the screen answers how much load the column can carry, which is the question the secant formula is actually asked. It cannot be inverted in closed form, so it is bisected: two hundred halvings on the interval from zero to the Euler load, keeping the half in which the peak stress is finite and no greater than the allowable.
The bracket is the guard. Any load at or past the pole makes the peak stress unbounded, which the test treats as too high, so the search moves away from the pole and never straddles it. The secant itself returns an unbounded value as soon as its argument reaches a right angle, before the cosine is ever taken — for the same reason this package refuses to test a cosine against zero anywhere: the cosine of a double is never exactly zero at the pole, so such a test never fires.
Beside the exact peak stress the screen reports the secant deflection itself, at the load the search converges to: the same eccentricity-times-secant-minus-one above, not the amplification estimate. It is measured from the column's original straight axis, so it is zero at zero load — the amplification form, by contrast, is measured from the load's line of action and equals the eccentricity there. The two remain the different objects described above; this screen evaluates only one of them, and evaluates it exactly rather than through the one-mode approximation.
The independent public-domain reference library contains exactly one worked example that reaches this relation without going through a chart, and it is instructive. The manual sizes a cylinder by the secant formula and declares equilibrium by printing one number against itself. Recomputed exactly, the two sides differ by three quarters of a per cent: a slide-rule equals sign, and a trial diameter that balances the equation only to about one part in a hundred. The project stores that row as disputed with a tolerance tight enough that the test asserts the core does not match the printed value, which holds the gap open rather than papering over it.
Limitations
No solution exists at or above the Euler load; the search is confined strictly below it and the screen refuses rather than extrapolating.
Equal eccentricities at both ends is the worst case; unequal or opposite eccentricities give a lower maximum moment and this relation is conservative for them.
The relation is elastic throughout, so it overstates what a real column carries once its extreme fibre yields.
The deflection reported beside the stress is the secant's own value at the load the search finds, not the one-mode amplification estimate; the two are measured from different lines and should not be interchanged.
The answer is a load at a stress limit, not a factor of safety and not a design capacity.
Reading the result
The load returned is not proportional to anything. Doubling the allowable stress does not double the load, and near the Euler load raising the allowable stress barely moves the answer at all, because the secant is running away faster than the limit is rising. That flattening is the useful part of the curve to look at: it says the column is eccentricity-governed and no amount of material strength will help.
The second misreading is to treat the average stress as the stress. The peak stress reported here can be several times the load over the area, and it is the peak that the allowable is compared against. A reader who checks the load over the area against the allowable will conclude the column is comfortable when it is not.
Finally, remember what the secant argument is. When it approaches a right angle, the column is approaching its Euler load, and nothing about the eccentricity changes that boundary — the eccentricity decides how quickly the stress gets there, not where there is.
Warning. Above nine tenths of the critical load the series form of the amplification is no longer accurate; the exact form is being used and the answer is very sensitive to the axial force.
Error. The secant expression has a pole at the Euler load. No solution exists at or above it.
Implemented by secant_stress, secant_argument, euler_load, deflection_initial_crookedness, amplification.
Inelastic Buckling
Buckling once the material has left its straight line, with both classical answers and the gap between them.
Above the proportional limit the material's stiffness is no longer the elastic modulus. Buckling still happens when the section can no longer generate enough bending resistance to restore the column, but which stiffness that resistance is built from depends on what the individual fibres do as the column starts to bend — and there are two defensible answers, which is why this screen shows two loads.
Derivation
Tangent modulus. Suppose the axial load continues to rise, just enough, as the column begins to bend, so that no fibre anywhere in the section ever unloads. Every fibre then stays on the tangent of the stress-strain curve, the section's bending stiffness is the tangent modulus times the second moment, and the critical load is the Euler relation with the tangent modulus substituted for the elastic one.
Reduced, or double, modulus. Suppose instead the load is held constant as the column bends. Then the fibres on the convex side must unload — and unloading is elastic, following the full modulus, not the tangent. The section now has two different moduli across its depth, and the neutral axis has to shift to keep the net axial force unchanged. Working that out for a rectangular section leaves an equivalent modulus of four times the product of the two moduli over the square of the sum of their square roots. It lies between the tangent modulus and the elastic one, and it is always above the tangent modulus, so the reduced-modulus load is always the larger of the two.
Both collapse correctly when the material is still elastic. Setting the tangent modulus equal to the elastic one makes the reduced modulus four E squared over four E, which is E exactly, and both loads become the Euler load. That is a one-line anchor: the pair is one theory covering two regimes, not two theories.
The interesting part is the paradox. The reduced-modulus derivation is plainly the more careful of the two — it accounts for unloading, which physically happens — yet experiments sit close to the tangent value, the one the cruder argument gives. The resolution is that the two answer different questions. The tangent load is the load at which the straight configuration first stops being the only one available: a column can begin to bend there, under a load that continues to rise infinitesimally. The reduced load is what a column could reach if it stayed perfectly straight all the way up to it, and nothing stays perfectly straight. So the truth lies between the two, nearer the lower, and the lower is the design value — not because it is conservative, but because it is the load past which the straight column is no longer unique, which is the only definition of a critical load a real member can be held to.
One asymmetry follows from the derivations and is worth carrying: the reduced modulus depends on the shape of the section, because the neutral-axis shift does. The tangent modulus does not. Changing the section shape moves one bound and leaves the other exactly where it was.
P_t=(π^2E_tI)/((KL)^2)
E_r=(4EE_t)/((√E+√(E_t))^2)
P_r=(π^2E_rI)/((KL)^2), P_t≤ P_r
E_t=E ⇒ E_r=E ⇒ P_t=P_r=P_E
Assumptions
The stress-strain curve has a single well-defined tangent at the stress the column has reached, so the tangent modulus is a number rather than a range.
The reduced modulus expression is the rectangular-section form; another shape has its own and this one does not stand for it.
The column is straight and centrally loaded — both relations are the Euler relation with a substituted modulus and inherit every one of its idealisations.
Unloading follows the elastic modulus exactly, with no hysteresis and no Bauschinger effect.
The section is compact enough that it does not buckle locally before the whole member does.
Takes
Unit
Meaning
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
E_t
MPa
Tangent modulus — the local slope of the stress-strain curve once the material has left the straight part.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
L
mm
Length of the member along its own axis, support to support.
K_eff
—
Effective length factor — the fraction of the real length that behaves like a pin-ended column.
A
mm²
Cross-sectional area — the amount of material you would see if you sliced the member straight across.
sigma_y
MPa
Yield stress — where the material stops springing back.
Gives
Unit
Meaning
P_t
N
Tangent-modulus load — the critical load computed with the tangent modulus in place of the elastic one.
P_r
N
Reduced-modulus load — the critical load allowing for elastic unloading on the convex side.
sigma_cr
MPa
Critical stress — the average stress in the member at the moment it buckles.
E_r
MPa
Reduced modulus — the effective stiffness of a section where one side is unloading elastically while the other keeps yielding.
Cases this screen covers without asking. Both sides of each of these are handled by the code, so there is no control for them:
tangent modulus, reduced (double) modulus — They bound the real answer from below and above. Showing one alone hides the width of the bracket.
What must always be true here. Each of these is a test in the suite, not a remark:
The tangent-modulus load is never larger than the reduced-modulus load.
Both reduce to the Euler load when the tangent modulus equals the elastic one.
Real column strengths fall between the two, which is the whole point of the pair.
As the material softens the two loads separate; in the fully elastic range they coincide.
The reduced modulus depends on the section shape, the tangent modulus does not.
Where it stops.
The tangent modulus itself depends on the stress, which depends on the load, so the solution is iterative and may not converge for a stress-strain curve with a flat plateau; non-convergence must be reported, not silently truncated.
Solution method
Closed form as the screen runs it. Both loads are the Euler relation with a different modulus, so the whole effective-length discussion carries over unchanged and this screen takes the factor as an input rather than repeating the branch.
The tangent modulus is entered rather than derived, and that is a deliberate choice about where to put a difficulty. In a complete treatment the tangent modulus depends on the stress, which depends on the load, which depends on the tangent modulus — a fixed-point problem that need not converge at all on a stress-strain curve with a flat plateau, where the tangent is zero over a range of strain and the iteration has nowhere to settle. Rather than run a loop that can fail silently, the screen asks for the tangent modulus and reports what follows from it, leaving the dependence visible and the reader's to close.
The reduced modulus refuses a non-positive modulus of either kind rather than taking the square root of a negative number.
Limitations
The gap between the two loads is the answer's uncertainty and it is not small: as the material softens the two separate steadily, and the screen cannot narrow the gap.
The reduced modulus shown is the rectangular-section value; for an I-section or a tube the true reduced modulus differs and this one is only indicative.
Neither relation contains residual stress explicitly — that account lives in the strength-curve screen, and the two should not be added together.
The tangent modulus is an input, so a reader who reads it off the wrong point of a stress-strain curve gets a confident wrong answer with nothing to flag it.
With a perfectly flat plateau the tangent modulus is zero and both loads vanish; the relation is correct there and useless.
Reading the result
Read the pair, not either number. Two loads that bound the answer from known directions say more than one number that happens to be closer, because the width between them is the honest statement of how well the question is answered at that stress. When the two coincide, the material is still elastic and the screen is telling you so.
Then use the lower one. That is not caution, it is the definition: the tangent-modulus load is where the straight column stops being the only equilibrium available, and a column that has left the straight configuration does not return to it.
The second source available for checking this module is thinner than for the rest of the family, and that is worth knowing. The public-domain reference library prints the reduced-modulus expression word for word but carries no worked example for it, and the only tangent-modulus example there has to be read off a chart. So this module's independent check confirms the algebra and not a number.
Warning. The critical stress here is above the yield stress entered on this same screen, so the column reaches yield over its whole section before either buckling load can be developed. Both loads below are the theory's answer for a column that stays elastic to the end, and this one does not: what it carries is the squash load, the area times the yield stress.
Implemented by tangent_modulus_load, reduced_modulus, reduced_modulus_load, euler_load.
Approximate Methods
Critical loads for columns the closed forms cannot reach, by assumed shape, by residual, or by grid.
The closed forms answer a prismatic column with a named end condition. Change the section along the length, add an intermediate brace, let the axial force vary from one end to the other, and there is no formula — but there is still an answer, and there are ways to get close to it whose direction of error is known in advance. That last clause is what makes the methods worth having: an approximation whose sign is known is a bound, and two bounds from opposite sides are a bracket.
Derivation
At the critical load the column is in neutral equilibrium: the strain energy stored by bending into a slightly deflected shape exactly equals the work the axial load does as the ends draw together. The bending energy is the integral of EI times the square of the curvature; the end shortening is half the integral of the square of the slope, so the work is the load times that. Equating and solving for the load gives the Rayleigh quotient — bending integral over slope integral — and any shape satisfying the geometric boundary conditions may be substituted into it.
Every such answer is at or above the true load, without exception. Assuming a shape imposes a constraint the real column does not have, and a more constrained structure is stiffer. The method therefore has one direction of error, it is the unconservative direction, and its best estimate is the smallest number it can be made to produce.
Two shapes make the case. Take the parabola that is zero at both ends: its second derivative is a constant, so the bending integral is four EI L; its slope is linear, so the slope integral is L cubed over three; the quotient is twelve EI over L squared. Against the Euler load that is exactly twelve over pi squared — 21.6 per cent high — from a shape that looks like an excellent guess at a half sine. The lesson is the size of the error, not its existence. The quotient is built from the second derivative, and a parabola's is a constant where the true one is a sine. Visual closeness is not numerical closeness. Take the half sine instead and the quotient gives the Euler load exactly, because it is the true buckled shape and assuming the right shape adds no constraint at all — the calibration point of the whole method.
Galerkin's method looks like a different technique: it makes the residual of the differential equation orthogonal to the assumed shape rather than balancing energies. For a self-adjoint problem — and this one is — it produces exactly the same number from the same shape. Two methods that look different and are not is worth seeing once.
Finite differences err the other way. Replacing the second derivative by a central difference on a grid of n intervals turns the problem into a tridiagonal eigenvalue problem whose lowest root is known in closed form: four EI n squared times the square of the sine of pi over 2n, over L squared. Since the sine of a positive argument is less than the argument, that is always below the Euler load, and it climbs toward it as the grid is refined, at second order in the spacing. A difference quotient is softer than the derivative it stands for, and a softer column buckles sooner. Two intervals already lands within nineteen per cent.
The assumed shape satisfies the geometric boundary conditions; a shape that violates them is not admissible and the upper-bound property fails with it.
The problem is self-adjoint, which is what makes the Galerkin and Rayleigh answers identical rather than merely close.
The two shapes offered describe a prismatic pin-ended column, and so does the difference grid, which is uniform with pinned ends.
Small-deflection curvature is used in the energy integrals, so the answer is a bifurcation load and not a point on a load path.
Takes
Unit
Meaning
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
L
mm
Length of the member along its own axis, support to support.
shape_fn
—
The deflected shape you assume before an energy method can give an answer.
n_grid
—
Number of intervals the member is divided into for a finite-difference solution.
method
—
Which of the module's solution routes is being used.
Gives
Unit
Meaning
P_cr
N
Critical load — the axial force at which the member stops being straight and bows out.
bracket
—
How far apart two approximations that err in opposite directions leave the answer, as a fraction.
Choices you have to make. The app shows these rather than picking one:
Rayleigh-Ritz, Galerkin, finite differences — Each converges differently and from a different side; an unlabelled number hides which one you are trusting.
a parabola, a half sine wave — An assumed shape can only overestimate the critical load, and how far it overestimates by is the whole lesson: the parabola lands twenty-one per cent high, the half sine wave is the exact mode and lands on the answer. Which one is running has to be visible or the error looks like the method's rather than the guess's.
What must always be true here. Each of these is a test in the suite, not a remark:
Rayleigh with the true buckled shape gives the Euler load exactly, because assuming the right shape adds no constraint -- which is also why every other shape gives too much.
The parabola gives twelve over pi squared times the Euler load, exactly, which is twenty-one per cent high for a shape that looks like a very good guess.
For a self-adjoint problem the Galerkin equations and the Rayleigh quotient give the same answer from the same assumed shape; they look like different methods and are not.
The result is an upper bound, not the answer, and every screen showing it must label it as such and show the exact value alongside wherever one exists; the finite-difference route bounds it from the other side.
The finite-difference load approaches the exact one from below as the grid is refined, at second order in the spacing, because a difference quotient is softer than the derivative it stands for.
The bracket between the finite-difference load and the assumed-shape load narrows as the grid is refined, and it is a genuine bracket because the two err in known and opposite directions.
Where it stops.
A grid with one interval has no unknown between the pinned ends and therefore no eigenvalue; it is refused rather than answered with the value at the boundary.
Solution method
The screen evaluates the quotient from the integrals, not from the closed form. Both integrals are written out for the chosen shape and divided; the closed forms — twelve EI over L squared and pi squared EI over L squared — are then the check on the quotient rather than the thing being run. A relation that appears only in its own test is a relation nobody is using.
The finite-difference value is the exact lowest eigenvalue of the difference operator, evaluated directly. Nothing is assembled and nothing is factorised: the eigenvalues of a uniform tridiagonal operator on a pinned interval are known, so the grid result is a formula in the interval count rather than the output of a solver whose own error would then have to be argued about.
A grid of fewer than two intervals has no unknown between the pinned ends, and therefore no eigenvalue at all. It is refused rather than answered with the value at the boundary.
The bracket width is reported as a fraction of the lower bound, so it reads as a percentage and shrinks as the grid is refined or the shape improved.
Limitations
An assumed-shape answer is an upper bound and therefore unconservative; it must be read as a bound and labelled with the shape it came from.
The bracket is only a bracket while the two estimates err in opposite directions — two upper bounds agree with each other and prove nothing.
The shapes offered are the parabola and the sine, so this screen demonstrates the method on a column whose answer is already known rather than solving an arbitrary one.
The difference route as implemented is the prismatic pinned case; a stepped column or a varying axial force needs the matrix assembled, which is the model-buckling screen.
Refining the grid improves the lower bound and does nothing at all for the upper one; the two knobs are not interchangeable.
Reading the result
Read the bracket, not the value. A single approximate load carries no statement about which side of the truth it is on, and on this subject the side is the whole question: an unconservative buckling load says a column is safe when it is not.
Then read the label. The number is reported with the method and the shape that produced it, and that label is the answer's accuracy — the same screen, the same column, the same code, produces twelve EI over L squared or pi squared EI over L squared depending on nothing but the shape assumed.
The parabola's 21.6 per cent is the lesson worth carrying away. Sketch the parabola and the half sine on the same axes and they are hard to tell apart. The error of an assumed shape is invisible in a drawing of it, and only the quotient knows.
Advisory. An assumed-shape method can only overestimate a critical load. Treat this as an upper bound.
Implemented by rayleigh_quotient, assumed_parabola_load, assumed_sine_load, finite_difference_load, bracket_width.
Buckling of the Model
The load factor at which the drawn truss or frame goes unstable, and the shape it goes unstable in.
(K+λ K_g)u=0, det(K+λ K_g)=0
Basis
A first-order analysis writes equilibrium on the structure as drawn. A second-order one writes it on the structure as it has moved, and the difference is a stiffness term that depends on the axial force already in each member. That geometric stiffness is negative in compression: compression softens the structure. When it has softened it enough that the total stiffness stops being positive definite, the structure buckles. It is the same event the Euler formula describes, arrived at from the opposite direction, and on a column the two agree.
Derivation
For a beam element with the usual cubic shape functions, the second-order work of the axial force is that force times the integral of the products of the shape functions' first derivatives. Those integrals evaluate in closed form and assemble into a four-by-four matrix in the bending freedoms. One of its entries is worth pausing on: the coupling between a sideways movement at one end and a rotation is a pure force with no length in it at all, which is the one entry of that matrix a dimensional check will not catch. Each entry in this package is therefore named for the integral it is rather than for its position, and the high-precision fixture integrates those products numerically rather than copying the coefficients — because a sign error in one entry of a symmetric matrix is invisible to every solve whose assembly happens to be right, and that has already happened once in this package's foundation matrix.
Tension does the opposite of compression: a stay in tension stiffens what it braces, which is why a guy rope works at all.
Scaling the whole load case by a factor scales every axial force, and therefore the geometric stiffness, by that same factor. So the buckling condition is that the determinant of the elastic stiffness plus the factor times the geometric stiffness vanishes — a generalised eigenvalue problem whose smallest positive root is the multiple of the drawn load case at which the structure goes unstable.
The discretisation error has a known sign and a known rate. A cubic element is stiffer than the member it stands for, so the computed factor is too high and falls toward the exact value as the model is cut finer, at fourth order in the element size. One element on a pinned column gives twelve EI over L squared exactly — the same twelve over pi squared the assumed-parabola route gives, and for exactly the same reason, since a cubic with those end conditions is an assumed shape -- 21.6% high against pi squared. The error falls as the fourth power of the element count from there: four elements are still only three figures, eight reach four, and it takes about sixteen to reach five.
Behaviour is linearly elastic and displacements and rotations are small, so the geometric stiffness is the first-order correction and nothing beyond it.
The axial force in each member is taken from the first-order solution and held constant along that member.
The whole load case scales together: one factor multiplies every load, so a factor of one means the structure buckles under exactly the load written down.
Members are prismatic and the instability is in the plane of the model.
The elastic stiffness is unaffected by the axial force, so only the geometric part carries the load factor.
Takes
Unit
Meaning
nodes
mm
Node coordinates of the model.
members
—
Which two nodes each member connects, and which section and material it uses.
supports
—
Which degrees of freedom are held, and any settlement imposed on them.
loads
N
Node loads and member loads making up the load case.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
A
mm²
Cross-sectional area — the amount of material you would see if you sliced the member straight across.
mode_n
—
Which buckling mode is being shown, counting up from the lowest.
Gives
Unit
Meaning
lambda_cr
—
Load factor at buckling — multiply the reference load case by this to reach the critical load.
mode_shape
—
The deflected shape the structure takes as it buckles.
K_geo
N/mm
Geometric stiffness matrix — the extra stiffness, positive or negative, that axial force adds.
P_cr
N
Critical load — the axial force at which the member stops being straight and bows out.
What must always be true here. Each of these is a test in the suite, not a remark:
On a pinned column the load factor found by counting negative pivots reproduces the Euler load, and the two routes share no algebra: one factorises a matrix, the other is a formula in the length.
The mode recovered by inverse iteration on a pinned column is a half sine wave, node for node, which is the shape Euler's derivation assumes rather than produces.
A structure in which nothing is compressed does not buckle at any load, so the critical factor is unbounded rather than very large.
The load factor falls toward the exact one as the model is cut finer, at fourth order, because a cubic element is stiffer than the member it stands for -- one element gives exactly twelve over pi squared too much.
Raising every member's second moment together raises the load factor in exact proportion, because the elastic stiffness scales with it and the geometric stiffness does not.
Where it stops.
A load case already past the buckling load gives a factor below one, which is a real answer and the honest one; the screen reports it rather than refusing.
Solution method
The critical factor is found by counting negative pivots, not by an eigensolver. Sylvester's law of inertia says the signs on the diagonal of a symmetric factorisation are invariant, so the number of negative pivots in the factorisation of the combined stiffness at a given factor is the number of buckling modes already below that factor — without finding any of them. The smallest critical factor is then a bisection on the question "is that count still zero", and the count is monotone in the factor, so the search cannot land on the second mode while the first is still below it, which is precisely the failure a shifted power iteration is prone to. It needs nothing the linear solver does not already have, and higher modes cost nothing extra: the nth critical factor is where the count first reaches n, and a power iteration would have had to deflate every mode below it.
The bracket is found by doubling from a factor of one until the count reaches the mode wanted, giving up at a ceiling. A structure already past its buckling load at the load as written is bracketed on zero to one instead and returns a factor below one — a real answer, and the honest one. A structure in which nothing is in compression returns an unbounded factor: it does not buckle at any load, and saying so is the answer rather than a very large number.
The mode shape is recovered by inverse iteration a shade below the critical factor, where the combined stiffness is nearly singular and a solve against almost any right-hand side comes back overwhelmingly made of the near-null eigenvector. Iterating refines it and normalising after each pass stops it overflowing. The start vector is all ones rather than random, because a reproducible answer is worth more here than a statistically safer start: an unlucky start converges just as surely, only slower, and a mode shape that changed between runs would be unusable in a figure. The result is returned with its largest component equal to one — an eigenvector has no size of its own, and printing a length for it would be printing an arbitrary number.
Limitations
Discretisation error is unconservative: too few elements gives a factor that is too high, and refining the mesh always lowers it.
The eigenvalue problem is linear in the load factor, so it says when the drawn structure loses its stiffness and nothing about what happens afterwards.
A load case whose parts do not scale together — self-weight held fixed while an applied load rises — cannot be expressed by one factor.
When axial and bending stiffness in the model differ by more than about ten orders of magnitude the displacements have already lost accuracy, and the factor inherits that loss; the condition number is watched and warned on.
Pivot counting locates the crossing but produces no eigenvector; the mode shape is a separate calculation and can fail independently of the factor.
Reading the result
The answer is a multiple of the load case, not a load. Doubling every load in the model halves the factor and changes nothing physical, which is the check that says you have read it correctly.
Then read the mode. "It buckles at 6.48 times this load" says nothing about where, and where is what a reader needs in order to brace it — which is why the screen reports which node moves most in the mode alongside the factor. A brace placed at a node of the mode does nothing at all; a brace placed at the antinode can raise the factor several times over.
A factor below one is not an error message. It means the structure as drawn is already past its buckling load, and the screen reports it rather than refusing, because a refusal at exactly the interesting case is the least useful response available.
Warning. Axial and bending stiffness in this model differ by so much that the displacements have lost accuracy. Check member proportions before trusting the small numbers.
A member carrying both an axial load and a transverse one is not a beam plus a column, and adding their answers is wrong. The axial force acts on the deflection the transverse load has already caused, producing extra moment, which produces extra deflection, which produces extra moment. The two effects multiply rather than add. That is the whole subject in one sentence, and it is why these relations are a separate account rather than a correction applied to the beam screens.
Derivation
The governing equation is the column equation with the transverse load's own bending moment on the right: the homogeneous part is the column, the particular part is the beam, and the solution is neither. Everything that follows is written in one parameter, half the length times the square root of the axial load over EI. That parameter reaches a right angle at exactly the pin-ended Euler load, which is how these forms contain the buckling load rather than needing it supplied separately.
For a uniformly distributed load, the maximum moment is the plain beam value multiplied by twice the secant of the parameter less one, over the parameter squared. The maximum deflection is the plain beam value multiplied by twelve over five times the fourth power of the parameter, applied to twice the secant less the parameter squared less two. For a central point load the two factors are the tangent of the parameter over the parameter, and three times the tangent less the parameter, over its cube.
All four are exactly one at zero axial load. That is not obvious from any of the four expressions — each is a ratio of quantities that both vanish there — and it is the check that says the exact form reduces to the plain beam rather than merely approximating it.
Expanded about that point the four separate immediately, and the order surprises most readers. The uniform moment factor goes as one plus five twelfths of the parameter squared; the point-load moment factor as one plus a third of it. So the uniform case magnifies more, not less, at every load: at nine tenths of the critical load the uniform moment factor is 10.28 against the point load's 8.31. The reason is that these are ratios to a first-order answer, and a point load's first-order moment diagram is already peaked where the buckling mode is, so there is proportionally less for the axial force to add. A load spread along the span starts further from the mode shape and has further to be pulled toward it.
The familiar amplifier, one over one minus the load ratio, is the one-term version of all four, and how close it stays depends on which of the four is meant. Against the uniform deflection factor it is within a third of a per cent all the way to nine tenths of the critical load; against the uniform moment factor it is 1.5 per cent low at half and 2.8 per cent low at nine tenths; against the point-load deflection factor about 1.3 per cent high at nine tenths; and against the point-load moment factor it is 4.7 per cent high already at a quarter of the critical load and 20.4 per cent high at nine tenths. Only for the deflection factors is it a one-per-cent approximation, and for a central point load it is not an approximation of the moment at all beyond the lowest loads. What it is good for is making an interaction relation writable: the axial utilisation plus the moment utilisation with the moment amplified, checked against one. That expression reduces to pure compression when the moment vanishes and to pure bending when the axial force does, which is the property that makes it one criterion rather than two glued together.
The member is prismatic, single-span and pinned at both ends, and the critical load in the amplifier is that column's own.
The transverse load is symmetric about midspan, so the maximum moment and the maximum deflection are both there.
The material stays elastic, so the amplification runs to infinity where a real member would have formed a hinge and stopped.
The axial force is compressive and constant along the member; it is entered as a positive number on these screens.
The member is held against twisting and against lateral movement out of its plane, so the only instability available is the in-plane one.
Takes
Unit
Meaning
P
N
Axial force in the member — positive in tension unless the screen says otherwise.
q
N/mm
Distributed load intensity — force per unit length along the member.
L
mm
Length of the member along its own axis, support to support.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
M_p
N·mm
Plastic moment — the moment the section carries once every fibre has yielded.
Gives
Unit
Meaning
P_cr
N
Critical load — the axial force at which the member stops being straight and bows out.
delta_max
mm
Largest deflection anywhere along the member.
M_max
N·mm
Largest bending moment anywhere along the member.
amp
—
Amplification factor — how much the axial force magnifies a deflection that bending alone would have caused.
FoS
—
Factor of safety — how much bigger the resistance is than the demand.
util
—
Utilisation — how much of the capacity the axial force and the bending together have already used, where one means the limit has been reached.
What must always be true here. Each of these is a test in the suite, not a remark:
At zero axial force the amplification factor is exactly one and the result is the pure bending answer.
The amplified moment always exceeds the first-order moment under compression, and grows without bound as the axial force approaches the critical one. A tensile axial force stiffens the member instead, and this screen does not answer for it: the relation is written in the trigonometric form and reports nothing rather than an answer from the wrong branch.
The interaction expression reduces to pure compression when the moment is zero and to pure bending when the axial force is zero.
The amplification grows without bound as the axial force approaches the critical load.
A tensile axial force stiffens the member and reduces its deflection.
Where it stops.
The amplification expression is a series approximation whose error depends only on the load ratio: it leaves one per cent at about a third of the critical load and reaches about three per cent at nine tenths of it, always under-stating the exact trigonometric form. The screen must say which is running, and must warn past nine tenths.
Solution method
The screen runs the exact trigonometric factors, not the amplifier, and the series expansions in the code are there for the opposite reason from the usual one: they fix conditioning near zero load, not accuracy near the critical load.
The reason is cancellation. The secant of a small argument, less one, is the difference of two numbers that both approach one; dividing that difference by the argument squared throws away every digit that survived. At an argument of 0.01 the uniform moment factor written directly has already lost most of its precision, so below a threshold it is evaluated as its series instead — one plus five twelfths of the argument squared. The uniform deflection factor switches at a larger threshold for a stronger reason still: its bracket is a difference of three terms each approaching two, divided by the fourth power of the argument, and at 0.01 the direct form has lost eight digits. Each switch happens where the two forms already agree to more places than a double can hold.
There is no test of the cosine against zero anywhere in these factors, and that is deliberate rather than an omission. An argument at or beyond a right angle returns an unbounded value before any cosine is taken, and past that point a double's cosine is never exactly zero — the cosine of a right angle evaluates to 6e-17. A guard on the pole would be dead code that reads like caution, and this package has already deleted one.
The exact deflection factor is also what caught the incremental second-order solver being wrong. A trace that took the tangent at the start of each step converged beautifully: every halving of the step size halved the remaining change. It converged to a value nine per cent below the closed form for the same column. It looked convergent because it was convergent — a forward step never enforces equilibrium at the state it arrives in, so refining it approaches the path of a structure that is not this one. Only a closed form could say so.
Limitations
This screen drives the uniform-load case; the central point-load factors are derived by the same route and are computed by the same package, but they are not on this screen.
Tension is outside these forms as written — the exact solutions become hyperbolic rather than trigonometric — so the stiffening effect of a tensile axial force cannot be exercised here.
Above nine tenths of the critical load the answer becomes very sensitive to the axial force, and a small error in the load moves the moment a great deal; the screen warns there.
The interaction expression is a teaching relation from the research literature, not a design code check, and no national or regional standard is applied anywhere in the app.
The plastic moment used in the interaction assumes the section can actually reach it, which requires a compact section held against lateral-torsional buckling.
Reading the result
The moment factor and the deflection factor are not the same number, and under a uniform load the moment one is the larger at every axial load — one plus five twelfths of the parameter squared against one plus sixty-one one-hundred-and- fiftieths of it, which is 10.28 against 10.03 at nine tenths of the critical load. The two are close, and the closeness is the point worth carrying: the deflection is magnified almost as hard as the moment, so a member sized on the amplified moment has had nothing done for its deflection, which was already magnified by nearly the same factor and started from a serviceability limit rather than a strength one.
The factor of safety reported here is the plastic moment against the amplified moment, so it already contains the axial effect once. Applying an amplification to it again — a habit that comes from treating the axial and bending checks as separate — double-counts and produces a number with no meaning.
The deepest misreading is the additive one. A member at half its critical axial load carries twice the moment a first-order analysis predicts, not the first-order moment plus a small correction. At three quarters of the critical load it is four times. That is why this is not a screen you visit after the beam screen; it is a different calculation with a different answer.
Warning. Above nine tenths of the critical load the series form of the amplification is no longer accurate; the exact form is being used and the answer is very sensitive to the axial force.
Advisory. These are teaching curves from the research literature, not a design code check. No national or regional standard is applied anywhere in this app.
A column standing alone has a named end condition. A column inside a frame has neither a pin nor a fixed end: its ends are held by whatever beams happen to frame into them, and the restraint is a continuous quantity rather than one of six values. The measure of it is the stiffness of the columns meeting at a joint against the stiffness of the beams holding them — zero when the beams are infinitely stiff, which is a built-in end, and unbounded when there are no beams at all, which is a pin. Every real joint is somewhere between, and the alignment charts exist because nobody can guess where.
Derivation
The exact condition is a determinant assembled from the stability functions of the column and of the beams restraining it, and it is transcendental in the effective length factor. It is the relation the alignment charts were plotted from, and finding a value from it means searching for a root.
What the app evaluates is the published closed-form fit to those same charts: one rational expression for the braced case and one square root of a rational expression for the sway case, both written in the two joint restraints. The substitution was deliberate and it was made after a failure. The first version here was the transcendental relation, written out, and its corners came out wrong — both ends built in gave one where the chart says one half. A relation whose corners can be checked in a single line is worth more than a more exact one that cannot be, and these corners are exact rather than approximate:
Braced with zero restraint at both ends, the expression is 0.64 over 1.28, which is one half exactly — both ends built in. Braced with unbounded restraint, the leading terms dominate and the ratio goes to one — both ends pinned. Nothing in between leaves the interval from one half to one, which is precisely the range the braced case is confined to.
Swaying with zero restraint gives the square root of 7.5 over 7.5, which is one exactly — twice the braced value from the same drawing. Swaying with unbounded restraint grows without limit, because a column pinned top and bottom in a frame that can sway is a mechanism, and a mechanism has no finite effective length.
That factor of two at the corner, and considerably more elsewhere, is why the sway condition is a branch the reader must answer rather than a default this layer picks. A braced column with a restraint of one at both ends has a factor of 0.778; the same column in a frame free to sway has 1.342. Nothing in a drawing of the column distinguishes the two, and the critical loads differ by a factor of three.
The beams framing into each joint bend in double curvature with the column, which is what the charts assume and what the restraint measure is built for.
All columns in the storey reach their critical load together, so one column's restraint is not being supplied by a neighbour that is itself about to fail.
Behaviour is elastic throughout, and the beams carry no significant axial force of their own.
The frame is regular enough that the joint restraint captures the whole of the end condition — no partial-strength connections, no semi-rigid joints outside the measure.
The sway condition is a property of the frame and is supplied by the reader; nothing in the column's own geometry can supply it.
Takes
Unit
Meaning
G_A
—
Stiffness ratio at the top end of a frame column — column stiffness over beam stiffness at that joint.
G_B
—
Stiffness ratio at the bottom end of a frame column.
sway
—
Whether the frame is free to lean sideways or is braced against it.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
L
mm
Length of the member along its own axis, support to support.
Gives
Unit
Meaning
K_eff
—
Effective length factor — the fraction of the real length that behaves like a pin-ended column.
P_cr
N
Critical load — the axial force at which the member stops being straight and bows out.
L_eff
mm
Effective length of the column — the length of the pin-ended column that would buckle at the same load.
Choices you have to make. The app shows these rather than picking one:
braced against sway, free to sway — The two equations are different and their answers differ by a factor of two or more. Defaulting to one is the single most consequential silent choice in the whole stability family.
What must always be true here. Each of these is a test in the suite, not a remark:
Perfectly rigid beams at both ends give an effective length factor of one half in the braced case and one in the sway case.
Perfectly flexible beams at both ends give one in the braced case and infinity in the sway case.
The braced factor is never above one, and the sway factor never below one.
Stiffer beams lower the effective length factor and raise the critical load.
Allowing the frame to sway always raises the effective length factor, usually by a factor of two or more.
Where it stops.
The stability functions in the underlying equation are indeterminate at zero axial force and must be evaluated by series expansion below a threshold set from the high-precision reference values, not from a guess.
Solution method
Closed form both ways, selected by the sway branch, with the fit reproducing the chart to about two per cent across its whole range.
That two per cent is stated here and nowhere the reader can see it. The relation printed beside the factor names the closed form that produced it, which is honest as far as it goes, and the equation displayed at the head of the screen is the transcendental one the charts were plotted from — which the app does not evaluate. This is the one place in the manual where the general rule stated in the opening chapter, that a relation printed here is the relation the app evaluates, does not hold: the two expressions actually evaluated are the ones printed under this entry, and the equation above them is the exact condition they are fitted to. Read the pair together, and treat the factor as carrying two per cent whatever the screen shows.
The infinite case is short-circuited rather than approached. A restraint that is unbounded — no beams at all — returns one braced and infinity swaying directly, so the pinned corner is a stated value rather than the limit of an expression dividing one large number by another. The restraint measure itself returns infinity when the beam stiffness is zero, which makes the same statement at the input rather than in the middle of the calculation. Negative restraint returns nothing.
The critical load then follows from the Euler relation with this factor, and the screen also reports the effective length itself, since that is the quantity a slenderness is built from and it is the one readers most often build from the wrong length.
Choosing the fit over the transcendental also removed a numerical problem rather than solving it. The stability functions in the exact relation are indeterminate at zero axial force and need a series expansion below some threshold; the closed form never evaluates them, so the threshold never has to be chosen.
Limitations
The closed form is a fit to the chart, accurate to about two per cent, and is not the root of the transcendental relation.
The restraint measure assumes the far end of each beam behaves as the chart assumes; a beam pinned at its far end, or one already carrying axial load, has a different effective stiffness and the reader must adjust the restraint before entering it.
Assuming all columns in a storey buckle together is optimistic for a storey with one slender column among stiff ones, where the weak column draws restraint from neighbours that are nowhere near failing.
Inelastic behaviour is absent: a stocky column's real restraint is higher than the elastic measure suggests, so the factor is conservative there and the load is not.
The independent public-domain check for this module is weaker than for the rest of the family — a full search of the reference library found the alignment-chart relation in these terms nowhere at all.
Reading the result
Read the sway branch first, then the number. This is the single most consequential silent choice in the whole stability family: the same two joint restraints give a factor of one half braced and one swaying, and the critical load differs by four. No drawing of the column shows which applies, and the column itself does not know.
Then read the factor against the named end conditions and be surprised in the right direction. A joint that looks thoroughly rigid on a drawing — a welded connection to a beam of similar size — has a restraint near one, and a restraint of one at both ends gives 0.778 braced. That is nearer the pinned answer than the built-in one. The built-in factor of one half requires beams infinitely stiffer than the column, which no real frame provides.
The effective length reported beside the factor is the number to carry forward. A slenderness built from the storey height rather than from the effective length is the most common way this screen's answer is thrown away immediately after it is obtained.
Warning. Above nine tenths of the critical load the series form of the amplification is no longer accurate; the exact form is being used and the answer is very sensitive to the axial force.
Advisory. This factor comes from the published closed form for the alignment chart, not from solving the chart's own transcendental equation. On the braced side the two agree to about one and a half per cent across the usual range of restraint -- 0.834 against 0.831 for the state this screen opens on. The closed form is used because its corners are exact where a hand-written transcendental's were not: perfectly rigid beams at both ends give one half exactly, perfectly flexible ones give one. Substituting this factor back into the chart equation therefore leaves a small residual, and that residual is the approximation, not an error.
Implemented by braced_frame_factor, sway_frame_factor, frame_effective_factor, joint_restraint, euler_load.
Torsional & Lateral Buckling
Members that fail by twisting rather than bowing, and beams that trip sideways out of their own plane.
Every column in the Euler account fails by bowing in a plane. Two other things can happen first, and a bending analysis is blind to both. A column can stay straight and twist — only open thin sections do this, because only they are weak in torsion, and a cruciform or a thin angle can fail this way well below its Euler load. And a beam bending about its strong axis can trip sideways and twist at the same time, which is why a deep unrestrained joist is not as strong as its section modulus says. Both are governed by the same two stiffnesses, and the ratio between them decides which one is doing the work.
Derivation
Twisting resistance comes in two parts that behave in opposite ways with length. Uniform torsion contributes a stiffness that does not care how long the member is; warping restraint contributes one that vanishes as the square of the length. Dividing their sum by the square of the polar radius about the shear centre gives the load at which twisting becomes possible.
The consequence has no analogue in the Euler account. As a member gets longer the torsional load falls only while warping is doing the work, then stops at the uniform-torsion value and stays there, while the Euler load keeps falling. So torsional buckling governs short members and flexural buckling long ones, and there is a crossing — which is why the screen shows all three loads at once rather than reporting the smallest.
The polar radius is taken about the shear centre, carrying a parallel-axis term in the offset, because a section twists about its shear centre and not its centroid. For a doubly symmetric section the two coincide and this is the ordinary polar radius; for a channel it is not, and using the centroidal one overstates the torsional load. That is the commonest error in the subject and it is unconservative.
When the two centres coincide, the twisting and bending modes are independent and the critical load is simply the smallest of them. When they do not, the modes couple. Twist by an angle about the shear centre and the centroid, sitting an offset away, moves sideways by the offset times the angle — at right angles to the offset. That sentence is the whole coupling, and it says which flexural mode is involved: the one bending in that direction, built from the second moment about the axis the offset is measured along. For a channel that is the strong axis, not the weak one.
The coupled load is the smaller root of a quadratic whose leading coefficient is one minus the square of the offset over the polar radius. It is always at or below the smaller of the two uncoupled loads: coupling never helps. With the shear centre at the centroid the leading coefficient is exactly one, the quadratic factorises, and the answer is exactly the smaller of the two — so the singly symmetric case contains the doubly symmetric one rather than merely resembling it.
The beam's critical moment is the same two stiffnesses in a different arrangement: a classic narrow-rectangle factor multiplied by a warping factor that is exactly one when the warping constant vanishes. Note which second moment appears — the weak-axis one. A beam trips because it is weak sideways, and making it deeper, which raises the strong-axis second moment, does not help at all.
r_0^2=r_x^2+r_y^2+x_0^2
P_φ=(1)/(r_0^2)(GJ+(π^2EC_w)/(L^2))
(1-((x_0)/(r_0))^2)P^2-(P_x+P_φ)P+P_xP_φ=0
M_(cr)=(π)/(L)√(EI_yGJ)√(1+(π^2EC_w)/(GJL^2))
warping share=(π^2EC_w)/(GJL^2+π^2EC_w)
Assumptions
The section is thin-walled and open, keeps its cross-sectional shape as it twists, and the wall is thin compared with the width of the elements that make it up.
The ends are simply supported for twist and free to warp, which is the boundary condition the warping term's length dependence encodes.
The section is at most singly symmetric and the shear-centre offset lies along one principal axis only.
The beam's critical moment is for uniform moment along the whole span, which is the most severe of the ordinary loadings.
There is no intermediate lateral or torsional restraint anywhere along the length.
Takes
Unit
Meaning
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
G
MPa
Shear modulus — how much shear stress it takes to produce a given angular distortion.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
I_y
mm⁴
Second moment of area about the vertical centroidal axis.
J
mm⁴
Torsion constant — the section's resistance to twisting, equal to the polar second moment only for circular shapes.
C_w
mm⁶
Warping constant — the section's resistance to the axial stretching that accompanies twist in an open thin-walled shape.
r_x
mm
Radius of gyration about the horizontal axis — the distance at which all the area could sit and give the same bending resistance.
r_y
mm
Radius of gyration about the vertical axis.
L
mm
Length of the member along its own axis, support to support.
e_sc
mm
Shear centre offset — the distance from the centroid to the point a transverse load must pass through if the member is not to twist.
Gives
Unit
Meaning
r_0
mm
Polar radius of gyration about the shear centre, which is what couples twisting to bending.
P_phi
N
Torsional buckling load — the axial force at which the member fails by twisting rather than bowing.
M_cr
N·mm
Critical moment — the bending moment at which a beam buckles sideways and twists.
P_cr
N
Critical load — the axial force at which the member stops being straight and bows out.
mode_shape
—
The deflected shape the structure takes as it buckles.
What must always be true here. Each of these is a test in the suite, not a remark:
With no warping constant the torsional buckling load is exactly the St Venant value, and the beam's critical moment is exactly the narrow-rectangle value -- both one-line anchors no transcription slip reproduces.
The torsional-flexural load is at or below the smaller of the two uncoupled loads, and equals it exactly when the shear centre is at the centroid -- so the doubly symmetric case is contained in the singly symmetric one rather than resembling it.
Twist about the shear centre moves the centroid at right angles to the offset, so the flexural mode that couples with it is the one bending in that direction -- the second moment about the axis the offset is measured along, not the weak-axis one. Pairing the other second moment leaves every other quantity on the screen unchanged.
The polar radius is taken about the shear centre, so it carries the parallel-axis term in the offset; using the centroidal one instead overstates the torsional load.
The torsional load falls with length only while warping is doing the work, and then stops at the St Venant value -- unlike the Euler load, which keeps falling, so torsional buckling governs short members and flexural governs long ones.
A beam trips because it is weak sideways, so the critical moment depends on the weak-axis second moment and not at all on the strong one: making the beam deeper does not help.
Where it stops.
A section with no torsional stiffness has no lateral-torsional critical moment to report, because the expression divides by it; the answer is absent rather than infinite.
The coupled quadratic's leading coefficient is one minus the square of that ratio, so an offset at or beyond the polar radius leaves no positive root; such a section does not exist, and the refusal says so rather than returning the negative root.
Solution method
Closed form throughout, with three refusals that are statements rather than guards. A shear centre at or beyond the polar radius makes the coupled quadratic's leading coefficient vanish and leaves no positive root; such a section does not exist, and the kernel returns nothing rather than the negative root, which would print as a plausible load. The exactly doubly symmetric case is short-circuited to the smaller of the two uncoupled loads rather than left to a quadratic whose discriminant would be a difference of nearly equal numbers. A section with no torsion constant has no lateral-torsional moment to report at all, because the warping factor divides by that stiffness — the answer is absent rather than unbounded.
The screen also reports the warping share, which runs from one for a short member to nothing for a long one. It is the number that says whether shortening the member will help, because only the warping part responds to length.
One thing here was wrong once, and how it was found is worth recording. The twisting mode was paired with the weak-axis flexural load rather than the one belonging to the offset direction. Every other quantity on the screen — polar radius, torsional load, critical moment, warping share — stayed exactly correct, and only the coupled load moved, by eighteen per cent. Nothing inside the project could see it. What found it was a worked example in a public-domain NASA structures manual, and the adjudication was not "the manual is NASA" but a re-derivation of the axial energy term from the displacement field, independent of both parties. That same manual prints two arithmetic errors of its own on the page in question: an independent source is independent, not infallible.
Limitations
Torsional buckling matters only for open thin sections; for a closed tube the torsion constant is enormous and this mode will never govern.
The warping constant and the shear-centre offset are section properties the reader supplies, and an error in either is invisible in every other output on the screen.
The coupled root is refused rather than approximated when the offset reaches the polar radius, because there is no positive root to report.
Inelastic torsional buckling is out of scope, and short members — exactly the ones this mode governs — are often past the proportional limit.
The beam's critical moment assumes uniform moment and applies no moment-gradient factor, so it is conservative for most real loadings and the screen does not say by how much.
Reading the result
Read all three loads at this length, then change the length and watch the order change. The crossing is the point of the screen: a short open column is limited by twisting and a long one by bowing, and a screen reporting only the smallest would hide the fact that which mechanism governs is a design variable.
Check which centre the polar radius belongs to. It is reported here about the shear centre, and a value taken about the centroid is larger, which makes the torsional load larger — wrong in the unsafe direction, and indistinguishable from a correct answer once it is on the page.
For the beam, the strong-axis second moment does not appear anywhere in the critical moment. That is not an omission. A beam trips because it is weak sideways, and a reader who deepens a section to fix a lateral-torsional problem has changed the number that does not matter and left the one that does.
Implemented by polar_radius, torsional_load, torsional_flexural_load, lateral_torsional_moment, warping_share, euler_load.
Plate Buckling
Buckling of a plate panel, with the coefficient minimised over half-waves and the number shown.
A plate compressed in its own plane buckles out of plane, and unlike a column it does not collapse when it does. It is supported along its edges, so a buckled plate keeps carrying: the strips beside the supported edges stay effective and the middle sheds load to them. The critical stress is the start of a redistribution, not the end of the plate — which is why this module reports an effective width alongside a critical stress, and why the two together are the answer rather than either alone.
Derivation
The plate equation under uniform edge compression admits a shape that is sinusoidal along the loaded direction with some number of half-waves, multiplied by a function of the transverse coordinate fixed by the unloaded edges. For a plate simply supported on all four edges that transverse function is a single half sine, and the coefficient works out to the square of a quantity plus its own reciprocal, the quantity being the half-wave count times the width over the length.
A sum of a thing and its reciprocal has a minimum of two, so the coefficient has a minimum of four, reached whenever the length equals the half-wave count times the width. A plate therefore buckles into square panels whatever its length — the one fact about plate buckling everybody remembers — and it explains why the coefficient stops depending on length once the plate is long: the plate simply takes another half-wave.
The critical stress follows from the plate's flexural rigidity, and two things about it are worth stating separately. The dimension that appears is the width, not the length, which is why a long plate is no weaker than a square one. And it appears squared, along with the thickness, so a small change in thickness moves the answer a great deal.
Changing the unloaded edges changes the transverse function and therefore the coefficient. With both unloaded edges built in, the transverse function must vanish with zero slope at each, and this app uses a two-term energy shape whose terms are one minus a cosine of two and of four transverse half-periods; the coefficient is the smaller root of the resulting two-by-two problem. With one unloaded edge free, the plate tips about its supported edge rather than bulging between two of them, the transverse function is linear, and the twisting term in the strain energy — which integrates away in the other two cases — survives and produces the whole of a second term depending on Poisson's ratio and nothing else. At 0.3 that term is 0.4256: the long-plate value, reached by derivation and therefore carrying a value at every aspect ratio rather than at one.
k=((mb)/(a)+(a)/(mb))^2, k_(min)=4 at a=mb
σ_(cr)=(kπ^2E)/(12(1-ν^2))(t/b)^2
k_(free)=(b/a)^2+(6(1-ν))/(π^2)
b_(eff)=bmin(1,√((σ_(cr))/(σ_y)))
Assumptions
The plate is flat, of uniform thickness, thin against both plan dimensions, and isotropic.
The loaded edges are simply supported in all three branches; only the unloaded edges change, and they are idealised as perfectly simple, perfectly built in, or perfectly free.
The compression is uniform along the loaded edges, with no shear and no transverse compression present.
The plate is elastic at buckling; plastic buckling of plates is a different theory with different coefficients.
The edges stay straight in the plane of the plate while remaining free to move along it.
Takes
Unit
Meaning
a_plate
mm
Length of the plate in the direction of the applied compression.
b_plate
mm
Width of the plate between its supported edges.
t
mm
Wall thickness of a thin part — a flange, a web, a tube wall, a plate.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
nu
—
Poisson's ratio — how much a material narrows sideways when you stretch it.
edge_cond
—
How the plate's unloaded edges are held — simply supported, fixed, or free.
sigma_y
MPa
Yield stress — where the material stops springing back.
Gives
Unit
Meaning
k_plate
—
Plate buckling coefficient — the number that carries all the effect of edge conditions and proportions.
sigma_cr
MPa
Critical stress — the average stress in the member at the moment it buckles.
m_wave
—
Number of half-waves the plate buckles into along its loaded direction.
b_eff
mm
Effective width — the strip of a buckled plate that is still carrying its share of the load.
Choices you have to make. The app shows these rather than picking one:
both edges simply supported, both edges fixed, one edge free — The coefficient spans from about 0.4 to about 7 across these; the choice matters more than any other input.
Cases this screen covers without asking. Both sides of each of these are handled by the code, so there is no control for them:
the half-wave count that minimises the coefficient — Two aspect ratios either side of a crossing buckle into different shapes with the same coefficient. Hiding the count hides the physics.
What must always be true here. Each of these is a test in the suite, not a remark:
For a square simply supported panel the coefficient is exactly four.
The coefficient is periodic in the aspect ratio in the sense that its envelope repeats as each new half-wave takes over.
The effective width equals the full width exactly when the applied stress equals the critical stress.
A long panel tends to a constant coefficient regardless of how long it gets.
Fixing the unloaded edges roughly doubles the coefficient relative to simple support.
The critical stress falls with the square of the width to thickness ratio.
Where it stops.
The coefficient is the lower envelope of a family of curves and is not differentiable where two half-wave counts cross; dragging the aspect ratio across such a point changes the number of half-waves, and that number must be displayed.
Solution method
The half-wave count is chosen by evaluating the coefficient for every count up to forty and keeping the smallest, not by rounding the aspect ratio. That is not fastidiousness: at an aspect ratio equal to the square root of a count times the next one, two neighbouring counts give exactly the same coefficient, and rounding picks the wrong one on one side of the crossing. The built-in case is minimised the same way and gives a different count for the same plate — its optimum ratio is about 1.52 rather than 1, so a built-in plate buckles into panels half again as long as its width. The free-edge case has no count to minimise over: a plate with a free edge tips in one bulge however long it is, so a count of one is the answer rather than a default.
The long-plate limits are checked against a public-domain table of buckling coefficients for infinitely long plates published as a NACA technical note, a work of the United States Government, read from a high-resolution render of the page rather than the scan's text layer — the optical recognition there turns one printed figure into punctuation.
The simply supported value agrees exactly at four. The built-in value is where this module states its own error rather than hiding it. The obvious one-term shape gives 7.2855 against a published 6.98: 4.4 per cent high, and high is the dangerous direction, because too large a coefficient predicts too large a critical stress, so a screen running it would call a panel safe that is not. An assumed shape can only err this way, since it adds constraint the real plate does not have. A second term costs one quadratic and buys most of the gap — 7.2855, 7.0522, 7.0026, 6.9863 — so the app returns 7.0522, one per cent high rather than four and a half, with the remainder written down. Transcribing the published constant instead was rejected: it is worth nothing at any other aspect ratio and cannot be checked against anything. What can be checked is where the minimum sits, and this shape puts it at 0.6605 against a published minimising ratio of 0.66. The shape is right; only the energy it costs is slightly overstated. The free-edge gap runs the other way — 0.4256 to two figures is the printed 0.43, so there the rounding is the source's.
The effective width is the width scaled by the square root of the critical stress over the yield stress, capped at the full width, because a plate that has not buckled is entirely effective. The cap is what makes that width equal the full width exactly at the critical stress rather than approximately.
Limitations
The built-in coefficient is a two-term energy estimate about one per cent above the published value, and that error is on the unconservative side.
Only uniform edge compression is offered; shear buckling and combined loading are outside this module.
The three edge conditions are idealisations and a real panel's edge is between a simple support and a built-in one — the two answers differ by nearly a factor of two, so the bracket a real panel sits in is wide.
The effective-width relation is the classical form and takes no account of initial out-of-flatness, which every real panel has.
These are research coefficients for teaching, not a design code check; no national or regional standard is applied anywhere in the app.
Reading the result
Read the half-wave count, not just the coefficient. Two aspect ratios either side of a crossing buckle into visibly different shapes with the same coefficient, and the coefficient alone conceals that entirely. The coefficient is the lower envelope of a family of curves and is not differentiable where two counts tie; dragging the aspect ratio across such a point changes the shape the plate goes into while the number barely moves.
Read the edge condition before anything else. It carries the coefficient from about 0.43 to about 7 — a factor of sixteen, wider than any other input on this screen moves it — and it is a judgement about how the panel is attached rather than a measurement of anything.
Finally: a plate that has reached its critical stress has not failed. The effective width says how much of it is still working, and that is the number to carry into a strength calculation. Carrying the full width forward past the critical stress credits the panel with material that has already stopped taking load.
Advisory. These are teaching curves from the research literature, not a design code check. No national or regional standard is applied anywhere in this app.
Warning. The buckling stress here is above the yield stress entered on this same screen, so the plate reaches yield first and buckles inelastically if at all. The elastic critical stress is still the right number for what it is, but it is not the stress this plate fails at, and the effective width beside it is computed from it rather than from yield.
Implemented by plate_coefficient, plate_half_waves, plate_coefficient_fixed, plate_half_waves_fixed, plate_coefficient_free_edge, plate_critical_stress, effective_width.
Non-linear & Walls
Second-Order Analysis
Equilibrium written on the deformed structure, traced load step by load step.
(K+K_g(N))Δu=Δf, p_y(x)=-N(d^2v)/(dx^2)
Basis
A first-order analysis writes equilibrium on the structure as it was drawn. A second-order analysis writes it on the structure as it has moved. The difference is that the axial force already in a member, acting through that member's own curvature, produces an extra transverse loading. Assembled over the element it is a matrix that adds to the elastic stiffness and is proportional to the axial force in it: negative for a strut, so compression softens the structure, and positive for a tie, which is why a guy rope stiffens what it braces.
Derivation
Take a beam element with the usual cubic shape functions and write the work done by the axial force as the member shortens along its own bowed length. The second variation of that work is the geometric stiffness, the axial force through the integrated products of the shape function derivatives. Its translation term is thirty six N over thirty L; its rotation terms are four N L over thirty and minus N L over thirty, opposite in sign and a factor of four apart; and its coupling between a sideways movement and a rotation is N over ten, with no length in it at all — the one entry a dimensional check cannot catch.
Equilibrium then reads elastic plus geometric stiffness, acting on the displacements, equal to the loads. The geometric part is proportional to the axial force and the axial force to the load, so scaling the load case scales it by the same factor. The structure stops being stable when the sum stops being positive definite, and that factor is the critical load factor — the same event the closed-form buckling analysis describes, reached from a different direction. One counts pivots, the other is a formula in the length, and the two agree.
Now the honest part. The geometric stiffness is a linearisation: it keeps the axial force and drops everything of higher order in the displacement, so it is a first correction, right in the limit of small load and increasingly wrong as the critical load is approached. The amplification shows why in one expression — the correction is not a fixed percentage but a pole. At a critical factor of five it is twenty five per cent; at two, a hundred; at one and a tenth, a factor of eleven; at one, unbounded. Long before that the neglected terms have stopped being small. The critical factor stays useful; the displacements near it do not.
Displacements are moderate: the geometric stiffness written in the axial force alone is the whole correction, and large-rotation terms are not present.
The material stays elastic. Nothing here knows about yield, and a real column usually yields well before the elastic limit point this traces to.
The axial force in each member is taken as constant along its length.
Loads keep their direction and their point of application as the structure moves.
The geometry is perfect: no initial bow and no eccentricity. Imperfections are what actually govern a real member, and they belong to their own modules.
Takes
Unit
Meaning
nodes
mm
Node coordinates of the model.
members
—
Which two nodes each member connects, and which section and material it uses.
loads
N
Node loads and member loads making up the load case.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
A
mm²
Cross-sectional area — the amount of material you would see if you sliced the member straight across.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
n_steps
—
Number of load increments used to trace the path.
Gives
Unit
Meaning
u_vec
mm
Displacements of every free degree of freedom in the model.
diagram_M
N·mm
Bending moment along the member.
lambda_cr
—
Load factor at buckling — multiply the reference load case by this to reach the critical load.
K_geo
N/mm
Geometric stiffness matrix — the extra stiffness, positive or negative, that axial force adds.
delta
mm
Deflection — how far a point has moved from where it started.
Choices you have to make. The app shows these rather than picking one:
incremental trace, one-line amplification, exact beam-column formula — Three routes and they do not all agree, which is the point. The trace re-solves on the tangent stiffness of the state it has reached; the amplification divides the first-order answer by one minus the load ratio and is exact only when the structure deflects into its own buckling mode; the closed form is exact for a pinned column pushed at its middle and exists for nothing else. Watching the third confirm the first and the second miss by a tenth is worth more than any of them alone.
What must always be true here. Each of these is a test in the suite, not a remark:
At vanishing load the second-order solution converges to the first-order one, because the geometric stiffness is proportional to the axial force and there is none.
The tangent stiffness matrix loses positive definiteness exactly at the load factor the closed-form buckling analysis predicts, and the two routes share no algebra: one counts negative pivots, the other is a formula in the length.
The traced displacement approaches the one-line amplification of the first-order answer as the steps are refined, and each converged increment satisfies equilibrium on the deformed geometry to within the stated residual.
Compression softens the structure and amplifies displacements; tension stiffens it, so the same lateral load moves a compressed member further than an unloaded one.
Halving the load step size changes the traced path by less than the convergence tolerance, up to the limit point -- the steps are places to look, not places the answer depends on.
Where it stops.
The method stops at the limit point; it does not trace the path beyond it. The screen must stop and say how many increments completed rather than return the last converged step as if it were the peak.
A structure in which nothing is compressed does not buckle at any load, so the critical factor is unbounded rather than very large.
Solution method
Three routes, offered together because they do not agree and the disagreement is the content.
The trace applies the load case in equal shares and solves each share to a fixed point: solve, recompute each member's axial force from the state that produced, re-solve with that, until the two agree to a relative twelve figures. The final state therefore satisfies equilibrium on the geometry it has actually reached, which is what a second-order answer has to mean. It is deliberately not an incremental forward step. The first version was one, and it converged beautifully to the wrong number — every halving of the step halved the remaining change, and the limit sat nine per cent below the exact closed form for the same column. A forward step never enforces equilibrium where it arrives, so refining it approaches the path of a structure that is not this one.
The second route divides the first-order displacement by one minus the reciprocal of the critical factor, exactly when the structure deflects into its own buckling mode and approximately otherwise. The third is the exact beam-column factor for a pinned column pushed sideways at its middle; it exists for that one shape and nothing else, and it is the only thing on the screen able to adjudicate the other two. Below a parameter of one hundredth it is taken from its series, the tangent minus its argument being a cancellation of two numbers that agree to five figures there.
The critical factor comes from counting negative pivots rather than from an eigensolver: by the invariance of the signs of a factorisation, the negative diagonal entries at a trial factor count the modes already below it, so the first critical factor is a bisection on whether that count is still zero. It cannot converge to the wrong mode, which a shifted iteration can, and where nothing is in compression it is infinite rather than very large.
The trace stops at the limit point and says how many increments completed, instead of passing off the last converged step as the peak. The displacement it watches is the one that changes between the two solutions, not the largest — a heavily loaded column shortens far more than it sways, and axial shortening is not a second-order effect at all.
Limitations
The geometric stiffness is a linearisation valid below the critical load and increasingly wrong as it is approached; treat displacements above about half the critical factor as indicative rather than accurate.
Elastic behaviour throughout, so this is an upper bound on a real member that will yield first.
Perfect geometry, so it cannot reproduce the gradual growth of deflection that a real, slightly bowed member shows from the first increment.
The trace does not follow the path past the limit point, and does not attempt snap-through or post-buckling behaviour.
The canon warns when the reduced stiffness matrix becomes badly conditioned, because axial and bending stiffness in a slender frame differ by so much that the small displacements lose accuracy before anything else does.
Reading the result
The critical factor multiplies the load case as written: a factor of six means this structure buckles at six times the loads in front of you. It is not a strength. It is an elastic bifurcation factor for a perfect member, and both yielding and initial crookedness lower the load a real one carries — often by a great deal, at intermediate slenderness.
Read the gap between the trace and the amplification as information. They meet where the structure deflects into its own buckling mode and separate where it does not, and averaging them would destroy the only thing having both is for.
And do not read a smoothly converged trace as a validated one. Convergence in step size proves the steps are fine enough. It proves nothing about the formulation, which is how the nine per cent above went unnoticed.
Warning. Axial and bending stiffness in this model differ by so much that the displacements have lost accuracy. Check member proportions before trusting the small numbers.
Hinges forming one by one until the structure turns into a mechanism, and the load factor that does it.
M_p=σ_y Z_p, Σ M_(p,i) θ_i=λΣ W_j δ_j
Basis
A ductile section does not fail when it first yields. It goes on rotating at a nearly constant moment — its plastic moment, the yield stress times the plastic section modulus — while the structure sheds moment onto whatever is still elastic. Collapse arrives only when enough hinges have formed for the structure to move as a linkage. A complete mechanism takes one more hinge than the degree of static indeterminacy, which is why a determinate structure has no reserve at all and a redundant one has exactly as much as its redundancy buys.
Derivation
Two theorems settle the subject. The kinematic, or upper bound, theorem says any mechanism you can imagine gives a load factor at or above the true one: equate the internal work of the hinges to the external work of the loads and solve. The static, or lower bound, theorem says any moment field in equilibrium and nowhere exceeding the plastic moment gives a factor at or below it. The collapse load is the single value satisfying both.
Write the upper bound for a beam span. Give the mechanism a unit deflection at a sagging hinge a distance a from the start of a span of length L. The two halves rotate through one over a and one over L minus a, and the sagging hinge turns through their sum. Each restrained end — a support holding the rotation, or a neighbouring span doing it — adds a hogging hinge turning through its own end rotation. A uniform load rides a triangle of unit height and does half the total load on the span in work. The factor is the ratio of the two.
Minimising that ratio over the hinge position is the theorem in use rather than quoted. For a propped span it gives two over L minus a, squared, equal to one over a squared, so a is root two minus one, times L: 0.4142 L. Substituting back gives six plus four root two plastic moments over the span squared — 11.657, not a rounded table value. Putting the hinge at mid-span is a perfectly good mechanism and gives twelve: three per cent high, and high is the direction that matters. The other two classical cases fall out the same way, at eight simply supported and sixteen built in at both ends, the factor of two between them being the entire argument for plastic design.
M_p=σ_y Z_p
λ=(Σ_i M_(p,i) θ_i)/(Σ_j W_j δ_j)
θ_(start)=1/a, θ_(end)=(1)/(L-a)
a=(√2-1)L, w_c=((6+4√2)M_p)/(L^2)
w_cL^2/M_p = 8, 6+4√2, 16; n_(hinge)=r+1
Assumptions
The section is ductile and can rotate at its plastic moment without losing it — no local buckling of the flange or web, no lateral-torsional buckling, no fracture.
The analysis is rigid-plastic: deformation before collapse is ignored, so the answer says nothing about how far anything has moved.
The plastic moment is constant along each member, and is not reduced by the axial force or the shear present at the hinge.
The loads are proportional — a single factor scales the whole case — and are applied slowly.
Equilibrium is written on the undeformed geometry, so second-order effects, which lower the collapse load of a sway frame appreciably, are not included.
Takes
Unit
Meaning
nodes
mm
Node coordinates of the model.
members
—
Which two nodes each member connects, and which section and material it uses.
loads
N
Node loads and member loads making up the load case.
M_p
N·mm
Plastic moment — the moment the section carries once every fibre has yielded.
E
MPa
Young's modulus — how much stress it takes to produce a given stretch.
I_x
mm⁴
Second moment of area about the horizontal centroidal axis — how the material is spread away from that axis, which is what resists bending about it.
Gives
Unit
Meaning
lambda_coll
—
Collapse load factor — multiply the load case by this and the structure turns into a mechanism.
hinge_seq
—
The order in which plastic hinges form as the load is raised.
mechanism
—
The pattern of hinges and rigid links the structure collapses into.
diagram_M
N·mm
Bending moment along the member.
lambda_closed
—
Collapse load factor from the published closed form for this span's end conditions.
lambda_yield
—
Load factor at first yield — multiply the load case by this and the first section reaches its plastic moment.
n_hinge
—
How many hinges a complete mechanism needs: one more than the degree of indeterminacy.
Choices you have to make. The app shows these rather than picking one:
the position that minimises the load factor, a hinge at mid-span — Both are mechanisms and both are upper bounds, so both are answers -- but only the first is the collapse load. On a propped cantilever the mid-span guess is three per cent high, and being high is what makes a guessed mechanism dangerous rather than merely inaccurate.
What must always be true here. Each of these is a test in the suite, not a remark:
Any assumed mechanism gives a load factor at or above the true one, so a guessed hinge position is never conservative; the true value is the minimum over every mechanism.
The mechanism search reproduces the published collapse loads exactly: eight, eleven point six six and sixteen plastic moments over the span squared for the simply supported, propped and built-in cases under a uniform load.
The number of hinges at collapse equals the degree of indeterminacy plus one, for a complete mechanism; a partial mechanism collapses part of the structure with fewer.
Raising the plastic moment of the member that hinges first raises the collapse load factor, in exact proportion, because every term of the internal work carries it.
A structure with more redundancy takes more hinges before it collapses, which is the whole reserve plastic design is buying and the reason a determinate structure has none.
Where it stops.
A frame collapses by combining beam and sway mechanisms, and a beam search on one would report a mechanism it would never reach; the screen refuses with a reason rather than answering the wrong question.
A span with no load along it has no mechanism of its own and no load factor; the governing span is one of the others, and a span carrying nothing anywhere leaves the whole structure without an answer.
Solution method
This is the part to be clear about, because it decides what the answer means. The app searches over hinge position within a mechanism class it has fixed; it does not enumerate mechanisms. The class is the beam mechanism: one sagging hinge in one span, plus a hogging hinge at each end of that span which is restrained, whether by a support holding the rotation or by continuity with a neighbour. For each span between vertically held nodes the sagging hinge is swept over four thousand positions and the smallest factor kept; the weakest span governs and is named. The factor is flat near its minimum, so it comes out considerably more accurate than the position that produced it.
Everything outside that class is refused with a reason rather than answered wrongly. A frame is refused: its mechanisms are combinations — beam, sway, and the joint mechanisms made by adding them — and a beam search would confidently report one the structure would never reach. A span with no load along it has no mechanism of its own, and a beam with no load anywhere has no factor at all.
What that means is exactly what the upper-bound theorem says. The number is an upper bound on the true collapse load, and equal to it only when the governing mechanism lies inside the class searched. For a continuous beam under uniform loads it does. Introduce anything else and the answer stays an upper bound and becomes too high — never too low, which is the uncomfortable direction.
The branch makes that concrete rather than describing it: the minimising position, and a hinge at mid-span. Both are mechanisms, both are upper bounds, both are answers, and only the first is the collapse load. Beside the search sit the closed form for this span's end conditions — the same relationship by algebra rather than by minimising, so a slip in the virtual-work bookkeeping would move one and leave the other alone — the first-yield factor, and the two hinge counts.
Limitations
Beams only. Frames are refused, because their collapse mechanisms are combinations this search does not form.
One mechanism class: a single sagging hinge per span plus hinges at its restrained ends. A mechanism outside that class is not tried, so the reported factor is an upper bound and may not be the least one.
Uniform loads along a span and point loads at nodes. A point load part-way along a member would need the member split, which this screen does not do.
Rigid-plastic, so no deflection at collapse is computed, and serviceability — which frequently governs before strength — is a separate question.
Nothing here checks that the section can actually deliver its plastic moment; a slender web or an unrestrained compression flange will take it away.
Reading the result
Read the two hinge counts against each other. The mechanism found reports its own number of hinges, and beside it sits the number a complete mechanism would need, one more than the degree of indeterminacy. When they disagree the collapse is partial — one span goes while the rest of the beam is still standing — and that is the commonest case in the subject, not an anomaly.
Read the ratio of the collapse factor to the first-yield factor as the reserve, and notice where it vanishes. A simply supported span under a central point load collapses at first yield: determinate, one hinge is already a mechanism, nothing in reserve. Plastic design buys its margin from redundancy, not from the material.
Two cautions. When two sections reach their plastic moment together the hinge order is ambiguous, and a warning appears below a relative gap of one part in a thousand between the two largest section moments. It is a notice about hand solutions rather than about this one: the collapse load here is minimised over mechanisms rather than traced hinge by hinge, so the answer does not depend on which of the two tied sections is called first, and the smaller factor is the one shown. A reader working the same beam by hand has a choice to make at that point and this screen does not. The screen opens on a shape where the warning is showing, because equal spans put two interior supports at the same moment exactly. And an upper bound is not a safe number: the method produces an overestimate of capacity by default, and the only protection is minimising over mechanisms rather than trusting the first one that looked plausible.
Warning. Two sections reach their plastic moment together, so the hinge order is ambiguous. This screen does not depend on it: the collapse load is minimised over mechanisms rather than traced hinge by hinge, and the smaller factor is the one shown. A hand solution that traces an order has a choice to make here.
A gravity wall holds back soil with nothing but its own weight, and it can lose in three unrelated ways: tipping about its toe, which is a moment problem; sliding along its base, a friction problem; crushing the ground under its toe, a pressure problem. The three share no equation and do not fail together. A wall can be comfortably safe against two of them and short on the third, so a screen reporting one number would report the wrong one two thirds of the time.
Derivation
Fill at depth carries a vertical stress equal to the unit weight times the depth. Let the wall yield away by a small amount and the soil reaches limiting equilibrium, where the horizontal stress is the smallest the friction envelope permits — the active state, a fixed fraction of the vertical stress set by the friction angle alone. Push the wall into the soil and it is the largest permitted, the passive state, and the two fractions are exact reciprocals.
Integrating that pressure over the retained height gives a thrust proportional to the height squared, acting a third of the height above the base. Water is the same integral with a coefficient of one; a surcharge presses uniformly over the whole height and so acts at half of it — a longer lever on a smaller force. The wall is a rectangular block whose weight acts at mid-base, so its moment about the toe resists tipping while the thrust's causes it.
The base pressure follows from treating the base as a section in bending. The resultant crosses it at an eccentricity from the middle which — because the wall's weight acts at mid-base — is the overturning moment over the vertical load; direct plus bending stress, with a section modulus of the base width squared over six, gives the familiar load over width times one plus or minus six times the eccentricity over the width.
That expression goes negative once the eccentricity passes a sixth of the base, and negative pressure under a footing is soil pulling the wall down. Past it, part of the base has lifted and the pressure is a triangle over what is still in contact — a width three times the distance from resultant to toe, with a peak twice the average. How the linear formula fails there is why the switch is a visible branch and not a hidden guard: it does not blow up, it quietly returns a smaller peak than the truth. At three tenths of the base it gives 373 where the triangle gives 444 — nineteen per cent low, in the unconservative direction.
The active state is fully mobilised, which requires the wall to move away from the fill by a small but real amount; a wall rigid enough not to move carries closer to at-rest pressure, which is larger.
The back of the wall is vertical and smooth and the retained surface is horizontal, so friction on the back of the wall is ignored — conservative for the thrust, and not for the base pressure.
The fill is cohesionless, homogeneous and drained: cohesion is not an input, and there is no water table except by choosing water as the retained material outright.
The wall is a plain rectangular gravity block with no heel, no key and no reinforcement, and it is taken to be exactly as tall as the material it retains — one height sets both the pressure integral and the wall's own volume.
The ground is stiff enough for a linear base pressure to be meaningful; no settlement and no bearing-capacity check are performed.
Takes
Unit
Meaning
gamma_soil
N/mm³
Unit weight of the retained soil.
phi_soil
rad
Angle of internal friction of the retained soil.
H_wall
mm
Height of retained material against the wall.
B_wall
mm
Width of the wall base.
mu_base
—
Coefficient of friction between the wall base and the ground.
gamma_wall
N/mm³
Unit weight of the wall itself, which is the only thing holding it in place.
retained
—
What is behind the wall: drained soil, which has a friction angle to help, or water, which has none.
q_sur
MPa
Surcharge — a load spread over the ground behind the wall, which adds a uniform pressure on top of the triangular one.
Gives
Unit
Meaning
K_a
—
Active earth pressure coefficient — the fraction of vertical soil pressure that pushes sideways as the wall yields away.
K_p
—
Passive earth pressure coefficient — the sideways resistance mobilised as the wall pushes into the soil.
FoS_ot
—
Factor of safety against the wall tipping over about its toe.
FoS_sl
—
Factor of safety against the wall sliding along its base.
p_base_max
MPa
Largest bearing pressure under the wall base.
p_base_min
MPa
Smallest bearing pressure under the wall base, zero once the base lifts.
e_res
mm
Eccentricity of the resultant force where it crosses the base.
Choices you have to make. The app shows these rather than picking one:
drained soil, water — Water has no friction angle, so its coefficient is one where a drained soil's is a third: the same height of water pushes three times as hard, and it is the single strongest argument for putting drainage behind a wall. A screen that only ever showed soil would leave that unsaid.
Cases this screen covers without asking. Both sides of each of these are handled by the code, so there is no control for them:
resultant inside the middle third, full contact, resultant outside, base partly lifted — The linear formula quietly returns tension under a footing, which is meaningless and always non-conservative.
What must always be true here. Each of these is a test in the suite, not a remark:
The active and passive coefficients are exact reciprocals of one another, and both are written out separately so that multiplying them is a check rather than a tautology.
The resultant of the base pressure equals the total vertical load and passes through the same point, whichever of the two pressure distributions is in force.
With the resultant at the middle of the base the pressure is uniform, and at the middle-third limit the heel pressure is exactly zero -- which is where the two distributions meet.
A larger friction angle lowers the active coefficient and so lowers the push on the wall; a friction angle of nothing gives a coefficient of one, which is a liquid.
Widening the base raises both the tipping and the sliding factors of safety, and lowers the peak base pressure.
Water behind the wall raises the push far faster than soil alone, because it has no friction angle to help: its coefficient is one where a drained soil's is a third.
Where it stops.
Once the resultant leaves the middle third of the base, part of the base lifts and the linear pressure formula returns a negative pressure that cannot exist; the triangular distribution over the reduced contact width must be used instead, and it gives a larger peak.
A wall with nothing behind it has an unbounded factor of safety against both tipping and sliding, which is the answer rather than a very large number.
Solution method
Closed form. The only decision is which base-pressure distribution is in force, and the app makes it by comparing the eccentricity against a sixth of the base, then saying in the results which one it used and over what contact width. Once the base has lifted, the heel pressure is reported as exactly zero with the reason attached rather than as the negative number the linear formula gives. A warning appears beside the results at the same threshold, saying that the resultant has left the middle third and that the reduced-contact distribution is what is being shown — a sentence that is true of this screen and, until recently, was also pointed at the combined-load screen, where it was not: that screen shows the linear distribution and always did. The two were separated rather than reworded, because one sentence cannot describe two screens that do different things. Two infinities are answers rather than failures: a wall with nothing pushing on it is unboundedly safe against both tipping and sliding, and that is what is shown.
The two earth-pressure coefficients are written out as separate expressions rather than one as the reciprocal of the other, so that a property test asserting their product is one to fourteen digits is a check rather than a tautology.
A friction angle at or beyond a quarter turn returns nan, because the passive expression divides by one minus its sine; negative unit weights, heights and coefficients return nan; a zero vertical load or a zero base width makes the eccentricity nan rather than an infinity that would propagate silently into a pressure.
Limitations
This is not a code check of any kind — no partial factors, no bearing capacity, no reinforcement, no seismic case, and no national or regional standard is applied anywhere.
Passive resistance in front of the toe is reported as a coefficient and credited to neither factor of safety, so a wall with real embedment is treated more harshly than it is.
Only a rectangular gravity block is modelled; a cantilever wall with a heel gets substantial help from the backfill standing on that heel, and none of it appears here.
The two retained materials are dry drained soil and a full-height column of water, and the common real case — a partly submerged backfill — is neither of them.
Global stability, a slip surface passing beneath the whole wall, is not a mode this screen can see at all; nor are cohesion, layered or sloping fill, wall friction and compaction pressure.
Reading the result
Read all three results rather than the smallest: which one governs changes with the geometry, and widening the base moves all three at different rates.
The most instructive edit is switching the retained material from drained soil to water. On the wall the screen opens with, the coefficient goes from a third to one and everything moves at once: the sliding factor falls from 2.6 to 0.87, the tipping factor from 5.1 to 1.7, and the resultant leaves the middle third so the heel lifts clear. Nothing about the wall has changed. That is the argument for drainage, in one edit, and it is why the choice is a visible branch.
The base pressures are per unit length of wall, not totals, and the eccentricity sits next to the middle-third limit on purpose — so the resultant can be watched approaching the edge rather than discovered there.
A note on printed answers. A worked example in one of the works consulted while building this app prints a peak base pressure of 17.93 where its own printed inputs give 17.92. The cause is traceable: it rounds the base's section modulus from 1.0417 to 1.04 and carries that through the rest of its arithmetic. The fixture stores the recomputed value and takes its tolerance from the figures printed — attributing a difference is worth more than widening a threshold until it disappears.
Warning. The resultant has left the middle third, so part of the base has lifted. The reduced-contact distribution is being used.
Advisory. These are teaching curves from the research literature, not a design code check. No national or regional standard is applied anywhere in this app.
Every comparison below is a test that runs. The published value is what an independent, public-domain reference prints; the computed value is what this app produces from the same inputs. Where they disagree, the disagreement is recorded rather than removed.
These are the layer-5 checks described in the chapter on verification — the only layer independent of the primary references. The other four layers run against many more points than are listed here; this chapter covers the ones checked against an outside authority.
Axial Members
Quantity
Published
Computed
Unit
Verdict
extension of the removed bar per pound of redundant force
3.33e-6
3.33333e-06
in/lbf
disputed
Beam Diagrams
Source: NASA TM X-73305, Astronautic Structures Manual.
Quantity
Published
Computed
Unit
Verdict
M at x=1 in
200
200
in*lbf
agrees
M at x=5 in
1000
1000
in*lbf
agrees
M at x=10 in
2000
2000
in*lbf
agrees
M at x=13 in
1400
1400
in*lbf
agrees
Bending Stress
Source: NASA TM X-73305, Astronautic Structures Manual.
Quantity
Published
Computed
Unit
Verdict
Mc/I at x=1 in
4.8
4.8
ksi
agrees
Mc/I at x=5 in
24.0
24
ksi
agrees
Mc/I at x=10 in
48.0
48
ksi
agrees
Mc/I at x=13 in
33.6
33.6
ksi
agrees
Circular Shafts
Quantity
Published
Computed
Unit
Verdict
peak shear stress at the thin end
3260
3259.49
psi
disputed
torque from 20 hp at 300 rpm
4200
4201.69
in*lbf
disputed
torque from 8 hp at 300 rpm
1680
1680.68
in*lbf
disputed
torque from 12 hp at 300 rpm
2520
2521.01
in*lbf
disputed
Combined Bending + Torsion
Quantity
Published
Computed
Unit
Verdict
peak shear stress from the equivalent torque
12150
12152
psi
disputed
Eccentric Columns
Source: AFFDL-TR-69-42, Stress Analysis Manual.
Quantity
Published
Computed
Unit
Verdict
peak stress from the secant formula
10950
11032.5
psi
disputed
Elastic Constants
Source: MIL-HDBK-5J, Metallic Materials and Elements.
Quantity
Published
Computed
Unit
Verdict
shear modulus from E_bar and mu
4000
3.98496e+06
ksi
disputed
Poisson's ratio from E_bar and G
0.33
0.325
—
disputed
Energy Methods
Source: NASA TM X-73305, Astronautic Structures Manual.
Quantity
Published
Computed
Unit
Verdict
m at x=1 in
0.5
0.5
in*lbf
agrees
m at x=5 in
2.5
2.5
in*lbf
agrees
m at x=10 in
5.0
5
in*lbf
agrees
m at x=13 in
3.5
3.5
in*lbf
agrees
elastic centre deflection
0.6104
0.609524
in
disputed
Euler Column & Effective Length
Quantity
Published
Computed
Unit
Verdict
coefficient of constraint C for a column fixed at the base and free at the top
0.25
0.25
—
agrees
coefficient of constraint C for a column pinned at both ends
1.00
1
—
agrees
coefficient of constraint C for a column fixed at one end and pinned at the other
2.05
2.05
—
agrees
coefficient of constraint C for a column fixed at both ends
4.00
4
—
agrees
Force Systems & Resultants
Quantity
Published
Computed
Unit
Verdict
horizontal component of the 700 lb pulley force
495
494.975
lbf
disputed
vertical component of the 700 lb pulley force
495
494.975
lbf
disputed
moment of the horizontal-plane shear about the pulley
5810
5808
in*lbf
disputed
moment of the vertical-plane shear about the pulley
5030
5028
in*lbf
disputed
resultant of the two plane moments
7685
7684.86
in*lbf
disputed
Linear Solve & Results
Quantity
Published
Computed
Unit
Verdict
area under the simply supported moment diagram
45800
45800
in^2*lbf
agrees
vertical reaction at each base
500
500
lbf
agrees
horizontal reaction at each base
242
242
lbf
agrees
bending moment at each base
795
808.824
in*lbf
disputed
Non-Circular & Thin-Walled Torsion
Quantity
Published
Computed
Unit
Verdict
peak shear stress in the open section
8610
8617.59
psi
disputed (printed working at fault)
angle of twist of the open section
0.86
0.861759
rad
disputed (printed working at fault)
shear flow round the closed cell
13.1
13.1062
lbf/in
disputed
peak shear stress at the thinnest wall
210
209.699
psi
disputed
Plane Stress & Mohr's Circle
Quantity
Published
Computed
Unit
Verdict
radius of Mohr's circle for the shaft's stress state
12150
12152
psi
disputed
Plastic Collapse
Source: AFFDL-TR-69-42, Stress Analysis Manual.
Quantity
Published
Computed
Unit
Verdict
yield moment F_y I / c
36600
36630
in*lbf
disputed
fully plastic moment K M_y
54900
54900
in*lbf
agrees
central load at collapse M_fp / 10
5490
5490
lbf
agrees
Plastic Section & Shape Factor
Quantity
Published
Computed
Unit
Verdict
shape factor of a rectangle
1.5
1.5
—
agrees
shape factor of a solid circle
1.70
1.69765
—
disputed
Plate Buckling
Source: NACA TN 3781, Handbook of Structural Stability.
Quantity
Published
Computed
Unit
Verdict
k_c, SS on all edges
4.0
4
—
agrees
k_c, C on all edges
6.98
7.05215
—
disputed
k_c, SS three edges, F on x=b
0.43
0.42555
—
disputed
Section Builder & Properties
Quantity
Published
Computed
Unit
Verdict
second moment of a 1 in. square about its centroid
0.0833
0.0833333
in^4
disputed
second moment of a 2 x 1 in. bar about its strong axis
0.666
0.666667
in^4
disputed
radius of gyration of a 2 x 1/2 in. bar about its weak axis
0.144
0.144338
in
disputed
Support Reactions
Quantity
Published
Computed
Unit
Verdict
reaction at the pinned support
1667
1666.67
lbf
disputed
reaction at the roller
1333
1333.33
lbf
disputed
Thin-Walled Pressure Vessel
Source: AFFDL-TR-69-42, Stress Analysis Manual.
Quantity
Published
Computed
Unit
Verdict
hoop stress in the cylinder
12000
12000
psi
agrees
meridional stress in the cylinder
6000
6000
psi
agrees
membrane stress in the hemispherical head
10000
10000
psi
agrees (printed working at fault)
Torsional & Lateral Buckling
Source: NASA TM X-73306, Astronautic Structures Manual.
Quantity
Published
Computed
Unit
Verdict
I_0
54.75
54.8266
in^4
disputed
r_0^2
15.65
15.6647
in^2
disputed
P_x
647691
647693
lbf
disputed
P_y
174000
174157
lbf
disputed
P_phi
89200
89206.4
lbf
disputed
1-(x_0/r_0)^2
0.55
0.520733
—
disputed
P_cr
82727
83312.2
lbf
disputed
Transverse Shear Stress
Quantity
Published
Computed
Unit
Verdict
first moment of the half-section about the neutral axis
0.5
0.125
in^3
disputed
shear flow at the neutral axis
300
75.03
lbf/in
disputed
peak shear stress at the neutral axis
300
75
psi
disputed
Truss Displacements
Source: AFFDL-TR-69-42, Stress Analysis Manual.
Quantity
Published
Computed
Unit
Verdict
P u L/AE for member AB
3.50
3.5
1e-3 in
agrees
P u L/AE for member BD
2.82
2.82715
1e-3 in
disputed
P u L/AE for member BE
2.12
2.12036
1e-3 in
disputed
P u L/AE for member DE
2.00
2
1e-3 in
agrees
sum of P u L/AE over the six members
9.44
10.4475
1e-3 in
disputed
Truss — Joints & Coefficients
Quantity
Published
Computed
Unit
Verdict
force in member AB
-1925
-1924.5
lbf
disputed
force in member AG
962
962.25
lbf
disputed
force in member BG
1925
1924.5
lbf
disputed
force in member BC
-1925
-1924.5
lbf
disputed
force in member CG
382
384.9
lbf
disputed
force in member GF
1734
1732.05
lbf
disputed
force in member CF
-382
-384.9
lbf
disputed
force in member CD
-1541
-1539.6
lbf
disputed
force in member DF
1541
1539.6
lbf
disputed
force in member DE
-1541
-1539.6
lbf
disputed
force in member EF
770
769.8
lbf
disputed
What the tally means
Of the comparisons above, 28 agree exactly with the published value and 54 do not. A disagreement is not a defect in either direction until it has been adjudicated, and each one here has been. Several resolved against the published source: a manual whose printed answer does not follow from its own printed equation, a table whose total disagrees with the sum of its own entries, a working that divides by the wrong wall thickness and still reaches the right answer. Where the source was found to be at fault the test asserts that this app does not reproduce the published number, so that a later change which quietly matched it would fail.