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 isoutside function, and passing f to reflect_basepoints
  • Fixed use of matplotlib's docstring substitution helper 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_points to accept a scale-factor to control number of points
  • Performing Delaunay triangulation in delaunay_voronoi_dual is now optional
  • Enhanced create_incidence_matrix to allow 2*Nt long weights

:wrench: Maintenance

  • Removed pypardiso as a hard dependency to suppport ARM64 architecture
  • Updated use of matplotlib's docstring module for their new deprecation

:bug: Bugfixes

  • Fixed bug in merge_pores which used too many neighbors when finding centroid
  • Fixed bug in pore surface area models due to incorrect use of flatten on 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_by option to plot_connections and plot_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 info attribute to Network class for quick visualization of key properties #new # :cake: Enhancements
  • Enhanced Voronoi generators to accept a relaxation argument #enh
  • Add pore_labels and throat_labels argments to plot_tutorial so 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 FaceCenteredCubic for 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.1

:bug: Bugfixes

  • Fixed center-to-center throat length helper model to always return an array

- Python
Published by github-actions[bot] about 3 years ago

openpnm - v3.1.0

:rocket: New features

  • Added wrapper for pyamg.ruge_stuben_solver to openpnm.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 py from 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 geometry and physics modules
  • Removed use of Geometry and Physics objects
  • Moved plot functions from topotools to a new visualization module
  • Removed materials and metrics modules in favor of creating detailed examples
  • Removed the term Generic from all class names to improve readability #api

:rocket: New features

  • Added a solvers module containing classes that define a generic api for using arbitrary numerical solvers
  • Added an integrators module containing classes that define the api for transient solvers
  • Added a wrapper to leverage the scipy.integrate.ivp_solve function for transient problems
  • Added Demo network 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_throats to find throats between two sets of pores
  • Added SteadyStateSolution class for storing the results of steady state algorithms
  • Added TransientSolution class 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 params attribute to all objects for storing scalar values and constants
  • Added support to the dictionary objects for pn['param.foo'] which looks up values from pn.params['foo'] in a way that works seamlessly with existing pore-scale models
  • Added x as a property to Transport classes 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_image to visualization module
  • Added a set of pore-scale topology models under models.network
  • Added plot_network_jupyter function to visualization module which creates an interactive visualization using Plotly
  • Created a contrib folder/module for putting experimental and beta features, and well as contributions before they are adopted into the main code base
  • Added TransientMultiPhysics class to the contrib folder
  • Added new plot_network function based on vispy to contrib folder
  • Revised the settings attribute on objects to work more like python's dataclasses with settings as attributes, while also enforcing their type

:cake: Enhancements

  • Adopted rich package for formatting logger messages
  • Added ScipyCG to the solvers module (uses scipy.sparse.linalg.cg)
  • Added intersecting_cones/pyramids size factor models, as well as hybrid cones_and_cylinders which adopt intersecting cones/pyramids as needed
  • Re-implemented the percolation algorithms for better consistency between them
  • Added call method to ModelWrapper so they can run themselves directly with zero effort by user
  • Enhanced BV formulations to allow variable number of electrons
  • Created openpnm.models.collections containing dict files of preset models for all sub-classes to simplify instantiation
  • Allowed setting of default solver in the workspace.settings
  • Enhance _validate_data_health to account for throats without an assigned conductance model
  • Augmented getitem on 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 asmask argument 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 ReactiveTransport to 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_data method 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 Phase objects for cleaner tracebacks when autointerpolation is enables
  • Major refactor of topotools module 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 numpy unbuffered operations in surface area models
  • Reorganized openpnm.models.misc/phase/physics modules to keep namespace clean
  • Removed relaxation_source from 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 Transport to put boundary condition functions in a mixin
  • Added unit tests for Salome, COMSOL, and STL I/O classes
  • Changed regenerate_models to work when models lack regen_mode argument
  • Removed cache_b, changed cache_A to cache since b is very small
  • Removed numba deprecation warning
  • Updated list of rules to be ignored by flake8 style check
  • Removed freeze_models option from ModelsMixin
  • Deleted many unused functions from utils.misc
  • Added style check workflow to actions
  • Refactor Transport and subclassed algorithms' run method
  • Switched to scipy's convergence checker
  • Refactor of set_label
  • Removed "internal" label from Bravais and CubicDual
  • Broke up Base class into several mixins for more control of inheritance #maint

