hydrogym icon indicating copy to clipboard operation
hydrogym copied to clipboard

[Baseline] Linear optimal control for cylinder

Open jcallaham opened this issue 2 years ago • 7 comments

Goal is to have a working LQG (LQR + Kalman filter) for the cylinder wake as a baseline controller. So far I've gotten the following to work (see examples/cylinder/control and examples/cylinder/notebooks/controller-design.ipynb):

  • Convert linearized timestepper to a discrete-time LTI system with the matrix-free LinearOperator from scipy
  • Extract direct and adjoint global eigenmodes from SLEPc as numpy arrays
  • Derive a reduced-order model with Petrov-Galerkin projection onto the global modes
  • Controller design with the Python Control Systems Library
  • Tested both the Kalman filter works and full LQG controller on the ROM

So far so good, except that it blows up when the controller is actually applied to the DNS. Here's my plan to isolate the breakdown:

  • [x] Test Kalman filter and LQR on the ROM as a sanity check
  • [x] Redo everything with the smaller mesh so things can be tested more efficiently
  • [x] Kalman filter on full LTI system
  • [ ] LQR on full LTI system
  • [ ] Kalman filter on full linearized timestepper (not LinearOperator LTI)
  • [ ] LQR on full linearized timestepper
  • [ ] Kalman filter on nonlinear timestepper
  • [ ] LQR on nonlinear timestepper

jcallaham avatar May 12 '22 11:05 jcallaham