  Large scale parameter estimation problems are among some of the most
computationally demanding problems in numerical analysis. An academic
researcher's domain-specific knowledge often precludes that of software design,
which results in inversion frameworks that are technically correct, but not
scalable to realistically-sized problems. On the other hand, the computational
demands for realistic problems result in industrial codebases that are geared
solely for high performance, rather than comprehensibility or flexibility. We
propose a new software design for inverse problems constrained by partial
differential equations that bridges the gap between these two seemingly
disparate worlds. A hierarchical and modular design allows a user to delve into
as much detail as she desires, while exploiting high performance primitives at
the lower levels. Our code has the added benefit of actually reflecting the
underlying mathematics of the problem, which lowers the cognitive load on user
using it and reduces the initial startup period before a researcher can be
fully productive. We also introduce a new preconditioner for the 3D Helmholtz
equation that is suitable for fault-tolerant distributed systems. Numerical
experiments on a variety of 2D and 3D test problems demonstrate the
effectiveness of this approach on scaling algorithms from small to large scale
problems with minimal code changes.
