We have long experience both in developing simulator code that fits into optimization workflows and selecting the best optimization approaches for problems where objective (and non-linear constraint) calculations entail running challenging simulations. In particular:
- Adjoint-based gradients and sensitivities: adjoint simulations enable efficient computation of gradients (e.g., of recovery with respect to well controls) and model parameter sensitivities. An important enabler for efficient implementation of adjoint code is automatic differentiation. Example codes we develop supporting adjoint simlations include the MATLAB Reservoir Simulation Toolbox (MRST) and Jutul.
- Model reduction: since reservoir management optimization problems often result in running multiple simulations with slightly varying input, there is a large potential for model reduction. However, there is no single approach that fits all purposes. Over several years, we have developed model reduction techniques based on flow diagnostics and have applied these both to well control and well placement optimizations. We have developed highly efficient network methods based on calibration of coarse-grid models (CGNet). In addition, we have long experience in both upscaling and multiscale methods for subsurface flow problems.
- Problem formulation: for a given reservoir management optimization problem, the mathematical formulation chosen (including constraints) may have a huge effect on performance for both the simulator and the optimizer. In our research, we tend to take a pragmatic approach where computational resources are spent on providing several adequate solutions/suggestions rather than a single seemingly perfect solution.