Skip to content

Releases: PMEAL/OpenPNM

v3.4.0

20 Nov 14:30
Compare
Choose a tag to compare
  • 🐛 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

v3.3.0

20 Nov 14:27
Compare
Choose a tag to compare

🍰 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

🔧 Maintenance

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

🐛 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

v3.2.1

01 Sep 13:19
Compare
Choose a tag to compare

🚀 New features

  • Added transient thermal conduction class

🍰 Enhancements

  • Added label_by option to plot_connections and plot_coordinates

🐛 Bugfixes

  • Fixed memory leak
  • Fixed a bug in Transport.rate, which broke when only two throats were present

v3.2.0

25 Jul 04:04
Compare
Choose a tag to compare

🚀 New features

  • Add info attribute to Network class for quick visualization of key properties #new

🍰 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

🔧 Maintenance

  • Better release notes with less clutter #maint

🐛 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

📗 Documentation

  • Lots of little enhancements to our documentation #doc
  • Enhancing application example on simulating MIP #docs

v3.1.2

24 Jul 17:41
Compare
Choose a tag to compare

🚀 New features

  • Added preliminary support for lloyd relaxation in the Voronoi generators

🐛 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

v3.1.1

30 Dec 15:26
Compare
Choose a tag to compare

🐛 Bugfixes

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

v3.1.0

13 Nov 06:52
Compare
Choose a tag to compare

🚀 New features

  • Added wrapper for pyamg.ruge_stuben_solver to openpnm.solvers

🍰 Enhancements

  • Fetching 'pore.source' from an algorithm without any source terms defined returns empty dict instead of KeyError

🔧 Maintenance

  • Removed the use of py from unit tests
  • Switched CI linter from pycodestyle to flake8
  • Fixed numerous style errors throughout to satisfy flake8

📗 Documentation

  • Enhanced some example notebooks, added a new notebook on managing clustered networks

v3.0.0

12 Oct 16:45
Compare
Choose a tag to compare

🎆 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

🚀 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

🍰 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

🔧 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

⚠️ 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
    ...
Read more

v2.8.2

08 Sep 15:23
Compare
Choose a tag to compare

🐛 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

v2.8.1

09 Aug 15:54
Compare
Choose a tag to compare

🔧 Maintenance

  • Improving error checking in snow2 test #maint