hydrogym icon indicating copy to clipboard operation
hydrogym copied to clipboard

Linear algebra module

Open jcallaham opened this issue 2 years ago • 0 comments

When working with projection-based modeling and modal analysis, it would be nice to have some expanded linear algebra functionality. This would ideally look something like a combination of the VectorSpaceHandles in Modred and the LinearOperator in Scipy. So you would probably have three fundamental objects:

  1. A Vector-type class (possibly the same as the implementation of the Modred VectorHandle, currently called Snapshot, or maybe with a Function as the underlying object...). Should support basic vector algebra operations
  2. An Operator class which is composable, ideally just inheriting from the Scipy version, but without assuming that the underlying vectors are actually numpy arrays.
  3. A Basis or Subspace, which is a collection of Vectors (and optionally adjoints) that supports creation of projection and orthogonal projection Operators

With these, you could do things like:

  • Apply an Operator to a Vector and get a new Vector (e.g. timestepping as a sequence of linear solves)
  • Project an Operator onto a Subspace to get a reduced-order approximation
  • Compose an Operator with projection onto the complement of a Subspace, for instance to do balanced POD in the stable subspace of a linearized Navier-Stokes operator

Other ideas and thoughts:

  • How would you handle parallel I/O from different sources? See #31 for more discussion
  • Replace explicit dependence on flow in modal analysis with a set of callbacks for the snapshots
  • Hide all references to Snapshot and only use mr.VectorHandle, then hide all references to this to avoid confusion with the new Vector objects

jcallaham avatar May 19 '22 15:05 jcallaham