# Particle Size Distributions (fluids.particle_size_distribution)

This module contains particle distribution characterization, fitting, interpolating, and manipulation functions. It may be used with discrete particle size distributions, or with statistical ones with parameters specified.

For reporting bugs, adding feature requests, or submitting pull requests, please use the GitHub issue tracker or contact the author at Caleb.Andrew.Bell@gmail.com.

## Particle Size Distribution Base Class

class fluids.particle_size_distribution.ParticleSizeDistributionContinuous

  Base class representing a continuous particle size distribution specified by a mathematical/statistical function. This class holds the common methods only.

  Notes

  Although the stated units of input are in meters, this class is actually independent of the units provided; all results will be consistent with the provided unit.

  References

  [1]

  ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle Sizes/Diameters and Moments from Particle Size Distributions.

  Examples

  Example problem from [1].

      >>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6)

  Attributes:
    `vssa`

      The volume-specific surface area of a particle size distribution.

  Methods

  `cdf`(d[, n]) | Computes the cumulative distribution density function of a continuous particle size distribution at a specified particle diameter, an optionally in a specified basis.
  `cdf_discrete`(ds[, n]) | Computes the cumulative distribution functions for a list of specified particle diameters.
  `delta_cdf`(d_min, d_max[, n]) | Computes the difference in cumulative distribution function between two particle size diameters.
  `dn`(fraction[, n]) | Computes the diameter at which a specified fraction of the distribution falls under.
  `ds_discrete`([d_min, d_max, pts, limit, method]) | Create a particle spacing mesh to perform calculations with, according to one of several ways.
  `fractions_discrete`(ds[, n]) | Computes the fractions of the cumulative distribution functions which lie between the specified specified particle diameters.
  `mean_size`(p, q) | Calculates the mean particle size according to moment-ratio notation.
  `mean_size_ISO`(k, r) | Calculates the mean particle size according to moment notation (ISO).
  `pdf`(d[, n]) | Computes the probability density function of a continuous particle size distribution at a specified particle diameter, an optionally in a specified basis.
  `plot_cdf`([n, d_min, d_max, pts, method]) | Plot the cumulative distribution function of the particle size distribution.
  `plot_pdf`([n, d_min, d_max, pts, normalized, ...]) | Plot the probability density function of the particle size distribution.

  cdf(d, n=None)

    Computes the cumulative distribution density function of a continuous particle size distribution at a specified particle diameter, an optionally in a specified basis. The evaluation function varies with the distribution chosen.

    \[Q_n(d) = \int_0^d q_n(d)\]
    Parameters:
      d `python:float`

        Particle size diameter, [m]

      n `python:int`, `optional`

        None (for the order specified when the distribution was created), 0 (number), 1 (length), 2 (area), 3 (volume/mass), or any integer, [-]

    Returns:
      cdf `python:float`

        The cumulative distribution function at the specified diameter and order, [-]

    Notes

    Analytical integrals can be found for most distributions even when order conversions are necessary.

    Examples

        >>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6, order=3)
        >>> [psd.cdf(5e-6, n) for n in range(4)]
        [0.933192798731, 0.8413447460685, 0.6914624612740, 0.5]

  cdf_discrete(ds, n=None)

    Computes the cumulative distribution functions for a list of specified particle diameters.

    Parameters:
      ds `python:list`[`python:float`]

        Particle size diameters, [m]

      n `python:int`, `optional`

        None (for the order specified when the distribution was created), 0 (number), 1 (length), 2 (area), 3 (volume/mass), or any integer, [-]

    Returns:
      cdfs `python:float`

        The cumulative distribution functions at the specified diameters and order, [-]

    Examples

        >>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6, order=3)
        >>> psd.cdf_discrete([1e-6, 1e-5, 1e-4, 1e-3])
        [0.000643471012913, 0.917171480998, 0.999999998960, 1.0]

  delta_cdf(d_min, d_max, n=None)

    Computes the difference in cumulative distribution function between two particle size diameters.

    \[\Delta Q_n = Q_n(d_{max}) - Q_n(d_{min})\]
    Parameters:
      d_min `python:float`

        Lower particle size diameter, [m]

      d_max `python:float`

        Upper particle size diameter, [m]

      n `python:int`, `optional`

        None (for the order specified when the distribution was created), 0 (number), 1 (length), 2 (area), 3 (volume/mass), or any integer, [-]

    Returns:
      delta_cdf `python:float`

        The difference in the cumulative distribution function for the two diameters specified, [-]

    Examples

        >>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6, order=3)
        >>> psd.delta_cdf(1e-6, 1e-5)
        0.9165280099853876

  dn(fraction, n=None)

    Computes the diameter at which a specified fraction of the distribution falls under. Utilizes a bounded solver to search for the desired diameter.

    Parameters:
      fraction `python:float`

        Fraction of the distribution which should be under the calculated diameter, [-]

      n `python:int`, `optional`

        None (for the order specified when the distribution was created), 0 (number), 1 (length), 2 (area), 3 (volume/mass), or any integer, [-]

    Returns:
      d `python:float`

        Particle size diameter, [m]

    Examples

        >>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6, order=3)
        >>> psd.dn(.5)
        5e-06
        >>> psd.dn(1)
        0.0002947436533523378
        >>> psd.dn(0)
        0.0

  ds_discrete(d_min=None, d_max=None, pts=20, limit=1e-09, method='logarithmic')

    Create a particle spacing mesh to perform calculations with, according to one of several ways. The allowable meshes are ‘linear’, ‘logarithmic’, a geometric series specified by a Renard number such as ‘R10’, or the meshes available in one of several sieve standards.

    Parameters:
      d_min `python:float`, `optional`

        The minimum diameter at which the mesh starts, [m]

      d_max `python:float`, `optional`

        The maximum diameter at which the mesh ends, [m]

      pts `python:int`, `optional`

        The number of points to return for the mesh (note this is not respected by sieve meshes), [-]

      limit `python:float`

        If d_min or d_max is not specified, it will be calculated as the dn at which this limit or 1-limit exists (this is ignored for Renard numbers), [-]

      method `python:str`, `optional`

        Either ‘linear’, ‘logarithmic’, a Renard number like ‘R10’ or ‘R5’ or’R2.5’, or one of the sieve standards ‘ISO 3310-1 R40/3’, ‘ISO 3310-1 R20’, ‘ISO 3310-1 R20/3’, ‘ISO 3310-1’, ‘ISO 3310-1 R10’, ‘ASTM E11’, [-]

    Returns:
      ds `python:list`[`python:float`]

        The generated mesh diameters, [m]

    Notes

    Note that when specifying a Renard series, only one of d_min or d_max can be respected! Provide only one of those numbers.

    Note that when specifying a sieve standard the number of points is not respected!

    References

    [1]

    ASTM E11 - 17 - Standard Specification for Woven Wire Test Sieve Cloth and Test Sieves.

    [2]

    ISO 3310-1:2016 - Test Sieves – Technical Requirements and Testing – Part 1: Test Sieves of Metal Wire Cloth.

  fractions_discrete(ds, n=None)

    Computes the fractions of the cumulative distribution functions which lie between the specified specified particle diameters. The first diameter contains the cdf from 0 to it.

    Parameters:
      ds `python:list`[`python:float`]

        Particle size diameters, [m]

      n `python:int`, `optional`

        None (for the order specified when the distribution was created), 0 (number), 1 (length), 2 (area), 3 (volume/mass), or any integer, [-]

    Returns:
      fractions `python:float`

        The differences in the cumulative distribution functions at the specified diameters and order, [-]

    Examples

        >>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6, order=3)
        >>> psd.fractions_discrete([1e-6, 1e-5, 1e-4, 1e-3])
        [0.00064347101291, 0.916528009985, 0.0828285179619, 1.039798e-09]

  mean_size(p, q)

    Calculates the mean particle size according to moment-ratio notation. This is the more common and often convenient definition.

    \[ \begin{align}\begin{aligned}\left[\bar D_{p,q} \right]^{(p-q)} = \frac{\sum_i n_i D_i^p } {\sum_i n_i D_i^q}\\\left[\bar D_{p,p} \right] = \exp\left[\frac{\sum_i n_i D_i^p\ln D_i }{\sum_i n_i D_i^p}\right] \text{, if p = q}\end{aligned}\end{align} \]

    Note that \(n_i\) in the above equation is replaceable with the fraction of particles in that bin.

    Parameters:
      p `python:int`

        Power and/or subscript of D moment in the above equations, [-]

      q `python:int`

        Power and/or subscript of D moment in the above equations, [-]

    Returns:
      d_pq `python:float`

        Mean particle size according to the specified p and q, [m]

    Notes

    The following is a list of common names for specific mean diameters.

    - D[-3, 0]: arithmetic harmonic mean volume diameter

    - D[-2, 1]: size-weighted harmonic mean volume diameter

    - D[-1, 2]: area-weighted harmonic mean volume diameter

    - D[-2, 0]: arithmetic harmonic mean area diameter

    - D[-1, 1]: size-weighted harmonic mean area diameter

    - D[-1, 0]: arithmetic harmonic mean diameter

    - D[0, 0]: arithmetic geometric mean diameter

    - D[1, 1]: size-weighted geometric mean diameter

    - D[2, 2]: area-weighted geometric mean diameter

    - D[3, 3]: volume-weighted geometric mean diameter

    - D[1, 0]: arithmetic mean diameter

    - D[2, 1]: size-weighted mean diameter

    - D[3, 2]: area-weighted mean diameter, Sauter mean diameter

    - D[4, 3]: volume-weighted mean diameter, De Brouckere diameter

    - D[2, 0]: arithmetic mean area diameter

    - D[3, 1]: size-weighted mean area diameter

    - D[4, 2]: area-weighted mean area diameter

    - D[5, 3]: volume-weighted mean area diameter

    - D[3, 0]: arithmetic mean volume diameter

    - D[4, 1]: size-weighted mean volume diameter

    - D[5, 2]: area-weighted mean volume diameter

    - D[6, 3]: volume-weighted mean volume diameter

    This notation was first introduced in [1].

    The sum of p and q is called the order of the mean size [3].

    \[\bar D_{p,q} \equiv \bar D_{q, p}\]

    References

    [1]

    Mugele, R. A., and H. D. Evans. “Droplet Size Distribution in Sprays.” Industrial & Engineering Chemistry 43, no. 6 (June 1951): 1317-24. https://doi.org/10.1021/ie50498a023.

    [2]

    ASTM E799 - 03(2015) - Standard Practice for Determining Data Criteria and Processing for Liquid Drop Size Analysis.

    [3]

    ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle Sizes/Diameters and Moments from Particle Size Distributions.

    Examples

        >>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6)
        >>> psd.mean_size(3, 2)
        4.412484512922977e-06

    Note that for the case where p == q, a different set of formulas are required - which do not have analytical results for many distributions. Therefore, a close numerical approximation is used instead, to perturb the values of p and q so they are 1E-9 away from each other. This leads only to slight errors, as in the example below where the correct answer is 5E-6.

        >>> psd.mean_size(3, 3)
        4.9999999304923345e-06

  mean_size_ISO(k, r)

    Calculates the mean particle size according to moment notation (ISO). This system is related to the moment-ratio notation as follows; see the mean_size method for the full formulas.

    \[\bar x_{p-q, q} \equiv \bar x_{k+r, r} \equiv \bar D_{p,q}\]
    Parameters:
      k `python:int`

        Power and/or subscript of D moment in the above equations, [-]

      r `python:int`

        Power and/or subscript of D moment in the above equations, [-]

    Returns:
      x_kr `python:float`

        Mean particle size according to the specified k and r in the ISO series, [m]

    Notes

    The following is a list of common names for specific mean diameters in the ISO naming convention.

    - x[-3, 0]: arithmetic harmonic mean volume diameter

    - x[-3, 1]: size-weighted harmonic mean volume diameter

    - x[-3, 2]: area-weighted harmonic mean volume diameter

    - x[-2, 0]: arithmetic harmonic mean area diameter

    - x[-2, 1]: size-weighted harmonic mean area diameter

    - x[-1, 0]: arithmetic harmonic mean diameter

    - x[0, 0]: arithmetic geometric mean diameter

    - x[0, 1]: size-weighted geometric mean diameter

    - x[0, 2]: area-weighted geometric mean diameter

    - x[0, 3]: volume-weighted geometric mean diameter

    - x[1, 0]: arithmetic mean diameter

    - x[1, 1]: size-weighted mean diameter

    - x[1, 2]: area-weighted mean diameter, Sauter mean diameter

    - x[1, 3]: volume-weighted mean diameter, De Brouckere diameter

    - x[2, 0]: arithmetic mean area diameter

    - x[1, 1]: size-weighted mean area diameter

    - x[2, 2]: area-weighted mean area diameter

    - x[2, 3]: volume-weighted mean area diameter

    - x[3, 0]: arithmetic mean volume diameter

    - x[3, 1]: size-weighted mean volume diameter

    - x[3, 2]: area-weighted mean volume diameter

    - x[3, 3]: volume-weighted mean volume diameter

    When working with continuous distributions, the ISO series must be used to perform the actual calculations.

    References

    [1]

    ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle Sizes/Diameters and Moments from Particle Size Distributions.

    Examples

        >>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6)
        >>> psd.mean_size_ISO(1, 2)
        4.412484512922977e-06

  pdf(d, n=None)

    Computes the probability density function of a continuous particle size distribution at a specified particle diameter, an optionally in a specified basis. The evaluation function varies with the distribution chosen. The interconversion between distribution orders is performed using the following formula [1]:

    \[q_s(d) = \frac{x^{(s-r)} q_r(d) dd} { \int_0^\infty d^{(s-r)} q_r(d) dd}\]
    Parameters:
      d `python:float`

        Particle size diameter, [m]

      n `python:int`, `optional`

        None (for the order specified when the distribution was created), 0 (number), 1 (length), 2 (area), 3 (volume/mass), or any integer, [-]

    Returns:
      pdf `python:float`

        The probability density function at the specified diameter and order, [-]

    Notes

    The pdf order conversions are typically available analytically after some work. They have been verified numerically. See the various functions with names ending with ‘basis_integral’ for the formulations. The distributions normally do not have analytical limits for diameters of 0 or infinity, but large values suffice to capture the area of the integral.

    References

    [1]

    Masuda, Hiroaki, Ko Higashitani, and Hideto Yoshida. Powder Technology: Fundamentals of Particles, Powder Beds, and Particle Generation. CRC Press, 2006.

    Examples

        >>> psd = PSDLognormal(s=0.5, d_characteristic=5E-6, order=3)
        >>> psd.pdf(1e-5)
        30522.765209509154
        >>> psd.pdf(1e-5, n=3)
        30522.765209509154
        >>> psd.pdf(1e-5, n=0)
        1238.661379483343

  plot_cdf(n=(0, 1, 2, 3), d_min=None, d_max=None, pts=500, method='logarithmic')

    Plot the cumulative distribution function of the particle size distribution. The plotted range can be specified using d_min and d_max, or estimated automatically. One or more order can be plotted, by providing an iterable of ints as the value of n or just one int.

    Parameters:
      n `python:tuple`(`python:int`) `or` `python:int`, `optional`

        None (for the order specified when the distribution was created), 0 (number), 1 (length), 2 (area), 3 (volume/mass), or any integer; as many as desired may be specified, [-]

      d_min `python:float`, `optional`

        Lower particle size diameter, [m]

      d_max `python:float`, `optional`

        Upper particle size diameter, [m]

      pts `python:int`, `optional`

        The number of points for values to be calculated, [-]

      method `python:str`, `optional`

        Either ‘linear’, ‘logarithmic’, a Renard number like ‘R10’ or ‘R5’ or’R2.5’, or one of the sieve standards ‘ISO 3310-1 R40/3’, ‘ISO 3310-1 R20’, ‘ISO 3310-1 R20/3’, ‘ISO 3310-1’, ‘ISO 3310-1 R10’, ‘ASTM E11’, [-]

  plot_pdf(n=(0, 1, 2, 3), d_min=None, d_max=None, pts=500, normalized=False, method='linear')

    Plot the probability density function of the particle size distribution. The plotted range can be specified using d_min and d_max, or estimated automatically. One or more order can be plotted, by providing an iterable of ints as the value of n or just one int.

    Parameters:
      n `python:tuple`(`python:int`) `or` `python:int`, `optional`

        None (for the order specified when the distribution was created), 0 (number), 1 (length), 2 (area), 3 (volume/mass), or any integer; as many as desired may be specified, [-]

      d_min `python:float`, `optional`

        Lower particle size diameter, [m]

      d_max `python:float`, `optional`

        Upper particle size diameter, [m]

      pts `python:int`, `optional`

        The number of points for values to be calculated, [-]

      normalized bool, `optional`

        Whether to display the actual probability density function, which may have a huge magnitude - or to divide each point by the sum of all the points. Doing this is a common practice, but the values at each point are dependent on the number of points being plotted, and the distribution of the points; [-]

      method `python:str`, `optional`

        Either ‘linear’, ‘logarithmic’, a Renard number like ‘R10’ or ‘R5’ or’R2.5’, or one of the sieve standards ‘ISO 3310-1 R40/3’, ‘ISO 3310-1 R20’, ‘ISO 3310-1 R20/3’, ‘ISO 3310-1’, ‘ISO 3310-1 R10’, ‘ASTM E11’, [-]

  property vssa

    The volume-specific surface area of a particle size distribution.

    \[\text{VSSA} = \frac{6}{\bar x_{1,2}}\]
    Returns:
      VSSA `python:float`

        The volume-specific surface area of the distribution, [m^2/m^3]

    References

    [1]

    ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle Sizes/Diameters and Moments from Particle Size Distributions.

    Examples

        >>> PSDLognormal(s=0.5, d_characteristic=5E-6).vssa
        1359778.1436801916

## Discrete Particle Size Distributions

class fluids.particle_size_distribution.ParticleSizeDistribution(ds, fractions, cdf=False, order=3, monotonic=True)

  Class representing a discrete particle size distribution specified by a series of diameter bins, and the quantity of particles in each bin. The quantities may be specified as either the fraction of particles in each bin, or as cumulative distributions. The input fractions can be specified to be in a mass basis (order=3), number basis (order=0), or the orders in between for length basis or area basis. If the fractions do not sum to 1, and cdf is False, then the fractions are normalized. This allows flow rates or counts of size bins to be given as well.

  Parameters:
    ds `python:list`[`python:float`]

      Diameter bins; length of the specified quantities, optionally +1 that length to specify a cutoff diameter for the smallest diameter bin, [m]

    fractions `python:list`[`python:float`], `optional`

      The mass/mole/volume/length/area/count fractions or cumulative distributions or counts of each particle size in each diameter bin (the type is specified by order), [-]

    order `python:int`, `optional`

      0 for a number distribution as input; 1 for length distribution; 2 for area distribution; 3 for mass, mole, or volume distribution, [-]

    cdf bool, `optional`

      If the distribution is given as increasing fractions with 1 as the last result, cdf must be set to True, [-]

    monotonic bool, `optional`

      If True, for interpolated quanties, monotonic splines will be used instead of the standard splines, [-]

  Notes

  Although the stated units of input are in meters, this class is actually independent of the units provided; all results will be consistent with the provided unit.

  References

  [1]

  ASTM E799 - 03(2015) - Standard Practice for Determining Data Criteria and Processing for Liquid Drop Size Analysis.

  [2]

  ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle Sizes/Diameters and Moments from Particle Size Distributions.

  Examples

  Example problem from [1], calculating several diameters and the cumulative distribution.

      >>> import numpy as np
      >>> ds = 1E-6*np.array([240, 360, 450, 562.5, 703, 878, 1097, 1371, 1713, 2141, 2676, 3345, 4181, 5226, 6532])
      >>> numbers = [65, 119, 232, 410, 629, 849, 990, 981, 825, 579, 297, 111, 21, 1]
      >>> psd = ParticleSizeDistribution(ds=ds, fractions=numbers, order=0)
      >>> psd
      <Particle Size Distribution, points=14, D[3, 3]=0.002451 m>

  Attributes:
    fractions `python:list`[`python:float`]

      The mass/mole/volume basis fractions of particles in each bin, [-]

    area_fractions `python:list`[`python:float`]

      The area fractions of particles in each bin, [-]

    length_fractions `python:list`[`python:float`]

      The length fractions of particles in each bin, [-]

    number_fractions `python:list`[`python:float`]

      The number fractions of particles in each bin, [-]

    fraction_cdf `python:list`[`python:float`]

      The cumulative mass/mole/volume basis fractions of particles in each bin, [-]

    area_cdf `python:list`[`python:float`]

      The cumulative area fractions of particles in each bin, [-]

    length_cdf `python:list`[`python:float`]

      The cumulative length fractions of particles in each bin, [-]

    number_cdf `python:list`[`python:float`]

      The cumulative number fractions of particles in each bin, [-]

    size_classes bool

      Whether or not the diameter bins were set as size classes (as length of fractions + 1), [-]

    N `python:int`

      The number of provided points, [-]

  Methods

  `cdf`(d[, n]) | Computes the cumulative distribution density function of a continuous particle size distribution at a specified particle diameter, an optionally in a specified basis.
  `cdf_discrete`(ds[, n]) | Computes the cumulative distribution functions for a list of specified particle diameters.
  `delta_cdf`(d_min, d_max[, n]) | Computes the difference in cumulative distribution function between two particle size diameters.
  `di_power`(i[, power]) | Method to calculate a power of a particle class/bin in a generic way so as to support when there are as many ds as fractions, or one more diameter spec than fractions.
  `dn`(fraction[, n]) | Computes the diameter at which a specified fraction of the distribution falls under.
  `ds_discrete`([d_min, d_max, pts, limit, method]) | Create a particle spacing mesh to perform calculations with, according to one of several ways.
  `fit`([x0, distribution, n]) | Incomplete method to fit experimental values to a curve.
  `fractions_discrete`(ds[, n]) | Computes the fractions of the cumulative distribution functions which lie between the specified specified particle diameters.
  `mean_size`(p, q) | Calculates the mean particle size according to moment-ratio notation.
  `mean_size_ISO`(k, r) | Calculates the mean particle size according to moment notation (ISO).
  `pdf`(d[, n]) | Computes the probability density function of a continuous particle size distribution at a specified particle diameter, an optionally in a specified basis.
  `plot_cdf`([n, d_min, d_max, pts, method]) | Plot the cumulative distribution function of the particle size distribution.
  `plot_pdf`([n, d_min, d_max, pts, normalized, ...]) | Plot the probability density function of the particle size distribution.

  property Dis

    Representative diameters of each bin.

  di_power(i, power=1)

    Method to calculate a power of a particle class/bin in a generic way so as to support when there are as many ds as fractions, or one more diameter spec than fractions.

    When each bin has a lower and upper bound, the formula is as follows [1].

    \[D_i^r = \frac{D_{i, ub}^{(r+1)} - D_{i, lb}^{(r+1)}} {(D_{i, ub} - D_{i, lb})(r+1)}\]

    Where ub represents the upper bound, and lb represents the lower bound. Otherwise, the standard definition is used:

    \[D_i^r = D_i^r\]
    Parameters:
      i `python:int`

        The index of the diameter for the calculation, [-]

      power `python:int`

        The exponent, [-]

    Returns:
      di_power `python:float`

        The representative bin diameter raised to power, [m^power]

    References

    [1]

    ASTM E799 - 03(2015) - Standard Practice for Determining Data Criteria and Processing for Liquid Drop Size Analysis.

  fit(x0=None, distribution='lognormal', n=None, **kwargs)

    Incomplete method to fit experimental values to a curve.

    It is very hard to get good initial guesses, which are really required for this. Differential evolution is promising. This API is likely to change in the future.

  mean_size(p, q)

    Calculates the mean particle size according to moment-ratio notation. This is the more common and often convenient definition.

    \[ \begin{align}\begin{aligned}\left[\bar D_{p,q} \right]^{(p-q)} = \frac{\sum_i n_i D_i^p } {\sum_i n_i D_i^q}\\\left[\bar D_{p,p} \right] = \exp\left[\frac{\sum_i n_i D_i^p\ln D_i }{\sum_i n_i D_i^p}\right] \text{, if p = q}\end{aligned}\end{align} \]

    Note that \(n_i\) in the above equation is replaceable with the fraction of particles in that bin.

    Parameters:
      p `python:int`

        Power and/or subscript of D moment in the above equations, [-]

      q `python:int`

        Power and/or subscript of D moment in the above equations, [-]

    Returns:
      d_pq `python:float`

        Mean particle size according to the specified p and q, [m]

    Notes

    The following is a list of common names for specific mean diameters.

    - D[-3, 0]: arithmetic harmonic mean volume diameter

    - D[-2, 1]: size-weighted harmonic mean volume diameter

    - D[-1, 2]: area-weighted harmonic mean volume diameter

    - D[-2, 0]: arithmetic harmonic mean area diameter

    - D[-1, 1]: size-weighted harmonic mean area diameter

    - D[-1, 0]: arithmetic harmonic mean diameter

    - D[0, 0]: arithmetic geometric mean diameter

    - D[1, 1]: size-weighted geometric mean diameter

    - D[2, 2]: area-weighted geometric mean diameter

    - D[3, 3]: volume-weighted geometric mean diameter

    - D[1, 0]: arithmetic mean diameter

    - D[2, 1]: size-weighted mean diameter

    - D[3, 2]: area-weighted mean diameter, Sauter mean diameter

    - D[4, 3]: volume-weighted mean diameter, De Brouckere diameter

    - D[2, 0]: arithmetic mean area diameter

    - D[3, 1]: size-weighted mean area diameter

    - D[4, 2]: area-weighted mean area diameter

    - D[5, 3]: volume-weighted mean area diameter

    - D[3, 0]: arithmetic mean volume diameter

    - D[4, 1]: size-weighted mean volume diameter

    - D[5, 2]: area-weighted mean volume diameter

    - D[6, 3]: volume-weighted mean volume diameter

    This notation was first introduced in [1].

    The sum of p and q is called the order of the mean size [3].

    \[\bar D_{p,q} \equiv \bar D_{q, p}\]

    References

    [1]

    Mugele, R. A., and H. D. Evans. “Droplet Size Distribution in Sprays.” Industrial & Engineering Chemistry 43, no. 6 (June 1951): 1317-24. https://doi.org/10.1021/ie50498a023.

    [2]

    ASTM E799 - 03(2015) - Standard Practice for Determining Data Criteria and Processing for Liquid Drop Size Analysis.

    [3]

    ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle Sizes/Diameters and Moments from Particle Size Distributions.

    Examples

        >>> import numpy as np
        >>> ds = 1E-6*np.array([240, 360, 450, 562.5, 703, 878, 1097, 1371, 1713, 2141, 2676, 3345, 4181, 5226, 6532])
        >>> numbers = [65, 119, 232, 410, 629, 849, 990, 981, 825, 579, 297, 111, 21, 1]
        >>> psd = ParticleSizeDistribution(ds=ds, fractions=numbers, order=0)
        >>> psd.mean_size(3, 2)
        0.002269321031745045

  mean_size_ISO(k, r)

    Calculates the mean particle size according to moment notation (ISO). This system is related to the moment-ratio notation as follows; see the mean_size method for the full formulas.

    \[\bar x_{p-q, q} \equiv \bar x_{k+r, r} \equiv \bar D_{p,q}\]
    Parameters:
      k `python:int`

        Power and/or subscript of D moment in the above equations, [-]

      r `python:int`

        Power and/or subscript of D moment in the above equations, [-]

    Returns:
      x_kr `python:float`

        Mean particle size according to the specified k and r in the ISO series, [m]

    Notes

    The following is a list of common names for specific mean diameters in the ISO naming convention.

    - x[-3, 0]: arithmetic harmonic mean volume diameter

    - x[-3, 1]: size-weighted harmonic mean volume diameter

    - x[-3, 2]: area-weighted harmonic mean volume diameter

    - x[-2, 0]: arithmetic harmonic mean area diameter

    - x[-2, 1]: size-weighted harmonic mean area diameter

    - x[-1, 0]: arithmetic harmonic mean diameter

    - x[0, 0]: arithmetic geometric mean diameter

    - x[0, 1]: size-weighted geometric mean diameter

    - x[0, 2]: area-weighted geometric mean diameter

    - x[0, 3]: volume-weighted geometric mean diameter

    - x[1, 0]: arithmetic mean diameter

    - x[1, 1]: size-weighted mean diameter

    - x[1, 2]: area-weighted mean diameter, Sauter mean diameter

    - x[1, 3]: volume-weighted mean diameter, De Brouckere diameter

    - x[2, 0]: arithmetic mean area diameter

    - x[1, 1]: size-weighted mean area diameter

    - x[2, 2]: area-weighted mean area diameter

    - x[2, 3]: volume-weighted mean area diameter

    - x[3, 0]: arithmetic mean volume diameter

    - x[3, 1]: size-weighted mean volume diameter

    - x[3, 2]: area-weighted mean volume diameter

    - x[3, 3]: volume-weighted mean volume diameter

    When working with continuous distributions, the ISO series must be used to perform the actual calculations.

    References

    [1]

    ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle Sizes/Diameters and Moments from Particle Size Distributions.

    Examples

        >>> import numpy as np
        >>> ds = 1E-6*np.array([240, 360, 450, 562.5, 703, 878, 1097, 1371, 1713, 2141, 2676, 3345, 4181, 5226, 6532])
        >>> numbers = [65, 119, 232, 410, 629, 849, 990, 981, 825, 579, 297, 111, 21, 1]
        >>> psd = ParticleSizeDistribution(ds=ds, fractions=numbers, order=0)
        >>> psd.mean_size_ISO(1, 2)
        0.002269321031745045

  property vssa

    The volume-specific surface area of a particle size distribution. Note this uses the diameters provided by the method Dis.

    \[\text{VSSA} = \sum_i \text{fraction}_i \frac{SA_i}{V_i}\]
    Returns:
      VSSA `python:float`

        The volume-specific surface area of the distribution, [m^2/m^3]

    References

    [1]

    ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle Sizes/Diameters and Moments from Particle Size Distributions.

