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:
Discretize the vessel into 100 layers each with one unit of volume
Quantize the volumes into units of size sum(v)/100. (Round down)
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)
- For each of the quantized layers, gather the height of each gaussian at that layer position and sample a solvent proportional to this height
The solvent distributions don’t add up to 1 so you have to normalize.
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:
Calculate change in time (run time backwards for mixing, and forwards for settling, T=0 is fully mixed)
Determine equilibrium values for dissolved amounts using polarity
Scale solute amounts between fully mixed and equilibrium using the time component
Use the new dissolved amounts to adjust layer volumes
Use the time variable to determine how much the layers have pushed eachother apart.