A Python package for performing pore network modeling of porous media
reflect_base_points
to accept a scale-factor to control number of pointscreate_incidence_matrix
to allow 2*Nt long weightspypardiso
as a hard dependency to suppport ARM64 architecturemerge_pores
which used too many neighbors when finding centroidflatten
on connsinfo
attribute to Network class for quick visualization of key properties #newrelaxation
argument #enhpore_labels
and throat_labels
argments to plot_tutorial
so apply custom labels #enhFaceCenteredCubic
for face-to-face throats #bugpyamg.ruge_stuben_solver
to openpnm.solvers
KeyError
py
from unit testsgeometry
and physics
modulesGeometry
and Physics
objectstopotools
to a new visualization
modulematerials
and metrics
modules in favor of creating detailed examplessolvers
module containing classes that define a generic api for using arbitrary numerical solversintegrators
module containing classes that define the api for transient solversscipy.integrate.ivp_solve
function for transient problemsDemo
network generator which includes geometry models already assigned and ready for instant usetopotools.find_interface_throats
to find throats between two sets of poresSteadyStateSolution
class for storing the results of steady state algorithmsTransientSolution
class for storing results of transient algorithms at each time step, including ability to interpolate between timesparams
attribute to all objects for storing scalar values and constantspn['param.foo']
which looks up values from pn.params['foo']
in a way that works seamlessly with existing pore-scale modelsx
as a property to Transport
classes for easy access to the solved quantitygenerate_voxel_image
to visualization
modulemodels.network
plot_network_jupyter
function to visualization module which creates an interactive visualization using Plotlycontrib
folder/module for putting experimental and beta features, and well as contributions before they are adopted into the main code baseTransientMultiPhysics
class to the contrib
folderplot_network
function based on vispy to contrib
foldersettings
attribute on objects to work more like python's dataclasses
with settings as attributes, while also enforcing their typeScipyCG
to the solvers module (uses scipy.sparse.linalg.cg
)intersecting_cones/pyramids
size factor models, as well as hybrid cones_and_cylinders
which adopt intersecting cones/pyramids as neededcall
method to ModelWrapper
so they can run themselves directly with zero effort by useropenpnm.models.collections
containing dict files of preset models for all sub-classes to simplify instantiationworkspace.settings
_validate_data_health
to account for throats without an assigned conductance modelgetitem
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 firstasmask
argument to neighbor lookup functionsReactiveTransport
ReactiveTransport
to facilitate iterative solvesget_conduit_data
method to Base classAlgorithm
Phase
objects for cleaner tracebacks when autointerpolation is enablestopotools
module into library of functions requiring no openpnm specific classesnumpy
unbuffered
operations in surface area modelsopenpnm.models.misc/phase/physics
modules to keep namespace cleanrelaxation_source
from ReactiveTransportSettings as we no longer apply relaxation to source term__all__
functionality throughout code to control imports of functionsTransport
to put boundary condition functions in a mixinregenerate_models
to work when models lack regen_mode
argumentcache_b
, changed cache_A
to cache
since b is very smallfreeze_models
option from ModelsMixin
utils.misc
Transport
and subclassed algorithms' run methodscipy
's convergence checkerset_label
Bravais
and CubicDual
Base
class into several mixins for more control of inheritance #maintGeometry
and Physics
objects, in favor of Network
and Phase
handling all related data and models directlymodels.topology
to models.network
MixedInvasionPercolation(Coop)
and OrdinaryPercolation
algorithms until they can be better supportedtarget
keyword with network
or phase
throughout all pore-scale models, except ones that are truly generalobj.settings['sources']
to obj[pore.sources']
to be consistent with how boundary conditions are tracked (i.e. alg['pore.bc.rate']
)mode
argument when adding boundary conditionsProject
class to a minimal pseudo-list, with no extraneous methods inherited from list cluttering the namespaceBase2
objects no longer accepts settingsiterative_props
, removed set_variable_props
ModelsMixin
from Algorithm
since algorithms don't typically need modelsDrainage
class in algorithms with more limited scope to replace OrdinaryPercolation
and Porosimetry
nlin_max_iter
from ReactiveTransportSettings
in favor of newton_maxiter
Multiphase
to contrib
folder to indicate it is experimentalrun
method now returns one or more Solution objects inside dictionary named according to the quantity they containnetwork
a mandatory argument on phase
and algorithm
objectstomask
and toindices
to to_mask
and to_indices
since the underscore is the common convention in other packages like pandas
get_domain_area
and get_domain_length
from attributes on transport algorithms to topotools
, for more general usephase
a mandatory argument in algorithms instead of allowing it to be set in settings after the factTransport
since these can be computed by users themselvesSolution
object for returning data from algorithmsSolver
class to handle matrix math which is passed as an argument to run methodsStickAndBall
geometry class (use SpheresAndCylinders
instead)classic_ordinary_diffusion
and classic_hagen_poiseuille
conductance modelssympy
source models and made generic one much easier to usenum_points
argument from Delaunay/Voronoi
classes in favor points=int
spacing
and shape
attribute from Cubic
and moved to topotools
as functionssetup
method from algorithms in favor of adding to settings attribute directlymodels.geometry.pore_area/throat_area
in favour of pore/throat_cross_sectional_area
regenerate_models
on a mixture now first regenerates each componentduplicate_throats
color_by
argument in plot_coordinates/connections
to accept partial list of values if pores/throats specifiedReactiveTransport
's run method to accept instantiated solver, not the class itselflens
and pendular_ring
modelsTransport
to properly check for connected network including connections with boundary conditionssubstituion
throughout the package to make docstrings more consistent