class Porosimetry(*args, **kwargs)[source]

Bases: openpnm.algorithms.OrdinaryPercolation.OrdinaryPercolation

Simulates mercury instrustion porosimetry using ordinary percolation

  • network (OpenPNM Network object) – The Network upon which this simulation should be run

  • name (string, optional) – An identifying name for the object. If none is given then one is generated.

  • project (OpenPNM Project object) – Either a Network or a Project must be specified


Mercury intrusion progresses by applying increasing pressures to the invading mercury phase, and measuring the resultant volume of invading fluid. This corresponds directly to an ordinary percolation process, with access limitations enabled.

run(points=25, start=None, stop=None)[source]

Runs the percolation algorithm to determine which pores and throats will be invaded at each given pressure point.

  • points (int or array_like) – An array containing the pressure points to apply. If a scalar is given then an array will be generated with the given number of points spaced between the lowest and highest values of throat entry pressures using logarithmic spacing. To specify low and high pressure points use the start and stop arguments.

  • start (int) – The optional starting point to use when generating pressure points. If not given the half the lowest capillary entry pressure in the network is used.

  • stop (int) – The optional stopping point to use when generating pressure points. If not given, then twice the highest capillary entry pressure in the network is used.


The inlet sites are set to invaded to start the simulation. This means that if ‘internal’ pores are used as inlets the capillary pressure curve will begin at a non-zero invading phase saturation. To avoid this either set the inlet pore volumes to zero or add boundary pores to the inlet face, and set their volumes to zero.


Define which pore filling model to apply.


propname (string) – Dictionary key on the physics object(s) containing the pore filling model(s) to apply.


It is assumed that these models are functions of the quantity specified in the algorithms settings. This values is applied to the corresponding phase just prior to regenerating the given pore-scale model(s).

setup(phase=None, quantity='', throat_entry_pressure='', pore_volume='', throat_volume='', late_pore_filling='', late_throat_filling='')[source]

Used to specify necessary arguments to the simulation. This method is useful for resetting the algorithm or applying more explicit control.

  • phase (OpenPNM Phase object) – The Phase object containing the physical properties of the invading fluid.

  • quantity (string) – The name of the quantity calculated by this algorithm. This is used for instance, by the late pore and throat filling models to indicate the prevailing fluid pressure in the invading phase for calculating the extent of filling. The default is ‘pressure’. Note that there is no need to specify ‘pore’ and/or ‘throat’ with this as the given value will apply to both.

  • throat_entry_pressure (string) – The dictionary key on the Phase object where the throat entry pressure values are stored. The default is ‘throat.entry_pressure’.

  • pore_volume (string) – The dictionary key containing the pore volume information. The default is ‘pore.volume’.

  • throat_volume (string) – The dictionary key containing the throat volume information. The default is ‘throat.volume’.

  • pore_partial_filling (string) – The name of the model used to determine partial pore filling as a function of applied pressure.

  • throat_partial_filling (string) – The name of the model used to determine partial throat filling as a function of applied pressure.