Skip to content

meta(sciml): expose prepared operators to the SciML integrator stack #81

Description

@kylebeggs

Umbrella for handing MFO operators to OrdinaryDiffEq / LinearSolve. Nothing SciML exists today: no weak dep, no ext/…SciMLExt.jl, and every example hand-rolls its integrator. README.md currently advertises OrdinaryDiffEq interop that is not there.

Sub-issues, in order

  1. fix(linalg): prepared operators declare their traits — PreparedOperator supertype, PreparedComposed/PreparedAdjoint islinear/isconstant #86 — prepared-operator trait hygiene — PreparedOperator has no supertype and PreparedComposed / PreparedAdjoint declare no islinear / isconstant, so a wrapper forwarding traits gets the false default by accident. An invariant hazard independent of SciML; ship first.
  2. feat(sciml): build the planned SciMLOperators jac_prototype adapter (DESIGN §7) #65 — the jac_prototype adapter (DESIGN §7). Enough that ODEFunction(f; jac_prototype = sciml(prepare(L))) works and KrylovJL_GMRES calls the zero-alloc flat mul!. The downstream forcing function is the microvascular model's KenCarp47 + sparse-ILU detour.
  3. feat(sciml): expose operators as (Split)ODEFunction and search integrators per model #73SplitODEFunction for the linear half plus a per-model work-precision search over IMEX / exponential integrators (a benchmark artifact, not a package feature).
  4. docs: retract the OrdinaryDiffEq interop claim and document field-level apply! as the explicit-stepping idiom #87 — docs — fix the README claim, and document field-level apply! as the explicit-stepping idiom (the prepared mul! leg pays 15–50% in flat copies that only Krylov needs).

Related, not parented: #63 (stacked multi-species operator) is what the reaction half of a split problem wants to look like; #62 (Robin) is what makes MultigridPreconditioner applicable to the downstream wall-coupled system.

Constraints

  • Extension only. SciMLOperators / OrdinaryDiffEq are weak deps, nothing enters [deps] (CLAUDE.md, DESIGN.md §7).
  • Do not route around the mul!(y, ::AbstractOperator, x::AbstractVector) guard; a convenience constructor must still go through prepare.
  • The affine boundary_rhs term needs a declared home in a split problem.

🤖 Beep boop — Claude wired the tracker to the integrator; Kyle is not stepping himself forward in time.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions