Python package for finding coexisting phases in multicomponent mixtures
Project description
flory
flory is a Python package for analyzing field theories of multicomponent mixtures.
In particular, the package provides routines to determine coexisting states numerically, which is a challenging problem since the thermodynamic coexistence conditions are many coupled non-linear equations.
flory supports finding coexisting phases with an arbitrary number of components.
The associated average free energy density of the system reads
$$\bar{f}({N_\mathrm{P}}, {J_p}, {\phi_{p,i}}) = \sum_{p=1}^{{N_\mathrm{P}}} J_p f({\phi_{p,i}}) ,$$
where $N_\mathrm{C}$ is the number of components, $N_\mathrm{P}$ is the number of phases, $J_p$ is the fraction of the system volume occupied by phase $p$, and $\phi_{p,i}$ is the volume fraction of component $i$ in phase $p$.
flory supports different forms of interaction, entropy, ensemble, and constraints to describe the free energy of phases.
For example, with the commonly used Flory-Huggins free energy, the free energy density of each homogeneous phase reads
$$f({\phi_i}) = \frac{1}{2}\sum_{i,j=1}^{N_\mathrm{C}} \chi_{ij} \phi_i \phi_j + \sum_{i=1}^{N_\mathrm{C}} \frac{\phi_i}{l_i} \ln \phi_i ,$$
where $\chi_{ij}$ is the Flory-Huggins interaction parameter between component $i$ and $j$, and $l_i$ is the relative molecular size of component $i$.
Given an interaction matrix $\chi_{ij}$, average volume fractions of all components across the system $\bar{\phi}_i$, and the relative molecule sizes $l_i$, flory provides tools to find the coexisting phases in equilibrium.
Installation
flory is available on pypi, so you should be able to install it through pip:
pip install flory
As an alternative, you can install flory through conda using the conda-forge channel:
conda install -c conda-forge flory
Optional dependencies
By default, only the minimal set of dependencies of flory package will be installed. To install all dependencies, run:
pip install 'flory[dev]'
You can also select the optional dependencies, such as example, test or doc. For example, you can install the package with the optional dependencies only for tests:
pip install 'flory[test]'
If you are using conda, consider install the optional dependencies directly:
conda install -c conda-forge --file https://raw.githubusercontent.com/qiangyicheng/flory/main/examples/requirements.txt
conda install -c conda-forge --file https://raw.githubusercontent.com/qiangyicheng/flory/main/tests/requirements.txt
conda install -c conda-forge --file https://raw.githubusercontent.com/qiangyicheng/flory/main/docs/requirements.txt
Test installation
If the optional dependencies for tests are installed, you can run tests in root directory of the package with pytest. By default, some slow tests are skipped. You can run them with the --runslow option:
pytest --runslow
Usage
The following example determines the coexisting phases of a binary mixture with Flory-Huggins free energy:
import flory
num_comp = 2 # Set number of components
chis = [[0, 4.0], [4.0, 0]] # Set the \chi matrix
phi_means = [0.5, 0.5] # Set the average volume fractions
# obtain coexisting phases
phases = flory.find_coexisting_phases(num_comp, chis, phi_means)
It is equivalent to a more advanced example:
import flory
num_comp = 2 # Set number of components
chis = [[0, 4.0], [4.0, 0]] # Set the \chi matrix
phi_means = [0.5, 0.5] # Set the average volume fractions
# create a free energy
fh = flory.FloryHuggins(num_comp, chis)
# create a ensemble
ensemble = flory.CanonicalEnsemble(num_comp, phi_means)
# construct a finder from interaction, entropy and ensemble
finder = flory.CoexistingPhasesFinder(fh.interaction, fh.entropy, ensemble)
# obtain phases by clustering compartments
phases = finder.run().get_clusters()
The free energy instance provides more tools for analysis, such as:
# calculate the chemical potentials of the coexisting phases
mus = fh.chemical_potentials(phases.fractions)
More information
- See examples in examples folder
- Full documentation on readthedocs
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flory-0.3.1.tar.gz.
File metadata
- Download URL: flory-0.3.1.tar.gz
- Upload date:
- Size: 140.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64a329db0d2fa8cb5078ff8bd51eb9b779b1217d8e081ab129b2ffcd1f7c3981
|
|
| MD5 |
f6d0d3cd467e394788d16c5cc6b8f2ed
|
|
| BLAKE2b-256 |
eea0bcc83fa1576dba2c32f84577be7131c9db30c11be85e1eabb5c6eada4c55
|
File details
Details for the file flory-0.3.1-py3-none-any.whl.
File metadata
- Download URL: flory-0.3.1-py3-none-any.whl
- Upload date:
- Size: 55.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
675c52aaaf59c4e00397121d836752f3c487f9e0aad7cc1978eb77617250f9bb
|
|
| MD5 |
ffed59e9d9fe3ee2a44773d1b59e723d
|
|
| BLAKE2b-256 |
1a5c62d46f2cdcbc2958a19ce6a2f529d2c9934a844247e09e155502b40bff50
|