Releases: PMEAL/OpenPNM
Releases · PMEAL/OpenPNM
v2.8.0
🚀 New features
- Added new flexible species classes with properties determined using "chemicals" package #new
- Added export to Statoil format and a wrapper for calling pnflow.exe #new
- Added support for GPU solvers via CuPy library #new
- Overhauled and renovated the conduit flow approach (see docs) #new
🍰 Enhancements
- Updated PoreSpy IO class to work with PoreSpy V2 #enh
- Enhance tic/toc functions #enh
- Changed matplotlib backend to SVG in examples for sharper images #enh
- Plot functions now accept axis as well as figure handles #enh
🔧 Maintenance
- Updated requirements in porespy_requirements.txt and in setup.py #maint
- Add lower bound for docrep version in requirements #maint
- Replaced pardiso4py with pypardiso (now officially in pip and conda-forge) #maint
- Minor refactoring of TransientReactiveTransport to make it more readable #maint
- Fixed incorrect scipy.sparse import in graphtools #maint
- Fixed failing Ubuntu Action by adding
openmpi
as a test dependency #maint
⚠️ API changes
- Flipped "front" and "back" labels to respect the right-hand-rule #api
- Added logger message to Cubic init notifying about front/back switch #api
- plot_connections, plot_coordinates, and plot_intrusion_curve now accept axis obj rather than figure #api
- ad_dif and ad_dif_mig conductance models no longer export local Peclet numbers #api
🐛 Bugfixes
- Fixed bug in cylindrical point generator and replaced missing Delaunay example #bug
- Flipped "front" and "back" labels to respect the right-hand-rule #bug
- Corrected pore.seed in StickAndBall2D to be same as the 3D version #bug
📗 Documentation
- Changed matplotlib backend to SVG in examples for sharper images #doc
- Updated documentation to pydata theme #doc
v2.7.0
v2.7.0
🚀 New features
- Added a function to filter pores based on number of neighbors (
topotools.filter_pores_by_z
) - Added ability to open networks directly in paraview to the IO submodule
- Added
is_fully_connected
function to topotools that is called by transport solvers ensure non-singular matrices, including connectivity between boundary pores - Added
remove_source
method to ReactiveTransport classes, and mode toset_source
method
🍰 Enhancements
- Fixed
dependency_map
to include pure props (those w/o an explicit model) - Enhanced
dependency_map
to show pores as circles and throats as squares [#1853] - Enhanced
plot_coordinates
defaults to make pores more visible [#1850] - Catch undefined pores/throats at runtime
🔧 Maintenance
- Update Actions to accommodate the native support for "ci skip" by GitHub [#1860]
- Updated deprecated docrep methods [#1854]
- Removed unused functions from misc module
- Remove ReactiveTransport._set_variable_props
⚠️ API changes
- Fixed TransientReactiveTransport to always run until t_final (removed steady state check) [#1851]
- Increased logger level to critical when saving PNM files
🐛 Bugfixes
- Fixed subtle bug in MixedIP algorithm
- Fixed a bug in spacing for Cubic networks with only two pores [#1844]
- Fixed minor bug in
trim
if all throats are removed
v2.6.0
v2.6.0
🚀 New features
- Added source term models for Butler-Volmer kinetics
- Added
set_outflow_BC
to NernstPlanck algorithm - Added a web-based dependency map using D3-tree javascript library
- Added
stitch_pores
function to topotools for joining disconnected pores within an existing network - New robust version-agnostic PNM file format, see PR#1621 for details
set_rate_BC
now optionally acceptstotal_rate
, which is equally distributed among pores- Added
name
tosettings
- Added uuid to all objects (stored as a hidden setting
_uuid
) - Added a new grid class called Tableist to better handle the project grid
🍰 Enhancements
- Add
_validate_data_health
to the run method of algorithms - Vastly improved the default formatting of
show_hist
's grid layout - Storing the transient solution times in the
settings
to make indexing into quantity@i arrays easier - Revamped the documentation, also it's now hosted on GitHub Pages (numba breaks readthedocs)
- Exposed the ability to set/change/remove locations where physics and geometries are applied
- Speed up neighbour throat lookups by ~100X
- Enhanced
extend
function to work with phases present - Removing exception in
stitch
if phases are present - Allow merging of networks when geometry is present
- Improved behavior when physics objects are instantiated without an associated phase
- Improved grid functionality on the project class
- Fixed PNM
load_project
method to deal with class attrs - Fixed scaling in
plot_conns
andplot_coords
🔧 Maintenence
- Improved the boundary condition setters to prevent invalid combinations
- Changed
_get_solver
behavior to fall back tospsolve
if pardiso missing - Refactored
MultiPhase
and fixed the global partition coefficient model's dependency handling bug - Extended checks for invalid
't_schemes'
setting on transient algs - Added examples and tests for the
Salome
export class - Changed PARDISO solver backend from haasad/pypardiso to conda-forge/pardiso4py
⚠️ API changes
- Renamed throat_shape_factor submodule (+ dict keys in method args) to capillary_shape_factor for clarity
- Renamed pore/throat_area submodules (+ dict keys in method args) to cross_sectional_area for clarity
- Changed "_2D" to "2D" in class names and lowercased "_2D" in method names
- Deprecating python 3.6
🐛 Bugfixes
- Fixed bug in charge source term (in Nernst-Planck) that produced all 0s in some cases
- Properly combine BCs and ICs on first time step in
ReactiveTransientTransport
- Saving to PNM now skips models with non-serializable args
- Added a check to ensure phase is defined before running alg
- Plot conns/coords methods now pass kwargs on to matplotlib functions
- Workspace load_project now reads file AND returns the project
topotools.dimensionality
is now more robust with respect to numerical round-off- Object names are now enforced to be unique within a project
- Updated
Imported
geometry class to accept project as well as network ReactiveTransport
now checks for convergence when maximum iterations reached and reports if not achieved
📗 Documentation
- Fixed a typo in data_and_topology_storage.ipynb example
- adding readme to tutorials folder
- New example discussing domain size calculations
- Improved docstring in add_model to include new explicit mode
- Fixed a typo in adding_boundary_pores.ipynb
- Fixed a typo in docstrings of topotools.reduce_coordinates
- Added a tutorial on using the dev branch of openpnm via git
- Fixed typo in relative permeability calculation notebook
- Significantly revamped the examples directory for improved categorization of material
v2.5.0
🍰 Enhancements
- Enhanced RelativePermeability to better support directional simulations
- Enhanced CI workflows; migrated from pip to conda
- Enhanced ball_and_stick shape factors to raise Exception if the underlying assumption is violated
- Enhanced merge_networks to fully handle networks with existing geometries
⚠️ API changes
- Changed docrep installation to use 0.2.7
- Changed default solver from Scipy's spsolve to PyPardiso's direct solver
🐛 Bugfixes
- Fixed the incorrect scaling issue of plot_connections and plot_networkx
- Fixed deprecation warnings for Scipy, HDF5, and numpy
- Fixed CI testing error due to pep8 incompatibility with the latest pytest
- Fixed use of sp to np to avoid breaking when scipy removes numpy from it's namespace in version 2.0
- Fixed some issues in NernstPlanck algs, changed name of solver class, added tests and scripts
- Fixed typo in usage of map_pores
v2.4.2
🐛 Bugfixes
- Fixed bug in interleave_data that inferred incorrect datatypes in some instances
v2.4.1
🐛 Bugfixes
- Fixed caching/uncaching of A matrix to work with all sub-classed transport algorithms, not just ReactiveTransport
v2.4.0
🚀 New features
- Added conns and coords attributes to GenericNetwork
- Added axes labels for
plot_coordinates
plot_connections
method - Added a wrapper for PyPardiso solver, and a pseudo-interface for solvers
🍰 Enhancements
- Optimized find_neighbor_sites to run up to 4x and num_neighbors to run up to 30x faster
- Enhanced algorithm sanity check to include topology health check
- Enhanced error/exception messages in several spots
- Enhanced stitch method with new mode and ability to specify labels for new stitch throats
- Enhanced io.PoreSpy.load to accept dict handle
⚠️ API changes
- Changed _check_for_nans to _validate_data_health
- Changed Cubic class to reject connectivity = 8 or 12 as they generate disconnected networks
🐛 Bugfixes
- Fixed handling of Nt by 2 conductance arrrays (i.e. diff_cond in ad_dif_conductance)
- Fixed _get_iterative_props to now include "variable_props" in the returned list of props
- Fixed scaling in plot_coordinates, and changed size_by and color_by to ONLY accept ND-arrays
- Fixed OpenPNM IO load method to properly return project
- Fixed plot_networkx scaling issue when plotting consecutively
- Bugfix: variable conductance now triggers A rebuild
- Fixed bug in bond_percolation that allowed early invasion into throats connected to invading cluster
- Fixed TransientReactiveTransport to run repeatedly + optimized unit tests
- Fixed bug in set_rate_BC: multiple values are now accepted
Bugfix and deployment automation
🚀 New features
- Added automatic generation of release notes when deploying to PyPI
- Added automatic deployment to PyPI using GitHub Actions
🐛 Bugfixes
- Fixed bug in find_connected_pores/sites to enforce upper triangular adjacency matrix #patch
Hotfix: Corrected handling of overlapping pores
This hotfix repairs a bug in the handling of overlapping pores for cases where the pores overlap but the throat endpoints are not collinear with the pore centers. This bug was leading to erroneous calculations of permeability and tortuosity in extracted networks by incorrect conductance values for affected conduits.
Spring 2020
This release is a bit ahead of schedule (based on our plan to release at the beginning of each semester), but it's a very important release. It fixes several important bugs in the ReactiveTransport class and adds some major improvements to the handling of iterative calculations, among other things. The complete list of updates is given below:
🚀 Improvements and Enhancements
- Major upgrade to pore-scale model dependency checking
- Added detailed checking for NaNs in GenericTransport
- Enhanced the mixture submodule
- Renamed the PNP related classes to more descriptive names
- Improved performance of CubicTemplate by removing finding and labeling of surface pores
- Enhanced plot_networkx to work for 1D networks and improved robustness
- Improved docstrings in algorithms, especially settings, with help of docrep
- Added Python 3.8 to testing suite
- Consolidated solver tolerances
- Algorithms now accept initial guess when calling run
- README.md now renders propertly on PyPI
- Optimized OpenPNM import time dramatically
- Added full pytest integration for jupyter notebooks, as well as scipy 2 deprecation-proofing
🚀 New Features and Functionality
- Added a PoreSpy option to io module
- Added preliminary ability to export to Salome
- Add example on how to create a custom phase object
- Added inspect_locations method to the Project class
🐛🐛🐛 Major Bug Fixes
- Fixed _run_generic to rebuild A and b when cache_A/b set to False
- Fixed PETSc wrapper to be compatible with the latest MUMPS release
- Fixed missing minus sign when using source terms in transient algs with Crank-Nicolson
- Fixed dispersion rate calculation
- Improved tolerance in transient simulations to match steady-state
🐛 Minor Bug Fixes
- Default values for source term models now ensure zero rate/S1/S2
- Replaced is not with != throughout
- Removed use of floats as indices in arange and linspace
- Fix set_source so calling it w/ same propname does not lead to duplicate source terms
- Solver rejects solution when residual equals tolerance
- Fixed throat models that would break with no throats were present
- Fix dispersion conductance bug: now updates iteratively
- Fixed bug in merge_networks when networks were 2D