Skip to main content

Python package for finding coexisting phases in multicomponent mixtures

Project description

flory

Tests Codecov Documentation Status PyPI version Conda Version DOI

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

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

flory-0.3.1.tar.gz (140.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flory-0.3.1-py3-none-any.whl (55.7 kB view details)

Uploaded Python 3

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

Hashes for flory-0.3.1.tar.gz
Algorithm Hash digest
SHA256 64a329db0d2fa8cb5078ff8bd51eb9b779b1217d8e081ab129b2ffcd1f7c3981
MD5 f6d0d3cd467e394788d16c5cc6b8f2ed
BLAKE2b-256 eea0bcc83fa1576dba2c32f84577be7131c9db30c11be85e1eabb5c6eada4c55

See more details on using hashes here.

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

Hashes for flory-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 675c52aaaf59c4e00397121d836752f3c487f9e0aad7cc1978eb77617250f9bb
MD5 ffed59e9d9fe3ee2a44773d1b59e723d
BLAKE2b-256 1a5c62d46f2cdcbc2958a19ce6a2f529d2c9934a844247e09e155502b40bff50

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page