Skip to content

Releases: emsig/emg3d

Fourier

07 Nov 18:44
Compare
Choose a tag to compare
  • New routine:

    • emg3d.utils.Fourier, a class to handle Fourier-transform related stuff for time-domain modelling. See the example notebooks for its usage.
  • Utilities:

    • Fields and returned receiver-arrays (EMArray) both have amplitude (.amp) and phase (.pha) attributes.
    • Fields have attributes containing frequency-information (freq, smu0).
    • New class SourceField; a subclass of Field, adding vector and v{x,y,z} attributes for the real valued source vectors.
    • The Model is not frequency-dependent any longer and does NOT take a freq-parameter any more (currently it still takes it, but it is deprecated and will be removed in the future).
    • data_write automatically removes _vol from TensorMesh instances and _eta_{x,y,z}, _zeta from Model instances. This makes the archives smaller, and they are not required, as they are simply reconstructed if needed.
  • Internal changes:

    • The multigrid method, as implemented, only works for the diffusive approximation. Nevertheless, we always used \sigma-i\omega\epsilon, hence a complex number. This is now changed and \epsilon set to 0,
      leaving only \sigma.
    • Change time convention from exp(-iwt) to exp(iwt), as used in empymod and commonly in CSEM. Removed the parameter conjugate from the solver, to simplify.
    • Change own private class variables from __ to _.
    • res and mu_r are now checked to ensure they are >0; freq is checked to ensure !=0.
  • New dependencies and maintenance:

    • empymod is a new dependency.
    • Travis now checks all the url's in the documentation, so there should be no
      broken links down the road. (Check is allowed to fail, it is visual QC.)
  • Bugfixes:

    • Fixes to the setuptools_scm-implementation (MANIFEST.in).

setuptools_scm

22 Oct 18:28
b4de17e
Compare
Choose a tag to compare
  • Implement setuptools_scm for versioning (adds git hashes for dev-versions).

Laplace

04 Oct 12:44
Compare
Choose a tag to compare
  • Laplace-domain calculation: By providing a negative freq-value to utils.get_source_field and utils.Model, the calculation is carried out in the real Laplace domain s = freq instead of the complex frequency
    domain s = 2i*pi*freq.

  • New meshing helper routines (particularly useful for transient modelling where frequency-dependent/adaptive meshes are inevitable):

    • utils.get_hx_h0 to get cell widths and origin for given parameters including a few fixed interfaces (center plus two, e.g. top anomaly, sea-floor, and sea-surface).
    • utils.get_cell_numbers to get good values of number of cells for given primes.
  • Speed-up njitted.volume_average significantly thanks to @jcapriot.

  • Bugfixes and other minor things:

    • Abort if l2-norm is NaN (only works for MG).
    • Workaround for the case where a sslsolver is used together with a provided initial efield.
    • Changed parameter rho to res for consistency reasons in utils.get_domain.
    • Changed parameter h_min to min_width for consistency reasons in utils.get_stretched_h.

JOSS article

17 Jul 14:33
Compare
Choose a tag to compare
  • Version of the JOSS article, https://doi.org/10.21105/joss.01463 .
  • New function utils.grid2grid to move from one grid to another. Both functions (utils.get_receiver and utils.grid2grid) can be used for fields and model parameters (with or without extrapolation). They are very similar, the former taking coordinates (x, y, z) as new points, the latter one another TensorMesh instance.
  • New jitted function njitted.volume_average for interpolation using the volume-average technique.
  • New parameter conjugate in solver.solver to permit both Fourier transform conventions.
  • Added exit_status and exit_message to info_dict.
  • Add section Related ecosystem to documentation.

H-field

05 Jul 09:49
Compare
Choose a tag to compare
  • New routines:

    • utils.get_h_field: Small routine to calculate the magnetic field from the electric field using Faraday's law.
    • utils.get_receiver: Small wrapper to interpolate a field at receiver positions. Added 3D spline interpolation; is the new default.
  • Re-implemented the possibility to define isotropic magnetic permeabilities in utils.Model. Magnetic permeability is not tri-axially included in the solver currently; however, it would not be too difficult to include if there is a need.

  • CPU-graph added on top of RAM-graph.

  • Expand utils.Field to work with pickle/shelve.

  • Jit np.linalg.norm (njitted.l2norm).

  • Use scooby (soft dependency) for versioning, rename Version to Report (backwards incompatible).

  • Bug fixes:

    • Small bugfix introduced in ebd2c9d: sc_cycle and lr_cycle was not updated any longer at the end of a cycle (only affected sslsolver=True.
    • Small bugfix in utils.get_hx.

CPU & RAM

03 Jun 18:36
Compare
Choose a tag to compare

Further speed and memory improvements:

  • Add CPU & RAM-page to documentation.

  • Change loop-order from x-z-y to z-x-y in Gauss-Seidel smoothing with line relaxation in y-direction. Hence reversed lexicographical order. This results in a significant speed-up, as x is the fastest changing axis.

  • Move total residual calculation from solver.residual into njitted.amat_x.

  • Simplifications in utils:

    • Simplify utils.get_source_field.
    • Simplify utils.Model.
    • Removed unused timing-stuff from early development.

Memory

28 May 09:09
Compare
Choose a tag to compare

Memory and speed improvements:

  • Only calculate residual and l2-norm when absolutely necessary.
  • Inplace calculations for np.conjugate in solver.solver and np.subtract in solver.residual.

RegularGridInterpolator

26 May 09:12
Compare
Choose a tag to compare
  • Replace scipy.interpolate.RegularGridInterpolator with a custom tailored version of it (solver.RegularGridProlongator); results in twice as fast prolongation.
  • Simplify the fine-grid calculation in prolongation without using gridE*; memory friendlier.
  • Submission to JOSS.
  • Add Multi-what?-page to documentation.
  • Some major refactoring, particularly in solver.
  • Removed discretize as hard dependency.
  • Rename rdir and ldir (and related p*dir; *cycle) to the more descriptive sc_dir and lr_dir.

Accepts any grid size

01 May 10:53
Compare
Choose a tag to compare
  • First open-source version.
  • Include RTD, Travis, Coveralls, Codacy, and Zenodo. No benchmarks yet.
  • Accepts now any grid size (warns if a bad grid size for MG is provided).
  • Coarsens now to the lowest level of each dimension, not only to the coarsest level of the smallest dimension.
  • Combined restrict_rx, restrict_ry, and restrict_rz to restrict.
  • Improve speed by passing pre-allocated arrays to jitted functions.
  • Store res_y, res_z and corresponding eta_y, eta_z only if res_y, res_z were provided in initial call to utils.model.
  • Change zeta to v_mu_r.
  • Include rudimentary TensorMesh-class in utils; removes hard dependency on discretize.
  • Bugfix: Take a provided efield into account; don't return if provided.