-
Notifications
You must be signed in to change notification settings - Fork 33
Description
Monolithic Models
The philosophy of the package is to specify model structure as a list of state/input operators that can be calibrated with Operator Inference. Roughly speaking, we currently support "monolithic" models of the form
in which
Multilithic Models
In many applications, it is desirable to have more specific block structure, for example
In this scenario, the right-hand side is made up of operators that act on only parts of the states and/or inputs. This issue is a follow-up to #48 for tracking efforts to implement models with block structure.
Vision and Roadmap
To do this, we need
- multilithic operators, where the user specifies state/input subdimensions and indices, and
- multilithic models, which are initialized with multilithic operators and state/input dimensions. These will have decoupled Operator Inference problems, one per subequation.
These models should be compatible with the existing ROM class, though we should add a warning if a multilithic model is used with a monolithic basis. The end result might be something like this:
model = opinf.models.ContinuousModelMulti(
operators=[
opinf.operators.LinearOperatorMulti(0, 1), # A_{0, 1}
opinf.operators.QuadraticOperatorMulti(0, 0), # H_{0, 0}
opinf.operators.LinearOperatorMulti(0, 0), # A_{1, 0}
],
substate_dimensions=(4, 6),
)The ROM class should also be able to pass the substate_dimensions from a basis.BasisMulti to the model.
I have some initial code for this, but @bgzastrow will take the lead on the effort.