Skip to content

Sparse Diff Roadmap #2

@ChrisRackauckas

Description

@ChrisRackauckas
  1. @pkj-m is doing graph coloring methods, so methods that will give a coloring given a sparsity pattern. Sparsity patterns will be passed just by passing a sparse matrix itself, since that's essentially as concise as you can make that information.
  2. Graph coloring algorithms will output a colorvec of integers, where each integer gives a valid direction for integration. colorvec=[1,1,2,2,3] for example is 3 directional derivatives, and when differentiation is done that builds the compressed Jacobian.
  3. @pkj-m will build the tooling for getting the sparse Jacobian from the compressed Jacobian (which is simply finding the non-zero column in the row, since you shouldn't overlap non-zeros. Then there are approximate colorings...)
  4. @huanglangwen you can make overloads for types like BandedMatrix (since there's an easy analytical solution to those colorings), and then make DiffEqDiffTools and ForwardDiff specialize on color vectors.
  5. @huanglangwen with the help of @YingboMa make sure that these are usable from the stiff ODE solvers by specifying jac_prototype and a new arg for a color vector (so it doesn't have to be recomputed each time).
  6. @shashi is doing a Cassette-based automatic sparsity detection which will look at the function AST and return a sparse matrix for the Jacobian/Hessian.
  7. @HarrisonGrodin we need to make sure that sparse on a ModelingToolkit matrix of variables with a lot of zeros actually returns a sparse matrix, and maybe specialize the computation to make it cheaper if we know beforehand that we don't need to differentiate some things? That would be our analytical solution sparse Jacobian generator.
  8. @shashi and maybe a new hire will get this all integrated with Zygote.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions