#+TITLE: Nearest P/I Environment Analysis for Li₃PS₄–LiI Glasses #+AUTHOR: Minami Sakuma #+OPTIONS: toc:2 num:t * Overview This repository contains a Python program for analyzing the local environments of Li⁺ ions in Li₃PS₄–LiI glass trajectories. For each Li⁺ ion, the program calculates the distances to the nearest P atom and I⁻ ion under periodic boundary conditions. It then determines whether the Li⁺ ion is closer to P or I⁻. The following two quantities are calculated for each composition: - The P fraction in the entire system: P / (P + I) - The fraction of Li⁺ ions whose nearest center is P: N_{Li-near-P} / N_{Li} The second quantity is calculated for each molecular-dynamics step and then averaged over all steps. * Target System The target system is Li₃PS₄–LiI glass. The following compositions are included in this repository: - 80Li₃PS₄–20LiI - 70Li₃PS₄–30LiI - 60Li₃PS₄–40LiI - 50Li₃PS₄–50LiI * Analysis Procedure For each molecular-dynamics step, the program performs the following operations: 1. Read the coordinates of Li⁺, P, S, and I⁻. 2. Calculate all Li⁺–P distances under periodic boundary conditions. 3. Calculate all Li⁺–I⁻ distances under periodic boundary conditions. 4. Identify the nearest P atom and I⁻ ion for each Li⁺ ion. 5. Classify each Li⁺ ion according to whether P or I⁻ is closer. 6. Calculate the fraction of Li⁺ ions whose nearest center is P. 7. Average the fraction over all simulation steps. The minimum-image convention is used to calculate distances under periodic boundary conditions. * Requirements - Python 3 - NumPy - Matplotlib The required Python packages can be installed using: #+BEGIN_SRC shell pip install numpy matplotlib #+END_SRC * Repository Contents #+BEGIN_EXAMPLE . ├── calc_share.py ├── 050Li3PS4-050LiI_thin100.lammpstrj ├── 060Li3PS4-040LiI_thin100.lammpstrj ├── 070Li3PS4-030LiI_thin100.lammpstrj ├── 080Li3PS4-020LiI_thin100.lammpstrj ├── Readme.org └── .gitignore #+END_EXAMPLE * Usage Run the program by specifying one or more trajectory files with the =-i= option: #+BEGIN_SRC shell python calc_share.py -i \ 080Li3PS4-020LiI_thin100.lammpstrj \ 070Li3PS4-030LiI_thin100.lammpstrj \ 060Li3PS4-040LiI_thin100.lammpstrj \ 050Li3PS4-050LiI_thin100.lammpstrj #+END_SRC A wildcard can also be used: #+BEGIN_SRC shell python calc_share.py -i *.lammpstrj #+END_SRC * Output The program generates a plot containing the following quantities: - Blue line: P / (P + I) in the entire system - Green line: fraction of Li⁺ ions whose nearest center is P, averaged over all simulation steps The plot is saved as: #+BEGIN_EXAMPLE voronoi_count_diff.pdf #+END_EXAMPLE * Expected Trajectory Format The current parser assumes a specific LAMMPS trajectory format: - Each atom record contains six columns. - The third column contains the element name: Li, P, S, or I. - The fourth to sixth columns contain the atomic coordinates. - The simulation cell is orthorhombic. - The number and order of header fields are fixed for every frame. If the trajectory format differs from these assumptions, the data-loading section of =calc_share.py= must be modified. * Notes - Li⁺ ions for which the nearest P and I⁻ distances are exactly equal are excluded from both counts in the current implementation. - This analysis is based on nearest-neighbor distances and is not a rigorous Voronoi tessellation. - The local P fraction around Li⁺ should be interpreted by comparison with the P / (P + I) fraction in the entire system. - The current code assumes that both P and I⁻ are present in every trajectory.