You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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:
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
An Operator class which is composable, ideally just inheriting from the Scipy version, but without assuming that the underlying vectors are actually numpy arrays.
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 Snapshot handling #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
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
VectorSpaceHandlesin Modred and theLinearOperatorin Scipy. So you would probably have three fundamental objects:Vector-type class (possibly the same as the implementation of the ModredVectorHandle, currently calledSnapshot, or maybe with aFunctionas the underlying object...). Should support basic vector algebra operationsOperatorclass which is composable, ideally just inheriting from the Scipy version, but without assuming that the underlying vectors are actually numpy arrays.BasisorSubspace, which is a collection ofVectors(and optionally adjoints) that supports creation of projection and orthogonal projectionOperatorsWith these, you could do things like:
Operatorto aVectorand get a newVector(e.g. timestepping as a sequence of linear solves)Operatoronto aSubspaceto get a reduced-order approximationOperatorwith projection onto the complement of aSubspace, for instance to do balanced POD in the stable subspace of a linearized Navier-Stokes operatorOther ideas and thoughts:
flowin modal analysis with a set of callbacks for the snapshotsSnapshotand only usemr.VectorHandle, then hide all references to this to avoid confusion with the newVectorobjects