Highest Level Organization
Right now, a lot of subroutines are defined in the highest level of the package. Generally, these would be called from utilities or a different supporting file. Here, we propose a home for highest and lower level functionality as part of this package.
Comments on current organization
-
survey, sources and receivers: On the update_to_simulation branch, we have created .py files for defining surveys, sources and receivers, respectively. Since receivers in FEM and TEM measure the fields differently, and since TEM sources require waveforms, we defined separate survey, source and receiver objects for FEM and TEM.
-
simulation: Right now, the local and stitched simulations are defined in separate .py files. This is similar to how we treated dcip problems in 1d, 2d and 3d. However, we could decide to create a single simulation.py file.
-
simulation: We could still made this file cleaner at the highest level. There are some if/else statements for different source types that should be moved to a lower level. We should just have a "compute" method that gets imported from supporting functions.

Biggest Issues
-
Should we create a waveform class? Or defined waveform properties as properties of the source? See Issue #42
-
Moving supporting functions out of highest level.
-
Parsing out supporting functions: Things to compute optimum layer thicknesses based on skin depth and auto defining certain waveforms are not necessarily in the best place. It would be good to outline and fill supporting functions in an organized way.