chemistrylab.extract_algorithms package

chemistrylab.extract_algorithms.separate module

chemistrylab.extract_algorithms.separate.map_to_state(volumes, positions, width, colors, x=array([0., 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29, 0.3, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39, 0.4, 0.41, 0.42, 0.43, 0.44, 0.45, 0.46, 0.47, 0.48, 0.49, 0.5, 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.57, 0.58, 0.59, 0.6, 0.61, 0.62, 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69, 0.7, 0.71, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, 0.79, 0.8, 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89, 0.9, 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99], dtype=float32))[source]

Uses the position and variance of each solvent to stochastically create a layer-view of the vessel

Parameters:
  • volumes (np.ndarray) – The volume of each solvent

  • positions (np.ndarray) – The current positions of the solvent layers in the vessel

  • width (float) – Width of the gaussians representing solvent layer probabilities

  • colors (np.ndarray) – The color of each solvent

Returns:

  • The solvent at each layer position (0.65 for air)

  • The index of the solvent at each position (len(positions)-1 for air)

Return type:

Tuple[np.ndarray]

Algorithm:

  1. Discretize the vessel into 100 layers each with one unit of volume

  2. Quantize the volumes into units of size sum(v)/100. (Round down)

  3. Stochastically add extra volume units to account for rounding down. (Ex 1.2 units should be 80% chance of 1 unit and 20% chance of 2)

  4. For each of the quantized layers, gather the height of each gaussian at that layer position and sample a solvent proportional to this height
    1. The solvent distributions don’t add up to 1 so you have to normalize.

    2. The distributions are more ballparks so you have to keep track of how many units you placed, and set the probability of the layer having a solvent to zero if all the units have already been placed

chemistrylab.extract_algorithms.separate.mix(v, Vprev, v_solute, layer_pos, T0, density, Spol, Lpol, n_dissolved, dT)[source]

Calculates the positions and variances of solvent layers in a vessel, as well as the new solute amounts, based on the given inputs.

Parameters:
  • v (np.ndarray) – The volume of each solvent

  • Vprev (np.ndarray) – The volume of each solvent on the previous iteration

  • v_solute (np.ndarray) – The specific volume of each solute (litres per mol)

  • layer_pos (np.ndarray) – The current positions of the solvent layers in the vessel

  • T0 (np.ndarray) – A measure of how long the solution has settled (0 is fully mixed)

  • density (np.ndarray) – The density of each solvent

  • Spol (np.ndarray) – The relative polarities of the solutes

  • Lpol (np.ndarray) – The relative polarities of the solvents

  • n_dissolved (np.ndarray) – The current amounts of solutes in each solvent layer (2D array)

  • dT (float) – The time value assigned to a fully mixed solution

Returns:

  • layers_position: 1D array with the new positions of the solvent layers in the vessel

  • layers_volume: The volume of each layer adjusted to how much solute is dissolved in it

  • layers_settle_time: 1D array representing how far along settling is for each layer

  • new_solute_amount: 1D array with the new amounts of solutes in each solvent layer

  • var_layer: Modified layer variances which account for the extra volume due to dissolved solutes

Return type:

Tuple[np.ndarray]

Algorithm:

  1. Calculate change in time (run time backwards for mixing, and forwards for settling, T=0 is fully mixed)

  2. Determine equilibrium values for dissolved amounts using polarity

  3. Scale solute amounts between fully mixed and equilibrium using the time component

  4. Use the new dissolved amounts to adjust layer volumes

  5. Use the time variable to determine how much the layers have pushed eachother apart.

Module contents