simpeg / geoana

Interactive geoscience (mostly) analytic functions.
MIT License
22 stars 11 forks source link

Layered em #20

Closed jcapriot closed 3 years ago

jcapriot commented 3 years ago

This adds the analytic function of a vertical magnetic dipole in a half space from Ward and Hohmann's Chapter.

It also adds the semi-analytic form of the layered half-space solution. This is done analytically in the wavenumber domain, and then transformed back to the space domain using the filters from empymod. The kernel function also has the necessary derivatives implemented for calculating Jacobins with respect to these operations.

There are two versions of the kernel functions (which actually both run in similar time on my machine at this point). The first is a pure numpy solution. The second is an optional cython+cpp implementation. These algorithms both do the same thing (and are tested to match). The largest difference will be that the numpy version will require more memory to store the intermediate arrays necessary for broadcasting.

To enable building with the C extensions, the setup.py files will conditionally add the cython files to the build if the environment variable BUILD_GEOANA_EXT is set to something besides 0. This should allow us to still distribute the source code just fine for people who do not want to compile anything on the backend.

I do still need to double check that the cython source files will still be part of the source distribution that is uploaded however...

codecov[bot] commented 3 years ago

Codecov Report

Merging #20 (2ea415d) into master (8a93dd9) will increase coverage by 6.65%. The diff coverage is 78.05%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master      #20      +/-   ##
==========================================
+ Coverage   52.63%   59.28%   +6.65%     
==========================================
  Files          10       20      +10     
  Lines         722      948     +226     
==========================================
+ Hits          380      562     +182     
- Misses        342      386      +44     
Impacted Files Coverage Δ
geoana/em/setup.py 0.00% <0.00%> (ø)
geoana/kernels/_extensions/setup.py 0.00% <0.00%> (ø)
geoana/kernels/setup.py 0.00% <0.00%> (ø)
geoana/setup.py 0.00% <0.00%> (ø)
geoana/em/fdem/wholespace.py 69.64% <69.64%> (ø)
geoana/em/fdem/base.py 82.75% <82.75%> (ø)
geoana/em/fdem/layered.py 88.50% <88.50%> (ø)
geoana/em/fdem/halfspace.py 89.58% <89.58%> (ø)
geoana/em/fdem/__init__.py 100.00% <100.00%> (ø)
geoana/kernels/__init__.py 100.00% <100.00%> (ø)
... and 13 more

Continue to review full report at Codecov.

Legend - Click here to learn more Δ = absolute <relative> (impact), ø = not affected, ? = missing data Powered by Codecov. Last update 8a93dd9...2ea415d. Read the comment docs.

jcapriot commented 3 years ago

yeah, I'm happy with that too, should be easy to change quickly