Releases: simpeg/discretize
v0.10.0
What's Changed
- Add black, flake8 and flake8 plugins to environment file by @santisoler in #327
- Use any Python 3 in pre-commit by @santisoler in #328
- Simplex stashing by @jcapriot in #329
- Add new TensorCell class by @santisoler in #325
- Configure pyvista for doc builds by @jcapriot in #330
- Add a noexcept clause to the wrapper function by @jcapriot in #331
- Face props mass matrices by @dccowan in #326
- Pin flake8 by @jcapriot in #335
- Add cell_nodes property to TensorMesh by @santisoler in #333
- Update a test expression to fix a logical short circuit by @munahaf in #339
- Add export config for git archives by @jcapriot in #340
- Pyproject.toml by @jcapriot in #338
- CIbuildwheel by @jcapriot in #342
- Add Release Notes for 0.10.0 by @jcapriot in #343
New Contributors
Full Changelog: v0.9.0...v0.10.0
0.9.0 Release
What's Changed
- Add stacklevel to warnings by @jcapriot in #309
- Switch to try_emplace by @jcapriot in #308
- Assert tests by @jcapriot in #310
- Remove calls with deprecated dir argument by @jcapriot in #312
- change name and description of average edge to face by @jcapriot in #314
- update doc page style sheet by @jcapriot in #315
- Curvilinear vector boundary integral by @jcapriot in #316
- Cyl average edge by @jcapriot in #317
- Feat/simp boundary by @jcapriot in #318
- Add message to assertion error in tests. by @jcapriot in #319
- Nodal boundary example by @jcapriot in #320
- Capture scroll by @prisae in #322
- Cyl mesh generalization by @jcapriot in #321
- 0.9.0 staging by @jcapriot in #323
- Add
total_nodes
method to TreeMeshes by @santisoler in #324
New Contributors
- @santisoler made their first contribution in #324
Full Changelog: v0.8.3...v0.9.0
0.8.3
What's Changed
- Dark mode theme for documentation by @jcapriot in #292
- Testing environment updates by @jcapriot in #294
- Diagonal tree balance by @jcapriot in #295
- More tree refine functions by @jcapriot in #296
- Add new refine surface, bounding box, and point refine methods. by @jcapriot in #297
- Build maintenance by @jcapriot in #299
- implement zeros outside for interpolation function by @jcapriot in #298
- Add style testing by @jcapriot in #300
- Documentation updates by @jcapriot in #301
- 0.8.3 staging by @jcapriot in #302
Full Changelog: v0.8.2...v0.8.3
Discretize restructure
This minor release is intended to bring consistent pep8 style naming across all of discretize's classes and functions.
There are two major types of renaming, aliases and deprecations. We have chosen to move to more descriptive property names for classes, generally. For example, mesh.area
is deprecated and now is mesh.face_area
. Also properties like mesh.vnC
are now officially mesh.shape_cells
due to the more descriptive name, but can also be accessed as mesh.vnC
to speed up some code writing for users. We have included a full list of aliases and deprecations below. In PR #227 we have detailed our reasonings behind individual name choices.
The other big change that will likely cause previous code to break is that all of these mesh.shape_*
type properties are now explicitly tuple
-s, making them immutable. These properties could previously be modified which would result in undefined and unsafe behavoir. A side effect of this, is that any code that relied on these properties being numpy.ndarray
-s, will break. This is intentional.
There's a few internal changes as well, to reorganize the file structure. importing items in discretize.utils
from their individual module files is not recommended and might result in future broken code. Please only import these items from the discretize.utils
module.
We have also separated the matplotlib
plotting code into a separate module: discretize.utils.mixins.mpl_mod
. At the same time we have further improved the plotting speed of discretize.TreeMesh
and discretize.CurvilinearMesh
. This also allows all of these functions to have a unified calling convention.
Finally, we have removed assert errors in favor of throwing the proper exception when checking inputs. We have removed all references to __future__
and six
to clean up and drop python 2 compatibility.
Changes
For a full list of deprecations and aliases please visit the release notes in the documentation here.
Volume Average
discretize
0.5.0 Release Notes
This minor release has a few small bug fixes as well as a new volume averaging operator.
The Volume Averaging operator has been implemented for arbitrary TensorMesh
, TreeMesh
, and combinations of them. It is defined as being a mass conserving operation. More details can be found in its documentation discretize.utils.volume_average
There are also some updates for the new deprecations in matplotlib
to hopefully throw less deprecation warnings internally. There are still a few left which are on our radar to fix in the next patch.
We are also dropping support for python 3.5 which will reach end-of-life within a few weeks.
Contributors
Pull requests
NumPy Build & Bug Fixes
summary of changes
This is a patch to fix a few bugs that have popped up over the last few months, as well as a single function addition to output only the model for a TreeMesh.
Also we have dropped testing of discretize on Python 2.7 as it is officially in end-of-life stage (as of January 1st, 2020).
-
From #191:
Enables discretize to be installed on a system without NumPy present beforehand (for example when pip installing discretize).
It also contains a small update to the curvilinear mesh view that updates that function to be in line with the otherplotImage
functions. -
From #189:
Bugfix. Slicer failed ifxslice
was provided without ayslice
, because of wrong comparison.
Before, if you provided a homogenous model, it looked like this:
So the colour in the xy- and xz-plots is wrong. As soon as you scroll, the colour in the yz-plot will change to the wrong colour too.
With the bug-fix, they all get the right colour, and will remain correct if scrolling:
The bug only affects homogeneous fullspaces, which caused an issue with the range used bycolorbar()
. -
From #187:
We can output models through thewriteUBC
method of the TreeMesh. However, we might want, for symmetry withTensorMesh
, also have thewriteModelUBC
function, which will only write out the model.
serialization of meshes
summary of changes
-
Update instantiation of basemesh so meshes can be formed from their serialized state, e.g.
mesh = discretize.BaseMesh.deserialize(mesh_json)
will have the value of
_n
stored, thus,n
does not need to be provided on instantiation -
Update the x0 property on the TreeMesh so that it goes through the
-
Allow
complex
scalars to return true in theisScalar
util, as well asnumpy.number
(rather than specificallynp.int
,np.float
) -
Add testing on the serialization / deserialization of meshes
Tree functions
Updates
- Several of the functions are used to integrate line source terms for FDEM.
- The TreeCell object now exposes it's node/edge/face indices to python, a TreeCell object can be obtained by directly indexing the TreeMesh.
- Added much documentation to the TreeMesh objects and their functions.
- The TreeMesh plotSlice and plotGrid functions now have the same calling conventions as the respective TensorMesh functions
0.4.7
- from pr: #172
- commits from: @dccowan
- review from: @sarahgarre, @sgkang, @lheagy
Tutorials in the discretize docs
Addition of tutorials for:
- Mesh generation (tensor, cyl and tree)
- Averaging and differential operators
- Discretized approximations to inner products using finite volume (basic, constitutive relations, differential operators and an advanced section)
- Solving PDE examples
Update TensorMesh-OMF interface
- from pr #174
- commits from @banesullivan
- review from @lheagy
Overview
This release adds full support for going back and forth between OMF and discretize.TensorMesh
. The OMF support implemented in a previous release only went one way (disscretize
➡️ OMF) and had a bug that messed up the spatial reference of the OMF mesh. This release makes it seamless to go back and forth (discretize
to_omf(models)
method and load your TensorMesh
s into other software that supports OMF (e.g. Leapfrog)!
Notes
- At the moment, only
TensorMesh
s are supported by OMF - OMFv2 should bring more support for Curvilinear and Tree meshes. When that's released we can fill in the methods that currently raises a
NotImplementedError
- These changes makes updates to the
TensorMesh
-OMF interface to make going to/from OMF/discretize more fluid.
Example
import discretize
import omf
import numpy as np
# Make a TensorMesh
h = np.ones(16)
mesh = discretize.TensorMesh([h, 2*h, 3*h])
vec = np.arange(mesh.nC)
models = {'arange': vec}
# Make an OMF Element
omf_element = mesh.to_omf(models)
# Use OMF to save that element to an OMF project
proj = omf.Project(
name='My project',
description='The most awesome project I have ever worked '\
'on and this is a lengthy description of how '\
'awesome it is.',
)
# Add the volume element
proj.elements = [omf_element,]
# Verify all is good
assert proj.validate()
# Write it out
omf.OMFWriter(proj, 'myproject.omf')
And now you can use the .omf
project file with your tensor mesh or many tensor meshes in your favorite software that supports OMF (e.g. Leapfrog).
Or you could verify this all worked with omfvista
:
import omfvista
foo = omfvista.load_project('myproject.omf')
foo.plot()