:warning: API changes

  • Complete removal of Geometry and Physics objects, in favor of Network and Phase handling all related data and models directly
  • Renamed models.topology to models.network
  • Removed PETSc solver wrapper (needs to be revisited)
  • Removed MixedInvasionPercolation(Coop) and OrdinaryPercolation algorithms until they can be better supported
  • Replaced target keyword with network or phase throughout 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'] to obj[pore.sources'] to be consistent with how boundary conditions are tracked (i.e. alg['pore.bc.rate'])
  • Changed the behavior of the mode argument when adding boundary conditions
  • Converted the Project class to a minimal pseudo-list, with no extraneous methods inherited from list cluttering the namespace
  • Initialization of Base2 objects no longer accepts settings
  • Exposed iterative_props, removed set_variable_props
  • Removed ModelsMixin from Algorithm since algorithms don't typically need models
  • Removed prefix and name from settings
  • Refined the Butler-Volmer model formulations to match Newman's book
  • Created Drainage class in algorithms with more limited scope to replace OrdinaryPercolation and Porosimetry
  • Removed nlin_max_iter from ReactiveTransportSettings in favor of newton_maxiter
  • Move Multiphase to contrib folder to indicate it is experimental
  • Transport algorithms' run method now returns one or more Solution objects inside dictionary named according to the quantity they contain
  • Made network a mandatory argument on phase and algorithm objects
  • Renamed tomask and toindices to to_mask and to_indices since the underscore is the common convention in other packages like pandas
  • Moved get_domain_area and get_domain_length from attributes on transport algorithms to topotools, for more general use
  • Made phase a 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 Transport since these can be computed by users themselves
  • Complete rewrite/redesign of linear solvers and transient algorithms
  • Added a Solution object for returning data from algorithms
  • Added a Solver class to handle matrix math which is passed as an argument to run methods
  • Removed StickAndBall geometry class (use SpheresAndCylinders instead)
  • Removed classic_ordinary_diffusion and classic_hagen_poiseuille conductance models
  • Refactored conductance models to work with size factors rather than shape factors
  • Removed redundant sympy source models and made generic one much easier to use
  • Removed num_points argument from Delaunay/Voronoi classes in favor points=int
  • Removed spacing and shape attribute from Cubic and moved to topotools as functions
  • Removed setup method from algorithms in favor of adding to settings attribute directly
  • Deprecated models.geometry.pore_area/throat_area in favour of pore/throat_cross_sectional_area

:bug: Bugfixes

  • Calling regenerate_models on a mixture now first regenerates each component
  • Fixed a critical bug in duplicate_throats
  • Fixed color_by argument in plot_coordinates/connections to 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 lens and pendular_ring models
  • Fixed bug in Transport to 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 substituion throughout 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.1

:wrench: Maintenance

  • Improving error checking in snow2 test #maint

- 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 openmpi as 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_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 to set_source method

:cake: 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

: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 trim if 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_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 accepts total_rate, which is equally distributed among pores
  • Added name to settings
  • 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_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 and plot_coords

:wrench: Maintenence

  • Improved the boundary condition setters to prevent invalid combinations
  • Changed _get_solver behavior to fall back to spsolve 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

: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.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

: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.2

:bug: Bugfixes

  • Fixed bug in interleave_data that inferred incorrect datatypes in some instances

- Python
Published by github-actions[bot] over 5 years ago

openpnm - v2.4.1

:bug: Bugfixes

  • Fixed caching/uncaching of A matrix to work with all sub-classed transport algorithms, not just ReactiveTransport

- 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_coordinates plot_connections method
  • 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 by pip).
  • 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 network to a top level module (topotools) to make it easier to access and more prominent
  • A Project class has been added, that acts as a container for a given pore network simulation, such that the Workspace is populated with a collection of Projects, 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 Project class has a grid method that can help to organize and visualize these associations.

- Python
Published by jgostick over 7 years ago

openpnm - Version 2, Beta-2

- 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 - Deploying to PyPI

- Python
Published by jgostick about 9 years ago

openpnm - Version 1.6

🚀 New features

  • Two new Network classes have been added that support Dual networks
    • CubicDual creates 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.
    • DelaunayVoronoiDual is motivated by the same idea as the CubicDual, 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_coordinates and plot_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.tools
    • template_disc_ring creates a circular template for use in Cubic
    • generate_base_points generates random points for use in Delaunay and DelaunayVoronoiDual
  • A new pore-scale model called largest_sphere was added to Geometry.models that 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.tools called find_surface_pores.

⚠️ API changes

  • add_boundaries now 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 save and load methods of the Workspace class are now called save_workspace and load_workspace to 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.tools although they can still be accessed via Utilities.topology for 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 the element keyword (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_locations was 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 a set_locations method, 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 so geom.phases() and geom.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_health method 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_neighbors so 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 from NetworkX.

🚀 New Features

  • merge_pores was added to Utilities.topology
  • add_boundary_pores and make_periodic_connections were added the Cubic class to provide more power over the process of adding boundary pores compared to the add_boundaries method
  • find_path was added to the Utilities.misc for finding paths between pairs of pores.
  • Added an Empty network class which accepts Nt and Np arguments, so can be used to manually build a network.
  • Enhanced the clear method 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 subdivide method and the linear solver
  • Added several private parse methods to the Core class that help validate inputs to the various methods and provide more helpful error messages.
  • Altered the GenericPhysics class 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 subdivide method 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_pores and find_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 ModelsDict class has been placed on each Core object under the models attribute. This dict lets users more easily interact and change models.
  • The LinearTransport algorithms 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