Add adjoint-based global error control#56
Conversation
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
|
Implementation log / review scratchpad:
Commit: |
|
Final CI follow-up:
No CI follow-up commit was needed. |
|
This PR has been carried into SciML/OrdinaryDiffEq.jl#3929, which moves GlobalDiffEq.jl into the OrdinaryDiffEq.jl monorepo as Ignore until reviewed by @ChrisRackauckas. |
|
Update: the monorepo move is now a stacked series of focused PRs. The repo transfer is SciML/OrdinaryDiffEq.jl#3929, and this PR's adjoint method specifically is SciML/OrdinaryDiffEq.jl#3953 (restructured as a package extension on SciMLSensitivity + QuadGK, same public API). The rest of the issue-tracker methods follow in SciML/OrdinaryDiffEq.jl#3954, SciML/OrdinaryDiffEq.jl#3955, SciML/OrdinaryDiffEq.jl#3956, and SciML/OrdinaryDiffEq.jl#3957. |
Summary
GlobalAdjoint, an ODE algorithm wrapper that estimates endpoint error with randomized adjoint projections and refines local tolerances until the requested global tolerance is metadjoint_error_estimatefor standalone a posteriori endpoint-error estimationSciMLSensitivity.ODEAdjointProblemandQuadratureAdjointAPIs, and integrate the dense-interpolation defect with QuadGKDesign
The estimator follows Cao and Petzold's adjoint defect-projection method. It samples orthogonal terminal directions, solves the corresponding adjoints through SciMLSensitivity, projects the numerical interpolation defect, and applies the small-sample norm factor. This replaces the abandoned symbolic-Jacobian approach from #15 with SciMLSensitivity's public derivative machinery.
The current implementation deliberately supports forward-time ODEs with real vector states, a standard mass matrix, no callbacks, and a solver that provides dense first-derivative interpolation.
Validation
GROUP=Everything julia +1.10 --project=. -e 'using Pkg; Pkg.test()'Runic --check src test docsIgnore this PR until reviewed by @ChrisRackauckas.
Closes #4.