Skip to main content

Analysis and synthesis tools for OCCAM hPF simulations

Project description

OccamTools · Build Status Codacy Badge codecov License: GPL v3 PyPI version

Analysis and synthesis tools for OCCAM molecular dynamics/hybrid particle-field simulations.

Input to OCCAM consists mainly of three file types; fort.1 (simulation metadata), fort.3 (particle and bond parameters), and fort.5 (positions and bond structure). The output from the run is a fort.8 file, adhering to the .xyz file format. The occamtools python package provides a reader for these file formats (both input and output) and generates a single object containing all the information about the simulation, making analysis of simulation runs and comparison between runs easier.

Installation

Install by (requires python >= 3.6)

> pip install occamtools

Usage

Loading data · Loading simulation data is done by

import numpy as np
from occamtools import OccamData

data = OccamData('your/file/or/directory/here')

where the data object now holds all information about the simulation run, e.g. print what kinds of particles a simulation consists of

print('Simulation consists of...')
for type_name in data.type_dict:
    num_type = sum(data.type == data.type_dict[type_name])
    print(f'  - {num_type} particles of type {type_name}')

# Simulation consists of...
#   - 400 particles of type H
#   - 100 particles of type C
#   - 250 particles of type Ar
#   ...

or make a simple plot of particles in a section of the simulation box diffusing (requires pip install asciichartpy)

from asciichartpy import plot

indices = (data.x[0, :] > 20.0) & (data.x[0, :] < 25.0)
diffused = data.x[-1, indices]
bins, hist = np.histogram(diffused)
print(plot(bins.tolist(), hist.tolist()))

# 9.00  ┤  ╭─╮
# 8.00  ┤  │ ╰╮
# 7.00  ┤  │  │
# 6.00  ┤ ╭╯  ╰╮
# 5.00  ┤ │    ╰╮
# 4.00  ┤ │     │
# 3.00  ┤╭╯     │
# 2.00  ┤│      ╰╮
# 1.00  ┼╯       ╰

or plot the deviations of the total kinetic energy from the mean over the simulation run (again requires pip install asciichartpy)

kinetic_energy_deviations = data.kinetic_energy - np.mean(data.kinetic_energy)
print(plot(kinetic_energy_deviations.tolist()))

#  60.53  ┤            ╭╮
#  50.62  ┤            ││  ╭╮╭╮
#  40.71  ┤            ││  ││││              ╭╮
#  30.81  ┤            ││  ││││              ││     ╭╮    ╭─
#  20.90  ┤ ╭╮         ││  ││││    ╭─╮       ││     ││    │
#  10.99  ┤ ││ ╭─╮ ╭╮ ╭╯│  ││││╭╮  │ │ ╭╮    ││     ││    │
#  10.09  ┤ ││ │ │ ││ │ │  │││││╰╮ │ ╰╮││    ││ ╭╮  ││╭╮╭╮│
#   0.18  ┼╮││ │ │ ││ │ ╰╮ │││╰╯ │ │  ╰╯│╭╮  │╰╮││╭╮│││││││
# -00.73  ┤│││ │ │ ││ │  ╰─╯││   │╭╯    ││╰──╯ ╰╯││││││││││
# -10.64  ┤│││╭╯ │ ││╭╯     ││   ││     ╰╯       ││││││││╰╯
# -20.54  ┤││╰╯  │ │╰╯      ╰╯   ╰╯              ││││││╰╯
# -30.45  ┤╰╯    ╰─╯                             ││││╰╯
# -40.36  ┤                                      ││││
# -50.26  ┤                                      ││╰╯
# -60.17  ┤                                      ╰╯

File storage · Behind the scenes, .npy (for numpy arrays) and .json (for anything else) files are used to represent the simulation data. By default, loading a simulation run causes the saving of small (relative to the original fort.5/7/8) binary files containing the data. These are used to load from on subsequent calls. This means calls to OccamData.load('your/file/here') of OccamData('your/file/here') will be significantly faster after the first call. In this specific example, a 25x speedup is achieved (but your mileage may vary). load example

Running tests with tox

Assuming python 3.7 is already installed, install separate 3.6 and 3.8 instances using pyenv by

> brew install pyenv
> pyenv install 3.6.6
> pyenv install 3.8-dev

and then inside the occamtools directory do

> git clone git@github.com:mortele/OccamTools.git occamtools
> cd occamtools
> pyenv local 3.6.6 3.8-dev
> pip3 install tox-pyenv
> tox

which will run unit tests (using pytest) with python versions 3.6, 3.7, and the 3.8 development build.

OCCAM

OCCAM is a program for Molecular Dynamics Simulations able to perform Hybrid Particle-Field (PF) Theoretical Molecular Dynamics simulations. This recent PF technique combines molecular dynamics (MD) and self consistent field theory (SCF). Read more.

occam-website

Changelog

0.3.3: Add option to not save .npy files when loading OccamData objects. Fix a bug causing errors when reading very short .xyz files. Fix a bug causing the grid size to not correctly update when using replace_in_fort3.
0.3.2: Add testing with python alpha version 3.8-dev, stream line travis integration and coverage reporting.
0.3.1: Move the bins keyword argument to histogram from an explicit argument to **kwargs handled by np.histogram.
0.3.0: Add histogram computation capabilities.
0.2.7: Add the velocity_traj flag to fort1 file reader.
0.2.6: Add proper testing for python 3.6 and 3.7 using tox.
0.2.5: Change python version required to >=3.6 (from >=3.7).
0.2.4: Add functionality for reading .xyz files with additional velocity information, as output by OCCAM when the velocity_traj flag is set in fort.1.
0.2.3: Code clean-up.
0.2.2: Extend repace_in_fort3 to allow for changing compressibility and non-bonded interactions. Fix a bug causing new particle types added to break the chi matrix when writing fort.3 files.
0.2.1: Update the __all__ variable of __init__.py to reflect newly added classes and methods.
0.2.0: Add functionality for editing fort.3 files (in-place or creating new ones).
0.1.0: Add functionality for editing fort.1 files (in-place or creating new ones).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for occamtools, version 0.3.3
Filename, size File type Python version Upload date Hashes
Filename, size occamtools-0.3.3.tar.gz (74.4 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page