class fluids.particle_size_distribution.PSDInterpolated(ds, fractions, order=3, monotonic=True)
  Attributes:
    `vssa`

      The volume-specific surface area of a particle size distribution.

  Methods

  `cdf`(d[, n]) | Computes the cumulative distribution density function of a continuous particle size distribution at a specified particle diameter, an optionally in a specified basis.
  `cdf_discrete`(ds[, n]) | Computes the cumulative distribution functions for a list of specified particle diameters.
  `delta_cdf`(d_min, d_max[, n]) | Computes the difference in cumulative distribution function between two particle size diameters.
  `dn`(fraction[, n]) | Computes the diameter at which a specified fraction of the distribution falls under.
  `ds_discrete`([d_min, d_max, pts, limit, method]) | Create a particle spacing mesh to perform calculations with, according to one of several ways.
  `fractions_discrete`(ds[, n]) | Computes the fractions of the cumulative distribution functions which lie between the specified specified particle diameters.
  `mean_size`(p, q) | Calculates the mean particle size according to moment-ratio notation.
  `mean_size_ISO`(k, r) | Calculates the mean particle size according to moment notation (ISO).
  `pdf`(d[, n]) | Computes the probability density function of a continuous particle size distribution at a specified particle diameter, an optionally in a specified basis.
  `plot_cdf`([n, d_min, d_max, pts, method]) | Plot the cumulative distribution function of the particle size distribution.
  `plot_pdf`([n, d_min, d_max, pts, normalized, ...]) | Plot the probability density function of the particle size distribution.

## Statistical Particle Size Distributions

class fluids.particle_size_distribution.PSDLognormal(d_characteristic, s, order=3, d_min=None, d_max=None)
  Attributes:
    `vssa`

      The volume-specific surface area of a particle size distribution.

  Methods

  `cdf`(d[, n]) | Computes the cumulative distribution density function of a continuous particle size distribution at a specified particle diameter, an optionally in a specified basis.
  `cdf_discrete`(ds[, n]) | Computes the cumulative distribution functions for a list of specified particle diameters.
  `delta_cdf`(d_min, d_max[, n]) | Computes the difference in cumulative distribution function between two particle size diameters.
  `dn`(fraction[, n]) | Computes the diameter at which a specified fraction of the distribution falls under.
  `ds_discrete`([d_min, d_max, pts, limit, method]) | Create a particle spacing mesh to perform calculations with, according to one of several ways.
  `fractions_discrete`(ds[, n]) | Computes the fractions of the cumulative distribution functions which lie between the specified specified particle diameters.
  `mean_size`(p, q) | Calculates the mean particle size according to moment-ratio notation.
  `mean_size_ISO`(k, r) | Calculates the mean particle size according to moment notation (ISO).
  `pdf`(d[, n]) | Computes the probability density function of a continuous particle size distribution at a specified particle diameter, an optionally in a specified basis.
  `plot_cdf`([n, d_min, d_max, pts, method]) | Plot the cumulative distribution function of the particle size distribution.
  `plot_pdf`([n, d_min, d_max, pts, normalized, ...]) | Plot the probability density function of the particle size distribution.

class fluids.particle_size_distribution.PSDGatesGaudinSchuhman(d_characteristic, m, order=3, d_min=None, d_max=None)
  Attributes:
    `vssa`

      The volume-specific surface area of a particle size distribution.

  Methods

  `cdf`(d[, n]) | Computes the cumulative distribution density function of a continuous particle size distribution at a specified particle diameter, an optionally in a specified basis.
  `cdf_discrete`(ds[, n]) | Computes the cumulative distribution functions for a list of specified particle diameters.
  `delta_cdf`(d_min, d_max[, n]) | Computes the difference in cumulative distribution function between two particle size diameters.
  `dn`(fraction[, n]) | Computes the diameter at which a specified fraction of the distribution falls under.
  `ds_discrete`([d_min, d_max, pts, limit, method]) | Create a particle spacing mesh to perform calculations with, according to one of several ways.
  `fractions_discrete`(ds[, n]) | Computes the fractions of the cumulative distribution functions which lie between the specified specified particle diameters.
  `mean_size`(p, q) | Calculates the mean particle size according to moment-ratio notation.
  `mean_size_ISO`(k, r) | Calculates the mean particle size according to moment notation (ISO).
  `pdf`(d[, n]) | Computes the probability density function of a continuous particle size distribution at a specified particle diameter, an optionally in a specified basis.
  `plot_cdf`([n, d_min, d_max, pts, method]) | Plot the cumulative distribution function of the particle size distribution.
  `plot_pdf`([n, d_min, d_max, pts, normalized, ...]) | Plot the probability density function of the particle size distribution.

class fluids.particle_size_distribution.PSDRosinRammler(k, m, order=3, d_min=None, d_max=None)
  Attributes:
    `vssa`

      The volume-specific surface area of a particle size distribution.

  Methods

  `cdf`(d[, n]) | Computes the cumulative distribution density function of a continuous particle size distribution at a specified particle diameter, an optionally in a specified basis.
  `cdf_discrete`(ds[, n]) | Computes the cumulative distribution functions for a list of specified particle diameters.
  `delta_cdf`(d_min, d_max[, n]) | Computes the difference in cumulative distribution function between two particle size diameters.
  `dn`(fraction[, n]) | Computes the diameter at which a specified fraction of the distribution falls under.
  `ds_discrete`([d_min, d_max, pts, limit, method]) | Create a particle spacing mesh to perform calculations with, according to one of several ways.
  `fractions_discrete`(ds[, n]) | Computes the fractions of the cumulative distribution functions which lie between the specified specified particle diameters.
  `mean_size`(p, q) | Calculates the mean particle size according to moment-ratio notation.
  `mean_size_ISO`(k, r) | Calculates the mean particle size according to moment notation (ISO).
  `pdf`(d[, n]) | Computes the probability density function of a continuous particle size distribution at a specified particle diameter, an optionally in a specified basis.
  `plot_cdf`([n, d_min, d_max, pts, method]) | Plot the cumulative distribution function of the particle size distribution.
  `plot_pdf`([n, d_min, d_max, pts, normalized, ...]) | Plot the probability density function of the particle size distribution.

class fluids.particle_size_distribution.PSDCustom(distribution, order=3.0, d_excessive=1.0, name=None, d_min=None, d_max=None)
  Attributes:
    `vssa`

      The volume-specific surface area of a particle size distribution.

  Methods

  `cdf`(d[, n]) | Computes the cumulative distribution density function of a continuous particle size distribution at a specified particle diameter, an optionally in a specified basis.
  `cdf_discrete`(ds[, n]) | Computes the cumulative distribution functions for a list of specified particle diameters.
  `delta_cdf`(d_min, d_max[, n]) | Computes the difference in cumulative distribution function between two particle size diameters.
  `dn`(fraction[, n]) | Computes the diameter at which a specified fraction of the distribution falls under.
  `ds_discrete`([d_min, d_max, pts, limit, method]) | Create a particle spacing mesh to perform calculations with, according to one of several ways.
  `fractions_discrete`(ds[, n]) | Computes the fractions of the cumulative distribution functions which lie between the specified specified particle diameters.
  `mean_size`(p, q) | Calculates the mean particle size according to moment-ratio notation.
  `mean_size_ISO`(k, r) | Calculates the mean particle size according to moment notation (ISO).
  `pdf`(d[, n]) | Computes the probability density function of a continuous particle size distribution at a specified particle diameter, an optionally in a specified basis.
  `plot_cdf`([n, d_min, d_max, pts, method]) | Plot the cumulative distribution function of the particle size distribution.
  `plot_pdf`([n, d_min, d_max, pts, normalized, ...]) | Plot the probability density function of the particle size distribution.

## Helper functions: Lognormal Distribution

fluids.particle_size_distribution.pdf_lognormal(d, d_characteristic, s)

  Calculates the probability density function of a lognormal particle distribution given a particle diameter d, characteristic particle diameter d_characteristic, and distribution standard deviation s.

  \[q(d) = \frac{1}{ds\sqrt{2\pi}} \exp\left[-0.5\left(\frac{ \ln(d/d_{characteristic})}{s}\right)^2\right]\]
  Parameters:
    d `python:float`

      Specified particle diameter, [m]

    d_characteristic `python:float`

      Characteristic particle diameter; often D[3, 3] is used for this purpose but not always, [m]

    s `python:float`

      Distribution standard deviation, [-]

  Returns:
    pdf `python:float`

      Lognormal probability density function, [-]

  Notes

  The characteristic diameter can be in terns of number density (denoted \(q_0(d)\)), length density (\(q_1(d)\)), surface area density (\(q_2(d)\)), or volume density (\(q_3(d)\)). Volume density is most often used. Interconversions among the distributions is possible but tricky.

  The standard distribution (i.e. the one used in Scipy) can perform the same computation with d_characteristic as the value of scale.

      >>> import scipy.stats
      >>> float(scipy.stats.lognorm.pdf(x=1E-4, s=1.1, scale=1E-5))
      405.5420921

  Scipy’s calculation is over 300 times slower however, and this expression is numerically integrated so speed is required.

  References

  [1]

  ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle Sizes/Diameters and Moments from Particle Size Distributions.

  Examples

      >>> pdf_lognormal(1E-4, 1E-5, 1.1)
      405.5420921

fluids.particle_size_distribution.cdf_lognormal(d, d_characteristic, s)

  Calculates the cumulative distribution function of a lognormal particle distribution given a particle diameter d, characteristic particle diameter d_characteristic, and distribution standard deviation s.

  \[Q(d) = 0.5\left(1 + \text{err}\left[\left(\frac{\ln(d/d_c)}{s\sqrt{2}} \right)\right]\right)\]
  Parameters:
    d `python:float`

      Specified particle diameter, [m]

    d_characteristic `python:float`

      Characteristic particle diameter; often D[3, 3] is used for this purpose but not always, [m]

    s `python:float`

      Distribution standard deviation, [-]

  Returns:
    cdf `python:float`

      Lognormal cumulative density function, [-]

  Notes

  The characteristic diameter can be in terns of number density (denoted \(q_0(d)\)), length density (\(q_1(d)\)), surface area density (\(q_2(d)\)), or volume density (\(q_3(d)\)). Volume density is most often used. Interconversions among the distributions is possible but tricky.

  The standard distribution (i.e. the one used in Scipy) can perform the same computation with d_characteristic as the value of scale.

      >>> import scipy.stats
      >>> float(scipy.stats.lognorm.cdf(x=1E-4, s=1.1, scale=1E-5))
      0.9818369875798177

  Scipy’s calculation is over 100 times slower however.

  References

  [1]

  ISO 9276-2:2014 - Representation of Results of Particle Size Analysis - Part 2: Calculation of Average Particle Sizes/Diameters and Moments from Particle Size Distributions.

  Examples

      >>> cdf_lognormal(d=1E-4, d_characteristic=1E-5, s=1.1)
      0.9818369875798

fluids.particle_size_distribution.pdf_lognormal_basis_integral(d, d_characteristic, s, n)

  Calculates the integral of the multiplication of d^n by the lognormal pdf, given a particle diameter d, characteristic particle diameter d_characteristic, distribution standard deviation s, and exponent n.

  \[\int d^n\cdot q(d)\; dd = -\frac{1}{2} \exp\left(\frac{s^2 n^2}{2} \right)d^n \left(\frac{d}{d_{characteristic}}\right)^{-n} \text{erf}\left[\frac{s^2 n - \ln(d/d_{characteristic})} {\sqrt{2} s} \right]\]

  This is the crucial integral required for interconversion between different bases such as number density (denoted \(q_0(d)\)), length density (\(q_1(d)\)), surface area density (\(q_2(d)\)), or volume density (\(q_3(d)\)).

  Parameters:
    d `python:float`

      Specified particle diameter, [m]

    d_characteristic `python:float`

      Characteristic particle diameter; often D[3, 3] is used for this purpose but not always, [m]

    s `python:float`

      Distribution standard deviation, [-]

    n `python:int`

      Exponent of the multiplied n

  Returns:
    pdf_basis_integral `python:float`

      Integral of lognormal pdf multiplied by d^n, [-]

  Notes

  This integral has been verified numerically. This integral is itself integrated, so it is crucial to obtain an analytical form for at least this integral.

  Note overflow or zero division issues may occur for very large values of s, larger than 10. No mathematical limit was able to be obtained with a CAS.

  Examples

      >>> pdf_lognormal_basis_integral(d=1E-4, d_characteristic=1E-5, s=1.1, n=-2)
      56228306549.26362

## Helper functions: Gates Gaudin Schuhman Distribution

fluids.particle_size_distribution.pdf_Gates_Gaudin_Schuhman(d, d_characteristic, m)

  Calculates the probability density of a particle distribution following the Gates, Gaudin and Schuhman (GGS) model given a particle diameter d, characteristic (maximum) particle diameter d_characteristic, and exponent m.

  \[q(d) = \frac{n}{d}\left(\frac{d}{d_{characteristic}}\right)^m \text{ if } d < d_{characteristic} \text{ else } 0\]
  Parameters:
    d `python:float`

      Specified particle diameter, [m]

    d_characteristic `python:float`

      Characteristic particle diameter; in this model, it is the largest particle size diameter in the distribution, [m]

    m `python:float`

      Particle size distribution exponent, [-]

  Returns:
    pdf `python:float`

      GGS probability density function, [-]

  Notes

  The characteristic diameter can be in terns of number density (denoted \(q_0(d)\)), length density (\(q_1(d)\)), surface area density (\(q_2(d)\)), or volume density (\(q_3(d)\)). Volume density is most often used. Interconversions among the distributions is possible but tricky.

  References

  [1]

  Schuhmann, R., 1940. Principles of Comminution, I-Size Distribution and Surface Calculations. American Institute of Mining, Metallurgical and Petroleum Engineers Technical Publication 1189. Mining Technology, volume 4, p. 1-11.

  [2]

  Bayat, Hossein, Mostafa Rastgo, Moharram Mansouri Zadeh, and Harry Vereecken. “Particle Size Distribution Models, Their Characteristics and Fitting Capability.” Journal of Hydrology 529 (October 1, 2015): 872-89.

  Examples

      >>> pdf_Gates_Gaudin_Schuhman(d=2E-4, d_characteristic=1E-3, m=2.3)
      283.8355768512045

fluids.particle_size_distribution.cdf_Gates_Gaudin_Schuhman(d, d_characteristic, m)

  Calculates the cumulative distribution function of a particle distribution following the Gates, Gaudin and Schuhman (GGS) model given a particle diameter d, characteristic (maximum) particle diameter d_characteristic, and exponent m.

  \[Q(d) = \left(\frac{d}{d_{characteristic}}\right)^m \text{ if } d < d_{characteristic} \text{ else } 1\]
  Parameters:
    d `python:float`

      Specified particle diameter, [m]

    d_characteristic `python:float`

      Characteristic particle diameter; in this model, it is the largest particle size diameter in the distribution, [m]

    m `python:float`

      Particle size distribution exponent, [-]

  Returns:
    cdf `python:float`

      GGS cumulative density function, [-]

  Notes

  The characteristic diameter can be in terns of number density (denoted \(q_0(d)\)), length density (\(q_1(d)\)), surface area density (\(q_2(d)\)), or volume density (\(q_3(d)\)). Volume density is most often used. Interconversions among the distributions is possible but tricky.

  References

  [1]

  Schuhmann, R., 1940. Principles of Comminution, I-Size Distribution and Surface Calculations. American Institute of Mining, Metallurgical and Petroleum Engineers Technical Publication 1189. Mining Technology, volume 4, p. 1-11.

  [2]

  Bayat, Hossein, Mostafa Rastgo, Moharram Mansouri Zadeh, and Harry Vereecken. “Particle Size Distribution Models, Their Characteristics and Fitting Capability.” Journal of Hydrology 529 (October 1, 2015): 872-89.

  Examples

      >>> cdf_Gates_Gaudin_Schuhman(d=2E-4, d_characteristic=1E-3, m=2.3)
      0.024681354508800397

fluids.particle_size_distribution.pdf_Gates_Gaudin_Schuhman_basis_integral(d, d_characteristic, m, n)

  Calculates the integral of the multiplication of d^n by the Gates, Gaudin and Schuhman (GGS) model given a particle diameter d, characteristic (maximum) particle diameter d_characteristic, and exponent m.

  \[\int d^n\cdot q(d)\; dd =\frac{m}{m+n} d^n \left(\frac{d} {d_{characteristic}}\right)^m\]
  Parameters:
    d `python:float`

      Specified particle diameter, [m]

    d_characteristic `python:float`

      Characteristic particle diameter; in this model, it is the largest particle size diameter in the distribution, [m]

    m `python:float`

      Particle size distribution exponent, [-]

    n `python:int`

      Exponent of the multiplied n, [-]

  Returns:
    pdf_basis_integral `python:float`

      Integral of Rosin Rammler pdf multiplied by d^n, [-]

  Notes

  This integral does not have any numerical issues as d approaches 0.

  Examples

      >>> pdf_Gates_Gaudin_Schuhman_basis_integral(d=2E-4, d_characteristic=1E-3, m=2.3, n=-3)
      -10136984887.543015

## Helper functions: Rosin Rammler Distribution

fluids.particle_size_distribution.pdf_Rosin_Rammler(d, k, m)

  Calculates the probability density of a particle distribution following the Rosin-Rammler (RR) model given a particle diameter d, and the two parameters k and m.

  \[q(d) = k m d^{(m-1)} \exp(- k d^{m})\]
  Parameters:
    d `python:float`

      Specified particle diameter, [m]

    k `python:float`

      Parameter in the model, [(1/m)^m]

    m `python:float`

      Parameter in the model, [-]

  Returns:
    pdf `python:float`

      RR probability density function, [-]

  References

  [1]

  Rosin, P. “The Laws Governing the Fineness of Powdered Coal.” J. Inst. Fuel. 7 (1933): 29-36.

  [2]

  Bayat, Hossein, Mostafa Rastgo, Moharram Mansouri Zadeh, and Harry Vereecken. “Particle Size Distribution Models, Their Characteristics and Fitting Capability.” Journal of Hydrology 529 (October 1, 2015): 872-89.

  Examples

      >>> pdf_Rosin_Rammler(1E-3, 200, 2)
      0.3999200079994667

fluids.particle_size_distribution.cdf_Rosin_Rammler(d, k, m)

  Calculates the cumulative distribution function of a particle distribution following the Rosin-Rammler (RR) model given a particle diameter d, and the two parameters k and m.

  \[Q(d) = 1 - \exp\left(-k d^m\right)\]
  Parameters:
    d `python:float`

      Specified particle diameter, [m]

    k `python:float`

      Parameter in the model, [(1/m)^m]

    m `python:float`

      Parameter in the model, [-]

  Returns:
    cdf `python:float`

      RR cumulative density function, [-]

  Notes

  The characteristic diameter can be in terns of number density (denoted \(q_0(d)\)), length density (\(q_1(d)\)), surface area density (\(q_2(d)\)), or volume density (\(q_3(d)\)). Volume density is most often used. Interconversions among the distributions is possible but tricky.

  References

  [1]

  Rosin, P. “The Laws Governing the Fineness of Powdered Coal.” J. Inst. Fuel. 7 (1933): 29-36.

  [2]

  Bayat, Hossein, Mostafa Rastgo, Moharram Mansouri Zadeh, and Harry Vereecken. “Particle Size Distribution Models, Their Characteristics and Fitting Capability.” Journal of Hydrology 529 (October 1, 2015): 872-89.

  Examples

      >>> cdf_Rosin_Rammler(5E-2, 200, 2)
      0.3934693402873667

fluids.particle_size_distribution.pdf_Rosin_Rammler_basis_integral(d, k, m, n)

  Calculates the integral of the multiplication of d^n by the Rosin Rammler (RR) pdf, given a particle diameter d, and the two parameters k and m.

  \[\int d^n\cdot q(d)\; dd =-d^{m+n} k(d^mk)^{-\frac{m+n}{m}}\Gamma \left(\frac{m+n}{m}\right)\text{gammaincc}\left[\left(\frac{m+n}{m} \right), kd^m\right]\]
  Parameters:
    d `python:float`

      Specified particle diameter, [m]

    k `python:float`

      Parameter in the model, [(1/m)^m]

    m `python:float`

      Parameter in the model, [-]

    n `python:int`

      Exponent of the multiplied n, [-]

  Returns:
    pdf_basis_integral `python:float`

      Integral of Rosin Rammler pdf multiplied by d^n, [-]

  Notes

  This integral was derived using a CAS, and verified numerically. The gammaincc function is that from scipy.special, and gamma from the same.

  For very high powers of n or m when the diameter is very low, exceptions may occur.

  Examples

      >>> "{:g}".format(pdf_Rosin_Rammler_basis_integral(5E-2, 200, 2, 3))
      '-0.000452399'

## Sieves

class fluids.particle_size_distribution.Sieve(designation, old_designation=None, opening=None, opening_inch=None, Y_variation_avg=None, X_variation_max=None, max_opening=None, compliance_samples=None, compliance_sd=None, inspection_samples=None, inspection_sd=None, calibration_samples=None, calibration_sd=None, d_wire=None, d_wire_min=None, d_wire_max=None)

  Class for storing data on sieves. If a property is not available, it is set to None.

  Attributes:
    designation `python:str`

      The standard name of the sieve - its opening’s length in units of millimeters

    old_designation `python:str`

      The older, imperial-esque name of the sieve; in Numbers, or inches for large sieves

    opening `python:float`

      The opening length of the sieve holes, [m]

    opening_inch `python:float`

      The opening length of the sieve holes in the rounded inches as stated in common tables (not exactly equal to the opening), [inch]

    Y_variation_avg `python:float`

      The allowable average variation in the Y direction of the sieve openings, [m]

    X_variation_max `python:float`

      The allowable maximum variation in the X direction of the sieve openings, [m]

    max_opening `python:float`

      The maximum allowable opening of the sieve, [m]

    calibration_samples `python:float`

      The number of opening sample inspections required for calibration- type sieve openings (per 100 ft^2 of sieve material), [1/(ft^2)]

    compliance_sd `python:float`

      The maximum standard deviation of compliance-type sieve openings, [-]

    inspection_samples `python:float`

      The number of opening sample inspections required for inspection- type sieve openings (based on an 8-inch sieve), [-]

    inspection_sd `python:float`

      The maximum standard deviation of inspection-type sieve openings, [-]

    calibration_samples `python:float`

      The number of opening sample inspections required for calibration- type sieve openings (based on an 8-inch sieve), [-]

    calibration_sd `python:float`

      The maximum standard deviation of calibration-type sieve openings, [-]

    d_wire `python:float`

      Typical wire diameter of the specified sieve size, [m]

    d_wire_min `python:float`

      Permissible minimum wire diameter of specified sieve size, [m]

    d_wire_max `python:float`

      Permissible maximum wire diameter of specified sieve size, [m]

fluids.particle_size_distribution.ASTM_E11_sieves = {'0.02': <Sieve, designation 0.02 mm, opening 2e-05 m>, '0.025': <Sieve, designation 0.025 mm, opening 2.5e-05 m>, '0.032': <Sieve, designation 0.032 mm, opening 3.2e-05 m>, '0.038': <Sieve, designation 0.038 mm, opening 3.8e-05 m>, '0.045': <Sieve, designation 0.045 mm, opening 4.5e-05 m>, '0.053': <Sieve, designation 0.053 mm, opening 5.3e-05 m>, '0.063': <Sieve, designation 0.063 mm, opening 6.3e-05 m>, '0.075': <Sieve, designation 0.075 mm, opening 7.5e-05 m>, '0.09': <Sieve, designation 0.09 mm, opening 9e-05 m>, '0.106': <Sieve, designation 0.106 mm, opening 0.000106 m>, '0.125': <Sieve, designation 0.125 mm, opening 0.000125 m>, '0.15': <Sieve, designation 0.15 mm, opening 0.00015 m>, '0.18': <Sieve, designation 0.18 mm, opening 0.00018 m>, '0.212': <Sieve, designation 0.212 mm, opening 0.000212 m>, '0.25': <Sieve, designation 0.25 mm, opening 0.00025 m>, '0.3': <Sieve, designation 0.3 mm, opening 0.0003 m>, '0.355': <Sieve, designation 0.355 mm, opening 0.000355 m>, '0.425': <Sieve, designation 0.425 mm, opening 0.000425 m>, '0.5': <Sieve, designation 0.5 mm, opening 0.0005 m>, '0.6': <Sieve, designation 0.6 mm, opening 0.0006 m>, '0.71': <Sieve, designation 0.71 mm, opening 0.00071 m>, '0.85': <Sieve, designation 0.85 mm, opening 0.00085 m>, '1': <Sieve, designation 1 mm, opening 0.001 m>, '1.18': <Sieve, designation 1.18 mm, opening 0.00118 m>, '1.4': <Sieve, designation 1.4 mm, opening 0.0014 m>, '1.7': <Sieve, designation 1.7 mm, opening 0.0017 m>, '100': <Sieve, designation 100 mm, opening 0.1 m>, '106': <Sieve, designation 106 mm, opening 0.106 m>, '11.2': <Sieve, designation 11.2 mm, opening 0.0112 m>, '12.5': <Sieve, designation 12.5 mm, opening 0.0125 m>, '125': <Sieve, designation 125 mm, opening 0.125 m>, '13.2': <Sieve, designation 13.2 mm, opening 0.0132 m>, '16': <Sieve, designation 16 mm, opening 0.016 m>, '19': <Sieve, designation 19 mm, opening 0.019 m>, '2': <Sieve, designation 2 mm, opening 0.002 m>, '2.36': <Sieve, designation 2.36 mm, opening 0.00236 m>, '2.8': <Sieve, designation 2.8 mm, opening 0.0028 m>, '22.4': <Sieve, designation 22.4 mm, opening 0.0224 m>, '25': <Sieve, designation 25 mm, opening 0.025 m>, '26.5': <Sieve, designation 26.5 mm, opening 0.0265 m>, '3.35': <Sieve, designation 3.35 mm, opening 0.00335 m>, '31.5': <Sieve, designation 31.5 mm, opening 0.0315 m>, '37.5': <Sieve, designation 37.5 mm, opening 0.0375 m>, '4': <Sieve, designation 4 mm, opening 0.004 m>, '4.75': <Sieve, designation 4.75 mm, opening 0.00475 m>, '45': <Sieve, designation 45 mm, opening 0.045 m>, '5.6': <Sieve, designation 5.6 mm, opening 0.0056 m>, '50': <Sieve, designation 50 mm, opening 0.05 m>, '53': <Sieve, designation 53 mm, opening 0.053 m>, '6.3': <Sieve, designation 6.3 mm, opening 0.0063 m>, '6.7': <Sieve, designation 6.7 mm, opening 0.0067 m>, '63': <Sieve, designation 63 mm, opening 0.063 m>, '75': <Sieve, designation 75 mm, opening 0.075 m>, '8': <Sieve, designation 8 mm, opening 0.008 m>, '9.5': <Sieve, designation 9.5 mm, opening 0.0095 m>, '90': <Sieve, designation 90 mm, opening 0.09 m>}

  Dictionary containing ASTM E-11 sieve series `Sieve` objects, indexed by their size in mm as a string.

  References

  [1]

  ASTM E11 - 17 - Standard Specification for Woven Wire Test Sieve Cloth and Test Sieves.

fluids.particle_size_distribution.ISO_3310_1_sieves = {'0.02': <Sieve, designation 0.02 mm, opening 2e-05 m>, '0.025': <Sieve, designation 0.025 mm, opening 2.5e-05 m>, '0.032': <Sieve, designation 0.032 mm, opening 3.2e-05 m>, '0.036': <Sieve, designation 0.036 mm, opening 3.6e-05 m>, '0.038': <Sieve, designation 0.038 mm, opening 3.8e-05 m>, '0.04': <Sieve, designation 0.04 mm, opening 4e-05 m>, '0.045': <Sieve, designation 0.045 mm, opening 4.5e-05 m>, '0.05': <Sieve, designation 0.05 mm, opening 5e-05 m>, '0.053': <Sieve, designation 0.053 mm, opening 5.3e-05 m>, '0.056': <Sieve, designation 0.056 mm, opening 5.6e-05 m>, '0.063': <Sieve, designation 0.063 mm, opening 6.3e-05 m>, '0.071': <Sieve, designation 0.071 mm, opening 7.1e-05 m>, '0.075': <Sieve, designation 0.075 mm, opening 7.5e-05 m>, '0.08': <Sieve, designation 0.08 mm, opening 8e-05 m>, '0.09': <Sieve, designation 0.09 mm, opening 9e-05 m>, '0.1': <Sieve, designation 0.1 mm, opening 0.0001 m>, '0.106': <Sieve, designation 0.106 mm, opening 0.000106 m>, '0.112': <Sieve, designation 0.112 mm, opening 0.000112 m>, '0.125': <Sieve, designation 0.125 mm, opening 0.000125 m>, '0.14': <Sieve, designation 0.14 mm, opening 0.00014 m>, '0.15': <Sieve, designation 0.15 mm, opening 0.00015 m>, '0.16': <Sieve, designation 0.16 mm, opening 0.00016 m>, '0.18': <Sieve, designation 0.18 mm, opening 0.00018 m>, '0.2': <Sieve, designation 0.2 mm, opening 0.0002 m>, '0.212': <Sieve, designation 0.212 mm, opening 0.000212 m>, '0.224': <Sieve, designation 0.224 mm, opening 0.000224 m>, '0.25': <Sieve, designation 0.25 mm, opening 0.00025 m>, '0.28': <Sieve, designation 0.28 mm, opening 0.00028 m>, '0.3': <Sieve, designation 0.3 mm, opening 0.0003 m>, '0.315': <Sieve, designation 0.315 mm, opening 0.000315 m>, '0.355': <Sieve, designation 0.355 mm, opening 0.000355 m>, '0.4': <Sieve, designation 0.4 mm, opening 0.0004 m>, '0.425': <Sieve, designation 0.425 mm, opening 0.000425 m>, '0.45': <Sieve, designation 0.45 mm, opening 0.00045 m>, '0.5': <Sieve, designation 0.5 mm, opening 0.0005 m>, '0.56': <Sieve, designation 0.56 mm, opening 0.00056 m>, '0.6': <Sieve, designation 0.6 mm, opening 0.0006 m>, '0.63': <Sieve, designation 0.63 mm, opening 0.00063 m>, '0.71': <Sieve, designation 0.71 mm, opening 0.00071 m>, '0.8': <Sieve, designation 0.8 mm, opening 0.0008 m>, '0.85': <Sieve, designation 0.85 mm, opening 0.00085 m>, '0.9': <Sieve, designation 0.9 mm, opening 0.0009 m>, '1': <Sieve, designation 1 mm, opening 0.001 m>, '1.12': <Sieve, designation 1.12 mm, opening 0.00112 m>, '1.18': <Sieve, designation 1.18 mm, opening 0.00118 m>, '1.25': <Sieve, designation 1.25 mm, opening 0.00125 m>, '1.4': <Sieve, designation 1.4 mm, opening 0.0014 m>, '1.6': <Sieve, designation 1.6 mm, opening 0.0016 m>, '1.7': <Sieve, designation 1.7 mm, opening 0.0017 m>, '1.8': <Sieve, designation 1.8 mm, opening 0.0018 m>, '10': <Sieve, designation 10 mm, opening 0.01 m>, '100': <Sieve, designation 100 mm, opening 0.1 m>, '106': <Sieve, designation 106 mm, opening 0.106 m>, '11.2': <Sieve, designation 11.2 mm, opening 0.0112 m>, '112': <Sieve, designation 112 mm, opening 0.112 m>, '12.5': <Sieve, designation 12.5 mm, opening 0.0125 m>, '125': <Sieve, designation 125 mm, opening 0.125 m>, '13.2': <Sieve, designation 13.2 mm, opening 0.0132 m>, '14': <Sieve, designation 14 mm, opening 0.014 m>, '16': <Sieve, designation 16 mm, opening 0.016 m>, '18': <Sieve, designation 18 mm, opening 0.018 m>, '19': <Sieve, designation 19 mm, opening 0.019 m>, '2': <Sieve, designation 2 mm, opening 0.002 m>, '2.24': <Sieve, designation 2.24 mm, opening 0.00224 m>, '2.36': <Sieve, designation 2.36 mm, opening 0.00236 m>, '2.5': <Sieve, designation 2.5 mm, opening 0.0025 m>, '2.8': <Sieve, designation 2.8 mm, opening 0.0028 m>, '20': <Sieve, designation 20 mm, opening 0.02 m>, '22.4': <Sieve, designation 22.4 mm, opening 0.0224 m>, '25': <Sieve, designation 25 mm, opening 0.025 m>, '26.5': <Sieve, designation 26.5 mm, opening 0.0265 m>, '28': <Sieve, designation 28 mm, opening 0.028 m>, '3.15': <Sieve, designation 3.15 mm, opening 0.00315 m>, '3.35': <Sieve, designation 3.35 mm, opening 0.00335 m>, '3.55': <Sieve, designation 3.55 mm, opening 0.00355 m>, '31.5': <Sieve, designation 31.5 mm, opening 0.0315 m>, '35.5': <Sieve, designation 35.5 mm, opening 0.0355 m>, '37.5': <Sieve, designation 37.5 mm, opening 0.0375 m>, '4': <Sieve, designation 4 mm, opening 0.004 m>, '4.5': <Sieve, designation 4.5 mm, opening 0.0045 m>, '4.75': <Sieve, designation 4.75 mm, opening 0.00475 m>, '40': <Sieve, designation 40 mm, opening 0.04 m>, '45': <Sieve, designation 45 mm, opening 0.045 m>, '5': <Sieve, designation 5 mm, opening 0.005 m>, '5.6': <Sieve, designation 5.6 mm, opening 0.0056 m>, '50': <Sieve, designation 50 mm, opening 0.05 m>, '53': <Sieve, designation 53 mm, opening 0.053 m>, '56': <Sieve, designation 56 mm, opening 0.056 m>, '6.3': <Sieve, designation 6.3 mm, opening 0.0063 m>, '6.7': <Sieve, designation 6.7 mm, opening 0.0067 m>, '63': <Sieve, designation 63 mm, opening 0.063 m>, '7.1': <Sieve, designation 7.1 mm, opening 0.0071 m>, '71': <Sieve, designation 71 mm, opening 0.071 m>, '75': <Sieve, designation 75 mm, opening 0.075 m>, '8': <Sieve, designation 8 mm, opening 0.008 m>, '80': <Sieve, designation 80 mm, opening 0.08 m>, '9': <Sieve, designation 9 mm, opening 0.009 m>, '9.5': <Sieve, designation 9.5 mm, opening 0.0095 m>, '90': <Sieve, designation 90 mm, opening 0.09 m>}

  Dictionary containing all of the individual `Sieve` objects, on the ISO 3310-1:2016 series, indexed by their size in mm as a string.

  References

  [1]

  ISO 3310-1:2016 - Test Sieves – Technical Requirements and Testing – Part 1: Test Sieves of Metal Wire Cloth.

fluids.particle_size_distribution.ISO_3310_1_R20 = [<Sieve, designation 125 mm, opening 0.125 m>, <Sieve, designation 112 mm, opening 0.112 m>, <Sieve, designation 100 mm, opening 0.1 m>, <Sieve, designation 90 mm, opening 0.09 m>, <Sieve, designation 80 mm, opening 0.08 m>, <Sieve, designation 71 mm, opening 0.071 m>, <Sieve, designation 63 mm, opening 0.063 m>, <Sieve, designation 56 mm, opening 0.056 m>, <Sieve, designation 50 mm, opening 0.05 m>, <Sieve, designation 45 mm, opening 0.045 m>, <Sieve, designation 40 mm, opening 0.04 m>, <Sieve, designation 35.5 mm, opening 0.0355 m>, <Sieve, designation 31.5 mm, opening 0.0315 m>, <Sieve, designation 28 mm, opening 0.028 m>, <Sieve, designation 25 mm, opening 0.025 m>, <Sieve, designation 22.4 mm, opening 0.0224 m>, <Sieve, designation 20 mm, opening 0.02 m>, <Sieve, designation 18 mm, opening 0.018 m>, <Sieve, designation 16 mm, opening 0.016 m>, <Sieve, designation 14 mm, opening 0.014 m>, <Sieve, designation 12.5 mm, opening 0.0125 m>, <Sieve, designation 11.2 mm, opening 0.0112 m>, <Sieve, designation 10 mm, opening 0.01 m>, <Sieve, designation 9 mm, opening 0.009 m>, <Sieve, designation 8 mm, opening 0.008 m>, <Sieve, designation 7.1 mm, opening 0.0071 m>, <Sieve, designation 6.3 mm, opening 0.0063 m>, <Sieve, designation 5.6 mm, opening 0.0056 m>, <Sieve, designation 5 mm, opening 0.005 m>, <Sieve, designation 4.5 mm, opening 0.0045 m>, <Sieve, designation 4 mm, opening 0.004 m>, <Sieve, designation 3.55 mm, opening 0.00355 m>, <Sieve, designation 3.15 mm, opening 0.00315 m>, <Sieve, designation 2.8 mm, opening 0.0028 m>, <Sieve, designation 2.5 mm, opening 0.0025 m>, <Sieve, designation 2.24 mm, opening 0.00224 m>, <Sieve, designation 2 mm, opening 0.002 m>, <Sieve, designation 1.8 mm, opening 0.0018 m>, <Sieve, designation 1.6 mm, opening 0.0016 m>, <Sieve, designation 1.4 mm, opening 0.0014 m>, <Sieve, designation 1.25 mm, opening 0.00125 m>, <Sieve, designation 1.12 mm, opening 0.00112 m>, <Sieve, designation 1 mm, opening 0.001 m>, <Sieve, designation 0.9 mm, opening 0.0009 m>, <Sieve, designation 0.8 mm, opening 0.0008 m>, <Sieve, designation 0.71 mm, opening 0.00071 m>, <Sieve, designation 0.63 mm, opening 0.00063 m>, <Sieve, designation 0.56 mm, opening 0.00056 m>, <Sieve, designation 0.5 mm, opening 0.0005 m>, <Sieve, designation 0.45 mm, opening 0.00045 m>, <Sieve, designation 0.4 mm, opening 0.0004 m>, <Sieve, designation 0.355 mm, opening 0.000355 m>, <Sieve, designation 0.315 mm, opening 0.000315 m>, <Sieve, designation 0.28 mm, opening 0.00028 m>, <Sieve, designation 0.25 mm, opening 0.00025 m>, <Sieve, designation 0.224 mm, opening 0.000224 m>, <Sieve, designation 0.2 mm, opening 0.0002 m>, <Sieve, designation 0.18 mm, opening 0.00018 m>, <Sieve, designation 0.16 mm, opening 0.00016 m>, <Sieve, designation 0.14 mm, opening 0.00014 m>, <Sieve, designation 0.125 mm, opening 0.000125 m>, <Sieve, designation 0.112 mm, opening 0.000112 m>, <Sieve, designation 0.1 mm, opening 0.0001 m>, <Sieve, designation 0.09 mm, opening 9e-05 m>, <Sieve, designation 0.08 mm, opening 8e-05 m>, <Sieve, designation 0.071 mm, opening 7.1e-05 m>, <Sieve, designation 0.063 mm, opening 6.3e-05 m>, <Sieve, designation 0.056 mm, opening 5.6e-05 m>, <Sieve, designation 0.05 mm, opening 5e-05 m>, <Sieve, designation 0.045 mm, opening 4.5e-05 m>, <Sieve, designation 0.04 mm, opening 4e-05 m>, <Sieve, designation 0.036 mm, opening 3.6e-05 m>]

  List containing all of the individual `Sieve` objects, on the ISO 3310-1:2016 R20 series only, ordered from largest openings to smallest.

  References

  [1]

  ISO 3310-1:2016 - Test Sieves – Technical Requirements and Testing – Part 1: Test Sieves of Metal Wire Cloth.

