SH1 · NONLINEAR-HINGE · Nonlinear Benchmarks

DcrPMMHinge3d custom P-M-M column hinge — element-mechanics defense

DCR-original P-M-M column hinge (plugin) — element mechanics vs published FEMA-356/ASCE-41 backbone + Fritsch-Carlson PCHIP

PASS 0.00% error tolerance 0.01% 1.25×10⁸ N·mm vs 1.25×10⁸ N·mm
§2

Technical features tested

  • DcrPMMHinge3d — DCR self-authored OpenSees plugin (no third-party example exists)
  • Isolated single-hinge rig (same strategy as the plugin’s own regression gates)
  • Uniaxial FEMA-356/ASCE-41 4-branch backbone — exact per-branch algebra
  • Elastic unload/reload secant
  • Biaxial Bresler-type capacity-envelope projection (DCR’s own §5.9 algorithm)
  • N-dependent capacity via independently re-implemented Fritsch-Carlson PCHIP
§3

Problem description

DcrPMMHinge3d is a zero-length, 6-DOF P-M-M column hinge that DCR authored and compiled as an OpenSees runtime plugin — there is no CSI/NAFEMS published example to compare against (unlike SP1), and the element has no bare-static-load-case production path either (it only appears inside the Pushover/THA RC-column FEMA lumped-hinge n-method assembly, which drags in a full structure and an arc-length driver — exactly the global-response complexity that made SP1 hard). SH1 instead isolates the ELEMENT ITSELF: two coincident nodes, one hinge, driven directly by DisplacementControl / prescribed-displacement ramps — the same isolation strategy the plugin author’s own regression gates use (gate_p1.tcl/gate_p2.tcl) — and compares it against closed-form expectations re-derived from scratch in this benchmark, never by reading the plugin’s C++ source. Honesty split (devplan §12.5/§12.11 precedent): quantities A/B/D verify the element against a published physical model — the standard FEMA-356/ASCE-41 four-branch generalized backbone (elastic→hardening→post-capping softening→residual) and the Fritsch & Carlson (1980) monotone-cubic interpolation algorithm — independently re-coded, not copied. Quantities C (biaxial Bresler projection) instead verify the implementation against DCR’s own §5.9 design specification (independent per-direction backbones + closed-form radial capacity projection) — the interaction surface FORM is a published power-law/Bresler-type envelope, but this specific combination algorithm has no external authority to validate against, since no other software runs this code.

node 1 (fixed) DcrPMMHinge3d node 2 (driven) theta_z / theta_y (DisplacementControl / sp) Bresler capacity envelope Mz / Mzu My / Myu (M̂z,M̂y)→β·(M̂z,M̂y)
Figure SH1. Isolated two-node DcrPMMHinge3d rig (node 1 fixed, node 2 driven directly) — the same single-hinge isolation strategy as the plugin author’s own regression gates; inset shows the biaxial Bresler-type capacity-envelope projection (independent per-direction moments radially scaled onto the interaction surface).
§4

Geometry, properties & loading

Rig / elastic terms

Axial Kax
1×10⁷ N/mm
Rotational k0 (Krz=Kry)
1×10¹⁰ N·mm/rad
Topology
2 coincident nodes, 1 hinge
Drive
DisplacementControl / sp

Uniaxial backbone (A/B/C)

Mzu = Myu
1×10⁸ N·mm
thetaP
0.02 rad
thetaPC
0.04 rad
Rc / Rr
1.25 / 0.20

Biaxial & N-PCHIP (C/D)

Bresler exponent α
1.5
Biaxial κ ratios
1:1 and 3:1
PCHIP table
4 N-levels, Mzu(N)
Engine
Tcl (OpenSees.exe, plugin)
§5

Reference solution

  1. Uniaxial backbone, cap boundary (kappa=thetaP)Rc*Mu= 1.25×10⁸ N·mm
  2. Elastic unload from mid-hardening (theta1->theta2, Delta_theta=-0.005 rad)k0*(theta2-thetaP_committed), thetaP_committed=theta1-M1/k0= 6.25×10⁷ N·mm
  3. Biaxial Bresler projection, symmetric ratio (kappaZ=kappaY=0.010)beta*Mhz, beta=min(1,1/Phi), Phi=(|Mhz/Ccapz|^a+|Mhy/Ccapy|^a)^(1/a)= 7.0871×10⁷ N·mm
  4. N-dependent cap via PCHIP, N=-1.5e6 N (interior query, table N=[-2e6,-1e6,0,1e6])Rc*pchip(Mzu_table, N)= 9.125×10⁷ N·mm

No third-party published example exists for this DCR-original element (unlike SP1/CSI 1-026) — devplan §12.11 honesty split: (a) the uniaxial FEMA-356/ASCE-41 4-branch backbone (elastic/hardening/post-capping softening/residual) and (b) the Fritsch & Carlson (1980, SIAM J. Numer. Anal. 17(2):238-246) monotone-cubic capacity interpolation are PUBLISHED external models — re-derived from scratch in benchmarks/nonlinear/SH1_pmmHingeBackbone.ts, never by reading DcrPMMHinge3d.cpp. (c) The biaxial Bresler-type capacity-envelope projection (independent per-direction backbones + closed-form radial scale-back beta=min(1,1/Phi)) is DCR's own §5.9 design choice — the interaction SURFACE FORM (normalized power-law) is standard/published, but this specific combination algorithm has no external authority to validate against; quantities C_* verify the implementation is self-consistent with DCR's own stated specification, not that the specification itself reproduces a third-party benchmark.

