Skip to content

Moment Curvature ​

Pushes a fibre section's curvature in any moment direction under a held axial force, and returns the moment–curvature curve, the stress–strain history of every fibre, and the curve's first yield and ultimate state: the ductility of the section and what makes it fail.

🔧 Grasshopper component ​

MomentCurvature (Alpaca4d) — Alpaca4d ▸ MomentCurvature_βeta, nickname MC

MC component
Inputs
FiberSectionFiberSectionThe section to analyse, from Fiber Section.
AxialNumber0.0Axial force held constant while the curvature is applied, in kN.
Positive is tension, negative is compression.
DirectionNumber0The moment direction, in degrees from the section's local y axis towards z, from -180 to 180: 0 bends it about y, 90 about z, and 180 and -90 the other way about each.
NumIncrInteger100Increments used to reach MaxPhi: the number of points on the curve, when it does not stop sooner.
MaxPhiNumberThe curvature along Direction to push the section to, in rad/m.
Left empty, it comes from the section's ultimate state: a fifth past it, or twice it when the analysis is not to stop there.
εudNumber0.01Ultimate strain, either way, of every fibre that is not Concrete01, as in Interaction Domain.
εcuNumberUltimate compressive strain of the concrete, positive.
Empty takes each Concrete01's own EpsilonCu.
StopAtUltimateBooleantrueStop at the first increment where a fibre reaches its ultimate strain.
Off, the analysis follows the section past it to MaxPhi.
Outputs
logTextThe OpenSees decks this component ran, the materials' curves and the analysis, followed by the solver's console output.
NNumberlistAxial force at each increment, in kN.
MyNumberlistMoment about the local y axis, in kN·m.
MzNumberlistMoment about the local z axis, in kN·m.
εNumberlistAxial strain at the section centroid, dimensionless.
κyNumberlistCurvature about the local y axis, in rad/m.
κzNumberlistCurvature about the local z axis, in rad/m.
fiberStressStrainGenericStress and strain history of every fibre.
Unpack it with Fiber Stress Strain.
MNumberlistMoment along Direction, in kN·m: My cos a + Mz sin a.
κNumberlistCurvature along Direction, in rad/m: κy cos a + κz sin a.
Plot M against κ for the curve.
κYieldYieldCurvatureNumberCurvature along Direction at first yield.
Empty when nothing yields.
MYieldYieldMomentNumberMoment along Direction at first yield, in kN·m.
κUltimateUltimateCurvatureNumberCurvature along Direction at the ultimate state.
Empty when the curve ends before it.
MUltimateUltimateMomentNumberMoment along Direction there, in kN·m.
μDuctilityNumberCurvature ductility, κUltimate / κYield.
EIYieldStiffnessNumberSecant stiffness to first yield, MYield / κYield, in kN·m²: an effective cracked stiffness.
FailureTextWhich material reaches its ultimate strain first, and where.
ResultGenericAll of it, for Moment Curvature Diagram to draw.

🧮 Yield and the ultimate state ​

The curve is read against the strain limits of Interaction Domain:

PointWhere
First yieldThe first fibre of Steel01 or ReinforcingSteel at its yield strain, fy / E, in tension or compression: a bar, or the extreme fibre of a steel section.
Ultimate stateThe first fibre at its ultimate strain: concrete at εcu, or at εc2 about point C when it is all in compression, and everything else at ±εud or its MinMax bounds.

Each is read between the increments either side of it, so it does not fall on the increment the analysis happened to take; first yield along the curve's slope before it, which is exact for a section that is elastic until then. Failure names the material and the point of the section that reached its limit.

The analysis stops at the ultimate state, at the first increment past it, unless StopAtUltimate is off. The point of the domain at the same N and direction is the same ultimate state reached along a straight path; the two agree to within a few tenths of a percent.

On an HEA 300 in S355 at N = 0, εud = 5 %, the curve yields at exactly Wel,y fy, at fy / E over half the depth, with the secant stiffness E Iy, and ends at Mpl,y at εud over half the depth: a ductility of εud / εy = 29.6.

Any direction ​

Direction, between −180 and 180 degrees, holds the moment to its direction and leaves the curvature across it free, as bending about y always held Mz at zero. The two ways about an axis differ for a section that is not symmetric: a beam with 3 φ20 at the bottom and 2 φ16 at the top, at N = −1000 kN, reaches 249 kN·m at 0 and 264 kN·m at 180. A section bent off its axes, or an unsymmetric one, turns its neutral axis as it needs to, and its curve ends on the N-M Diagram cut at the same angle. Under the hood the element is turned so that the direction lies on a global axis; the forces and deformations come back in the section's own axes.

📈 When to use it ​

Use it when

  • You need the path to failure, not just failure: cracking, yield and the ultimate state, all from the material laws.
  • You are assessing ductility: the curvature ductility of a column or a plastic hinge.
  • You need an effective cracked stiffness, EI = M/κ on the branch that matters.
  • You want the fibres' stresses under a given moment.

Use Interaction Domain instead for the N–M or N–My–Mz interaction at the ultimate limit state: it does not have to converge near the axial capacity, which a held Axial does.

Do not use it when

  • You want member behaviour. This is a section-level analysis; the section cannot yet be assigned to a ForceBeamColumn.

💡 Getting a good curve ​

  • Leave MaxPhi empty. It is taken from the section's ultimate state, and the analysis stops there: most of the increments go into the curve. Give it only to look past the ultimate state with StopAtUltimate off.
  • Raise NumIncr for a smooth curve. 100 points is enough to see the shape; 500 resolves the yield knee.
  • An increment that does not converge is tried again in ten steps of a tenth, then with a line search, then with the initial tangent, before the curve is given up on. A curve that still stops short comes with a warning, and what converged is on the outputs.
  • Sign the axial force correctly. A column carries compression, so Axial is negative. An axial force past what the section carries is refused before anything runs.
  • Moments are about the area centroid of every fibre, steel included, where OpenSees' fibre section takes them.

🔗 Relation to OpenSees

The component first has OpenSees trace each material's stress–strain curve, for the strain limits, as Interaction Domain does. It then writes and runs a complete section-analysis deck: a single zeroLengthSection element carrying the fibre section, turned by -orient to the moment direction, a Plain pattern applying the axial force, then a DisplacementControl push on the curvature DOF an increment at a time, with a fibre recorder capturing every fibre at every step, and a check of the strain limits after each increment.

Read the whole deck from the log output.

Note

Definitions made with the earlier Moment Curvature, which bent about y or z only and ran to MaxPhi, open with it; Grasshopper's Upgrade Components… swaps it for this one. The upgraded component keeps its wires and values: a Direction of y becomes 0 and z becomes 90, a Value List of the two wired to it is turned into one of 0 and 90, a Panel wired to it saying y or z says 0 or 90, a MaxPhi given stays given, and the curve now stops at the ultimate state.