package for PFC (phase field crystal) simulations
Project description
PFC simulation in python
created by michael in 2022/04
pfc_util is a python package for PFC (phase field crystal) simulations.
Dependencies
numpy
scipy
matplotlib
pyfftw
torusgrid
rich
Installation
Install via pip:
pip install pfc-util
Modules
pfc_util.core
- Core module; definitions of PFC free energy functional, state functions, as well as minimizers
pfc_util.extra
- Extensions to vanilla PFC. Currently includes pfc6
, which is a 6th-order generalization to the PFC functional
pfc_util.toolkit
- Static preminimized solid/liquid profiles & utility functions.
Minimizers
The package provides three main means of minimizing/evolving a PFC system:
Constant chemical potential - The grand potential \(\Omega \equiv F - \mu \int d\mathbf{r} \psi\) is minimized with fixed \(\mu\)
Stress relaxer - The grand potential density \(\omega \equiv \Omega / V\) is minimized with respect to the density field and system size with fixed \(\mu\)
Conserved dynamics - The free energy \(F\) is minimized with fixed \(\bar\psi\)
Example Code Snippet
The following code snippet will retrieve a preminimized solid unit cell, evolve
it under \(\epsilon=0.05\) and \(\mu=0.08\) until \(\bar\psi\) barely changes, and save the newly minimized
unit cell to solid_eps0.05_mu0.08.field
import pfc_util as pfc
import torusgrid as tg
'''Get a preminimized solid profile at epsilon = 0.1'''
solid = pfc.toolkit.get_unit_cell(eps='0.1')
'''Minimize this profile at epsilon = 0.2 and mu = 0.26'''
pfc.ConstantMuMinimizer(solid, dt=0.001, eps=0.05, mu=0.08).run(
n_steps=31, # n_steps means the number of evolution steps between hook calls
# hooks are invoked to update display, monitor values, etc
hooks= (
tg.dynamics.Display() # add display capability
+ tg.dynamics.Panel() # add a panel to live display
+ tg.dynamics.MonitorValues(
{'psibar': lambda e: e.field.psi.mean()},
period=8
) # tell the minimizer that psi.mean() should be monitored and stored as "psibar"
# here e refers to the minimizer instance
# period = 8 means that the values are logged every 8 hook calls
# so in this case we would be calculating the values every 31*8 = 248 time steps
+ tg.dynamics.Text('psibar={psibar:.8f}')
+ tg.dynamics.DetectSlow(
'psibar', rtol=1e-9, atol=0, period=8, patience=200
) # make the minimizer stop if psibar varies sufficiently slowly
)
)
tg.save(solid, './solid_eps0.05_mu0.08.field') # save the minimized field
Project details
Release history Release notifications | RSS feed
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
File details
Details for the file pfc_util-0.4.4.tar.gz
.
File metadata
- Download URL: pfc_util-0.4.4.tar.gz
- Upload date:
- Size: 95.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 63040d4157e7b4a067af2271a6135015fc575b19d85c89149b6ab3c49a5e6ec6 |
|
MD5 | 5d4adcc75e5eb9d75e03db0df9622aa0 |
|
BLAKE2b-256 | 7489e8f9af60d3933b7d2af6defe64d7cc659101a6fdf1b29296274440b727ea |
File details
Details for the file pfc_util-0.4.4-py3-none-any.whl
.
File metadata
- Download URL: pfc_util-0.4.4-py3-none-any.whl
- Upload date:
- Size: 119.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7424b8dadb1602e5515b36ed1969b2cc3669d924caa916c71081dfabe13edcb0 |
|
MD5 | 347510b486f8a28c987c6116053ce2fb |
|
BLAKE2b-256 | dcbd1573c95aff017faa588f06df7d1e2d52840f9db1ee0b83ac3fb86e10e914 |