PoreReax is a Python package for setting up and analysing reactive molecular dynamics workflows based on ReaxFF and LAMMPS.
- Build simulation-ready LAMMPS input files from equilibrated GROMACS
structures (
.gro) - Configure multi-stage ReaxFF workflows (for example NPT/NVT/NVE)
- Sample and post-process trajectories with reusable analysis samplers
- Angle distributions
- Charge distributions
- Molecule structures
- Time evolution and density of atoms, molecules, bonds, and reactions
- Bond length distributions
- Radial distribution functions (RDFs)
- Plot sampled results with built-in plotting functions
PoreReax currently targets Python 3.12+.
Direct installation from github:
python -m pip install git+https://github.com/ProkopK/PoreReax.gitfrom porereax import Simulate
gro_lib = {"OM": "O", "OW": "O", "Si": "Si", "HW": "H", "MW": ""}
gro_charges = {"OM": -0.64, "OW": -1.1128, "Si": 1.28, "HW": 0.5564}
atom_masses = {"Si": 28.086, "O": 15.9994, "H": 2.016}
sim = Simulate(gro_lib, gro_charges, atom_masses, structure_file="system.gro")
sim.set_force_field("reax.ffield")
sim.add_sim(type="nvt", nsteps=10000, temp=300)
sim.generate()This generates files such as system.data, run_0.lmp, run_0.job, and
ana.py.
from porereax import Sample
atom_lib = {"Si": 1, "O": 2, "H": 3}
atom_masses = {"Si": 28.086, "O": 15.9994, "H": 2.016}
sampler = Sample(atom_lib, atom_masses, "run_0.lammpstrj", "run_0.bonds")
sampler.add_molecule_structure_sampling("molecule_structure")
sampler.add_charge_sampling(
"charge",
atoms=[{"atom": "O", "bonds": ["H", "H"]}],
)
sampler.add_bond_density_sampling(
"bond_density",
bonds=[{"bond": "Si-O", "bonds_B": ["H"]}],
dimension="Cartesian1D",
)
sampler.sample()Documentation is available at https://prokopk.github.io/PoreReax/ and includes:
- getting started
- simulation workflow guides
- analysis workflow guides
- API reference generated from source
This project is licensed under GPL-3.0.