CRYSTALpytools is an open source Python project available on GitHub that implements a user-friendly interface to the Crystal code for quantum-mechanical condensed matter simulations. CRYSTALpytools provides functionalities to: i) write and read Crystal input and output files for a range of calculations (single-point, electronic structure, geometry optimization, harmonic and quasi-harmonic lattice dynamics, elastic tensor evaluation, topological analysis of the electron density, electron transport, and others); ii) extract relevant information; iii) create workflows; iv) post-process computed quantities, and v) plot results in a variety of styles for rapid and precise visual analysis. Furthermore, CRYSTALpytools allows the user to translate Crystal objects (the central data structure of the project) to and from the Structure and Atoms objects of the pymatgen and ASE libraries, respectively. These tools can be used to create, manipulate and visualise complicated structures and write them efficiently to Crystal input files. Jupyter Notebooks have also been developed for the less Python savvy users to guide them in the use of CRYSTALpytools through a user-friendly graphical interface with predefined workflows to complete different specific tasks. Program summaryProgram Title: CRYSTALpytoolsCPC Library link to program files:https://doi.org/10.17632/p2bp3fsk86.1Developer's repository link:https://github.com/crystal-code-tools/CRYSTALpytoolsLicensing provisions: MITProgramming language: Python and Jupyter NotebookNature of problem: The Crystal code [1,2] is a powerful tool for the calculation of materials properties. It stands out in the condensed matter computational landscape because of the use of local basis sets, heavy parallelisation, efficient implementation of non-local Fock exchange, and extensive use of point and space symmetry. However, it currently lacks an easily programmable interface to access its input/output structure needed to be able to use Crystal calculations within computational materials science workflows. Historically, the use of Crystal in such workflows has been achieved through bespoke scripting implemented in a variety of languages which has hindered code reuse and sharing.Solution method: The CRYSTALpytools project will enable the automation of Crystal calculations in a modular code that can be co-developed by a wide community of users worldwide. It achieves this by transforming standardised input and output files into python objects and providing a suite of functionality to manipulate them. The core implementation is based on a set of data structures denoted the Crystal_objects. CRYSTALpytools, in its current implementation, contains a large variety of functions for input/output manipulation, vibrational and thermodynamic analysis, and visualisation.Additional comments including restrictions and unusual features: The exploitation of point group and space group symmetry is one of the strengths of the Crystal code, therefore, all the geometry modification functions have been developed to optimise the use of symmetry. When a structure is downloaded from a database or is modified by external code, such as pymatgen [3] or ASE [4], a symmetry analysis is performed before transforming the structure to be an optimised Crystal_object. All such objects can be directly transformed to standard structures periodic in 0, 1, 2 or 3 dimensions used by Crystal (ie: .gui or .f34 files).
Read full abstract