Changelog¶
v1.8.1 - 2018-11-20¶
- Many little improvements in the documentation.
- Some code improvements through the use of codacy.
- Remove testing of Python 3.4; officially supported are now Python 3.5-3.7.
- Version of the filter article (DLF) in geophysics and of the CSEM book.
v1.8.0 - 2018-10-26¶
model.bipole,model.dipole, andmodel.analyticalhave now a hook which users can exploit to insert their own calculation ofetaH,etaV,zetaH, andzetaV. This can be used, for instance, to model a Cole-Cole IP survey. See the manual or the example-notebooks for more information.model.wavenumberrenamed tomodel.dipole_kto avoid name clash withkernel.wavenumber. For nowmodel.wavenumbercontinues to exist, but raises a depreciation warning.xdirectdefault value changed fromTruetoFalse.- Possibility to provide interpolated points (
int_pts) totransform.dlf.
The following changes are backwards incompatible if you directly used
transform.fht, transform.hqwe, or transform.hquad. Nothing changes
for the user-facing routines in model:
empymod.femnow passesfactAngtoempymod.transform, notangle; this saves some time if looped over offsets or frequencies, as it is not repeatedly calculated withinempymod.transform.- Use
get_spline_valuesinempymod.femfor Hankel DLF, instead of inempymod.fht. Gives a speed-up if looped over offsets or frequencies. Should be inutils, but that would be heavily backwards incompatible. Move there in version 2.0.
v1.7.3 - 2018-07-16¶
- Small improvements related to speed as a result of the benchmarks introduced
in v1.7.2:
- Kernels which do not exist for a given
abare now returned asNonefromkernel.wavenumberinstead of arrays of zeroes. This permits for some time saving in the transforms. This change is backwards incompatible if you directly usedkernel.wavenumber. Nothing changes for the user-facing routines inmodel. - Adjustments in
transformwith regard to theNonereturned bykernel.wavenumber. The kernels are not checked anymore if they are all zeroes (which can be slow for big arrays). If they are not None, they will be processed. - Various small improvements for speed to
transform.dlf(i.e.factAng;log10/log; re-arranging).
- Kernels which do not exist for a given
v1.7.2 - 2018-07-07¶
- Benchmarks:
empymodhas now a benchmark suite, see empymod/asv. - Fixed a bug in
bipolefor time-domain responses with several receivers or sources with different depths. (Simply failed, as wrong dimension was provided totem). - Small improvements:
- Various simplifications or cleaning of the code base.
- Small change (for speed) in check if kernels are empty in
transform.dlfandtransform.qwe.
v1.7.1 - 2018-06-19¶
- New routines in
empymod.filters.DigitalFilter: Filters can now be saved to or loaded from pure ascii-files. - Filters and inversion result from
empymod.scripts.fdesignare now by default saved in plain text. The filters with their internal routine, the inversion result withnp.savetxt. Compressed saving can be achieved by giving a name with a ‘.gz’-ending. - Change in
empymod.utils:- Renamed
_min_paramto_min_res. - Anisotropy
anisois no longer directly checked for its minimum value. Instead, res*aniso**2, hence vertical resistivity, is checked with_min_res, and anisotropy is subsequently re-calculated from it. - The parameters
epermH,epermV,mpermH, andmpermVcan now be set to 0 (or any positive value) and do not depend on_min_param.
- Renamed
printinfo: Generally improved; prints now MKL-info (if available) independently ofnumexpr.- Simplification of
kernel.reflectionsthrough re-arranging. - Bug fixes
- Version of re-submission of the DLF article to geophysics.
v1.7.0 - 2018-05-23¶
Merge empyscripts into empymod under empymod.scripts.
- Clear separation between mandatory and optional imports:
- Mandatory:
numpyscipy
- Optional:
numexpr(forempymod.kernel)matplotlib(forempymod.scripts.fdesign)IPython(forempymod.scripts.printinfo)
- Mandatory:
- Broaden namespace of
empymod. All public functions from the various modules and the modules fromempymod.scriptsare now available underempymoddirectly.
v1.6.2 - 2018-05-21¶
These changes should make calculations using QWE and QUAD for the
Hankel transform for cases which do not require all kernels faster; sometimes
as much as twice as fast. However, it might make calculations which do require
all kernels a tad slower, as more checks had to be included. (Related to
[empymod#11]; basically
including for QWE and QUAD what was included for DLF in version
1.6.0.)
transform:dlf:- Improved by avoiding unnecessary multiplications/summations for empty kernels and applying the angle factor only if it is not 1.
- Empty/unused kernels can now be input as
None, e.g.signal=(PJ0, None, None). factAngis new optional for the Hankel transform, as isab.
hqwe: Avoids unnecessary calculations for zero kernels, improving speed for these cases.hquad,quad: Avoids unnecessary calculations for zero kernels, improving speed for these cases.
kernel:- Simplify
wavenumber - Simplify
angle_factor
- Simplify
v1.6.1 - 2018-05-05¶
Secondary field calculation.
- Add the possibility to calculate secondary fields only (excluding the direct
field) by passing the argument
xdirect=None. The completexdirect-signature is now (only affects calculation if src and rec are in the same layer):- If True, direct field is calculated analytically in the frequency domain.
- If False, direct field is calculated in the wavenumber domain.
- If None, direct field is excluded from the calculation, and only reflected fields are returned (secondary field).
- Bugfix in
model.analyticalforab=[36, 63](zeroes) [empymod#16].
v1.6.0 - 2018-05-01¶
This release is not completely backwards compatible for the main modelling
routines in empymod.model, but almost. Read below to see which functions
are affected.
Improved Hankel DLF [empymod#11].
empymod.kernel.wavenumberalways returns three kernels,PJ0,PJ1, andPJ0b. The first one is angle-independent, the latter two depend on the angle. Now, depending of what source-receiver configuration is chosen, some of these might be zero. If-statements were now included to avoid the calculation of the DLF, interpolation, and reshaping for 0-kernels, which improves speed for these cases.Unified DLF arguments [empymod#10].
These changes are backwards compatible for all main modelling routines in
empymod.model. However, they are not backwards compatible for the following routines:empymod.model.fem(removeduse_spline),empymod.transform.fht(removeduse_spline),empymod.transform.hqwe(removeduse_spline),empymod.transform.quad(removeduse_spline),empymod.transform.dlf(lagged,splined=>pts_per_dec),empymod.utils.check_opt(no longer returnsuse_spline),empymod.utils.check_hankel(changes inpts_per_dec), andempymod.utils.check_time(changes inpts_per_dec).
The function
empymod.utils.spline_backwards_hankelcan be used for backwards compatibility.Now the Hankel and Fourier DLF have the same behaviour for
pts_per_dec:pts_per_dec = 0: Standard DLF,pts_per_dec < 0: Lagged Convolution DLF, andpts_per_dec > 0: Splined DLF.
There is one exception which is not backwards compatible: Before, if
opt=Noneandhtarg={pts_per_dec: != 0}, thepts_per_decwas not used for the FHT and the QWE. New, this will be used according to the above definitions.Bugfix in
model.wavenumberforab=[36, 63](zeroes).
v1.5.2 - 2018-04-25¶
- DLF improvements:
- Digital linear filter (DLF) method for the Fourier transform can now be
carried out without spline, providing 0 for
pts_per_dec(or any integer smaller than 1). - Combine kernel from
fhtandffhtintodlf, hence separate DLF from other calculations, as is done with QWE (qweforhqweandfqwe). - Bug fix regarding
transform.get_spline_values; a DLF withpts_per_deccan now be shorter then the corresponding filter.
- Digital linear filter (DLF) method for the Fourier transform can now be
carried out without spline, providing 0 for
v1.5.1 - 2018-02-24¶
- Documentation:
- Simplifications: avoid duplication as much as possible between the website
(empymod.github.io), the manual
(empymod.readthedocs.io), and the
README(github.com/empymod/empymod).- Website has now only Features and Installation in full, all other information comes in the form of links.
READMEhas only information in the form of links.- Manual contains the
README, and is basically the main document for all information.
- Improvements: Change some remaining
md-syntax torst-syntax. - FHT -> DLF: replace FHT as much as possible, without breaking backwards compatibility.
- Simplifications: avoid duplication as much as possible between the website
(empymod.github.io), the manual
(empymod.readthedocs.io), and the
v1.5.0 - 2018-01-02¶
- Minimum parameter values can now be set and verified with
utils.set_minimumandutils.get_minimum. - New Hankel filter
wer_201_2018. opt=parallelhas no effect ifnumexpris not built against Intel’s VML. (Useimport numexpr; numexpr.use_vmlto see if yournumexpruses VML.)- Bug fixes
- Version of manuscript submission to geophysics for the DLF article.
v1.4.4 - 2017-09-18¶
[This was meant to be 1.4.3, but due to a setup/pypi/anaconda-issue I had to push it to 1.4.4; so there isn’t really a version 1.4.3.]
- Add TE/TM split to diffusive ee-halfspace solution.
- Improve
kernel.wavenumberfor fullspaces. - Extended
fQWEandfftlogto be able to use the cosine-transform. Now the cosine-transform with the real-part frequency response is used internally if a switch-off response (signal=-1) is required, rather than calculating the switch-on response (with sine-transform and imaginary-part frequency response) and subtracting it from the DC value. - Bug fixes
v1.4.2 - 2017-06-04¶
- Bugfix: Fixed squeeze in
model.analyticalwithsolution='dsplit'. - Version of final submission of manuscript to Geophysics.
v1.4.1 - 2017-05-30¶
[This was meant to be 1.4.0, but due to a setup/pypi/anaconda-issue I had to push it to 1.4.1; so there isn’t really a version 1.4.0.]
- New home: empymod.github.io as entry point,
and the project page on github.com/empymod.
All empymod-repos moved to the new home.
- /prisae/empymod -> /empymod/empymod
- /prisae/empymod-notebooks -> /empymod/example-notebooks
- /prisae/empymod-geo2017 -> /empymod/article-geo2017
- /prisae/empymod-tle2017 -> /empymod/article-tle2017
- Modelling routines:
- New modelling routine
model.analytical, which serves as a front-end tokernel.fullspaceorkernel.halfspace. - Remove legacy routines
model.timeandmodel.frequency. They are covered perfectly bymodel.dipole. - Improved switch-off response (calculate and subtract from DC).
xdirectadjustments:isfullspacenow respectsxdirect.- Removed
xdirectfrommodel.wavenumber(set toFalse).
- New modelling routine
- Kernel:
- Modify
kernel.halfspaceto use same input as other kernel functions. - Include time-domain ee halfspace solution into
kernel.halfspace; possible to obtain direct, reflected, and airwave separately, as well as only fullspace solution (all for the diffusive approximation).
- Modify
v1.3.0 - 2017-03-30¶
- Add additional transforms and improve QWE:
- Conventional adaptive quadrature (QUADPACK) for the Hankel transform;
- Conventional FFT for the Fourier transform.
- Add
diff_quadtohtarg/ftargof QWE, a switch parameter for QWE/QUAD. - Change QWE/QUAD switch from comparing first interval to comparing all intervals.
- Add parameters for QUAD (a, b, limit) into
htarg/ftargfor QWE.
- Allow
htarg/ftargas dict additionally to list/tuple. - Improve
model.gpr. - Internal changes:
- Rename internally the sine/cosine filter from
ffttoffht, because of the addition of the Fast Fourier Transformfft.
- Rename internally the sine/cosine filter from
- Clean-up repository
- Move
notebooksto /prisae/empymod-notebooks - Move
publications/Geophysics2017to /prisae/empymod-geo2017 - Move
publications/TheLeadingEdge2017to /prisae/empymod-tle2017
- Move
- Bug fixes and documentation improvements
v1.2.1 - 2017-03-11¶
- Change default filter from
key_401_2009tokey_201_2009(because of warning regarding 401 pt filter in source code ofDIPOLE1D.) - Since 06/02/2017 installable via pip/conda.
- Bug fixes
v1.2.0 - 2017-02-02¶
- New routine:
- General modelling routine
bipole(replacessrcbipole): Model the EM field for arbitrarily oriented, finite length bipole sources and receivers.
- General modelling routine
- Added a test suite:
- Unit-tests of small functions.
- Framework-tests of the bigger functions:
- Comparing to status quo (regression tests),
- Comparing to known analytical solutions,
- Comparing different options to each other,
- Comparing to other 1D modellers (EMmod, DIPOLE1D, GREEN3D).
- Incorporated with Travis CI and Coveralls.
- Internal changes:
- Add kernel count (printed if verb > 1).
numexpris now only required ifopt=='parallel'. Ifnumexpris not found,optis reset toNoneand a warning is printed.- Cleaned-up wavenumber-domain routine.
- theta/phi -> azimuth/dip; easier to understand.
- Refined verbosity levels.
- Lots of changes in
utils, with regards to the new routinebipoleand with regards to verbosity. Moved all warnings out fromtransformandmodelintoutils.
- Bug fixes
v1.1.0 - 2016-12-22¶
- New routines:
- New
srcbipolemodelling routine: Model an arbitrarily oriented, finite length bipole source. - Merge
frequencyandtimeintodipole. (frequencyandtimeare still available.) dipolenow supports multiple sources.
- New
- Internal changes:
- Replace
get_Gauss_Weightswithscipy.special.p_roots jv(0,x),jv(1,x)->j0(x),j1(x)- Replace
param_shapeinutilswith_check_varand_check_shape. - Replace
xcoandycobyangleinkernel.fullspace - Replace
fftlogwith python version. - Additional sine-/cosine-filters:
key_81_CosSin_2009,key_241_CosSin_2009, andkey_601_CosSin_2009.
- Replace
- Bug fixes
v1.0.0 - 2016-11-29¶
- Initial release; state of manuscript submission to geophysics.