Repository navigation
Port Craig–Bampton models to the SciML 3 stack - #216
ChrisRackauckas wants to merge 9 commits into
Conversation
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Codex <noreply@openai.com> Agent-Harness: Codex CLI 0.156.0 Agent-Model: gpt-6-sol Agent-Session: codex session 01a1372e-c8ea-7d12-a35c-2e157ee90e3d (local) Supervisor-Session: https://claude.ai/code/session_01C7igeJEd3iowpi5KZjsxG9
Validate the sloshing cart with initialization and cover array metadata changes. The full suite and docs still have unresolved failures; see the worker report. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Codex <noreply@openai.com> Agent-Harness: Codex CLI 0.162.1 Agent-Model: gpt-6-sol Agent-Session: codex session 01a1372e-c8ea-7d12-a35c-2e157ee90e3d (local) Supervisor-Session: https://claude.ai/code/session_01C7igeJEd3iowpi5KZjsxG9
Correct symbolic rotations, damping frames, shaped guesses and solver differentiation. Exercise joint observations and the numerical algebraic-loop configuration. The full suite and docs remain red; the draft PR records baseline and attribution limits. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Codex <noreply@openai.com> Agent-Harness: Codex CLI 0.162.1 Agent-Model: gpt-6.1-sol Agent-Session: codex session 01a1372e-c8ea-7d12-a35c-2e157ee90e3d (local) Supervisor-Session: https://claude.ai/code/session_01C7igeJEd3iowpi5KZjsxG9
Restore Fredrik's two-boundary tank with normal initialization. Remove conflicting free-fall inputs and initialize the actuated joint's states. Document retained planar priorities and Spherical velocity/torque behavior. The full suite remains red; the draft PR records corrected attribution and limits. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Codex <noreply@openai.com> Agent-Harness: Codex CLI 0.162.1 Agent-Model: gpt-6.1-sol Agent-Session: codex session 01a1372e-c8ea-7d12-a35c-2e157ee90e3d (local) Supervisor-Session: https://claude.ai/code/session_01C7igeJEd3iowpi5KZjsxG9
Round 3 is pushed at c0e04cf.
The PR body contains the full attribution table, exact verification commands, input changes, retained public behavior changes and risk assessment. 🤖 Posted by an AI agent — harness: Codex CLI 0.162.1 · model: gpt-6.1-sol |
|
This package is deprecated, MultibodyComponents.jl should be used for all multibody work going forward. |
Thanks — understood. Closing this draft, since Multibody.jl is deprecated and the Craig–Bampton work is moving to https://github.com/JuliaComputing/MultibodyComponents.jl/pull/171. For the record, two findings from this port may still be useful on the MultibodyComponents side:
The branch 🤖 Posted by an AI agent — harness: Claude Code 2.1.282 · model: claude-opus-5-5[1m] |
|
I'm going to archive the repo so that doesn't happen again. |
@baggepinnen: this includes your five cb2 commits through bb28790. Please decide, after Chris reviews it, whether to merge it or fold the port into cb2.
The branch ports Craig–Bampton and Multibody to SciMLBase 3, ModelingToolkit ≥11.40 and OrdinaryDiffEq v2 subpackages. Version 0.4.0 covers the public behavior changes listed below. Fredrik's original two-boundary sloshing model is restored, including the free top boundary's stabilizing mass and stiffness; the complete example is identical to cb2 and uses normal initialization.
Verification
All Julia jobs are serial with
JULIA_NUM_PRECOMPILE_TASKS=4 JULIA_NUM_THREADS=4, Julia +1.12.6,--startup-file=no, a load check that holds launches above 24, and the sharedflock /tmp/claude-1000/-home-crackauc-sandbox-tmp-20260922-235304-89102/scratchpad/julia.lock. DISPLAY=:1 exists and is used where needed.The untouched cb2 run aborts before the basic tests; the supplemental counts are separate and are not summed. The fair graph is SC2.155.2, MTK11.26.8/Base1.42.2, ODE6.111.0/Default1.14/Rosenbrock1.31.1/NonlinearSolve1.28/Tsit5 1.12. The new full-suite graph is SC3.57.0, MTK11.45.3/Base1.77.4, ODE7.8.1/Default2.6.2/Rosenbrock2.7.5/NonlinearSolve2.9.9/Tsit5 2.1.5.
Commands from work/mb-port, each under the shared flock and load guard:
The restored two-boundary sloshing command exits 0: Simulation complete: Success, on MTK 11.40.0, OrdinaryDiffEqDefault 2.4.5 and SC3.57.0. The model reduction to one boundary was unnecessary and is reverted.
Corrected attribution: all 36 round-2 red checks
15 a, 7 b, 14 unresolved, 0 c found. Two b checks are repaired in round 3; the final 34 red entries are 15 a / 5 b / 14 unresolved / 0 c found. Thirteen unresolved checks are the ropes, Universal pendulum, wheels and SS/US cases identified by Opus; the exact JointUSR_RRR error also lacks a usable old-stack reference. Unresolved checks have no a/b/c label. An old red block or a source comparison alone does not establish causality.
Attribution of the 36 round-2 red checks
Reference lines and IDs are at 6435c80. Categories: a = observed pre-existing failure; b = observed new-stack behavior with old-port controls where available; c = port-edit regression; unresolved = no discriminating old-stack reference. No c failure was found by Opus. Rows 26–27 are repaired in round 3; all original assertions/tolerances remain.
sys = foo(a, b)Test-input corrections
body.w_a=[0,1,0]contradicted the unchanged joint defaultphid=zeros(3). Dropping only that redundant start value is a correct-test input repair, not a weakening. The same analytical free-fall assertion and tolerance remain. Before: one failure in the FreeMotion group; after: 4/4, retcode Success,y(10)=-490.4999999999997(the exact analytical value is -490.5).D(D(joint.phi))=>0with independentjoint.phi=>0, joint.w=>0. Before the unchanged successful-retcode assertion fails; after it passes 1/1.DtNaN, velocity zero and angle zero. Those diagnostic changes are not applied to the official test; both assertions remain b.Focused command:
timeout 5400 julia +1.12.6 --startup-file=no --project=round2/new-env round3/driver.jl FreeMotionFixed ActuatedFixed CylindricalFixed Worldforces: 7 pass / 4 fail. A final FreeMotion-only run gives 4/4 and the value above. A separate consistent Cylindrical-input run gives 5 pass / 2 fail across FreeMotion/Actuated/Cylindrical. Worldforces :136/:180 both return DtNaN at t=0 with zero initial states; their independent old-port/SCC=0 controls pass, so they are b, not pre-existing numerical failures with the same cause.Retained public behavior changes and necessity
--project=round2/old-exposed-env round3/planar_priority.jl 2passes the old free body 4/4 and pendulum 4/4 (the old BodyShape case is blocked by a parameter-shape API error).--project=round2/new-env ... 2passes free body 4/4 but fails all four pendulum checks, including the required two-state count;... 0passes free body and both pendulums 12/12. This changes state selection for planar callers and requires human review; it is not just an integer-priority formatting change.d*w_rel, and its opposite reaction is transformed into frame_a. Reverting the cb2 equations in the new stack gives 9 pass / 2 errors: w_rel is absent and the damped stateless case references an undeclared Rrel. The retained equations close that model and give flags 12/12, rotated-frame damping 20/20, rod construction 1/1. This corrects cb2's one-argument append no-op and frame balance, and changes damped-joint simulation results; it is a behavior fix, not merely a rename. The contract is stated in the docstring and joints page.Identified pre-existing SCC finding for Fredrik
The package-wide
analytical_linear_scc_limit=3remains unchanged. Opus ran NEW, OLD-PORT and OLD-CB2: spring-damper :403/:416 and oscillator :58/:62 pass with limit 0 in all three setups; default 3 gives NaNs/failures. These are identified a failures, not unisolated a* guesses. A global limit change introduced two FreeMotion quaternion failures in round 2 and was reverted. Fredrik should decide whether those individual models should request numerical SCC solves or whether the compiler policy needs an upstream fix. No tolerance or assertion is changed. The positive numerical-loop test is explicitly opt-in and does not prove default robustness.Unresolved cases and reduction limits
Docs, formatting and CI limits
No full docs build is run in round 3. The two prior builds timed out in quad.md, grew to roughly 34 GB and drove shared load to 40. quad.md and later pages remain unverified. The round-2 final build recorded seven failed example blocks; three exposed causes masked by earlier baseline errors, and their causal classification remains unresolved. The changed joints documentation is prose/docstrings; its behavior is checked by the standalone joint tests. The restored sloshing example runs standalone with timeout1800. No example or assertion is disabled, no warnonly added, and all twelve inherited skip/broken lines match cb2.
JuliaFormatter 1.0.62 ran on previews of every changed Julia file and checked the edited initial-condition statements with SciMLStyle. The final helper exits 0; preview formatting reports existing style differences in all four files, so this is not a clean whole-file formatter gate. A first helper attempt had a local-scope error after completing its preview; the read-only retry corrects that harness error without modifying the tested source. Broad formatting is left for a separate mechanical change.
git diff --checkpasses. No QA group or formatter workflow is configured; typos is not installed.Main CI reported 46/4/27 on old majors; no retained successful main/cb2 CI test or docs run was found (successful retained runs are CompatHelper). Docs CI fails before examples on private-registry HTTP401 and missing private package registration. That is distinct from the local example failures. Full suite at exact minimum MTK11.40/Default2.4.5, downstream TaurosDemo, DataInterpolations8, x86, the unresolved causes and final PR CI are unverified. The repository lacks bot-generated/needs-chris-review labels; the requested conditional label is unavailable.
Original round-1 25-item table
Worldforces :136/:180 are also corrected to b here; the original set is a15 / b10 / c0 found, with prerequisite-diagnostic limitations still stated.
Attribution of the original 13 failures and 12 errors
Categories: a = pre-existing red check; b = new-stack behavior/API; c = regression from port edits. Original inventory: a 15, b 10, c 0, including two qualified prerequisite-diagnostic rows. No original event was isolated to a port edit; this is not a proof that all port behavior is regression-free.
* Rows 8 and 25 require prerequisite API repairs before the old-stack comparison reaches them. Worldforces rows 6–7 are b: the old default-3 NaN is separate from the new failure that persists at SCC=0; both old-code configurations pass that control. No same-cause claim is made.
Links
Risk assessment
🤖 Posted by an AI agent — harness: Codex CLI 0.162.1 · model: gpt-6.1-sol
Session: codex session 01a1372e-c8ea-7d12-a35c-2e157ee90e3d (local)