§6

Results comparison

Response quantityProbeSTRIXReferenceΔVerdict
Uniaxial backbone, mid-hardening (kappa=0.5*thetaP) (N·mm) A1.Mz 1.125×10⁸ 1.125×10⁸ 0.00% PASS
Uniaxial backbone, cap boundary (kappa=thetaP) (N·mm) A2.Mz 1.25×10⁸ 1.25×10⁸ 0.00% PASS
Uniaxial backbone, mid-softening (kappa=thetaP+0.5*thetaPC) (N·mm) A3.Mz 7.25×10⁷ 7.25×10⁷ 0.00% PASS
Uniaxial backbone, residual plateau (kappa=thetaP+thetaPC+0.02) (N·mm) A4.Mz 2×10⁷ 2×10⁷ 0.00% PASS
Elastic unload from mid-hardening (theta1->theta2, Delta_theta=-0.005 rad) (N·mm) B_post.Mz 6.25×10⁷ 6.25×10⁷ 0.00% PASS
Biaxial Bresler projection, symmetric ratio (kappaZ=kappaY=0.010) (N·mm) C_symmetric.Mz 7.0871×10⁷ 7.0871×10⁷ 0.00% PASS
Biaxial Bresler projection, symmetric ratio — My (N·mm) C_symmetric.My 7.0871×10⁷ 7.0871×10⁷ 0.00% PASS
Biaxial Bresler projection, asymmetric ratio (kappaZ=0.015, kappaY=0.005) (N·mm) C_asymmetric.Mz 7.4808×10⁷ 7.4808×10⁷ 0.00% PASS
Biaxial Bresler projection, asymmetric ratio — My (N·mm) C_asymmetric.My 6.6933×10⁷ 6.6933×10⁷ 0.00% PASS
N-dependent cap via PCHIP, N=-1.5e6 N (interior query, table N=[-2e6,-1e6,0,1e6]) (N·mm) D_Nneg.Mz 9.125×10⁷ 9.125×10⁷ 0.00% PASS
N-dependent cap via PCHIP, N=0.5e6 N (N·mm) D_Npos.Mz 1.3391×10⁸ 1.3391×10⁸ 0.00% PASS
§7

Per-family worst diff (no mesh sweep — single synthetic hinge)

Test familyworst |diff| (%)Δ
A — uniaxial FEMA backbone (4 branches)0 0.00%
B — elastic unload/reload0 0.00%
C — biaxial Bresler projection (2 ratios)0 0.00%
D — N-dependent PCHIP capacity (2 queries)0 0.00%

SH1 drives a single, non-refinable zero-length element (a bare hinge has no mesh to converge) — each row instead summarizes the worst deviation across that family’s checkpoints. A (uniaxial backbone) exercises all four branches in one continuous monotonic push; B checks the elastic unload secant from a plastic state; C checks the biaxial Bresler projection at two load ratios; D checks the N-dependent capacity at two interior PCHIP query points on a 4-level table (the plugin author’s own gate_p2.tcl explicitly flags PCHIP as untested in Tcl — its 2-level table degenerates PCHIP to linear interpolation; SH1’s 4-level table has genuine curvature at both queries). All four families land at machine precision (worst diff on the order of 1e-10%), because the closed form is not an approximation of the production algorithm here — on a piecewise-linear-in-kappa backbone the plastic-multiplier root is unique, so the independently re-derived algebra IS the same root the production cutting-plane Newton solve converges to.

§8

Conclusion

PASS

DcrPMMHinge3d reproduces the published FEMA-356/ASCE-41 backbone (all four branches, plus elastic unload/reload) and an independently re-implemented Fritsch-Carlson PCHIP capacity interpolation to machine precision. The biaxial Bresler-type capacity projection (DCR’s own §5.9 algorithm) is verified self-consistent with its design specification at two load ratios — this defends the implementation against transcription/algorithm bugs, though (per the honesty split above) no external authority validates the projection scheme itself, since DcrPMMHinge3d has no counterpart in any other software. Excluded from this benchmark’s scope: the Haselton/FEMA regression pipeline that derives the -pmm table from a real RC section (TclBuilder.ts buildDcrPmmTable) — a separate "is the table right" question from "does the element correctly integrate a given table" (this benchmark’s question) — and the consistent tangent (already covered by the plugin’s own internal FD cross-check, gate_p4_fdtangent.tcl).

§9

References & analysis files

  1. FEMA 356 / ASCE 41-13 — generalized force-deformation backbone for deformation-controlled actions (4-branch: elastic→hardening→post-capping softening→residual plateau).
  2. Fritsch, F.N. & Carlson, R.E. (1980) — Monotone Piecewise Cubic Interpolation, SIAM Journal on Numerical Analysis 17(2):238–246 (PCHIP tangent formula, independently re-implemented in sh1PchipTangents/sh1PchipEval).
  3. Bresler, B. (1960) — reciprocal-load biaxial bending interaction (normalized power-law interaction surface form; the specific decoupled-backbone + radial-projection combination algorithm is DCR’s own §5.9 design, not from Bresler).
  4. opensees_plugins/DcrPMMHinge3d/ — DcrPMMHinge3d.cpp (element under test), gate_p1.tcl/gate_p2.tcl (plugin author’s own regression gates, isolation-rig pattern reused here), dcr_pmm_plugin_element_devplan.md.
Engine
v1.0.6 (tcl)
Run date
2026-07-11
Record
records/SH1.json
Evidence archive
verif-evidence-eng1.0.2-win-x64.zip · SH1/
sha256
(pending publish)