Recent Releases of openpnm
openpnm - v3.4.0
- ### :bug: Bugfixes
- Added try/except to
__getitem__in Phase in case some settings are missing - Fixed dtype bug in
isoutsidefunction, and passingftoreflect_basepoints - Fixed use of
matplotlib'sdocstringsubstitutionhelper function to be version resistant
- Python
Published by github-actions[bot] over 2 years ago
openpnm - v3.3.0
:cake: Enhancements
- Accelerated tessellation generators
- Enhanced
reflect_base_pointsto accept a scale-factor to control number of points - Performing Delaunay triangulation in delaunay_voronoi_dual is now optional
- Enhanced
create_incidence_matrixto allow 2*Nt long weights
:wrench: Maintenance
- Removed
pypardisoas a hard dependency to suppport ARM64 architecture - Updated use of matplotlib's docstring module for their new deprecation
:bug: Bugfixes
- Fixed bug in
merge_poreswhich used too many neighbors when finding centroid - Fixed bug in pore surface area models due to incorrect use of
flattenon conns
- Python
Published by github-actions[bot] over 2 years ago
openpnm - v3.2.1
:rocket: New features
- Added transient thermal conduction class
:cake: Enhancements
- Added
label_byoption toplot_connectionsandplot_coordinates
:bug: Bugfixes
- Fixed memory leak
- Fixed a bug in
Transport.rate, which broke when only two throats were present
- Python
Published by github-actions[bot] over 2 years ago
openpnm - v3.2.0
:rocket: New features
- Add
infoattribute to Network class for quick visualization of key properties #new # :cake: Enhancements - Enhanced Voronoi generators to accept a
relaxationargument #enh - Add
pore_labelsandthroat_labelsargments toplot_tutorialso apply custom labels #enh - Readding labels to Voronoi/Delaunay based networks #enh
- Adding xmin/xmax to cubic networks #enh
- Allowing unfrozen stats distributions in generic_distribution #enh # :wrench: Maintenance
- Better release notes with less clutter #maint # :bug: Bugfixes
- Fixed labeling bug in
FaceCenteredCubicfor face-to-face throats #bug - Checking isfinite in plot methods #bug
- Fixed bug in Voronoi/Delaunay network generators where reflect and trim args were not being processed #bug # :green_book: Documentation
- Lots of little enhancements to our documentation #doc
- Enhancing application example on simulating MIP #docs
- Python
Published by github-actions[bot] over 2 years ago
openpnm - v3.1.2
:rocket: New features
- Added preliminary support for lloyd relaxation in the Voronoi generators ### :bug: Bugfies
- Fixed bug in io module when exporting projects with percolation algorithms
- Fine-tuned Delaunay and Voronoi network generators to be more robust to different inputs
- Python
Published by github-actions[bot] over 2 years ago
openpnm - v3.1.0
:rocket: New features
- Added wrapper for
pyamg.ruge_stuben_solvertoopenpnm.solvers
:cake: Enhancements
- Fetching 'pore.source' from an algorithm without any source terms defined returns empty dict instead of
KeyError
:wrench: Maintenance
- Removed the use of
pyfrom unit tests - Switched CI linter from pycodestyle to flake8
- Fixed numerous style errors throughout to satisfy flake8
:green_book: Documentation
- Enhanced some example notebooks, added a new notebook on managing clustered networks
- Python
Published by github-actions[bot] over 3 years ago
openpnm - v3.0.0
:fireworks: Major Changes
- Removed
geometryandphysicsmodules - Removed use of
GeometryandPhysicsobjects - Moved plot functions from
topotoolsto a newvisualizationmodule - Removed
materialsandmetricsmodules in favor of creating detailed examples - Removed the term Generic from all class names to improve readability #api
:rocket: New features
- Added a
solversmodule containing classes that define a generic api for using arbitrary numerical solvers - Added an
integratorsmodule containing classes that define the api for transient solvers - Added a wrapper to leverage the
scipy.integrate.ivp_solvefunction for transient problems - Added
Demonetwork generator which includes geometry models already assigned and ready for instant use - Added official support for mixtures, including pore-scale models for first-approximation calculations of pure and mixture properties
- Added
topotools.find_interface_throatsto find throats between two sets of pores - Added
SteadyStateSolutionclass for storing the results of steady state algorithms - Added
TransientSolutionclass for storing results of transient algorithms at each time step, including ability to interpolate between times - Added mechanism to declare any property to be variable (i.e. a function of the solved quantity)
- Added a
paramsattribute to all objects for storing scalar values and constants - Added support to the dictionary objects for
pn['param.foo']which looks up values frompn.params['foo']in a way that works seamlessly with existing pore-scale models - Added
xas a property toTransportclasses for easy access to the solved quantity - Added ability to compute the physical properties of arbitrary pure gases and liquids using correlations from the chemicals package
- Added a framework for computing properties of mixtures as a function of composition using correlations from the chemicals package
- Added
generate_voxel_imagetovisualizationmodule - Added a set of pore-scale topology models under
models.network - Added
plot_network_jupyterfunction to visualization module which creates an interactive visualization using Plotly - Created a
contribfolder/module for putting experimental and beta features, and well as contributions before they are adopted into the main code base - Added
TransientMultiPhysicsclass to thecontribfolder - Added new
plot_networkfunction based on vispy tocontribfolder - Revised the
settingsattribute on objects to work more like python'sdataclasseswith settings as attributes, while also enforcing their type
:cake: Enhancements
- Adopted rich package for formatting logger messages
- Added
ScipyCGto the solvers module (usesscipy.sparse.linalg.cg) - Added
intersecting_cones/pyramidssize factor models, as well as hybridcones_and_cylinderswhich adopt intersecting cones/pyramids as needed - Re-implemented the percolation algorithms for better consistency between them
- Added
callmethod toModelWrapperso they can run themselves directly with zero effort by user - Enhanced BV formulations to allow variable number of electrons
- Created
openpnm.models.collectionscontaining dict files of preset models for all sub-classes to simplify instantiation - Allowed setting of default solver in the
workspace.settings - Enhance
_validate_data_healthto account for throats without an assigned conductance model - Augmented
getitemon dictionaries to return a numeric value if used as a key, so pn[1.0] returns 1.0. This allows passing in scalar values to pore-scale models with no need to assign that scalar to all locations first - Add tqdm progress bar for Newton iterations in ReactiveTransport
- Added
asmaskargument to neighbor lookup functions - Added ability to delete nested/hierarchical keys simultaneously (i.e. del obj['pore.nested'])
- Added a pore-scale model function for generating values according to a given a histogram
- Added a check for stall in
ReactiveTransport - Relaxed convergence checks in
ReactiveTransportto facilitate iterative solves - Project, models, and settings are now pretty-printed when evaluated at REPL (IPython console)
- Updated math functions in misc to accept an array of props instead of individual args
- added
get_conduit_datamethod to Base class - Enhanced versioning so that dev builds get their own "build number" as X.Y.Z.devN
:wrench: Maintenance
- Got code coverage to 90%
- Removed several minor dependencies including flatdict which is no longer maintained
- The dependencies in requirements.txt are now synced with those in setup.py
- Stopped getting logger from root level to prevent interfering with other packages' outputs
- Fixed exporting transient data to paraview to work with new TransientSolution class
- Settings are applied after calling super().init and they are no longer passed up the init chain
- Moved iterative props machinery to
Algorithm - Fixed string splitting at dots to work better with multi-dot name
- Improved handling of missing keys on
Phaseobjects for cleaner tracebacks when autointerpolation is enables - Major refactor of
topotoolsmodule into library of functions requiring no openpnm specific classes - Modules/submodules in setup.py are now automatically filled using setuptools package
- Replaced for-loop with
numpyunbufferedoperations in surface area models - Reorganized
openpnm.models.misc/phase/physicsmodules to keep namespace clean - Removed
relaxation_sourcefrom ReactiveTransportSettings as we no longer apply relaxation to source term - Leveraged
__all__functionality throughout code to control imports of functions - Added a runtime check to see if x0 contains infs/nans
- Refactored
Transportto put boundary condition functions in a mixin - Added unit tests for Salome, COMSOL, and STL I/O classes
- Changed
regenerate_modelsto work when models lackregen_modeargument - Removed
cache_b, changedcache_Atocachesince b is very small - Removed numba deprecation warning
- Updated list of rules to be ignored by flake8 style check
- Removed
freeze_modelsoption fromModelsMixin - Deleted many unused functions from
utils.misc - Added style check workflow to actions
- Refactor
Transportand subclassed algorithms' run method - Switched to
scipy's convergence checker - Refactor of
set_label - Removed "internal" label from
BravaisandCubicDual - Broke up
Baseclass into several mixins for more control of inheritance #maint
:warning: API changes
- Complete removal of
GeometryandPhysicsobjects, in favor ofNetworkandPhasehandling all related data and models directly - Renamed
models.topologytomodels.network - Removed PETSc solver wrapper (needs to be revisited)
- Removed
MixedInvasionPercolation(Coop)andOrdinaryPercolationalgorithms until they can be better supported - Replaced
targetkeyword withnetworkorphasethroughout all pore-scale models, except ones that are truly general - Conduit properties and now stored as Nt-by-3 arrays instead of dicts
- Changed how source terms are tracked from
obj.settings['sources']toobj[pore.sources']to be consistent with how boundary conditions are tracked (i.e.alg['pore.bc.rate']) - Changed the behavior of the
modeargument when adding boundary conditions - Converted the
Projectclass to a minimal pseudo-list, with no extraneous methods inherited from list cluttering the namespace - Initialization of
Base2objects no longer accepts settings - Exposed
iterative_props, removedset_variable_props - Removed
ModelsMixinfromAlgorithmsince algorithms don't typically need models - Removed prefix and name from settings
- Refined the Butler-Volmer model formulations to match Newman's book
- Created
Drainageclass in algorithms with more limited scope to replaceOrdinaryPercolationandPorosimetry - Removed
nlin_max_iterfromReactiveTransportSettingsin favor ofnewton_maxiter - Move
Multiphasetocontribfolder to indicate it is experimental - Transport algorithms'
runmethod now returns one or more Solution objects inside dictionary named according to the quantity they contain - Made
networka mandatory argument onphaseandalgorithmobjects - Renamed
tomaskandtoindicestoto_maskandto_indicessince the underscore is the common convention in other packages likepandas - Moved
get_domain_areaandget_domain_lengthfrom attributes on transport algorithms totopotools, for more general use - Made
phasea mandatory argument in algorithms instead of allowing it to be set in settings after the fact - Removed old multiphysics algorithms (PNP) in preparation for new approach
- Removed effective property calculation methods from
Transportsince these can be computed by users themselves - Complete rewrite/redesign of linear solvers and transient algorithms
- Added a
Solutionobject for returning data from algorithms - Added a
Solverclass to handle matrix math which is passed as an argument to run methods - Removed
StickAndBallgeometry class (useSpheresAndCylindersinstead) - Removed
classic_ordinary_diffusionandclassic_hagen_poiseuilleconductance models - Refactored conductance models to work with size factors rather than shape factors
- Removed redundant
sympysource models and made generic one much easier to use - Removed
num_pointsargument fromDelaunay/Voronoiclasses in favorpoints=int - Removed
spacingandshapeattribute fromCubicand moved totopotoolsas functions - Removed
setupmethod from algorithms in favor of adding to settings attribute directly - Deprecated
models.geometry.pore_area/throat_areain favour ofpore/throat_cross_sectional_area
:bug: Bugfixes
- Calling
regenerate_modelson a mixture now first regenerates each component - Fixed a critical bug in
duplicate_throats - Fixed
color_byargument inplot_coordinates/connectionsto accept partial list of values if pores/throats specified - Fixed
ReactiveTransport's run method to accept instantiated solver, not the class itself - Fixed a bug in XDMF output where dimensions were reversed
- Fixed bug in
lensandpendular_ringmodels - Fixed bug in
Transportto properly check for connected network including connections with boundary conditions - Fixed regex bug in setup.cfg that broke the 4th digit counter
:green_book: Documentation
- Reorganized examples folder and documentation website
- Refactored and automated generation of the documentation
- Completely rewrote examples to form comprehensive tutorials and reference docs
- Fixed module docstrings to satisfy sphinx
- Updated list of options in docstrings to use tables
- Applied docrep and matplotlib's
substituionthroughout the package to make docstrings more consistent - Removed tables of classes, methods and attributes from docstrings, and moved to sphinx docs instead
- Fixed hydraulic conductance equation in docstring
- Python
Published by github-actions[bot] over 3 years ago
openpnm - v2.8.2
:bug: Bugfixes
- Updated advection-diffusion and advection-diffusion-migration models to work with new size coefficient models #bug
- Fixed bug/typo in the setup method of the classes TransientAdvectionDiffusion and TransientIonicConduction #bug
- Python
Published by github-actions[bot] over 4 years ago
openpnm - v2.8.0
:rocket: 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
:cake: 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
:wrench: 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
openmpias a test dependency #maint
:warning: 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
:bug: 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
:green_book: Documentation
- Changed matplotlib backend to SVG in examples for sharper images #doc
- Updated documentation to pydata theme #doc
- Python
Published by github-actions[bot] over 4 years ago
openpnm - v2.7.0
v2.7.0
:rocket: 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_connectedfunction to topotools that is called by transport solvers ensure non-singular matrices, including connectivity between boundary pores - Added
remove_sourcemethod to ReactiveTransport classes, and mode toset_sourcemethod
:cake: Enhancements
- Fixed
dependency_mapto include pure props (those w/o an explicit model) - Enhanced
dependency_mapto show pores as circles and throats as squares [#1853] - Enhanced
plot_coordinatesdefaults to make pores more visible [#1850] - Catch undefined pores/throats at runtime
:wrench: 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.setvariable_props
:warning: API changes
- Fixed TransientReactiveTransport to always run until t_final (removed steady state check) [#1851]
- Increased logger level to critical when saving PNM files
:bug: Bugfixes
- Fixed subtle bug in MixedIP algorithm
- Fixed a bug in spacing for Cubic networks with only two pores [#1844]
- Fixed minor bug in
trimif all throats are removed
- Python
Published by github-actions[bot] almost 5 years ago
openpnm - v2.6.0
v2.6.0
:rocket: New features
- Added source term models for Butler-Volmer kinetics
- Added
set_outflow_BCto NernstPlanck algorithm - Added a web-based dependency map using D3-tree javascript library
- Added
stitch_poresfunction to topotools for joining disconnected pores within an existing network - New robust version-agnostic PNM file format, see PR#1621 for details
set_rate_BCnow optionally acceptstotal_rate, which is equally distributed among pores- Added
nametosettings - Added uuid to all objects (stored as a hidden setting
_uuid) - Added a new grid class called Tableist to better handle the project grid
:cake: Enhancements
- Add
_validate_data_healthto the run method of algorithms - Vastly improved the default formatting of
show_hist's grid layout - Storing the transient solution times in the
settingsto 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
extendfunction to work with phases present - Removing exception in
stitchif 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_projectmethod to deal with class attrs - Fixed scaling in
plot_connsandplot_coords
:wrench: Maintenence
- Improved the boundary condition setters to prevent invalid combinations
- Changed
_get_solverbehavior to fall back tospsolveif pardiso missing - Refactored
MultiPhaseand 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
Salomeexport class - Changed PARDISO solver backend from haasad/pypardiso to conda-forge/pardiso4py
:warning: API changes
- Renamed throatshapefactor submodule (+ dict keys in method args) to capillaryshapefactor for clarity
- Renamed pore/throatarea submodules (+ dict keys in method args) to crosssectional_area for clarity
- Changed "2D" to "2D" in class names and lowercased "2D" in method names
- Deprecating python 3.6
:bug: 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.dimensionalityis now more robust with respect to numerical round-off- Object names are now enforced to be unique within a project
- Updated
Importedgeometry class to accept project as well as network ReactiveTransportnow checks for convergence when maximum iterations reached and reports if not achieved
:green_book: Documentation
- Fixed a typo in dataandtopology_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 addingboundarypores.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
- Python
Published by github-actions[bot] about 5 years ago
openpnm - v2.5.0
:cake: 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
:warning: API changes
- Changed docrep installation to use 0.2.7
- Changed default solver from Scipy's spsolve to PyPardiso's direct solver
:bug: 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
- Python
Published by github-actions[bot] over 5 years ago
openpnm - v2.4.0
:rocket: New features
- Added conns and coords attributes to GenericNetwork
- Added axes labels for
plot_coordinatesplot_connectionsmethod - Added a wrapper for PyPardiso solver, and a pseudo-interface for solvers
:cake: 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
:warning: API changes
- Changed _check_for_nans to _validate_data_health
- Changed Cubic class to reject connectivity = 8 or 12 as they generate disconnected networks
:bug: 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
- Python
Published by github-actions[bot] over 5 years ago
openpnm - Bugfix and deployment automation
:rocket: New features
- Added automatic generation of release notes when deploying to PyPI
- Added automatic deployment to PyPI using GitHub Actions
:bug: Bugfixes
- Fixed bug in find_connected_pores/sites to enforce upper triangular adjacency matrix #patch
- Python
Published by github-actions[bot] over 5 years ago
openpnm - 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.
- Python
Published by jgostick almost 6 years ago
openpnm - 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 rungeneric 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
- Python
Published by jgostick almost 6 years ago
openpnm - Version 2.2.0
This is the first release of 2020, and is hopefully part of a new 'semester-based' release schedule. So instead of waiting an undefined amount of time until we have enough new features for a release, we will release all the new features we have added in the past semester.
🚀 New features (experimental)
- The MultiPhase class for better automated handling of multiphase simulations, including species partitioning between phases
- The Mixtures submodule for better automated handling of mixtures such as air or brine
🐛 Improvements and bugfixes
- Example scripts have been moved out of the main directory and into /scripts
- Enhanced the cooperative pore filling models for the MixedIP algorithm
- Improved speed of InvasionPercolation very substantially (about 25x)
- Enhanced purge_object to accept list of objects
- Added reset method to GenericTransport and ReactiveTransport so objects can be reused inside a for-loop
- Bug fix in plot_networkx method
- Python
Published by jgostick about 6 years ago
openpnm - Fixing error when git not installed
I recently added a small feature that appends the git commit to the version number for users working on a branch other than master, but the import of gitpython apparently fails if the host machine does not have git installed. Now this import occurs inside a try-accept so will not break
- Python
Published by jgostick over 7 years ago
openpnm - Fixing broken pip install
Several of our dependencies broke with the release of numpy 1.15, so users doing pip install with a recent conda installation (on windows) would receive a build error. This version has moved the offending deps to be optional.
There are a number of other small bug fixes and tweaks that were also added, but these were not as urgent.
- Python
Published by jgostick over 7 years ago
openpnm - Version 2 is finally ready!
🚀 New features and capabilities
- All Transport algorithms are now transient, including non-linear reactions
- A Dispersion algorithm with 4 optional discretization schemes has been added
- A mixed percolation algorithm has been added that can model drainage and/or imbibition, and includes detailed menisci movements such as snap-off, burst, and coalescence
- Several new network generators have been added such as bcc and fcc lattices
- Support for several new solvers, including pyAMG and scikit-umfpack which can now both be installed using
pip, and PetSc, assuming you are able to install it yourself (not supported bypip). - The symmetry of the coefficient matrix is now maintained when boundary conditions are are added, which significantly improves the speed of some CG based solvers (>2x faster).
Pore-Scale Models
- Much more rigorous and accurate pore-scale conductance models
- Pore-scale models can now be assigned to any object, so a model that calculates pore diameters can be assigned to a network if desired
- Pore-scale models are now stored in a top level module, making then more prominent and easier to find
Importing and Exporting Data
- Added support for two new data export formats: hdf5 and xdmf. These are designed for storing massive data sets with maximum speed, and the xdmf format can be open in Paraview for vastly sped-up visualization
- The PNM file format was refined to save either single projects or entire workspaces seamlessly
Better Organization and General Housekeeping
- The algorithm classes have been completely re-written for better consistency
- A settings attribute has been added to all objects to contain various flags and values which used to be stored as hidden attributes
- Topological manipulation tools have been moved from a sub-module of
networkto a top level module (topotools) to make it easier to access and more prominent - A
Projectclass has been added, that acts as a container for a given pore network simulation, such that theWorkspaceis populated with a collection ofProjects, each of which contains a Network object and all other associated objects (i.e. geometries, phases, etc.)
📖 Documentation
- The documentation has been thoroughly overhauled, and now includes complete coverage of all modules, classes, methods, and functions.
- The OpenPNM-Example repository has been converted to Jupyter Notebooks so users can download actual functioning code to get started
⚠️ Backwards incompatible changes
One of the main reasons for the version bump to 2.0 was to allow several long delayed changes that break backward compatibility. These are all quite superficial, so any experience using V1.0 should be easily transferred:
- All module names, including the package itself, have been changed to lowercase in accord with pep8 rules
- Neumann and Dirichlet boundary conditions have been renamed to Rate and Value to be more descriptive
- The behavior of the various lookup methods (
pores,find_neighbor_pores) have been cleaned up for better consistency - A unique Physics objects must be defined for each Geomery object. This is a bit more effort for the user, but allows much more reliable associations between objects. The new
Projectclass has agridmethod that can help to organize and visualize these associations.
- Python
Published by jgostick over 7 years ago
openpnm - Version 2, Beta-1
This adds the last few weeks of bug fixes and tweaks to the master code. The final release is schedule for July 27th, 2018.
- Python
Published by jgostick over 7 years ago
openpnm - Version 2, Beta-0
This is a beta release of V2. A more verbose release announcement will come when the beta tag is dropped.
- Python
Published by jgostick over 7 years ago
openpnm - Version 1.7.0
The main addition of this release is a Mixed Invasion Percolation algorithm, which was used in our recent publication in TiPM.
The OpenPNM team has been working VERY hard on V2, which is now available on PyPI in beta form, so this will be the last release of the V1 branch.
- Python
Published by jgostick over 7 years ago
openpnm - Patch for indexing errors in latest Numpy version
Numpy has been warning us for a while that certain indexing tricks would be deprecated, and that moment has arrived. This minor patch fixes a few places in the code where this error occurred.
- Python
Published by jgostick over 8 years ago
openpnm - Version 1.6
🚀 New features
- Two new Network classes have been added that support Dual networks
CubicDualcreates an normal cubic network of size [x, y, z] called the 'primary' network, then adds 'secondary' cubic network of size [x-1, y-1, z-1] at the interstices of the 'primary' lattice. These two networks are then interconnected to each other. The point of this class it to enable both pore phase and solid phase transport simultaneously, through primary and secondary networks, as well as allowing exchange between them via the interconnections.-
DelaunayVoronoiDualis motivated by the same idea as theCubicDual, but uses a Delaunay tessellation of random points as the 'primary' network and the Voronoi tessellation as the 'secondary' network.
- Two new plotting functions were added to
Network.tools:plot_coordinatesandplot_connections. These are meant for quickly verifying the topology of a network without having to spin-up Paraview - Several function have been added to
Network.toolstemplate_disc_ringcreates a circular template for use inCubicgenerate_base_pointsgenerates random points for use inDelaunayandDelaunayVoronoiDual
- A new pore-scale model called
largest_spherewas added toGeometry.modelsthat calculates the largest possible pore diameter to put in each location without overlapping the neighboring pores. This model is particularly useful for random networks where the spacing between pore centers is unknown. - A method for finding the pores on the surface of a network was added to
Network.toolscalledfind_surface_pores.
⚠️ API changes
add_boundariesnow accepts a list of which face to add boundaries to, rather than doing all sides (which is still the default).- Support for Python 3.3 has been dropped, and support for 3.6 has been added. OpenPNM is also compatible with the latest version of Numpy, which made a few significant changes in indexing rules.
- The
saveandloadmethods of theWorkspaceclass are now calledsave_workspaceandload_workspaceto more clearly indicate their job.
- Python
Published by jgostick about 9 years ago
openpnm - Version 1.5
🍏 Major enhancements and changes
- Added two new import classes for importing from iMorph and 3DMA-Rock.
- Now uses dill instead of Python's standard pickle library. This means that custom pore scale models and classes can be saved to "pnm" files.
- Changed the name of the "Controller" object to "Workspace", which more literally describes it's role. "Controller" can still be used for backward compatibility.
- All Network and topology manipulation tools are now found under
Network.toolsalthough they can still be accessed viaUtilities.topologyfor backwards compatibility. - Completely reworked documentation. The 'user guide' now consists of 3 tutorials of varying levels, with the aim that users will know how to use OpenPNM pretty well after completing all three. There is also a separate 'reference' section in the user guide that explains the inner workings of the code in more detail, but users don't have to sift through these to get started anymore.
- All documentation is now hosted on ReadTheDocs, which rebuilds the documentation every time a new commit is pushed to Github. The docs will now always be up-to-date!
- A new parallel repository has been created to house all Examples at https://github.com/PMEAL/OpenPNM-Examples. All the code in this repository is tested against the latest version of OpenPNM on PyPI, so if there are any broken examples we'll know about it. This will remedy the frustration felt by many users when trying to learn OpenPNM by examples. This is also why the Tutorials were created as the main User Guide (see 5 above).
🚀 New features
- Added ability to have spatially varying pore seed values, which is useful for creating porosity distributions or undulations.
- Added new arguments to
num_neighbors. It can now apply set logic (i.e. 'union' and 'intersection') when counting neighbors, and it can now count neighboring throats as well as pores with theelementkeyword (which is 'pores' by default to maintain backwards compatibility). - Object handles are now stored in dicts rather than lists, so you can access them by name (geom.phases['air']) and also iterate on the dict (pn.phases.values()). This was implemented in a backwards compatible way so geom.phases() and geom.phases('air') still work as they used to...of course using the dict syntax is encourage henceforth.
🐛 Minor improvements and bugfixes
- Fixed code coverage reporting on Codecov
- Changed many print statements to logger messages
- Several private methods were removed that were never called by the code
🥇 Acknowledgements
The OpenPNM Developers would like to thank the following people for contributing to this release: - Matthew Stadelman (@stadelmanma) for crafting the iMorph IO class - Masa Prodanovic for help with the 3DMA-Rock import class
- Python
Published by jgostick over 9 years ago
openpnm - Some backend changes to clean up the code
Almost all changes in this minor release are back-end fixes, or were at least implemented in a backwards compatible way. Looking at the length of this list makes me realize that we should be doing minor version bumps more often!
⚠️ API changes (backend)
set_locationswas removed from Core and moved to Base.Tools as a new class. This functionality is now added to GenericGeometry and GenericPhysics via composition, so they still have aset_locationsmethod, but Phase and Network objects do not.- Codecov is now working again
- Test coverage was increased by 2%
- Object handles are now stored in dicts rather than lists, so you can access them by name (
geom.phases['air']) and also iterate on the dict (pn.phases.values()). This was implemented in a backwards compatible way sogeom.phases()andgeom.phases('air')still work as they used to...of course using the dict syntax is encourage henceforth. - Several private methods were removed that were never called by the code
- The
check_network_healthmethod now finds duplicate throats in a more robust and reliable way - Loading simulations from a pnm file now registers objects with the Controller properly
- The tools located under Utilities.topology have been moved to Network.tools, but wrapper methods were left in the old location for backward compatibility.
- Many little tweaks in PR #547
- Changed many print statements to logger messages
- Added a mode argument to
num_neighborsso you can count neighbors that meet given criteria
- Python
Published by jgostick almost 10 years ago
openpnm - Fixed pip install bug
The setup.py had a circular reference to our package leading to it being initialized before being installed. On machines without the necessary dependencies (i.e. new users) this was throwing an import error upon installation.
This update has been pushed to PyPI so all future attempts at pip install openpnm should work.
- Python
Published by jgostick almost 10 years ago
openpnm - Minor bug fixes
Fixed bug in add_boundary_pores that was leading to double addition of throats
Changed code in GenericLinearSolver to prevent Warnings
- Python
Published by jgostick almost 10 years ago
openpnm - Version 1.4
🚀 Enhancements and additions
- Added a new Drainage algorithm with much more functionality than
OrdinaryPercolation. This algorithm was completely overhauled and designed specifically for simulating drainage experiments. - Major upgrade to the Network Importing and Export capabilities, including the ability to export data to a Pandas
DataFrame, and import fromNetworkX.
🚀 New Features
merge_poreswas added to Utilities.topologyadd_boundary_poresandmake_periodic_connectionswere added the Cubic class to provide more power over the process of adding boundary pores compared to theadd_boundariesmethodfind_pathwas added to the Utilities.misc for finding paths between pairs of pores.- Added an Empty network class which accepts
NtandNparguments, so can be used to manually build a network. - Enhanced the
clearmethod on the Core class to provide more control when clearing data from an object.
🍎 Minor improvements
- Improvements to the performance of some methods in
GenericNetwork - Various bug fixes in the
subdividemethod and the linear solver - Added several private
parsemethods to the Core class that help validate inputs to the various methods and provide more helpful error messages. - Altered the
GenericPhysicsclass so that its associated Phase can be changed.
- Python
Published by jgostick almost 10 years ago
openpnm - Version 1.3
This release follows fast on the heels of v1.2. Some valuable changes that were in-progress at during the v1.2 release are now complete. The main upgrades have been in the Delaunay Network generation class, and the related Voronoi Geometry class and related models. These changes center around the use of image analysis to determine pore and throat sizes, and creating a voxelized representation of the solid structure for visualization. A detailed example has been created on the use of the Delaunay-Voronoi class and will be posted to http://openpnm.org. Additionally, this version now has much more extensive test coverage exceeding 80%.
Special thanks to Tom Tranter for his huge efforts on this one, and the rest of the team of course.
- Python
Published by jgostick over 10 years ago
openpnm - Version 1.2.0
⚠️ API changes
- Major Reorganization of the Network topology manipulations methods. There is now a topology class in the Utilities submodule, which houses all manipulation methods such as extend, trim, stitch and so on. Helper/wrapper methods are present on Network objects to maintain backwards compatibility.
- Added a
subdividemethod to the suite of topology manipulation tools, which allows single pores to be divided into many pores to produce hierarchical networks. - New Network methods:
find_nearby_poresandfind_clusters2 - Vastly improved test coverage in the form of adding a unit test framework, TravisCI integration, Coveralls coverage checking, PEP8 compatibility
- Numerous bug fixes
- Python
Published by jgostick over 10 years ago
openpnm - Version 1.1
This release adds some major improvements in the way simulations are saved, the way models are manipulated, and numerous other technical improvements.
🚀 New features
- The Controller class (in Base) now handles all saving and loading, plus a few other tasks as well.
- The
ModelsDictclass has been placed on each Core object under the models attribute. This dict lets users more easily interact and change models. - The
LinearTransportalgorithms now have 'source terms'. A host of generic source terms have been added to the Physics.models library.
- Python
Published by jgostick almost 11 years ago