A Julia package for working with crystal structures, associated data, and various file formats, with the aim of making theory development for solid state chemistry and materials science easier for everyone.
This package is written in pure Julia with minimal dependencies, so instead of pulling operations from established packages in other languages (such as scipy) they are implemented in this package. We hope that Electrum.jl can serve as a reference for both useful operations on crystal structures and well-maintained scientific software.
Electrum.jl is available in the Julia General package registry! You can add it to your environment
with the add
command in package mode:
(@v1.6+) pkg> add https://github.com/brainandforce/Electrum.jl
Or you can import the Pkg
module:
julia> Pkg.add("Electrum")
If you'd like to track a specific on this repository for development purposes, you can refer to the
repo URL and tag it with the desired branch name (here, I've used release
):
(@v1.6+) pkg> add https://github.com/brainandforce/Electrum.jl#release
julia> Pkg.add(url="https://github.com/brainandforce/Electrum.jl", rev="release")
The current development state is kept in the main
branch, and the most recent stable version is
the head of the release
branch. Specific releases for a minor version may be found by suffixing
the minor version with /release
: for instance, 0.1/release
contains the latest release version
in the 0.1 series.
Electrum.jl is tested against the most recent LTS release (currently 1.6.7) and the current stable release. Julia 1.5 and earlier are not supported.
- Reading of common file formats:
- abinit potential, density, and wavefunction outputs: tested on versions 7.10.5, 8.10.3, and 9.10.1 (current version as of last update)
- LAMMPS atomic position data: tested on 3 November 2022 release
- VASP POSCAR/CONTCAR, WAVECAR, DOSCAR, and PROCAR: tested on version 4.6
- XCrysDen XSF: tested against the official specification
- XYZ files
- CPpackage outputs: tested against the release version of CPpackage3
- Writing of common file formats:
- LAMMPS atomic position data
- XCrysDen XSF
- XYZ files
- VASP POSCAR/CONTCAR
- TOML files
- Operations on datagrids:
- Standard arithmetic operations: addition, subtraction, multiplication, division, negation...
- Broadcasting of any Julia operation with dot syntax
- FFTs and inverse FFTs on real and reciprocal space data
- Real space gradients
This project is just starting to get off the ground, but here's what we have planned:
- Reading and writing of common file formats:
- XTL files
- CIF files
- Manipulation of data grids associated with crystal structures
- Real space grid reinterpolation
- Other operations
- Working with crystal symmetry
- Converting k-point meshes to symmetry-reduced lists of weighted k-points
- Integration with AtomsBase.jl
...and more that we will decide in time! If you'd like to contibute, be sure to read the included contributing guidelines.
If your package uses Electrum.jl, we'd like to know about it - open an issue or a pull request with changes to the list of packages we know depend on Electrum.jl given below:
- DFT-raMO (not currently available in the Julia package registry)