Releases: PMEAL/OpenPNM
Releases · PMEAL/OpenPNM
v3.4.0
v3.3.0
🍰 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
🚀 New features
- Added transient thermal conduction class
🍰 Enhancements
- Added
label_by
option toplot_connections
andplot_coordinates
🐛 Bugfixes
- Fixed memory leak
- Fixed a bug in
Transport.rate
, which broke when only two throats were present
v3.2.0
🚀 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
andthroat_labels
argments toplot_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
🚀 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
🐛 Bugfixes
- Fixed center-to-center throat length helper model to always return an array
v3.1.0
🚀 New features
- Added wrapper for
pyamg.ruge_stuben_solver
toopenpnm.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
🎆 Major Changes
- Removed
geometry
andphysics
modules - Removed use of
Geometry
andPhysics
objects - Moved plot functions from
topotools
to a newvisualization
module - Removed
materials
andmetrics
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 frompn.params['foo']
in a way that works seamlessly with existing pore-scale models - Added
x
as a property toTransport
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
tovisualization
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 thecontrib
folder - Added new
plot_network
function based on vispy tocontrib
folder - Revised the
settings
attribute on objects to work more like python'sdataclasses
with settings as attributes, while also enforcing their type
🍰 Enhancements
- Adopted rich package for formatting logger messages
- Added
ScipyCG
to the solvers module (usesscipy.sparse.linalg.cg
) - Added
intersecting_cones/pyramids
size factor models, as well as hybridcones_and_cylinders
which adopt intersecting cones/pyramids as needed - Re-implemented the percolation algorithms for better consistency between them
- Added
call
method toModelWrapper
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 lackregen_mode
argument - Removed
cache_b
, changedcache_A
tocache
since b is very small - Removed numba deprecation warning
- Updated list of rules to be ignored by flake8 style check
- Removed
freeze_models
option fromModelsMixin
- 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
andCubicDual
- Broke up
Base
class into several mixins for more control of inheritance #maint
⚠️ API changes
- Complete removal of
Geometry
andPhysics
objects, in favor ofNetwork
andPhase
handling all related data and models directly - Renamed
models.topology
tomodels.network
- Removed PETSc solver wrapper (needs to be revisited)
- Removed
MixedInvasionPercolation(Coop)
andOrdinaryPercolation
algorithms until they can be better supported - Replaced
target
keyword withnetwork
orphase
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']
toobj[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
, removedset_variable_props
- Removed
ModelsMixin
fromAlgorithm
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 replaceOrdinaryPercolation
andPorosimetry
- Removed
nlin_max_iter
fromReactiveTransportSettings
in favor ofnewton_maxiter
- Move
Multiphase
tocontrib
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 onphase
andalgorithm
objects - Renamed
tomask
andtoindices
toto_mask
andto_indices
since the underscore is the common convention in other packages likepandas
- Moved
get_domain_area
andget_domain_length
from attributes on transport algorithms totopotools
, 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 (useSpheresAndCylinders
instead) - Removed
classic_ordinary_diffusion
andclassic_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
...
v2.8.2
🐛 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
🔧 Maintenance
- Improving error checking in snow2 test #maint