Add discontinuity-controller state to DDE integrators - #4071
Add discontinuity-controller state to DDE integrators#4071ChrisRackauckas-Claude wants to merge 2 commits into
Conversation
|
This needs a minimum version on ordinarydiffeqcore for when it was added there |
|
CI audit after completion:
Local validation on the exact PR commit with a locally resolved SciMLBase 3.40.1 environment did execute the official DelayDiffEq |
The shared autonomous-discontinuity controller reads is_disco_step and disco_checkpoint, but DDEIntegrator did not carry either field. Initialize the state from the runtime time value, reset it during reinit!, and cover discontinuity-enabled and unitful public solver paths. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
The autonomous-discontinuity controller state used by DDEIntegrator ships with OrdinaryDiffEqCore 4.12. Prevent DelayDiffEq 6.1 from resolving against an older Core release that does not provide the required controller behavior. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
947469d to
e13f39a
Compare
|
Addressed in I rebased the branch onto current master and reran the official DelayDiffEq |
Ignore until reviewed by @ChrisRackauckas.
Summary
is_disco_stepanddisco_checkpointtoDDEIntegrator, matching the state required by OrdinaryDiffEqCore's shared autonomous-discontinuity controllerreinit!init/solve!/reinit!path with discontinuity detection enabled, plus Unitful DDEsRoot cause
OrdinaryDiffEqCore's shared DISCO/controller code assumes that each compatible integrator carries
is_disco_stepanddisco_checkpoint.ODEIntegratorgained that state as the DISCO implementation evolved, butDDEIntegratordid not. An owner-clean current dependency stack therefore reachesDDEIntegratorand throwstype DDEIntegrator has no field is_disco_step; the same shared path needsdisco_checkpointonce that first field exists.A fixed-dependency parent/child check and
git bisectidentify408a7a30fe0989a55b446240a18fb2a8c5c30993(disco optimizations; parentc538565b25ff19e661e5bf788fe1953a154d64e9) as the first commit that made the shared DISCO path incompatible withDDEIntegrator. With the same historical dependency manifest, a QNDF DDE reachesSuccessat the parent and the child fails on the earlier shared-controller fieldcurr_discontinuity. The evolved current-master path first exposes the missingis_disco_stepfield instead.disco_checkpointis initialized withzero(t0), preserving units and other runtime time metadata.reinit!clears both values so a reused integrator cannot carry transient DISCO state from its previous solve.Version boundary
General currently ends at OrdinaryDiffEqCore 4.11.0, while the monorepo's next version is 4.12.0. DelayDiffEq must therefore require
OrdinaryDiffEqCore = "4.12"; allowing the previous broad"4"range could pair the new DelayDiffEq integrator assumptions with an older Core controller.The branch is rebased onto current master, including #4069's time-value checkpoint initialization. #4066 is not part of this branch. Because current monorepo source requires SciMLBase 3.40 while General still provides 3.39.1, the final package test used an ignored manifest with a clean local SciMLBase 3.40.1 checkout and showed OrdinaryDiffEqCore 4.12.0 in the test environment.
Validation
is_disco_stepe13f39aa3b, official DelayDiffEqGROUP=Interface: package test passed; discontinuities 48/48, mass matrix 7/7, Unitful 21/21, and multi-algorithm 28/28git diff --checkpassesWhole-tree Runic still reports only the three pre-existing DISCO formatting files handled by #4064. The earlier
GROUP=QArun reached an independent existing ExplicitImports public-ownership cluster; none of its names or files are touched here.