Throughout the development of SimPEG, we have focused on building both a framework (Figure 2.2) and a toolbox that is flexible and extensible. The toolbox includes utilities that we use repeatedly in our research, for example, visualization routines, mesh generation, and synthetic modeling. Additionally, when writing new code for differential operators and PDE systems, several functions are available to help test and verify results including: (a) checking derivatives and expected order of convergence, (b) comparing to analytics, and (c) adjoint tests for the sensitivity operators (cf. Haber (2015)). These tests can be written in-line in an interactive development paradigm and then rapidly transfered and incorporated as unit-tests to ensure future code changes do not change functionality. Currently the entire SimPEG project has upwards of 80% test coverage, with all core functionality (e.g. discretization, optimization) being extensively tested. All changes are combined using the practice of continuous integration, supported by freely available tools for open source projects such as TravisCI and GitHub. Additionally, we have focused on writing and maintaining documentation for core functionality (https://
- Haber, E. (2015). Computational Methods in Geophysical Electromagnetics.
- Holscher, E., Leifer, C., & Grace, B. (2010). Read the Docs.
- Wilson, G., Aruliah, D. a, Brown, C. T., Chue Hong, N. P., Davis, M., Guy, R. T., Haddock, S. H. D., Huff, K. D., Mitchell, I. M., Plumbley, M. D., Waugh, B., White, E. P., & Wilson, P. (2014). Best practices for scientific computing. PLoS Biology, 12(1), e1001745. 10.1371/journal.pbio.1001745
- Fomel, S., & Claerbout, J. F. (2009). Guest Editors’ Introduction: Reproducible Research. Computing in Science & Engineering, 11(1), 5–7. 10.1109/MCSE.2009.14