flory


Nameflory JSON
Version 0.2.0 PyPI version JSON
download
home_pageNone
SummaryPython package for finding coexisting phases in multicomponent mixtures
upload_time2024-09-09 14:29:34
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseMIT License
keywords physics phase-separation free-energy
VCS
bugtrack_url
requirements numba numpy scipy tqdm
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # flory

[![Tests](https://github.com/qiangyicheng/flory/actions/workflows/python-package.yml/badge.svg)](https://github.com/qiangyicheng/flory/actions/workflows/python-package.yml)
[![Codecov](https://codecov.io/github/qiangyicheng/flory/graph/badge.svg?token=YF3K9ST8XQ)](https://codecov.io/github/qiangyicheng/flory)
[![Documentation Status](https://readthedocs.org/projects/flory/badge/?version=latest)](https://flory.readthedocs.io/en/latest/?badge=latest)
[![PyPI version](https://badge.fury.io/py/flory.svg)](https://badge.fury.io/py/flory)
[![Conda Version](https://img.shields.io/conda/vn/conda-forge/flory.svg)](https://anaconda.org/conda-forge/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`:

```bash
pip install flory
```

As an alternative, you can install `flory` through [conda](https://docs.conda.io/en/latest/) using the [conda-forge](https://conda-forge.org/) channel:

```bash
conda install -c conda-forge flory
```

Usage
-----
The following example determines the coexisting phases of a binary mixture with Flory-Huggins free energy:

```python
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:

```python
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:
```python
# calculate the chemical potentials of the coexisting phases
mus = fh.chemical_potentials(phases.fractions)
```

More information
----------------
* See examples in [examples folder](https://github.com/qiangyicheng/flory/tree/main/examples)
* [Full documentation on readthedocs](https://flory.readthedocs.io/)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "flory",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "physics, phase-separation, free-energy",
    "author": null,
    "author_email": "Yicheng Qiang <yicheng.qiang@ds.mpg.de>",
    "download_url": "https://files.pythonhosted.org/packages/07/61/280f1c7bfaa191f01bae54bf15468d04b769e32ad86c9b4e6fa09e69bbe0/flory-0.2.0.tar.gz",
    "platform": null,
    "description": "# flory\n\n[![Tests](https://github.com/qiangyicheng/flory/actions/workflows/python-package.yml/badge.svg)](https://github.com/qiangyicheng/flory/actions/workflows/python-package.yml)\n[![Codecov](https://codecov.io/github/qiangyicheng/flory/graph/badge.svg?token=YF3K9ST8XQ)](https://codecov.io/github/qiangyicheng/flory)\n[![Documentation Status](https://readthedocs.org/projects/flory/badge/?version=latest)](https://flory.readthedocs.io/en/latest/?badge=latest)\n[![PyPI version](https://badge.fury.io/py/flory.svg)](https://badge.fury.io/py/flory)\n[![Conda Version](https://img.shields.io/conda/vn/conda-forge/flory.svg)](https://anaconda.org/conda-forge/flory)\n\n`flory` is a Python package for analyzing field theories of multicomponent mixtures.\nIn 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.\n`flory` supports finding coexisting phases with an arbitrary number of components.\nThe associated average free energy density of the system reads\n\n$$\\bar{f}({N_\\mathrm{P}}, \\{J_p\\}, \\{\\phi_{p,i}\\}) = \\sum_{p=1}^{{N_\\mathrm{P}}} J_p f(\\{\\phi_{p,i}\\}) \\; ,$$\n\nwhere $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$.\n\n`flory` supports different forms of interaction, entropy, ensemble, and constraints to describe the free energy of phases.\nFor example, with the commonly used Flory-Huggins free energy, the free energy density of each homogeneous phase reads\n\n$$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 \\; ,$$\n\nwhere $\\chi_{ij}$ is the Flory-Huggins interaction parameter between component $i$ and $j$, and $l_i$ is the relative molecular size of component $i$.\nGiven 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.\n\nInstallation\n------------\n`flory` is available on `pypi`, so you should be able to install it through `pip`:\n\n```bash\npip install flory\n```\n\nAs an alternative, you can install `flory` through [conda](https://docs.conda.io/en/latest/) using the [conda-forge](https://conda-forge.org/) channel:\n\n```bash\nconda install -c conda-forge flory\n```\n\nUsage\n-----\nThe following example determines the coexisting phases of a binary mixture with Flory-Huggins free energy:\n\n```python\nimport flory\n\nnum_comp = 2                    # Set number of components\nchis = [[0, 4.0], [4.0, 0]]     # Set the \\chi matrix\nphi_means = [0.5, 0.5]          # Set the average volume fractions\n\n# obtain coexisting phases\nphases = flory.find_coexisting_phases(num_comp, chis, phi_means)\n```\n\nIt is equivalent to a more advanced example:\n\n```python\nimport flory\n\nnum_comp = 2                    # Set number of components\nchis = [[0, 4.0], [4.0, 0]]     # Set the \\chi matrix\nphi_means = [0.5, 0.5]          # Set the average volume fractions\n\n# create a free energy\nfh = flory.FloryHuggins(num_comp, chis)\n# create a ensemble\nensemble = flory.CanonicalEnsemble(num_comp, phi_means)\n# construct a finder from interaction, entropy and ensemble\nfinder = flory.CoexistingPhasesFinder(fh.interaction, fh.entropy, ensemble)\n# obtain phases by clustering compartments \nphases = finder.run().get_clusters()\n```\n\nThe free energy instance provides more tools for analysis, such as:\n```python\n# calculate the chemical potentials of the coexisting phases\nmus = fh.chemical_potentials(phases.fractions)\n```\n\nMore information\n----------------\n* See examples in [examples folder](https://github.com/qiangyicheng/flory/tree/main/examples)\n* [Full documentation on readthedocs](https://flory.readthedocs.io/)\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "Python package for finding coexisting phases in multicomponent mixtures",
    "version": "0.2.0",
    "project_urls": {
        "documentation": "https://flory.readthedocs.io",
        "homepage": "https://github.com/qiangyicheng/flory",
        "repository": "https://github.com/qiangyicheng/flory"
    },
    "split_keywords": [
        "physics",
        " phase-separation",
        " free-energy"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1bbda15431e349aab971f2960a544673a504477942d237333eb032b84551855a",
                "md5": "eb08f7da10977272546a6550fa98d6cb",
                "sha256": "8f2545e5dd2ff76550ece2e5f8c71a726e27a9d6e4c3530cf4dafe2e9329c0da"
            },
            "downloads": -1,
            "filename": "flory-0.2.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "eb08f7da10977272546a6550fa98d6cb",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 53200,
            "upload_time": "2024-09-09T14:29:32",
            "upload_time_iso_8601": "2024-09-09T14:29:32.860511Z",
            "url": "https://files.pythonhosted.org/packages/1b/bd/a15431e349aab971f2960a544673a504477942d237333eb032b84551855a/flory-0.2.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0761280f1c7bfaa191f01bae54bf15468d04b769e32ad86c9b4e6fa09e69bbe0",
                "md5": "b0c55846566b8b6a46f69cf0e99a592d",
                "sha256": "b4c41f96db3ceaeef0954a826de0db0e470ff9b66e69f3c4c265aaad40aee496"
            },
            "downloads": -1,
            "filename": "flory-0.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "b0c55846566b8b6a46f69cf0e99a592d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 126371,
            "upload_time": "2024-09-09T14:29:34",
            "upload_time_iso_8601": "2024-09-09T14:29:34.012050Z",
            "url": "https://files.pythonhosted.org/packages/07/61/280f1c7bfaa191f01bae54bf15468d04b769e32ad86c9b4e6fa09e69bbe0/flory-0.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-09-09 14:29:34",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "qiangyicheng",
    "github_project": "flory",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "numba",
            "specs": [
                [
                    ">=",
                    "0.57"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    ">=",
                    "1.22"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": [
                [
                    ">=",
                    "1.7"
                ]
            ]
        },
        {
            "name": "tqdm",
            "specs": [
                [
                    ">=",
                    "4.60"
                ]
            ]
        }
    ],
    "lcname": "flory"
}
        
Elapsed time: 0.33516s