fluids.particle_size_distribution.ISO_3310_1_R20_3 = [<Sieve, designation 125 mm, opening 0.125 m>, <Sieve, designation 90 mm, opening 0.09 m>, <Sieve, designation 63 mm, opening 0.063 m>, <Sieve, designation 45 mm, opening 0.045 m>, <Sieve, designation 31.5 mm, opening 0.0315 m>, <Sieve, designation 22.4 mm, opening 0.0224 m>, <Sieve, designation 16 mm, opening 0.016 m>, <Sieve, designation 11.2 mm, opening 0.0112 m>, <Sieve, designation 8 mm, opening 0.008 m>, <Sieve, designation 5.6 mm, opening 0.0056 m>, <Sieve, designation 4 mm, opening 0.004 m>, <Sieve, designation 2.8 mm, opening 0.0028 m>, <Sieve, designation 2 mm, opening 0.002 m>, <Sieve, designation 1.4 mm, opening 0.0014 m>, <Sieve, designation 1 mm, opening 0.001 m>, <Sieve, designation 0.71 mm, opening 0.00071 m>, <Sieve, designation 0.5 mm, opening 0.0005 m>, <Sieve, designation 0.355 mm, opening 0.000355 m>, <Sieve, designation 0.25 mm, opening 0.00025 m>, <Sieve, designation 0.18 mm, opening 0.00018 m>, <Sieve, designation 0.125 mm, opening 0.000125 m>, <Sieve, designation 0.09 mm, opening 9e-05 m>, <Sieve, designation 0.063 mm, opening 6.3e-05 m>, <Sieve, designation 0.045 mm, opening 4.5e-05 m>]

  List containing all of the individual `Sieve` objects, on the ISO 3310-1:2016 R20/3 series only, ordered from largest openings to smallest.

  References

  [1]

  ISO 3310-1:2016 - Test Sieves – Technical Requirements and Testing – Part 1: Test Sieves of Metal Wire Cloth.

fluids.particle_size_distribution.ISO_3310_1_R40_3 = [<Sieve, designation 125 mm, opening 0.125 m>, <Sieve, designation 106 mm, opening 0.106 m>, <Sieve, designation 90 mm, opening 0.09 m>, <Sieve, designation 75 mm, opening 0.075 m>, <Sieve, designation 63 mm, opening 0.063 m>, <Sieve, designation 53 mm, opening 0.053 m>, <Sieve, designation 45 mm, opening 0.045 m>, <Sieve, designation 37.5 mm, opening 0.0375 m>, <Sieve, designation 31.5 mm, opening 0.0315 m>, <Sieve, designation 26.5 mm, opening 0.0265 m>, <Sieve, designation 22.4 mm, opening 0.0224 m>, <Sieve, designation 19 mm, opening 0.019 m>, <Sieve, designation 16 mm, opening 0.016 m>, <Sieve, designation 13.2 mm, opening 0.0132 m>, <Sieve, designation 11.2 mm, opening 0.0112 m>, <Sieve, designation 9.5 mm, opening 0.0095 m>, <Sieve, designation 8 mm, opening 0.008 m>, <Sieve, designation 6.7 mm, opening 0.0067 m>, <Sieve, designation 5.6 mm, opening 0.0056 m>, <Sieve, designation 4.75 mm, opening 0.00475 m>, <Sieve, designation 4 mm, opening 0.004 m>, <Sieve, designation 3.35 mm, opening 0.00335 m>, <Sieve, designation 2.8 mm, opening 0.0028 m>, <Sieve, designation 2.36 mm, opening 0.00236 m>, <Sieve, designation 2 mm, opening 0.002 m>, <Sieve, designation 1.7 mm, opening 0.0017 m>, <Sieve, designation 1.4 mm, opening 0.0014 m>, <Sieve, designation 1.18 mm, opening 0.00118 m>, <Sieve, designation 1 mm, opening 0.001 m>, <Sieve, designation 0.85 mm, opening 0.00085 m>, <Sieve, designation 0.71 mm, opening 0.00071 m>, <Sieve, designation 0.6 mm, opening 0.0006 m>, <Sieve, designation 0.5 mm, opening 0.0005 m>, <Sieve, designation 0.425 mm, opening 0.000425 m>, <Sieve, designation 0.355 mm, opening 0.000355 m>, <Sieve, designation 0.3 mm, opening 0.0003 m>, <Sieve, designation 0.25 mm, opening 0.00025 m>, <Sieve, designation 0.212 mm, opening 0.000212 m>, <Sieve, designation 0.18 mm, opening 0.00018 m>, <Sieve, designation 0.15 mm, opening 0.00015 m>, <Sieve, designation 0.125 mm, opening 0.000125 m>, <Sieve, designation 0.106 mm, opening 0.000106 m>, <Sieve, designation 0.09 mm, opening 9e-05 m>, <Sieve, designation 0.075 mm, opening 7.5e-05 m>, <Sieve, designation 0.063 mm, opening 6.3e-05 m>, <Sieve, designation 0.053 mm, opening 5.3e-05 m>, <Sieve, designation 0.045 mm, opening 4.5e-05 m>, <Sieve, designation 0.038 mm, opening 3.8e-05 m>]

  List containing all of the individual `Sieve` objects, on the ISO 3310-1:2016 R40/3 series only, ordered from largest openings to smallest.

  References

  [1]

  ISO 3310-1:2016 - Test Sieves – Technical Requirements and Testing – Part 1: Test Sieves of Metal Wire Cloth.

fluids.particle_size_distribution.ISO_3310_1_R10 = [<Sieve, designation 0.036 mm, opening 3.6e-05 m>, <Sieve, designation 0.032 mm, opening 3.2e-05 m>, <Sieve, designation 0.025 mm, opening 2.5e-05 m>, <Sieve, designation 0.02 mm, opening 2e-05 m>]

  List containing all of the individual `Sieve` objects, on the ISO 3310-1:2016 R10 series only, ordered from largest openings to smallest.

  References

  [1]

  ISO 3310-1:2016 - Test Sieves – Technical Requirements and Testing – Part 1: Test Sieves of Metal Wire Cloth.

## Point Spacing

fluids.particle_size_distribution.psd_spacing(d_min=None, d_max=None, pts=20, method='logarithmic')

  Create a particle spacing mesh in one of several ways for use in modeling discrete particle size distributions. The allowable meshes are ‘linear’, ‘logarithmic’, a geometric series specified by a Renard number such as ‘R10’, or the meshes available in one of several sieve standards.

  Parameters:
    d_min `python:float`, `optional`

      The minimum diameter at which the mesh starts, [m]

    d_max `python:float`, `optional`

      The maximum diameter at which the mesh ends, [m]

    pts `python:int`, `optional`

      The number of points to return for the mesh (note this is not respected by sieve meshes), [-]

    method `python:str`, `optional`

      Either ‘linear’, ‘logarithmic’, a Renard number like ‘R10’ or ‘R5’ or ‘R2.5’, or one of the sieve standards ‘ISO 3310-1 R40/3’, ‘ISO 3310-1 R20’, ‘ISO 3310-1 R20/3’, ‘ISO 3310-1’, ‘ISO 3310-1 R10’, ‘ASTM E11’, [-]

  Returns:
    ds `python:list`[`python:float`]

      The generated mesh diameters, [m]

  Notes

  Note that when specifying a Renard series, only one of d_min or d_max can be respected! Provide only one of those numbers.

  Note that when specifying a sieve standard the number of points is not respected!

  References

  [1]

  ASTM E11 - 17 - Standard Specification for Woven Wire Test Sieve Cloth and Test Sieves.

  [2]

  ISO 3310-1:2016 - Test Sieves – Technical Requirements and Testing – Part 1: Test Sieves of Metal Wire Cloth.

  Examples

      >>> psd_spacing(d_min=5e-5, d_max=5e-4, method='ISO 3310-1 R20/3')
      [6.3e-05, 9e-05, 0.000125, 0.00018, 0.00025, 0.000355, 0.0005]