University of British Columbia

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://docs.simpeg.xyz). The documentation is also practicing continuous integration and is updated with all changes to SimPEG and is built and hosted through ReadTheDocs Holscher et al., 2010. We are hopeful that our efforts and adherence to best practices in open source code development (cf. Wilson et al. (2014)) will encourage a community to exercise reproducible research around these scientific tools (cf. Fomel & Claerbout (2009)).

  1. Haber, E. (2015). Computational Methods in Geophysical Electromagnetics.
  2. Holscher, E., Leifer, C., & Grace, B. (2010). Read the Docs.
  3. 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
  4. Fomel, S., & Claerbout, J. F. (2009). Guest Editors’ Introduction: Reproducible Research. Computing in Science & Engineering, 11(1), 5–7. 10.1109/MCSE.2009.14