Partial revert of PR #1188: Copy cache for SplitFunction in promote_f #1203
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This partially reverts PR #1188 to fix convergence issues in OrdinaryDiffEq.jl split ODE methods. Instead of returning the SplitFunction unchanged, we now copy the cache when remaking to ensure proper initialization.
Background
PR #1188 changed
promote_fto simply return the SplitFunction unchanged to avoid replacing LazyBufferCache. However, this caused convergence test failures in OrdinaryDiffEq.jl because uninitialized cache memory contains random values that accumulate into the solution.Solution
This PR modifies
promote_fto:copyof the cacheWhy
copyinstead ofzero?zero(u0)because it replaced LazyBufferCache with a concrete arraycopyon the cache preserves the cache type (including LazyBufferCache)copyfor PreallocationTools caches creates a new cache with copied/initialized buffersTest Results
Tested locally with the convergence test that was failing:
Impact
This fixes the convergence test failures in OrdinaryDiffEq.jl (AlgConvergence_III and others) while preserving the intent of PR #1188 to not unnecessarily replace LazyBufferCache with concrete arrays.
🤖 Generated with Claude Code